@rtsee/ngx 0.0.109 → 0.0.110
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtsee-ngx.mjs","sources":["../../../projects/ngx/src/lib/ngx.service.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-controls/rtsee-controls.component.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-controls/rtsee-controls.component.html","../../../projects/ngx/src/lib/components/rtsee-settings/rtsee-settings.component.ts","../../../projects/ngx/src/lib/components/rtsee-settings/rtsee-settings.component.html","../../../projects/ngx/src/lib/components/rtsee-soundbar/rtsee-soundbar.component.ts","../../../projects/ngx/src/lib/components/rtsee-soundbar/rtsee-soundbar.component.html","../../../projects/ngx/src/lib/components/rtsee-peer/rtsee-peer.component.ts","../../../projects/ngx/src/lib/components/rtsee-peer/rtsee-peer.component.html","../../../projects/ngx/src/lib/components/rtsee/rtsee-conference.component.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-conference.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/services/auth.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/profile/profile.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/profile/profile.component.html","../../../projects/ngx/src/lib/common/components/preloader/preloader.component.ts","../../../projects/ngx/src/lib/common/components/preloader/preloader.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-member/chat-member.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-member/chat-member.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-members-list/chat-members-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-members-list/chat-members-list.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/text-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/text-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/textarea-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/textarea-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/checkbox-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/checkbox-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/radio-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/radio-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/number-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/number-field.component.html","../../../projects/ngx/src/lib/common/components/autocomplete/autocomplete.component.ts","../../../projects/ngx/src/lib/common/components/autocomplete/autocomplete.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/autocomplete-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/autocomplete-field.component.html","../../../projects/ngx/src/lib/common/components/recursive-select/recursive-select.component.ts","../../../projects/ngx/src/lib/common/components/recursive-select/recursive-select.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/recursive-select-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/recursive-select-field.component.html","../../../projects/ngx/src/lib/common/components/cropper/cropper.component.ts","../../../projects/ngx/src/lib/common/components/cropper/cropper.component.html","../../../projects/ngx/src/lib/common/components/uploader/uploader.component.ts","../../../projects/ngx/src/lib/common/components/uploader/uploader.component.html","../../../projects/ngx/src/lib/common/components/image-uploader/image-uploader.component.ts","../../../projects/ngx/src/lib/common/components/image-uploader/image-uploader.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/image-uploader-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/image-uploader-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/dynamic-fields-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/dynamic-fields-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/field-definition-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/field-definition-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/select-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/select-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/location-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/location-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/time-slot-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/time-slot-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/time-slots-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/time-slots-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/entity-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/entity-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/entities-list-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/entities-list-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/date-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/date-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/varchar-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/varchar-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/float-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/float-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/form-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/form-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form/form.component.ts","../../../projects/ngx/src/lib/common/components/forms/form/form.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/add-chat-member/add-chat-member.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/add-chat-member/add-chat-member.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/edit-agent-member/edit-agent-member.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/edit-agent-member/edit-agent-member.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-members.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-members.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-info/chat-info.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-info/chat-info.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-chat-info/manage-chat-info.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-chat-info/manage-chat-info.component.html","../../../projects/ngx/src/lib/services/default-images.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger-header/messenger-header.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger-header/messenger-header.component.html","../../../projects/ngx/src/lib/services/time-format-helper.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/components/message-time-and-status/message-time-and-status.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/components/message-time-and-status/message-time-and-status.component.html","../../../projects/ngx/src/lib/components/constans/common.const.ts","../../../projects/ngx/src/lib/directives/shave.directive.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chats-list/chats-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chats-list/chats-list.component.html","../../../projects/ngx/src/lib/directives/widget.directive.ts","../../../projects/ngx/src/lib/common/components/rating/rating.component.ts","../../../projects/ngx/src/lib/common/components/rating/rating.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.html","../../../projects/ngx/src/lib/common/components/cost-display/cost-display.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/media-widget/media-widget.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/media-widget/media-widget.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/agentic-text-response/agentic-text-response.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/agentic-text-response/agentic-text-response.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/rtsee-task/rtsee-task.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/rtsee-task/rtsee-task.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/workflow-task-step/workflow-task-step.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/storyteller-form-step/storyteller-form-step.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/storyteller-form-step/storyteller-form-step.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/storyteller-story-link-step/storyteller-story-link-step.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/storyteller-story-link-step/storyteller-story-link-step.component.html","../../../projects/ngx/src/lib/services/workflow-steps.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/rts-workflow/rts-workflow.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/rts-workflow/rts-workflow.component.html","../../../projects/ngx/src/lib/services/message-widgets.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/message.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/message.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/messages-list/messages-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messages-list/messages-list.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-member-suggestions/chat-member-suggestions.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-member-suggestions/chat-member-suggestions.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/tool-use-request/tool-use-request.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/tool-use-request/tool-use-request.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-suggestions/workflow-suggestions.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-input/chat-input.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-input/chat-input.component.html","../../../projects/ngx/src/lib/common/directives/viewport-observer.directive.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat/chat.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat/chat.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-profile/manage-profile.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-profile/manage-profile.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-product-snippet/payment-product-snippet.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-product-snippet/payment-product-snippet.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/services/payments.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-page/payment-page.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-page/payment-page.component.html","../../../projects/ngx/src/lib/services/gtag.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-validation-page/payment-validation-page.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-validation-page/payment-validation-page.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-plan/manage-plan.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-plan/manage-plan.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger/messenger.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger/messenger.component.html","../../../projects/ngx/src/lib/services/events-widgets.service.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/event-thumbnail/event-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/event-thumbnail/event-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-session/rtsee-events-dashboard-session.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-session/rtsee-events-dashboard-session.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/join-call/join-call.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/join-call/join-call.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation-header/presentation-header.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation-header/presentation-header.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/story-thumbnail/story-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/story-thumbnail/story-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/slide/slide.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/slide/slide.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/story-player/story-player.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/story-player/story-player.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-slides/manage-slides.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-slides/manage-slides.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-slide/manage-slide.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-slide/manage-slide.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-story.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-story.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/interactive-story-editor/story-elements-section/story-elements-section.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/interactive-story-editor/story-elements-section/story-elements-section.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/illustrator/illustrator.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/illustrator/illustrator.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/interactive-story-editor/interactive-story-editor.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/interactive-story-editor/interactive-story-editor.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-stories/manage-stories.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-stories/manage-stories.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-category/manage-category.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-category/manage-category.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-categories/manage-categories.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-categories/manage-categories.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-label/manage-label.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-label/manage-label.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-labels/manage-labels.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-labels/manage-labels.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-topic/manage-topic.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-topic/manage-topic.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-topics/manage-topics.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-topics/manage-topics.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/presentations-dashboard/presentations-dashboard.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/presentations-dashboard/presentations-dashboard.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation-settings/presentation-settings.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation-settings/presentation-settings.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-comments/rtsee-entity-comments.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-comments/rtsee-entity-comments.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-tags/rtsee-entity-tags.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-tags/rtsee-entity-tags.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rate-input/rate-input.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rate-input/rate-input.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rate-item/rate-item.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rate-item/rate-item.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rater/rater.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rater/rater.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rates-list/rates-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rates-list/rates-list.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rating-section/rating-section.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rating-section/rating-section.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-preview/rtsee-entity-preview.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-preview/rtsee-entity-preview.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/story-details/story-details.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/story-details/story-details.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation/presentation.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation/presentation.component.html","../../../projects/ngx/src/lib/components/rtsee-container/rtsee-nav/rtsee-nav.component.ts","../../../projects/ngx/src/lib/components/rtsee-container/rtsee-nav/rtsee-nav.component.html","../../../projects/ngx/src/lib/components/rtsee-container/rtsee-container.component.ts","../../../projects/ngx/src/lib/components/rtsee-container/rtsee-container.component.html","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component.ts","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component.html","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-manage/rtsee-tag-manage.component.ts","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-manage/rtsee-tag-manage.component.html","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-groups-manage/rtsee-tag-groups-manage.component.ts","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-groups-manage/rtsee-tag-groups-manage.component.html","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-group-manage/rtsee-tag-group-manage.component.ts","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-group-manage/rtsee-tag-group-manage.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/entities-configurations-list/entities-configurations-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/entities-configurations-list/entities-configurations-list.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/manage-rating-configuration/manage-rating-configuration.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/manage-rating-configuration/manage-rating-configuration.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/rating-configurations-list/rating-configurations-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/rating-configurations-list/rating-configurations-list.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/manage-entity-configuration/manage-entity-configuration.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/manage-entity-configuration/manage-entity-configuration.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/entities-list/entities-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/entities-list/entities-list.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/manage-entity/manage-entity.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/manage-entity/manage-entity.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/sign-in/sign-in.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/sign-in/sign-in.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/services/utils.service.ts","../../../projects/ngx/src/lib/components/rtsee-auth/validators/form-fields-validators.ts","../../../projects/ngx/src/lib/components/rtsee-auth/sign-up/sign-up.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/sign-up/sign-up.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/forgot-password/forgot-password.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/forgot-password/forgot-password.component.html","../../../projects/ngx/src/lib/components/enums/form.enum.ts","../../../projects/ngx/src/lib/components/rtsee-auth/reset-password/reset-password.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/reset-password/reset-password.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/privacy-policy/privacy-policy.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/privacy-policy/privacy-policy.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/auth/auth.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/auth/auth.component.html","../../../projects/ngx/src/lib/components/rtsee-peers-list/rtsee-peers-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-peers-list/rtsee-peers-list.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/models/MainMenuState.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/search/search.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/search/search.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/manage-chat/manage-chat.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/manage-chat/manage-chat.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/contacts-multiselect/contacts-multiselect.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/contacts-multiselect/contacts-multiselect.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/main-menu.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/main-menu.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/vendors/vendors.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/vendors/vendors.component.html","../../../projects/ngx/src/lib/ngx.module.ts","../../../projects/ngx/src/public-api.ts","../../../projects/ngx/src/rtsee-ngx.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxService {\n lol: string;\n constructor() {\n this.lol = 'lol';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeConference } from '@rtsee/conference';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'ngx-rtsee-controls',\n templateUrl: './rtsee-controls.component.html',\n styleUrls: ['./rtsee-controls.component.scss'],\n imports: [NgClass],\n standalone: true,\n})\nexport class RTSeeControlsComponent {\n @Input() rtsee!: RTSeeConference;\n @Input() fullScreenMode?: boolean;\n\n onPresentClicked() {\n return this.rtsee.isPresenter\n ? this.rtsee.stopScreenShare()\n : this.rtsee.startScreenShare();\n }\n}\n","<div class=\"rtsee-controls\" [ngClass]=\"{'rtsee-full-screen-controls' : fullScreenMode }\">\n <div class=\"rtsee-bottom-panel\">\n <div class=\"mic rtsee-buttons-container\">\n @if (rtsee.microphone) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"this.rtsee.disableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_none</span>\n </button>\n }\n @if (!rtsee.microphone) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\" (click)=\"this.rtsee.enableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_off</span>\n </button>\n }\n </div>\n\n <div class=\"video-camera rtsee-buttons-container\">\n @if (rtsee.camera) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.disableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam</span>\n </button>\n }\n @if (!rtsee.camera) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.enableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam_off</span>\n </button>\n }\n </div>\n <div class=\"present rtsee-buttons-container\"\n [ngClass]=\"{'rtsee-present-button-container': rtsee.isPresenter}\"\n >\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"onPresentClicked()\"\n >\n <span class=\"material-icons-outlined\">present_to_all</span>\n </button>\n </div>\n <div class=\"call-end rtsee-buttons-container\">\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.end()\"\n >\n <span class=\"material-icons-outlined\">call_end</span>\n </button>\n </div>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeConference } from '@rtsee/conference';\nimport { NgClass } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Select } from 'primeng/select';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Button } from 'primeng/button';\n\n@Component({\n selector: 'ngx-rtsee-settings',\n templateUrl: './rtsee-settings.component.html',\n styleUrls: ['./rtsee-settings.component.scss'],\n imports: [NgClass, FormsModule, Select, FloatLabel, Button],\n standalone: true,\n})\nexport class RtseeSettingsComponent implements OnInit {\n @Input() rtSee!: RTSeeConference;\n @Input() fullScreenMode!: boolean;\n constructor() {}\n\n ngOnInit(): void {\n this.refreshSelectOptions();\n }\n\n refreshSelectOptions() {\n void this.rtSee.refreshMediaDevicesList();\n }\n\n audioInputChanged() {\n this.rtSee.setAudioInputDevice();\n }\n\n audioOutputChanged() {\n this.rtSee.setAudioOutputDevice();\n }\n\n videoInputChanged() {\n this.rtSee.setVideoInputDevice();\n }\n}\n","<div class=\"rtsee-settings\" [ngClass]=\"{'rtsee-full-screen-settings' : fullScreenMode}\">\n <div class=\"rtsee-devices rtsee-form-container\">\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.audioInputDevices\"\n [(ngModel)]=\"rtSee.audioInputDeviceId\"\n (ngModelChange)=\"audioInputChanged()\"\n inputId=\"mic_input\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"mic_input\">Microphone</label>\n </p-floatlabel>\n </div>\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.audioOutputDevices\"\n [(ngModel)]=\"rtSee.audioOutputDeviceId\"\n (ngModelChange)=\"audioOutputChanged()\"\n inputId=\"audio_output\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"audio_output\">Speaker</label>\n </p-floatlabel>\n </div>\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.videoInputDevices\"\n [(ngModel)]=\"rtSee.videoInputDeviceId\"\n (ngModelChange)=\"videoInputChanged()\"\n inputId=\"video_input\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"video_input\">Camera</label>\n </p-floatlabel>\n </div>\n </div>\n\n <div class=\"rtsee-settings-footer\">\n <p-button label=\"Close\"\n (click)=\"rtSee.toggleSettings()\"\n ></p-button>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeePeerConnection } from '@rtsee/conference';\nimport { interval } from 'rxjs';\n\n@Component({\n selector: 'ngx-rtsee-soundbar',\n templateUrl: './rtsee-soundbar.component.html',\n styleUrls: ['./rtsee-soundbar.component.scss'],\n standalone: true,\n})\nexport class RtseeSoundbarComponent implements OnInit {\n intervalLength: number;\n noiceLevel: number;\n scaleOneLevel: number;\n scaleTwoLevel: number;\n scaleThreeLevel: number;\n\n @Input() peer!: RTSeePeerConnection;\n constructor() {\n this.intervalLength = 1000;\n this.noiceLevel = 0;\n this.scaleOneLevel = 0;\n this.scaleTwoLevel = 0;\n this.scaleThreeLevel = 0;\n }\n\n ngOnInit(): void {\n this.startSoundMeterListening();\n }\n\n startSoundMeterListening() {\n const step = interval(1000 / 10);\n step.subscribe(() => {\n if (!this.peer.soundMeter || !this.peer.soundMeter.level) {\n this.noiceLevel = 0;\n } else {\n this.noiceLevel = this.peer.soundMeter?.level * 100 || 0;\n }\n\n this.setSoundMeterHeights();\n });\n }\n\n setSoundMeterHeights() {\n const ZERO_LEVEL = 25;\n const SCALE_STEP = 25;\n const SCALE_ONE_TOP = ZERO_LEVEL + SCALE_STEP;\n const SCALE_TWO_TOP = SCALE_ONE_TOP + SCALE_STEP;\n\n if (!this.peer || !this.peer.soundMeter || this.noiceLevel < ZERO_LEVEL) {\n this.scaleOneLevel = 0;\n this.scaleTwoLevel = 0;\n this.scaleThreeLevel = 0;\n }\n\n const scaleOneValue = ((this.noiceLevel - ZERO_LEVEL) / SCALE_STEP) * 100;\n const scaleTwoValue =\n ((this.noiceLevel - SCALE_ONE_TOP) / SCALE_STEP) * 100;\n const scaleThreeValue =\n ((this.noiceLevel - SCALE_TWO_TOP) / SCALE_STEP) * 100;\n\n this.scaleOneLevel = scaleOneValue > 0 ? scaleOneValue : 0;\n this.scaleTwoLevel = scaleTwoValue > 0 ? scaleTwoValue : 0;\n this.scaleThreeLevel = scaleThreeValue > 0 ? scaleTwoValue : 0;\n }\n}\n","<div class=\"rtsee-soundbar\">\n <div class=\"rtsee-soundbar-scale\">\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-one\"\n [style.height.%]=\"scaleOneLevel\"\n ></div>\n </div>\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-two\"\n [style.height.%]=\"scaleTwoLevel\"\n ></div>\n </div>\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-three\"\n [style.height.%]=\"scaleThreeLevel\"\n ></div>\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport { RTSeePeerConnection } from '@rtsee/conference';\nimport { NgClass, NgIf } from '@angular/common';\nimport { RtseeSoundbarComponent } from '../rtsee-soundbar/rtsee-soundbar.component';\n\n@Component({\n selector: 'ngx-rtsee-peer',\n templateUrl: './rtsee-peer.component.html',\n imports: [NgClass, NgIf, RtseeSoundbarComponent],\n standalone: true,\n})\nexport class RtseePeerComponent implements AfterViewInit {\n intervalLength: number;\n noiceLevel: number;\n\n @ViewChild('audioOutput') audioOutput?: ElementRef;\n @ViewChild('videoOutput') videoOutput?: ElementRef;\n @Input() peer!: RTSeePeerConnection;\n\n constructor() {\n this.intervalLength = 1000;\n this.noiceLevel = 0;\n }\n\n ngAfterViewInit(): void {\n if (!this.audioOutput) {\n return;\n }\n this.peer.setAudioOutputElement(\n this.audioOutput.nativeElement as HTMLAudioElement,\n );\n }\n}\n","<div class=\"rtsee-peer\" [ngClass]=\"{\n'rtsee-peer-video-disabled': !peer.remoteVideoStream || !peer.camera\n}\">\n <div class=\"rtsee-peer-content\">\n <div class=\"rtsee-peer-photo\" *ngIf=\"!peer.camera\">\n <div class=\"rtsee-peer-photo-wrapper\">\n <div *ngIf=\"peer.imageUrl\"\n [style.background-image]=\"'url(' + peer.imageUrl + ')'\"\n class=\"rtsee-peer-photo-image\"\n ></div>\n <img *ngIf=\"!peer.imageUrl\" [src]=\"\" alt=\"peer_photo\" class=\"rtsee-peer-photo-image\">\n </div>\n <div class=\"rtsee-peer-info\">\n <p class=\"rtsee-peer-name\" *ngIf=\"peer.name\">{{peer.name}}</p>\n </div>\n </div>\n <video #videoOutput\n class=\"rtsee-peer-video\"\n [autoplay]=\"true\"\n [srcObject]=\"peer.remoteVideoStream\"\n playsinline=\"true\"\n >\n </video>\n <div class=\"rtsee-peer-soundbar\">\n <ngx-rtsee-soundbar [peer]=\"peer\"></ngx-rtsee-soundbar>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeConference } from '@rtsee/conference';\nimport { NgClass, NgIf } from '@angular/common';\nimport { RtseeSettingsComponent } from '../rtsee-settings/rtsee-settings.component';\nimport { RtseePeerComponent } from '../rtsee-peer/rtsee-peer.component';\nimport { RTSeeControlsComponent } from './rtsee-controls/rtsee-controls.component';\n\n@Component({\n selector: 'rtsee-conference',\n templateUrl: './rtsee-conference.component.html',\n imports: [\n NgClass,\n RtseeSettingsComponent,\n RtseePeerComponent,\n RTSeeControlsComponent,\n ],\n standalone: true,\n})\nexport class RTSeeConferenceComponent {\n settingsViewEnabled: boolean;\n\n @Input() rtSee!: RTSeeConference;\n constructor() {\n this.settingsViewEnabled = false;\n }\n\n toggleSettings() {\n this.settingsViewEnabled = !this.settingsViewEnabled;\n }\n\n toggleFullScreenMode() {\n this.rtSee.uiControls.toggle();\n }\n}\n","<div class=\"rtsee-conference-shell\" [ngClass]=\"{\n'rtsee-conference-shell-expanded': rtSee.uiControls.isExpanded,\n'rtsee-conference-shell-no-companions': !rtSee.rtcPeerConnections.connections?.length\n}\">\n @if (rtSee.localStream && rtSee.camera) {\n <div class=\"rtsee-local-peer\">\n <video class=\"rtsee-local-video\"\n [autoplay]=\"true\"\n [muted]=\"true\"\n [srcObject]=\"rtSee.localStream\"\n playsinline=\"true\"\n ></video>\n </div>\n }\n <div class=\"rtsee-window-controls\">\n <button type=\"button\"\n (click)=\"rtSee.toggleSettings()\"\n class=\"rtsee-window-controls-button rtsee-ripple-button\"\n >\n <span class=\"material-icons-outlined\">settings</span>\n </button>\n </div>\n @if (rtSee.settingsOpened) {\n <ngx-rtsee-settings [rtSee]=\"rtSee\" [fullScreenMode]=\"rtSee.uiControls.isExpanded\"></ngx-rtsee-settings>\n }\n @if (rtSee.screenSharePeer) {\n <div class=\"rtsee-screen-share\">\n <video [autoplay]=\"true\"\n [muted]=\"'true'\"\n [srcObject]=\"rtSee.screenSharePeer.remoteVideoStream\"\n playsinline=\"true\"\n class=\"rtsee-screen-share-video\"\n ></video>\n </div>\n }\n <div class=\"rtsee-peers\" [ngClass]=\"{\n 'rtsee-peers-alone': !rtSee.rtcPeerConnections.connections?.length,\n 'rtsee-peers-one': rtSee.rtcPeerConnections.connections?.length === 1,\n 'rtsee-peers-three-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 1\n && rtSee.rtcPeerConnections.connections.length < 4,\n 'rtsee-peers-six-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 3\n && rtSee.rtcPeerConnections.connections.length < 7,\n 'rtsee-peers-nine-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length >= 7\n }\">\n @for (peer of rtSee.rtcPeerConnections.connections; track peer.clientId) {\n <div class=\"rtsee-peer-wrapper\">\n <ngx-rtsee-peer [peer]=\"peer\"></ngx-rtsee-peer>\n </div>\n }\n </div>\n <div class=\"rtsee-peers-list\"></div>\n <div class=\"rtsee-controls-wrapper\">\n <ngx-rtsee-controls [rtsee]=\"rtSee\" [fullScreenMode]=\"rtSee.uiControls.isExpanded\"></ngx-rtsee-controls>\n </div>\n</div>\n\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n RTSeeAuth,\n IRtseeSignInRequestOptions,\n IRTSeeSignInResponse,\n IRtseeSignUpRequestOptions,\n IRTSeeSignUpResponse,\n AuthEndpointsKeys,\n RTSeeAuthConfiguration\n} from '@rtsee/auth';\n\nexport interface IRTSeeAuthRequestOptions {\n rtseeAppId?: string;\n}\n\nexport interface IRtseeForgotPasswordRequestOptions extends IRTSeeAuthRequestOptions {\n email: string;\n}\n\nexport interface IRtseeResetPasswordRequestOptions extends IRTSeeAuthRequestOptions {\n password: string;\n passwordConfirm: string;\n token: string;\n}\n\nexport interface IRTSeeForgotPasswordResponse extends IRTSeeAuthRequestOptions {\n success: boolean;\n message: string;\n}\n\nexport interface IRTSeeResetPasswordResponse extends IRTSeeAuthRequestOptions {\n success: boolean;\n message: string;\n}\n\nimport { Observable, tap } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RTSeeAuthService {\n rtseeAuth!: RTSeeAuth<any>;\n authConfiguration!: RTSeeAuthConfiguration;\n\n constructor(private http: HttpClient) {}\n\n init(auth: RTSeeAuth<any>) {\n if (this.rtseeAuth && this.authConfiguration) {\n return;\n }\n\n this.rtseeAuth = auth;\n this.authConfiguration = this.rtseeAuth.authConfiguration;\n }\n\n signIn(\n credentials: IRtseeSignInRequestOptions,\n ): Observable<IRTSeeSignInResponse> {\n return this.http\n .post<IRTSeeSignInResponse>(\n this.authConfiguration.getEndpointPathByEndpointName(\n AuthEndpointsKeys.SIGN_IN,\n ),\n {\n ...credentials,\n rtseeAppId: this.authConfiguration.rtseeAppId\n }\n )\n .pipe(tap((res) => this.rtseeAuth.authenticate(res)));\n }\n\n signUp(\n credentials: IRtseeSignUpRequestOptions,\n ): Observable<IRTSeeSignUpResponse> {\n return this.http.post<IRTSeeSignUpResponse>(\n this.authConfiguration.getEndpointPathByEndpointName(\n AuthEndpointsKeys.SIGN_UP,\n ),\n {\n ...credentials,\n rtseeAppId: this.authConfiguration.rtseeAppId\n }\n );\n }\n\n forgotPassword(\n credentials: IRtseeForgotPasswordRequestOptions,\n ): Observable<IRTSeeForgotPasswordResponse> {\n return this.http.post<IRTSeeForgotPasswordResponse>(\n this.authConfiguration.getEndpointPathByEndpointName(\n AuthEndpointsKeys.FORGOT_PASSWORD\n ),\n {\n ...credentials,\n rtseeAppId: this.authConfiguration.rtseeAppId\n }\n );\n }\n\n resetPassword(\n credentials: IRtseeResetPasswordRequestOptions,\n ): Observable<IRTSeeResetPasswordResponse> {\n return this.http.post<IRTSeeResetPasswordResponse>(\n this.authConfiguration.getEndpointPathByEndpointName(\n AuthEndpointsKeys.RESET_PASSWORD,\n ),\n {\n ...credentials,\n rtseeAppId: this.authConfiguration.rtseeAppId\n }\n );\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { IPeer, RTSeeTextLabelKeys } from '@rtsee/core';\nimport { Button } from 'primeng/button';\nimport { Message } from 'primeng/message';\nimport { RTSeeAuthService } from '../../rtsee-auth/services/auth.service';\nimport { RTSeeAuthConfiguration, AuthEndpointsKeys } from '@rtsee/auth';\nimport { Router, RouterLink } from '@angular/router';\nimport { Select } from 'primeng/select';\nimport { FormsModule } from '@angular/forms';\nimport {Divider} from \"primeng/divider\";\n@Component({\n selector: 'rtsee-profile',\n templateUrl: './profile.component.html',\n imports: [Button, Message, RouterLink, Select, FormsModule, Divider],\n standalone: true,\n})\nexport class ProfileComponent {\n authConfiguration: RTSeeAuthConfiguration;\n\n @Input() messenger!: RTSeeMessenger;\n @Input() peer?: IPeer;\n constructor(\n private authService: RTSeeAuthService,\n private router: Router,\n ) {\n this.authConfiguration = this.authService.rtseeAuth.authConfiguration;\n }\n\n setLanguage(): void {\n this.messenger.setLanguage(this.messenger.currentLanguage);\n void this.messenger.propagateLanguageChange(this.messenger.currentLanguage);\n }\n\n call() {\n if (!this.messenger.openedChat) {\n return;\n }\n void this.messenger.initializeVideoCall(this.messenger.openedChat);\n }\n\n videoCall() {\n if (!this.messenger.openedChat) {\n return;\n }\n void this.messenger.initializeVideoCall(this.messenger.openedChat);\n }\n\n logOut() {\n this.authService.rtseeAuth.logOut();\n void this.router.navigate(\n this.authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN),\n );\n setTimeout(() => {\n window.location.reload();\n }, 200);\n }\n\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rts-messenger-profile\">\n @if (!messenger.ownProfileOpened) {\n <ul class=\"rts-messenger-profile-actions\">\n <li class=\"rts-messenger-profile-actions-item\">\n <p-button\n (click)=\"call()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-phone\"\n />\n </li>\n <li class=\"rts-messenger-profile-actions-item\">\n <p-button\n (click)=\"videoCall()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-video\"\n />\n </li>\n </ul>\n }\n\n @if (messenger.ownProfileOpened && messenger.myPeer && !messenger.myPeer.isAnonymous) {\n <div class=\"rts-messenger-profile-info\">\n <div class=\"rts-messenger-profile-glass-card\">\n <p class=\"rts-messenger-profile-info-name\">{{messenger.myPeer.name}}</p>\n <div class=\"rts-messenger-profile-info-language\">\n <p class=\"rts-messenger-profile-info-language-label\">Language:</p>\n <p-select [options]=\"messenger.languageOptions\"\n [(ngModel)]=\"messenger.currentLanguage\"\n (ngModelChange)=\"setLanguage()\"\n optionLabel=\"key\"\n optionValue=\"key\"\n [placeholder]=\"messenger.labels[RTSeeTextLabelKeys.MESSANGER_LANGUAGE_PLACEHOLDER]\"\n class=\"rts-messenger-profile-info-language-select\"\n />\n </div>\n <div class=\"rts-messenger-profile-edit-btn\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.MESSENGER_EDIT_PROFILE_BTN_LABEL]\"\n (click)=\"messenger.openManageProfile()\"\n ></p-button>\n </div>\n </div>\n\n @if (messenger.myPeer.plan) {\n <p-divider></p-divider>\n <div class=\"rts-messenger-profile-glass-card\">\n <div class=\"rts-messenger-profile-plan-status\">\n <p-message severity=\"success\">\n <span>{{messenger.myPeer.plan.productName}}</span>\n </p-message>\n </div>\n <div class=\"rts-messenger-profile-manage-plan-btn\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.MANAGE_PLAN]\"\n (click)=\"messenger.openManagePlanPage()\"\n ></p-button>\n </div>\n </div>\n } @else {\n <p-divider></p-divider>\n <div class=\"rts-messenger-profile-subscribe-btn\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SUBSCRIBE_LABEL]\"\n (click)=\"messenger.openPaymentPage()\"\n ></p-button>\n </div>\n }\n </div>\n }\n\n @if (messenger.ownProfileOpened && messenger.myPeer?.isAnonymous) {\n <div class=\"rts-messenger-profile-auth\">\n <div class=\"rts-messenger-profile-anon-message\">\n @if (!messenger.currentLanguage || messenger.currentLanguage === 'eng') {\n <p-message severity=\"warn\">\n <span>This is an anonymous identity we've generated for you.</span>\n <span> </span>\n <span>You can use it to play around.</span>\n <span> </span>\n <span>But we are guilty of erasing these time after time.</span>\n <span> </span>\n <span>So please Sign Up if you're looking for something more stable :)</span>\n </p-message>\n } @else if (messenger.currentLanguage === 'ua') {\n <p-message severity=\"warn\">\n <span>Ми згенерували для вас анонімну особистість.</span>\n <span> </span>\n <span>Скористайтеся нею для ознайомлення з сайтом.</span>\n <span> </span>\n <span>Та, час-від-часу, ми їх видаляємо.</span>\n <span> </span>\n <span>Тож краще зареєструтеся, аби не втратити дані :)</span>\n </p-message>\n }\n </div>\n\n <div class=\"rts-messenger-profile-auth-buttons\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SIGN_UP_BUTTON]\"\n severity=\"primary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_UP)\"\n class=\"rts-messenger-profile-auth-button\"\n ></p-button>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SIGN_IN_BUTTON]\"\n severity=\"secondary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"rts-messenger-profile-auth-button\"\n ></p-button>\n </div>\n </div>\n } @else if (messenger.ownProfileOpened && !messenger.myPeer?.isAnonymous) {\n <p-divider></p-divider>\n <div class=\"rts-messenger-profile-logout-btn\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.LOGOUT_BUTTON]\"\n severity=\"danger\"\n (click)=\"logOut()\"\n ></p-button>\n </div>\n }\n</div>\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'rtsee-preloader',\n templateUrl: './preloader.component.html',\n standalone: true,\n})\nexport class PreloaderComponent implements OnInit {\n viewBox = '0 0 100 100';\n d = 'M 50 96 a 46 46 0 0 1 0 -92 46 46 0 0 1 0 92';\n\n @ViewChild('canvas') canvas?: ElementRef<SVGElement>;\n @Input() diameter?: number;\n @Input() color?: string = '#000000';\n constructor() {\n if (this.diameter) {\n this.viewBox = `0 0 ${this.diameter} ${this.diameter}`;\n this.d = `M ${this.diameter / 2} ${this.diameter * 0.96} a ${\n this.diameter * 0.46\n } ${this.diameter * 0.46} 0 0 1 0 -${this.diameter * 0.92} ${\n this.diameter * 0.46\n } ${this.diameter * 0.46} 0 0 1 0 ${this.diameter * 0.92}`;\n }\n }\n\n ngOnInit(): void {\n //viewBox=\"0 0 100 100\"\n //d=\"M 50 96 a 46 46 0 0 1 0 -92 46 46 0 0 1 0 92\"\n }\n}\n","<div class=\"rtsee-preloader\">\n <svg [style.max-width.px]=\"diameter\" #canvas [attr.viewBox]=\"viewBox\">\n <path [attr.d]=\"d\" [attr.stroke]=\"color\"/>\n </svg>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeChatMember } from '@rtsee/messenger';\nimport { RTSeeChatMemberRoles } from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-chat-member',\n standalone: true,\n templateUrl: './chat-member.component.html',\n})\nexport class ChatMemberComponent {\n @Input() member!: RTSeeChatMember;\n @Input() canManage: boolean = false;\n @Input() isSelf: boolean = false;\n @Output() remove = new EventEmitter<string>();\n @Output() roleChange = new EventEmitter<{ memberId: string; role: RTSeeChatMemberRoles }>();\n @Output() editAgent = new EventEmitter<string>();\n\n get isAgent(): boolean {\n return !!(this.member.data as any)?.isAgent;\n }\n\n get isInactive(): boolean {\n return this.member.status === 'inactive';\n }\n\n onRemove(): void {\n this.remove.emit(this.member.id);\n }\n\n onPromote(): void {\n this.roleChange.emit({ memberId: this.member.id, role: RTSeeChatMemberRoles.MODERATOR });\n }\n\n onDemote(): void {\n this.roleChange.emit({ memberId: this.member.id, role: RTSeeChatMemberRoles.MEMBER });\n }\n\n onEditAgent(): void {\n this.editAgent.emit(this.member.id);\n }\n\n protected readonly RTSeeChatMemberRoles = RTSeeChatMemberRoles;\n}\n","<div class=\"rts-chat-member\" [class.rts-chat-member-inactive]=\"isInactive\">\n <div class=\"rts-chat-member-avatar\"\n [style.background-image]=\"'url(' + member.imageUrl + ')'\"\n ></div>\n <div class=\"rts-chat-member-details\">\n <p class=\"rts-chat-member-name\">\n {{ member.name }}\n @if (isAgent) {\n <span class=\"rts-chat-member-agent-badge\">\n <span class=\"material-icons-outlined\">smart_toy</span>\n </span>\n }\n </p>\n @if (isInactive) {\n <p class=\"rts-chat-member-status-inactive\">Inactive</p>\n } @else {\n <p class=\"rts-chat-member-role\">{{ member.role }}</p>\n }\n </div>\n @if (canManage && !isSelf && !isInactive) {\n <div class=\"rts-chat-member-actions\">\n @if (isAgent) {\n <button class=\"rts-btn rts-btn-icon rts-btn-icon-sm\"\n title=\"Edit Agent\"\n (click)=\"onEditAgent()\"\n >\n <span class=\"material-icons-outlined\">edit</span>\n </button>\n }\n @if (member.role === RTSeeChatMemberRoles.MEMBER) {\n <button class=\"rts-btn rts-btn-icon rts-btn-icon-sm\"\n title=\"Promote to Moderator\"\n (click)=\"onPromote()\"\n >\n <span class=\"material-icons-outlined\">arrow_upward</span>\n </button>\n } @else if (member.role === RTSeeChatMemberRoles.MODERATOR) {\n <button class=\"rts-btn rts-btn-icon rts-btn-icon-sm\"\n title=\"Demote to Member\"\n (click)=\"onDemote()\"\n >\n <span class=\"material-icons-outlined\">arrow_downward</span>\n </button>\n }\n <button class=\"rts-btn rts-btn-icon rts-btn-icon-sm rts-btn-danger\"\n title=\"Remove Member\"\n (click)=\"onRemove()\"\n >\n <span class=\"material-icons-outlined\">close</span>\n </button>\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeChatInfo } from '@rtsee/messenger';\nimport { RTSeeChatMemberRoles } from '@rtsee/common';\nimport { ChatMemberComponent } from '../chat-member/chat-member.component';\nimport { PreloaderComponent } from '../../../../common/components/preloader/preloader.component';\n\n@Component({\n selector: 'rtsee-chat-members-list',\n standalone: true,\n imports: [ChatMemberComponent, PreloaderComponent],\n templateUrl: './chat-members-list.component.html',\n})\nexport class ChatMembersListComponent {\n @Input() chatInfo!: RTSeeChatInfo;\n @Output() editAgentRequested = new EventEmitter<string>();\n\n confirmingRemoveId: string | null = null;\n confirmingRemoveName: string = '';\n\n get canManage(): boolean {\n return this.chatInfo.canManageMembers;\n }\n\n onRemoveRequested(memberId: string): void {\n const member = this.chatInfo.chat.members.find(m => m.id === memberId);\n this.confirmingRemoveId = memberId;\n this.confirmingRemoveName = member?.name || memberId;\n }\n\n async confirmRemove(): Promise<void> {\n if (this.confirmingRemoveId) {\n await this.chatInfo.removeMember(this.confirmingRemoveId);\n this.cancelRemove();\n }\n }\n\n cancelRemove(): void {\n this.confirmingRemoveId = null;\n this.confirmingRemoveName = '';\n }\n\n async onRoleChange(event: { memberId: string; role: RTSeeChatMemberRoles }): Promise<void> {\n await this.chatInfo.editMemberRole(event.memberId, event.role);\n }\n\n onEditAgent(memberId: string): void {\n this.editAgentRequested.emit(memberId);\n }\n}\n","@if (confirmingRemoveId) {\n <div class=\"rts-chat-member-remove-confirm\">\n <p class=\"rts-chat-member-remove-confirm-text\">\n Are you sure you want to remove <strong>{{ confirmingRemoveName }}</strong> from the chat?\n </p>\n <div class=\"rts-chat-member-remove-confirm-actions\">\n <button class=\"rts-btn rts-btn-danger rts-btn-sm\"\n (click)=\"confirmRemove()\"\n >Yes</button>\n <button class=\"rts-btn rts-btn-ghost rts-btn-sm\"\n (click)=\"cancelRemove()\"\n >Cancel</button>\n </div>\n </div>\n} @else {\n @if (chatInfo.loadingMembers) {\n <rtsee-preloader [diameter]=\"30\"></rtsee-preloader>\n }\n\n @for (member of chatInfo.chat.members; track member.id) {\n <rtsee-chat-member\n [member]=\"member\"\n [canManage]=\"canManage\"\n [isSelf]=\"member.id === chatInfo.myClientId\"\n (remove)=\"onRemoveRequested($event)\"\n (roleChange)=\"onRoleChange($event)\"\n (editAgent)=\"onEditAgent($event)\"\n ></rtsee-chat-member>\n }\n}\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputText } from \"primeng/inputtext\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-text\",\n standalone: true,\n imports: [FormsModule, InputText, InputGroup, FloatLabel, Message],\n templateUrl: \"./text-field.component.html\"\n})\nexport class TextFieldComponent {\n @Input() field!: RTSeeFormField<string>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input [id]=\"field.name\"\n class=\"rtsee-form-field\"\n pInputText\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n />\n <label [for]=\"field.name\">{{ field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { Textarea } from \"primeng/textarea\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-textarea\",\n standalone: true,\n imports: [FormsModule, Textarea, InputGroup, FloatLabel, Message],\n templateUrl: \"./textarea-field.component.html\"\n})\nexport class TextareaFieldComponent {\n @Input() field!: RTSeeFormField<string>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [id]=\"field.name\"\n class=\"rtsee-form-field\"\n pTextarea\n rows=\"3\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></textarea>\n <label [for]=\"field.name\">{{ field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { Checkbox } from \"primeng/checkbox\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-checkbox\",\n standalone: true,\n imports: [FormsModule, Checkbox, Message],\n templateUrl: \"./checkbox-field.component.html\"\n})\nexport class CheckboxFieldComponent {\n @Input() field!: RTSeeFormField<boolean>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container flex items-center\">\n <p-checkbox [inputId]=\"field.name\"\n [binary]=\"true\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n ></p-checkbox>\n <label [for]=\"field.name\" class=\"ml-2\">{{ field.name }}</label>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RadioButton } from \"primeng/radiobutton\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormFieldRadioGroup } from \"@rtsee/utilities-ui\";\nimport { NgClass } from \"@angular/common\";\n\n@Component({\n selector: \"rtsee-field-radio\",\n standalone: true,\n imports: [FormsModule, RadioButton, Message, NgClass],\n templateUrl: \"./radio-field.component.html\"\n})\nexport class RadioFieldComponent {\n @Input() field!: RTSeeFormFieldRadioGroup;\n @Output() fieldChanged = new EventEmitter<void>();\n\n /**\n * Card mode is enabled when any radio option has an icon or description.\n */\n get isCardMode(): boolean {\n return this.field.radioOptions.some(o => o.icon || o.description);\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rts-form-field-container\">\n <div class=\"rts-radio-group-label font-semibold\">{{ field.name }}</div>\n\n @if (!isCardMode) {\n <!-- Standard inline radio buttons -->\n @for (option of field.radioOptions; track option.value) {\n <div class=\"rts-radio-option\">\n <p-radioButton [name]=\"field.name\"\n [value]=\"option.value\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [inputId]=\"field.name + '_' + option.value\"\n ></p-radioButton>\n <label [for]=\"field.name + '_' + option.value\"\n class=\"rts-radio-option-label\"\n >{{ option.label }}</label>\n </div>\n }\n } @else {\n <!-- Card-styled radio buttons when icon/description is provided -->\n @for (group of field.optionGroups; track group.name) {\n @if (field.isGrouped && group.name) {\n <div class=\"rts-radio-card-group-title\">{{ group.name }}</div>\n }\n <div class=\"rts-radio-card-group\">\n @for (option of group.options; track option.value) {\n <label [for]=\"field.name + '_' + option.value\"\n class=\"rts-radio-card\"\n [ngClass]=\"{'rts-radio-card-selected': field.value === option.value}\"\n >\n <p-radioButton [name]=\"field.name\"\n [value]=\"option.value\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [inputId]=\"field.name + '_' + option.value\"\n class=\"rts-radio-card-input\"\n ></p-radioButton>\n @if (option.icon) {\n <span class=\"rts-radio-card-icon\">\n <span class=\"material-icons-outlined\">{{ option.icon }}</span>\n </span>\n }\n <div class=\"rts-radio-card-content\">\n <strong class=\"rts-radio-card-label\">{{ option.label }}</strong>\n @if (option.description) {\n <small class=\"rts-radio-card-description\">{{ option.description }}</small>\n }\n </div>\n </label>\n }\n </div>\n }\n }\n\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rts-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputNumber } from \"primeng/inputnumber\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-number\",\n standalone: true,\n imports: [FormsModule, InputNumber, InputGroup, FloatLabel, Message],\n templateUrl: \"./number-field.component.html\"\n})\nexport class NumberFieldComponent {\n @Input() field!: RTSeeFormField<number>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [inputId]=\"field.name\"\n class=\"rtsee-form-field\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></p-inputNumber>\n <label [for]=\"field.name\">{{ field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { RTSeeFormAutocomplete } from '@rtsee/utilities-ui';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'rtsee-autocomplete',\n imports: [AutoCompleteModule, FloatLabel, InputGroup, FormsModule],\n templateUrl: './autocomplete.component.html',\n})\nexport class AutocompleteComponent {\n @Input() config!: RTSeeFormAutocomplete;\n}\n","<div class=\"rtsee-autocomplete rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-autoComplete [(ngModel)]=\"config.selectedSuggestions\"\n [inputId]=\"config.inputId\"\n [multiple]=\"true\"\n [fluid]=\"config.fluid\"\n [suggestions]=\"config.visibleSuggestions\"\n [optionLabel]=\"config.suggestionLabel\"\n (completeMethod)=\"config.onQueryChanged($event)\"\n (onSelect)=\"config.onSelect($event)\"\n ></p-autoComplete>\n <label [for]=\"config.inputId\">{{config.inputName}}</label>\n </p-floatlabel>\n </p-inputgroup>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\nimport { AutocompleteComponent } from \"../../../autocomplete/autocomplete.component\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormFieldAutocomplete } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-autocomplete\",\n standalone: true,\n imports: [AutocompleteComponent, Message],\n templateUrl: \"./autocomplete-field.component.html\"\n})\nexport class AutocompleteFieldComponent implements OnInit {\n @Input() field!: RTSeeFormFieldAutocomplete;\n @Output() fieldChanged = new EventEmitter<void>();\n\n ngOnInit() {\n this.field.autocomplete.on(\"select\", () => {\n this.onModelChange();\n });\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <rtsee-autocomplete [config]=\"field.autocomplete\"></rtsee-autocomplete>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, forwardRef, Input, OnInit } from '@angular/core';\nimport { Select } from 'primeng/select';\nimport { RecursiveSelect } from '@rtsee/utilities-ui';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'rtsee-recursive-select',\n imports: [Select, FormsModule],\n templateUrl: './recursive-select.component.html',\n})\nexport class RecursiveSelectComponent<E> implements OnInit {\n @Input() selectModel!: RecursiveSelect<E>;\n value: E | undefined = undefined;\n\n ngOnInit(): void {\n this.value = this.selectModel.value;\n }\n}\n","<div class=\"rtsee-recursive-select\">\n @for (item of selectModel.selectionHierarchy; track item.level) {\n <div class=\"rtsee-form-field-container\">\n <p-select [options]=\"item.children\"\n [(ngModel)]=\"item.selected\"\n [optionLabel]=\"'label'\"\n [placeholder]=\"selectModel.placeholderValue\"\n (onChange)=\"selectModel.onSelectionChanged(item.selected, item.level)\"\n class=\"rtsee-form-field\"\n />\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, DoCheck } from \"@angular/core\";\nimport { RecursiveSelectComponent } from \"../../../recursive-select/recursive-select.component\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormFieldRecursiveSelect } from \"@rtsee/utilities-ui\";\nimport {Divider} from \"primeng/divider\";\n\n@Component({\n selector: \"rtsee-field-recursive-select\",\n standalone: true,\n imports: [RecursiveSelectComponent, Message, Divider],\n templateUrl: \"./recursive-select-field.component.html\"\n})\nexport class RecursiveSelectFieldComponent implements DoCheck {\n @Input() field!: RTSeeFormFieldRecursiveSelect;\n @Output() fieldChanged = new EventEmitter<void>();\n\n private lastValue: any;\n\n ngDoCheck() {\n if (this.field.recursiveSelect.value !== this.lastValue) {\n this.lastValue = this.field.recursiveSelect.value;\n this.onModelChange();\n }\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-divider></p-divider>\n <p>{{field.name}}</p>\n <rtsee-recursive-select [selectModel]=\"field.recursiveSelect\"></rtsee-recursive-select>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n <p-divider></p-divider>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ImageCroppedEvent, ImageCropperComponent } from 'ngx-image-cropper';\nimport { NgClass } from '@angular/common';\nimport { RadioButton } from 'primeng/radiobutton';\nimport { PreloaderComponent } from '../preloader/preloader.component';\nimport { RTSeeImageCropper } from '@rtsee/utilities-ui';\nimport { Button } from 'primeng/button';\n\n@Component({\n selector: 'rtsee-cropper',\n imports: [\n ImageCropperComponent,\n NgClass,\n RadioButton,\n PreloaderComponent,\n Button,\n ],\n templateUrl: './cropper.component.html',\n standalone: true,\n})\nexport class RTSeeCropperComponent {\n loadInProgress: boolean = true;\n\n @Input() cropper!: RTSeeImageCropper;\n @Output() nextClicked = new EventEmitter();\n\n @ViewChild(ImageCropperComponent) imageCropper!: ImageCropperComponent;\n constructor() {}\n\n ngOnInit() {}\n\n onCropperReady() {\n this.loadInProgress = false;\n this.cropper.setCropperElem(this.imageCropper);\n }\n\n onImageCropped(event: ImageCroppedEvent) {\n if (!event.blob) {\n console.log('ImageCropped no Blob after Cropped event');\n return;\n }\n this.cropper.onCropped(event.blob);\n }\n\n // selectValue(event) {\n // this.cropper.setAspectRatio(event.value);\n // }\n}\n","<div class=\"rtsee-image-cropper-container\"\n [ngClass]=\"{'rtsee-image-cropper-loading': loadInProgress}\"\n>\n @if (cropper.activeImage) {\n <div class=\"rtsee-image-cropper-container-inner\">\n <image-cropper style=\"visibility: hidden\"\n [imageFile]=\"cropper.activeImage.file\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"cropper.aspectRatio\"\n [resizeToWidth]=\"cropper.resizeToWidth\"\n [autoCrop]=\"false\"\n (imageCropped)=\"onImageCropped($event)\"\n (cropperReady)=\"onCropperReady()\"\n [imageQuality]=\"70\"\n format='jpeg'\n ></image-cropper>\n </div>\n }\n @if (cropper.aspectRatioConfigurable) {\n <div class=\"rtsee-select-aspect-ratio-container\">\n <span class=\"radio-btn title-text\">Aspect Ratio:</span>\n\n <p-radio-button name=\"pizza\" value=\"Cheese\" inputId=\"ingredient1\" />\n <label for=\"ingredient1\" class=\"ml-2\">Cheese</label>\n </div>\n }\n\n @if (!loadInProgress) {\n <div class=\"image-cropper-actions\">\n <p-button label=\"Next\"\n severity=\"primary\"\n (click)=\"cropper.onNextButtonClicked()\"\n ></p-button>\n </div>\n }\n\n <rtsee-preloader [diameter]=\"5\"></rtsee-preloader>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeFileUploader } from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-uploader',\n imports: [],\n templateUrl: './uploader.component.html',\n})\nexport class RTSeeUploaderComponent implements OnInit {\n @Input() uploader!: RTSeeFileUploader;\n\n ngOnInit(): void {\n this.uploader.show();\n }\n}\n","<div id=\"rtsee-drag-drop-area\"></div>\n\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { RTSeeCropperComponent } from '../cropper/cropper.component';\nimport { RTSeeUploaderComponent } from '../uploader/uploader.component';\nimport { RTSeeImageUploader, sanitizeImageUrl } from '@rtsee/utilities-ui';\nimport { Button } from 'primeng/button';\nimport { RTSeeCore } from '@rtsee/core';\nimport {\n RTSeeIllustratorEvents,\n IRTSeeIllustratorCurrentImageResponse,\n} from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-image-uploader',\n imports: [RTSeeUploaderComponent, RTSeeCropperComponent, Button],\n templateUrl: './image-uploader.component.html',\n})\nexport class RTSeeImageUploaderComponent implements OnInit {\n @ViewChild(RTSeeCropperComponent) cropperComponent!: RTSeeCropperComponent;\n @Input() imageUploader!: RTSeeImageUploader;\n\n constructor(private readonly elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this.attachEventHandlers();\n }\n\n attachEventHandlers() {\n this.imageUploader.on('completed', this.onImagesUploaded.bind(this));\n }\n\n onNextButtonClicked() {\n this.imageUploader.onNextClicked();\n }\n\n onImagesUploaded(response: any): void {\n console.log(response);\n }\n\n private submittingFromPainting: boolean = false;\n\n onPaintingIconClicked(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n\n if (typeof window === 'undefined' || this.submittingFromPainting) {\n return;\n }\n\n const requestId = RTSeeCore.uuidv4();\n let handled = false;\n\n const handleResponse = (response: IRTSeeIllustratorCurrentImageResponse) => {\n if (handled) {\n return;\n }\n handled = true;\n\n if (!response || !response.isLoaded) {\n // 3. If RTSeeIllustrator is not loaded - do nothing\n return;\n }\n\n if (response.reviewingGeneratedImage && response.imageUrl) {\n // 1. If RTSeeIllustrator is in reviewingGeneratedImage mode, apply currently reviewed image to ImageUploader\n this.submittingFromPainting = true;\n this.imageUploader.applyImageUrl(sanitizeImageUrl(response.imageUrl));\n\n // Reset illustrator state and UI\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(RTSeeIllustratorEvents.RESET_STATE));\n }\n\n // and if Imageuploader is part of the form it should immediately submit the form\n setTimeout(() => {\n this.submitParentForm();\n setTimeout(() => {\n this.submittingFromPainting = false;\n }, 1000);\n }, 50);\n }\n // 2. If RTSeeIllustrator is not active, it expands and scrolls into view (handled by RTSeeIllustrator)\n };\n\n const responseListener = (e: Event) => {\n const customEvent = e as CustomEvent<IRTSeeIllustratorCurrentImageResponse & { requestId?: string }>;\n if (!customEvent.detail || (customEvent.detail.requestId && customEvent.detail.requestId !== requestId)) {\n return;\n }\n window.removeEventListener(RTSeeIllustratorEvents.CURRENT_IMAGE_RESPONSE, responseListener);\n clearTimeout(timer);\n handleResponse(customEvent.detail);\n };\n\n window.addEventListener(RTSeeIllustratorEvents.CURRENT_IMAGE_RESPONSE, responseListener);\n\n const timer = setTimeout(() => {\n window.removeEventListener(RTSeeIllustratorEvents.CURRENT_IMAGE_RESPONSE, responseListener);\n }, 600);\n\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.GET_CURRENT_IMAGE, {\n detail: {\n requestId,\n callback: (res: IRTSeeIllustratorCurrentImageResponse) => {\n window.removeEventListener(RTSeeIllustratorEvents.CURRENT_IMAGE_RESPONSE, responseListener);\n clearTimeout(timer);\n handleResponse(res);\n },\n },\n })\n );\n }\n\n private submitParentForm(): void {\n try {\n // 1. Native HTML form submit so Angular (ngSubmit) / (formSubmit) fires\n const formEl = this.elementRef.nativeElement.closest('form');\n if (formEl) {\n if (typeof formEl.requestSubmit === 'function') {\n formEl.requestSubmit();\n return;\n } else {\n formEl.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));\n return;\n }\n }\n\n // 2. Programmatic RTSeeForm submit\n if (this.imageUploader.form && typeof this.imageUploader.form.submit === 'function') {\n this.imageUploader.form.submit();\n }\n } catch (e) {\n console.warn('[RTSeeImageUploaderComponent] submitParentForm error:', e);\n }\n }\n}\n","<div class=\"rtsee-image-uploader\">\n @if (!imageUploader.awaitsUploadOrCrop) {\n <div class=\"rtsee-image-uploader-image\"\n (click)=\"imageUploader.init()\"\n >\n @if (imageUploader.uploadedPhotoPreview) {\n <img [src]=\"imageUploader.uploadedPhotoPreview\"\n class=\"rtsee-image-uploader-preview-image\"\n alt=\"uploaded_photo\"\n >\n }\n @if (!imageUploader.uploadedPhotoPreview) {\n <div class=\"rtsee-preloader-image-placeholder\">\n <span class=\"material-icons-outlined rtsee-upload-icon\">cloud_upload</span>\n <span class=\"rtsee-upload-text\">Tap to upload image</span>\n </div>\n }\n <div class=\"rtsee-image-uploader-illustrator-btn\"\n (click)=\"onPaintingIconClicked($event)\"\n title=\"Apply illustration from NanoBanana Illustrator\"\n >\n <p-button icon=\"pi pi-palette\" severity=\"help\" [rounded]=\"true\"></p-button>\n </div>\n <div class=\"rtsee-image-uploader-image-change-btn\">\n <p-button icon=\"pi pi-pencil\" severity=\"info\"></p-button>\n </div>\n </div>\n }\n\n @if (imageUploader.awaitsUploadOrCrop) {\n <rtsee-uploader [uploader]=\"imageUploader.uploader\"\n [hidden]=\"imageUploader.cropper?.activeImage\"\n ></rtsee-uploader>\n\n @if (imageUploader.cropper?.activeImage) {\n <rtsee-cropper [cropper]=\"imageUploader.cropper\"\n (nextClicked)=\"onNextButtonClicked()\"\n ></rtsee-cropper>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\nimport { RTSeeImageUploaderComponent } from \"../../../image-uploader/image-uploader.component\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormFieldImageUploader } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-image-uploader\",\n standalone: true,\n imports: [RTSeeImageUploaderComponent, Message],\n templateUrl: \"./image-uploader-field.component.html\"\n})\nexport class ImageUploaderFieldComponent implements OnInit {\n @Input() field!: RTSeeFormFieldImageUploader;\n @Output() fieldChanged = new EventEmitter<void>();\n\n ngOnInit() {\n this.field.imageUploader.on(\"completed\", () => {\n this.onModelChange();\n });\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <rtsee-image-uploader [imageUploader]=\"field.imageUploader\"></rtsee-image-uploader>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Input, Output, EventEmitter, Component, forwardRef } from \"@angular/core\";\nimport { RTSeeFormDynamicFields } from \"@rtsee/utilities-ui\";\nimport { Button } from \"primeng/button\";\nimport { FormComponent } from \"../../form/form.component\";\nimport { Divider } from \"primeng/divider\";\n\n@Component({\n selector: \"rtsee-dynamic-fields-field\",\n standalone: true,\n imports: [\n Button,\n forwardRef(() => FormComponent),\n Divider\n ],\n templateUrl: './dynamic-fields-field.component.html',\n})\nexport class DynamicFieldsFieldComponent {\n @Input() field!: RTSeeFormDynamicFields;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-dynamic-fields-field\">\n <p-button label=\"Add a field\"\n (click)=\"field.add()\"\n ></p-button>\n\n <div class=\"rtsee-dynamic-fields-definitions\">\n @for (definition of field.fields; track definition.name) {\n <p-divider></p-divider>\n <p>dynamic field</p>\n <rtsee-form [form]=\"definition.form\"></rtsee-form>\n <p-button label=\"Add a field\"\n (click)=\"field.remove($index)\"\n ></p-button>\n <p-divider></p-divider>\n }\n </div>\n\n</div>\n","import { Input, Output, EventEmitter, Component, forwardRef } from \"@angular/core\";\nimport { RTSeeFormFieldFieldDefinition } from \"@rtsee/utilities-ui\";\nimport { Message } from \"primeng/message\";\nimport { Button } from \"primeng/button\";\nimport { Divider } from \"primeng/divider\";\nimport { Select } from \"primeng/select\";\nimport { FormComponent } from \"../../form/form.component\";\n\n@Component({\n selector: \"rtsee-field-definition-field\",\n standalone: true,\n imports: [\n Message,\n Button,\n Divider,\n Select,\n forwardRef(() => FormComponent)\n ],\n templateUrl: './field-definition-field.component.html',\n})\nexport class FieldDefinitionFieldComponent {\n @Input() field!: RTSeeFormFieldFieldDefinition;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-field-definition\">\n <div class=\"rtsee-form-field-container\">\n <p-divider></p-divider>\n <p>Custom Field</p>\n\n <rtsee-form [form]=\"field.form\"></rtsee-form>\n <p-divider></p-divider>\n </div>\n</div>\n\n<div class=\"rtsee-form-field-container\">\n <p-divider></p-divider>\n <p>Custom Field</p>\n\n <p-select [options]=\"field.typeOptions\"\n [optionLabel]=\"'friendlyName'\"\n ></p-select>\n\n\n\n <p-button label=\"remove\"\n severity=\"warn\"\n ></p-button>\n\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n <p-divider></p-divider>\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { Select } from \"primeng/select\";\nimport { RTSeeFormFieldSelect } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-select\",\n standalone: true,\n imports: [FormsModule, InputGroup, FloatLabel, Message, Select],\n templateUrl: \"./select-field.component.html\"\n})\nexport class SelectFieldComponent {\n @Input() field!: RTSeeFormFieldSelect;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-select [inputId]=\"field.name\"\n class=\"rtsee-form-field\"\n [options]=\"field.options\"\n [optionLabel]=\"field.labelKey\"\n [optionValue]=\"field.valueKey\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></p-select>\n <label [for]=\"field.name\">{{ field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"c\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n\n","import { Component, Input, Output, EventEmitter, forwardRef } from \"@angular/core\";\nimport { RTSeeFormFieldLocation } from \"@rtsee/utilities-ui\";\nimport { FormComponent } from \"../../form/form.component\";\nimport { Message } from \"primeng/message\";\nimport { Fieldset } from \"primeng/fieldset\";\n\n@Component({\n selector: \"rtsee-field-location\",\n standalone: true,\n imports: [\n Fieldset,\n Message,\n forwardRef(() => FormComponent)\n ],\n templateUrl: \"./location-field.component.html\"\n})\nexport class LocationFieldComponent {\n @Input() field!: RTSeeFormFieldLocation;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container rtsee-field-location-container mb-3\">\n <p-fieldset [legend]=\"field.description || field.name || 'Location'\">\n @if (field.form) {\n <rtsee-form [form]=\"field.form\" (formSubmit)=\"onModelChange()\"></rtsee-form>\n }\n </p-fieldset>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, forwardRef } from \"@angular/core\";\nimport { RTSeeFormFieldTimeSlot } from \"@rtsee/utilities-ui\";\nimport { FormComponent } from \"../../form/form.component\";\nimport { Message } from \"primeng/message\";\nimport { Fieldset } from \"primeng/fieldset\";\n\n@Component({\n selector: \"rtsee-field-time-slot\",\n standalone: true,\n imports: [\n Fieldset,\n Message,\n forwardRef(() => FormComponent)\n ],\n templateUrl: \"./time-slot-field.component.html\"\n})\nexport class TimeSlotFieldComponent {\n @Input() field!: RTSeeFormFieldTimeSlot;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container rtsee-field-time-slot-container mb-3\">\n <p-fieldset [legend]=\"field.description || field.name || 'Time Slot'\">\n @if (field.form) {\n <rtsee-form [form]=\"field.form\" (formSubmit)=\"onModelChange()\"></rtsee-form>\n }\n </p-fieldset>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, forwardRef } from \"@angular/core\";\nimport { RTSeeFormFieldTimeSlots } from \"@rtsee/utilities-ui\";\nimport { Button } from \"primeng/button\";\nimport { Divider } from \"primeng/divider\";\nimport { Message } from \"primeng/message\";\nimport { FormComponent } from \"../../form/form.component\";\nimport { Fieldset } from \"primeng/fieldset\";\n\n@Component({\n selector: \"rtsee-field-time-slots\",\n standalone: true,\n imports: [\n Button,\n Divider,\n Message,\n Fieldset,\n forwardRef(() => FormComponent)\n ],\n templateUrl: \"./time-slots-field.component.html\"\n})\nexport class TimeSlotsFieldComponent {\n @Input() field!: RTSeeFormFieldTimeSlots;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container rtsee-field-time-slots-container mb-3\">\n <p-fieldset [legend]=\"field.description || field.name || 'Time Slots'\">\n <div class=\"mb-3\">\n <p-button label=\"Add Time Slot\" (click)=\"field.add()\"></p-button>\n </div>\n @for (slotField of field.slotFields; track $index) {\n <div class=\"p-3 border rounded mb-2\">\n @if (slotField.form) {\n <rtsee-form [form]=\"slotField.form\" (formSubmit)=\"onModelChange()\"></rtsee-form>\n }\n <div class=\"mt-2 text-right\">\n <p-button label=\"Remove Slot\" severity=\"warn\" (click)=\"field.remove($index)\"></p-button>\n </div>\n </div>\n }\n </p-fieldset>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\nimport { RTSeeFormFieldEntity } from \"@rtsee/utilities-ui\";\nimport { AutocompleteComponent } from \"../../../autocomplete/autocomplete.component\";\nimport { Message } from \"primeng/message\";\n\n@Component({\n selector: \"rtsee-field-entity\",\n standalone: true,\n imports: [AutocompleteComponent, Message],\n templateUrl: \"./entity-field.component.html\"\n})\nexport class EntityFieldComponent implements OnInit {\n @Input() field!: RTSeeFormFieldEntity;\n @Output() fieldChanged = new EventEmitter<void>();\n\n ngOnInit() {\n if (this.field.autocompleteField?.autocomplete) {\n this.field.autocompleteField.autocomplete.on(\"select\", () => {\n this.onModelChange();\n });\n }\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n @if (field.autocompleteField) {\n <rtsee-autocomplete [config]=\"field.autocompleteField.autocomplete\"></rtsee-autocomplete>\n }\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\nimport { RTSeeFormFieldEntitiesList } from \"@rtsee/utilities-ui\";\nimport { AutocompleteComponent } from \"../../../autocomplete/autocomplete.component\";\nimport { Message } from \"primeng/message\";\n\n@Component({\n selector: \"rtsee-field-entities-list\",\n standalone: true,\n imports: [AutocompleteComponent, Message],\n templateUrl: \"./entities-list-field.component.html\"\n})\nexport class EntitiesListFieldComponent implements OnInit {\n @Input() field!: RTSeeFormFieldEntitiesList;\n @Output() fieldChanged = new EventEmitter<void>();\n\n ngOnInit() {\n if (this.field.autocompleteField?.autocomplete) {\n this.field.autocompleteField.autocomplete.on(\"select\", () => {\n this.onModelChange();\n });\n }\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n @if (field.autocompleteField) {\n <rtsee-autocomplete [config]=\"field.autocompleteField.autocomplete\"></rtsee-autocomplete>\n }\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { DatePicker } from \"primeng/datepicker\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-date\",\n standalone: true,\n imports: [FormsModule, DatePicker, InputGroup, FloatLabel, Message],\n templateUrl: \"./date-field.component.html\"\n})\nexport class DateFieldComponent {\n @Input() field!: RTSeeFormField<Date>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-datePicker [inputId]=\"field.name\"\n class=\"rtsee-form-field\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></p-datePicker>\n <label [for]=\"field.name\">{{ field.description || field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputText } from \"primeng/inputtext\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-varchar\",\n standalone: true,\n imports: [FormsModule, InputText, InputGroup, FloatLabel, Message],\n templateUrl: \"./varchar-field.component.html\"\n})\nexport class VarcharFieldComponent {\n @Input() field!: RTSeeFormField<string>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input pInputText\n [id]=\"field.name\"\n class=\"rtsee-form-field\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n />\n <label [for]=\"field.name\">{{ field.description || field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputNumber } from \"primeng/inputnumber\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-float\",\n standalone: true,\n imports: [FormsModule, InputNumber, InputGroup, FloatLabel, Message],\n templateUrl: \"./float-field.component.html\"\n})\nexport class FloatFieldComponent {\n @Input() field!: RTSeeFormField<number>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [inputId]=\"field.name\"\n class=\"rtsee-form-field\"\n [minFractionDigits]=\"1\"\n [maxFractionDigits]=\"6\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></p-inputNumber>\n <label [for]=\"field.name\">{{ field.description || field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, forwardRef } from \"@angular/core\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\nimport { TextFieldComponent } from \"./field-sub-types/text-field.component\";\nimport { TextareaFieldComponent } from \"./field-sub-types/textarea-field.component\";\nimport { CheckboxFieldComponent } from \"./field-sub-types/checkbox-field.component\";\nimport { RadioFieldComponent } from \"./field-sub-types/radio-field.component\";\nimport { NumberFieldComponent } from \"./field-sub-types/number-field.component\";\nimport { AutocompleteFieldComponent } from \"./field-sub-types/autocomplete-field.component\";\nimport { RecursiveSelectFieldComponent } from \"./field-sub-types/recursive-select-field.component\";\nimport { ImageUploaderFieldComponent } from \"./field-sub-types/image-uploader-field.component\";\nimport { DynamicFieldsFieldComponent } from \"./field-sub-types/dynamic-fields-field.component\";\nimport { FieldDefinitionFieldComponent } from \"./field-sub-types/field-definition-field.component\";\nimport { SelectFieldComponent } from \"./field-sub-types/select-field.component\";\nimport { LocationFieldComponent } from \"./field-sub-types/location-field.component\";\nimport { TimeSlotFieldComponent } from \"./field-sub-types/time-slot-field.component\";\nimport { TimeSlotsFieldComponent } from \"./field-sub-types/time-slots-field.component\";\nimport { EntityFieldComponent } from \"./field-sub-types/entity-field.component\";\nimport { EntitiesListFieldComponent } from \"./field-sub-types/entities-list-field.component\";\nimport { DateFieldComponent } from \"./field-sub-types/date-field.component\";\nimport { VarcharFieldComponent } from \"./field-sub-types/varchar-field.component\";\nimport { FloatFieldComponent } from \"./field-sub-types/float-field.component\";\n\n@Component({\n selector: \"rtsee-form-field\",\n standalone: true,\n imports: [\n TextFieldComponent,\n TextareaFieldComponent,\n CheckboxFieldComponent,\n RadioFieldComponent,\n NumberFieldComponent,\n AutocompleteFieldComponent,\n RecursiveSelectFieldComponent,\n ImageUploaderFieldComponent,\n forwardRef(() => FieldDefinitionFieldComponent),\n forwardRef(() => DynamicFieldsFieldComponent),\n SelectFieldComponent,\n LocationFieldComponent,\n TimeSlotFieldComponent,\n TimeSlotsFieldComponent,\n EntityFieldComponent,\n EntitiesListFieldComponent,\n DateFieldComponent,\n VarcharFieldComponent,\n FloatFieldComponent\n ],\n templateUrl: \"./form-field.component.html\"\n})\nexport class FormFieldComponent {\n @Input() field!: RTSeeFormField;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onFieldChanged() {\n this.fieldChanged.emit();\n }\n}\n","@switch (field.type) {\n @case ('text') {\n <rtsee-field-text [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-text>\n }\n @case ('varchar') {\n <rtsee-field-varchar [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-varchar>\n }\n @case ('textarea') {\n <rtsee-field-textarea [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-textarea>\n }\n @case ('checkbox') {\n <rtsee-field-checkbox [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-checkbox>\n }\n @case ('radio') {\n <rtsee-field-radio [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-radio>\n }\n @case ('number') {\n <rtsee-field-number [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-number>\n }\n @case ('integer') {\n <rtsee-field-number [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-number>\n }\n @case ('float4') {\n <rtsee-field-float [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-float>\n }\n @case ('date') {\n <rtsee-field-date [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-date>\n }\n @case ('autocomplete') {\n <rtsee-field-autocomplete [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-autocomplete>\n }\n @case ('entity') {\n <rtsee-field-entity [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-entity>\n }\n @case ('entities-list') {\n <rtsee-field-entities-list [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-entities-list>\n }\n @case ('location') {\n <rtsee-field-location [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-location>\n }\n @case ('time_slot') {\n <rtsee-field-time-slot [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-time-slot>\n }\n @case ('time_slots') {\n <rtsee-field-time-slots [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-time-slots>\n }\n @case ('recursive-select') {\n <rtsee-field-recursive-select [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-recursive-select>\n }\n @case ('select') {\n <rtsee-field-select [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-select>\n }\n @case ('image-uploader') {\n <rtsee-field-image-uploader [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-image-uploader>\n }\n @case ('field-definition') {\n <rtsee-field-definition-field [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-definition-field>\n }\n @case ('dynamic-fields') {\n <rtsee-dynamic-fields-field [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-dynamic-fields-field>\n }\n}\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { RTSeeForm } from \"@rtsee/utilities-ui\";\nimport { FormFieldComponent } from \"../form-field/form-field.component\";\nimport { FormsModule } from \"@angular/forms\";\n\n@Component({\n selector: \"rtsee-form\",\n standalone: true,\n imports: [FormFieldComponent, FormsModule],\n templateUrl: \"./form.component.html\"\n})\nexport class FormComponent {\n @Input() form!: RTSeeForm;\n @Output() formSubmit = new EventEmitter<RTSeeForm>();\n\n submit() {\n this.formSubmit.emit(this.form);\n }\n\n onFieldChanged() {\n this.form.evaluateIsValid();\n this.form.evaluateIsDirty();\n this.form.evaluateIsChanged();\n }\n}\n","<div class=\"rtsee-form-container\">\n @if (form.name) {\n <h3 class=\"rts-form-title\">{{ form.name }}</h3>\n }\n @if (form.description) {\n <p class=\"rts-form-description\">{{ form.description }}</p>\n }\n <form class=\"rtsee-form rts-form-group\" (ngSubmit)=\"submit()\">\n @for (field of form.fields; track field.name) {\n <div class=\"rtsee-form-field-container rts-form-field\">\n @if (field.active) {\n <rtsee-form-field [field]=\"field\"\n (fieldChanged)=\"onFieldChanged()\"\n ></rtsee-form-field>\n }\n </div>\n }\n <div class=\"rtsee-form-submit-container rts-form-actions\">\n <ng-content>\n </ng-content>\n </div>\n </form>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RTSeeChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport {IOzzyAgent, IRTSeeGetChatInvitationLinkResult} from '@rtsee/common';\nimport { ManageAgentForm, ManageAgentFormModel } from '@rtsee/utilities-ui';\nimport { FormComponent } from '../../../../common/components/forms/form/form.component';\n\ntype AddMemberMode = 'person' | 'agent';\n\n@Component({\n selector: 'rtsee-add-chat-member',\n standalone: true,\n imports: [FormComponent],\n templateUrl: './add-chat-member.component.html',\n})\nexport class AddChatMemberComponent implements OnInit {\n @Input() chatInfo!: RTSeeChatInfo;\n @Input() messenger!: RTSeeMessenger;\n @Output() memberAdded = new EventEmitter<void>();\n @Output() cancelled = new EventEmitter<void>();\n\n mode: AddMemberMode = 'person';\n invitationLink: string = '';\n invitationExpiresAt: Date | null = null;\n loadingLink: boolean = false;\n linkCopied: boolean = false;\n agentForm!: ManageAgentForm;\n submittingAgent: boolean = false;\n\n ngOnInit(): void {\n this.initAgentForm();\n this.loadInvitationLink();\n }\n\n setMode(mode: AddMemberMode): void {\n this.mode = mode;\n }\n\n async loadInvitationLink(): Promise<void> {\n this.loadingLink = true;\n try {\n const result: IRTSeeGetChatInvitationLinkResult =\n await this.chatInfo.getChatInvitationLink();\n this.invitationLink = result.invitationLink;\n this.invitationExpiresAt = new Date(result.expiresAt);\n } catch (e) {\n console.log('Failed to load invitation link', e);\n } finally {\n this.loadingLink = false;\n }\n }\n\n async copyLink(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.invitationLink);\n this.linkCopied = true;\n setTimeout(() => (this.linkCopied = false), 2500);\n } catch (e) {\n console.log('Failed to copy link', e);\n }\n }\n\n initAgentForm(): void {\n this.agentForm = new ManageAgentForm({\n companionUrl: this.messenger.companionUrl || '',\n peer: this.messenger.myPeer,\n onSubmit: (model: ManageAgentFormModel) => {\n console.log('on submit!');\n void this.submitAgent();\n },\n });\n }\n\n async submitAgent(): Promise<void> {\n this.submittingAgent = true;\n console.log('submitting agent')\n try {\n const agentData: IOzzyAgent = this.agentForm.toAgentData();\n await this.chatInfo.addAgentMember(agentData);\n this.memberAdded.emit();\n } catch (e) {\n console.log('Failed to add agent member', e);\n } finally {\n this.submittingAgent = false;\n }\n }\n\n cancel(): void {\n this.cancelled.emit();\n }\n}\n","<div class=\"rts-add-chat-member\">\n <div class=\"rts-add-member-toggle\">\n <button class=\"rts-btn rts-add-member-toggle-btn\"\n [class.rts-add-member-toggle-active]=\"mode === 'person'\"\n (click)=\"setMode('person')\"\n >\n <span class=\"material-icons-outlined\">person</span>\n Person\n </button>\n <button class=\"rts-btn rts-add-member-toggle-btn\"\n [class.rts-add-member-toggle-active]=\"mode === 'agent'\"\n (click)=\"setMode('agent')\"\n >\n <span class=\"material-icons-outlined\">smart_toy</span>\n Agent\n </button>\n </div>\n\n @if (mode === 'person') {\n <div class=\"rts-invite-link-section\">\n @if (loadingLink) {\n <div class=\"rts-invite-link-loading\">\n <span class=\"material-icons-outlined rts-spin-icon\">autorenew</span>\n Generating link...\n </div>\n } @else if (invitationLink) {\n <div class=\"rts-invite-link-disclaimer\">\n <span class=\"material-icons-outlined rts-invite-link-disclaimer-icon\">info</span>\n Anyone who opens this link will be added to the chat.\n </div>\n\n <div class=\"rts-invite-link-display\">\n <input type=\"text\"\n class=\"rts-invite-link-input\"\n [value]=\"invitationLink\"\n readonly\n >\n <button class=\"rts-btn rts-btn-primary rts-invite-link-copy-btn\"\n (click)=\"copyLink()\"\n >\n <span class=\"material-icons-outlined\">{{ linkCopied ? 'check' : 'content_copy' }}</span>\n {{ linkCopied ? 'Copied!' : 'Copy' }}\n </button>\n </div>\n\n @if (invitationExpiresAt) {\n <p class=\"rts-invite-link-expires\">\n Link expires: {{ invitationExpiresAt.toLocaleDateString() }}\n </p>\n }\n } @else {\n <p class=\"rts-invite-link-error\">Failed to generate invitation link.</p>\n }\n </div>\n }\n\n @if (mode === 'agent') {\n <div class=\"rts-add-agent-form\">\n <rtsee-form [form]=\"agentForm\" (formSubmit)=\"submitAgent()\">\n <button type=\"submit\"\n class=\"rts-btn rts-btn-primary\"\n [disabled]=\"submittingAgent\"\n >\n @if (submittingAgent) {\n <span class=\"material-icons-outlined rts-spin-icon\">autorenew</span>\n }\n Add Agent\n </button>\n </rtsee-form>\n </div>\n }\n\n <div class=\"rts-add-member-cancel\">\n <button class=\"rts-btn rts-btn-ghost rts-btn-block\"\n (click)=\"cancel()\"\n >Back to Members</button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RTSeeChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport { IOzzyAgent, IRTSeeChatMember } from '@rtsee/common';\nimport { ManageAgentForm, ManageAgentFormModel } from '@rtsee/utilities-ui';\nimport { FormComponent } from '../../../../common/components/forms/form/form.component';\n\n@Component({\n selector: 'rtsee-edit-agent-member',\n standalone: true,\n imports: [FormComponent],\n templateUrl: './edit-agent-member.component.html',\n})\nexport class EditAgentMemberComponent implements OnInit {\n @Input() chatInfo!: RTSeeChatInfo;\n @Input() messenger!: RTSeeMessenger;\n @Input() memberId!: string;\n @Output() saved = new EventEmitter<void>();\n @Output() cancelled = new EventEmitter<void>();\n\n agentForm!: ManageAgentForm;\n submitting: boolean = false;\n memberName: string = '';\n\n ngOnInit(): void {\n const member = this.chatInfo.chat.members.find(m => m.id === this.memberId);\n const existingAgent = (member?.data as any) as IOzzyAgent | undefined;\n this.memberName = member?.name || this.memberId;\n\n this.agentForm = new ManageAgentForm({\n companionUrl: this.messenger.companionUrl || '',\n peer: this.messenger.myPeer,\n existingAgent,\n onSubmit: (model: ManageAgentFormModel) => {\n void this.submitEdit();\n },\n });\n }\n\n async submitEdit(): Promise<void> {\n this.submitting = true;\n try {\n const agentData = this.agentForm.toAgentData();\n // Edit the member via the existing editChatMember remote action\n // The agent data is stored on the member's data field\n const updatedMember: IRTSeeChatMember = await this.chatInfo.remoteActions.editChatMember.send({\n chatId: this.chatInfo.chat.id,\n memberId: this.memberId,\n role: this.chatInfo.chat.members.find(m => m.id === this.memberId)?.role!,\n agentData,\n } as any);\n this.chatInfo.chat.updateMember(this.memberId, updatedMember);\n this.saved.emit();\n } catch (e) {\n console.log('Failed to update agent member', e);\n } finally {\n this.submitting = false;\n }\n }\n\n cancel(): void {\n this.cancelled.emit();\n }\n}\n","<div class=\"rts-edit-agent-member\">\n <div class=\"rts-add-agent-form\">\n <rtsee-form [form]=\"agentForm\">\n <button type=\"submit\"\n class=\"rts-btn rts-btn-primary\"\n [disabled]=\"submitting\"\n >\n @if (submitting) {\n <span class=\"material-icons-outlined rts-spin-icon\">autorenew</span>\n }\n Save Changes\n </button>\n </rtsee-form>\n </div>\n\n <div class=\"rts-add-member-cancel\">\n <button class=\"rts-btn rts-btn-ghost rts-btn-block\"\n (click)=\"cancel()\"\n >Back to Members</button>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport { ChatMembersListComponent } from './chat-members-list/chat-members-list.component';\nimport { AddChatMemberComponent } from './add-chat-member/add-chat-member.component';\nimport { EditAgentMemberComponent } from './edit-agent-member/edit-agent-member.component';\n\ntype ChatMembersView = 'list' | 'add' | 'edit-agent';\n\n@Component({\n selector: 'rtsee-chat-members',\n standalone: true,\n imports: [ChatMembersListComponent, AddChatMemberComponent, EditAgentMemberComponent],\n templateUrl: './chat-members.component.html',\n})\nexport class ChatMembersComponent {\n @Input() chatInfo!: RTSeeChatInfo;\n @Input() messenger!: RTSeeMessenger;\n\n view: ChatMembersView = 'list';\n editingAgentMemberId: string | null = null;\n\n showAddMember(): void {\n this.view = 'add';\n }\n\n showEditAgent(memberId: string): void {\n this.editingAgentMemberId = memberId;\n this.view = 'edit-agent';\n }\n\n onMemberAdded(): void {\n this.view = 'list';\n }\n\n onAddCancelled(): void {\n this.view = 'list';\n }\n\n onAgentSaved(): void {\n this.editingAgentMemberId = null;\n this.view = 'list';\n }\n\n onEditAgentCancelled(): void {\n this.editingAgentMemberId = null;\n this.view = 'list';\n }\n}\n","<div class=\"rts-chat-members\">\n <p class=\"rts-chat-members-title\">Members</p>\n\n @if (view === 'list') {\n <rtsee-chat-members-list\n [chatInfo]=\"chatInfo\"\n (editAgentRequested)=\"showEditAgent($event)\"\n ></rtsee-chat-members-list>\n\n @if (chatInfo.canManageMembers) {\n <button class=\"rts-btn rts-btn-ghost rts-btn-block rts-chat-members-add-btn\"\n (click)=\"showAddMember()\"\n >\n <span class=\"material-icons-outlined\">person_add</span>\n Add Member\n </button>\n }\n }\n\n @if (view === 'add') {\n <rtsee-add-chat-member\n [chatInfo]=\"chatInfo\"\n [messenger]=\"messenger\"\n (memberAdded)=\"onMemberAdded()\"\n (cancelled)=\"onAddCancelled()\"\n ></rtsee-add-chat-member>\n }\n\n @if (view === 'edit-agent' && editingAgentMemberId) {\n <rtsee-edit-agent-member\n [chatInfo]=\"chatInfo\"\n [messenger]=\"messenger\"\n [memberId]=\"editingAgentMemberId\"\n (saved)=\"onAgentSaved()\"\n (cancelled)=\"onEditAgentCancelled()\"\n ></rtsee-edit-agent-member>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport { RTSeeChatMemberRoles } from '@rtsee/common';\nimport { PreloaderComponent } from '../../../common/components/preloader/preloader.component';\nimport { ChatMembersComponent } from '../chat-members/chat-members.component';\n\n@Component({\n selector: 'rtsee-chat-info',\n standalone: true,\n imports: [PreloaderComponent, ChatMembersComponent],\n templateUrl: './chat-info.component.html',\n})\nexport class ChatInfoComponent {\n @Input() messenger!: RTSeeMessenger;\n @Input() chatInfo!: RTSeeChatInfo;\n @Output() editChatInfo = new EventEmitter<void>();\n @Output() chatDeleted = new EventEmitter<string>();\n\n onEditChatInfo(): void {\n this.editChatInfo.emit();\n }\n\n async onDeleteChat(): Promise<void> {\n await this.chatInfo.deleteChat();\n }\n\n protected readonly RTSeeChatMemberRoles = RTSeeChatMemberRoles;\n}\n","<div class=\"rts-chat-info\">\n <div class=\"rts-chat-info-meta\">\n <p class=\"rts-chat-info-type\">{{ chatInfo.chat.type }}</p>\n <p class=\"rts-chat-info-member-count\">{{ chatInfo.chat.members.length }} members</p>\n </div>\n\n @if (chatInfo.canManageChatInfo) {\n <div class=\"rts-chat-info-actions\">\n <button class=\"rts-btn rts-btn-ghost rts-btn-block\"\n (click)=\"onEditChatInfo()\"\n >\n <span class=\"material-icons-outlined\">edit</span>\n Edit Chat Info\n </button>\n </div>\n }\n\n <hr class=\"rts-divider\" />\n\n <rtsee-chat-members\n [chatInfo]=\"chatInfo\"\n [messenger]=\"messenger\"\n ></rtsee-chat-members>\n\n @if (chatInfo.myRole === RTSeeChatMemberRoles.ADMIN) {\n <hr class=\"rts-divider\" />\n <div class=\"rts-chat-info-danger-zone\">\n <button class=\"rts-btn rts-btn-danger rts-btn-block\"\n (click)=\"onDeleteChat()\"\n >\n Delete Chat\n </button>\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeManageChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport { IRTSeeChat, IRTSeeCreateChatOptions, RTSeeChatTypes } from '@rtsee/common';\nimport {\n IFormFieldImageUploaderOptions,\n IFormFieldRadioGroupFieldOptions,\n RTSeeForm,\n RTSeeFormField,\n RTSeeFormFieldImageUploader,\n RTSeeFormFieldRadioGroup,\n} from '@rtsee/utilities-ui';\nimport { FormComponent } from '../../../common/components/forms/form/form.component';\n\ninterface ManageChatInfoModel {\n type: RTSeeChatTypes;\n name: string;\n imageUrl?: string;\n}\n\nclass ManageChatInfoForm extends RTSeeForm<ManageChatInfoModel> {\n chatTypeField: RTSeeFormFieldRadioGroup<string>;\n chatNameField: RTSeeFormField<string>;\n imageUrlField: RTSeeFormFieldImageUploader;\n\n constructor(options: {\n chatTypeField: RTSeeFormFieldRadioGroup<string>;\n chatNameField: RTSeeFormField<string>;\n imageUrlField: RTSeeFormFieldImageUploader;\n onSubmit: (model: ManageChatInfoModel) => void;\n name: string;\n description: string;\n }) {\n super({\n name: options.name,\n description: options.description,\n fields: [options.imageUrlField, options.chatTypeField, options.chatNameField],\n onSubmit: options.onSubmit,\n });\n\n this.chatTypeField = options.chatTypeField;\n this.chatNameField = options.chatNameField;\n this.imageUrlField = options.imageUrlField;\n }\n\n getModel(): ManageChatInfoModel {\n return {\n type: this.chatTypeField.value as RTSeeChatTypes,\n name: this.chatNameField.value || '',\n imageUrl: this.imageUrlField.value || undefined,\n };\n }\n}\n\n@Component({\n selector: 'rtsee-manage-chat-info',\n standalone: true,\n imports: [FormComponent],\n templateUrl: './manage-chat-info.component.html',\n})\nexport class ManageChatInfoComponent {\n @Input() messenger!: RTSeeMessenger;\n @Input() chat?: IRTSeeChat;\n @Output() chatSaved = new EventEmitter<IRTSeeChat>();\n @Output() cancelled = new EventEmitter<void>();\n\n form!: ManageChatInfoForm;\n manageChatInfo!: RTSeeManageChatInfo;\n\n get isEditMode(): boolean {\n return !!this.chat;\n }\n\n ngOnInit(): void {\n this.manageChatInfo = new RTSeeManageChatInfo({\n chat: this.chat || undefined,\n companionUrl: this.messenger.companionUrl || '',\n remoteActions: this.messenger.remoteActions,\n creatorId: this.messenger.myPeer?.clientId || '',\n peer: this.messenger.myPeer!,\n });\n\n const chatTypeField = new RTSeeFormFieldRadioGroup<string>({\n name: 'chatType',\n type: 'radio',\n description: 'Chat Type',\n value: this.chat?.type || RTSeeChatTypes.GROUP,\n disabled: this.isEditMode,\n validators: [(v: string) => (!v ? 'Chat type is required' : null)],\n radioOptions: [\n {\n label: 'Group',\n value: RTSeeChatTypes.GROUP,\n icon: 'group',\n description: 'A group chat where all members can send messages',\n },\n {\n label: 'Channel',\n value: RTSeeChatTypes.CHANNEL,\n icon: 'campaign',\n description: 'A broadcast channel where only admins can post',\n },\n ],\n } as IFormFieldRadioGroupFieldOptions<string>);\n\n const chatNameField = new RTSeeFormField<string>({\n name: 'chatName',\n type: 'text',\n description: 'Chat Name',\n value: this.chat?.name || '',\n validators: [\n (v: string) => (!v ? 'Chat name is required' : null),\n (v: string) => (v && v.length < 3 ? 'Chat name must be at least 3 characters' : null),\n ],\n });\n\n const imageUrlField = new RTSeeFormFieldImageUploader({\n name: 'imageUrl',\n type: 'image-uploader',\n description: 'Chat Image',\n value: this.chat?.imageUrl || '',\n validators: [],\n imageUploaderOptions: {\n aspectRatio: 1,\n companionUrl: this.messenger.companionUrl || '',\n peer: this.messenger.myPeer!,\n },\n } as IFormFieldImageUploaderOptions);\n\n const formName = this.isEditMode ? 'Edit Chat' : 'New Chat';\n const formDescription = this.isEditMode\n ? 'Update chat name and image'\n : 'Create a group or channel to start chatting';\n\n this.form = new ManageChatInfoForm({\n chatTypeField,\n chatNameField,\n imageUrlField,\n name: formName,\n description: formDescription,\n onSubmit: (model: ManageChatInfoModel) => {\n void this.manageChatInfo.save({\n name: model.name,\n type: model.type,\n imageUrl: model.imageUrl,\n });\n },\n });\n\n this.manageChatInfo.on('saved', (savedChat: IRTSeeChat) => {\n this.chatSaved.emit(savedChat);\n });\n }\n\n get submitLabel(): string {\n return this.isEditMode ? 'Save' : 'Create';\n }\n\n cancel(): void {\n this.cancelled.emit();\n }\n}\n","<div class=\"rts-manage-chat-info\">\n @if (form) {\n <rtsee-form [form]=\"form\"\n (submit)=\"form.submit()\"\n >\n <div class=\"rts-manage-chat-info-buttons rts-form-actions\">\n <button type=\"submit\"\n class=\"rts-btn rts-btn-primary\"\n [disabled]=\"!form.isValid || manageChatInfo?.saveInProgress\"\n >\n @if (manageChatInfo?.saveInProgress) {\n <span class=\"material-icons-outlined rts-btn-spinner\">sync</span>\n }\n {{ submitLabel }}\n </button>\n <button type=\"button\"\n class=\"rts-btn rts-btn-ghost\"\n (click)=\"cancel()\"\n >\n Cancel\n </button>\n </div>\n </rtsee-form>\n }\n</div>\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DefaultImagesService {\n PROFILE = 'https://werf-assets.s3.amazonaws.com/default-profile-logo.png';\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { DefaultImagesService } from '../../../services/default-images.service';\nimport { NgClass } from '@angular/common';\nimport { ProfileComponent } from '../profile/profile.component';\nimport { ChatInfoComponent } from '../chat-info/chat-info.component';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\nimport { IRTSeeChat, RTSeeChatTypes } from '@rtsee/common';\nimport { ManageChatInfoComponent } from '../manage-chat-info/manage-chat-info.component';\n\n@Component({\n selector: 'rtsee-messenger-header',\n templateUrl: './messenger-header.component.html',\n imports: [NgClass, ProfileComponent, ChatInfoComponent, ManageChatInfoComponent],\n standalone: true,\n})\nexport class MessengerHeaderComponent {\n @Input() messenger!: RTSeeMessenger;\n\n isDropdownOpen: boolean = false;\n chatImageExpanded: boolean = false;\n\n constructor(public defaultImagesService: DefaultImagesService) {}\n\n openProfile(id: string): void {\n if (this.messenger.ownProfileOpened) {\n return;\n }\n void this.messenger.openProfile(id);\n }\n\n toggleDropdown(): void {\n this.isDropdownOpen = !this.isDropdownOpen;\n }\n\n closeDropdown(): void {\n this.isDropdownOpen = false;\n }\n\n openNewChatDialog(): void {\n this.isDropdownOpen = false;\n this.messenger.openManageChatInfo();\n }\n\n closeManageChatDialog(): void {\n this.messenger.closeManageChatInfo();\n }\n\n onChatSaved(chat: IRTSeeChat): void {\n this.messenger.closeManageChatInfo();\n }\n\n onChatImageClick(): void {\n if (!this.messenger.openedChatDetails) {\n // First click: open chat info (circle image)\n this.chatImageExpanded = false;\n this.messenger.openChatInfo();\n } else if (!this.chatImageExpanded) {\n // Second click: expand image to full width square\n this.chatImageExpanded = true;\n } else {\n // Third click: collapse back to circle\n this.chatImageExpanded = false;\n }\n }\n\n collapseInfo(): void {\n this.chatImageExpanded = false;\n this.messenger.collapseInfo();\n }\n\n get isGroupOrChannelChat(): boolean {\n return this.messenger.openedChat?.type === RTSeeChatTypes.GROUP ||\n this.messenger.openedChat?.type === RTSeeChatTypes.CHANNEL;\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rts-messenger-header\"\n [ngClass]=\"{\n 'rts-messenger-header-chat-opened': messenger.openedChat && !messenger.manageChatInfo,\n 'rts-chat-header-unread': messenger.openedChat && !messenger.unreadMessagesCount,\n 'rts-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails || messenger.manageChatInfo,\n 'rts-messenger-header-create-chat-mode': messenger.manageChatInfo,\n 'rts-messenger-header-my-profile-mode': messenger.ownProfileOpened,\n 'rts-messenger-header-chat-info-mode': (messenger.openedProfile || messenger.openedChatDetails) && !messenger.ownProfileOpened && !messenger.manageChatInfo,\n 'rts-messenger-header-chat-image-expanded': chatImageExpanded\n }\"\n>\n <span class=\"rts-messenger-header-collapse-button\"\n (click)=\"messenger.manageChatInfo ? closeManageChatDialog() : collapseInfo()\"\n >\n <span class=\"pi pi-arrow-left\"></span>\n </span>\n <div class=\"rts-messenger-header-left\">\n @if (!messenger.openedChat && messenger.myPeer) {\n <div class=\"rts-messenger-header-avatar\"\n (click)=\"openProfile(messenger.myPeer.clientId)\"\n >\n <div [style.background-image]=\"'url(' + messenger.myPeer.imageUrl || defaultImagesService.PROFILE + ')'\"\n class=\"rts-messenger-header-avatar-image\">\n </div>\n </div>\n } @else if (messenger.openedChat) {\n <button class=\"rts-messenger-close-chat\"\n (click)=\"messenger.closeChat()\"\n >\n <span class=\"material-icons-outlined\">arrow_back</span>\n @if (messenger.unreadMessagesCount) {\n <span class=\"unread-count\">{{messenger.unreadMessagesCount}}</span>\n }\n </button>\n }\n </div>\n <div class=\"rts-messenger-header-right\">\n @if (messenger.openedChat) {\n <div class=\"rts-messenger-chat-image-container rts-messenger-header-avatar\"\n (click)=\"onChatImageClick()\"\n >\n <div class=\"rts-messenger-chat-image rts-messenger-header-avatar-image\"\n [style.background-image]=\"'url(' + messenger.openedChat.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n </div>\n } @else {\n <div class=\"rts-messenger-header-actions\">\n <button class=\"rts-messenger-header-add-button\"\n (click)=\"toggleDropdown()\"\n >\n <span class=\"material-icons-outlined\">add</span>\n </button>\n\n @if (isDropdownOpen) {\n <div class=\"rts-messenger-header-dropdown-backdrop\"\n (click)=\"closeDropdown()\"\n ></div>\n <div class=\"rts-messenger-header-dropdown\">\n <button class=\"rts-messenger-header-dropdown-item\"\n (click)=\"openNewChatDialog()\"\n >\n <span class=\"material-icons-outlined rts-messenger-header-dropdown-icon\">chat_bubble_outline</span>\n <span>New Chat</span>\n </button>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"rts-messenger-header-center\">\n @if (messenger.manageChatInfo) {\n <div class=\"rts-messenger-header-create-chat-container\">\n <rtsee-manage-chat-info [messenger]=\"messenger\"\n [chat]=\"messenger.manageChatInfo.chat || undefined\"\n (chatSaved)=\"onChatSaved($event)\"\n (cancelled)=\"closeManageChatDialog()\"\n ></rtsee-manage-chat-info>\n </div>\n } @else if (messenger.openedChat) {\n <div [ngClass]=\"{'rts-messenger-header-opened-chat-info-expanded': messenger.openedProfile || messenger.openedChatDetails}\"\n class=\"rts-messenger-header-opened-chat-info\">\n <div class=\"rts-messenger-profile-header-placeholder\">\n <p class=\"rts-messenger-header-chat-title\"\n >{{ messenger.openedChat.name }}</p>\n </div>\n\n <div class=\"rts-messenger-profile-data-container\">\n @if (messenger.openedChatDetails && isGroupOrChannelChat && messenger.chatInfo) {\n <rtsee-chat-info [messenger]=\"messenger\"\n [chatInfo]=\"messenger.chatInfo\"\n (editChatInfo)=\"messenger.openManageChatInfo(messenger.openedChat)\"\n (chatDeleted)=\"messenger.closeChatInfo()\"\n ></rtsee-chat-info>\n } @else if (messenger.openedChatDetails) {\n <rtsee-profile [messenger]=\"messenger\"\n ></rtsee-profile>\n }\n </div>\n </div>\n } @else {\n <p class=\"rts-messenger-header-title\"\n >{{messenger.labels[RTSeeTextLabelKeys.MESSANGER_TITLE]}}</p>\n <rtsee-profile [messenger]=\"messenger\"\n [peer]=\"messenger.myPeer\"\n ></rtsee-profile>\n }\n </div>\n</div>\n","import { Injectable } from '@angular/core';\n\nimport dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\ndayjs.extend(relativeTime);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimeFormatHelperService {\n toAgo(time: Date): string {\n /* eslint-disable */\n return dayjs(time).fromNow() as string;\n /* eslint-enable */\n }\n toDayOfWeek(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('ddd');\n /* eslint-enable */\n }\n toTime(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('HH:mm') as string;\n /* eslint-enable */\n }\n toDate(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('D MMMM') as string;\n /* eslint-enable */\n }\n toDateNumeral(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('DD.MM');\n /* eslint-enable */\n }\n\n toDateNumeralWithYear(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('DD.MM.YY');\n /* eslint-enable */\n }\n\n toDateWithYear(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('MMMM D, YYYY ') as string;\n /* eslint-enable */\n }\n\n formatDate(time: Date) {\n const today = new Date();\n const dayMs = 1000 * 60 * 60 * 24;\n const twoDays = dayMs * 2;\n\n if (!time) {\n return '';\n }\n\n if (\n today.getTime() - time.getTime() < dayMs &&\n today.getDay() === time.getDay()\n ) {\n return 'Today';\n }\n\n if (\n today.getTime() - time.getTime() < twoDays &&\n today.getTime() - time.getTime() > dayMs &&\n today.getDay() !== time.getDay()\n ) {\n return 'Yesterday';\n }\n\n if (today.getFullYear() === time.getFullYear()) {\n return this.toDate(time);\n }\n\n return this.toDateWithYear(time);\n }\n\n formatTimeOrDate(time: Date) {\n if (!time) {\n return '';\n }\n\n const today = new Date();\n const dayMs = 1000 * 60 * 60 * 24;\n\n if (\n today.getTime() - time.getTime() < dayMs &&\n today.getDay() === time.getDay()\n ) {\n return this.toTime(time);\n }\n\n if (\n today.getTime() - time.getTime() > dayMs &&\n today.getTime() - time.getTime() < dayMs * 7\n ) {\n return this.toDayOfWeek(time);\n }\n\n if (\n today.getTime() - time.getTime() > dayMs * 7 &&\n today.getFullYear() === time.getFullYear()\n ) {\n return this.toDateNumeral(time);\n }\n\n return this.toDateNumeralWithYear(time);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessage } from '@rtsee/messenger';\nimport { IMessageThumbnail } from '@rtsee/common';\nimport { TimeFormatHelperService } from '../../../../../services/time-format-helper.service';\nimport { NgClass, NgIf } from '@angular/common';\nimport { PreloaderComponent } from '../../../../../common/components/preloader/preloader.component';\n\n@Component({\n selector: 'rtsee-message-time-and-status',\n templateUrl: './message-time-and-status.component.html',\n imports: [NgIf, NgClass, PreloaderComponent],\n standalone: true,\n})\nexport class MessageTimeAndStatusComponent {\n @Input() message!: RTSeeMessage | IMessageThumbnail;\n @Input() hideStatus?: boolean;\n @Input() inChat?: boolean;\n constructor(public timeFormatService: TimeFormatHelperService) {}\n}\n","<div class=\"rts-messenger-message-time-and-status\">\n <span class=\"rts-messenger-message-status\" *ngIf=\"!hideStatus\" [ngClass]=\"{'showing-status-inside-chat': inChat }\">\n <span *ngIf=\"message.status === 'pending'\"><rtsee-preloader [diameter]=\"5\"></rtsee-preloader></span>\n <span *ngIf=\"message.status === 'sent'\" class=\"material-icons-outlined rts-message-sent-status\">check</span>\n <span *ngIf=\"message.status === 'delivered'\" class=\"material-icons-outlined rts-message-delivered-status\">check</span>\n <span *ngIf=\"message.status === 'seen'\" class=\"material-icons-outlined rts-message-seen-status\">done_all</span>\n </span>\n <span class=\"rts-messenger-message-time\">{{timeFormatService.formatTimeOrDate(message.createdAt)}}</span>\n</div>\n","export const COMMON_CONSTANTS = {\n minPasswordLength: 8,\n requestItemLimit: 20,\n customTimeFormat: 'HH:mm',\n customDateFormat: 'dd/MM/YYYY',\n customDateFormatDaysJs: 'DD/MM/YYYY',\n customDateTimeFormat: 'dd/MM/YYYY HH:mm',\n defaultProfileImgUrl: 'https://rtsee-local-files-vault.s3.us-east-1.amazonaws.com/0e58dbea-568c-4007-9a55-3d6f0c859ffb_default-profile-image.png',\n mobileBreakpoint: 800,\n};\n","import { AfterViewInit, Directive, ElementRef } from '@angular/core';\nimport shave from 'shave';\n\n@Directive({\n selector: '[rtseeShave]',\n standalone: true,\n})\nexport class ShaveDirective implements AfterViewInit {\n constructor(private elem: ElementRef<HTMLDivElement>) {}\n\n ngAfterViewInit() {\n const height = this.elem.nativeElement?.offsetHeight;\n shave(this.elem.nativeElement as unknown as NodeList, height);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RTSeeChatTypes, IMessageThumbnail } from '@rtsee/common';\nimport { TimeFormatHelperService } from '../../../services/time-format-helper.service';\nimport { MessageTimeAndStatusComponent } from '../message/components/message-time-and-status/message-time-and-status.component';\nimport { NgClass, NgIf } from '@angular/common';\nimport { COMMON_CONSTANTS } from '../../constans/common.const';\nimport {ShaveDirective} from \"../../../directives/shave.directive\";\n\n@Component({\n selector: 'rtsee-chat-thumbnail',\n templateUrl: './chat-thumbnail.component.html',\n imports: [MessageTimeAndStatusComponent, NgClass, NgIf, ShaveDirective],\n standalone: true,\n})\nexport class ChatThumbnailComponent {\n @Input() chat!: IMessageThumbnail;\n @Input() messenger!: RTSeeMessenger;\n\n readonly RTSeeChatTypes = RTSeeChatTypes;\n\n constructor(public timeFormatService: TimeFormatHelperService) {}\n\n protected readonly COMMON_CONSTANTS = COMMON_CONSTANTS;\n}\n","<div class=\"rts-chat-thumbnail\" (click)=\"messenger.openChatById(chat.chatId)\">\n <div class=\"rts-chat-thumbnail-image\">\n <img [src]=\"chat.chatImageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rts-chat-thumbnail-left\">\n <div class=\"rts-chat-thumbnail-name\">\n <span>{{ chat.chatName }}</span>\n <div class=\"rts-chat-thumbnail-status\">\n <rtsee-message-time-and-status [message]=\"chat\"\n [hideStatus]=\"chat && !!(chat.unreadMessagesCount)\">\n </rtsee-message-time-and-status>\n </div>\n </div>\n <div class=\"rts-chat-thumbnail-last-message\"\n [ngClass]=\"{'rts-has-unread': chat.unreadMessagesCount}\"\n rtseeShave>\n @if (chat.chatType !== RTSeeChatTypes.INDIVIDUAL && chat.senderName) {\n <span class=\"rts-chat-thumbnail-last-message-sender\">{{chat.senderName}}</span>\n <span>:</span>\n <span> </span>\n }\n @if (chat.text) {\n <span class=\"rts-chat-thumbnail-last-message-text\">{{chat.text}}</span>\n }\n @if (chat.unreadMessagesCount) {\n <div class=\"rts-messenger-thumbnail-unread\">\n <span class=\"rts-messenger-thumbnail-unread-count\">{{chat.unreadMessagesCount}}</span>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\nimport { NgForOf } from '@angular/common';\nimport { ChatThumbnailComponent } from '../chat-thumbnail/chat-thumbnail.component';\n\n@Component({\n selector: 'rtsee-chats-list',\n templateUrl: './chats-list.component.html',\n imports: [NgForOf, ChatThumbnailComponent],\n standalone: true,\n})\nexport class ChatsListComponent implements OnInit {\n @Input() messenger!: RTSeeMessenger;\n @Input() chats!: RTSeeChat[];\n\n ngOnInit(): void {\n // console.log(this.chats);\n }\n}\n","<div class=\"rts-chats-list\">\n <div class=\"rts-chat-thumbnail-container\" *ngFor=\"let chat of chats; let last = last;\">\n <rtsee-chat-thumbnail [chat]=\"chat.thumbnail\" [messenger]=\"messenger\"></rtsee-chat-thumbnail>\n </div>\n</div>\n","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[widgetHost]',\n standalone: true,\n})\nexport class WidgetDirective {\n constructor(public viewContainerRef: ViewContainerRef) {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { IRatingConfigWithRate } from '@rtsee/common';\nimport { NgClass } from '@angular/common';\nimport { IRTSeeRateBase } from '@rtsee/common/src/interfaces/utilities/rating/Rate';\n\n@Component({\n selector: 'rtsee-rating',\n imports: [NgClass],\n templateUrl: './rating.component.html',\n})\nexport class RatingComponent implements OnInit {\n stars: string[] = [];\n mutable: boolean = false;\n rateValue: number = 0;\n\n @Input() config?: IRatingConfigWithRate;\n @Input() rate?: Pick<IRTSeeRateBase, 'value' | 'maxValue'>;\n\n ngOnInit(): void {\n this.init();\n }\n\n init(): void {\n if (this.rate) {\n this.initStars(this.rate.value, this.rate.maxValue);\n this.rateValue = this.rate.value;\n } else if (this.config) {\n this.mutable = true;\n this.initStars(this.config.rate?.value || 0, this.config.maxRateValue);\n this.rateValue = this.config.rate?.value || 0;\n } else {\n throw new Error(`Neither rate nor vote config provided!`);\n }\n }\n\n initStars(value: number, maxValue: number): void {\n const stars: string[] = [];\n const full: number = Math.floor(value);\n const hasHalf: boolean = value - full >= 0.25;\n for (let i: number = 0; i < full; i++) {\n stars.push('full');\n }\n if (hasHalf) {\n stars.push('half');\n }\n while (stars.length < maxValue) {\n stars.push('empty');\n }\n this.stars = stars;\n }\n\n onStarClicked(index: number): void {\n if (!this.config || !this.config.rate) {\n return;\n }\n this.config.rate.value = index + 1;\n this.init();\n }\n}\n","<div class=\"rtsee-rating\">\n @for (star of stars; track $index) {\n <span class=\"rtsee-rating-star\"\n [ngClass]=\"{\n 'rtsee-rating-star-full': star === 'full',\n 'rtsee-rating-star-half': star === 'half',\n 'rtsee-rating-star-empty': star === 'empty',\n 'rtsee-rating-star-clickable': mutable\n }\"\n (click)=\"onStarClicked($index)\"\n >★</span>\n }\n @if (rateValue) {\n <span class=\"rtsee-rating-number\">{{ rateValue }}</span>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeChat, RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';\nimport { IRTSeeCall } from '@rtsee/core';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'ngx-call-widget',\n templateUrl: './call-widget.component.html',\n styleUrls: ['./call-widget.component.scss'],\n imports: [NgClass],\n standalone: true,\n})\nexport class CallWidgetComponent implements OnInit {\n @Input() message!: RTSeeMessage<IRTSeeCall>;\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n\n ngOnInit(): void {}\n\n joinCall() {\n console.log('message data: ', this.message.data);\n if (\n !this.messenger ||\n (!this.message.data?.roomId && !this.chat.conferenceRoom)\n ) {\n console.log('No Room Id specified or no messenger!');\n return;\n }\n\n const roomId: string | null =\n this.message.data?.roomId || this.chat.conferenceRoom?.id || null;\n\n if (!roomId) {\n console.log('Room Id unavailable!');\n return;\n }\n\n void this.messenger.joinCall(roomId);\n }\n}\n","<div class=\"rts-call-widget\">\n <p> The call has started</p>\n <button class=\"rts-join-call-btn\"\n (click)=\"joinCall()\">\n Join Call\n </button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { IOzzyPromptCost } from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-cost-display',\n standalone: true,\n imports: [],\n template: `\n @if (cost) {\n <div class=\"rts-cost-display\">\n <span class=\"rts-cost-icon\">⚡</span>\n <span class=\"rts-cost-tokens\">\n {{ formatNumber(cost.inputTokens) }} in / {{ formatNumber(cost.outputTokens) }} out\n <span class=\"rts-cost-separator\">·</span>\n {{ formatNumber(cost.totalTokens) }} total\n </span>\n </div>\n }\n `,\n styles: [`\n .rts-cost-display {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 0 0;\n font-size: 11px;\n color: var(--rts-text-muted, #8b8fa3);\n font-family: var(--rts-font-mono, 'SF Mono', 'Fira Code', monospace);\n user-select: none;\n }\n\n .rts-cost-icon {\n font-size: 10px;\n opacity: 0.7;\n }\n\n .rts-cost-tokens {\n letter-spacing: 0.01em;\n }\n\n .rts-cost-separator {\n margin: 0 2px;\n opacity: 0.5;\n }\n `]\n})\nexport class CostDisplayComponent {\n @Input() cost!: IOzzyPromptCost;\n\n formatNumber(n: number): string {\n return n.toLocaleString();\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { RTSeeChat, RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';\nimport { NgClass } from '@angular/common';\nimport { IRTSeeMessageImage, RTSeeIllustratorEvents } from '@rtsee/common';\nimport { sanitizeImageUrl } from '@rtsee/utilities-ui';\nimport { CostDisplayComponent } from '../../../../common/components/cost-display/cost-display.component';\n\n@Component({\n selector: 'rtsee-media-widget',\n standalone: true,\n imports: [NgClass, CostDisplayComponent],\n templateUrl: './media-widget.component.html',\n styleUrls: ['./media-widget.component.scss'],\n})\nexport class MediaWidgetComponent implements OnInit {\n @Input() message!: RTSeeMessage;\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n @Input() showCost = true;\n\n visibleImages: IRTSeeMessageImage[] = [];\n hiddenCount = 0;\n showAll = false;\n\n private readonly MAX_GRID = 4;\n\n ngOnInit(): void {\n this.updateVisibleImages();\n }\n\n get hasVideo(): boolean {\n return !!this.message.video;\n }\n\n get hasImages(): boolean {\n return !!(this.message.images?.length);\n }\n\n get gridClass(): string {\n const count = this.visibleImages.length;\n if (count === 1) return 'rts-media-grid-1';\n if (count === 2) return 'rts-media-grid-2';\n return 'rts-media-grid-4';\n }\n\n toggleShowAll(): void {\n this.showAll = !this.showAll;\n this.updateVisibleImages();\n }\n\n sendToIllustrator(event: MouseEvent, img: IRTSeeMessageImage): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined' && img?.url) {\n // Retain AWS presigned URL so Illustrator can render the image preview!\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.SET_IMAGE_FOR_REVIEW, {\n detail: {\n imageUrl: img.url,\n prompt: img.name || (typeof this.message.text === 'string' ? this.message.text : '') || '',\n source: 'messenger',\n },\n })\n );\n }\n }\n\n addToContext(event: MouseEvent, img: IRTSeeMessageImage): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined' && img?.url) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: 'chat-img-' + Math.random().toString(36).substring(2, 9),\n imageUrl: img.url,\n title: img.name || 'Chat image',\n description: (typeof this.message.text === 'string' ? this.message.text : '') || '',\n visualDescription: '',\n sourceType: 'custom',\n active: true,\n },\n })\n );\n }\n }\n\n private updateVisibleImages(): void {\n const all = this.message.images || [];\n if (this.showAll || all.length <= this.MAX_GRID) {\n this.visibleImages = all;\n this.hiddenCount = 0;\n } else {\n this.visibleImages = all.slice(0, this.MAX_GRID);\n this.hiddenCount = all.length - this.MAX_GRID;\n }\n\n const reqId = (this.message?.data as any)?.requestId;\n if (reqId && this.visibleImages.length > 0 && typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.REQUESTED_GENERATION_SUCCEED, {\n detail: {\n requestId: reqId,\n imageUrl: this.visibleImages[0].url,\n messageId: this.message.id,\n chatId: this.chat?.id,\n },\n })\n );\n }\n }\n}\n","<div class=\"rts-media-widget\">\n <!-- Video player -->\n @if (message.video) {\n <div class=\"rts-media-video\">\n <video\n controls\n playsinline\n preload=\"metadata\"\n [src]=\"message.video.url\"\n class=\"rts-video-player\"\n >\n Your browser does not support video playback.\n </video>\n </div>\n }\n\n <!-- Image grid -->\n @if (hasImages) {\n <div class=\"rts-media-images\" [ngClass]=\"gridClass\">\n @for (img of visibleImages; track img.url) {\n <div class=\"rts-media-image-wrapper\">\n <img [src]=\"img.url\" [alt]=\"img.name\" class=\"rts-media-image\" loading=\"lazy\" />\n <div class=\"rts-media-image-actions\">\n <button\n type=\"button\"\n class=\"rts-media-btn-paint\"\n title=\"Send image to Illustrator (Review & Iterate)\"\n (click)=\"sendToIllustrator($event, img)\"\n >\n <i class=\"pi pi-palette\"></i>\n <span>+ paint</span>\n </button>\n <button\n type=\"button\"\n class=\"rts-media-btn-context\"\n title=\"Add image to Illustrator context references\"\n (click)=\"addToContext($event, img)\"\n >\n <i class=\"pi pi-plus\"></i>\n <span>+ context</span>\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Show more / less toggle -->\n @if (hiddenCount > 0 || showAll) {\n <button class=\"rts-media-toggle\" (click)=\"toggleShowAll()\">\n {{ showAll ? 'Show less' : 'Show ' + hiddenCount + ' more' }}\n </button>\n }\n\n <!-- Cost display (optional, disabled when nested inside agentic widget) -->\n @if (showCost && message.cost) {\n <div class=\"rts-media-cost\">\n <rtsee-cost-display [cost]=\"message.cost\"></rtsee-cost-display>\n </div>\n }\n</div>\n","import {\n Component,\n Input,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { RTSeeChat, RTSeeChatEvents, RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';\nimport { NgClass } from '@angular/common';\nimport { CostDisplayComponent } from '../../../../common/components/cost-display/cost-display.component';\nimport { MediaWidgetComponent } from '../media-widget/media-widget.component';\n\n@Component({\n selector: 'rtsee-agentic-text-response',\n standalone: true,\n imports: [NgClass, CostDisplayComponent, MediaWidgetComponent],\n templateUrl: './agentic-text-response.component.html',\n styleUrls: ['./agentic-text-response.component.scss'],\n})\nexport class AgenticTextResponseComponent implements OnInit, OnDestroy {\n @Input() message!: RTSeeMessage;\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n\n isStreaming = false;\n streamText = '';\n\n private flowId: string | null = null;\n private onStreamStartBound: (data: any) => void;\n private onChunkBound: (data: any) => void;\n private onStreamEndBound: (data: any) => void;\n\n constructor(private cdr: ChangeDetectorRef) {\n this.onStreamStartBound = this.onStreamStart.bind(this);\n this.onChunkBound = this.onChunk.bind(this);\n this.onStreamEndBound = this.onStreamEnd.bind(this);\n }\n\n ngOnInit(): void {\n this.flowId = this.message.data?.flowId || null;\n\n // If the message already has text, it's a saved/finished message\n if (this.message.text) {\n this.streamText = this.message.text;\n this.isStreaming = false;\n return;\n }\n\n // Otherwise, listen for streaming events\n this.isStreaming = true;\n this.chat.on(RTSeeChatEvents.AGENT_CHUNK_RECEIVED, this.onChunkBound);\n this.chat.on(RTSeeChatEvents.AGENT_STREAM_STARTED, this.onStreamStartBound);\n this.chat.on(RTSeeChatEvents.AGENT_STREAM_ENDED, this.onStreamEndBound);\n }\n\n ngOnDestroy(): void {\n this.chat.off(RTSeeChatEvents.AGENT_CHUNK_RECEIVED, this.onChunkBound);\n this.chat.off(RTSeeChatEvents.AGENT_STREAM_STARTED, this.onStreamStartBound);\n this.chat.off(RTSeeChatEvents.AGENT_STREAM_ENDED, this.onStreamEndBound);\n }\n\n get displayText(): string {\n return this.streamText || this.message.text || '';\n }\n\n get hasMedia(): boolean {\n return !!(this.message.images?.length || this.message.video);\n }\n\n private onStreamStart(data: { flowId: string }): void {\n if (this.flowId && data.flowId !== this.flowId) {\n return;\n }\n this.isStreaming = true;\n this.streamText = '';\n this.cdr.detectChanges();\n }\n\n private onChunk(data: { chatId: string; flowId: string; text: string }): void {\n if (this.flowId && data.flowId !== this.flowId) {\n return;\n }\n this.streamText += data.text;\n this.cdr.detectChanges();\n }\n\n private onStreamEnd(data: { flowId: string }): void {\n if (this.flowId && data.flowId !== this.flowId) {\n return;\n }\n this.isStreaming = false;\n this.cdr.detectChanges();\n }\n}\n","<div class=\"rts-agentic-response\" [ngClass]=\"{'rts-agentic-streaming': isStreaming}\">\n <div class=\"rts-agentic-badge\">\n <span class=\"rts-agentic-badge-icon\">✦</span>\n <span class=\"rts-agentic-badge-label\">AI</span>\n </div>\n\n <div class=\"rts-agentic-text-block\">\n <p class=\"rts-agentic-text\">{{ displayText }}@if (isStreaming) {<span class=\"rts-agentic-cursor\"></span>}</p>\n </div>\n\n <!-- Media section (images/video from agentic response) -->\n @if (hasMedia) {\n <rtsee-media-widget\n [message]=\"message\"\n [messenger]=\"messenger\"\n [chat]=\"chat\"\n [showCost]=\"false\"\n ></rtsee-media-widget>\n }\n\n <!-- Token usage footer -->\n @if (!isStreaming && message.cost) {\n <div class=\"rts-agentic-footer\">\n <rtsee-cost-display [cost]=\"message.cost\"></rtsee-cost-display>\n </div>\n }\n</div>\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { DatePipe, NgClass } from '@angular/common';\nimport {\n OzzyClientTask,\n OzzyClientTaskEvents,\n RTSeeChat,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { IOzzyTaskLog, OzzyTaskStatus } from '@rtsee/common';\n\n/**\n * Default client-side representation of a server-side OzzyTask.\n * Can be used directly (`[task]`) or as a message widget (`message.data.taskId`).\n */\n@Component({\n selector: 'rtsee-task',\n standalone: true,\n imports: [NgClass, DatePipe],\n templateUrl: './rtsee-task.component.html',\n styleUrls: ['./rtsee-task.component.scss'],\n})\nexport class RTSeeTaskComponent implements OnInit, OnChanges, OnDestroy {\n @Input() task?: OzzyClientTask | null;\n @Input() message?: RTSeeMessage;\n @Input() messenger?: RTSeeMessenger;\n @Input() chat?: RTSeeChat;\n /** hide the execute button (e.g. when the workflow executes the task itself) */\n @Input() allowExecute: boolean = true;\n\n @ViewChild('logsContainer') logsContainer?: ElementRef<HTMLDivElement>;\n\n copied: 'input' | 'output' | null = null;\n\n private subscribedTask: OzzyClientTask | null = null;\n private onChangedBound = () => this.onTaskChanged();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (!this.task && this.message?.data?.taskId && this.messenger) {\n this.task = this.messenger.ozzy.getTask(this.message.data.taskId);\n }\n this.subscribe();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['task'] && !changes['task'].firstChange) {\n this.subscribe();\n }\n }\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n get statusLabel(): string {\n switch (this.task?.status) {\n case OzzyTaskStatus.IN_PROGRESS:\n return 'Running';\n case OzzyTaskStatus.SUCCESS:\n return 'Completed';\n case OzzyTaskStatus.FAIL:\n return 'Failed';\n default:\n return 'Ready';\n }\n }\n\n get statusClass(): string {\n switch (this.task?.status) {\n case OzzyTaskStatus.IN_PROGRESS:\n return 'rts-task-status-running';\n case OzzyTaskStatus.SUCCESS:\n return 'rts-task-status-success';\n case OzzyTaskStatus.FAIL:\n return 'rts-task-status-fail';\n default:\n return 'rts-task-status-ready';\n }\n }\n\n get inputJson(): string {\n return this.toJson(this.task?.input);\n }\n\n get outputJson(): string {\n return this.toJson(this.task?.output);\n }\n\n get hasOutput(): boolean {\n return this.task?.output !== undefined && this.task?.output !== null;\n }\n\n get hasLogs(): boolean {\n return !!(this.task?.logs?.length || this.task?.liveText);\n }\n\n execute(): void {\n void this.task?.execute();\n }\n\n async copy(kind: 'input' | 'output'): Promise<void> {\n try {\n await navigator.clipboard.writeText(kind === 'input' ? this.inputJson : this.outputJson);\n this.copied = kind;\n this.cdr.detectChanges();\n setTimeout(() => {\n this.copied = null;\n this.cdr.detectChanges();\n }, 1500);\n } catch (e) {\n console.log('Failed to copy', e);\n }\n }\n\n trackLog(index: number, log: IOzzyTaskLog): string {\n return `${index}-${log.level}`;\n }\n\n private toJson(value: unknown): string {\n if (value === undefined || value === null) {\n return '';\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n }\n\n private subscribe(): void {\n if (this.subscribedTask === this.task) {\n return;\n }\n this.unsubscribe();\n if (this.task) {\n this.subscribedTask = this.task;\n this.task.on(OzzyClientTaskEvents.CHANGED, this.onChangedBound);\n }\n }\n\n private unsubscribe(): void {\n this.subscribedTask?.off(OzzyClientTaskEvents.CHANGED, this.onChangedBound);\n this.subscribedTask = null;\n }\n\n private onTaskChanged(): void {\n this.cdr.detectChanges();\n const el = this.logsContainer?.nativeElement;\n if (el) {\n el.scrollTop = el.scrollHeight;\n }\n }\n}\n","<div class=\"rts-task\" [ngClass]=\"statusClass\">\n @if (task) {\n <div class=\"rts-task-header\">\n <div class=\"rts-task-identity\">\n <span class=\"rts-task-icon\">⚙</span>\n <div class=\"rts-task-titles\">\n <span class=\"rts-task-name\">{{ task.name || 'Task' }}</span>\n <span class=\"rts-task-id\" [title]=\"task.id\">#{{ task.id }}</span>\n </div>\n </div>\n <span class=\"rts-task-status\">\n <span class=\"rts-task-status-dot\"></span>\n {{ statusLabel }}\n </span>\n </div>\n\n <!-- Input -->\n <div class=\"rts-task-section\">\n <div class=\"rts-task-section-head\">\n <span class=\"rts-task-section-label\">Input</span>\n @if (inputJson) {\n <button type=\"button\" class=\"rts-task-copy\" (click)=\"copy('input')\">\n {{ copied === 'input' ? 'Copied' : 'Copy' }}\n </button>\n }\n </div>\n @if (inputJson) {\n <pre class=\"rts-task-code\"><code>{{ inputJson }}</code></pre>\n } @else if (task.loading) {\n <div class=\"rts-task-placeholder\">Loading…</div>\n } @else {\n <div class=\"rts-task-placeholder\">No input</div>\n }\n </div>\n\n @if (allowExecute) {\n <div class=\"rts-task-actions\">\n <button type=\"button\"\n class=\"rts-task-execute\"\n [disabled]=\"!task.canExecute\"\n (click)=\"execute()\"\n >\n @if (task.isRunning || task.executeInProgress) {\n <span class=\"rts-task-spinner\"></span> Executing…\n } @else if (task.isFailed) {\n <span class=\"pi pi-refresh\"></span> Retry\n } @else if (task.isFinished) {\n <span class=\"pi pi-check\"></span> Executed\n } @else {\n <span class=\"pi pi-play\"></span> Execute\n }\n </button>\n </div>\n }\n\n <!-- Logs -->\n @if (hasLogs || task.isRunning) {\n <div class=\"rts-task-section\">\n <div class=\"rts-task-section-head\">\n <span class=\"rts-task-section-label\">Logs</span>\n @if (task.isRunning) {\n <span class=\"rts-task-live\">LIVE</span>\n }\n </div>\n <div #logsContainer class=\"rts-task-terminal\">\n @for (log of task.logs; track $index) {\n <div class=\"rts-task-log\" [ngClass]=\"'rts-task-log-' + log.level\">\n <span class=\"rts-task-log-time\">{{ log.createdAt | date: 'HH:mm:ss' }}</span>\n <span class=\"rts-task-log-level\">{{ log.level }}</span>\n <span class=\"rts-task-log-message\">{{ log.message }}</span>\n </div>\n }\n @if (task.liveText) {\n <div class=\"rts-task-live-text\">{{ task.liveText }}@if (task.isRunning) {<span class=\"rts-task-cursor\"></span>}</div>\n } @else if (task.isRunning && !task.logs.length) {\n <div class=\"rts-task-log rts-task-log-info\">\n <span class=\"rts-task-log-message\">Waiting for logs…</span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Output -->\n @if (hasOutput) {\n <div class=\"rts-task-section rts-task-section-output\">\n <div class=\"rts-task-section-head\">\n <span class=\"rts-task-section-label\">Output</span>\n <button type=\"button\" class=\"rts-task-copy\" (click)=\"copy('output')\">\n {{ copied === 'output' ? 'Copied' : 'Copy' }}\n </button>\n </div>\n <pre class=\"rts-task-code\"><code>{{ outputJson }}</code></pre>\n </div>\n }\n\n @if (task.errors.length) {\n <div class=\"rts-task-errors\">\n @for (error of task.errors; track $index) {\n <div class=\"rts-task-error\">{{ error.message }}</div>\n }\n </div>\n }\n\n @if (task.requestError) {\n <div class=\"rts-task-errors\">\n <div class=\"rts-task-error\">{{ task.requestError }}</div>\n </div>\n }\n } @else {\n <div class=\"rts-task-placeholder\">Task is not available yet.</div>\n }\n</div>\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n OzzyClientTask,\n OzzyWorkflow,\n OzzyWorkflowClientEvents,\n OzzyWorkflowStep,\n RTSeeChat,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { RTSeeTaskComponent } from '../../message-widgets/rtsee-task/rtsee-task.component';\n\n/**\n * Generic workflow step which renders the task executed by the step.\n */\n@Component({\n selector: 'rtsee-workflow-task-step',\n standalone: true,\n imports: [RTSeeTaskComponent],\n template: `\n @if (task) {\n <rtsee-task [task]=\"task\" [allowExecute]=\"!step.isPending\"></rtsee-task>\n } @else {\n <div class=\"rts-workflow-step-waiting\">\n <span class=\"rts-workflow-step-waiting-spinner\"></span>\n Preparing task…\n </div>\n }\n `,\n styles: [`\n .rts-workflow-step-waiting {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--rts-text-secondary, #8a8fa3);\n padding: 12px 4px;\n }\n .rts-workflow-step-waiting-spinner {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n border: 2px solid rgba(139, 92, 246, 0.25);\n border-top-color: #8b5cf6;\n animation: rts-wts-spin 0.8s linear infinite;\n }\n @keyframes rts-wts-spin { to { transform: rotate(360deg); } }\n `],\n})\nexport class WorkflowTaskStepComponent implements OnInit, OnDestroy {\n @Input() step!: OzzyWorkflowStep;\n @Input() workflow!: OzzyWorkflow;\n @Input() chat?: RTSeeChat;\n @Input() messenger?: RTSeeMessenger;\n\n private onChangedBound = () => this.cdr.detectChanges();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get task(): OzzyClientTask | null {\n return this.step?.task || null;\n }\n\n ngOnInit(): void {\n this.workflow?.on(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n }\n\n ngOnDestroy(): void {\n this.workflow?.off(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n }\n}\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport {\n OzzyWorkflow,\n OzzyWorkflowClientEvents,\n OzzyWorkflowStep,\n RTSeeChat,\n RTSeeChatMember,\n RTSeeMessenger,\n} from '@rtsee/messenger';\n\nexport interface IStorytellerFormOutput {\n title: string;\n text: string;\n historicDescription: string;\n agentId: string;\n}\n\n/**\n * Storyteller step 1: collects the story data and the agent which will build the story.\n */\n@Component({\n selector: 'rtsee-storyteller-form-step',\n standalone: true,\n imports: [ReactiveFormsModule],\n templateUrl: './storyteller-form-step.component.html',\n styleUrls: ['./storyteller-step.scss'],\n})\nexport class StorytellerFormStepComponent implements OnInit, OnDestroy {\n @Input() step!: OzzyWorkflowStep<unknown, IStorytellerFormOutput>;\n @Input() workflow!: OzzyWorkflow;\n @Input() chat?: RTSeeChat;\n @Input() messenger?: RTSeeMessenger;\n\n form: FormGroup = new FormGroup({\n /* eslint-disable */\n title: new FormControl('', [Validators.required, Validators.maxLength(255)]),\n text: new FormControl('', Validators.required),\n historicDescription: new FormControl(''),\n agentId: new FormControl('', Validators.required),\n /* eslint-enable */\n });\n\n private onChangedBound = () => this.onWorkflowChanged();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get agents(): RTSeeChatMember[] {\n return (this.chat?.members || []).filter((m: RTSeeChatMember) => m.isAgent);\n }\n\n get readonly(): boolean {\n return !this.step?.isActive || !!this.workflow?.submitInProgress;\n }\n\n get textLength(): number {\n return ((this.form.get('text')?.value as string) || '').length;\n }\n\n ngOnInit(): void {\n this.workflow?.on(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n\n const agents: RTSeeChatMember[] = this.agents;\n if (agents.length === 1) {\n this.form.get('agentId')?.setValue(agents[0].id);\n }\n\n this.syncWithStep();\n }\n\n ngOnDestroy(): void {\n this.workflow?.off(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n }\n\n submit(): void {\n if (this.readonly) {\n return;\n }\n\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n\n const value = this.form.value as IStorytellerFormOutput;\n void this.workflow.submitStep<IStorytellerFormOutput>({\n title: value.title.trim(),\n text: value.text,\n historicDescription: value.historicDescription || '',\n agentId: value.agentId,\n });\n }\n\n isInvalid(name: string): boolean {\n const control = this.form.get(name);\n return !!control && control.invalid && control.touched;\n }\n\n private onWorkflowChanged(): void {\n this.syncWithStep();\n this.cdr.detectChanges();\n }\n\n private syncWithStep(): void {\n if (this.step?.output) {\n this.form.patchValue(this.step.output, { emitEvent: false });\n }\n\n if (this.readonly) {\n this.form.disable({ emitEvent: false });\n } else {\n this.form.enable({ emitEvent: false });\n }\n }\n}\n","<form class=\"rts-storyteller-form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">Story title</span>\n <input class=\"rts-storyteller-input\"\n [class.rts-storyteller-invalid]=\"isInvalid('title')\"\n formControlName=\"title\"\n type=\"text\"\n placeholder=\"The Lighthouse Keeper\"\n id=\"storyteller-title-{{ step.id }}\"\n />\n </label>\n\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">\n Story\n <span class=\"rts-storyteller-counter\">{{ textLength }} chars</span>\n </span>\n <textarea class=\"rts-storyteller-input rts-storyteller-textarea rts-storyteller-textarea-lg\"\n [class.rts-storyteller-invalid]=\"isInvalid('text')\"\n formControlName=\"text\"\n placeholder=\"Once upon a time…\"\n id=\"storyteller-text-{{ step.id }}\"\n ></textarea>\n </label>\n\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">Historic description</span>\n <textarea class=\"rts-storyteller-input rts-storyteller-textarea\"\n formControlName=\"historicDescription\"\n placeholder=\"Historic context, era, places, people…\"\n id=\"storyteller-historic-{{ step.id }}\"\n ></textarea>\n </label>\n\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">Agent</span>\n @if (agents.length) {\n <div class=\"rts-storyteller-select-wrap\">\n <select class=\"rts-storyteller-input rts-storyteller-select\"\n [class.rts-storyteller-invalid]=\"isInvalid('agentId')\"\n formControlName=\"agentId\"\n id=\"storyteller-agent-{{ step.id }}\"\n >\n <option value=\"\" disabled>Select an agent</option>\n @for (agent of agents; track agent.id) {\n <option [value]=\"agent.id\">\n {{ agent.name }}{{ agent.agentConfiguration?.model?.model ? ' · ' + agent.agentConfiguration?.model?.model : '' }}\n </option>\n }\n </select>\n <span class=\"rts-storyteller-select-caret pi pi-chevron-down\"></span>\n </div>\n } @else {\n <div class=\"rts-storyteller-hint\">There are no agentic members in this chat. Add an agent to continue.</div>\n }\n </label>\n\n @if (workflow.submitError) {\n <div class=\"rts-storyteller-error\">{{ workflow.submitError }}</div>\n }\n\n @if (step.isActive) {\n <div class=\"rts-storyteller-actions\">\n <button class=\"rts-storyteller-submit\"\n type=\"submit\"\n [disabled]=\"workflow.submitInProgress || !agents.length\"\n id=\"storyteller-submit-{{ step.id }}\"\n >\n @if (workflow.submitInProgress) {\n <span class=\"rts-storyteller-spinner\"></span> Creating…\n } @else {\n ✦ Create story\n }\n </button>\n </div>\n }\n</form>\n","import { Component, Input } from '@angular/core';\nimport { OzzyWorkflow, OzzyWorkflowStep, RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\n\ninterface IStoryLinkInput {\n storyId?: string;\n name?: string;\n description?: string;\n slidesCount?: number;\n}\n\n/**\n * Storyteller step 3: link to the newly created story.\n */\n@Component({\n selector: 'rtsee-storyteller-story-link-step',\n standalone: true,\n templateUrl: './storyteller-story-link-step.component.html',\n styleUrls: ['../storyteller-form-step/storyteller-step.scss'],\n})\nexport class StorytellerStoryLinkStepComponent {\n @Input() step!: OzzyWorkflowStep<IStoryLinkInput>;\n @Input() workflow!: OzzyWorkflow;\n @Input() chat?: RTSeeChat;\n @Input() messenger?: RTSeeMessenger;\n\n get story(): IStoryLinkInput {\n return this.step?.input || {};\n }\n\n get storyUrl(): string {\n return this.story.storyId ? `/story/${this.story.storyId}` : '';\n }\n}\n","@if (storyUrl) {\n <a class=\"rts-story-link-card\" [href]=\"storyUrl\" target=\"_blank\" rel=\"noopener\">\n <div class=\"rts-story-link-icon\">📖</div>\n <div class=\"rts-story-link-body\">\n <span class=\"rts-story-link-kicker\">Your story is ready</span>\n <span class=\"rts-story-link-title\">{{ story.name || 'Open story' }}</span>\n @if (story.description) {\n <span class=\"rts-story-link-description\">{{ story.description }}</span>\n }\n @if (story.slidesCount) {\n <span class=\"rts-story-link-meta\">{{ story.slidesCount }} slides</span>\n }\n </div>\n <span class=\"rts-story-link-arrow pi pi-arrow-right\"></span>\n </a>\n} @else {\n <div class=\"rts-storyteller-hint\">The story link will appear here once the story is created.</div>\n}\n","import { Injectable, Type } from '@angular/core';\nimport { WorkflowTaskStepComponent } from '../components/rtsee-messenger/workflow-steps/workflow-task-step/workflow-task-step.component';\nimport { StorytellerFormStepComponent } from '../components/rtsee-messenger/workflow-steps/storyteller-form-step/storyteller-form-step.component';\nimport { StorytellerStoryLinkStepComponent } from '../components/rtsee-messenger/workflow-steps/storyteller-story-link-step/storyteller-story-link-step.component';\n\nexport interface IWorkflowStepWidget {\n /** matches IOzzyWorkflowStepDefinition.widget */\n name: string;\n /** standalone component with `step`, `workflow`, `chat`, `messenger` inputs */\n component: Type<unknown>;\n}\n\n/**\n * Registry of the components which render workflow steps inside the rts-workflow widget.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkflowStepsService {\n stepsMap: IWorkflowStepWidget[] = [\n { name: 'workflow-task-step', component: WorkflowTaskStepComponent },\n { name: 'storyteller-form-step', component: StorytellerFormStepComponent },\n { name: 'storyteller-story-link-step', component: StorytellerStoryLinkStepComponent },\n ];\n\n register(widget: IWorkflowStepWidget): void {\n this.stepsMap = [...this.stepsMap.filter((e) => e.name !== widget.name), widget];\n }\n\n getStepComponentByName(name?: string): Type<unknown> | null {\n if (!name) {\n return null;\n }\n return this.stepsMap.find((e) => e.name === name)?.component || null;\n }\n}\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit, Type } from '@angular/core';\nimport { NgClass, NgComponentOutlet } from '@angular/common';\nimport {\n OzzyWorkflow,\n OzzyWorkflowClientEvents,\n OzzyWorkflowStep,\n RTSeeChat,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { WorkflowStepsService } from '../../../../services/workflow-steps.service';\n\n/**\n * Message widget hosting an Ozzy workflow: header, step navigation and the viewed step component.\n */\n@Component({\n selector: 'rtsee-rts-workflow',\n standalone: true,\n imports: [NgClass, NgComponentOutlet],\n templateUrl: './rts-workflow.component.html',\n styleUrls: ['./rts-workflow.component.scss'],\n})\nexport class RtsWorkflowComponent implements OnInit, OnDestroy {\n @Input() message!: RTSeeMessage;\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n\n workflow: OzzyWorkflow | null = null;\n loading: boolean = false;\n loadError: string | null = null;\n\n private subscribed: OzzyWorkflow | null = null;\n private onChangedBound = () => this.cdr.detectChanges();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private workflowSteps: WorkflowStepsService,\n ) {}\n\n ngOnInit(): void {\n const draft: OzzyWorkflow | undefined = this.message?.data?.draftWorkflow;\n\n if (draft) {\n this.setWorkflow(draft);\n return;\n }\n\n void this.connect();\n }\n\n ngOnDestroy(): void {\n this.subscribed?.off(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n this.subscribed = null;\n }\n\n get viewedStep(): OzzyWorkflowStep | null {\n return this.workflow?.viewedStep || null;\n }\n\n get stepComponent(): Type<unknown> | null {\n return this.workflowSteps.getStepComponentByName(this.viewedStep?.widget);\n }\n\n get stepInputs(): Record<string, unknown> {\n return {\n step: this.viewedStep,\n workflow: this.workflow,\n chat: this.chat,\n messenger: this.messenger,\n };\n }\n\n get progress(): number {\n const steps = this.workflow?.steps || [];\n if (!steps.length) {\n return 0;\n }\n const finished = steps.filter((s) => s.isFinished).length;\n return Math.round((finished / steps.length) * 100);\n }\n\n get statusLabel(): string {\n if (!this.workflow) {\n return '';\n }\n if (this.workflow.isDraft) {\n return 'Draft';\n }\n if (this.workflow.isFinished) {\n return 'Completed';\n }\n if (this.workflow.isFailed) {\n return 'Failed';\n }\n return 'In progress';\n }\n\n stepClass(step: OzzyWorkflowStep): Record<string, boolean> {\n return {\n 'rts-workflow-step-active': step.isActive,\n 'rts-workflow-step-finished': step.isFinished,\n 'rts-workflow-step-failed': step.isFailed,\n 'rts-workflow-step-pending': step.isPending,\n 'rts-workflow-step-viewed': step === this.viewedStep,\n };\n }\n\n viewStep(step: OzzyWorkflowStep): void {\n this.workflow?.viewStep(step);\n }\n\n canView(step: OzzyWorkflowStep): boolean {\n return !!this.workflow?.canView(step);\n }\n\n retry(): void {\n void this.connect();\n }\n\n private async connect(): Promise<void> {\n const workflowId: string | undefined = this.message?.ozzyWorkflowId;\n if (!workflowId || !this.messenger?.ozzy) {\n this.loadError = 'Workflow is not available.';\n return;\n }\n\n this.loading = true;\n this.loadError = null;\n this.cdr.detectChanges();\n\n try {\n this.setWorkflow(await this.messenger.ozzy.connectToWorkflow(workflowId));\n } catch (e: any) {\n this.loadError = e?.friendlyMessage || e?.message || 'Failed to load workflow.';\n } finally {\n this.loading = false;\n this.cdr.detectChanges();\n }\n }\n\n private setWorkflow(workflow: OzzyWorkflow): void {\n this.subscribed?.off(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n this.workflow = workflow;\n this.subscribed = workflow;\n workflow.on(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n }\n}\n","<div class=\"rts-workflow\">\n @if (workflow) {\n <div class=\"rts-workflow-header\">\n <div class=\"rts-workflow-heading\">\n <span class=\"rts-workflow-badge\">#{{ workflow.name }}</span>\n <span class=\"rts-workflow-title\">{{ workflow.title || workflow.name }}</span>\n </div>\n <span class=\"rts-workflow-status\"\n [ngClass]=\"{\n 'rts-workflow-status-finished': workflow.isFinished,\n 'rts-workflow-status-failed': workflow.isFailed,\n 'rts-workflow-status-draft': workflow.isDraft\n }\"\n >{{ statusLabel }}</span>\n </div>\n\n <div class=\"rts-workflow-progress\">\n <div class=\"rts-workflow-progress-bar\" [style.width.%]=\"progress\"></div>\n </div>\n\n <nav class=\"rts-workflow-steps\">\n @for (step of workflow.steps; track step.id; let i = $index; let last = $last) {\n <button type=\"button\"\n class=\"rts-workflow-step\"\n [ngClass]=\"stepClass(step)\"\n [disabled]=\"!canView(step)\"\n (click)=\"viewStep(step)\"\n [title]=\"step.title || step.name\"\n >\n <span class=\"rts-workflow-step-index\">\n @if (step.isFinished) {\n <span class=\"pi pi-check\"></span>\n } @else if (step.isFailed) {\n <span class=\"pi pi-times\"></span>\n } @else {\n {{ i + 1 }}\n }\n </span>\n <span class=\"rts-workflow-step-label\">{{ step.title || step.name }}</span>\n </button>\n @if (!last) {\n <span class=\"rts-workflow-step-connector\"\n [class.rts-workflow-step-connector-done]=\"step.isFinished\"\n ></span>\n }\n }\n </nav>\n\n <section class=\"rts-workflow-body\">\n @if (viewedStep; as step) {\n @if (step.error) {\n <div class=\"rts-workflow-error\">{{ step.error.message }}</div>\n }\n @if (stepComponent) {\n @for (s of [step]; track s.id) {\n <ng-container *ngComponentOutlet=\"stepComponent; inputs: stepInputs\"></ng-container>\n }\n } @else {\n <div class=\"rts-workflow-placeholder\">No widget registered for \"{{ step.widget }}\".</div>\n }\n }\n </section>\n } @else if (loading) {\n <div class=\"rts-workflow-skeleton\">\n <div class=\"rts-workflow-skeleton-line rts-workflow-skeleton-line-sm\"></div>\n <div class=\"rts-workflow-skeleton-line\"></div>\n <div class=\"rts-workflow-skeleton-line rts-workflow-skeleton-line-lg\"></div>\n </div>\n } @else if (loadError) {\n <div class=\"rts-workflow-error\">\n {{ loadError }}\n @if (message.ozzyWorkflowId) {\n <button type=\"button\" class=\"rts-workflow-retry\" (click)=\"retry()\">Retry</button>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { CallWidgetComponent } from '../components/rtsee-messenger/message-widgets/call-widget/call-widget.component';\nimport { AgenticTextResponseComponent } from '../components/rtsee-messenger/message-widgets/agentic-text-response/agentic-text-response.component';\nimport { MediaWidgetComponent } from '../components/rtsee-messenger/message-widgets/media-widget/media-widget.component';\nimport { RtsWorkflowComponent } from '../components/rtsee-messenger/message-widgets/rts-workflow/rts-workflow.component';\nimport { RTSeeTaskComponent } from '../components/rtsee-messenger/message-widgets/rtsee-task/rtsee-task.component';\n\nexport interface IMessageWidget {\n name: string;\n component: any;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MessageWidgetsService {\n widgetsMap: IMessageWidget[] = [\n { name: 'rtsee-call', component: CallWidgetComponent },\n { name: 'agentic-text-response', component: AgenticTextResponseComponent },\n { name: 'rtsee-media', component: MediaWidgetComponent },\n { name: 'rts-workflow', component: RtsWorkflowComponent },\n { name: 'rtsee-task', component: RTSeeTaskComponent },\n ];\n\n getWidgetComponentByName(name: string) {\n /* eslint-disable */\n const mapping = this.widgetsMap.find((e) => e.name === name);\n if (!mapping) {\n return null;\n }\n return mapping.component;\n /* eslint-enable */\n }\n}\n","import {\n AfterViewInit,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {\n RTSeeChat,\n RTSeeChatMember,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { MessageWidgetsService } from '../../../services/message-widgets.service';\nimport { WidgetDirective } from '../../../directives/widget.directive';\nimport { TimeFormatHelperService } from '../../../services/time-format-helper.service';\nimport { NgClass, NgIf } from '@angular/common';\nimport { MessageTimeAndStatusComponent } from './components/message-time-and-status/message-time-and-status.component';\nimport { RatingComponent } from '../../../common/components/rating/rating.component';\nimport { IRTSeeRateConfiguration } from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-message',\n templateUrl: './message.component.html',\n imports: [\n NgClass,\n MessageTimeAndStatusComponent,\n WidgetDirective,\n RatingComponent,\n ],\n standalone: true,\n})\nexport class MessageComponent implements OnInit, AfterViewInit {\n @Input() chat!: RTSeeChat;\n @Input() message!: RTSeeMessage;\n @Input() member!: RTSeeChatMember<any>;\n @Input() messenger!: RTSeeMessenger;\n @ViewChild(WidgetDirective, { static: false }) widgetHost!: WidgetDirective;\n constructor(\n private widgetsService: MessageWidgetsService,\n private componentFactoryResolver: ComponentFactoryResolver,\n public timeFormatService: TimeFormatHelperService,\n ) {}\n\n ngOnInit() {}\n\n ngAfterViewInit() {\n /* eslint-disable */\n if (this.message.widget) {\n const widget = this.widgetsService.getWidgetComponentByName(\n this.message.widget,\n );\n if (!widget) {\n return;\n }\n const viewContainerRef = this.widgetHost.viewContainerRef;\n viewContainerRef.clear();\n const componentToShow =\n this.componentFactoryResolver.resolveComponentFactory(widget);\n const componentRef: ComponentRef<typeof widget> =\n viewContainerRef.createComponent(componentToShow);\n componentRef.instance.message = this.message;\n componentRef.instance.messenger = this.messenger;\n componentRef.instance.chat = this.chat;\n componentRef.changeDetectorRef.detectChanges();\n }\n /* eslint-enable */\n }\n}\n","<div class=\"rts-message-container\" #rtsMessageContainer\n [ngClass]=\"{'rts-message-from-me': message.from.id === messenger.clientId}\"\n>\n <div class=\"rts-messenger-message\">\n @if (message.widget) {\n <ng-template widgetHost></ng-template>\n }\n @if (!message.widget) {\n <p class=\"rts-messenger-message-text\"\n >{{ message.text }}</p>\n }\n <div class=\"rts-messenger-message-info\" #rtsMessageInfo>\n <rtsee-message-time-and-status [message]=\"message\"\n [inChat]=\"true\"\n [hideStatus]=\"message.from.id !== messenger.clientId\"\n ></rtsee-message-time-and-status>\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n DOCUMENT,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {\n RTSeeChat,\n RTSeeChatEvents,\n RTSeeChatMember,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { TimeFormatHelperService } from '../../../services/time-format-helper.service';\nimport { InfiniteScrollDirective } from 'ngx-infinite-scroll';\nimport { NgClass, ViewportScroller } from '@angular/common';\nimport { MessageComponent } from '../message/message.component';\nimport { RTSeeChatTypes } from '@rtsee/common';\nimport { COMMON_CONSTANTS } from '../../constans/common.const';\n\nexport interface IRTSeeMessageGroup {\n id: string;\n sender: RTSeeChatMember;\n senderVisible: boolean;\n messages: RTSeeMessage[];\n}\n\n@Component({\n selector: 'rtsee-messages-list',\n templateUrl: './messages-list.component.html',\n imports: [InfiniteScrollDirective, MessageComponent, NgClass],\n standalone: true,\n})\nexport class MessagesListComponent implements AfterViewInit, OnDestroy, OnInit {\n bindScrollFunction: () => void;\n bindedGroupFunction: () => void;\n messagesGroups: IRTSeeMessageGroup[] = [];\n\n firstGroupedMessage: RTSeeMessage | null = null;\n lastGroupedMessage: RTSeeMessage | null = null;\n\n @Input() chat!: RTSeeChat;\n @Input() messenger!: RTSeeMessenger;\n @ViewChild('scrollBlock') scrollContainer!: ElementRef<HTMLDivElement>;\n constructor(\n private timeFormatService: TimeFormatHelperService,\n private scroller: ViewportScroller,\n @Inject(DOCUMENT) private document: Document,\n ) {\n this.bindScrollFunction = this.scrollToBottom.bind(this) as () => void;\n this.bindedGroupFunction = this.groupMessages.bind(this) as () => void;\n }\n\n @HostListener('window:scroll', ['$event'])\n onWindowScroll(event: Event): void {\n // Get the vertical scroll position\n const verticalOffset: number =\n window.pageYOffset ||\n this.document.documentElement.scrollTop ||\n this.document.body.scrollTop ||\n 0;\n\n if (window.innerWidth >= COMMON_CONSTANTS.mobileBreakpoint) {\n return;\n }\n\n // You can add logic here, e.g., show a 'scroll to top' button\n if (verticalOffset < 300) {\n this.onScrolledToTop();\n }\n }\n\n ngOnInit() {\n this.chat.on(\n RTSeeChatEvents.MESSAGES_LIST_CHANGED,\n this.bindedGroupFunction,\n );\n this.chat.on(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);\n this.groupMessages();\n }\n\n ngAfterViewInit(): void {\n if (this.chat.isStandalone) {\n return;\n }\n this.scrollToBottom();\n }\n\n onMessageSent() {\n this.scrollToBottom();\n }\n\n ngOnDestroy() {\n this.chat.off(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);\n this.chat.off(\n RTSeeChatEvents.MESSAGES_LIST_CHANGED,\n this.bindedGroupFunction,\n );\n }\n\n onScrolledToTop() {\n if (this.chat.messagesLoadInProgress || this.chat.firstMessageLoaded) {\n return;\n }\n this.chat.loadRemoteMessages('back');\n }\n\n onScroll() {\n if (this.chat.messagesLoadInProgress) {\n return;\n }\n this.chat.loadRemoteMessages('front');\n }\n\n scrollToBottom(): void {\n this.groupMessages();\n if (this.chat.isStandalone) {\n return;\n }\n setTimeout(() => {\n if (window.innerWidth < COMMON_CONSTANTS.mobileBreakpoint) {\n this.scroller.scrollToPosition([0, document.body.scrollHeight]);\n }\n\n if (!this.scrollContainer?.nativeElement?.scrollHeight) {\n return;\n }\n\n try {\n this.scrollContainer.nativeElement.scrollTop =\n this.scrollContainer.nativeElement.scrollHeight;\n } catch (err) {\n console.log('Failed to Scroll');\n }\n }, 0);\n }\n\n formatDate(message: RTSeeMessage) {\n return this.timeFormatService.formatDate(message.createdAt);\n }\n\n private groupMessages() {\n if (!this.chat || !this.chat.messages.length) {\n this.messagesGroups.length = 0;\n this.firstGroupedMessage = null;\n this.lastGroupedMessage = null;\n return;\n }\n\n const groups: IRTSeeMessageGroup[] = [];\n let currentGroup: IRTSeeMessageGroup | null = null;\n\n for (let i = 0; i < this.chat.messages.length; i++) {\n const message: RTSeeMessage = this.chat.messages[i];\n\n if (!message.id) {\n continue;\n }\n\n // Same sender as current group → append\n if (currentGroup && message.from.id === currentGroup.sender.id) {\n currentGroup.messages.push(message);\n } else {\n // New sender → start a new group\n const isFromMe: boolean = message.from.id === this.messenger.clientId;\n const isSenderVisible: boolean =\n (this.chat.type !== RTSeeChatTypes.INDIVIDUAL && !isFromMe) ||\n this.chat.type === RTSeeChatTypes.COMMENTS ||\n this.chat.type === RTSeeChatTypes.RATINGS;\n\n currentGroup = {\n id: message.id,\n sender: message.from,\n senderVisible: isSenderVisible,\n messages: [message],\n };\n groups.push(currentGroup);\n }\n }\n\n this.messagesGroups = groups;\n this.saveFirstAndLastGroupedMessages();\n }\n\n private saveFirstAndLastGroupedMessages(): void {\n if (!this.chat.messages.length) {\n this.firstGroupedMessage = null;\n this.lastGroupedMessage = null;\n return;\n }\n\n this.firstGroupedMessage = this.chat.messages[0];\n this.lastGroupedMessage = this.chat.messages[this.chat.messages.length - 1];\n }\n\n protected readonly RTSeeChatTypes = RTSeeChatTypes;\n}\n","<div class=\"rts-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolledUp)=\"onScrolledToTop()\"\n (scroll)=\"onScroll()\"\n [style.padding-bottom]=\"messenger.chatInputHeight + 'px'\"\n>\n @for (messageGroup of messagesGroups; track messageGroup.id) {\n <div class=\"rts-messenger-message-wrapper\" [ngClass]=\"{\n 'rts-messenger-message-wrapper-with-sender': messageGroup.senderVisible\n }\">\n <div class=\"rts-messenger-message-inset\">\n <img [src]=\"messageGroup.sender.imageUrl\"\n class=\"rts-messenger-message-sender-image\"\n >\n </div>\n\n <div class=\"rts-messenger-message-sender-name\">\n <p>{{messageGroup.sender.name}}</p>\n </div>\n\n @for (message of messageGroup.messages; track message.id) {\n <rtsee-message [message]=\"message\"\n [messenger]=\"messenger\"\n [chat]=\"chat\"\n ></rtsee-message>\n }\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeChatMember } from '@rtsee/messenger';\n\n@Component({\n selector: 'rtsee-chat-member-suggestions',\n standalone: true,\n templateUrl: './chat-member-suggestions.component.html',\n})\nexport class ChatMemberSuggestionsComponent {\n @Input() suggestions: RTSeeChatMember[] = [];\n @Input() selectedIndex: number = 0;\n @Input() visible: boolean = false;\n @Output() memberSelected = new EventEmitter<RTSeeChatMember>();\n\n onSelect(member: RTSeeChatMember): void {\n this.memberSelected.emit(member);\n }\n}\n","@if (visible && suggestions.length > 0) {\n <div class=\"rts-chat-member-suggestions\">\n @for (member of suggestions; track member.id; let i = $index) {\n <div class=\"rts-chat-member-suggestion\"\n [class.rts-chat-member-suggestion-active]=\"i === selectedIndex\"\n (mousedown)=\"onSelect(member)\"\n >\n <div class=\"rts-chat-member-suggestion-avatar\"\n [style.background-image]=\"'url(' + member.imageUrl + ')'\"\n ></div>\n <span class=\"rts-chat-member-suggestion-name\">{{ member.name }}</span>\n </div>\n }\n </div>\n}\n","import {\n Component,\n Input,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { RTSeeChat, RTSeeChatEvents } from '@rtsee/messenger';\nimport { IOzzyToolCall } from '@rtsee/common';\nimport {NgIf, JsonPipe, SlicePipe} from '@angular/common';\nimport { Button } from 'primeng/button';\n\ninterface ToolUseRequestData {\n chatId: string;\n flowId: string;\n toolUseId: string;\n params: IOzzyToolCall;\n agentId: string;\n createdAt: Date;\n}\n\n@Component({\n selector: 'rtsee-tool-use-request',\n standalone: true,\n imports: [NgIf, JsonPipe, Button, SlicePipe],\n templateUrl: './tool-use-request.component.html',\n styleUrls: ['./tool-use-request.component.scss'],\n})\nexport class ToolUseRequestComponent implements OnInit, OnDestroy {\n @Input() chat!: RTSeeChat;\n\n visible = false;\n request: ToolUseRequestData | null = null;\n secondsRemaining = 60;\n responded = false;\n\n private timer: ReturnType<typeof setInterval> | null = null;\n private onToolUseRequestBound = (data: ToolUseRequestData) => this.onToolUseRequest(data);\n\n constructor(private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.chat.on(RTSeeChatEvents.TOOL_USE_REQUEST, this.onToolUseRequestBound);\n }\n\n ngOnDestroy(): void {\n this.chat.off(RTSeeChatEvents.TOOL_USE_REQUEST, this.onToolUseRequestBound);\n this.clearTimer();\n }\n\n get parsedParams(): string {\n if (!this.request?.params?.accumulatedInput) { return '{}'; }\n try {\n return JSON.stringify(JSON.parse(this.request.params.accumulatedInput), null, 2);\n } catch {\n return this.request.params.accumulatedInput;\n }\n }\n\n private onToolUseRequest(data: ToolUseRequestData): void {\n this.request = data;\n this.visible = true;\n this.responded = false;\n\n // Calculate remaining time from createdAt\n const createdMs = new Date(data.createdAt).getTime();\n const nowMs = Date.now();\n const elapsed = Math.floor((nowMs - createdMs) / 1000);\n this.secondsRemaining = Math.max(0, 60 - elapsed);\n\n this.startTimer();\n this.cd.detectChanges();\n }\n\n private startTimer(): void {\n this.clearTimer();\n this.timer = setInterval(() => {\n this.secondsRemaining--;\n if (this.secondsRemaining <= 0) {\n this.deny(); // auto-deny on timeout\n }\n this.cd.detectChanges();\n }, 1000);\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n }\n\n allow(): void {\n if (this.responded || !this.request) { return; }\n this.responded = true;\n this.clearTimer();\n this.chat.respondToToolUseRequest(\n this.request.flowId,\n this.request.toolUseId,\n true,\n );\n this.visible = false;\n this.cd.detectChanges();\n }\n\n deny(): void {\n if (this.responded || !this.request) { return; }\n this.responded = true;\n this.clearTimer();\n this.chat.respondToToolUseRequest(\n this.request.flowId,\n this.request.toolUseId,\n false,\n );\n this.visible = false;\n this.cd.detectChanges();\n }\n}\n","<div class=\"tool-use-request-overlay\" *ngIf=\"visible && request\">\n <div class=\"tool-use-request-card\">\n <div class=\"tool-use-request-header\">\n <i class=\"pi pi-cog tool-icon\"></i>\n <span class=\"tool-name\">{{ request.params.name }}</span>\n <span class=\"tool-timer\" [class.urgent]=\"secondsRemaining <= 10\">\n {{ secondsRemaining }}s\n </span>\n </div>\n\n <div class=\"tool-use-request-body\">\n <div class=\"tool-id\">\n <span class=\"label\">Tool ID:</span>\n <code>{{ request.toolUseId | slice:0:12 }}…</code>\n </div>\n\n <div class=\"tool-params\">\n <span class=\"label\">Parameters:</span>\n <pre class=\"params-snippet\">{{ parsedParams }}</pre>\n </div>\n </div>\n\n <div class=\"tool-use-request-actions\">\n <p-button\n label=\"Allow\"\n icon=\"pi pi-check\"\n severity=\"success\"\n size=\"small\"\n (click)=\"allow()\"\n />\n <p-button\n label=\"Deny\"\n icon=\"pi pi-times\"\n severity=\"danger\"\n size=\"small\"\n (click)=\"deny()\"\n />\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IOzzyWorkflowDefinition } from '@rtsee/common';\n\n/**\n * \"#\" workflow suggestions popup for the chat input.\n */\n@Component({\n selector: 'rtsee-workflow-suggestions',\n standalone: true,\n template: `\n @if (visible && suggestions.length > 0) {\n <div class=\"rts-chat-member-suggestions rts-workflow-suggestions\">\n <div class=\"rts-workflow-suggestions-head\">Workflows</div>\n @for (workflow of suggestions; track workflow.name; let i = $index) {\n <div class=\"rts-chat-member-suggestion rts-workflow-suggestion\"\n [class.rts-chat-member-suggestion-active]=\"i === selectedIndex\"\n (mousedown)=\"onSelect($event, workflow)\"\n >\n <span class=\"rts-workflow-suggestion-icon\">#</span>\n <span class=\"rts-workflow-suggestion-body\">\n <span class=\"rts-chat-member-suggestion-name\">{{ workflow.title || workflow.name }}</span>\n <span class=\"rts-workflow-suggestion-meta\">\n #{{ workflow.name }} · {{ workflow.steps.length }} steps\n </span>\n </span>\n </div>\n }\n </div>\n }\n `,\n})\nexport class WorkflowSuggestionsComponent {\n @Input() suggestions: IOzzyWorkflowDefinition[] = [];\n @Input() selectedIndex: number = 0;\n @Input() visible: boolean = false;\n @Output() workflowSelected = new EventEmitter<IOzzyWorkflowDefinition>();\n\n onSelect(event: MouseEvent, workflow: IOzzyWorkflowDefinition): void {\n event.preventDefault();\n this.workflowSelected.emit(workflow);\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { RTSeeChat, RTSeeMessenger, RTSeeMentionAutocomplete, RTSeeChatMember, RTSeeChatEvents, RTSeeWorkflowAutocomplete } from '@rtsee/messenger';\nimport { IOzzyWorkflowDefinition, RTSeeChatTypes } from '@rtsee/common';\nimport { Textarea } from 'primeng/textarea';\nimport { ChatMemberSuggestionsComponent } from '../chat-member-suggestions/chat-member-suggestions.component';\nimport { ToolUseRequestComponent } from '../message-widgets/tool-use-request/tool-use-request.component';\nimport { WorkflowSuggestionsComponent } from '../workflow-suggestions/workflow-suggestions.component';\n\n@Component({\n selector: 'rtsee-chat-input',\n templateUrl: './chat-input.component.html',\n imports: [ReactiveFormsModule, Textarea, ChatMemberSuggestionsComponent, ToolUseRequestComponent, WorkflowSuggestionsComponent],\n standalone: true,\n})\nexport class ChatInputComponent implements OnInit, OnDestroy {\n sendMessageForm: FormGroup = new FormGroup({\n /* eslint-disable */\n message: new FormControl('', Validators.required),\n /* eslint-enable */\n });\n\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n @ViewChild('chatInput') chatInput!: ElementRef<HTMLTextAreaElement>;\n @ViewChild('messageTextarea') messageTextarea!: ElementRef<HTMLTextAreaElement>;\n\n autocomplete: RTSeeMentionAutocomplete = new RTSeeMentionAutocomplete();\n workflowAutocomplete: RTSeeWorkflowAutocomplete = new RTSeeWorkflowAutocomplete();\n mentionedMemberId: string | null = null;\n agentAccessDenied: boolean = false;\n\n /** prevents the Enter keyup that selected a workflow from sending the message */\n private workflowJustSelected: boolean = false;\n\n private accessDeniedTimer: ReturnType<typeof setTimeout> | null = null;\n\n private onAutocompleteChanged = () => {\n // Angular change detection will pick up the property mutations\n };\n\n private onAgentAccessDeniedBound = () => this.showAccessDeniedBanner();\n\n ngOnInit(): void {\n this.autocomplete.on('changed', this.onAutocompleteChanged);\n\n if (this.chat.type !== RTSeeChatTypes.INDIVIDUAL) {\n this.autocomplete.members = this.chat.members;\n }\n\n this.chat.on(RTSeeChatEvents.AGENT_ACCESS_DENIED, this.onAgentAccessDeniedBound);\n\n if (this.messenger?.ozzy) {\n void this.messenger.ozzy.loadDefinitions().then((definitions: IOzzyWorkflowDefinition[]) => {\n this.workflowAutocomplete.workflows = definitions;\n });\n }\n }\n\n ngOnDestroy(): void {\n this.autocomplete.off('changed', this.onAutocompleteChanged);\n this.autocomplete.removeAllListeners();\n this.workflowAutocomplete.removeAllListeners();\n this.chat.off(RTSeeChatEvents.AGENT_ACCESS_DENIED, this.onAgentAccessDeniedBound);\n this.clearAccessDeniedTimer();\n }\n\n get isGroupChat(): boolean {\n return this.chat.type !== RTSeeChatTypes.INDIVIDUAL;\n }\n\n sendMessage() {\n const text: string =\n (this.sendMessageForm.get('message')?.value as string) || '';\n const trimmedText: string = text.trim();\n\n if (trimmedText) {\n if (this.mentionedMemberId) {\n this.chat.sendMessageTo(text, this.mentionedMemberId);\n this.mentionedMemberId = null;\n } else {\n this.chat.sendMessage(text);\n }\n }\n\n this.sendMessageForm.get('message')?.setValue('');\n this.autocomplete.dismiss();\n this.workflowAutocomplete.dismiss();\n this.handleResize();\n }\n\n get anyAutocompleteVisible(): boolean {\n return this.autocomplete.visible || this.workflowAutocomplete.visible;\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.workflowAutocomplete.visible) {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.workflowAutocomplete.moveUp();\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.workflowAutocomplete.moveDown();\n return;\n }\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault();\n this.selectWorkflow();\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n this.workflowAutocomplete.dismiss();\n return;\n }\n }\n\n if (this.autocomplete.visible) {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.autocomplete.moveUp();\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.autocomplete.moveDown();\n return;\n }\n if (event.key === 'Enter') {\n event.preventDefault();\n this.selectMention();\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n this.autocomplete.dismiss();\n return;\n }\n }\n }\n\n onKeyUp(event: KeyboardEvent): void {\n this.handleResize();\n\n if (event.key === 'Enter' && !event.shiftKey && !this.anyAutocompleteVisible && !this.workflowJustSelected) {\n this.sendMessage();\n return;\n }\n this.workflowJustSelected = false;\n\n this.updateAutocomplete();\n }\n\n onInput(): void {\n this.updateAutocomplete();\n }\n\n onMemberSelected(member: RTSeeChatMember): void {\n const result = this.autocomplete.select(member);\n if (result) {\n this.applyMentionToInput(result.member, result.startIndex, result.endLength);\n }\n }\n\n onWorkflowSelected(workflow: IOzzyWorkflowDefinition): void {\n const result = this.workflowAutocomplete.select(workflow);\n if (result) {\n this.applyWorkflow(result.workflow, result.startIndex, result.endLength);\n }\n }\n\n stopAgent(): void {\n this.chat.stopAgentStream();\n }\n\n dismissAccessDenied(): void {\n this.agentAccessDenied = false;\n this.clearAccessDeniedTimer();\n }\n\n handleResize(): void {\n const newHeight: number = this.chatInput.nativeElement.offsetHeight + 16;\n\n if (newHeight !== this.messenger.chatInputHeight) {\n this.messenger.setChatInputHeight(newHeight);\n }\n }\n\n private showAccessDeniedBanner(): void {\n this.agentAccessDenied = true;\n this.clearAccessDeniedTimer();\n this.accessDeniedTimer = setTimeout(() => {\n this.agentAccessDenied = false;\n }, 5000);\n }\n\n private clearAccessDeniedTimer(): void {\n if (this.accessDeniedTimer) {\n clearTimeout(this.accessDeniedTimer);\n this.accessDeniedTimer = null;\n }\n }\n\n private updateAutocomplete(): void {\n const textarea = this.messageTextarea?.nativeElement;\n if (!textarea) { return; }\n\n const text = textarea.value;\n const cursorPos = textarea.selectionStart || 0;\n\n if (!this.chat.isPreset) {\n this.workflowAutocomplete.update(text, cursorPos);\n }\n\n if (!this.isGroupChat) {\n return;\n }\n\n this.autocomplete.members = this.chat.members;\n this.autocomplete.update(text, cursorPos);\n }\n\n private selectWorkflow(): void {\n const result = this.workflowAutocomplete.select();\n if (result) {\n this.workflowJustSelected = true;\n this.applyWorkflow(result.workflow, result.startIndex, result.endLength);\n }\n }\n\n private applyWorkflow(\n workflow: IOzzyWorkflowDefinition,\n startIndex: number,\n replaceLength: number,\n ): void {\n const currentText: string = this.sendMessageForm.get('message')?.value || '';\n const newText: string = (\n currentText.substring(0, startIndex) + currentText.substring(startIndex + replaceLength)\n ).replace(/^\\s+$/, '');\n\n this.sendMessageForm.get('message')?.setValue(newText);\n this.messenger.startWorkflow(this.chat, workflow);\n\n setTimeout(() => {\n this.handleResize();\n this.messageTextarea?.nativeElement?.focus();\n }, 0);\n }\n\n private selectMention(): void {\n const result = this.autocomplete.select();\n if (result) {\n this.applyMentionToInput(result.member, result.startIndex, result.endLength);\n }\n }\n\n private applyMentionToInput(\n member: RTSeeChatMember,\n startIndex: number,\n replaceLength: number,\n ): void {\n const currentText: string = this.sendMessageForm.get('message')?.value || '';\n const before = currentText.substring(0, startIndex);\n const after = currentText.substring(startIndex + replaceLength);\n const replacement = `@${member.name} `;\n const newText = before + replacement + after;\n\n this.sendMessageForm.get('message')?.setValue(newText);\n this.mentionedMemberId = member.id;\n\n // Set cursor after the inserted mention\n setTimeout(() => {\n const textarea = this.messageTextarea?.nativeElement;\n if (textarea) {\n const newCursorPos = startIndex + replacement.length;\n textarea.setSelectionRange(newCursorPos, newCursorPos);\n textarea.focus();\n }\n }, 0);\n }\n}\n","<div #chatInput\n class=\"rts-chat-input\"\n [class.rts-chat-input-streaming]=\"chat.agentStreaming\"\n>\n <rtsee-tool-use-request [chat]=\"chat\"></rtsee-tool-use-request>\n <rtsee-chat-member-suggestions\n [suggestions]=\"autocomplete.suggestions\"\n [selectedIndex]=\"autocomplete.selectedIndex\"\n [visible]=\"autocomplete.visible\"\n (memberSelected)=\"onMemberSelected($event)\"\n ></rtsee-chat-member-suggestions>\n <rtsee-workflow-suggestions\n [suggestions]=\"workflowAutocomplete.suggestions\"\n [selectedIndex]=\"workflowAutocomplete.selectedIndex\"\n [visible]=\"workflowAutocomplete.visible\"\n (workflowSelected)=\"onWorkflowSelected($event)\"\n ></rtsee-workflow-suggestions>\n @if (agentAccessDenied) {\n <div class=\"rts-agent-access-denied-banner\">\n <span class=\"rts-agent-access-denied-icon\">🔒</span>\n <span class=\"rts-agent-access-denied-text\">You don't have permission to call agents in this chat.</span>\n <button class=\"rts-agent-access-denied-dismiss\" (click)=\"dismissAccessDenied()\">Got it!</button>\n </div>\n }\n <div class=\"rts-send-message\">\n <form [formGroup]=\"sendMessageForm\" class=\"rts-chat-input-form\">\n <textarea #messageTextarea\n [invalid]=\"false\"\n [autoResize]=\"true\"\n (keydown)=\"onKeyDown($event)\"\n (keyup)=\"onKeyUp($event)\"\n (input)=\"onInput()\"\n [attr.disabled]=\"chat.agentStreaming ? '' : null\"\n formControlName=\"message\"\n pTextarea\n [placeholder]=\"chat.agentStreaming ? 'Agent is responding...' : 'Type a message...'\"\n class=\"rts-chat-input-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n @if (chat.agentStreaming) {\n <button (click)=\"stopAgent()\"\n class=\"rts-send-message-button rts-send-message-button-stop\"\n type=\"button\"\n title=\"Stop agent response\"\n >\n <span class=\"pi pi-stop-circle\"></span>\n </button>\n } @else {\n <button (click)=\"sendMessage()\"\n class=\"rts-send-message-button\"\n type=\"submit\"\n >\n <span class=\"pi pi-send\"></span>\n </button>\n }\n</div>\n","import {\n Directive,\n ElementRef,\n Output,\n EventEmitter,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\n\n@Directive({\n selector: '[rtseeViewportObserver]',\n standalone: true, // Use `standalone: true` in modern Angular\n})\nexport class ViewportObserverDirective implements AfterViewInit, OnDestroy {\n @Output() inViewport = new EventEmitter<boolean>();\n private observer!: IntersectionObserver;\n\n constructor(private element: ElementRef<HTMLElement>) {}\n\n ngAfterViewInit() {\n // Options for the observer: 0.2 means 20% of the element must be visible\n // to trigger the callback\n const options = {\n root: null, // observing relative to the document's viewport\n rootMargin: '0px',\n threshold: 0,\n };\n\n this.observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n // entry.isIntersecting is true if the element is in the viewport\n this.inViewport.emit(entry.isIntersecting);\n });\n }, options);\n\n this.observer.observe(this.element.nativeElement);\n }\n\n ngOnDestroy() {\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\nimport { MessagesListComponent } from '../messages-list/messages-list.component';\nimport { ChatInputComponent } from '../chat-input/chat-input.component';\nimport { IRTSeeChat } from '@rtsee/common';\nimport { ViewportObserverDirective } from '../../../common/directives/viewport-observer.directive';\nimport { NgClass } from '@angular/common';\nimport { RTSeeEntity } from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-chat',\n templateUrl: './chat.component.html',\n imports: [\n MessagesListComponent,\n ChatInputComponent,\n ViewportObserverDirective,\n NgClass,\n ],\n standalone: true,\n})\nexport class ChatComponent implements OnInit, OnDestroy {\n @Input() chat!: RTSeeChat;\n @Input() chatData?: IRTSeeChat;\n @Input() entity?: RTSeeEntity;\n @Input() messenger!: RTSeeMessenger;\n\n onInViewPortChange(value: boolean): void {\n console.log('Received inViewPortChange', value);\n this.chat.isInViewPort = value;\n }\n\n ngOnInit(): void {\n if (!this.chat && !this.chatData) {\n console.log(`Either chat ot chatData is required!`);\n }\n\n if (!this.chat && this.chatData) {\n this.chat = this.messenger.addStandaloneChat({\n ...this.chatData,\n utilitiesSignalingClient: this.entity?.signalingClient,\n });\n this.chat.loadRemoteMessages('back');\n }\n\n this.chat?.broadcastAgents();\n }\n\n ngOnDestroy() {\n if (this.chat) {\n this.chat.unbindIllustratorEvents();\n if (this.chat.isStandalone) {\n this.messenger.removeStandaloneChat(this.chat.id);\n }\n }\n }\n}\n","<div class=\"rts-chat\"\n [ngClass]=\"{\n 'rts-chat-standalone': chat.isStandalone,\n 'rts-chat-in-viewport': chat.isInViewPort\n }\"\n rtseeViewportObserver\n (inViewport)=\"onInViewPortChange($event)\"\n>\n <div class=\"rts-chat-footer-container\">\n <div class=\"rts-chat-footer-container-inner\">\n <rtsee-chat-input [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-chat-input>\n </div>\n </div>\n <div class=\"rts-chat-body-container\">\n <rtsee-messages-list [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-messages-list>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { Message } from 'primeng/message';\nimport { RTSeeImageUploaderComponent } from '../../../common/components/image-uploader/image-uploader.component';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { InputText } from 'primeng/inputtext';\nimport { TypedReactiveForm } from '../../rtsee-auth/types/auth-form.type';\nimport { RTSeeManageProfile, RTSeeMessenger } from '@rtsee/messenger';\n\nexport type RTSeeProfileForm = {\n firstName: string | null;\n lastName: string | null;\n};\n\n@Component({\n selector: 'rtsee-manage-profile',\n imports: [\n Button,\n FloatLabel,\n InputGroup,\n Message,\n RTSeeImageUploaderComponent,\n ReactiveFormsModule,\n InputText,\n ],\n templateUrl: './manage-profile.component.html',\n})\nexport class ManageProfileComponent implements OnInit {\n profileForm: FormGroup;\n\n @Input() messenger!: RTSeeMessenger;\n @Input() manageProfile!: RTSeeManageProfile;\n constructor(private formBuilder: FormBuilder) {\n this.profileForm = this.formBuilder.group<\n TypedReactiveForm<RTSeeProfileForm>\n >({\n firstName: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(141),\n ],\n }),\n lastName: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(141),\n ],\n }),\n });\n }\n\n ngOnInit() {\n if (!this.messenger.myPeer || !this.messenger.myPeer.name) {\n return;\n }\n\n const nameSplit: string[] = this.messenger.myPeer.name.split(' ');\n this.firstNameField.setValue(nameSplit[0]);\n nameSplit.splice(0, 1);\n this.lastNameField.setValue(nameSplit.join(' '));\n }\n\n async submit(): Promise<void> {\n if (this.profileForm.invalid) {\n this.profileForm.markAsTouched();\n return;\n }\n\n await this.manageProfile.save({\n firstName: this.firstNameField.getRawValue(),\n lastName: this.lastNameField.getRawValue(),\n });\n }\n\n get firstNameField(): FormControl<string> {\n return this.profileForm.get('firstName') as FormControl<string>;\n }\n\n get lastNameField(): FormControl<string> {\n return this.profileForm.get('lastName') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-messenger-manage-profile\">\n <div class=\"rtsee-messenger-manage-profile-info rtsee-form-container\">\n <div class=\"rtsee-messenger-manage-profile-image\">\n <rtsee-image-uploader [imageUploader]=\"manageProfile.imageUploader\"\n ></rtsee-image-uploader>\n </div>\n\n <form class=\"rtsee-manage-profile-form rtsee-form\"\n [formGroup]=\"profileForm\"\n (ngSubmit)=\"submit()\"\n >\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"firstNameField\"\n [class.p-invalid]=\"firstNameField.invalid && firstNameField.touched\"\n />\n <label for=\"sign-up-email\">First Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (firstNameField.hasError('required') && firstNameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >First Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"lastNameField\"\n [class.p-invalid]=\"lastNameField.invalid && lastNameField.touched\"\n />\n <label for=\"sign-up-email\">Last Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (lastNameField.hasError('required') && lastNameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Last Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-manage-profile-buttons\">\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageProfile.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageProfile.cancel()\"\n [disabled]=\"manageProfile.saveInProgress\"\n />\n </div>\n </form>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IRTSeePaymentPriceItem, IRTSeePaymentProduct } from '@rtsee/common';\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'rtsee-payment-product-snippet',\n imports: [\n NgClass\n ],\n templateUrl: './payment-product-snippet.component.html',\n})\nexport class PaymentProductSnippetComponent {\n @Input() product!: IRTSeePaymentProduct;\n @Input() theme: 'dark' | 'light' = 'dark';\n @Output() priceSelected: EventEmitter<IRTSeePaymentPriceItem> =\n new EventEmitter<IRTSeePaymentPriceItem>();\n\n selectPrice(price: IRTSeePaymentPriceItem) {\n this.priceSelected.emit(price);\n }\n}\n","<div class=\"rts-payment-product-snippet\" [ngClass]=\"product.name\">\n <div class=\"rts-payment-product-card\">\n <h3 class=\"rts-payment-product-header\">{{product.name}}</h3>\n <p class=\"rts-payment-product-description\">{{product.description}}</p>\n <div class=\"rts-payment-product-prices\">\n @for (price of product.prices; track price.id) {\n <div class=\"rts-payment-price-card\">\n <p class=\"rts-payment-price-label\">{{price.label}}</p>\n <p class=\"rts-payment-price-description\">{{price.description}}</p>\n <button class=\"rts-payment-select-plan-btn\"\n (click)=\"selectPrice(price)\"\n >Select Plan</button>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { map, Observable, tap } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport {\n IRTSeeCreatePaymentSessionResponse,\n IRTSeeCreatePaymentSessionRequest,\n IRTSeePaymentProduct,\n IRTSeePaymentProductsListResponse\n} from '@rtsee/common';\nimport { IRTSeePlan } from '@rtsee/core';\nimport { RTSeePayments } from '@rtsee/messenger';\nimport { ICheckoutSessionResponse } from \"@rtsee/auth\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentsService {\n paymentsConfig: RTSeePayments | null = null;\n isInitialized: boolean = false;\n userId: string | null = null;\n\n constructor(private http: HttpClient) {}\n\n init(configuration: RTSeePayments, userId: string) {\n this.paymentsConfig = configuration;\n this.isInitialized = true;\n this.userId = userId;\n }\n\n createSession(\n options: IRTSeeCreatePaymentSessionRequest,\n ): Observable<IRTSeeCreatePaymentSessionResponse> {\n if (!this.paymentsConfig) {\n throw new Error('Payments not configured');\n }\n\n return this.http.post<IRTSeeCreatePaymentSessionResponse>(\n this.paymentsConfig.createSessionEndpoint,\n options,\n );\n }\n\n getSession(): Observable<ICheckoutSessionResponse> {\n if (!this.paymentsConfig) {\n throw new Error('Payments not configured');\n }\n\n if (!this.paymentsConfig.sessionId) {\n throw new Error('No SessionId provided');\n }\n\n return this.http\n .get<ICheckoutSessionResponse>(\n `${this.paymentsConfig.getSessionEndpoint}`, {\n params: {\n sessionId: this.paymentsConfig.sessionId,\n userId: this.userId || ''\n }\n }\n )\n .pipe(\n tap((res) => {\n console.log('tap here', res);\n this.paymentsConfig?.setValidationInProgress(false);\n }),\n );\n }\n\n getProducts(): Observable<IRTSeePaymentProduct[]> {\n if (!this.paymentsConfig || !this.paymentsConfig.appId) {\n throw new Error('Payments Config not initialized!');\n }\n\n this.paymentsConfig.setProductsLoadInProgress(true);\n\n return this.http\n .get<IRTSeePaymentProductsListResponse>(\n this.paymentsConfig.productsEndpoint,\n )\n .pipe(\n map((res) => res.products),\n tap((res) => this.paymentsConfig?.setProducts(res)),\n );\n }\n\n unsubscribe(subscriptionId: string): Observable<IRTSeePlan> {\n if (!this.paymentsConfig || !this.paymentsConfig.appId) {\n throw new Error('Payments Config not initialized!');\n }\n\n return this.http\n .post<IRTSeePlan>(\n `${this.paymentsConfig?.unsubscribeEndpoint}`,\n { subscriptionId }\n )\n .pipe(\n tap((res) => {\n console.log('tap with plan here', res);\n }),\n );\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { PaymentsService } from '../services/payments.service';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { loadStripe, Stripe, StripeEmbeddedCheckout } from '@stripe/stripe-js';\nimport { PaymentProductSnippetComponent } from '../payment-product-snippet/payment-product-snippet.component';\nimport { IRTSeePaymentPriceItem } from '@rtsee/common';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\nimport { NgClass } from \"@angular/common\";\n\n@Component({\n selector: 'rtsee-payment-page',\n imports: [\n ReactiveFormsModule,\n PaymentProductSnippetComponent,\n NgClass,\n ],\n templateUrl: './payment-page.component.html',\n})\nexport class PaymentPageComponent implements OnInit, OnDestroy {\n stripe?: Stripe;\n checkout?: StripeEmbeddedCheckout;\n planSelected: boolean = false;\n loadInProgress: boolean = false;\n\n @Input() messenger!: RTSeeMessenger;\n @Input() theme: 'dark' | 'light' = 'dark';\n @ViewChild('checkoutContainer')\n checkoutContainer!: ElementRef<HTMLDivElement>;\n constructor(private paymentsService: PaymentsService) {}\n\n async init(): Promise<void> {\n if (!this.paymentsService.paymentsConfig?.publicKey) {\n return;\n }\n\n this.stripe =\n (await loadStripe(this.paymentsService.paymentsConfig.publicKey)) ||\n undefined;\n this.getProducts();\n }\n\n getProducts(): void {\n this.paymentsService.getProducts().subscribe();\n }\n\n selectPlan(price: IRTSeePaymentPriceItem): void {\n const priceId: string = price.priceId;\n\n if (\n !this.messenger.payments ||\n !this.messenger.payments.createSessionEndpoint\n ) {\n console.log('No payments config.');\n return;\n }\n\n if (!this.messenger.myPeer.rtseeAppId) {\n console.log('No app id on peer.');\n return;\n }\n\n this.planSelected = true;\n this.loadInProgress = true;\n\n this.paymentsService\n .createSession({\n priceId: priceId,\n userId: this.messenger.myPeer.clientId,\n route: `/profile/${this.messenger.myPeer.clientId}`,\n applicationId: this.messenger.myPeer.rtseeAppId,\n })\n .subscribe((response) => {\n void this.initCheckout(response.clientSecret);\n });\n }\n\n async initCheckout(secret: string): Promise<void> {\n if (!this.stripe) {\n console.log('Stripe not yet initialized!');\n return;\n }\n this.checkout = await this.stripe.initEmbeddedCheckout({\n clientSecret: secret\n });\n\n if (!this.checkout) {\n return;\n }\n\n this.loadInProgress = false;\n\n this.checkout.mount(this.checkoutContainer.nativeElement);\n }\n\n ngOnInit() {\n if (!this.paymentsService.isInitialized && this.messenger.payments && this.messenger.myPeer?.clientId) {\n this.paymentsService.init(this.messenger.payments, this.messenger.myPeer.clientId);\n }\n\n void this.init();\n }\n\n ngOnDestroy(): void {\n if (this.checkout) {\n this.checkout.destroy();\n }\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rts-payment-page rts-theme-dark\">\n @if (messenger.payments && !planSelected) {\n @if (messenger.payments.products) {\n <div class=\"rts-payment-page-products\">\n @for (product of messenger.payments.products ; track product.id) {\n <rtsee-payment-product-snippet [product]=\"product\"\n [theme]=\"theme\"\n (priceSelected)=\"selectPlan($event)\"\n ></rtsee-payment-product-snippet>\n }\n </div>\n } @else {\n <div class=\"rts-payment-spinner\">\n <div class=\"rts-payment-spinner-ring\"></div>\n </div>\n }\n }\n @if (loadInProgress) {\n <div class=\"rts-payment-spinner\">\n <div class=\"rts-payment-spinner-ring\"></div>\n </div>\n }\n <div #checkoutContainer class=\"stripe-checkout-container\"></div>\n <div class=\"rts-payment-page-footer\">\n <button class=\"rts-payment-cancel-btn\"\n (click)=\"messenger.closePaymentPage()\"\n >{{messenger.labels[RTSeeTextLabelKeys.CANCEL_LABEL]}}</button>\n </div>\n</div>\n","/// <reference types=\"gtag.js\" />\n\nimport { Inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GtagService {\n private window: (Window & typeof globalThis & { gtag?: Gtag.Gtag }) | null;\n\n constructor(@Inject(DOCUMENT) document: Document) {\n this.window = document.defaultView as (Window & typeof globalThis & { gtag?: Gtag.Gtag }) | null;\n }\n\n reportConversion(\n url?: string,\n key?: string\n ): boolean {\n const callback = () => {\n if (typeof url !== 'undefined' && this.window) {\n this.window.location.href = url;\n }\n };\n\n if (this.window && typeof this.window.gtag === 'function' && key) {\n this.window.gtag('event', 'conversion', {\n send_to: key,\n value: 1.0,\n currency: 'USD',\n event_callback: callback,\n });\n } else {\n callback();\n }\n\n return false;\n }\n}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { PaymentsService } from '../services/payments.service';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { loadStripe, Stripe } from '@stripe/stripe-js';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\nimport { NgClass } from \"@angular/common\";\nimport { LS_TOKEN_LABEL, LS_USER_LABEL, ICheckoutSessionResponse } from \"@rtsee/auth\";\nimport { GtagService } from '../../../services/gtag.service';\n\n@Component({\n selector: 'rtsee-payment-validation-page',\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './payment-validation-page.component.html',\n})\nexport class PaymentValidationPageComponent implements OnInit {\n stripe?: Stripe;\n loadInProgress: boolean = false;\n\n @Input() messenger!: RTSeeMessenger;\n @Input() theme: 'dark' | 'light' = 'dark';\n @ViewChild('checkoutContainer')\n checkoutContainer!: ElementRef<HTMLDivElement>;\n\n constructor(\n private paymentsService: PaymentsService,\n private gtagService: GtagService\n ) {}\n\n async init(): Promise<void> {\n if (!this.paymentsService.paymentsConfig?.publicKey) {\n return;\n }\n\n this.stripe =\n (await loadStripe(this.paymentsService.paymentsConfig.publicKey)) ||\n undefined;\n this.validatePayment();\n }\n\n reportConversion(url?: string, eventName?: string): boolean {\n return this.gtagService.reportConversion(url, eventName);\n }\n\n validatePayment(): void {\n this.paymentsService.getSession().subscribe((res: ICheckoutSessionResponse) => {\n // this.messenger.closePaymentValidationPage();\n\n if (res.user && res.token) {\n localStorage.setItem(LS_TOKEN_LABEL, res.token);\n localStorage.setItem(LS_USER_LABEL, JSON.stringify(JSON.stringify(res.user)));\n\n if (this.paymentsService.paymentsConfig?.gTagEventName && this.paymentsService.paymentsConfig?.isProdMode) {\n this.reportConversion(undefined, this.paymentsService.paymentsConfig.gTagEventName);\n }\n\n setTimeout(() => {\n window.location.href = document.baseURI;\n }, 1000)\n }\n });\n }\n\n ngOnInit() {\n if (!this.paymentsService.isInitialized && this.messenger.payments && this.messenger.myPeer?.clientId) {\n this.paymentsService.init(this.messenger.payments, this.messenger.myPeer.clientId);\n }\n\n void this.init();\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n\n\n","<div class=\"rtsee-payment-page\" [ngClass]=\"'rtsee-payment-theme-' + theme\">\n @if (messenger.payments?.validationInProgress) {\n <div class=\"rtsee-payment-spinner\">\n <div class=\"rtsee-payment-spinner-ring\"></div>\n </div>\n }\n <div class=\"rtsee-payment-page-footer\">\n <button class=\"rtsee-payment-cancel-btn\"\n (click)=\"messenger.closePaymentPage()\"\n >{{messenger.labels[RTSeeTextLabelKeys.CANCEL_LABEL]}}</button>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Card } from 'primeng/card';\nimport { Divider } from 'primeng/divider';\nimport { Button } from 'primeng/button';\nimport { IRTSeePlan, RTSeeTextLabelKeys } from '@rtsee/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { PaymentsService } from '../services/payments.service';\nimport dayjs from 'dayjs';\n\n@Component({\n selector: 'rtsee-manage-plan',\n imports: [Card, Divider, Button],\n templateUrl: './manage-plan.component.html',\n})\nexport class ManagePlanComponent implements OnInit {\n @Input() messenger!: RTSeeMessenger;\n plan!: IRTSeePlan;\n activeFromFormated: string = '';\n activeToFormated: string = '';\n\n constructor(private paymentsService: PaymentsService) {}\n\n onUnsubscribeClicked(): void {\n this.paymentsService.unsubscribe(this.plan.id)\n .subscribe();\n }\n\n ngOnInit(): void {\n if (!this.messenger.myPeer || !this.messenger.myPeer.plan) {\n throw new Error('No Plans found.');\n }\n\n if (!this.paymentsService.isInitialized && this.messenger.payments && this.messenger.myPeer?.clientId) {\n this.paymentsService.init(this.messenger.payments, this.messenger.myPeer?.clientId);\n }\n\n this.plan = this.messenger.myPeer.plan;\n this.activeFromFormated = dayjs(\n this.messenger.myPeer.plan.activeFrom,\n ).format('DD-MM-YYYY');\n this.activeToFormated = dayjs(this.messenger.myPeer.plan.activeTo).format(\n 'DD-MM-YYYY',\n );\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rtsee-manage-plan\">\n <h2>{{messenger.labels[RTSeeTextLabelKeys.MANAGE_PLAN]}}</h2>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.BACK_LABEL]\"\n severity=\"secondary\"\n (click)=\"messenger.closeManagePlanPage()\"\n ></p-button>\n @if (plan) {\n <p-card [header]=\"plan.productName\">\n <p>{{plan.productDescription}}</p>\n <p-divider></p-divider>\n <div class=\"rtsee-manage-plan-info\">\n <p>Active From: {{activeFromFormated}}</p>\n <p>Active To: {{activeToFormated}}</p>\n </div>\n <p-button [label]=\"'Unsubscribe'\"\n (click)=\"onUnsubscribeClicked()\"\n ></p-button>\n </p-card>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { MessengerHeaderComponent } from '../messenger-header/messenger-header.component';\nimport { InfiniteScrollDirective } from 'ngx-infinite-scroll';\nimport { NgClass } from '@angular/common';\nimport { ChatsListComponent } from '../chats-list/chats-list.component';\nimport { ChatComponent } from '../chat/chat.component';\nimport { PreloaderComponent } from '../../../common/components/preloader/preloader.component';\nimport { ProfileComponent } from '../profile/profile.component';\nimport { ManageProfileComponent } from '../manage-profile/manage-profile.component';\nimport { ManageChatInfoComponent } from '../manage-chat-info/manage-chat-info.component';\nimport { ChatInfoComponent } from '../chat-info/chat-info.component';\nimport { PaymentPageComponent } from '../payment-page/payment-page.component';\nimport { PaymentValidationPageComponent } from '../payment-validation-page/payment-validation-page.component';\nimport { ManagePlanComponent } from '../manage-plan/manage-plan.component';\n\n@Component({\n selector: 'rtsee-messenger',\n templateUrl: './messenger.component.html',\n imports: [\n MessengerHeaderComponent,\n InfiniteScrollDirective,\n NgClass,\n ChatsListComponent,\n ChatComponent,\n PreloaderComponent,\n ProfileComponent,\n ManageProfileComponent,\n ManageChatInfoComponent,\n ChatInfoComponent,\n PaymentPageComponent,\n PaymentValidationPageComponent,\n ManagePlanComponent,\n ],\n standalone: true,\n})\nexport class MessengerComponent {\n @Input() messenger!: RTSeeMessenger;\n\n onScroll() {\n void this.messenger.loadChats();\n }\n}\n","<div class=\"rts-messenger rts-theme-dark\" [ngClass]=\"{\n 'rts-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rts-messenger-folded': messenger.folded,\n 'rts-messenger-overlay-window': messenger.isOverlayPageOpened\n}\">\n @if (messenger.manageProfile) {\n <div class=\"rts-manage-profile\">\n <rtsee-manage-profile [manageProfile]=\"messenger.manageProfile\"\n [messenger]=\"messenger\"\n ></rtsee-manage-profile>\n </div>\n }\n\n @if (messenger.isPaymentPageOpened) {\n <div class=\"rts-payment-page-container\">\n <rtsee-payment-page [messenger]=\"messenger\" theme=\"dark\"></rtsee-payment-page>\n </div>\n }\n\n @if (messenger.isPaymentValidationPageOpened) {\n <div class=\"rts-payment-page-container\">\n <rtsee-payment-validation-page [messenger]=\"messenger\" theme=\"dark\"></rtsee-payment-validation-page>\n </div>\n }\n\n @if (messenger.isManagePlanPageOpened) {\n <div class=\"rts-payment-page-container\">\n <rtsee-manage-plan [messenger]=\"messenger\"></rtsee-manage-plan>\n </div>\n }\n\n <div class=\"rts-messenger-header-container\">\n <rtsee-messenger-header [messenger]=\"messenger\"\n ></rtsee-messenger-header>\n </div>\n <div class=\"rts-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n @if (messenger.openedChat) {\n <rtsee-chat [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></rtsee-chat>\n } @else if (!messenger.openedChat) {\n <rtsee-chats-list [chats]=\"messenger.chats\" [messenger]=\"messenger\"></rtsee-chats-list>\n } @else if (messenger.openedProfile) {\n <rtsee-profile></rtsee-profile>\n }\n @if (messenger.loadingChatsInProgress) {\n <rtsee-preloader [diameter]=\"50\" ></rtsee-preloader>\n }\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { IMessageWidget } from './message-widgets.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EventsWidgetsService {\n widgetsMap: IMessageWidget[] = [];\n\n getWidgetComponentByName(name: string) {\n /* eslint-disable */\n const mapping = this.widgetsMap.find((e) => e.name === name);\n if (!mapping) {\n return null;\n }\n return mapping.component;\n /* eslint-enable */\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { RTSeeDashboardEvent } from '@rtsee/events-dashboard';\nimport { WidgetDirective } from '../../../../directives/widget.directive';\nimport { EventsWidgetsService } from '../../../../services/events-widgets.service';\nimport { TimeFormatHelperService } from '../../../../services/time-format-helper.service';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'rtsee-event-thumbnail',\n templateUrl: './event-thumbnail.component.html',\n imports: [WidgetDirective, NgClass],\n standalone: true,\n})\nexport class EventThumbnailComponent implements OnInit, AfterViewInit {\n tooltip?: string;\n timeInAgoFormat: string = '';\n\n @Input() event!: RTSeeDashboardEvent;\n @ViewChild(WidgetDirective, { static: false }) widgetHost!: WidgetDirective;\n constructor(\n private widgetsService: EventsWidgetsService,\n private componentFactoryResolver: ComponentFactoryResolver,\n public timeFormatService: TimeFormatHelperService,\n private cd: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n if (this.event.data) {\n this.generateTooltip();\n }\n\n this.timeInAgoFormat = this.timeFormatService.toAgo(this.event.createdAt);\n\n setInterval(() => {\n this.timeInAgoFormat = this.timeFormatService.toAgo(this.event.createdAt);\n }, 20000);\n }\n\n generateTooltip() {\n /* eslint-disable */\n let tooltip = '';\n if (typeof this.event.data !== 'object') {\n return;\n }\n try {\n for (const key in this.event.data) {\n if (this.event.data.hasOwnProperty(key)) {\n if (tooltip) {\n tooltip += '
';\n }\n tooltip += key + ' -> ' + this.event.data[key];\n }\n }\n this.tooltip = tooltip;\n } catch (e) {\n console.log('Failed to generate a tooltip');\n }\n /* eslint-enable */\n }\n\n ngAfterViewInit() {\n this.cd.detectChanges();\n /* eslint-disable */\n if (this.event.widget) {\n const widget = this.widgetsService.getWidgetComponentByName(\n this.event.widget,\n );\n if (!widget) {\n return;\n }\n const viewContainerRef = this.widgetHost.viewContainerRef;\n viewContainerRef.clear();\n const componentToShow =\n this.componentFactoryResolver.resolveComponentFactory(widget);\n const componentRef: ComponentRef<typeof widget> =\n viewContainerRef.createComponent(componentToShow);\n componentRef.instance.event = this.event;\n componentRef.instance.event = this.event;\n componentRef.changeDetectorRef.detectChanges();\n }\n /* eslint-enable */\n }\n}\n","<div class=\"rtsee-events-dashboard-event-thumbnail\">\n @if (event.widget) {\n <ng-template widgetHost></ng-template>\n } @else if (!event.widget) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail\"\n [ngClass]=\"{'rtsee-events-dashboard-default-event-thumbnail-with-data': event.data}\"\n >\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-name\">{{event.name}}</div>\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-info\">\n @if (event.data) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-details\"\n [title]=\"tooltip\"\n >\n <span class=\"rtsee-events-dashboard-default-event-thumbnail-details-icon material-icons-outlined\"\n >info</span>\n </div>\n }\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-time\">\n <span>{{ timeInAgoFormat }}</span>\n </div>\n </div>\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { TimeFormatHelperService } from '../../../../services/time-format-helper.service';\nimport { RTSeeDashboardClientSession } from '@rtsee/events-dashboard';\nimport { NgIf, SlicePipe } from '@angular/common';\nimport { EventThumbnailComponent } from '../event-thumbnail/event-thumbnail.component';\n\n@Component({\n selector: 'rtsee-rtsee-events-dashboard-session',\n templateUrl: './rtsee-events-dashboard-session.component.html',\n imports: [NgIf, EventThumbnailComponent, SlicePipe],\n standalone: true,\n})\nexport class RtseeEventsDashboardSessionComponent {\n @Input() session!: RTSeeDashboardClientSession;\n constructor(public timeFormatService: TimeFormatHelperService) {}\n}\n","<div class=\"rtsee-events-dashboard-session\">\n @if (session.info) {\n <div class=\"rtsee-events-dashboard-session-header\">\n <p class=\"rtsee-events-dashboard-session-client-info\">{{session.info.clientThumbnail}}</p>\n <p class=\"rtsee-events-dashboard-session-os-info\">{{session.info.osThumbnail}}</p>\n <div class=\"rtsee-events-dashboard-session-device-info\" [title]=\"session.info.deviceThumbnail\">\n @if (session.info.deviceType === 'smartphone' && !session.info.botName) {\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >phone_iphone</span>\n }\n @if (session.info.deviceType === 'tablet' && !session.info.botName) {\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >tablet_mac</span>\n }\n @if (session.info.deviceType === 'desktop' && !session.info.botName) {\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >computer</span>\n }\n @if (session.info.botName) {\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >smart_toy</span>\n }\n </div>\n </div>\n }\n @if (session.events && session.events.length) {\n <ul class=\"rtsee-events-dashboard-session-events-list\"\n >\n @for (event of session.events | slice:0:5; track event.id) {\n <li class=\"rtsee-events-dashboard-session-event\">\n <rtsee-event-thumbnail [event]=\"event\"></rtsee-event-thumbnail>\n </li>\n }\n </ul>\n }\n\n <div class=\"rtsee-events-dashboard-session-footer\">\n <button *ngIf=\"session.events.length > 5\">{{session.events.length - 5}} more</button>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { TimeFormatHelperService } from '../../../../services/time-format-helper.service';\nimport { DefaultImagesService } from '../../../../services/default-images.service';\nimport {\n RTSeeEventsDashboard,\n RTSeeDashboardClient,\n} from '@rtsee/events-dashboard';\nimport { RtseeEventsDashboardSessionComponent } from '../rtsee-events-dashboard-session/rtsee-events-dashboard-session.component';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard-client-thumbnail',\n templateUrl: './rtsee-events-dashboard-client-thumbnail.component.html',\n imports: [RtseeEventsDashboardSessionComponent],\n standalone: true,\n})\nexport class RtseeEventsDashboardClientThumbnailComponent implements OnInit {\n @Input() dashboard!: RTSeeEventsDashboard;\n @Input() client!: RTSeeDashboardClient;\n\n constructor(\n public timeFormatService: TimeFormatHelperService,\n public defaultImagesService: DefaultImagesService,\n ) {}\n\n ngOnInit(): void {}\n\n openChat() {\n this.dashboard.openChat(this.client);\n }\n}\n","<div class=\"rtsee-dashboard-client-thumbnail\">\n <div class=\"rtsee-dashboard-client-header\">\n <div class=\"rtsee-dashboard-client-header-photo\">\n <div class=\"rtsee-dashboard-client-header-image\"\n [style.background-image]=\"'url(' + client.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n @if (client.isConnected) {\n <div class=\"rtsee-dashboard-client-live-indicator\"></div>\n }\n </div>\n <p class=\"rtsee-dashboard-client-name\">\n <span class=\"rtsee-dashboard-client-name-text\">{{ client.name || client.id }}</span>\n <button (click)=\"openChat()\" class=\"rtsee-dashboard-client-engage\">\n <span class=\"rtsee-dashboard-client-engage-icon material-icons-outlined\">chat_bubble</span>\n </button>\n </p>\n </div>\n <div class=\"rtsee-dashboard-sessions\">\n @for(session of client.sessions; track session.id) {\n <div class=\"rtsee-dashboard-sessions-container\">\n <rtsee-rtsee-events-dashboard-session [session]=\"session\"></rtsee-rtsee-events-dashboard-session>\n </div>\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeEventsDashboard } from '@rtsee/events-dashboard';\n\nimport { RtseeEventsDashboardClientThumbnailComponent } from './components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component';\n\n@Component({\n selector: 'rtsee-events-dashboard',\n templateUrl: './rtsee-events-dashboard.component.html',\n imports: [RtseeEventsDashboardClientThumbnailComponent],\n standalone: true,\n})\nexport class RtseeEventsDashboardComponent {\n @Input() eventsDashboard!: RTSeeEventsDashboard;\n}\n","<div class=\"rtsee-events-dashboard\">\n <div class=\"rtsee-events-dashboard-client-thumbnails\">\n @for (client of eventsDashboard.clients; track client.id) {\n <div class=\"rtsee-events-dashboard-client-thumbnail-wrapper\">\n <ngx-rtsee-events-dashboard-client-thumbnail\n [client]=\"client\"\n [dashboard]=\"eventsDashboard\"\n ></ngx-rtsee-events-dashboard-client-thumbnail>\n </div>\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { CdkCopyToClipboard } from '@angular/cdk/clipboard';\nimport { IPresentationRoom } from '@rtsee/common';\nimport { RTSeePresentation } from '@rtsee/presentation';\nimport { Message } from 'primeng/message';\nimport { Toast } from 'primeng/toast';\nimport { MessageService } from 'primeng/api';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\n\n@Component({\n selector: 'rtsee-join-call',\n imports: [Button, CdkCopyToClipboard, Message, Toast],\n templateUrl: './join-call.component.html',\n providers: [MessageService],\n})\nexport class JoinCallComponent {\n recentlyCopied: boolean = false;\n\n @Input() presentation!: RTSeePresentation;\n @Input() room!: IPresentationRoom;\n constructor(private messageService: MessageService) {}\n\n copyClicked(): void {\n this.messageService.add({\n severity: 'success',\n summary: 'Link Copied!',\n detail: 'The link was copied to clipboard!',\n });\n this.recentlyCopied = true;\n setTimeout(() => {\n this.recentlyCopied = false;\n }, 2000);\n }\n\n protected readonly window = window;\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rtsee-join-call\">\n <div class=\"rtsee-join-call-button\">\n <p-button [label]=\"presentation.labels[RTSeeTextLabelKeys.START_A_CALL_BUTTON]\"\n (click)=\"presentation.emitJoinRoomCallEvent()\"\n ></p-button>\n </div>\n <div class=\"rtsee-share-call-link\">\n <div class=\"rtsee-share-call-explain-section\">\n <div class=\"rtsee-share-call-explain-section-icon\">\n <span class=\"pi pi-link rtsee-link-icon\"></span>\n </div>\n <div class=\"rtsee-share-call-explain-section-text\">\n <span>Anyone can join your storytelling session using this link.</span>\n </div>\n </div>\n <div class=\"rtsee-share-call-link-section\">\n <p-toast position=\"bottom-center\" />\n <p-button [icon]=\"recentlyCopied ? 'pi pi-check' : 'pi pi-copy'\"\n severity=\"secondary\"\n class=\"rtsee-share-call-link-copy-btn\"\n [cdkCopyToClipboard]=\"window.location.origin + '?room_id=' + room.id\"\n (cdkCopyToClipboardCopied)=\"copyClicked()\"\n ></p-button>\n <p-message severity=\"info\"\n class=\"rtsee-share-call-link-text\"\n >{{ window.location.origin + '?room_id=' + room.id }}</p-message>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeePresentation } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { NgClass } from '@angular/common';\nimport { Chip } from 'primeng/chip';\nimport { JoinCallComponent } from '../join-call/join-call.component';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\nimport { RouterLink } from \"@angular/router\";\n\n@Component({\n selector: 'rtsee-presentation-header',\n templateUrl: './presentation-header.component.html',\n imports: [Button, NgClass, Chip, JoinCallComponent, RouterLink],\n standalone: true,\n})\nexport class PresentationHeaderComponent {\n @Input() public presentation!: RTSeePresentation;\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<header class=\"rtsee-presentation-header\"\n [ngClass]=\"{\n 'rtsee-presentation-header-convertable': presentation.activeStory,\n 'rtsee-presentation-header-visible': presentation.activeStory?.headerVisible\n }\"\n>\n @if (!presentation.activeStory && !presentation.openedStoryDetails) {\n <div class=\"rtsee-presentations-header-title\">\n <div class=\"rtsee-presentations-header-title-overlay\"></div>\n <div class=\"rtsee-presentations-header-title-content\">\n <h1>{{presentation.labels[RTSeeTextLabelKeys.PRESENTATION_TITLE_LABEL]}}</h1>\n <p class=\"rtsee-presentations-header-title-subtitle\">\n <span>{{presentation.labels[RTSeeTextLabelKeys.PRESENTATION_SUBTITLE_LABEL]}}</span>\n </p>\n </div>\n </div>\n }\n\n @if (presentation.activeRoom && !presentation.activeStory && !presentation.openedStoryDetails) {\n <div class=\"rtsee-presentation-room-block\">\n <rtsee-join-call [room]=\"presentation.activeRoom\"\n [presentation]=\"presentation\"\n ></rtsee-join-call>\n </div>\n }\n\n @if (presentation.activeStory) {\n <div class=\"rtsee-presentation-header-active-story-info\">\n <div class=\"rtsee-presentation-header-active-story-info-close\"\n [routerLink]=\"[presentation.homePage]\"\n (click)=\"presentation.disableActiveStory()\"\n >\n <i class=\"pi pi-times rtsee-presentation-header-active-story-info-close-icon\"></i>\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-details\">\n <p-chip [label]=\"presentation.activeStory.name\"\n [image]=\"presentation.activeStory.imageUrl || undefined\"\n class=\"rtsee-presentation-header-active-story-name\"\n alt=\"Story image\" />\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-settings\"\n (click)=\"presentation.settings.expand()\"\n >\n <i class=\"pi pi-cog-h rtsee-presentation-header-active-story-info-settings-icon\"></i>\n </div>\n </div>\n }\n @if (presentation.dashboard && !presentation.activeStory && !presentation.isDashboardOpen && !presentation.openedStoryDetails) {\n <p-button [label]=\"presentation.labels[RTSeeTextLabelKeys.DASHBOARD_BUTTON]\"\n (click)=\"presentation.toggleDashboardState()\"\n ></p-button>\n }\n</header>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeePresentation, RTSeeStory } from '@rtsee/presentation';\nimport { RatingComponent } from '../../../common/components/rating/rating.component';\nimport { RouterLink } from \"@angular/router\";\nimport {RTSeeTextLabelKeys} from \"@rtsee/core\";\n\n@Component({\n selector: 'rtsee-story-thumbnail',\n templateUrl: './story-thumbnail.component.html',\n imports: [RatingComponent, RouterLink],\n standalone: true,\n})\nexport class StoryThumbnailComponent implements OnInit {\n progressPercent: number = 0;\n protected readonly Math = Math;\n @Input() story!: RTSeeStory;\n @Input() presentation!: RTSeePresentation;\n\n ngOnInit(): void {\n if (this.story.preselectedSlideNumber) {\n this.progressPercent = Math.round(\n (this.story.preselectedSlideNumber / this.story.totalSlides) * 100,\n );\n }\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<a [routerLink]=\"[presentation.routePrefix, story.friendlyUrl]\" class=\"rtsee-story-thumbnail\">\n <div class=\"rtsee-story-thumbnail-image-container\">\n <div class=\"rtsee-story-thumbnail-image\">\n <img [src]=\"story.imageUrl\"\n [alt]=\"story.name\"\n class=\"rtsee-story-thumbnail-image\"\n />\n </div>\n @if (story.preselectedSlideNumber) {\n <div class=\"rtsee-story-thumbnail-progress-bar-container\">\n <div class=\"rtsee-story-thumbnail-progress-bar\">\n <div class=\"rtsee-story-thumbnail-progress-bar-inner\"\n [style.width]=\"progressPercent + '%'\"\n ></div>\n </div>\n </div>\n }\n </div>\n <div class=\"rtsee-story-thumbnail-body-container\">\n <h4 class=\"rtsee-story-thumbnail-title\">{{story.name}}</h4>\n <div class=\"rtsee-story-thumbnail-body-meta\">\n @if (story.rating) {\n <rtsee-rating [rate]=\"{maxValue: 5, value: story.rating}\"></rtsee-rating>\n }\n @if (story.averageReadTime) {\n <span class=\"rtsee-story-thumbnail-time-container\">\n <span class=\"rtsee-story-thumbnail-info-time-icon material-icons-outlined\">schedule</span>\n <span class=\"rtsee-story-thumbnail-info-read-time\">\n <span>{{ Math.ceil(story.averageReadTime / 60) }}</span>\n <span> </span>\n <span>{{ presentation.labels[RTSeeTextLabelKeys.MINUTE_LABEL] }}</span>\n </span>\n </span>\n }\n @if (story.recommendedAge) {\n <span class=\"rtsee-story-thumbnail-label-container\">{{story.recommendedAge}}</span>\n }\n </div>\n </div>\n</a>\n","import { AfterViewInit, Component, ElementRef, Input } from '@angular/core';\nimport {RTSeePresentation, RTSeeStory, RTSeeStorySlide} from '@rtsee/presentation';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { WidgetDirective } from '../../../directives/widget.directive';\nimport { Button } from 'primeng/button';\nimport { RTSeePresentationSettings } from '@rtsee/presentation';\nimport {RTSeeTextLabelKeys} from \"@rtsee/core\";\nimport {PaymentPageComponent} from \"../../rtsee-messenger/payment-page/payment-page.component\";\n\n@Component({\n selector: 'rtsee-slide',\n templateUrl: './slide.component.html',\n imports: [NgStyle, WidgetDirective, Button, NgClass, PaymentPageComponent],\n standalone: true,\n})\nexport class SlideComponent implements AfterViewInit {\n hideRewindControls: boolean = true;\n lastScrollPosition: number = 0;\n scrollingDown: boolean = false;\n\n @Input() presentation!: RTSeePresentation;\n @Input() story!: RTSeeStory;\n @Input() slide!: RTSeeStorySlide;\n @Input() settings!: RTSeePresentationSettings;\n constructor(private elementRef: ElementRef<HTMLElement>) {}\n\n slideRewindClicked(forward: boolean) {\n if (forward) {\n this.story.nextSlide();\n } else {\n this.story.previousSlide();\n }\n }\n\n ngAfterViewInit() {\n const parentSlideEl: HTMLElement | null =\n this.elementRef.nativeElement.closest('.story-player-slide-container');\n if (!parentSlideEl) {\n return;\n }\n\n this.story.onNewSlideRendered(this.slide.slideNumber, parentSlideEl);\n this.scrollingDown = !this.story.headerVisible;\n\n setTimeout(() => {\n this.hideRewindControls = false;\n }, 500);\n }\n\n onScroll(target: EventTarget | null): void {\n if (target && target instanceof HTMLElement) {\n this.handleScroll(\n target.scrollTop,\n target.scrollHeight,\n target.clientHeight,\n );\n }\n }\n\n private handleScroll(\n position: number,\n scrollHeight: number,\n clientHeight: number,\n ) {\n const BUFFER: number = 50;\n const isAtBottom: boolean =\n Math.abs(scrollHeight - position - clientHeight) < 10;\n\n if (position > this.lastScrollPosition + BUFFER) {\n if (!this.scrollingDown) {\n this.scrollingDown = true;\n console.log('started scrolling down');\n this.story.toggleHeader(false);\n }\n\n this.lastScrollPosition = position;\n } else if (position + BUFFER < this.lastScrollPosition) {\n if (this.scrollingDown) {\n this.scrollingDown = false;\n console.log('scrolled up');\n this.story.toggleHeader(true);\n }\n\n this.lastScrollPosition = position;\n } else if (isAtBottom) {\n this.lastScrollPosition = position;\n this.story.toggleHeader(true);\n }\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rtsee-presentation-slide\" (scroll)=\"onScroll($event.target)\">\n @if (slide.widget) {\n <ng-template widgetHost></ng-template>\n }\n <div class=\"rtsee-presentation-slide-default\">\n @if (slide.imageUrl) {\n <div class=\"rtsee-presentation-slide-image-container\"\n [ngStyle]=\"{'background-image': 'url(' + slide.imageUrl + ')'}\"\n >\n </div>\n }\n <div class=\"rtsee-presentation-slide-text\">\n <p [style.font-size]=\"settings.fontSize + 'rem'\">{{slide.text}}</p>\n </div>\n <div class=\"rtsee-presentation-slide-controls\"\n [ngClass]=\"{'rtsee-presentation-slide-controls-hidden': hideRewindControls}\"\n >\n @if (story.activeSlideNumber !== 1) {\n <p-button class=\"slide-navigation-btn navigation-prev\"\n [label]=\"presentation.labels[RTSeeTextLabelKeys.PREVIOUS_SLIDE_LABEL]\"\n icon=\"pi pi-arrow-left\"\n [severity]=\"'secondary'\"\n [iconPos]=\"'left'\"\n (click)=\"slideRewindClicked(false)\"\n >\n </p-button>\n }\n @if (story.activeSlideNumber !== this.story.totalSlides) {\n <p-button class=\"slide-navigation-btn navigation-next\"\n [label]=\"presentation.labels[RTSeeTextLabelKeys.NEXT_SLIDE_LABEL]\"\n icon=\"pi pi-arrow-right\"\n [iconPos]=\"'right'\"\n (click)=\"slideRewindClicked(true)\"\n >\n </p-button>\n }\n </div>\n @if (\n presentation.messenger\n && story.activeSlideNumber === this.story.totalSlides\n && !presentation.myPeer.plan\n ) {\n <div class=\"rtsee-presentation-slide-payment\">\n <rtsee-payment-page [messenger]=\"presentation.messenger\" theme=\"light\"></rtsee-payment-page>\n </div>\n }\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {RTSeePresentation, RTSeeStory} from '@rtsee/presentation';\nimport { NgClass } from '@angular/common';\nimport { SlideComponent } from '../slide/slide.component';\nimport Swiper from 'swiper';\nimport { EffectCards, Manipulation } from 'swiper/modules';\nimport { RTSeePresentationSettings } from '@rtsee/presentation';\n\n@Component({\n selector: 'rtsee-story-player',\n templateUrl: './story-player.component.html',\n imports: [NgClass, SlideComponent],\n standalone: true,\n})\nexport class StoryPlayerComponent implements OnInit, AfterViewInit {\n @Input() story!: RTSeeStory;\n @Input() settings!: RTSeePresentationSettings;\n @Input() presentation!: RTSeePresentation;\n @ViewChild('swiperContainer') swiperEl!: ElementRef<HTMLElement>;\n constructor() {\n Swiper.use([EffectCards, Manipulation]);\n }\n\n ngOnInit() {\n console.log('Story Player: Story = ', this.story);\n }\n\n ngAfterViewInit() {\n const swiper = new Swiper(this.swiperEl.nativeElement, {\n effect: 'cards',\n grabCursor: true,\n });\n\n this.story.initSwiper(swiper);\n }\n}\n","<div class=\"rtsee-story-player\">\n <div class=\"rtsee-story-player-slider swiper\" #swiperContainer>\n <div class=\"rtsee-story-player-slider-inner swiper-wrapper\">\n @for (slide of story.slides; track (slide.id || slide.slideNumber)) {\n <div class=\"story-player-slide-container swiper-slide\"\n [ngClass]=\"{'story-player-slide-active': slide.isActive}\"\n >\n <rtsee-slide [slide]=\"slide\"\n [story]=\"story\"\n [presentation]=\"presentation\"\n [settings]=\"settings\"\n ></rtsee-slide>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { OrderList } from 'primeng/orderlist';\nimport { RTSeeManageStorySlides } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'rtsee-manage-slides',\n imports: [OrderList, Button, NgClass],\n templateUrl: './manage-slides.component.html',\n})\nexport class ManageSlidesComponent {\n @Input() manageSlides!: RTSeeManageStorySlides;\n}\n","<div class=\"rtsee-presentation-manage-slides\">\n <div class=\"rtsee-presentation-manage-slides-header\">\n <p-button (click)=\"manageSlides.selectNewSlide()\"\n label=\"Create A New Slide\"\n ></p-button>\n </div>\n <div class=\"rtsee-presentation-manage-slides-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageSlides.slides\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n scrollHeight=\"40rem\"\n controlsPosition=\"right\"\n (onReorder)=\"manageSlides.onReorder($event)\"\n [disabled]=\"manageSlides.loadInProgress\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <div class=\"rtsee-presentation-manage-slides-list-item rtsee-ordered-list-item\">\n <img\n [src]=\"option.imageUrl\"\n [alt]=\"'slide_image'\"\n [style.width]=\"'60px'\"\n class=\"rtsee-presentation-manage-slides-list-item-image rtsee-ordered-list-item-image\"\n />\n <div class=\"rtsee-presentation-manage-slides-list-item-info rtsee-ordered-list-item-info\">\n <span [ngClass]=\"{\n 'text-sm': true,\n 'text-surface-500': !selected,\n 'dark:text-surface-400': !selected,\n 'text-inherit': selected,\n }\"\n class=\"rtsee-ordered-list-item-info-label\"\n >{{ option.slideNumber }}</span>\n <div class=\"rtsee-ordered-list-item-info-buttons\">\n <p-button label=\"Edit\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageSlides.selectSlide(option.slideNumber)\"\n ></p-button>\n <p-button label=\"Delete\"\n severity=\"warn\"\n class=\"rtsee-ordered-list-item-info-button\"\n ></p-button>\n </div>\n </div>\n </div>\n </ng-template>\n </p-orderList>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeManageStorySlide } from '@rtsee/presentation';\nimport { FormComponent } from '../../../../../common/components/forms/form/form.component';\nimport { Button } from 'primeng/button';\n\n@Component({\n selector: 'rtsee-manage-slide',\n imports: [\n FormComponent,\n Button,\n ],\n templateUrl: './manage-slide.component.html',\n})\nexport class ManageSlideComponent {\n @Input() manageSlide!: RTSeeManageStorySlide;\n\n submit() {\n if (this.manageSlide.activeSlideForm) {\n this.manageSlide.activeSlideForm.submit();\n }\n }\n}\n","<div class=\"rtsee-presentation-manage-story-slide\">\n <div class=\"rtsee-manage-story-slide-info rtsee-form-container\">\n @if (manageSlide.activeSlideForm) {\n <rtsee-form [form]=\"manageSlide.activeSlideForm\" (formSubmit)=\"submit()\">\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageSlide.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageSlide.cancel()\"\n [disabled]=\"manageSlide.saveInProgress\"\n />\n </rtsee-form>\n }\n </div>\n</div>\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { RTSeeManageStory } from \"@rtsee/presentation\";\nimport { Button } from \"primeng/button\";\nimport { ManageSlidesComponent } from \"./manage-slides/manage-slides.component\";\nimport { ManageSlideComponent } from \"./manage-slide/manage-slide.component\";\nimport { Divider } from \"primeng/divider\";\nimport { FormComponent } from \"../../../../common/components/forms/form/form.component\";\n\n@Component({\n selector: \"rtsee-manage-story\",\n standalone: true,\n imports: [\n Button,\n ManageSlidesComponent,\n ManageSlideComponent,\n Divider,\n FormComponent,\n ],\n templateUrl: \"./manage-story.component.html\",\n})\nexport class ManageStoryComponent implements OnInit {\n @Input() manageStory!: RTSeeManageStory;\n\n ngOnInit() {\n if (!this.manageStory.activeStoryForm) {\n this.manageStory.initForm();\n }\n\n if (!this.manageStory.activeStoryForm) {\n throw new Error(`Active story form should be selected`);\n }\n }\n\n submit() {\n if (!this.manageStory.activeStoryForm) {\n return;\n }\n this.manageStory.activeStoryForm.submit();\n }\n}\n","<div class=\"rtsee-manage-story\">\n @if (!manageStory.manageSlides.selectedSlide) {\n <div class=\"rtsee-manage-story-info rtsee-form-container\">\n @if (manageStory.activeStoryForm) {\n <rtsee-form [form]=\"manageStory.activeStoryForm\" (formSubmit)=\"submit()\">\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageStory.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageStory.cancel()\"\n [disabled]=\"manageStory.saveInProgress\"\n />\n </rtsee-form>\n\n @if (manageStory.story.id) {\n <p-divider />\n <div class=\"rtsee-story-slides-wrapper\">\n <rtsee-manage-slides [manageSlides]=\"manageStory.manageSlides\"></rtsee-manage-slides>\n </div>\n }\n }\n </div>\n }\n @if (manageStory.manageSlides.selectedSlide) {\n <div class=\"rtsee-manage-story-slide-wrapper\">\n <rtsee-manage-slide [manageSlide]=\"manageStory.manageSlides.selectedSlide\"\n ></rtsee-manage-slide>\n </div>\n }\n</div>\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\nimport { NgClass } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { IRTSeeStoryElement, IRTSeeIllustratorSubmitPayload, RTSeeIllustratorEvents } from \"@rtsee/common\";\nimport {\n RTSeeIllustrator,\n RTSeeStoryElementEntity,\n RTSeeStoryElementsEditor,\n} from \"@rtsee/presentation\";\nimport { RTSeeCore } from \"@rtsee/core\";\nimport { Button } from \"primeng/button\";\nimport { FormComponent } from \"../../../../common/components/forms/form/form.component\";\nimport { sanitizeImageUrl } from \"@rtsee/utilities-ui\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyElementsEditor = RTSeeStoryElementsEditor<any, any>;\n\n/**\n * Collapsible section rendering the thumbnails of one kind of story element\n * (characters / artifacts / locations) and the expanded edit form.\n * All the logic lives in RTSeeStoryElementsEditor.\n */\n@Component({\n selector: \"rtsee-story-elements-section\",\n standalone: true,\n imports: [NgClass, FormsModule, Button, FormComponent],\n templateUrl: \"./story-elements-section.component.html\",\n})\nexport class StoryElementsSectionComponent implements OnDestroy {\n @Input({ required: true }) editor!: AnyElementsEditor;\n @Input({ required: true }) title!: string;\n @Input() icon: string = \"pi pi-box\";\n @Input() collapsed: boolean = false;\n @Input() canDetach: boolean = true;\n @Output() toggled: EventEmitter<void> = new EventEmitter<void>();\n\n batchMode: boolean = false;\n selectedItemIds: Set<string> = new Set<string>();\n batchAdditionalPrompt: string = '';\n generatingItemIds: Set<string> = new Set<string>();\n private activeGenerationListeners: Map<string, (e: Event) => void> = new Map();\n\n private _illustrator?: RTSeeIllustrator;\n private onIllustratorChanged = (): void => {\n this.cdr.markForCheck();\n };\n\n @Input()\n set illustrator(val: RTSeeIllustrator | undefined) {\n if (this._illustrator) {\n this._illustrator.off('changed', this.onIllustratorChanged);\n }\n this._illustrator = val;\n if (this._illustrator) {\n this._illustrator.on('changed', this.onIllustratorChanged);\n }\n this.cdr.markForCheck();\n }\n\n get illustrator(): RTSeeIllustrator | undefined {\n return this._illustrator;\n }\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n ngOnDestroy(): void {\n if (this._illustrator) {\n this._illustrator.off('changed', this.onIllustratorChanged);\n }\n for (const [requestId, listener] of this.activeGenerationListeners.entries()) {\n window.removeEventListener(RTSeeIllustrator.REQUESTED_GENERATION_SUCCEED, listener);\n }\n this.activeGenerationListeners.clear();\n }\n\n startBatchSelection(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.collapsed) {\n this.toggled.emit();\n }\n this.batchMode = true;\n this.selectedItemIds.clear();\n for (const item of this.editor.items) {\n const url = (item.imageUrl || '').toLowerCase();\n if (!url || url.includes('default')) {\n this.selectedItemIds.add(item.id);\n }\n }\n this.cdr.markForCheck();\n }\n\n cancelBatchSelection(): void {\n this.batchMode = false;\n this.selectedItemIds.clear();\n this.batchAdditionalPrompt = '';\n this.cdr.markForCheck();\n }\n\n toggleItemSelection(id: string): void {\n if (this.selectedItemIds.has(id)) {\n this.selectedItemIds.delete(id);\n } else {\n this.selectedItemIds.add(id);\n }\n this.cdr.markForCheck();\n }\n\n isItemSelected(id: string): boolean {\n return this.selectedItemIds.has(id);\n }\n\n isItemGenerating(id: string): boolean {\n return this.generatingItemIds.has(id);\n }\n\n async submitBatchGeneration(): Promise<void> {\n if (this.selectedItemIds.size === 0) return;\n\n const selectedItems = this.editor.items.filter((item) => this.selectedItemIds.has(item.id));\n const additionalPrompt = this.batchAdditionalPrompt.trim();\n\n this.batchMode = false;\n this.selectedItemIds.clear();\n this.batchAdditionalPrompt = '';\n this.cdr.markForCheck();\n\n for (const item of selectedItems) {\n const requestId = RTSeeCore.uuidv4();\n this.generatingItemIds.add(item.id);\n\n const listener = async (e: Event) => {\n const customEvent = e as CustomEvent<{ requestId?: string; imageUrl?: string }>;\n if (customEvent.detail?.requestId === requestId && customEvent.detail?.imageUrl) {\n window.removeEventListener(RTSeeIllustrator.REQUESTED_GENERATION_SUCCEED, listener);\n this.activeGenerationListeners.delete(requestId);\n this.generatingItemIds.delete(item.id);\n\n const cleanUrl = sanitizeImageUrl(customEvent.detail.imageUrl);\n try {\n item.imageUrl = cleanUrl;\n await item.save({ imageUrl: cleanUrl });\n if (this.editor.expanded && this.editor.expanded.id === item.id && this.editor.form) {\n const imageField = this.editor.form.fields.find(\n (f: any) => f.name === 'imageUrl' || f.type === 'image-uploader'\n ) as any;\n if (imageField) {\n imageField.value = cleanUrl;\n if (imageField.imageUploader) {\n imageField.imageUploader.uploadedPhotoPreview = cleanUrl;\n imageField.imageUploader.value = cleanUrl;\n }\n }\n }\n } catch (err) {\n console.error(`Failed to apply generated image to ${this.editor.label}:`, err);\n } finally {\n this.cdr.markForCheck();\n }\n }\n };\n\n window.addEventListener(RTSeeIllustrator.REQUESTED_GENERATION_SUCCEED, listener);\n this.activeGenerationListeners.set(requestId, listener);\n\n const promptParts: string[] = [];\n promptParts.push(`${this.editor.label}: ${item.name || ''}`);\n if (item.visualDescription) {\n promptParts.push(`Visual appearance: ${item.visualDescription}`);\n }\n if (item.description && item.description !== item.visualDescription) {\n promptParts.push(`Description/Role: ${item.description}`);\n }\n if (additionalPrompt) {\n promptParts.push(`Additional prompt: ${additionalPrompt}`);\n }\n const entityPrompt = promptParts.join('\\n');\n\n const config = this.illustrator?.config || {\n aspectRatio: '1:1',\n style: 'Classic Fairy Tale pixel-art Storybook',\n mood: 'Dreamy & Magical',\n lighting: 'Soft Diffused Storybook Glow',\n negativePrompt: 'modern elements, cars, text, watermark, signature, blurry, low quality',\n numberOfImages: 1,\n };\n\n const payload: IRTSeeIllustratorSubmitPayload = {\n chatId: this.illustrator?.activeChatId || undefined,\n agentId: this.illustrator?.activeAgentId || '',\n prompt: entityPrompt,\n config: { ...config },\n contextImages: [],\n requestId,\n };\n\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.SUBMIT_PROMPT, {\n detail: payload,\n })\n );\n }\n\n this.cdr.markForCheck();\n }\n\n async applyReviewedImageToItem(\n event: Event,\n item: RTSeeStoryElementEntity<IRTSeeStoryElement>\n ): Promise<void> {\n event.stopPropagation();\n event.preventDefault();\n const imageUrl = sanitizeImageUrl(this._illustrator?.currentGeneratedImageUrl);\n if (!imageUrl) return;\n\n this.cdr.markForCheck();\n try {\n await item.save({ imageUrl });\n if (this.editor.expanded && this.editor.expanded.id === item.id && this.editor.form) {\n const imageField = this.editor.form.fields.find(\n (f: any) => f.name === 'imageUrl' || f.type === 'image-uploader'\n ) as any;\n if (imageField) {\n imageField.value = imageUrl;\n if (imageField.imageUploader) {\n imageField.imageUploader.uploadedPhotoPreview = imageUrl;\n }\n }\n }\n\n // Reset illustrator state and UI\n this._illustrator?.resetState();\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(RTSeeIllustratorEvents.RESET_STATE));\n }\n } catch (e) {\n console.error(`Failed to apply image to ${this.editor.label}:`, e);\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n submit(): void {\n this.editor.submit();\n }\n\n addToIllustrator(event: Event, item: RTSeeStoryElementEntity<IRTSeeStoryElement>): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: item.id,\n title: item.name || this.editor.label,\n imageUrl: item.imageUrl || '',\n visualDescription: item.visualDescription || item.description || '',\n description: item.description || '',\n sourceType: this.editor.section,\n },\n })\n );\n }\n }\n\n trackById(index: number, item: RTSeeStoryElementEntity<IRTSeeStoryElement>): string {\n return item.id || `new-${index}`;\n }\n}\n\n","<section class=\"rtsee-ise-section\" [ngClass]=\"{ 'rtsee-ise-section--collapsed': collapsed }\">\n <header class=\"rtsee-ise-section-header\">\n <button type=\"button\"\n class=\"rtsee-ise-section-toggle\"\n [attr.aria-expanded]=\"!collapsed\"\n [id]=\"'rtsee-ise-toggle-' + editor.section\"\n (click)=\"toggled.emit()\">\n <i class=\"rtsee-ise-section-icon\" [ngClass]=\"icon\"></i>\n <h3 class=\"rtsee-ise-section-title\">{{ title }}</h3>\n <span class=\"rtsee-ise-section-count\">{{ editor.items.length }}</span>\n <i class=\"pi pi-chevron-down rtsee-ise-chevron\"></i>\n </button>\n @if (editor.items.length > 0 && !batchMode) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-batch-generate\"\n (click)=\"startBatchSelection($event)\"\n [title]=\"'Batch generate images for ' + title\">\n <i class=\"pi pi-sparkles\"></i>\n <span>Generate Images</span>\n </button>\n }\n </header>\n\n @if (batchMode) {\n <div class=\"rtsee-ise-batch-panel\">\n <div class=\"rtsee-ise-batch-header\">\n <span class=\"rtsee-ise-batch-title\">\n <i class=\"pi pi-sparkles\"></i>\n Batch Generate for {{ title }} ({{ selectedItemIds.size }} of {{ editor.items.length }} selected)\n </span>\n <span class=\"rtsee-ise-batch-hint\">\n Click items to select/deselect. Entities with default images are auto-selected.\n </span>\n </div>\n\n <textarea\n class=\"rtsee-ise-batch-prompt-input\"\n rows=\"2\"\n [(ngModel)]=\"batchAdditionalPrompt\"\n placeholder=\"Additional prompt instructions for all selected {{ title }} (optional)...\"\n ></textarea>\n\n <div class=\"rtsee-ise-batch-actions\">\n <button\n type=\"button\"\n class=\"rtsee-ise-btn-batch-cancel\"\n (click)=\"cancelBatchSelection()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"rtsee-ise-btn-batch-submit\"\n [disabled]=\"selectedItemIds.size === 0\"\n (click)=\"submitBatchGeneration()\"\n >\n <i class=\"pi pi-sparkles\"></i>\n <span>Generate {{ selectedItemIds.size }} image{{ selectedItemIds.size === 1 ? '' : 's' }}</span>\n </button>\n </div>\n </div>\n }\n\n @if (!collapsed) {\n <div class=\"rtsee-ise-section-body\">\n <div class=\"rtsee-ise-thumbs-grid\">\n @for (item of editor.items; track trackById($index, item)) {\n <div class=\"rtsee-ise-thumb-card-container\" style=\"position: relative; display: flex; flex-direction: column;\">\n <button type=\"button\"\n class=\"rtsee-ise-thumb\"\n [ngClass]=\"{\n 'rtsee-ise-thumb--active': editor.isExpanded(item),\n 'rtsee-ise-thumb-card--selected': batchMode && isItemSelected(item.id)\n }\"\n [id]=\"'rtsee-ise-' + editor.section + '-' + item.id\"\n (click)=\"batchMode ? toggleItemSelection(item.id) : editor.expand(item)\">\n <div class=\"rtsee-ise-thumb-image\">\n @if (item.imageUrl) {\n <img [src]=\"item.imageUrl\" [alt]=\"item.name\" loading=\"lazy\" />\n } @else {\n <i [ngClass]=\"icon\"></i>\n }\n @if (isItemGenerating(item.id)) {\n <div class=\"rtsee-ise-thumb-generating-overlay\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n <span>Generating…</span>\n </div>\n }\n </div>\n <div class=\"rtsee-ise-thumb-body\">\n <span class=\"rtsee-ise-thumb-name\">{{ item.name }}</span>\n <span class=\"rtsee-ise-thumb-description\">{{ item.getTruncatedDescription(90) }}</span>\n </div>\n </button>\n @if (batchMode) {\n <div class=\"rtsee-ise-thumb-batch-checkbox\" (click)=\"toggleItemSelection(item.id); $event.stopPropagation()\">\n <input type=\"checkbox\" [checked]=\"isItemSelected(item.id)\" />\n </div>\n }\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator\"\n style=\"position: absolute; top: 8px; right: 8px;\"\n title=\"Add {{ item.name }} to Illustrator context\"\n (click)=\"addToIllustrator($event, item)\">\n <i class=\"pi pi-palette\"></i>\n <span>+🎨</span>\n </button>\n @if (illustrator?.reviewingGeneratedImage && illustrator?.currentGeneratedImageUrl) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-quick-apply\"\n style=\"position: absolute; bottom: 8px; right: 8px;\"\n [disabled]=\"item.saveInProgress\"\n [title]=\"'Apply reviewed image to ' + item.name\"\n (click)=\"applyReviewedImageToItem($event, item)\">\n @if (item.saveInProgress) {\n <i class=\"pi pi-spin pi-spinner\"></i>\n } @else {\n <i class=\"pi pi-plus\"></i>\n }\n </button>\n }\n </div>\n }\n\n <button type=\"button\"\n class=\"rtsee-ise-thumb rtsee-ise-thumb--add\"\n [ngClass]=\"{ 'rtsee-ise-thumb--active': editor.isCreating }\"\n [id]=\"'rtsee-ise-add-' + editor.section\"\n (click)=\"editor.expandNew()\">\n <i class=\"pi pi-plus\"></i>\n <span>New {{ editor.label }}</span>\n </button>\n </div>\n\n @if (editor.expanded && editor.form) {\n <div class=\"rtsee-ise-expanded rtsee-form-container\">\n <div class=\"rtsee-ise-expanded-header\">\n <h4>{{ editor.expanded.isNew ? 'New ' + editor.label : editor.expanded.name }}</h4>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n @if (!editor.expanded.isNew) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator\"\n title=\"Add to Illustrator context\"\n (click)=\"addToIllustrator($event, editor.expanded)\">\n <i class=\"pi pi-palette\"></i>\n <span>+🎨 Illustrator</span>\n </button>\n }\n <button type=\"button\" class=\"rtsee-ise-icon-button\" (click)=\"editor.collapse()\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n </div>\n\n @if (editor.error) {\n <div class=\"rtsee-ise-error\">{{ editor.error }}</div>\n }\n\n <rtsee-form [form]=\"editor.form\" (formSubmit)=\"submit()\">\n <div class=\"rtsee-ise-actions\">\n <p-button type=\"submit\"\n [label]=\"editor.expanded.isNew ? 'Create' : 'Save'\"\n [loading]=\"editor.saveInProgress\"\n [disabled]=\"editor.busy\" />\n <p-button label=\"Cancel\"\n severity=\"secondary\"\n (click)=\"editor.collapse()\"\n [disabled]=\"editor.busy\" />\n @if (!editor.expanded.isNew) {\n <span class=\"rtsee-ise-actions-spacer\"></span>\n @if (canDetach) {\n <p-button label=\"Remove from story\"\n icon=\"pi pi-minus-circle\"\n severity=\"secondary\"\n [text]=\"true\"\n (click)=\"editor.detach(editor.expanded)\"\n [disabled]=\"editor.busy\" />\n }\n <p-button label=\"Delete\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n [loading]=\"editor.removeInProgress\"\n (click)=\"editor.delete(editor.expanded)\"\n [disabled]=\"editor.busy\" />\n }\n </div>\n </rtsee-form>\n </div>\n }\n </div>\n }\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from 'primeng/button';\nimport { Checkbox } from 'primeng/checkbox';\nimport { Textarea } from 'primeng/textarea';\nimport {\n RTSeeIllustrator,\n IRTSeeIllustratorAgentOption,\n} from '@rtsee/presentation';\nimport { IRTSeeIllustratorContextImage } from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-illustrator',\n standalone: true,\n imports: [CommonModule, FormsModule, Button, Checkbox, Textarea],\n templateUrl: './illustrator.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IllustratorComponent implements OnInit, OnDestroy {\n @Input() illustrator!: RTSeeIllustrator;\n private ownIllustrator: boolean = false;\n\n readonly aspectRatios: string[] = ['1:1', '4:3', '3:4', '16:9', '9:16', '3:2', '2:3'];\n\n readonly styles: string[] = [\n 'Classic Fairy Tale pixel-art Storybook',\n 'Whimsical Watercolor & Ink',\n 'Golden Age Storybook Illustration',\n 'Enchanted Fantasy Digital Art',\n 'Vibrant Children\\'s Book Illustration',\n 'Ethereal Oil Painting',\n ];\n\n readonly moods: string[] = [\n 'Dreamy & Magical',\n 'Warm, Cozy & Hearth-lit',\n 'Epic, Wonder-filled & Adventurous',\n 'Mysterious & Enchanted',\n 'Playful & Charming',\n 'Dark Fantasy & Gothic',\n ];\n\n readonly lightings: string[] = [\n 'Soft Diffused Storybook Glow',\n 'Golden Hour Sunbeams & Dappled Rays',\n 'Twilight Starlight & Fireflies',\n 'Cozy Candlelight & Lantern Glow',\n 'Dramatic Volumetric Rays',\n 'Moonlit Midnight Glow',\n ];\n\n private readonly onIllustratorChanged = (): void => {\n this.cdr.markForCheck();\n };\n\n private readonly onScrollIntoView = (): void => {\n this.cdr.markForCheck();\n setTimeout(() => {\n this.elementRef.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }, 60);\n };\n\n constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly elementRef: ElementRef<HTMLElement>\n ) {}\n\n ngOnInit(): void {\n if (!this.illustrator) {\n this.illustrator = new RTSeeIllustrator();\n this.ownIllustrator = true;\n }\n this.illustrator.on('changed', this.onIllustratorChanged);\n this.illustrator.on('scroll-into-view', this.onScrollIntoView);\n this.illustrator.requestAgents();\n }\n\n ngOnDestroy(): void {\n if (this.illustrator) {\n this.illustrator.off('changed', this.onIllustratorChanged);\n this.illustrator.off('scroll-into-view', this.onScrollIntoView);\n if (this.ownIllustrator) {\n this.illustrator.destroy();\n }\n }\n }\n\n toggleExpand(): void {\n this.illustrator.toggleExpand();\n }\n\n toggleConfig(): void {\n this.illustrator.toggleConfig();\n }\n\n onSelectAgent(event: Event): void {\n const target = event.target as HTMLSelectElement;\n if (target?.value) {\n this.illustrator.selectAgent(target.value);\n }\n }\n\n refreshAgents(): void {\n this.illustrator.requestAgents();\n }\n\n removeImage(id: string): void {\n this.illustrator.removeContextImage(id);\n }\n\n toggleActive(image: IRTSeeIllustratorContextImage): void {\n this.illustrator.toggleImageActive(image.id);\n }\n\n discardGeneratedImage(): void {\n this.illustrator.discardGeneratedImage();\n }\n\n acceptGeneratedImage(): void {\n this.illustrator.acceptGeneratedImage();\n }\n\n submitIteration(): void {\n this.illustrator.submitIteration();\n }\n\n submitPrompt(): void {\n this.illustrator.submitPrompt();\n }\n\n trackByImageId(index: number, item: IRTSeeIllustratorContextImage): string {\n return item.id || `context-img-${index}`;\n }\n\n trackByAgentId(index: number, item: IRTSeeIllustratorAgentOption): string {\n return item.id || `agent-${index}`;\n }\n}\n","<div class=\"rtsee-illustrator-container\" [ngClass]=\"{ 'rtsee-illustrator--expanded': illustrator.expanded }\">\n <!-- Collapsed Bottom Bar -->\n @if (!illustrator.expanded) {\n <div class=\"rtsee-illustrator-collapsed-bar\" (click)=\"toggleExpand()\">\n <div class=\"rtsee-illustrator-collapsed-info\">\n <div class=\"rtsee-illustrator-badge-icon\">\n <i class=\"pi pi-palette\"></i>\n </div>\n <div class=\"rtsee-illustrator-collapsed-title\">\n <span class=\"rtsee-illustrator-brand-text\">NanoBanana Illustrator</span>\n @if (illustrator.activeAgent) {\n <span class=\"rtsee-illustrator-agent-pill\">\n <i class=\"pi pi-bolt\"></i>\n {{ illustrator.activeAgent.name }}\n </span>\n } @else {\n <span class=\"rtsee-illustrator-agent-pill rtsee-illustrator-agent-pill--waiting\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n Waiting for Chat Agent...\n </span>\n }\n </div>\n </div>\n\n <div class=\"rtsee-illustrator-collapsed-meta\">\n @if (illustrator.reviewingGeneratedImage && illustrator.currentGeneratedImageUrl) {\n <span class=\"rtsee-illustrator-collapsed-review-pill\">\n <img [src]=\"illustrator.currentGeneratedImageUrl\" alt=\"Draft\" class=\"rtsee-illustrator-collapsed-thumb\" />\n <span>✨ Reviewing Draft</span>\n </span>\n }\n @if (illustrator.contextImages.length > 0) {\n <span class=\"rtsee-illustrator-context-count\">\n <i class=\"pi pi-images\"></i>\n {{ illustrator.activeContextImages.length }} / {{ illustrator.contextImages.length }} context refs\n </span>\n }\n @if (illustrator.prompt) {\n <span class=\"rtsee-illustrator-prompt-preview\">\n \"{{ illustrator.prompt.length > 50 ? (illustrator.prompt | slice:0:50) + '…' : illustrator.prompt }}\"\n </span>\n }\n <button type=\"button\" class=\"rtsee-illustrator-expand-btn\" aria-label=\"Expand Illustrator\">\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- Expanded Drawer -->\n @if (illustrator.expanded) {\n <div class=\"rtsee-illustrator-expanded-panel\">\n <!-- Header -->\n <header class=\"rtsee-illustrator-header\">\n <div class=\"rtsee-illustrator-title-group\">\n <div class=\"rtsee-illustrator-icon-circle\">\n <i class=\"pi pi-palette\"></i>\n </div>\n <div>\n <h3 class=\"rtsee-illustrator-heading\">NanoBanana Illustrator</h3>\n <p class=\"rtsee-illustrator-subheading\">Generate enchanted fairy tale visuals with rich contextual styling</p>\n </div>\n </div>\n\n <div class=\"rtsee-illustrator-header-controls\">\n <!-- Agent Picker -->\n <div class=\"rtsee-illustrator-agent-select-wrapper\">\n <label class=\"rtsee-illustrator-agent-label\" for=\"rtsee-illustrator-agent-select\">\n <i class=\"pi pi-sparkles\"></i> Agent:\n </label>\n @if (illustrator.agents.length > 0) {\n <select\n id=\"rtsee-illustrator-agent-select\"\n class=\"rtsee-illustrator-select\"\n [value]=\"illustrator.activeAgentId || ''\"\n (change)=\"onSelectAgent($event)\"\n >\n @for (agent of illustrator.agents; track trackByAgentId($index, agent)) {\n <option [value]=\"agent.id\">\n {{ agent.name }} {{ agent.model ? '(' + agent.model + ')' : '' }}\n </option>\n }\n </select>\n } @else {\n <button\n type=\"button\"\n class=\"rtsee-illustrator-btn-mini\"\n (click)=\"refreshAgents()\"\n title=\"Query active agents from RTSeeChat\"\n >\n <i class=\"pi pi-refresh\"></i>\n <span>Connect RTSeeChat</span>\n </button>\n }\n </div>\n\n <!-- Config Toggle Button -->\n <button\n type=\"button\"\n class=\"rtsee-illustrator-header-btn\"\n [ngClass]=\"{ 'rtsee-illustrator-header-btn--active': illustrator.configExpanded }\"\n (click)=\"toggleConfig()\"\n title=\"Toggle NanoBanana Configuration\"\n >\n <i class=\"pi pi-sliders-h\"></i>\n <span>Config</span>\n <i class=\"pi\" [ngClass]=\"illustrator.configExpanded ? 'pi-chevron-up' : 'pi-chevron-down'\"></i>\n </button>\n\n <!-- Collapse Drawer Button -->\n <button\n type=\"button\"\n class=\"rtsee-illustrator-header-btn rtsee-illustrator-header-btn--close\"\n (click)=\"toggleExpand()\"\n aria-label=\"Collapse Illustrator\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n </header>\n\n <!-- Collapsible Config Section -->\n @if (illustrator.configExpanded) {\n <div class=\"rtsee-illustrator-config-panel\">\n <div class=\"rtsee-illustrator-config-grid\">\n <!-- Aspect Ratio -->\n <div class=\"rtsee-illustrator-config-item\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-aspect-ratio\">\n <i class=\"pi pi-stop\"></i> Aspect Ratio (Default 1:1)\n </label>\n <select\n id=\"cfg-aspect-ratio\"\n class=\"rtsee-illustrator-select\"\n [(ngModel)]=\"illustrator.config.aspectRatio\"\n >\n @for (ratio of aspectRatios; track ratio) {\n <option [value]=\"ratio\">{{ ratio }}{{ ratio === '1:1' ? ' (Square - Fairy Tale Default)' : '' }}</option>\n }\n </select>\n </div>\n\n <!-- Style Preset -->\n <div class=\"rtsee-illustrator-config-item\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-style\">\n <i class=\"pi pi-paint-brush\"></i> Illustration Style\n </label>\n <select\n id=\"cfg-style\"\n class=\"rtsee-illustrator-select\"\n [(ngModel)]=\"illustrator.config.style\"\n >\n @for (s of styles; track s) {\n <option [value]=\"s\">{{ s }}</option>\n }\n </select>\n </div>\n\n <!-- Mood Preset -->\n <div class=\"rtsee-illustrator-config-item\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-mood\">\n <i class=\"pi pi-heart\"></i> Mood & Atmosphere\n </label>\n <select\n id=\"cfg-mood\"\n class=\"rtsee-illustrator-select\"\n [(ngModel)]=\"illustrator.config.mood\"\n >\n @for (m of moods; track m) {\n <option [value]=\"m\">{{ m }}</option>\n }\n </select>\n </div>\n\n <!-- Lighting Preset -->\n <div class=\"rtsee-illustrator-config-item\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-lighting\">\n <i class=\"pi pi-sun\"></i> Lighting\n </label>\n <select\n id=\"cfg-lighting\"\n class=\"rtsee-illustrator-select\"\n [(ngModel)]=\"illustrator.config.lighting\"\n >\n @for (l of lightings; track l) {\n <option [value]=\"l\">{{ l }}</option>\n }\n </select>\n </div>\n </div>\n\n <!-- Negative Prompt -->\n <div class=\"rtsee-illustrator-config-item rtsee-illustrator-config-item--full\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-negative-prompt\">\n <i class=\"pi pi-ban\"></i> Negative Prompt (What to exclude)\n </label>\n <input\n id=\"cfg-negative-prompt\"\n type=\"text\"\n class=\"rtsee-illustrator-input\"\n [(ngModel)]=\"illustrator.config.negativePrompt\"\n placeholder=\"e.g. modern items, cars, text, watermark, blurry...\"\n />\n </div>\n </div>\n }\n\n <!-- Context Images Section -->\n @if (illustrator.contextImages.length > 0) {\n <div class=\"rtsee-illustrator-context-section\">\n <div class=\"rtsee-illustrator-section-header\">\n <span class=\"rtsee-illustrator-section-title\">\n <i class=\"pi pi-images\"></i> Story Context References ({{ illustrator.activeContextImages.length }} of {{ illustrator.contextImages.length }} active)\n </span>\n <button\n type=\"button\"\n class=\"rtsee-illustrator-btn-text\"\n (click)=\"illustrator.clearContext()\"\n title=\"Clear all context references\"\n >\n <i class=\"pi pi-trash\"></i> Clear All\n </button>\n </div>\n\n <div class=\"rtsee-illustrator-context-cards\">\n @for (img of illustrator.contextImages; track trackByImageId($index, img)) {\n <div class=\"rtsee-illustrator-context-card\" [ngClass]=\"{ 'rtsee-illustrator-context-card--inactive': !img.active }\">\n <!-- Thumbnail & Active Checkbox -->\n <div class=\"rtsee-illustrator-card-thumb-col\">\n <div class=\"rtsee-illustrator-card-thumb-wrapper\">\n @if (img.imageUrl) {\n <img [src]=\"img.imageUrl\" [alt]=\"img.title\" class=\"rtsee-illustrator-card-img\" />\n } @else {\n <div class=\"rtsee-illustrator-card-no-img\">\n <i class=\"pi pi-image\"></i>\n </div>\n }\n </div>\n <label class=\"rtsee-illustrator-checkbox-label\">\n <input\n type=\"checkbox\"\n [checked]=\"img.active !== false\"\n (change)=\"toggleActive(img)\"\n />\n <span>Active</span>\n </label>\n </div>\n\n <!-- Editable Fields -->\n <div class=\"rtsee-illustrator-card-fields\">\n <div class=\"rtsee-illustrator-card-header\">\n <span class=\"rtsee-illustrator-source-badge\">{{ img.sourceType || 'reference' }}</span>\n <input\n type=\"text\"\n class=\"rtsee-illustrator-card-title-input\"\n [(ngModel)]=\"img.title\"\n placeholder=\"Reference title...\"\n />\n <button\n type=\"button\"\n class=\"rtsee-illustrator-card-remove-btn\"\n (click)=\"removeImage(img.id)\"\n aria-label=\"Remove image from context\"\n title=\"Remove from context\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"rtsee-illustrator-card-inputs-grid\">\n <div class=\"rtsee-illustrator-input-group\">\n <label class=\"rtsee-illustrator-input-sublabel\">Visual Description (Style / Appearance):</label>\n <textarea\n class=\"rtsee-illustrator-card-textarea\"\n rows=\"2\"\n [(ngModel)]=\"img.visualDescription\"\n placeholder=\"Key visual features, colors, clothing, texture, lighting...\"\n ></textarea>\n </div>\n <div class=\"rtsee-illustrator-input-group\">\n <label class=\"rtsee-illustrator-input-sublabel\">Context / Role Description:</label>\n <textarea\n class=\"rtsee-illustrator-card-textarea\"\n rows=\"2\"\n [(ngModel)]=\"img.description\"\n placeholder=\"Context or lore in this fairy tale scene...\"\n ></textarea>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Generation Error Banner -->\n @if (illustrator.generationError) {\n <div class=\"rtsee-illustrator-error-banner\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span class=\"rtsee-illustrator-error-text\">{{ illustrator.generationError }}</span>\n <button type=\"button\" class=\"rtsee-illustrator-error-close\" (click)=\"illustrator.generationError = null\" aria-label=\"Dismiss error\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n }\n\n <!-- Reviewing Generated Image Mode -->\n @if (illustrator.reviewingGeneratedImage && illustrator.currentGeneratedImageUrl) {\n <div class=\"rtsee-illustrator-review-panel\">\n <div class=\"rtsee-illustrator-review-header\">\n <div class=\"rtsee-illustrator-review-title\">\n <span class=\"rtsee-illustrator-review-badge\">\n <i class=\"pi pi-sparkles\"></i> Reviewing Generated Image\n </span>\n <span class=\"rtsee-illustrator-review-sub\">Review the result, request iterative modifications, or discard.</span>\n </div>\n <div class=\"rtsee-illustrator-review-quick-actions\">\n <p-button\n label=\"Accept & Keep\"\n icon=\"pi pi-check\"\n severity=\"success\"\n (click)=\"acceptGeneratedImage()\"\n />\n <p-button\n label=\"Discard\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n (click)=\"discardGeneratedImage()\"\n />\n </div>\n </div>\n\n <!-- Image Preview -->\n <div class=\"rtsee-illustrator-preview-box\">\n <img [src]=\"illustrator.currentGeneratedImageUrl\" alt=\"Generated fairy tale illustration\" class=\"rtsee-illustrator-preview-img\" />\n <a [href]=\"illustrator.currentGeneratedImageUrl\" target=\"_blank\" rel=\"noopener\" class=\"rtsee-illustrator-preview-zoom-btn\" title=\"Open full image in new tab\">\n <i class=\"pi pi-external-link\"></i> Full View\n </a>\n </div>\n\n <!-- Iteration Modification Controls -->\n <div class=\"rtsee-illustrator-iteration-box\">\n <div class=\"rtsee-illustrator-iteration-info\">\n <span class=\"rtsee-illustrator-iteration-tag\">\n <i class=\"pi pi-refresh\"></i> Request Modifications & Iterate\n </span>\n <span class=\"rtsee-illustrator-iteration-context-hint\">\n <i class=\"pi pi-info-circle\"></i>\n All active context references ({{ illustrator.activeContextImages.length }}) are sent to NanoBanana alongside this base picture.\n </span>\n </div>\n\n <textarea\n class=\"rtsee-illustrator-prompt-textarea rtsee-illustrator-prompt-textarea--iteration\"\n rows=\"3\"\n [(ngModel)]=\"illustrator.iterationPrompt\"\n placeholder=\"Describe modifications to apply to this picture (e.g. 'Make the wizard's cloak sapphire blue with silver runes, add glowing fireflies, soften the background trees')...\"\n (keydown.meta.enter)=\"submitIteration()\"\n (keydown.control.enter)=\"submitIteration()\"\n ></textarea>\n\n <div class=\"rtsee-illustrator-prompt-footer\">\n <span class=\"rtsee-illustrator-tip\">\n <i class=\"pi pi-info-circle\"></i>\n Press <strong>⌘+Enter</strong> to iterate on this picture.\n </span>\n\n <div class=\"rtsee-illustrator-actions\">\n <p-button\n label=\"Discard\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n (click)=\"discardGeneratedImage()\"\n />\n <p-button\n label=\"Iterate & Regenerate\"\n icon=\"pi pi-refresh\"\n [loading]=\"illustrator.submitting\"\n [disabled]=\"!illustrator.canSubmit\"\n (click)=\"submitIteration()\"\n />\n </div>\n </div>\n </div>\n </div>\n } @else {\n <!-- Prompt Input & Submit Action (Standard Mode) -->\n <div class=\"rtsee-illustrator-prompt-section\">\n <div class=\"rtsee-illustrator-prompt-box\">\n <textarea\n class=\"rtsee-illustrator-prompt-textarea\"\n rows=\"3\"\n [(ngModel)]=\"illustrator.prompt\"\n placeholder=\"Describe the fairy tale illustration to generate (e.g. 'A cozy cottage tucked deep inside the emerald moss woods, magical amber lanterns glowing warmly from the windows, soft fireflies in the air')...\"\n (keydown.meta.enter)=\"submitPrompt()\"\n (keydown.control.enter)=\"submitPrompt()\"\n ></textarea>\n\n <div class=\"rtsee-illustrator-prompt-footer\">\n <span class=\"rtsee-illustrator-tip\">\n <i class=\"pi pi-info-circle\"></i>\n Press <strong>⌘+Enter</strong> to submit. Context characters, artifacts, locations & slides are sent to NanoBanana.\n </span>\n\n <div class=\"rtsee-illustrator-actions\">\n <p-button\n label=\"Generate Illustration\"\n icon=\"pi pi-sparkles\"\n [loading]=\"illustrator.submitting\"\n [disabled]=\"!illustrator.canSubmit\"\n (click)=\"submitPrompt()\"\n />\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n</div>\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { NgClass } from \"@angular/common\";\nimport { IRTSeeStorySlide, RTSeeIllustratorEvents } from \"@rtsee/common\";\nimport {\n RTSeeInteractiveStoryEditorVm,\n RTSeeStoryEditorSection,\n RTSeeIllustrator,\n} from \"@rtsee/presentation\";\nimport { Button } from \"primeng/button\";\nimport { FormComponent } from \"../../../common/components/forms/form/form.component\";\nimport { ManageSlideComponent } from \"../manage/manage-story/manage-slide/manage-slide.component\";\nimport { StoryElementsSectionComponent } from \"./story-elements-section/story-elements-section.component\";\nimport { IllustratorComponent } from \"../illustrator/illustrator.component\";\nimport { sanitizeImageUrl } from \"@rtsee/utilities-ui\";\n\n/**\n * Interactive story editor: collapsible sections of thumbnails (details, characters,\n * artifacts, locations, slides, author) that expand into the edit forms.\n * Rendering only, the orchestration lives in RTSeeInteractiveStoryEditorVm.\n */\n@Component({\n selector: \"rtsee-interactive-story-editor\",\n standalone: true,\n imports: [\n NgClass,\n Button,\n FormComponent,\n ManageSlideComponent,\n StoryElementsSectionComponent,\n IllustratorComponent,\n ],\n templateUrl: \"./interactive-story-editor.component.html\",\n})\nexport class InteractiveStoryEditorComponent implements OnInit, OnDestroy {\n @Input({ required: true }) vm!: RTSeeInteractiveStoryEditorVm;\n /** set to false when the vm is initialized by the host */\n @Input() autoInit: boolean = true;\n\n readonly sections: typeof RTSeeStoryEditorSection = RTSeeStoryEditorSection;\n readonly illustrator: RTSeeIllustrator = new RTSeeIllustrator();\n readonly slideUpdatingIds: Set<string> = new Set();\n\n private onIllustratorChanged = (): void => {\n this.cdr.markForCheck();\n };\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (this.autoInit && !this.vm.story) {\n void this.vm.init();\n }\n this.illustrator.on('changed', this.onIllustratorChanged);\n }\n\n ngOnDestroy(): void {\n this.illustrator.off('changed', this.onIllustratorChanged);\n this.vm.collapseSlide();\n this.illustrator.destroy();\n }\n\n isSlideUpdating(id: string): boolean {\n return this.slideUpdatingIds.has(id);\n }\n\n async applyReviewedImageToSlide(event: Event, slide: IRTSeeStorySlide): Promise<void> {\n event.stopPropagation();\n event.preventDefault();\n const imageUrl = sanitizeImageUrl(this.illustrator.currentGeneratedImageUrl);\n if (!imageUrl || !slide.id) return;\n\n this.slideUpdatingIds.add(slide.id);\n this.cdr.markForCheck();\n\n try {\n await this.vm.updateSlideImage(slide, imageUrl);\n\n // Reset illustrator state and UI\n this.illustrator.resetState();\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(RTSeeIllustratorEvents.RESET_STATE));\n }\n } catch (e) {\n console.error('Failed to apply image to slide:', e);\n } finally {\n this.slideUpdatingIds.delete(slide.id);\n this.cdr.markForCheck();\n }\n }\n\n submitDetails(): void {\n this.vm.detailsForm?.submit();\n }\n\n submitAuthor(): void {\n this.vm.authorForm?.submit();\n }\n\n submitNewAuthor(): void {\n this.vm.newAuthorForm?.submit();\n }\n\n addSlideToContext(event: Event, slide: IRTSeeStorySlide): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined') {\n const anySlide = slide as any;\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: slide.id,\n title: `Slide ${slide.slideNumber}: ${slide.name || 'Story Scene'}`,\n imageUrl: slide.imageUrl || '',\n visualDescription: anySlide.visualDescription || slide.text || '',\n description: anySlide.description || slide.text || '',\n sourceType: 'slide',\n },\n })\n );\n }\n }\n\n addSlideEntitiesToContext(event: Event, slide: IRTSeeStorySlide): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window === 'undefined') {\n return;\n }\n\n // 1. Characters: populate all related characters from story level\n const slideCharacters = slide.characters || [];\n const storyChars =\n this.vm.story?.characters ||\n this.vm.charactersEditor?.items ||\n [];\n\n for (const charRef of slideCharacters) {\n const fullChar = storyChars.find(\n (c) => c.id === charRef.id || c.name?.toLowerCase() === charRef.name?.toLowerCase()\n );\n if (fullChar) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullChar.id,\n title: fullChar.name || 'Character',\n imageUrl: fullChar.imageUrl || '',\n visualDescription: fullChar.visualDescription || fullChar.description || '',\n description: fullChar.description || '',\n sourceType: 'character',\n },\n })\n );\n }\n }\n\n if (slide.charactersIds) {\n for (const charId of slide.charactersIds) {\n if (!slideCharacters.some((c) => c.id === charId)) {\n const fullChar = storyChars.find((c) => c.id === charId);\n if (fullChar) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullChar.id,\n title: fullChar.name || 'Character',\n imageUrl: fullChar.imageUrl || '',\n visualDescription: fullChar.visualDescription || fullChar.description || '',\n description: fullChar.description || '',\n sourceType: 'character',\n },\n })\n );\n }\n }\n }\n }\n\n // 2. Locations: populate related location from story level\n const slideLocations = slide.locations || [];\n const storyLocs =\n this.vm.story?.locations ||\n this.vm.locationsEditor?.items ||\n [];\n\n for (const locRef of slideLocations) {\n const fullLoc = storyLocs.find(\n (l) => l.id === locRef.id || l.name?.toLowerCase() === locRef.name?.toLowerCase()\n );\n if (fullLoc) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullLoc.id,\n title: fullLoc.name || 'Location',\n imageUrl: fullLoc.imageUrl || '',\n visualDescription: fullLoc.visualDescription || fullLoc.description || '',\n description: fullLoc.description || '',\n sourceType: 'location',\n },\n })\n );\n }\n }\n\n if (slide.locationId && !slideLocations.some((l) => l.id === slide.locationId)) {\n const fullLoc = storyLocs.find((l) => l.id === slide.locationId);\n if (fullLoc) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullLoc.id,\n title: fullLoc.name || 'Location',\n imageUrl: fullLoc.imageUrl || '',\n visualDescription: fullLoc.visualDescription || fullLoc.description || '',\n description: fullLoc.description || '',\n sourceType: 'location',\n },\n })\n );\n }\n }\n\n // 3. Artifacts: populate related artifacts from story level\n const slideArtifacts = slide.artifacts || [];\n const storyArts =\n this.vm.story?.artifacts ||\n this.vm.artifactsEditor?.items ||\n [];\n\n for (const artRef of slideArtifacts) {\n const fullArt = storyArts.find(\n (a) => a.id === artRef.id || a.name?.toLowerCase() === artRef.name?.toLowerCase()\n );\n if (fullArt) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullArt.id,\n title: fullArt.name || 'Artifact',\n imageUrl: fullArt.imageUrl || '',\n visualDescription: fullArt.visualDescription || fullArt.description || '',\n description: fullArt.description || '',\n sourceType: 'artifact',\n },\n })\n );\n }\n }\n\n if (slide.artifactsIds) {\n for (const artId of slide.artifactsIds) {\n if (!slideArtifacts.some((a) => a.id === artId)) {\n const fullArt = storyArts.find((a) => a.id === artId);\n if (fullArt) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullArt.id,\n title: fullArt.name || 'Artifact',\n imageUrl: fullArt.imageUrl || '',\n visualDescription: fullArt.visualDescription || fullArt.description || '',\n description: fullArt.description || '',\n sourceType: 'artifact',\n },\n })\n );\n }\n }\n }\n }\n\n // 4. Illustration prompt: populate prompt box with slide illustrationDescription\n const illustrationDesc =\n slide.illustrationDescription ?? (slide as any).illustrationDescription;\n if (typeof illustrationDesc === 'string' && illustrationDesc.trim()) {\n this.illustrator.setPrompt(illustrationDesc.trim());\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.SET_PROMPT, {\n detail: { prompt: illustrationDesc.trim() },\n })\n );\n }\n }\n\n addAuthorToContext(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined' && this.vm.author) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: this.vm.author.id,\n title: `Author: ${this.vm.author.name || ''}`,\n imageUrl: this.vm.author.imageUrl || '',\n visualDescription: this.vm.author.description || '',\n description: this.vm.author.description || '',\n sourceType: 'author',\n },\n })\n );\n }\n }\n\n trackSlide(index: number, slide: IRTSeeStorySlide): string {\n return slide.id || `slide-${index}`;\n }\n}\n\n","<div class=\"rtsee-interactive-story-editor\" [style.padding-bottom]=\"illustrator.expanded ? '460px' : '72px'\">\n @if (vm.initInProgress) {\n <div class=\"rtsee-ise-loading\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n <span>Loading story…</span>\n </div>\n } @else if (vm.initError) {\n <div class=\"rtsee-ise-error\">{{ vm.initError }}</div>\n } @else if (vm.story) {\n <header class=\"rtsee-ise-header\">\n <span class=\"rtsee-ise-eyebrow\">{{ vm.isNewStory ? 'New story' : 'Story editor' }}</span>\n <h2 class=\"rtsee-ise-heading\">{{ vm.story.name || 'Untitled story' }}</h2>\n </header>\n\n <!-- 1. Details -->\n <section class=\"rtsee-ise-section\" [ngClass]=\"{ 'rtsee-ise-section--collapsed': vm.isCollapsed(sections.details) }\">\n <header class=\"rtsee-ise-section-header\">\n <button type=\"button\" class=\"rtsee-ise-section-toggle\" id=\"rtsee-ise-toggle-details\"\n [attr.aria-expanded]=\"!vm.isCollapsed(sections.details)\"\n (click)=\"vm.toggleSection(sections.details)\">\n <i class=\"rtsee-ise-section-icon pi pi-book\"></i>\n <h3 class=\"rtsee-ise-section-title\">Story details</h3>\n <i class=\"pi pi-chevron-down rtsee-ise-chevron\"></i>\n </button>\n </header>\n\n @if (!vm.isCollapsed(sections.details)) {\n <div class=\"rtsee-ise-section-body\">\n <button type=\"button\" class=\"rtsee-ise-details-card\" id=\"rtsee-ise-details-card\"\n [ngClass]=\"{ 'rtsee-ise-thumb--active': vm.detailsExpanded }\"\n (click)=\"vm.toggleDetails()\">\n <div class=\"rtsee-ise-details-image\">\n @if (vm.story.imageUrl) {\n <img [src]=\"vm.story.imageUrl\" [alt]=\"vm.story.name\" />\n } @else {\n <i class=\"pi pi-image\"></i>\n }\n </div>\n <div class=\"rtsee-ise-details-body\">\n <span class=\"rtsee-ise-details-name\">{{ vm.story.name || 'Untitled story' }}</span>\n <p class=\"rtsee-ise-details-description\">{{ vm.story.getTruncatedDescription(220) || 'No description yet' }}</p>\n @if (vm.story.tags.length) {\n <div class=\"rtsee-ise-chips\">\n @for (tag of vm.story.tags; track tag.id) {\n <span class=\"rtsee-ise-chip\">{{ tag.name }}</span>\n }\n </div>\n }\n </div>\n <i class=\"pi pi-pencil rtsee-ise-details-edit\"></i>\n </button>\n\n @if (vm.detailsExpanded && vm.detailsForm) {\n <div class=\"rtsee-ise-expanded rtsee-form-container\">\n @if (vm.detailsError) {\n <div class=\"rtsee-ise-error\">{{ vm.detailsError }}</div>\n }\n <rtsee-form [form]=\"vm.detailsForm\" (formSubmit)=\"submitDetails()\">\n <div class=\"rtsee-ise-actions\">\n <p-button type=\"submit\" [label]=\"vm.isNewStory ? 'Create story' : 'Save'\"\n [loading]=\"vm.detailsSaveInProgress\"\n [disabled]=\"vm.detailsSaveInProgress\" />\n <p-button label=\"Cancel\" severity=\"secondary\"\n (click)=\"vm.collapseDetails()\"\n [disabled]=\"vm.detailsSaveInProgress\" />\n </div>\n </rtsee-form>\n </div>\n }\n </div>\n }\n </section>\n\n <!-- 2-4. Characters, artifacts, locations -->\n <rtsee-story-elements-section [editor]=\"vm.charactersEditor\"\n title=\"Characters\"\n icon=\"pi pi-user\"\n [illustrator]=\"illustrator\"\n [collapsed]=\"vm.isCollapsed(sections.characters)\"\n (toggled)=\"vm.toggleSection(sections.characters)\" />\n\n <rtsee-story-elements-section [editor]=\"vm.artifactsEditor\"\n title=\"Artifacts\"\n icon=\"pi pi-star\"\n [illustrator]=\"illustrator\"\n [collapsed]=\"vm.isCollapsed(sections.artifacts)\"\n (toggled)=\"vm.toggleSection(sections.artifacts)\" />\n\n <rtsee-story-elements-section [editor]=\"vm.locationsEditor\"\n title=\"Locations\"\n icon=\"pi pi-map-marker\"\n [illustrator]=\"illustrator\"\n [collapsed]=\"vm.isCollapsed(sections.locations)\"\n (toggled)=\"vm.toggleSection(sections.locations)\" />\n\n <!-- 5. Slides -->\n <section class=\"rtsee-ise-section\" [ngClass]=\"{ 'rtsee-ise-section--collapsed': vm.isCollapsed(sections.slides) }\">\n <header class=\"rtsee-ise-section-header\">\n <button type=\"button\" class=\"rtsee-ise-section-toggle\" id=\"rtsee-ise-toggle-slides\"\n [attr.aria-expanded]=\"!vm.isCollapsed(sections.slides)\"\n (click)=\"vm.toggleSection(sections.slides)\">\n <i class=\"rtsee-ise-section-icon pi pi-images\"></i>\n <h3 class=\"rtsee-ise-section-title\">Slides</h3>\n <span class=\"rtsee-ise-section-count\">{{ vm.slides.length }}</span>\n <i class=\"pi pi-chevron-down rtsee-ise-chevron\"></i>\n </button>\n </header>\n\n @if (!vm.isCollapsed(sections.slides)) {\n <div class=\"rtsee-ise-section-body\">\n @if (vm.isNewStory) {\n <p class=\"rtsee-ise-hint\">Save the story details first to add slides.</p>\n } @else {\n <div class=\"rtsee-ise-slides-strip\">\n @for (slide of vm.slides; track trackSlide($index, slide)) {\n <div class=\"rtsee-ise-slide-thumb-wrapper\" style=\"position: relative; display: inline-flex;\">\n <button type=\"button\" class=\"rtsee-ise-slide-thumb\"\n [id]=\"'rtsee-ise-slide-' + slide.id\"\n [ngClass]=\"{ 'rtsee-ise-thumb--active': vm.isSlideExpanded(slide) }\"\n [attr.aria-label]=\"'Slide ' + slide.slideNumber\"\n (click)=\"vm.expandSlide(slide)\">\n @if (slide.imageUrl) {\n <img [src]=\"slide.imageUrl\" [alt]=\"slide.name\" loading=\"lazy\" />\n } @else {\n <i class=\"pi pi-image\"></i>\n }\n <span class=\"rtsee-ise-slide-number\">{{ slide.slideNumber }}</span>\n </button>\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator rtsee-ise-btn-add-context\"\n style=\"position: absolute; top: 4px; left: 4px;\"\n title=\"Add Slide {{ slide.slideNumber }} context (characters, locations, artifacts) to Illustrator\"\n (click)=\"addSlideEntitiesToContext($event, slide)\">\n <i class=\"pi pi-plus\"></i>\n </button>\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator\"\n style=\"position: absolute; top: 4px; right: 4px;\"\n title=\"Add Slide {{ slide.slideNumber }} to Illustrator context\"\n (click)=\"addSlideToContext($event, slide)\">\n <i class=\"pi pi-palette\"></i>\n <span>+🎨</span>\n </button>\n @if (illustrator.reviewingGeneratedImage && illustrator.currentGeneratedImageUrl) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-quick-apply\"\n style=\"position: absolute; bottom: 4px; right: 4px;\"\n [disabled]=\"isSlideUpdating(slide.id)\"\n [title]=\"'Apply reviewed image to Slide ' + slide.slideNumber\"\n (click)=\"applyReviewedImageToSlide($event, slide)\">\n @if (isSlideUpdating(slide.id)) {\n <i class=\"pi pi-spin pi-spinner\"></i>\n } @else {\n <i class=\"pi pi-plus\"></i>\n }\n </button>\n }\n </div>\n }\n <button type=\"button\" class=\"rtsee-ise-slide-thumb rtsee-ise-slide-thumb--add\"\n id=\"rtsee-ise-add-slide\"\n [disabled]=\"vm.slidesLoadInProgress\"\n (click)=\"vm.expandNewSlide()\">\n <i class=\"pi pi-plus\"></i>\n </button>\n </div>\n\n @if (vm.activeSlide) {\n <div class=\"rtsee-ise-expanded\">\n <rtsee-manage-slide [manageSlide]=\"vm.activeSlide\" />\n </div>\n }\n }\n </div>\n }\n </section>\n\n <!-- 6. Author -->\n <section class=\"rtsee-ise-section\" [ngClass]=\"{ 'rtsee-ise-section--collapsed': vm.isCollapsed(sections.author) }\">\n <header class=\"rtsee-ise-section-header\">\n <button type=\"button\" class=\"rtsee-ise-section-toggle\" id=\"rtsee-ise-toggle-author\"\n [attr.aria-expanded]=\"!vm.isCollapsed(sections.author)\"\n (click)=\"vm.toggleSection(sections.author)\">\n <i class=\"rtsee-ise-section-icon pi pi-pen-to-square\"></i>\n <h3 class=\"rtsee-ise-section-title\">Author</h3>\n <i class=\"pi pi-chevron-down rtsee-ise-chevron\"></i>\n </button>\n </header>\n\n @if (!vm.isCollapsed(sections.author)) {\n <div class=\"rtsee-ise-section-body\">\n <button type=\"button\" class=\"rtsee-ise-author-card\" id=\"rtsee-ise-author-card\"\n [ngClass]=\"{ 'rtsee-ise-thumb--active': vm.authorExpanded }\"\n (click)=\"vm.toggleAuthor()\">\n <div class=\"rtsee-ise-avatar\">\n @if (vm.author?.imageUrl) {\n <img [src]=\"vm.author?.imageUrl\" [alt]=\"vm.author?.name\" />\n } @else {\n <i class=\"pi pi-user\"></i>\n }\n </div>\n <div class=\"rtsee-ise-author-body\">\n <span class=\"rtsee-ise-thumb-name\">{{ vm.author?.name || 'No author assigned' }}</span>\n <span class=\"rtsee-ise-thumb-description\">{{ vm.author?.description || 'Click to pick or create an author' }}</span>\n </div>\n @if (vm.author) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator\"\n title=\"Add Author to Illustrator context\"\n (click)=\"addAuthorToContext($event)\">\n <i class=\"pi pi-palette\"></i>\n <span>+🎨</span>\n </button>\n }\n <i class=\"pi pi-pencil rtsee-ise-details-edit\"></i>\n </button>\n\n @if (vm.authorExpanded) {\n <div class=\"rtsee-ise-expanded rtsee-form-container\">\n @if (vm.authorError) {\n <div class=\"rtsee-ise-error\">{{ vm.authorError }}</div>\n }\n\n @if (vm.newAuthor && vm.newAuthorForm) {\n <h4 class=\"rtsee-ise-subheading\">New author</h4>\n <rtsee-form [form]=\"vm.newAuthorForm\" (formSubmit)=\"submitNewAuthor()\">\n <div class=\"rtsee-ise-actions\">\n <p-button type=\"submit\" label=\"Create & assign\"\n [loading]=\"vm.authorSaveInProgress\"\n [disabled]=\"vm.authorSaveInProgress\" />\n <p-button label=\"Back\" severity=\"secondary\"\n (click)=\"vm.cancelNewAuthor()\"\n [disabled]=\"vm.authorSaveInProgress\" />\n </div>\n </rtsee-form>\n } @else if (vm.authorForm) {\n <rtsee-form [form]=\"vm.authorForm\" (formSubmit)=\"submitAuthor()\">\n <div class=\"rtsee-ise-actions\">\n <p-button type=\"submit\" label=\"Assign\"\n [loading]=\"vm.authorSaveInProgress\"\n [disabled]=\"vm.authorSaveInProgress\" />\n <p-button label=\"New author\" icon=\"pi pi-plus\" severity=\"secondary\"\n (click)=\"vm.startNewAuthor()\"\n [disabled]=\"vm.authorSaveInProgress\" />\n @if (vm.author) {\n <span class=\"rtsee-ise-actions-spacer\"></span>\n <p-button label=\"Clear\" icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\"\n (click)=\"vm.assignAuthor(null)\"\n [disabled]=\"vm.authorSaveInProgress\" />\n }\n </div>\n </rtsee-form>\n }\n </div>\n }\n </div>\n }\n </section>\n\n <!-- 7. NanoBanana Illustrator Overlay -->\n <rtsee-illustrator [illustrator]=\"illustrator\" />\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeManageStories } from '@rtsee/presentation';\nimport { ManageStoryComponent } from '../manage-story/manage-story.component';\nimport { InteractiveStoryEditorComponent } from '../../interactive-story-editor/interactive-story-editor.component';\nimport { Button } from 'primeng/button';\nimport { OrderList } from 'primeng/orderlist';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'rtsee-manage-stories',\n imports: [ManageStoryComponent, InteractiveStoryEditorComponent, Button, OrderList, NgClass],\n templateUrl: './manage-stories.component.html',\n})\nexport class ManageStoriesComponent implements OnInit {\n @Input() manageStories!: RTSeeManageStories;\n\n ngOnInit(): void {\n this.manageStories.init();\n }\n}\n","<div class=\"rtsee-manage-stories\">\n <div class=\"rtsee-manage-stories-header\">\n @if (!manageStories.selectedStory && !manageStories.interactiveStoryEditor) {\n <p-button (click)=\"manageStories.selectNewStory()\"\n label=\"Create A New Story\"\n ></p-button>\n }\n </div>\n @if (manageStories.selectedStory) {\n <div class=\"rtsee-manage-story-container\">\n <rtsee-manage-story [manageStory]=\"manageStories.selectedStory\"\n ></rtsee-manage-story>\n </div>\n }\n @if (manageStories.interactiveStoryEditor) {\n <div class=\"rtsee-manage-story-container\">\n <div style=\"margin-bottom: 1rem;\">\n <p-button icon=\"pi pi-arrow-left\" label=\"Back to Stories\" (click)=\"manageStories.interactiveStoryEditor = null\" [text]=\"true\"></p-button>\n </div>\n <rtsee-interactive-story-editor [vm]=\"manageStories.interactiveStoryEditor\"></rtsee-interactive-story-editor>\n </div>\n }\n @if (!manageStories.selectedStory && !manageStories.interactiveStoryEditor) {\n <div class=\"rtsee-manage-stories-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageStories.stories\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n [scrollHeight]=\"'40rem'\"\n class=\"rtsee-ordered-list-inner\"\n (onReorder)=\"manageStories.onReorder()\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <div class=\"rtsee-presentation-manage-stories-list-item rtsee-ordered-list-item\">\n <img\n [src]=\"option.imageUrl\"\n [alt]=\"'slide_image'\"\n [style.width]=\"'60px'\"\n class=\"rtsee-presentation-manage-stories-list-item-image rtsee-ordered-list-item-image\"\n />\n <div class=\"rtsee-presentation-manage-stories-list-item-info rtsee-ordered-list-item-info\">\n <span [ngClass]=\"{\n 'text-sm': true,\n 'text-surface-500': !selected,\n 'dark:text-surface-400': !selected,\n 'text-inherit': selected,\n }\"\n >{{ option.name }}</span>\n <div class=\"rtsee-ordered-list-item-info-buttons\">\n <p-button label=\"Edit\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectStory(option.id)\"\n ></p-button>\n <p-button label=\"iEdit\"\n [severity]=\"'info'\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectInteractiveStory(option.id)\"\n ></p-button>\n <p-button label=\"Delete\"\n [severity]=\"'warn'\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectStory(option.id)\"\n ></p-button>\n <p-button label=\"Clone\"\n [severity]=\"'secondary'\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.cloneStory(option.id)\"\n ></p-button>\n </div>\n </div>\n </div>\n </ng-template>\n </p-orderList>\n </div>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { Textarea } from 'primeng/textarea';\nimport { TypedReactiveForm } from '../../../rtsee-auth/types/auth-form.type';\nimport { RTSeeManageStoryCategory } from '@rtsee/presentation';\n\nexport type RTSeeCategoryForm = {\n name: string | null;\n description: string | null;\n};\n\n@Component({\n selector: 'rtsee-manage-category',\n imports: [\n Button,\n FloatLabel,\n FormsModule,\n InputGroup,\n InputText,\n Message,\n Textarea,\n ReactiveFormsModule,\n ],\n templateUrl: './manage-category.component.html',\n})\nexport class ManageCategoryComponent implements OnInit {\n categoryForm: FormGroup;\n\n @Input() manageCategory!: RTSeeManageStoryCategory;\n\n constructor(private formBuilder: FormBuilder) {\n this.categoryForm = this.formBuilder.group<\n TypedReactiveForm<RTSeeCategoryForm>\n >({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n });\n }\n\n ngOnInit() {\n this.nameField.setValue(this.manageCategory.category.name);\n this.descriptionField.setValue(\n this.manageCategory.category.description || '',\n );\n }\n\n submit() {\n if (this.categoryForm.valid) {\n void this.manageCategory.save({\n name: this.nameField.value,\n description: this.descriptionField.value,\n });\n } else {\n this.categoryForm.markAsTouched(); // this does not work after switching to \"nonNullable\" form fields\n }\n }\n\n get nameField(): FormControl<string> {\n return this.categoryForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.categoryForm.get('description') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-manage-story-category\">\n <div class=\"rtsee-manage-category-info rtsee-form-container\">\n <form class=\"rtsee-story-form rtsee-form\"\n [formGroup]=\"categoryForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"sign-up-email\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageCategory.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageCategory.cancel()\"\n [disabled]=\"manageCategory.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeManageStoryCategories } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { ManageCategoryComponent } from '../manage-category/manage-category.component';\n\n@Component({\n selector: 'rtsee-manage-categories',\n imports: [Button, ManageCategoryComponent],\n templateUrl: './manage-categories.component.html',\n})\nexport class ManageCategoriesComponent implements OnInit {\n @Input() manageCategories!: RTSeeManageStoryCategories;\n\n ngOnInit(): void {\n this.manageCategories.init();\n }\n}\n","<div class=\"rtsee-manage-stories-categories\">\n <div class=\"rtsee-manage-stories-categories-header\">\n @if (!manageCategories.selectedCategory) {\n <p-button (click)=\"manageCategories.selectNewCategory()\"\n label=\"Create A New Category\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-categories-body\">\n @if (manageCategories.selectedCategory) {\n <rtsee-manage-category [manageCategory]=\"manageCategories.selectedCategory\"\n ></rtsee-manage-category>\n }\n @if (!manageCategories.selectedCategory) {\n @for (category of manageCategories.categories; track category.id) {\n <p (click)=\"manageCategories.selectCategory(category.id)\">{{category.name}}</p>\n }\n }\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeManageStoryLabel } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { Textarea } from 'primeng/textarea';\nimport { TypedReactiveForm } from '../../../rtsee-auth/types/auth-form.type';\nimport { ColorPicker } from 'primeng/colorpicker';\n\nexport type RTSeeLabelForm = {\n name: string | null;\n description: string | null;\n symbol: string | null;\n};\n\n@Component({\n selector: 'rtsee-manage-label',\n imports: [\n Button,\n FloatLabel,\n FormsModule,\n InputGroup,\n InputText,\n Message,\n Textarea,\n ReactiveFormsModule,\n ColorPicker,\n ],\n templateUrl: './manage-label.component.html',\n})\nexport class ManageLabelComponent implements OnInit {\n labelForm: FormGroup;\n\n @Input() manageLabel!: RTSeeManageStoryLabel;\n constructor(private formBuilder: FormBuilder) {\n this.labelForm = this.formBuilder.group<TypedReactiveForm<RTSeeLabelForm>>({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n symbol: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(1),\n Validators.maxLength(244),\n ],\n }),\n });\n }\n\n ngOnInit() {\n this.nameField.setValue(this.manageLabel.label.name);\n this.descriptionField.setValue(this.manageLabel.label.description || '');\n }\n\n submit() {\n if (this.labelForm.valid) {\n void this.manageLabel.save({\n name: this.nameField.value,\n description: this.descriptionField.value,\n color: '',\n symbol: this.symbolField.value,\n });\n } else {\n this.labelForm.markAsTouched(); // this does not work after switching to \"nonNullable\" form fields\n }\n }\n\n get nameField(): FormControl<string> {\n return this.labelForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.labelForm.get('description') as FormControl<string>;\n }\n\n get symbolField(): FormControl<string> {\n return this.labelForm.get('symbol') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-manage-story-label\">\n <div class=\"rtsee-manage-story-label-info rtsee-form-container\">\n <form class=\"rtsee-story-label-form rtsee-form\"\n [formGroup]=\"labelForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-label-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-label-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-label-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-symbol-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"symbolField\"\n [class.p-invalid]=\"symbolField.invalid && symbolField.touched\"\n />\n <label for=\"rtsee-story-label-symbol-field\">Symbol</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (symbolField.hasError('required') && symbolField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Symbol is required, pick a smile, dummy</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-colorPicker [(ngModel)]=\"manageLabel.label.color\"/>\n </div>\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageLabel.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageLabel.cancel()\"\n [disabled]=\"manageLabel.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { RTSeeManageStoryLabels } from '@rtsee/presentation';\nimport { ManageLabelComponent } from '../manage-label/manage-label.component';\n\n@Component({\n selector: 'rtsee-manage-labels',\n imports: [Button, ManageLabelComponent],\n templateUrl: './manage-labels.component.html',\n})\nexport class ManageLabelsComponent implements OnInit {\n @Input() manageLabels!: RTSeeManageStoryLabels;\n\n ngOnInit(): void {\n this.manageLabels.init();\n }\n}\n","<div class=\"rtsee-manage-stories-labels\">\n <div class=\"rtsee-manage-stories-labels-header\">\n @if (!manageLabels.selectedLabel) {\n <p-button (click)=\"manageLabels.selectNewLabel()\"\n label=\"Create A New Label\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-labels-body\">\n @if (manageLabels.selectedLabel) {\n <rtsee-manage-label [manageLabel]=\"manageLabels.selectedLabel\"\n ></rtsee-manage-label>\n }\n @if (!manageLabels.selectedLabel) {\n @for (label of manageLabels.labels; track label.id) {\n <p (click)=\"manageLabels.selectLabel(label.id)\">{{label.name}}</p>\n }\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { TypedReactiveForm } from '../../../rtsee-auth/types/auth-form.type';\nimport { RTSeeManageStoryTopic } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { ColorPicker } from 'primeng/colorpicker';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { Textarea } from 'primeng/textarea';\nimport { AutocompleteComponent } from '../../../../common/components/autocomplete/autocomplete.component';\nimport { OrderList } from 'primeng/orderlist';\n\nexport type RTSeeTopicForm = {\n name: string | null;\n key: string | null;\n description: string | null;\n};\n\n@Component({\n selector: 'rtsee-manage-topic',\n imports: [\n Button,\n FloatLabel,\n InputGroup,\n InputText,\n Message,\n ReactiveFormsModule,\n Textarea,\n AutocompleteComponent,\n OrderList,\n ],\n templateUrl: './manage-topic.component.html',\n})\nexport class ManageTopicComponent {\n topicForm: FormGroup;\n\n @Input() manageTopic!: RTSeeManageStoryTopic;\n constructor(private formBuilder: FormBuilder) {\n this.topicForm = this.formBuilder.group<TypedReactiveForm<RTSeeTopicForm>>({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n key: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(1),\n Validators.maxLength(244),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n });\n }\n\n ngOnInit() {\n this.nameField.setValue(this.manageTopic.topic.name);\n this.descriptionField.setValue(this.manageTopic.topic.description || '');\n this.keyField.setValue(this.manageTopic.topic.key || '');\n }\n\n submit() {\n if (this.topicForm.valid) {\n void this.manageTopic.save({\n name: this.nameField.value,\n description: this.descriptionField.value,\n key: this.keyField.value,\n });\n } else {\n this.topicForm.markAsTouched(); // this does not work after switching to \"nonNullable\" form fields\n }\n }\n\n get nameField(): FormControl<string> {\n return this.topicForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.topicForm.get('description') as FormControl<string>;\n }\n\n get keyField(): FormControl<string> {\n return this.topicForm.get('key') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-manage-story-topic\">\n <div class=\"rtsee-manage-story-topic-info rtsee-form-container\">\n <form class=\"rtsee-story-topic-form rtsee-form\"\n [formGroup]=\"topicForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-topic-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-topic-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-topic-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-topic-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-topic-key-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"keyField\"\n [class.p-invalid]=\"keyField.invalid && keyField.touched\"\n />\n <label for=\"rtsee-story-topic-key-field\">Key</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (keyField.hasError('required') && keyField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Key is required, pick a smile, dummy</p-message>\n }\n </div>\n <rtsee-autocomplete [config]=\"manageTopic.categoriesMultiselect\"></rtsee-autocomplete>\n <div class=\"rtsee-manage-story-topic-categories-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageTopic.topic.categories\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n scrollHeight=\"40rem\"\n controlsPosition=\"right\"\n (onReorder)=\"manageTopic.onReorder($event)\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <p>{{option.name}}</p>\n <p-button label=\"Delete\" (click)=\"manageTopic.removeCategory(option.id)\"></p-button>\n </ng-template>\n </p-orderList>\n </div>\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageTopic.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageTopic.cancel()\"\n [disabled]=\"manageTopic.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { ManageTopicComponent } from '../manage-topic/manage-topic.component';\nimport { RTSeeManageStoryTopics } from '@rtsee/presentation';\n\n@Component({\n selector: 'rtsee-manage-topics',\n imports: [Button, ManageTopicComponent],\n templateUrl: './manage-topics.component.html',\n})\nexport class ManageTopicsComponent implements OnInit {\n @Input() manageTopics!: RTSeeManageStoryTopics;\n\n ngOnInit(): void {\n this.manageTopics.init();\n }\n}\n","<div class=\"rtsee-manage-stories-topics\">\n <div class=\"rtsee-manage-stories-topics-header\">\n @if (!manageTopics.selectedTopic) {\n <p-button (click)=\"manageTopics.selectNewTopic()\"\n label=\"Create A New Topic\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-topics-body\">\n @if (manageTopics.selectedTopic) {\n <rtsee-manage-topic [manageTopic]=\"manageTopics.selectedTopic\"\n ></rtsee-manage-topic>\n }\n @if (!manageTopics.selectedTopic) {\n @for (topic of manageTopics.topics; track topic.id) {\n <p (click)=\"manageTopics.selectTopic(topic.id)\">{{topic.name}}</p>\n }\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { ManageStoriesComponent } from '../manage-stories/manage-stories.component';\nimport { Tab, TabList, TabPanel, TabPanels, Tabs } from 'primeng/tabs';\nimport { RTSeePresentationDashboard } from '@rtsee/presentation';\nimport { ManageCategoriesComponent } from '../manage-categories/manage-categories.component';\nimport { Button } from 'primeng/button';\nimport { Chip } from 'primeng/chip';\nimport { ManageLabelsComponent } from '../manage-labels/manage-labels.component';\nimport { ManageTopicsComponent } from '../manage-topics/manage-topics.component';\n\n@Component({\n selector: 'rtsee-presentations-dashboard',\n imports: [\n ManageStoriesComponent,\n Tabs,\n TabList,\n Tab,\n TabPanels,\n TabPanel,\n ManageCategoriesComponent,\n Button,\n Chip,\n ManageLabelsComponent,\n ManageTopicsComponent,\n ],\n templateUrl: './presentations-dashboard.component.html',\n})\nexport class PresentationsDashboardComponent {\n @Input() dashboard!: RTSeePresentationDashboard;\n}\n","<div class=\"rtsee-presentations-dashboard\">\n <div class=\"rtsee-presentations-dashboard-header\">\n <p-chip label=\"Presentation Dashboard\" />\n <p-button label=\"Close\"\n (click)=\"dashboard.onCloseDashboardClicked()\"\n class=\"rtsee-presentations-dashboard-close-btn\"\n ></p-button>\n </div>\n\n <div class=\"manage-stories-container\">\n <p-tabs lazy value=\"stories\">\n <p-tablist>\n <p-tab value=\"stories\">Stories</p-tab>\n <p-tab value=\"categories\">Categories</p-tab>\n <p-tab value=\"labels\">Labels</p-tab>\n <p-tab value=\"topics\">Topics</p-tab>\n </p-tablist>\n <p-tabpanels>\n <p-tabpanel value=\"stories\">\n <ng-template #content>\n <rtsee-manage-stories [manageStories]=\"dashboard.manageStories\"></rtsee-manage-stories>\n </ng-template>\n </p-tabpanel>\n <p-tabpanel value=\"categories\">\n <ng-template #content>\n <rtsee-manage-categories [manageCategories]=\"dashboard.manageCategories\"></rtsee-manage-categories>\n </ng-template>\n </p-tabpanel>\n <p-tabpanel value=\"labels\">\n <ng-template #content>\n <rtsee-manage-labels [manageLabels]=\"dashboard.manageLabels\"></rtsee-manage-labels>\n </ng-template>\n </p-tabpanel>\n <p-tabpanel value=\"topics\">\n <ng-template #content>\n <rtsee-manage-topics [manageTopics]=\"dashboard.manageTopics\"></rtsee-manage-topics>\n </ng-template>\n </p-tabpanel>\n </p-tabpanels>\n </p-tabs>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Slider } from 'primeng/slider';\nimport { Fieldset } from 'primeng/fieldset';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from 'primeng/button';\nimport {\n RTSeePresentationSettings,\n RTSeePresentation,\n} from '@rtsee/presentation';\nimport { Chip } from 'primeng/chip';\nimport { Message } from 'primeng/message';\nimport { Tag } from 'primeng/tag';\nimport { Listbox } from 'primeng/listbox';\nimport { COMMON_CONSTANTS } from '../../constans/common.const';\nimport { JoinCallComponent } from '../join-call/join-call.component';\n\n@Component({\n selector: 'rtsee-presentation-settings',\n imports: [\n Slider,\n Fieldset,\n FormsModule,\n Button,\n Chip,\n Message,\n Tag,\n Listbox,\n JoinCallComponent,\n ],\n templateUrl: './presentation-settings.component.html',\n})\nexport class PresentationSettingsComponent {\n @Input() public settings!: RTSeePresentationSettings;\n @Input() public presentation!: RTSeePresentation;\n protected readonly COMMON_CONSTANTS = COMMON_CONSTANTS;\n protected readonly window = window;\n}\n","<div class=\"rtsee-presentation-settings\">\n <div class=\"rtsee-presentation-settings-header\">\n <p-chip label=\"Settings\" />\n <p-button label=\"Close\"\n (click)=\"settings.collapse()\"\n class=\"rtsee-presentations-dashboard-close-btn\"\n ></p-button>\n </div>\n\n <div class=\"rtsee-presentation-rooms\">\n <p-fieldset legend=\"Rooms\">\n <p-listbox [options]=\"presentation.rooms\"\n [(ngModel)]=\"presentation.selectedRoom\"\n (onChange)=\"presentation.setActiveRoom()\"\n class=\"rtsee-presentation-settings-rooms-list\"\n >\n <ng-template #item let-room>\n <div class=\"rtsee-presentation-settings-rooms-list-item\">\n\n <img [src]=\"room.imageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\"\n class=\"rtsee-presentation-settings-rooms-list-item-image\" />\n <div>{{ room.name }}</div>\n </div>\n </ng-template>\n </p-listbox>\n @if (presentation.selectedRoom) {\n <rtsee-join-call [room]=\"presentation.selectedRoom\"\n [presentation]=\"presentation\"\n ></rtsee-join-call>\n }\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-sound-settings\">\n <p-fieldset legend=\"Volume\" class=\"rtsee-presentation-sound-settings-fieldset\">\n <div class=\"rtsee-presentation-sound-settings-inner\">\n <div class=\"rtsee-presentation-sound-settings-inner-left\">\n <p-slider [(ngModel)]=\"settings.volume\"\n (onChange)=\"settings.setVolume(settings.volume)\"\n />\n </div>\n <div class=\"rtsee-presentation-sound-settings-inner-right\">\n <p-tag severity=\"info\"\n class=\"rtsee-presentation-sound-value-label\"\n [icon]=\"settings.volume ? 'pi pi-volume-up' : 'pi pi-volume-off'\"\n [value]=\"settings.volume.toString()\"\n [rounded]=\"true\" />\n </div>\n </div>\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-font-size-settings\">\n <p-fieldset legend=\"Font Size\">\n <div class=\"rtsee-presentation-font-size-range\">\n <p-slider [(ngModel)]=\"settings.fontSizeOption\"\n (onChange)=\"settings.setFontSize(settings.fontSizeOption)\"\n [min]=\"1\"\n [max]=\"10\"\n />\n </div>\n <p-message severity=\"secondary\" class=\"rtsee-presentation-font-size-example\">\n <span [style.font-size]=\"settings.fontSize + 'rem'\">A long time ago in a galaxy far, far away...</span>\n </p-message>\n </p-fieldset>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { ChatComponent } from '../../rtsee-messenger/chat/chat.component';\nimport { IRTSeeChat } from '@rtsee/common';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RTSeeEntity } from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-entity-comments',\n imports: [ChatComponent],\n templateUrl: './rtsee-entity-comments.component.html',\n})\nexport class RtseeEntityCommentsComponent {\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: IRTSeeChat;\n @Input() entity!: RTSeeEntity;\n}\n","<div class=\"rtsee-entity-comments\">\n @if (messenger && chat) {\n <rtsee-chat [messenger]=\"messenger\"\n [chatData]=\"chat\"\n [entity]=\"entity\"\n ></rtsee-chat>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeEntity } from '@rtsee/utilities-ui';\nimport { Chip } from 'primeng/chip';\n\n@Component({\n selector: 'rtsee-entity-tags',\n imports: [Chip],\n templateUrl: './rtsee-entity-tags.component.html',\n})\nexport class RtseeEntityTagsComponent {\n @Input() entity!: RTSeeEntity;\n}\n","<div class=\"rtsee-entity-tags\">\n @if (entity && entity.tags?.length) {\n <div class=\"rtsee-entity-tags-list\">\n @for (tag of entity.tags; track tag.id) {\n <p-chip class=\"rtsee-entity-tag\">\n <span class=\"rtsee-entity-tag-right\"\n >{{tag.name}}</span>\n </p-chip>\n }\n </div>\n }\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { Textarea } from 'primeng/textarea';\nimport { RatingComponent } from '../../../common/components/rating/rating.component';\nimport { Message } from 'primeng/message';\nimport { IRatingConfigWithRate } from '@rtsee/common';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'rtsee-rate-input',\n templateUrl: './rate-input.component.html',\n imports: [ReactiveFormsModule, Textarea, RatingComponent, Message],\n standalone: true,\n})\nexport class RateInputComponent implements OnInit, OnDestroy {\n sendRateForm: FormGroup = new FormGroup({\n comment: new FormControl(''),\n });\n showMissingRateError: boolean = false;\n\n private _config!: IRatingConfigWithRate;\n private commentSubscription?: Subscription;\n\n @Input()\n set config(value: IRatingConfigWithRate) {\n this._config = value;\n this.updateCommentControl();\n }\n\n get config(): IRatingConfigWithRate {\n return this._config;\n }\n\n ngOnInit(): void {\n this.updateCommentControl();\n }\n\n ngOnDestroy(): void {\n this.commentSubscription?.unsubscribe();\n }\n\n private updateCommentControl(): void {\n this.commentSubscription?.unsubscribe();\n if (this._config && this._config.rate) {\n this.sendRateForm\n .get('comment')\n ?.setValue(this._config.rate.text || '', { emitEvent: false });\n\n this.commentSubscription = this.sendRateForm\n .get('comment')\n ?.valueChanges.subscribe((value) => {\n if (this._config.rate) {\n this._config.rate.text = value || '';\n }\n });\n }\n }\n}\n","<div class=\"rtsee-rate-input\">\n <div class=\"rtsee-rate-input-header\">\n <h3 class=\"rtsee-rate-input-name\">{{ config.name }}</h3>\n @if (config.description) {\n <p class=\"rtsee-rate-input-description\">{{ config.description }}</p>\n }\n </div>\n <div class=\"rtsee-rate-form-container\">\n <form [formGroup]=\"sendRateForm\" class=\"rtsee-rate-form\">\n <textarea\n [invalid]=\"false\"\n [autoResize]=\"true\"\n formControlName=\"comment\"\n pTextarea\n placeholder=\"Your comment here...\"\n class=\"rtsee-rate-comment-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n <div class=\"rtsee-rate-select-container\">\n <rtsee-rating [config]=\"config\"></rtsee-rating>\n @if (!config.rate?.value && showMissingRateError) {\n <p-message severity=\"error\">Please add your rate!</p-message>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { Button } from 'primeng/button';\nimport { IRTSeeRatesGroup } from '@rtsee/common';\nimport { RTSeeRater } from '@rtsee/utilities-ui';\nimport { RatingComponent } from '../../../common/components/rating/rating.component';\n\n@Component({\n selector: 'rtsee-rate-item',\n imports: [RatingComponent, DatePipe, Button],\n templateUrl: './rate-item.component.html',\n})\nexport class RateItemComponent {\n @Input() group!: IRTSeeRatesGroup;\n @Input() rater!: RTSeeRater;\n @Input() showActions: boolean = false;\n\n @Output() edit = new EventEmitter<void>();\n @Output() delete = new EventEmitter<void>();\n\n onEdit(event: Event): void {\n event.stopPropagation();\n this.edit.emit();\n }\n\n onDelete(event: Event): void {\n event.stopPropagation();\n this.delete.emit();\n }\n\n getRatingConfigName(configId: string): string {\n if (!this.rater) {\n return '';\n }\n const config = this.rater.ratingConfigurations.find(\n (c) => c.id === configId,\n );\n return config ? config.name : '';\n }\n}\n","<div class=\"rtsee-rates-group-item\">\n <div class=\"rtsee-rates-group-header\">\n <div class=\"rtsee-rates-group-user-info\">\n @if (group.peer?.imageUrl) {\n <img\n class=\"rtsee-rates-group-avatar\"\n [src]=\"group.peer.imageUrl\"\n alt=\"User avatar\"\n />\n } @else {\n <div class=\"rtsee-rates-group-avatar-fallback\">\n {{ (group.peer?.name || \"?\").substring(0, 1) }}\n </div>\n }\n <span class=\"rtsee-rates-group-peer-name\">{{\n group.peer?.name || group.peerId\n }}</span>\n </div>\n\n <div class=\"rtsee-rates-group-right-header\">\n <span class=\"rtsee-rates-group-date\">{{\n group.createdAt | date: \"short\"\n }}</span>\n\n @if (showActions) {\n <div class=\"rtsee-rates-group-actions\">\n <p-button\n (click)=\"onEdit($event)\"\n [severity]=\"'secondary'\"\n [text]=\"true\"\n class=\"rtsee-rates-group-btn-edit\"\n >\n <span class=\"pi pi-pencil\"></span>\n </p-button>\n <p-button\n (click)=\"onDelete($event)\"\n [severity]=\"'danger'\"\n [text]=\"true\"\n class=\"rtsee-rates-group-btn-delete\"\n >\n <span class=\"pi pi-trash\"></span>\n </p-button>\n </div>\n }\n </div>\n </div>\n <div class=\"rtsee-rates-group-body\">\n @for (rate of group.rates; track rate.id) {\n <div class=\"rtsee-rates-group-rate-item-container\">\n <div class=\"rtsee-rates-group-rate-item\">\n <span class=\"rtsee-rates-group-rate-config-name\">{{\n getRatingConfigName(rate.configurationId)\n }}</span>\n <rtsee-rating [rate]=\"rate\"></rtsee-rating>\n </div>\n @if (rate.text) {\n <p class=\"rtsee-rates-group-rate-comment\">\"{{ rate.text }}\"</p>\n }\n </div>\n }\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { IRTSeeRate } from '@rtsee/common';\nimport { RTSeeEntity, RTSeeRater } from '@rtsee/utilities-ui';\nimport { RateInputComponent } from '../rate-input/rate-input.component';\nimport { RateItemComponent } from '../rate-item/rate-item.component';\nimport {NgClass} from \"@angular/common\";\nimport {RTSeeTextLabelKeys} from \"@rtsee/core\";\n\n@Component({\n selector: 'rtsee-rater',\n imports: [Button, RateInputComponent, RateItemComponent, NgClass],\n templateUrl: './rater.component.html',\n})\nexport class RaterComponent implements OnInit {\n @Input() entity!: RTSeeEntity;\n @Input() rater!: RTSeeRater;\n\n isEditing: boolean = false;\n\n ngOnInit(): void {\n this.getRatingConfigurations()\n .then(() => {\n console.log('Getting rating configurations...');\n })\n .catch((error) => {\n console.error(error);\n });\n }\n\n async sendRate(): Promise<void> {\n const rates: IRTSeeRate[] = this.rater.configsWithRates\n .map((config) => config.rate)\n .filter((r): r is IRTSeeRate => !!r);\n if (this.rater.userRateGroup) {\n await this.rater.editRateGroup({\n ...this.rater.userRateGroup,\n rates,\n });\n } else {\n await this.rater.createRateGroup({\n entityId: this.rater.entityId,\n peerId: this.rater.peer.clientId,\n rates,\n applicationId: this.rater.applicationId,\n createdAt: new Date(),\n peer: this.rater.peer,\n });\n }\n this.isEditing = false;\n }\n\n async deleteRate(): Promise<void> {\n if (this.rater.userRateGroup) {\n await this.rater.deleteRateGroup(this.rater.userRateGroup.id);\n }\n }\n\n startEdit(): void {\n this.isEditing = true;\n }\n\n private async getRatingConfigurations(): Promise<IRTSeeRate[]> {\n if (!this.rater || !this.entity) {\n console.log('No rater or entity found.');\n return [];\n }\n\n const rates: IRTSeeRate[] = await this.rater.getRates();\n console.log('Rates found.', rates);\n\n return rates;\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rtsee-rater\" [ngClass]=\"{'rtsee-rater-view-mode': rater.userRateGroup && !isEditing}\">\n @if (rater.userRateGroup && !isEditing) {\n <rtsee-rate-item\n [group]=\"rater.userRateGroup\"\n [rater]=\"rater\"\n [showActions]=\"true\"\n (edit)=\"startEdit()\"\n (delete)=\"deleteRate()\"\n ></rtsee-rate-item>\n } @else {\n <div class=\"rtsee-rater-user-header\">\n @if (rater.peer?.imageUrl) {\n <img\n class=\"rtsee-rater-avatar\"\n [src]=\"rater.peer?.imageUrl\"\n alt=\"User avatar\"\n />\n } @else {\n <div class=\"rtsee-rater-avatar-fallback\">\n {{ (rater.peer?.name || \"?\").substring(0, 1) }}\n </div>\n }\n <div class=\"rtsee-rater-user-info\">\n <span class=\"rtsee-rater-user-name\">{{\n rater.peer?.name || \"Anonymous\"\n }}</span>\n <span class=\"rtsee-rater-user-status\">Rating publicly</span>\n </div>\n </div>\n <hr class=\"rtsee-rater-divider\" />\n @for (config of rater.configsWithRates; track config.id) {\n <rtsee-rate-input [config]=\"config\"></rtsee-rate-input>\n }\n <div class=\"rtsee-rater-actions\">\n @if (rater.userRateGroup) {\n <p-button\n (click)=\"sendRate()\"\n [severity]=\"'success'\"\n [label]=\"rater.messenger.labels[RTSeeTextLabelKeys.RATER_UPDATE]\"\n type=\"submit\"\n class=\"rtsee-rater-btn-update rts-action-button\"\n >\n <span class=\"pi pi-check\"></span>\n </p-button>\n <p-button\n (click)=\"deleteRate()\"\n [severity]=\"'danger'\"\n [label]=\"rater.messenger.labels[RTSeeTextLabelKeys.RATER_DELETE]\"\n class=\"rtsee-rater-btn-delete rts-action-button\"\n >\n <span class=\"pi pi-trash\"></span>\n </p-button>\n } @else {\n <p-button\n (click)=\"sendRate()\"\n [severity]=\"'primary'\"\n [label]=\"rater.messenger.labels[RTSeeTextLabelKeys.RATER_SEND]\"\n type=\"submit\"\n class=\"rtsee-rater-btn-send rts-action-button\"\n >\n <span class=\"pi pi-send\"></span>\n </p-button>\n }\n </div>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeEntity, RTSeeRater } from '@rtsee/utilities-ui';\nimport { InfiniteScrollDirective } from 'ngx-infinite-scroll';\nimport { RateItemComponent } from '../rate-item/rate-item.component';\n\n@Component({\n selector: 'rtsee-rates-list',\n imports: [InfiniteScrollDirective, RateItemComponent],\n templateUrl: './rates-list.component.html',\n})\nexport class RatesListComponent implements OnInit {\n @Input() rater!: RTSeeRater;\n @Input() entity!: RTSeeEntity;\n\n ngOnInit(): void {\n if (this.rater) {\n this.rater\n .loadOtherUsersRateGroups(true)\n .then(() => {\n console.log('Other users rate groups loaded.');\n })\n .catch((err) => {\n console.error(err);\n });\n }\n }\n\n onScroll(): void {\n if (this.rater) {\n this.rater\n .loadOtherUsersRateGroups()\n .then(() => {\n console.log('More other users rate groups loaded.');\n })\n .catch((err) => {\n console.error(err);\n });\n }\n }\n}\n","<div\n class=\"rtsee-rates-list\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n>\n @for (group of rater.otherUsersRateGroups; track group.id) {\n <rtsee-rate-item\n [group]=\"group\"\n [rater]=\"rater\"\n [showActions]=\"false\"\n ></rtsee-rate-item>\n }\n @if (rater.loadingRatesGroups) {\n <div class=\"rtsee-rates-list-loading\">Loading more...</div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RaterComponent } from '../rater/rater.component';\nimport { RatesListComponent } from '../rates-list/rates-list.component';\nimport { RTSeeEntity, RTSeeRater } from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-rating-section',\n imports: [RaterComponent, RatesListComponent],\n templateUrl: './rating-section.component.html',\n})\nexport class RatingSectionComponent {\n @Input() rater!: RTSeeRater;\n @Input() entity!: RTSeeEntity;\n}\n","<div class=\"rtsee-rating-section\">\n <rtsee-rater [rater]=\"rater\"\n [entity]=\"entity\"\n ></rtsee-rater>\n <rtsee-rates-list [rater]=\"rater\"\n [entity]=\"entity\"\n ></rtsee-rates-list>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RtseeEntityCommentsComponent } from '../rtsee-entity-comments/rtsee-entity-comments.component';\nimport { RtseeEntityTagsComponent } from '../rtsee-entity-tags/rtsee-entity-tags.component';\nimport { RTSeeEntity, RTSeeRater } from '@rtsee/utilities-ui';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RatingSectionComponent } from '../../rtsee-rates/rating-section/rating-section.component';\n\n@Component({\n selector: 'rtsee-entity-preview',\n imports: [\n RtseeEntityCommentsComponent,\n RtseeEntityTagsComponent,\n RatingSectionComponent,\n ],\n templateUrl: './rtsee-entity-preview.component.html',\n})\nexport class RtseeEntityPreviewComponent implements OnInit {\n rater: RTSeeRater | null = null;\n\n @Input() entity!: RTSeeEntity;\n @Input() messenger!: RTSeeMessenger;\n\n showRating: boolean = true;\n\n ngOnInit() {\n void this.entity.reload();\n this.rater = new RTSeeRater({\n entityId: this.entity.id,\n messenger: this.messenger,\n entityConfigurationId: this.entity.configurationId,\n ...this.entity.getHandlerCommonOptions(),\n });\n }\n}\n","<div class=\"rtsee-entity-preview\">\n <div class=\"rtsee-entity-preview-tags\">\n <rtsee-entity-tags [entity]=\"entity\"></rtsee-entity-tags>\n </div>\n\n @if (showRating && rater) {\n <rtsee-rating-section [entity]=\"entity\"\n [rater]=\"rater\"\n ></rtsee-rating-section>\n } @else if (!showRating && entity.comments && messenger) {\n <div class=\"rtsee-entity-preview-comments\">\n <rtsee-entity-comments [messenger]=\"messenger\"\n [chat]=\"entity.comments\"\n [entity]=\"entity\"\n ></rtsee-entity-comments>\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Chip } from 'primeng/chip';\nimport { Tag } from 'primeng/tag';\nimport { RTSeePresentation, RTSeeStory } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { ChatComponent } from '../../rtsee-messenger/chat/chat.component';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RtseeEntityPreviewComponent } from '../../rtsee-entities/rtsee-entity-preview/rtsee-entity-preview.component';\nimport {RouterLink} from \"@angular/router\";\nimport {RTSeeTextLabelKeys} from \"@rtsee/core\";\n\n@Component({\n selector: 'rtsee-story-details',\n imports: [Chip, Tag, Button, ChatComponent, RtseeEntityPreviewComponent, RouterLink],\n templateUrl: './story-details.component.html',\n})\nexport class StoryDetailsComponent {\n @Input() story!: RTSeeStory;\n @Input() presentation!: RTSeePresentation;\n @Input() messenger?: RTSeeMessenger;\n\n getStarArray(rating: number | null): string[] {\n const stars: string[] = [];\n const val = rating || 0;\n for (let i = 1; i <= 5; i++) {\n if (val >= i) {\n stars.push('full');\n } else if (val + 0.5 >= i) {\n stars.push('half');\n } else {\n stars.push('empty');\n }\n }\n return stars;\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n protected readonly Math = Math;\n}\n","<div class=\"rtsee-story-details\">\n <section\n class=\"rtsee-story-details-cover\"\n [style.background-image]=\"'url(' + story.imageUrl + ')'\"\n >\n <button\n class=\"rtsee-story-details-btn-close\"\n [routerLink]=\"[presentation.homePage]\"\n (click)=\"presentation.closeStoryDetails()\"\n aria-label=\"Close\"\n >\n <span class=\"pi pi-times\"></span>\n </button>\n <div class=\"rtsee-story-details-cover-overlay\"></div>\n <div class=\"rtsee-story-details-cover-content\">\n <div class=\"rtsee-story-details-cover-badges\">\n @if (story.categories?.length) {\n @for (category of story.categories; track category.id) {\n <span class=\"rtsee-story-details-tag-pill\">\n {{ category.name }}\n </span>\n }\n }\n @if (story.tags?.length) {\n @for (tag of story.tags; track tag.id) {\n <span\n class=\"rtsee-story-details-tag-pill rtsee-story-details-tag-pill-label\"\n >\n @if (tag.symbol) {\n <span class=\"symbol\">{{ tag.symbol }}</span>\n }\n {{ tag.name }}\n </span>\n }\n }\n </div>\n\n <h1 class=\"rtsee-story-details-cover-title\">{{ story.name }}</h1>\n\n <div class=\"rtsee-story-details-cover-meta\">\n @if (story.rating !== null) {\n <div class=\"rtsee-story-details-cover-rating\">\n <span class=\"rtsee-story-details-stars\">\n @for (star of getStarArray(story.rating); track $index) {\n <span\n class=\"rtsee-story-details-star\"\n [class.rtsee-story-details-star-full]=\"star === 'full'\"\n [class.rtsee-story-details-star-half]=\"star === 'half'\"\n [class.rtsee-story-details-star-empty]=\"star === 'empty'\"\n >\n @if (star === \"full\") {\n ★\n } @else if (star === \"half\") {\n ★\n } @else {\n ☆\n }\n </span>\n }\n </span>\n <span class=\"rtsee-story-details-rating-number\">{{\n story.rating\n }}</span>\n @if (story.ratesCount !== null) {\n <span class=\"rtsee-story-details-rating-count\">\n <span>(</span>\n <span>{{ presentation.labels[RTSeeTextLabelKeys.FEEDBACKS_LABEL] }}:</span>\n <span> </span>\n <span>{{ story.ratesCount }}</span>\n <span>)</span>\n </span\n >\n }\n </div>\n }\n\n <div class=\"rtsee-story-details-cover-info-chips\">\n @if (story.averageReadTime) {\n <span class=\"rtsee-story-details-info-chip\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n <span>\n <span>{{ Math.ceil(story.averageReadTime / 60) }}</span>\n <span> </span>\n <span>{{ presentation.labels[RTSeeTextLabelKeys.MINUTE_LABEL] }}</span>\n </span>\n </span>\n }\n @if (story.totalSlides) {\n <span class=\"rtsee-story-details-info-chip\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n <span>\n <span>{{ presentation.labels[RTSeeTextLabelKeys.STORY_PAGES_LABEL] }}:</span>\n <span> </span>\n <span>{{ story.totalSlides }}</span>\n </span>\n </span>\n }\n </div>\n </div>\n </div>\n </section>\n\n <!-- CONTENT AREA -->\n <div class=\"rtsee-story-details-content-wrapper\">\n <div class=\"rtsee-story-details-cover-actions\">\n <p-button\n (click)=\"presentation.setActiveStory(story)\"\n [severity]=\"'primary'\"\n [label]=\"story.preselectedSlideNumber ? presentation.labels[RTSeeTextLabelKeys.CONTINUE_READING_BUTTON] : presentation.labels[RTSeeTextLabelKeys.START_READING_BUTTON]\"\n class=\"rtsee-story-details-start-reading rts-action-button\"\n >\n </p-button>\n </div>\n <div class=\"rtsee-story-details-content-grid\">\n <!-- Description Card -->\n <article class=\"rtsee-story-details-glass-card\">\n <div class=\"rtsee-story-details-glass-card-header\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n <h2>{{presentation.labels[RTSeeTextLabelKeys.STORY_ABOUT_LABEL]}}</h2>\n </div>\n <p class=\"rtsee-story-details-glass-card-text\">\n {{ story.description }}\n </p>\n </article>\n </div>\n\n @if (messenger) {\n <rtsee-entity-preview\n [entity]=\"story\"\n [messenger]=\"messenger\"\n ></rtsee-entity-preview>\n }\n\n @if (story.categories?.length && false) {\n <div class=\"rtsee-story-details-categories\">\n @for (category of story.categories; track category.id) {\n <p-tag [value]=\"category.name\"></p-tag>\n }\n </div>\n }\n\n @if (story.tags?.length && false) {\n <div class=\"rtsee-story-details-labels\">\n @for (tag of story.tags; track tag.id) {\n <p-chip class=\"rtsee-story-details-label\">\n @if (tag.symbol) {\n <span class=\"rtsee-story-details-label-left\">{{\n tag.symbol\n }}</span>\n }\n <span class=\"rtsee-story-details-label-right\">{{\n tag.name\n }}</span>\n </p-chip>\n }\n </div>\n }\n\n <div class=\"rtsee-story-details-description-history\"></div>\n @if (story.isPublished && false) {\n <div class=\"rtsee-story-details-feedback\">\n <p>feedback here</p>\n </div>\n } @else if (messenger && story.discussion && false) {\n <div class=\"rtsee-story-details-votes\">\n <p class=\"rtsee-story-details-comments-label\">Comments</p>\n <rtsee-chat\n [messenger]=\"messenger\"\n [chatData]=\"story.discussion\"\n ></rtsee-chat>\n </div>\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeePresentation, RTSeeStory } from '@rtsee/presentation';\nimport { PresentationHeaderComponent } from '../presentation-header/presentation-header.component';\nimport { StoryThumbnailComponent } from '../story-thumbnail/story-thumbnail.component';\nimport { StoryPlayerComponent } from '../story-player/story-player.component';\nimport { PreloaderComponent } from '../../../common/components/preloader/preloader.component';\nimport { PresentationsDashboardComponent } from '../manage/presentations-dashboard/presentations-dashboard.component';\nimport { PresentationSettingsComponent } from '../presentation-settings/presentation-settings.component';\nimport { StoryDetailsComponent } from '../story-details/story-details.component';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\n\n@Component({\n selector: 'rtsee-presentation',\n templateUrl: './presentation.component.html',\n imports: [\n PresentationHeaderComponent,\n StoryThumbnailComponent,\n StoryPlayerComponent,\n PreloaderComponent,\n PreloaderComponent,\n PresentationsDashboardComponent,\n PresentationSettingsComponent,\n StoryDetailsComponent,\n ],\n standalone: true,\n})\nexport class PresentationComponent {\n @Input() presentation!: RTSeePresentation;\n @Input() messenger?: RTSeeMessenger;\n constructor() {}\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n\n onStoryThumbnailClicked(story: RTSeeStory): void {\n if (!story.friendlyUrl) {\n void this.presentation.openStoryDetails(story.id, story.preselectedSlideNumber || undefined);\n }\n }\n}\n","<div class=\"rtsee-presentation\">\n <div class=\"rtsee-presentation-header-block\">\n <rtsee-presentation-header [presentation]=\"presentation\"\n ></rtsee-presentation-header>\n </div>\n\n @if (presentation.storyLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n\n @if(presentation.isDashboardOpen && presentation.dashboard) {\n <rtsee-presentations-dashboard [dashboard]=\"presentation.dashboard\"\n ></rtsee-presentations-dashboard>\n }\n\n @if (presentation.settings.isExpanded) {\n <rtsee-presentation-settings [settings]=\"presentation.settings\"\n [presentation]=\"presentation\"\n ></rtsee-presentation-settings>\n }\n\n @if (presentation.isCategoriesListVisible && !presentation.storyLoadInProgress) {\n <div class=\"rtsee-presentation-categories-list\">\n @if (presentation.categoriesLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n\n @if (presentation.activeSessionsStories.length) {\n <div class=\"rtsee-presentation-category-header\">\n <h2 class=\"rtsee-presentation-category-name\">{{presentation.labels[RTSeeTextLabelKeys.CONTINUE_SESSIONS_LABEL]}}</h2>\n </div>\n <div class=\"rtsee-presentation-stories-list\">\n @for (story of presentation.activeSessionsStories; track story.id) {\n <div class=\"rtsee-presentation-story-thumbnail-container\"\n (click)=\"onStoryThumbnailClicked(story)\"\n >\n <rtsee-story-thumbnail\n [story]=\"story\"\n [presentation]=\"presentation\"\n ></rtsee-story-thumbnail>\n </div>\n }\n </div>\n }\n\n @for (category of presentation.categories; track category.id) {\n <div class=\"rtsee-presentation-category-header\">\n <h2 class=\"rtsee-presentation-category-name\">{{ category.name }}</h2>\n <span class=\"rtsee-presentation-category-description\">{{ category.description }}</span>\n </div>\n <div class=\"rtsee-presentation-stories-list\">\n @for (story of category.stories; track story.id) {\n <div class=\"rtsee-presentation-story-thumbnail-container\"\n (click)=\"onStoryThumbnailClicked(story)\"\n >\n <rtsee-story-thumbnail\n [story]=\"story\"\n [presentation]=\"presentation\"\n ></rtsee-story-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n\n @if (presentation.activeStory && !presentation.isDashboardOpen) {\n <div class=\"rtsee-presentation-story-viewer-container\">\n <rtsee-story-player [story]=\"presentation.activeStory\"\n [settings]=\"presentation.settings\"\n [presentation]=\"presentation\"\n ></rtsee-story-player>\n </div>\n } @else if (presentation.openedStoryDetails && !presentation.isDashboardOpen) {\n <rtsee-story-details [story]=\"presentation.openedStoryDetails\"\n [presentation]=\"presentation\"\n [messenger]=\"messenger\"\n ></rtsee-story-details>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n INavigationConfig,\n IRouteConfig,\n RTSee,\n RTSeeRoutesList,\n} from '@rtsee/factory';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { NgClass } from '@angular/common';\nimport { Avatar } from 'primeng/avatar';\nimport { Image } from 'primeng/image';\nimport { Divider } from 'primeng/divider';\nimport { Tooltip } from 'primeng/tooltip';\nimport { RTSeeAuthService } from '../../rtsee-auth/services/auth.service';\nimport { hasPermission, IPeer, RTSeePeerPermissions } from '@rtsee/core';\n\n@Component({\n selector: 'rtsee-nav',\n templateUrl: './rtsee-nav.component.html',\n imports: [\n RouterLink,\n RouterLinkActive,\n NgClass,\n Avatar,\n Image,\n Divider,\n Tooltip,\n ],\n standalone: true,\n})\nexport class RtseeNavComponent implements OnInit {\n @Input() public config!: INavigationConfig<IRouteConfig>;\n @Input() rtsee!: RTSee;\n\n profileLink: string = '';\n queryParams: { [key: string]: string } = {};\n\n constructor(private authService: RTSeeAuthService) {}\n\n ngOnInit(): void {\n this.populateProfileLinkTillSuccess();\n }\n\n populateProfileLinkTillSuccess(): void {\n const success: boolean = this.populateProfileLink();\n\n if (!success) {\n setTimeout(() => {\n this.populateProfileLinkTillSuccess();\n }, 1000);\n }\n }\n\n populateProfileLink(): boolean {\n const peer: IPeer | null = this.rtsee.socketConnection?.myPeer || null;\n\n if (!peer) {\n console.log('RTSeeContainer: user peer not found');\n return false;\n }\n\n const profileRoute: IRouteConfig | null =\n this.config.routes.find(\n (r) => r.rtseeRoute === RTSeeRoutesList.PROFILE,\n ) || null;\n\n const dashboardRoute: IRouteConfig | null =\n this.config.routes.find(\n (r) => r.rtseeRoute === RTSeeRoutesList.EVENTS_DASHBOARD,\n ) || null;\n\n const messengerRoute: IRouteConfig | null =\n this.config.routes.find(\n (r) => r.rtseeRoute === RTSeeRoutesList.MESSENGER,\n ) || null;\n\n if (dashboardRoute) {\n dashboardRoute.isEnabled = hasPermission(\n peer,\n RTSeePeerPermissions.ACCESS_EVENTS_DASHBOARD,\n );\n }\n\n if (profileRoute && profileRoute.link) {\n this.profileLink = `${profileRoute.link}/${peer.clientId}`;\n return true;\n }\n\n if (messengerRoute && messengerRoute.link) {\n this.profileLink = messengerRoute.link;\n this.queryParams = { userId: peer.clientId };\n return true;\n }\n\n return false;\n }\n}\n","<div class=\"rtsee-nav\">\n @if (config.siteLogo) {\n <div class=\"rtsee-site-logo\">\n <p-image [src]=\"config.siteLogo.src\" class=\"rtsee-site-logo-image\"></p-image>\n <p-divider class=\"rtsee-site-logo-divider\" />\n </div>\n }\n <div class=\"rtsee-nav-bar\">\n @for (route of config.routes; track route.name) {\n <a [routerLink]=\"route.link\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [ngClass]=\"{'rtsee-nav-item-hidden': !route.isEnabled || !route.iconClassName}\"\n [routerLinkActiveOptions]=\"{ exact: route.exactActiveLinkMatcher || false }\"\n class=\"rtsee-nav-item\"\n [pTooltip]=\"route.name\"\n >\n <span [ngClass]=\"route.iconClassName\"\n class=\"rtsee-nav-item-icon\" >\n </span>\n </a>\n }\n <p-avatar [image]=\"rtsee.socketConnection?.myPeer?.imageUrl\"\n class=\"rtsee-nav-item rtsee-nav-image rtsee-nav-profile\"\n [routerLink]=\"profileLink\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n [queryParams]=\"queryParams\"\n ></p-avatar>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSee, INavigationConfig, IRouteConfig } from '@rtsee/factory';\nimport { NgClass } from '@angular/common';\nimport { RTSeeConferenceComponent } from '../rtsee/rtsee-conference.component';\nimport { MessengerComponent } from '../rtsee-messenger/messenger/messenger.component';\nimport { RtseeEventsDashboardComponent } from '../rtsee-events-dashboard/rtsee-events-dashboard.component';\nimport { PresentationComponent } from '../rtsee-presentation/presentation/presentation.component';\nimport { RtseeNavComponent } from './rtsee-nav/rtsee-nav.component';\nimport { RTSeeAuthService } from '../rtsee-auth/services/auth.service';\nimport { RTSeeAuth } from '@rtsee/auth';\nimport { filter, Subscription } from 'rxjs';\nimport { Event, NavigationEnd, Router } from '@angular/router';\n\n@Component({\n selector: 'rtsee-container',\n templateUrl: './rtsee-container.component.html',\n imports: [\n NgClass,\n RTSeeConferenceComponent,\n MessengerComponent,\n RtseeEventsDashboardComponent,\n PresentationComponent,\n RtseeNavComponent,\n ],\n standalone: true,\n})\nexport class RTSeeContainerComponent implements OnInit {\n isSidenavExpanded: boolean = true;\n isSidenavContent: boolean = false;\n isSidenavFullScreen: boolean = false;\n\n private routeSubscription!: Subscription;\n\n @Input() rtsee!: RTSee;\n @Input() public navigationConfig!: INavigationConfig<IRouteConfig>;\n @Input() auth!: RTSeeAuth<any>;\n\n constructor(\n private authService: RTSeeAuthService,\n private router: Router,\n ) {}\n\n ngOnInit(): void {\n this.authService.init(this.auth);\n this.routeSubscription = this.router.events\n .pipe(\n // Filter for the NavigationEnd event to know when navigation is complete\n filter(\n (event: Event): event is NavigationEnd =>\n event instanceof NavigationEnd,\n ),\n )\n .subscribe((event: NavigationEnd) => {\n this.defineSideNavState(event.url);\n });\n\n this.subscribeToHtmlEvents();\n }\n\n subscribeToHtmlEvents(): void {\n if (!this.rtsee?.eventsCollector) { return; }\n }\n\n onSidenavToggleClicked() {\n this.isSidenavExpanded = !this.isSidenavExpanded;\n }\n\n defineSideNavState(url: string): void {\n const isBase: boolean = url === '/' || url.startsWith('/?') || url.startsWith('/story');\n const routeUrlSplit: string[] = url.split('/');\n const rootRoutePath: string | null = isBase ? '' : routeUrlSplit[1] || null;\n\n if (!rootRoutePath && !isBase) {\n return;\n }\n\n const rtseeRoute: IRouteConfig | null =\n this.navigationConfig.routes.find((rn) => rn.link === rootRoutePath) ||\n null;\n\n if (!rtseeRoute) {\n return;\n }\n\n this.isSidenavContent = rtseeRoute.fullContent || false;\n this.isSidenavFullScreen = rtseeRoute.fullScreen || false;\n }\n}\n\n","<div class=\"rtsee-shell\"\n [ngClass]=\"{\n 'rtsee-shell-conference-mode': rtsee.conference && rtsee.conference.isInActiveCall,\n 'rtsee-shell-messenger-active': rtsee.messenger && rtsee.activeTab === 'messenger',\n 'rtsee-shell-dashboard-active': rtsee.eventsDashboard && rtsee.activeTab === 'events-dashboard',\n 'rtsee-shell-presentation-active': rtsee.presentation && rtsee.activeTab === 'presentation',\n 'rtsee-shell-side-nav-expanded': isSidenavExpanded,\n 'rtsee-shell-side-nav-is-content': isSidenavContent,\n 'rtsee-shell-side-nav-full-screen': isSidenavFullScreen,\n 'rtsee-lang-eng': rtsee.messenger && rtsee.messenger.currentLanguage === 'eng',\n 'rtsee-lang-ua': rtsee.messenger && rtsee.messenger.currentLanguage === 'ua'\n }\"\n>\n <div class=\"rtsee-nav-block\">\n <rtsee-nav [config]=\"navigationConfig\" [rtsee]=\"rtsee\"></rtsee-nav>\n </div>\n\n <div class=\"rtsee-shell-panel\">\n <div class=\"rtsee-shell-panel-inner\">\n @if (rtsee.conference && rtsee.conference.isInActiveCall) {\n <div class=\"rtsee-conference-container\">\n <rtsee-conference [rtSee]=\"rtsee.conference\"\n ></rtsee-conference>\n </div>\n }\n\n @if (rtsee.messenger) {\n <div class=\"rtsee-messenger-container\">\n <rtsee-messenger [messenger]=\"rtsee.messenger\"\n ></rtsee-messenger>\n </div>\n }\n\n @if (rtsee.eventsDashboard && rtsee.eventsDashboard.isReady) {\n <div class=\"rtsee-events-dashboard-container\">\n <rtsee-events-dashboard [eventsDashboard]=\"rtsee.eventsDashboard\"\n ></rtsee-events-dashboard>\n </div>\n }\n\n @if (rtsee.presentation && rtsee.presentation.isActive) {\n <div class=\"rtsee-presentation-container\">\n <rtsee-presentation [presentation]=\"rtsee.presentation\"\n [messenger]=\"rtsee.messenger\"\n ></rtsee-presentation>\n </div>\n }\n </div>\n </div>\n\n <div class=\"rtsee-content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import {\n Component,\n Input,\n OnInit,\n output,\n OutputEmitterRef,\n} from '@angular/core';\nimport { PanelMenu } from 'primeng/panelmenu';\nimport { RTSeeManageTags, RTSeeTag } from '@rtsee/utilities-ui';\n\nexport interface IAccordionItem {\n label: string;\n icon?: string;\n command?: () => void;\n items?: IAccordionItem[];\n url?: string;\n isSelected: boolean;\n}\n\n@Component({\n selector: 'rtsee-tags-accordion',\n imports: [PanelMenu],\n templateUrl: './rtsee-tags-accordion-menu.component.html',\n})\nexport class RtseeTagsAccordionMenuComponent implements OnInit {\n items: IAccordionItem[] = [];\n onTagClicked: OutputEmitterRef<RTSeeTag> = output<RTSeeTag>();\n\n @Input() manageTags!: RTSeeManageTags;\n\n ngOnInit(): void {\n this.manageTags\n .loadTags()\n .then(() => {\n this.items = this.tagsToItems(this.manageTags.tags);\n console.log(this.items);\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n private tagsToItems(tags: RTSeeTag[]): IAccordionItem[] {\n return tags.map((t) => {\n return {\n label: t.name,\n icon: t.iconClassName || undefined,\n items: t.children ? this.tagsToItems(t.children) : undefined,\n isSelected: false,\n command: (): void => {\n this.onTagClicked.emit(t);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-tags-accordion\">\n <p-panel-menu [model]=\"items\"/>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { RTSeeManageTags } from '@rtsee/utilities-ui';\nimport { FormComponent } from \"../../../common/components/forms/form/form.component\";\n\nexport type RTSeeTagForm = {\n name: string | null;\n description: string | null;\n iconClass: string | null;\n value: string | null;\n};\n\n@Component({\n selector: 'rtsee-rtsee-tag-manage',\n imports: [\n Button,\n FormComponent,\n ],\n templateUrl: './rtsee-tag-manage.component.html',\n})\nexport class RtseeTagManageComponent implements OnInit {\n @Input() manageTags!: RTSeeManageTags;\n constructor() {}\n\n ngOnInit() {\n if (!this.manageTags.activeTag) {\n this.manageTags.setBlankActiveTag();\n }\n\n if (!this.manageTags.activeTag) {\n throw new Error(`Active tag should be selected`);\n }\n }\n\n cancel(): void {\n console.log('Cancel');\n }\n}\n","<div class=\"rtsee-manage-tag\">\n @if (manageTags.activeTagForm) {\n <rtsee-form [form]=\"manageTags.activeTagForm\" (submit)=\"manageTags.activeTagForm.submit()\">\n <p-button type=\"submit\"\n label=\"Submit\"\n [disabled]=\"manageTags.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageTags.saveInProgress\"\n />\n </rtsee-form>\n }\n</div>\n","import {\n Component,\n Input,\n OnInit,\n output,\n OutputEmitterRef,\n} from '@angular/core';\nimport { RTSeeManageTagGroups, RTSeeTagGroup } from '@rtsee/utilities-ui';\nimport { IAccordionItem } from '../rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nimport { Menu } from 'primeng/menu';\n\n@Component({\n selector: 'rtsee-rtsee-tag-groups-manage',\n imports: [Menu],\n templateUrl: './rtsee-tag-groups-manage.component.html',\n})\nexport class RtseeTagGroupsManageComponent implements OnInit {\n items: IAccordionItem[] = [];\n selectedTagGroup: RTSeeTagGroup | undefined = undefined;\n onTagGroupClicked: OutputEmitterRef<RTSeeTagGroup> = output<RTSeeTagGroup>();\n\n @Input() manageTagGroups!: RTSeeManageTagGroups;\n\n ngOnInit(): void {\n this.manageTagGroups\n .loadTagGroups()\n .then(() => {\n this.items = this.tagGroupsToItems(this.manageTagGroups.tagGroups);\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n private tagGroupsToItems(tagGroups: RTSeeTagGroup[]): IAccordionItem[] {\n console.log('tagGroupsToItems', tagGroups);\n return tagGroups.map((tg) => {\n return {\n label: tg.name,\n isSelected: false,\n command: (): void => {\n this.selectedTagGroup = tg;\n this.onTagGroupClicked.emit(tg);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-manage-tag-groups\">\n <p-menu [model]=\"items\" />\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { IRTSeeTagGroup } from '@rtsee/common';\nimport { TypedReactiveForm } from '../../rtsee-auth/types/auth-form.type';\nimport { RTSeeManageTagGroups } from '@rtsee/utilities-ui';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { Textarea } from 'primeng/textarea';\nimport { AutocompleteComponent } from '../../../common/components/autocomplete/autocomplete.component';\n\nexport type RTSeeTagGroupForm = {\n name: string | null;\n description: string | null;\n};\n\n@Component({\n selector: 'rtsee-rtsee-tag-group-manage',\n imports: [\n Button,\n FloatLabel,\n InputGroup,\n InputText,\n Message,\n ReactiveFormsModule,\n Textarea,\n AutocompleteComponent,\n ],\n templateUrl: './rtsee-tag-group-manage.component.html',\n})\nexport class RtseeTagGroupManageComponent implements OnInit {\n tagGroupForm: FormGroup;\n\n @Input() manageTagGroups!: RTSeeManageTagGroups;\n\n constructor(private formBuilder: FormBuilder) {\n this.tagGroupForm = this.getTagGroupForm();\n }\n\n ngOnInit() {\n if (!this.manageTagGroups.activeTagGroup) {\n this.manageTagGroups.setBlankActiveTag();\n }\n\n if (!this.manageTagGroups.activeTagGroup) {\n throw new Error(`Active tagGroup should be selected`);\n }\n\n this.presetFields(this.manageTagGroups.activeTagGroup);\n void this.manageTagGroups.initMultiselect();\n }\n\n async submit(): Promise<void> {\n if (!this.manageTagGroups.activeTagGroup) {\n throw new Error(`Active tagGroup should be selected`);\n }\n\n if (this.tagGroupForm.invalid || !this.manageTagGroups.peer.rtseeAppId) {\n console.log('Form Invalid!');\n return;\n }\n\n const tagGroupParams: Omit<IRTSeeTagGroup, 'id'> = {\n name: this.nameField.getRawValue(),\n description: this.descriptionField.getRawValue(),\n applicationId: this.manageTagGroups.peer.rtseeAppId,\n };\n\n if (this.manageTagGroups.activeTagGroup.id) {\n await this.manageTagGroups.updateTagGroup({\n ...tagGroupParams,\n id: this.manageTagGroups.activeTagGroup.id,\n });\n } else {\n await this.manageTagGroups.createTagGroup(tagGroupParams);\n }\n }\n\n cancel(): void {\n console.log('Cancel');\n }\n\n private presetFields(tagGroup: Omit<IRTSeeTagGroup, 'id'>): void {\n this.nameField.setValue(tagGroup.name);\n this.descriptionField.setValue(tagGroup.description || '');\n }\n\n private getTagGroupForm(): FormGroup {\n return this.formBuilder.group<TypedReactiveForm<RTSeeTagGroupForm>>({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n });\n }\n\n get nameField(): FormControl<string> {\n return this.tagGroupForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.tagGroupForm.get('description') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-manage-tag-group\">\n <div class=\"rtsee-manage-tag-group-info rtsee-form-container\">\n <form class=\"rtsee-tag-form rtsee-form\"\n [formGroup]=\"tagGroupForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-label-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-label-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-label-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n\n @if (manageTagGroups && manageTagGroups.tagsMultiselect) {\n <div class=\"rtsee-form-field-container\">\n <rtsee-autocomplete [config]=\"manageTagGroups.tagsMultiselect\"></rtsee-autocomplete>\n </div>\n }\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageTagGroups.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageTagGroups.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, output, OutputEmitterRef } from '@angular/core';\nimport { Menu } from 'primeng/menu';\nimport { IAccordionItem } from '../../rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nimport {\n RTSeeEntityConfiguration,\n RTSeeManageEntityConfigurations,\n} from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-entities-configurations-list',\n imports: [Menu],\n templateUrl: './entities-configurations-list.component.html',\n})\nexport class EntitiesConfigurationsListComponent {\n items: IAccordionItem[] = [];\n selectedEntityConfiguration?: RTSeeEntityConfiguration;\n onConfigurationClicked: OutputEmitterRef<RTSeeEntityConfiguration> =\n output<RTSeeEntityConfiguration>();\n\n @Input() manageEntityConfigurations!: RTSeeManageEntityConfigurations;\n\n ngOnInit(): void {\n this.manageEntityConfigurations\n .loadEntityConfigurations()\n .then(() => {\n this.items = this.configurationsToItems(\n this.manageEntityConfigurations.entityConfigurations,\n );\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n private configurationsToItems(\n entityConfigurations: RTSeeEntityConfiguration[],\n ): IAccordionItem[] {\n console.log('entityConfigsToItems', entityConfigurations);\n return entityConfigurations.map((ec) => {\n return {\n label: ec.name,\n isSelected: false,\n command: (): void => {\n this.selectedEntityConfiguration = ec;\n this.onConfigurationClicked.emit(ec);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-entities-configurations-list\">\n <p-menu [model]=\"items\" />\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeManageRatingConfigurations } from '@rtsee/utilities-ui';\nimport { IRTSeeRatingConfiguration } from '@rtsee/common';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { TypedReactiveForm } from '../../rtsee-auth/types/auth-form.type';\nimport { Textarea } from 'primeng/textarea';\nimport { InputNumber } from 'primeng/inputnumber';\n\nexport type RatingConfigurationForm = {\n name: string | null;\n description: string | null;\n maxRate: number | null;\n step: number | null;\n};\n\n@Component({\n selector: 'rtsee-manage-rating-configuration',\n imports: [\n Button,\n FloatLabel,\n FormsModule,\n InputGroup,\n InputText,\n Message,\n ReactiveFormsModule,\n Textarea,\n InputNumber,\n ],\n templateUrl: './manage-rating-configuration.component.html',\n})\nexport class ManageRatingConfigurationComponent implements OnInit {\n ratingConfigurationForm: FormGroup;\n\n @Input() manageRatingConfigurations!: RTSeeManageRatingConfigurations;\n @Input() ratingConfiguration!: IRTSeeRatingConfiguration;\n constructor(private formBuilder: FormBuilder) {\n this.ratingConfigurationForm = this.getRatingConfigurationForm();\n }\n\n ngOnInit(): void {\n this.presetFields();\n }\n\n private presetFields(): void {\n if (!this.ratingConfiguration) {\n return;\n }\n\n this.nameField.setValue(this.ratingConfiguration.name);\n this.descriptionField.setValue(this.ratingConfiguration.description || '');\n this.maxRateField.setValue(this.ratingConfiguration.maxRateValue || 5);\n this.stepField.setValue(this.ratingConfiguration.stepValue || 1);\n }\n\n async submit(): Promise<void> {\n if (!this.manageRatingConfigurations.entityConfigurationId) {\n throw new Error(`No entity config id found`);\n }\n\n if (\n this.ratingConfigurationForm.invalid ||\n !this.manageRatingConfigurations.applicationId\n ) {\n console.log('Form Invalid!');\n return;\n }\n\n const configurationParams: Omit<IRTSeeRatingConfiguration, 'id'> = {\n name: this.nameField.getRawValue(),\n description: this.descriptionField.getRawValue(),\n entityConfigurationId:\n this.manageRatingConfigurations.entityConfigurationId,\n applicationId: this.manageRatingConfigurations.applicationId,\n maxRateValue: this.maxRateField.getRawValue(),\n stepValue: this.stepField.getRawValue(),\n };\n\n if (this.ratingConfiguration?.id) {\n await this.manageRatingConfigurations.updateRatingConfiguration({\n ...configurationParams,\n id: this.ratingConfiguration.id,\n });\n } else {\n await this.manageRatingConfigurations.createRatingConfiguration(\n configurationParams,\n );\n }\n }\n\n cancel(): void {\n console.log('cancel');\n }\n\n private getRatingConfigurationForm(): FormGroup {\n return this.formBuilder.group<TypedReactiveForm<RatingConfigurationForm>>({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n maxRate: this.formBuilder.control(5, {\n validators: [Validators.required, Validators.min(4)],\n }),\n step: this.formBuilder.control(1, {\n validators: [Validators.required, Validators.min(1)],\n }),\n });\n }\n\n get nameField(): FormControl<string> {\n return this.ratingConfigurationForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.ratingConfigurationForm.get(\n 'description',\n ) as FormControl<string>;\n }\n\n get maxRateField(): FormControl<number> {\n return this.ratingConfigurationForm.get('maxRate') as FormControl<number>;\n }\n\n get stepField(): FormControl<number> {\n return this.ratingConfigurationForm.get('step') as FormControl<number>;\n }\n}\n","<div class=\"rtsee-manage-rating-configuration\">\n <div class=\"rtsee-form-container\">\n <form class=\"rtsee-rating-configuration-form rtsee-form\"\n [formGroup]=\"ratingConfigurationForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-rating-configuration-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-rating-configuration-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-rating-configuration-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-rating-configuration-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [formControl]=\"maxRateField\"\n [min]=\"1\"\n [max]=\"10\"\n id=\"rtsee-rating-configuration-max-rate-field\"\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n />\n <label for=\"rtsee-rating-configuration-max-rate-field\">Max Rate</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (maxRateField.hasError('required') && maxRateField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Max rate is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [formControl]=\"stepField\"\n [min]=\"1\"\n [max]=\"2\"\n id=\"rtsee-rating-configuration-step-field\"\n [class.p-invalid]=\"stepField.invalid && stepField.touched\"\n />\n <label for=\"rtsee-rating-configuration-step-field\">Max Rate</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (maxRateField.hasError('required') && maxRateField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Step is required</p-message>\n }\n </div>\n\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageRatingConfigurations.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageRatingConfigurations.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, output, OutputEmitterRef } from '@angular/core';\nimport { Menu } from 'primeng/menu';\nimport { IAccordionItem } from '../../rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nimport {\n RTSeeEntityConfiguration,\n RTSeeManageRatingConfigurations,\n} from '@rtsee/utilities-ui';\nimport { IRTSeeRatingConfiguration } from '@rtsee/common';\nimport { Button } from 'primeng/button';\nimport { Divider } from 'primeng/divider';\nimport { ManageRatingConfigurationComponent } from '../manage-rating-configuration/manage-rating-configuration.component';\n\n@Component({\n selector: 'rtsee-rating-configurations-list',\n imports: [Menu, Button, Divider, ManageRatingConfigurationComponent],\n templateUrl: './rating-configurations-list.component.html',\n})\nexport class RatingConfigurationsListComponent {\n items: IAccordionItem[] = [];\n selectedRatingConfiguration?: IRTSeeRatingConfiguration;\n onRatingConfigurationClicked: OutputEmitterRef<IRTSeeRatingConfiguration> =\n output<IRTSeeRatingConfiguration>();\n @Input() entityConfiguration!: RTSeeEntityConfiguration;\n @Input() manageRatingConfigurations!: RTSeeManageRatingConfigurations;\n\n ngOnInit(): void {\n this.manageRatingConfigurations\n .loadRatingConfigurations(this.entityConfiguration.id)\n .then(() => {\n this.items = this.ratingConfigurationsToItems(\n this.manageRatingConfigurations.ratingConfigurations,\n );\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n onCreateClicked(): void {\n this.manageRatingConfigurations.setBlankActiveConfiguration();\n this.selectedRatingConfiguration =\n this.manageRatingConfigurations.activeRatingConfiguration || undefined;\n }\n\n private ratingConfigurationsToItems(\n ratingConfigurations: IRTSeeRatingConfiguration[],\n ): IAccordionItem[] {\n return ratingConfigurations.map((rc) => {\n return {\n label: rc.name,\n isSelected: false,\n command: (): void => {\n this.selectedRatingConfiguration = rc;\n this.onRatingConfigurationClicked.emit(rc);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-rating-configurations-list\">\n <p-divider></p-divider>\n <p>Rating Configurations</p>\n @if (selectedRatingConfiguration) {\n <rtsee-manage-rating-configuration [manageRatingConfigurations]=\"manageRatingConfigurations\"\n [ratingConfiguration]=\"selectedRatingConfiguration\"\n ></rtsee-manage-rating-configuration>\n } @else {\n <div class=\"rtsee-rating-configurations-controls\">\n <p-button label=\"Create\" (click)=\"onCreateClicked()\"></p-button>\n </div>\n <div class=\"rtsee-rating-configurations-list-items\">\n <p-menu [model]=\"items\" />\n </div>\n }\n</div>\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { Button } from \"primeng/button\";\nimport { RTSeeManageEntityConfigurations } from \"@rtsee/utilities-ui\";\nimport { FormComponent } from \"../../../common/components/forms/form/form.component\";\nimport { RatingConfigurationsListComponent } from \"../rating-configurations-list/rating-configurations-list.component\";\n\n@Component({\n selector: \"rtsee-manage-entity-configuration\",\n standalone: true,\n imports: [\n Button,\n FormComponent,\n RatingConfigurationsListComponent,\n ],\n templateUrl: \"./manage-entity-configuration.component.html\",\n})\nexport class ManageEntityConfigurationComponent implements OnInit {\n @Input() manageEntityConfigurations!: RTSeeManageEntityConfigurations;\n\n ngOnInit() {\n if (!this.manageEntityConfigurations.activeEntityConfiguration) {\n this.manageEntityConfigurations.setBlankActiveEntityConfiguration();\n }\n\n if (!this.manageEntityConfigurations.activeEntityConfigurationForm) {\n throw new Error(`Active entityConfig form should be selected`);\n }\n }\n\n submit(): void {\n if (!this.manageEntityConfigurations.activeEntityConfigurationForm) {\n return;\n }\n\n this.manageEntityConfigurations.activeEntityConfigurationForm.submit();\n }\n\n cancel(): void {\n this.manageEntityConfigurations.flushActiveEntityConfiguration();\n }\n}\n","<div class=\"rtsee-manage-entity-configuration\">\n <div class=\"rtsee-manage-entity-configuration-info rtsee-form-container\">\n @if (manageEntityConfigurations.activeEntityConfigurationForm) {\n <rtsee-form [form]=\"manageEntityConfigurations.activeEntityConfigurationForm\" (formSubmit)=\"submit()\">\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n />\n </rtsee-form>\n\n @if (manageEntityConfigurations.activeEntityConfiguration && manageEntityConfigurations.activeEntityConfiguration.id) {\n <rtsee-rating-configurations-list [entityConfiguration]=\"manageEntityConfigurations.activeEntityConfiguration\"\n [manageRatingConfigurations]=\"manageEntityConfigurations.activeEntityConfiguration.manageRatingConfigurations\"\n ></rtsee-rating-configurations-list>\n }\n }\n </div>\n</div>\n","import { Component, Input, output, OutputEmitterRef } from '@angular/core';\nimport { IAccordionItem } from '../../rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nimport { RTSeeEntity, RTSeeManageEntities } from '@rtsee/utilities-ui';\nimport { Menu } from 'primeng/menu';\n\n@Component({\n selector: 'rtsee-entities-list',\n imports: [Menu],\n templateUrl: './entities-list.component.html',\n})\nexport class EntitiesListComponent {\n items: IAccordionItem[] = [];\n selectedEntity?: RTSeeEntity;\n onEntityClicked: OutputEmitterRef<RTSeeEntity> = output<RTSeeEntity>();\n\n @Input() manageEntities!: RTSeeManageEntities;\n\n ngOnInit(): void {\n this.manageEntities\n .loadEntities()\n .then(() => {\n this.items = this.entitiesToItems(this.manageEntities.entities);\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n private entitiesToItems(\n entityConfigurations: RTSeeEntity[],\n ): IAccordionItem[] {\n console.log('entityConfigsToItems', entityConfigurations);\n return entityConfigurations.map((et) => {\n return {\n label: et.name,\n isSelected: false,\n command: (): void => {\n this.selectedEntity = et;\n this.onEntityClicked.emit(et);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-entities-list\">\n <p-menu [model]=\"items\" />\n</div>\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { Button } from \"primeng/button\";\nimport { RTSeeManageEntities } from \"@rtsee/utilities-ui\";\nimport { FormComponent } from \"../../../common/components/forms/form/form.component\";\n\n@Component({\n selector: \"rtsee-manage-entity\",\n standalone: true,\n imports: [\n Button,\n FormComponent\n ],\n templateUrl: \"./manage-entity.component.html\"\n})\nexport class ManageEntityComponent implements OnInit {\n @Input() manageEntities!: RTSeeManageEntities;\n\n ngOnInit() {\n if (!this.manageEntities.activeEntity) {\n this.manageEntities.setBlankActiveEntity();\n }\n\n if (!this.manageEntities.activeEntityForm) {\n throw new Error(`Active entity form should be selected`);\n }\n }\n\n submit(): void {\n if (!this.manageEntities.activeEntityForm) {\n return;\n }\n\n this.manageEntities.activeEntityForm.submit();\n }\n\n cancel(): void {\n this.manageEntities.flushActiveEntity();\n }\n}\n","<div class=\"rtsee-manage-entity\">\n @if (manageEntities.activeEntityForm) {\n <rtsee-form [form]=\"manageEntities.activeEntityForm\" (formSubmit)=\"submit()\">\n <p-button type=\"submit\"\n label=\"Submit\"\n [disabled]=\"manageEntities.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageEntities.saveInProgress\"\n />\n </rtsee-form>\n }\n</div>\n","import { Component } from '@angular/core';\nimport { Router, RouterLink } from '@angular/router';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { SignInForm, TypedReactiveForm } from '../types/auth-form.type';\nimport { NgOptimizedImage } from '@angular/common';\nimport { RTSeeAuthService } from '../services/auth.service';\nimport { AuthEndpointsKeys, RTSeeAuthConfiguration } from '@rtsee/auth';\nimport { ButtonModule } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Password } from 'primeng/password';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Checkbox } from 'primeng/checkbox';\nimport { Message } from 'primeng/message';\nimport { ProgressSpinner } from 'primeng/progressspinner';\nimport { ServerSideError } from '../../../common/interfaces';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\n\n@Component({\n selector: 'rtsee-sign-in',\n templateUrl: './sign-in.component.html',\n imports: [\n NgOptimizedImage,\n ReactiveFormsModule,\n RouterLink,\n ButtonModule,\n InputGroup,\n InputText,\n Password,\n FloatLabel,\n Checkbox,\n Message,\n ProgressSpinner,\n ],\n standalone: true,\n})\nexport class SignInComponent {\n public readonly signInForm: FormGroup<TypedReactiveForm<SignInForm>> =\n this.formBuilder.group<TypedReactiveForm<SignInForm>>({\n username: this.formBuilder.nonNullable.control(\n {\n value: '',\n disabled: false,\n },\n {\n validators: [Validators.required, Validators.email],\n },\n ),\n password: this.formBuilder.nonNullable.control(\n {\n value: '',\n disabled: false,\n },\n { validators: [Validators.required] },\n ),\n remember: this.formBuilder.nonNullable.control(false),\n });\n public readonly authConfiguration: RTSeeAuthConfiguration;\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n public loadInProgress: boolean = false;\n public serverSideError: string = '';\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly router: Router,\n public authService: RTSeeAuthService,\n ) {\n this.authConfiguration = this.authService.rtseeAuth.authConfiguration;\n }\n\n get usernameField(): FormControl<string> {\n return this.signInForm.get('username') as FormControl<string>;\n }\n\n get passwordField(): FormControl<string> {\n return this.signInForm.get('password') as FormControl<string>;\n }\n\n get rememberField(): FormControl<boolean> {\n return this.signInForm.get('remember') as FormControl<boolean>;\n }\n\n public login(): void {\n if (this.signInForm.valid) {\n this.disableFormFields();\n this.authService.signIn(this.signInForm.getRawValue()).subscribe({\n next: () => {\n void this.router.navigate(\n this.authService.rtseeAuth.authConfiguration.defaultPostLoginRoute,\n );\n this.enableFormFields();\n setTimeout(() => {\n window.location.reload();\n }, 100);\n },\n error: (error: ServerSideError) => {\n console.log(error);\n this.showServerSideErrorForXSeconds(error.error.message);\n this.enableFormFields();\n },\n complete: () => {\n this.enableFormFields();\n },\n });\n } else {\n this.signInForm.markAsTouched(); // this does not work after switching to \"nonNullable\" form fields\n }\n }\n\n private showServerSideErrorForXSeconds(message: string, x: number = 3): void {\n this.serverSideError = message;\n\n setTimeout(() => {\n this.serverSideError = '';\n }, x * 1000); // we can do pop-up message instead\n }\n\n private disableFormFields(): void {\n this.loadInProgress = true;\n this.usernameField.disable();\n this.passwordField.disable();\n this.rememberField.disable();\n }\n\n private enableFormFields(): void {\n this.loadInProgress = false;\n this.usernameField.enable(); // fuck me, but [disabled]=\"loadInProgress\" on the field no longer works :(\n this.passwordField.enable();\n this.rememberField.enable();\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"auth-container rtsee-form-container\" >\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">{{ authService.rtseeAuth.labels[RTSeeTextLabelKeys.SIGN_IN_FORM_HEADER] }}</h2>\n <p class=\"auth-title-description\">{{ authService.rtseeAuth.labels[RTSeeTextLabelKeys.SIGN_IN_TEXT_SUBHEADER] }}</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"signInForm\" (ngSubmit)=\"login()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup >\n <p-floatlabel variant=\"on\">\n <input id=\"user-email\"\n pInputText\n [formControl]=\"usernameField\"\n />\n <label for=\"user-email\">Email</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!usernameField.valid && usernameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Email is invalid</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"user-password\"\n [formControl]=\"passwordField\"\n [feedback]=\"false\"\n />\n <label for=\"user-password\">Password</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (!passwordField.valid && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password is required</p-message>\n }\n @if (serverSideError) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{serverSideError}}</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-checkbox inputId=\"remember\" [binary]=\"true\" [formControl]=\"rememberField\" />\n <label for=\"remember\" class=\"ml-2\">\n <span>\n {{authService.rtseeAuth.labels[RTSeeTextLabelKeys.REMEMBER_ME_CHECKBOX_LABEL] }}\n </span>\n </label>\n </div>\n <div class=\"rtsee-form-field-container\">\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.FORGOT_PASSWORD)\"\n class=\"auth-deep-blue-sm-medium\"\n >Forgot password?</a>\n </div>\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Sign In\"\n [disabled]=\"loadInProgress\"\n />\n @if (loadInProgress) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n <p class=\"rtsee-form-label\">\n <span>Don't have an account?</span>\n <span> </span>\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_UP)\"\n class=\"auth-deep-blue-sm-medium\"\n >Create one!</a>\n </p>\n</div>\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UtilsService {\n constructor() {}\n\n public static getKeysAsValueObject<T extends object>(\n obj: T,\n ): Record<string, string> {\n // object was {}\n if (obj) {\n return Object.keys(obj).reduce<Record<string, string>>(\n (result, value) => {\n result[value] = value;\n return result;\n },\n {},\n );\n }\n return {};\n }\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport class ConfirmPasswordValidator {\n /**\n * Check matching password with confirm password\n * @param control AbstractControl\n */\n static MatchFields(control: AbstractControl): ValidationErrors | null {\n const passwordField: AbstractControl | null = control.get('password');\n const passwordConfirmationField: AbstractControl | null = control.get(\n 'passwordConfirmation',\n );\n\n if (!passwordField || !passwordConfirmationField) {\n throw new Error('MatchFieldsValidator unable to find password controls!');\n }\n\n const password: string = passwordField.getRawValue() as string;\n const passwordConfirmation: string =\n passwordConfirmationField.getRawValue() as string;\n\n if (password !== passwordConfirmation) {\n return {\n confirmPassword: true,\n };\n }\n\n return null;\n }\n}\n","import { Component } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { SignUpForm, TypedReactiveForm } from '../types/auth-form.type';\nimport { UtilsService } from '../services/utils.service';\nimport { ConfirmPasswordValidator } from '../validators/form-fields-validators';\nimport { Router, RouterLink } from '@angular/router';\nimport { NgOptimizedImage } from '@angular/common';\nimport { RTSeeAuthService } from '../services/auth.service';\nimport { IRtseeSignUpRequestOptions, IRTSeeSignUpResponse } from '@rtsee/auth';\nimport { RTSeeAuthConfiguration, AuthEndpointsKeys } from '@rtsee/auth';\nimport { ButtonModule } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Password } from 'primeng/password';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Checkbox } from 'primeng/checkbox';\nimport { Message } from 'primeng/message';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\n@Component({\n selector: 'rtsee-sign-up',\n templateUrl: './sign-up.component.html',\n imports: [\n NgOptimizedImage,\n ReactiveFormsModule,\n RouterLink,\n ButtonModule,\n InputGroup,\n InputText,\n Password,\n FloatLabel,\n Checkbox,\n Message,\n ProgressSpinner,\n ],\n standalone: true,\n})\nexport class SignUpComponent {\n public readonly signUpForm: FormGroup<TypedReactiveForm<SignUpForm>>;\n public readonly signUpFormKeys: Record<keyof SignUpForm, string>;\n public readonly authConfiguration: RTSeeAuthConfiguration;\n public loadInProgress: boolean = false;\n public successMessage: string = '';\n public errorMessage: string = '';\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly router: Router,\n private authService: RTSeeAuthService,\n ) {\n this.signUpForm = this.formBuilder.group<TypedReactiveForm<SignUpForm>>(\n {\n email: this.formBuilder.control('', {\n validators: [Validators.required, Validators.email],\n }),\n password: this.formBuilder.control('', {\n validators: [Validators.required, Validators.minLength(6)],\n }),\n passwordConfirmation: this.formBuilder.control('', {\n validators: [Validators.required, Validators.minLength(6)],\n }),\n terms: this.formBuilder.control(false, {\n nonNullable: true,\n validators: [Validators.requiredTrue],\n }),\n },\n { validators: [ConfirmPasswordValidator.MatchFields] },\n );\n this.signUpFormKeys = UtilsService.getKeysAsValueObject(\n this.signUpForm.getRawValue(),\n );\n this.authConfiguration = this.authService.rtseeAuth.authConfiguration;\n }\n\n get emailField(): FormControl<string> {\n return this.signUpForm.get('email') as FormControl<string>;\n }\n\n get passwordField(): FormControl<string> {\n return this.signUpForm.get('password') as FormControl<string>;\n }\n\n get passwordConfirmationField(): FormControl<string> {\n return this.signUpForm.get('passwordConfirmation') as FormControl<string>;\n }\n\n get termsField(): FormControl<boolean> {\n return this.signUpForm.get('terms') as FormControl<boolean>;\n }\n\n public signUp(): void {\n this.signUpForm.markAllAsTouched();\n\n if (this.signUpForm.valid) {\n this.loadInProgress = true;\n this.errorMessage = '';\n this.successMessage = '';\n const formValues: SignUpForm = this.signUpForm.getRawValue();\n\n this.authService\n .signUp({\n email: formValues.email!,\n password: formValues.password!,\n terms: formValues.terms!,\n } as IRtseeSignUpRequestOptions)\n .subscribe({\n next: (response: IRTSeeSignUpResponse) => {\n this.loadInProgress = false;\n this.successMessage =\n 'Registration successful! You can now sign in.';\n void this.router.navigate(\n this.authConfiguration.getRoutePathSplit(\n this.AuthEndpointsKeys.SIGN_IN,\n ),\n );\n console.log('User registered successfully', response);\n },\n error: (error) => {\n this.loadInProgress = false;\n this.errorMessage =\n error.error?.message ||\n 'Error during registration. Please try again.';\n console.error('Error during registration', error);\n },\n });\n }\n }\n\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n}\n","<div class=\"auth-container rtsee-form-container\">\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">Personal Account Registration</h2>\n <p class=\"auth-title-description\">Create your personal account to view stories</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"signUpForm\" (ngSubmit)=\"signUp()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"sign-up-email\"\n pInputText\n [formControl]=\"emailField\"\n [class.p-invalid]=\"emailField.invalid && emailField.touched\"\n />\n <label for=\"sign-up-email\">Email</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (emailField.hasError('required') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Email is required</p-message>\n }\n @if (emailField.hasError('email') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Please enter a valid email address</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"sign-up-password\"\n [formControl]=\"passwordField\"\n [feedback]=\"false\"\n [styleClass]=\"(passwordField.invalid && passwordField.touched) || (signUpForm.hasError('confirmPassword') && passwordField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"sign-up-password\">Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (passwordField.hasError('required') && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password is required</p-message>\n }\n @if (passwordField.hasError('minlength') && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password must be at least 6 characters long</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"confirm-password\"\n [formControl]=\"passwordConfirmationField\"\n [feedback]=\"false\"\n [styleClass]=\"(passwordConfirmationField.invalid && passwordConfirmationField.touched) || (signUpForm.hasError('confirmPassword') && passwordConfirmationField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"confirm-password\">Confirm Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (passwordConfirmationField.hasError('required') && passwordConfirmationField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password confirmation is required</p-message>\n }\n @if (passwordConfirmationField.hasError('minlength') && passwordConfirmationField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password confirmation must be at least 6 characters long</p-message>\n }\n @if (signUpForm.hasError('confirmPassword') && passwordConfirmationField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Passwords do not match</p-message>\n }\n </div>\n\n @if (successMessage) {\n <p-message class=\"rtsee-form-success-message\"\n severity=\"success\"\n variant=\"simple\"\n size=\"small\"\n >{{ successMessage }}</p-message>\n }\n\n @if (errorMessage) {\n <p-message class=\"rtsee-form-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ errorMessage }}</p-message>\n }\n <div class=\"rtsee-form-field-container\">\n <p-checkbox inputId=\"terms\" [binary]=\"true\" [formControl]=\"termsField\" />\n <label for=\"terms\" class=\"ml-2\">I agree to the <a href=\"#\" [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.PRIVACY_POLICY)\" class=\"auth-deep-blue-sm-medium\">terms of use</a></label>\n @if (termsField.hasError('required') && termsField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >You must accept the terms and conditions</p-message>\n }\n </div>\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Sign Up\"\n [disabled]=\"loadInProgress\"\n />\n @if (loadInProgress) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n\n <p class=\"rtsee-form-label\">\n <span>Already have an account?</span>\n <span> </span>\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"auth-deep-blue-sm-medium\"\n >Sign In</a>\n </p>\n</div>\n","import { Component } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { UtilsService } from '../services/utils.service';\nimport { ForgotPasswordForm, TypedReactiveForm } from '../types/auth-form.type';\nimport { Router, RouterLink } from '@angular/router';\nimport { RTSeeAuthConfiguration, AuthEndpointsKeys } from '@rtsee/auth';\nimport {\n RTSeeAuthService,\n IRtseeForgotPasswordRequestOptions,\n IRTSeeForgotPasswordResponse,\n} from '../services/auth.service';\nimport { NgOptimizedImage } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Message } from 'primeng/message';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\n@Component({\n selector: 'rtsee-forgot-password',\n templateUrl: './forgot-password.component.html',\n imports: [\n NgOptimizedImage,\n ReactiveFormsModule,\n RouterLink,\n ButtonModule,\n InputGroup,\n InputText,\n FloatLabel,\n Message,\n ProgressSpinner,\n ],\n standalone: true,\n})\nexport class ForgotPasswordComponent {\n public isLoading: boolean = false;\n public successMessage: string = '';\n public errorMessage: string = '';\n public readonly emailForm: FormGroup<TypedReactiveForm<ForgotPasswordForm>>;\n public readonly forgotPasswordFormKeys: Record<\n keyof ForgotPasswordForm,\n string\n >;\n authConfiguration: RTSeeAuthConfiguration;\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly router: Router,\n private authService: RTSeeAuthService,\n ) {\n this.emailForm = this.formBuilder.group<\n TypedReactiveForm<ForgotPasswordForm>\n >({\n email: this.formBuilder.nonNullable.control('', {\n validators: [Validators.required, Validators.email],\n }),\n });\n this.forgotPasswordFormKeys = UtilsService.getKeysAsValueObject(\n this.emailForm.getRawValue(),\n );\n this.authConfiguration = this.authService.rtseeAuth.authConfiguration;\n }\n\n get emailField(): FormControl<string> {\n return this.emailForm.get('email') as FormControl<string>;\n }\n\n public submitEmail(): void {\n this.emailForm.markAllAsTouched();\n\n if (this.emailForm.valid) {\n this.isLoading = true;\n this.errorMessage = '';\n this.successMessage = '';\n const email = this.emailForm.getRawValue().email;\n\n this.authService\n .forgotPassword({\n email\n } as IRtseeForgotPasswordRequestOptions)\n .subscribe({\n next: (response: IRTSeeForgotPasswordResponse) => {\n this.isLoading = false;\n this.successMessage =\n response.message || 'Password reset email sent successfully!';\n console.log('Password reset email sent successfully', response);\n void this.router.navigate(\n this.authConfiguration.getRoutePathSplit(\n this.AuthEndpointsKeys.SIGN_IN,\n ),\n );\n },\n error: (error) => {\n this.isLoading = false;\n this.errorMessage =\n error.error?.message ||\n 'Error sending password reset email. Please try again.';\n console.error('Error sending password reset email', error);\n },\n });\n }\n }\n\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n}\n","<div class=\"auth-container rtsee-form-container\">\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">Password Recovery</h2>\n <p class=\"auth-title-description\">Enter your email address to receive password reset instructions</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"emailForm\" (ngSubmit)=\"submitEmail()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"forgot-password-email\"\n pInputText\n [formControl]=\"emailField\"\n [class.p-invalid]=\"emailField.invalid && emailField.touched\"\n />\n <label for=\"forgot-password-email\">Email</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (emailField.hasError('required') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Email is required</p-message>\n }\n @if (emailField.hasError('email') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Please enter a valid email address</p-message>\n }\n </div>\n\n @if (successMessage) {\n <p-message class=\"rtsee-form-success-message\"\n severity=\"success\"\n variant=\"simple\"\n size=\"small\"\n >{{ successMessage }}</p-message>\n }\n\n @if (errorMessage) {\n <p-message class=\"rtsee-form-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ errorMessage }}</p-message>\n }\n\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Send\"\n [disabled]=\"isLoading\"\n />\n @if (isLoading) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n\n <p class=\"rtsee-form-label\">\n <span>Remember your password?</span>\n <span> </span>\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"auth-deep-blue-sm-medium\"\n >Sign In</a>\n </p>\n</div>\n","export enum FormErrorKey {\n required = 'required',\n email = 'email',\n minLength = 'minlength',\n maxLength = 'maxlength',\n requiredLength = 'requiredLength',\n passwordsMismatch = 'passwordsMismatch',\n}\n","import { Component, OnInit } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n ValidatorFn,\n Validators,\n ValidationErrors,\n} from '@angular/forms';\nimport { ResetPasswordForm, TypedReactiveForm } from '../types/auth-form.type';\nimport { UtilsService } from '../services/utils.service';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FormErrorKey } from '../../enums/form.enum';\nimport { COMMON_CONSTANTS } from '../../constans/common.const';\nimport {\n RTSeeAuthService,\n IRtseeResetPasswordRequestOptions,\n IRTSeeResetPasswordResponse,\n} from '../services/auth.service';\nimport { RTSeeAuthConfiguration, AuthEndpointsKeys } from '@rtsee/auth';\nimport { NgOptimizedImage } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { Password } from 'primeng/password';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Message } from 'primeng/message';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\n@Component({\n selector: 'rtsee-reset-password',\n templateUrl: './reset-password.component.html',\n imports: [\n NgOptimizedImage,\n ReactiveFormsModule,\n ButtonModule,\n InputGroup,\n Password,\n FloatLabel,\n Message,\n ProgressSpinner,\n ],\n standalone: true,\n})\nexport class ResetPasswordComponent implements OnInit {\n public isLoading: boolean = false;\n public successMessage: string = '';\n public errorMessage: string = '';\n public resetPasswordForm: FormGroup<TypedReactiveForm<ResetPasswordForm>>;\n public passwordFormKeys: Record<keyof ResetPasswordForm, string>;\n public hidePassword: Record<keyof ResetPasswordForm, boolean> = {\n password: true,\n passwordConfirm: true,\n };\n private token!: string;\n authConfiguration: RTSeeAuthConfiguration;\n\n constructor(\n private formBuilder: FormBuilder,\n private route: ActivatedRoute,\n private readonly router: Router,\n private authService: RTSeeAuthService,\n ) {\n this.resetPasswordForm = this.formBuilder.group(\n {\n password: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(COMMON_CONSTANTS.minPasswordLength),\n ],\n nonNullable: true,\n }),\n passwordConfirm: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(COMMON_CONSTANTS.minPasswordLength),\n ],\n nonNullable: true,\n }),\n },\n { validators: [this.passwordMatchValidator()] },\n );\n this.passwordFormKeys = UtilsService.getKeysAsValueObject(\n this.resetPasswordForm.value,\n );\n this.authConfiguration = this.authService.authConfiguration;\n }\n\n get passwordField(): FormControl<string> {\n return this.resetPasswordForm.get('password') as FormControl<string>;\n }\n\n get passwordConfirmField(): FormControl<string> {\n return this.resetPasswordForm.get('passwordConfirm') as FormControl<string>;\n }\n\n public ngOnInit(): void {\n this.token = this.route.snapshot.params['token'];\n }\n\n public resetPassword(): void {\n this.resetPasswordForm.markAllAsTouched();\n\n if (this.resetPasswordForm.valid) {\n this.isLoading = true;\n this.errorMessage = '';\n this.successMessage = '';\n const formValues = this.resetPasswordForm.getRawValue();\n\n this.authService\n .resetPassword({\n password: formValues.password,\n passwordConfirm: formValues.passwordConfirm,\n token: this.token,\n } as IRtseeResetPasswordRequestOptions)\n .subscribe({\n next: (response: IRTSeeResetPasswordResponse) => {\n this.isLoading = false;\n this.successMessage =\n response.message || 'Password reset successfully!';\n console.log('Password reset successfully', response);\n void this.router.navigate(\n this.authConfiguration.getRoutePathSplit(\n this.AuthEndpointsKeys.SIGN_IN,\n ),\n );\n },\n error: (error) => {\n this.isLoading = false;\n this.errorMessage =\n error.error?.message ||\n 'Error resetting password. Please try again.';\n console.error('Error resetting password', error);\n },\n });\n }\n }\n\n private passwordMatchValidator(): ValidatorFn {\n // @ts-ignore\n return (\n form: FormGroup<TypedReactiveForm<ResetPasswordForm>>,\n ): ValidationErrors | null => {\n const password = form.value.password;\n const passwordConfirm = form.value.passwordConfirm;\n if (password !== passwordConfirm) {\n if (form.controls.password.valid) {\n form.controls.password.setErrors({\n [FormErrorKey.passwordsMismatch]: true,\n });\n }\n if (form.controls.passwordConfirm.valid) {\n form.controls.passwordConfirm.setErrors({\n [FormErrorKey.passwordsMismatch]: true,\n });\n }\n return { [FormErrorKey.passwordsMismatch]: true };\n }\n if (form.controls.password.hasError(FormErrorKey.passwordsMismatch)) {\n form.controls.password.setErrors(null);\n }\n if (\n form.controls.passwordConfirm.hasError(FormErrorKey.passwordsMismatch)\n ) {\n form.controls.passwordConfirm.setErrors(null);\n }\n return null;\n };\n }\n\n protected readonly FormErrorKey = FormErrorKey;\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n}\n","<div class=\"auth-container rtsee-form-container\">\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">Password Reset</h2>\n <p class=\"auth-title-description\">Please enter a new password for your account.</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"resetPasswordForm\" (ngSubmit)=\"resetPassword()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"new-password\"\n [formControl]=\"passwordField\"\n [feedback]=\"false\"\n [class]=\"(passwordField.invalid && passwordField.touched) || (resetPasswordForm.hasError(FormErrorKey.passwordsMismatch) && passwordField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"new-password\">New Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!passwordField.valid && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"confirm-password\"\n [formControl]=\"passwordConfirmField\"\n [feedback]=\"false\"\n [class]=\"(passwordConfirmField.invalid && passwordConfirmField.touched) || (resetPasswordForm.hasError(FormErrorKey.passwordsMismatch) && passwordConfirmField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"confirm-password\">Confirm Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!passwordConfirmField.valid && passwordConfirmField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password confirmation is required</p-message>\n }\n @if (resetPasswordForm.hasError(FormErrorKey.passwordsMismatch) && passwordConfirmField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Passwords do not match</p-message>\n }\n </div>\n\n @if (successMessage) {\n <p-message class=\"rtsee-form-success-message\"\n severity=\"success\"\n variant=\"simple\"\n size=\"small\"\n >{{ successMessage }}</p-message>\n }\n\n @if (errorMessage) {\n <p-message class=\"rtsee-form-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ errorMessage }}</p-message>\n }\n\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Reset Password\"\n [disabled]=\"isLoading\"\n />\n @if (isLoading) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n\n <p class=\"rtsee-form-label\">\n <span>Remember your password?</span>\n <span> </span>\n <a href=\"#\" class=\"auth-deep-blue-sm-medium\">Sign In</a>\n </p>\n</div>\n","import { Component } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'rtsee-privacy-policy',\n templateUrl: './privacy-policy.component.html',\n styleUrls: ['./privacy-policy.component.scss'],\n imports: [ButtonModule, MessageModule],\n standalone: true,\n})\nexport class PrivacyPolicyComponent {}\n","<div class=\"privacy-policy-container\">\n <div class=\"policy-card\">\n <div class=\"header-section\">\n <div class=\"header-content\">\n <div class=\"flex justify-content-center align-items-center\">\n <h1>Terms of Use & Privacy Policy</h1>\n </div>\n </div>\n </div>\n\n <div class=\"content-section\">\n <p-message severity=\"info\" [closable]=\"false\" class=\"info-banner\">\n <ng-template pTemplate>\n <div class=\"p-message-content\">\n <p class=\"last-updated\"><strong>Last Updated:</strong> December 2024</p>\n <p>By using our services, you agree to the terms and conditions outlined in this document. Please read this Privacy Policy and Terms of Use carefully before using our platform.</p>\n </div>\n </ng-template>\n </p-message>\n\n <h2>1. Acceptance of Terms</h2>\n <p>By accessing and using this service, you accept and agree to be bound by the terms and provision of this agreement. If you do not agree to abide by the above, please do not use this service.</p>\n\n <h2>2. Privacy Policy</h2>\n\n <h3>2.1 Information We Collect</h3>\n <p>We collect information you provide directly to us, such as when you create an account, use our services, or contact us for support. This may include:</p>\n <ul>\n <li><strong>Personal Information:</strong> Name, email address, phone number, and other contact details</li>\n <li><strong>Account Information:</strong> Username, password, and profile information</li>\n <li><strong>Usage Data:</strong> Information about how you use our services, including pages visited, time spent, and features used</li>\n <li><strong>Device Information:</strong> IP address, browser type, operating system, and device identifiers</li>\n <li><strong>Cookies and Tracking:</strong> We use cookies and similar technologies to enhance your experience</li>\n </ul>\n\n <h3>2.2 How We Use Your Information</h3>\n <p>We use the information we collect to:</p>\n <ul>\n <li>Provide, maintain, and improve our services</li>\n <li>Process transactions and send related information</li>\n <li>Send technical notices, updates, security alerts, and support messages</li>\n <li>Respond to your comments, questions, and requests</li>\n <li>Monitor and analyze trends, usage, and activities</li>\n <li>Personalize and improve your experience</li>\n <li>Detect, investigate, and prevent fraudulent transactions and other illegal activities</li>\n </ul>\n\n <h3>2.3 Information Sharing and Disclosure</h3>\n <p>We do not sell, trade, or otherwise transfer your personal information to third parties without your consent, except in the following circumstances:</p>\n <ul>\n <li><strong>Service Providers:</strong> We may share information with trusted third-party service providers who assist us in operating our platform</li>\n <li><strong>Legal Requirements:</strong> We may disclose information when required by law or to protect our rights and safety</li>\n <li><strong>Business Transfers:</strong> In connection with any merger, sale of assets, or acquisition of all or a portion of our business</li>\n <li><strong>Consent:</strong> We may share information with your explicit consent</li>\n </ul>\n\n <h3>2.4 Data Security</h3>\n <p>We implement appropriate technical and organizational security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction. However, no method of transmission over the internet or electronic storage is 100% secure.</p>\n\n <h3>2.5 Data Retention</h3>\n <p>We retain your personal information for as long as necessary to provide our services and fulfill the purposes outlined in this privacy policy, unless a longer retention period is required or permitted by law.</p>\n\n <h3>2.6 Your Rights</h3>\n <p>Depending on your location, you may have certain rights regarding your personal information, including:</p>\n <ul>\n <li>The right to access and receive a copy of your personal information</li>\n <li>The right to rectify or update your personal information</li>\n <li>The right to erase your personal information</li>\n <li>The right to restrict or object to the processing of your personal information</li>\n <li>The right to data portability</li>\n <li>The right to withdraw consent at any time</li>\n </ul>\n\n <h2>3. Terms of Service</h2>\n\n <h3>3.1 User Accounts</h3>\n <p>To access certain features of our service, you may be required to create an account. You are responsible for:</p>\n <ul>\n <li>Maintaining the confidentiality of your account credentials</li>\n <li>All activities that occur under your account</li>\n <li>Notifying us immediately of any unauthorized use of your account</li>\n <li>Providing accurate and up-to-date information</li>\n </ul>\n\n <h3>3.2 Acceptable Use</h3>\n <p>You agree not to use our service for any unlawful purpose or any purpose prohibited under this clause. You may not use our service in any manner that could damage, disable, overburden, or impair our servers or networks.</p>\n\n <h3>3.3 Prohibited Activities</h3>\n <p>The following activities are prohibited:</p>\n <ul>\n <li>Violating any applicable laws or regulations</li>\n <li>Transmitting or procuring the sending of any unsolicited or unauthorized advertising</li>\n <li>Attempting to gain unauthorized access to any portion of our service</li>\n <li>Interfering with or disrupting the service or servers connected to the service</li>\n <li>Using any automated system to access the service for any purpose</li>\n <li>Impersonating any person or entity or misrepresenting your affiliation with a person or entity</li>\n </ul>\n\n <h3>3.4 Intellectual Property</h3>\n <p>The service and its original content, features, and functionality are and will remain the exclusive property of our company and its licensors. The service is protected by copyright, trademark, and other laws.</p>\n\n <h3>3.5 Termination</h3>\n <p>We may terminate or suspend your account and bar access to the service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever, including without limitation if you breach the Terms.</p>\n\n <h3>3.6 Disclaimer</h3>\n <p>The information on this service is provided on an \"as is\" basis. To the fullest extent permitted by law, this company excludes all representations, warranties, conditions and terms relating to our service and the use of this service.</p>\n\n <h3>3.7 Limitation of Liability</h3>\n <p>In no event shall our company, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from your use of the service.</p>\n\n <h2>4. Cookies and Tracking Technologies</h2>\n <p>We use cookies and similar tracking technologies to track activity on our service and hold certain information. Cookies are files with a small amount of data which may include an anonymous unique identifier. You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent.</p>\n\n <h2>5. Third-Party Services</h2>\n <p>Our service may contain links to third-party websites or services that are not owned or controlled by us. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party websites or services.</p>\n\n <h2>6. Children's Privacy</h2>\n <p>Our service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from children under 13. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact us.</p>\n\n <h2>7. International Data Transfers</h2>\n <p>Your information may be transferred to and processed in countries other than your own. We ensure that such transfers comply with applicable data protection laws and implement appropriate safeguards to protect your personal information.</p>\n\n <h2>8. Changes to This Policy</h2>\n <p>We reserve the right to update or change our Privacy Policy and Terms of Use at any time. We will notify you of any changes by posting the new Privacy Policy and Terms of Use on this page and updating the \"Last Updated\" date.</p>\n\n <div class=\"contact-section\">\n <h2>9. Contact Information</h2>\n <p>If you have any questions about this Privacy Policy and Terms of Use, please contact us:</p>\n <ul>\n <li><strong>Email:</strong> [Your Email Address]</li>\n <li><strong>Address:</strong> [Your Company Address]</li>\n <li><strong>Phone:</strong> [Your Contact Number]</li>\n </ul>\n </div>\n\n <div class=\"footer-section\">\n <p>This document was last updated on December 2024</p>\n </div>\n </div>\n </div>\n</div>\n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { SignInComponent } from '../sign-in/sign-in.component';\nimport { SignUpComponent } from '../sign-up/sign-up.component';\nimport { ForgotPasswordComponent } from '../forgot-password/forgot-password.component';\nimport { ResetPasswordComponent } from '../reset-password/reset-password.component';\nimport { PrivacyPolicyComponent } from '../privacy-policy/privacy-policy.component';\nimport { RTSeeAuthService } from '../services/auth.service';\nimport { RTSeeAuth } from '@rtsee/auth';\nimport { AuthEndpointsKeys, DEFAULT_ROUTE_NAMES } from '@rtsee/auth';\n\n@Component({\n selector: 'rtsee-auth',\n templateUrl: './auth.component.html',\n imports: [\n SignInComponent,\n SignUpComponent,\n ForgotPasswordComponent,\n ResetPasswordComponent,\n PrivacyPolicyComponent,\n ],\n standalone: true,\n})\nexport class RTSeeAuthComponent implements OnInit {\n @Input() auth!: RTSeeAuth<any>;\n\n activeComponent:\n | 'reset-password'\n | 'sign-up'\n | 'sign-in'\n | 'forgot-password'\n | 'privacy-policy' = 'sign-in';\n\n constructor(public authService: RTSeeAuthService) {\n if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.SIGN_IN],\n )\n ) {\n this.activeComponent = 'sign-in';\n } else if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.SIGN_UP],\n )\n ) {\n this.activeComponent = 'sign-up';\n } else if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.FORGOT_PASSWORD],\n )\n ) {\n this.activeComponent = 'forgot-password';\n } else if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.RESET_PASSWORD].split('/')[0],\n )\n ) {\n this.activeComponent = 'reset-password';\n } else if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.PRIVACY_POLICY],\n )\n ) {\n this.activeComponent = 'privacy-policy';\n }\n }\n\n ngOnInit() {\n this.authService.init(this.auth);\n }\n}\n","<div class=\"rtsee-auth\">\n @if (authService.rtseeAuth) {\n @if (activeComponent === 'sign-in') {\n <rtsee-sign-in></rtsee-sign-in>\n }\n @if (activeComponent === 'sign-up') {\n <rtsee-sign-up></rtsee-sign-up>\n }\n @if (activeComponent === 'forgot-password') {\n <rtsee-forgot-password></rtsee-forgot-password>\n }\n @if (activeComponent === 'reset-password') {\n <rtsee-reset-password></rtsee-reset-password>\n }\n @if (activeComponent === 'privacy-policy') {\n <rtsee-privacy-policy></rtsee-privacy-policy>\n }\n }\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-rtsee-peers-list',\n templateUrl: './rtsee-peers-list.component.html',\n styleUrls: ['./rtsee-peers-list.component.scss'],\n standalone: true,\n})\nexport class RtseePeersListComponent {}\n","<p>rtsee-peers-list works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard-client',\n templateUrl: './rtsee-events-dashboard-client.component.html',\n standalone: true,\n})\nexport class RtseeEventsDashboardClientComponent {}\n","<p>rtsee-events-dashboard-client works!</p>\n","export enum MainMenuPanels {\n HOME = 'home',\n CONTACTS_SELECT = 'contacts-select',\n MANAGE_CHAT = 'manage-chat',\n}\n\nexport interface IMainMenuState {\n activePanel: MainMenuPanels;\n}\n\nexport const DEFAULT_MAIN_MENU_STATE = MainMenuPanels.HOME;\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { RTSeeMessengerSearch } from '@rtsee/messenger';\nimport { PreloaderComponent } from '../../../../../common/components/preloader/preloader.component';\nimport { NgForOf } from '@angular/common';\n\n@Component({\n selector: 'rtsee-search',\n templateUrl: './search.component.html',\n imports: [ReactiveFormsModule, PreloaderComponent, NgForOf],\n standalone: true,\n})\nexport class SearchComponent implements OnInit, OnDestroy {\n queryControl = new FormControl();\n queryCtrlSub?: Subscription;\n\n @Input() search!: RTSeeMessengerSearch;\n\n ngOnInit(): void {\n this.queryCtrlSub = this.queryControl.valueChanges\n .pipe(debounceTime(200))\n .subscribe((value: string) => this.search.onQueryChange(value));\n }\n\n ngOnDestroy() {\n if (this.queryCtrlSub) {\n this.queryCtrlSub.unsubscribe();\n }\n }\n}\n","<div class=\"rtsee-messenger-search\">\n <input type=\"text\"\n [formControl]=\"queryControl\"\n class=\"rtsee-messenger-search-input\"\n placeholder=\"Search\"/>\n</div>\n\n<div class=\"rtsee-messenger-search-results\">\n <rtsee-preloader [diameter]=\"50\"\n *ngIf=\"search.searchInProgress\"\n ></rtsee-preloader>\n <p>Chats</p>\n <div class=\"rtsee-messenger-search-results-chats\">\n <div *ngFor=\"let chat of search.results.chats\"\n class=\"rtsee-messenger-search-results-chat-wrapper\">\n <p>{{chat.name}}</p>\n </div>\n </div>\n <p>Messages</p>\n <div class=\"rtsee-messenger-search-results-messages\">\n <div *ngFor=\"let message of search.results.messages\" class=\"rtsee-messenger-search-results-message-wrapper\">\n <p>{{message.chatName || message.senderName }}</p>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { IMainMenuState, MainMenuPanels } from '../models/MainMenuState';\n\n@Component({\n selector: 'rtsee-manage-chat',\n templateUrl: './manage-chat.component.html',\n styleUrls: ['./manage-chat.component.scss'],\n standalone: true,\n})\nexport class ManageChatComponent {\n @Input() messenger!: RTSeeMessenger;\n @Input() menuState!: IMainMenuState;\n\n onInviteContactsClicked() {\n this.menuState.activePanel = MainMenuPanels.CONTACTS_SELECT;\n }\n}\n","<div class=\"rtsee-messenger-manage-chat\">\n <p>We are going to manage chat here</p>\n <button (click)=\"onInviteContactsClicked()\">Invite Contacts</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { IMainMenuState } from '../models/MainMenuState';\nimport { RTSeeMessengerSearch } from '@rtsee/messenger';\nimport { SearchComponent } from '../search/search.component';\n\n@Component({\n selector: 'rtsee-contacts-multiselect',\n templateUrl: './contacts-multiselect.component.html',\n styleUrls: ['./contacts-multiselect.component.scss'],\n imports: [SearchComponent],\n standalone: true,\n})\nexport class ContactsMultiselectComponent {\n @Input() menuState!: IMainMenuState;\n @Input() search!: RTSeeMessengerSearch;\n}\n","<div class=\"rtsee-messenger-contacts-multiselect\">\n <rtsee-search [search]=\"search\"></rtsee-search>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger, RTSeeMessengerSearch } from '@rtsee/messenger';\nimport {\n DEFAULT_MAIN_MENU_STATE,\n IMainMenuState,\n MainMenuPanels,\n} from './components/models/MainMenuState';\nimport { NgIf } from '@angular/common';\nimport { SearchComponent } from './components/search/search.component';\nimport { ManageChatComponent } from './components/manage-chat/manage-chat.component';\nimport { ContactsMultiselectComponent } from './components/contacts-multiselect/contacts-multiselect.component';\n\n@Component({\n selector: 'rtsee-main-menu',\n templateUrl: './main-menu.component.html',\n imports: [\n NgIf,\n SearchComponent,\n ManageChatComponent,\n ContactsMultiselectComponent,\n ],\n standalone: true,\n})\nexport class MainMenuComponent {\n @Input() search!: RTSeeMessengerSearch;\n @Input() messenger!: RTSeeMessenger;\n\n readonly MainMenuPanels = MainMenuPanels;\n\n state: IMainMenuState = {\n activePanel: DEFAULT_MAIN_MENU_STATE,\n };\n\n onNewGroupClicked() {\n this.state.activePanel = MainMenuPanels.CONTACTS_SELECT;\n }\n\n onNewChannelClicked() {\n this.state.activePanel = MainMenuPanels.MANAGE_CHAT;\n }\n}\n","<div class=\"rtsee-messenger-main-menu\">\n <div class=\"rtsee-messenger-main-menu-home\" *ngIf=\"state.activePanel === MainMenuPanels.HOME\">\n <ul class=\"rtsee-messenger-controls\">\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewGroupClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">people</span>\n </div>\n <span>New Group</span>\n </div>\n </li>\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewChannelClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">campaign</span>\n </div>\n <span>New Channel</span>\n </div>\n </li>\n </ul>\n <rtsee-search [search]=\"search\" ></rtsee-search>\n </div>\n\n <rtsee-manage-chat *ngIf=\"state.activePanel === MainMenuPanels.MANAGE_CHAT\"\n [messenger]=\"messenger\"\n [menuState]=\"state\"\n ></rtsee-manage-chat>\n <rtsee-contacts-multiselect [search]=\"search\"\n [menuState]=\"state\"\n *ngIf=\"state.activePanel === MainMenuPanels.CONTACTS_SELECT\"\n ></rtsee-contacts-multiselect>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'rtsee-vendors',\n templateUrl: './vendors.component.html',\n standalone: true,\n})\nexport class VendorsComponent {}\n","<p>vendors works!</p>\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { RTSeeControlsComponent } from './components/rtsee/rtsee-controls/rtsee-controls.component';\nimport { CommonModule, NgOptimizedImage } from '@angular/common';\nimport { RtseePeerComponent } from './components/rtsee-peer/rtsee-peer.component';\nimport { RtseeSoundbarComponent } from './components/rtsee-soundbar/rtsee-soundbar.component';\nimport { RtseePeersListComponent } from './components/rtsee-peers-list/rtsee-peers-list.component';\nimport { RtseeSettingsComponent } from './components/rtsee-settings/rtsee-settings.component';\nimport { MessengerComponent } from './components/rtsee-messenger/messenger/messenger.component';\nimport { ChatComponent } from './components/rtsee-messenger/chat/chat.component';\nimport { MessageComponent } from './components/rtsee-messenger/message/message.component';\nimport { ChatsListComponent } from './components/rtsee-messenger/chats-list/chats-list.component';\nimport { MessagesListComponent } from './components/rtsee-messenger/messages-list/messages-list.component';\nimport { ChatThumbnailComponent } from './components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component';\nimport { ChatInputComponent } from './components/rtsee-messenger/chat-input/chat-input.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MessengerHeaderComponent } from './components/rtsee-messenger/messenger-header/messenger-header.component';\nimport { RtseeEventsDashboardComponent } from './components/rtsee-events-dashboard/rtsee-events-dashboard.component';\nimport { RtseeEventsDashboardClientComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component';\nimport { RtseeEventsDashboardClientThumbnailComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component';\nimport { WidgetDirective } from './directives/widget.directive';\nimport { CallWidgetComponent } from './components/rtsee-messenger/message-widgets/call-widget/call-widget.component';\nimport { AutosizeModule } from 'ngx-autosize';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { MainMenuComponent } from './components/rtsee-messenger/main-menu/main-menu.component';\nimport { MessageTimeAndStatusComponent } from './components/rtsee-messenger/message/components/message-time-and-status/message-time-and-status.component';\nimport { PreloaderComponent } from './common/components/preloader/preloader.component';\nimport { FormComponent } from './common/components/forms/form/form.component';\nimport { SearchComponent } from './components/rtsee-messenger/main-menu/components/search/search.component';\nimport { ManageChatComponent } from './components/rtsee-messenger/main-menu/components/manage-chat/manage-chat.component';\nimport { ContactsMultiselectComponent } from './components/rtsee-messenger/main-menu/components/contacts-multiselect/contacts-multiselect.component';\nimport { ShaveDirective } from './directives/shave.directive';\nimport { ProfileComponent } from './components/rtsee-messenger/profile/profile.component';\nimport { EventThumbnailComponent } from './components/rtsee-events-dashboard/components/event-thumbnail/event-thumbnail.component';\nimport { RtseeEventsDashboardSessionComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-session/rtsee-events-dashboard-session.component';\nimport { RTSeeContainerComponent } from './components/rtsee-container/rtsee-container.component';\nimport { RTSeeConferenceComponent } from './components/rtsee/rtsee-conference.component';\nimport { PresentationComponent } from './components/rtsee-presentation/presentation/presentation.component';\nimport { StoryPlayerComponent } from './components/rtsee-presentation/story-player/story-player.component';\nimport { SlideComponent } from './components/rtsee-presentation/slide/slide.component';\nimport { StoryThumbnailComponent } from './components/rtsee-presentation/story-thumbnail/story-thumbnail.component';\nimport { SignUpComponent } from './components/rtsee-auth/sign-up/sign-up.component';\nimport { SignInComponent } from './components/rtsee-auth/sign-in/sign-in.component';\nimport { ForgotPasswordComponent } from './components/rtsee-auth/forgot-password/forgot-password.component';\nimport { VendorsComponent } from './components/rtsee-auth/vendors/vendors.component';\nimport { RTSeeAuthComponent } from './components/rtsee-auth/auth/auth.component';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { ResetPasswordComponent } from './components/rtsee-auth/reset-password/reset-password.component';\nimport { PresentationHeaderComponent } from './components/rtsee-presentation/presentation-header/presentation-header.component';\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { provideAnimationsAsync } from '@angular/platform-browser/animations/async';\nimport { providePrimeNG } from 'primeng/config';\nimport Aura from '@primeuix/themes/aura';\nimport { PaymentProductSnippetComponent } from './components/rtsee-messenger/payment-product-snippet/payment-product-snippet.component';\n\n@NgModule({\n providers: [\n provideAnimationsAsync(),\n providePrimeNG({\n theme: {\n preset: Aura,\n },\n }),\n ],\n declarations: [],\n imports: [\n RTSeeAuthComponent,\n VendorsComponent,\n ForgotPasswordComponent,\n SignInComponent,\n SignUpComponent,\n RtseeEventsDashboardSessionComponent,\n EventThumbnailComponent,\n ShaveDirective,\n ContactsMultiselectComponent,\n ManageChatComponent,\n CallWidgetComponent,\n WidgetDirective,\n RtseeEventsDashboardClientComponent,\n ResetPasswordComponent,\n RtseeEventsDashboardClientThumbnailComponent,\n RtseePeersListComponent,\n ChatComponent,\n MessageComponent,\n MessagesListComponent,\n ChatThumbnailComponent,\n ChatInputComponent,\n RtseeEventsDashboardComponent,\n MessengerComponent,\n RTSeeControlsComponent,\n RTSeeContainerComponent,\n RTSeeConferenceComponent,\n RtseePeerComponent,\n RtseeSoundbarComponent,\n RtseeSettingsComponent,\n MessengerHeaderComponent,\n ChatsListComponent,\n ProfileComponent,\n MainMenuComponent,\n MessageTimeAndStatusComponent,\n PreloaderComponent,\n SearchComponent,\n PresentationComponent,\n StoryPlayerComponent,\n SlideComponent,\n StoryThumbnailComponent,\n PresentationHeaderComponent,\n PaymentProductSnippetComponent,\n CommonModule,\n ReactiveFormsModule,\n AutosizeModule,\n InfiniteScrollModule,\n FormsModule,\n NgOptimizedImage,\n RouterLink,\n RouterLinkActive,\n NgxCaptchaModule,\n FormComponent,\n ],\n exports: [\n RTSeeConferenceComponent,\n MessengerComponent,\n RtseeEventsDashboardComponent,\n RTSeeContainerComponent,\n PresentationComponent,\n RTSeeAuthComponent,\n PaymentProductSnippetComponent,\n FormComponent,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class RTSeeModule {}\n","/*\n * Public API Surface of ngx\n */\n\nexport * from './lib/ngx.service';\nexport * from './lib/components/rtsee/rtsee-controls/rtsee-controls.component';\nexport * from './lib/components/rtsee-settings/rtsee-settings.component';\nexport * from './lib/components/rtsee/rtsee-conference.component';\nexport * from './lib/components/rtsee-peer/rtsee-peer.component';\nexport * from './lib/components/rtsee-messenger/profile/profile.component';\nexport * from './lib/components/rtsee-messenger/messenger/messenger.component';\nexport * from './lib/components/rtsee-messenger/payment-product-snippet/payment-product-snippet.component';\nexport * from './lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component';\nexport * from './lib/components/rtsee-container/rtsee-container.component';\nexport * from './lib/components/rtsee-presentation/presentation/presentation.component';\nexport * from './lib/components/rtsee-presentation/interactive-story-editor/interactive-story-editor.component';\nexport * from './lib/components/rtsee-presentation/interactive-story-editor/story-elements-section/story-elements-section.component';\nexport * from './lib/components/rtsee-presentation/illustrator/illustrator.component';\nexport * from './lib/components/rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nexport * from './lib/components/rtsee-tags/rtsee-tag-manage/rtsee-tag-manage.component';\nexport * from './lib/components/rtsee-tags/rtsee-tag-groups-manage/rtsee-tag-groups-manage.component';\nexport * from './lib/components/rtsee-tags/rtsee-tag-group-manage/rtsee-tag-group-manage.component';\nexport * from './lib/components/rtsee-entities/entities-configurations-list/entities-configurations-list.component';\nexport * from './lib/components/rtsee-entities/manage-entity-configuration/manage-entity-configuration.component';\nexport * from './lib/components/rtsee-entities/entities-list/entities-list.component';\nexport * from './lib/components/rtsee-entities/manage-entity/manage-entity.component';\nexport * from './lib/components/rtsee-entities/rtsee-entity-comments/rtsee-entity-comments.component';\nexport * from './lib/components/rtsee-entities/rtsee-entity-tags/rtsee-entity-tags.component';\nexport * from './lib/components/rtsee-entities/rtsee-entity-preview/rtsee-entity-preview.component';\nexport * from './lib/components/rtsee-auth/auth/auth.component';\nexport * from './lib/ngx.module';\nexport * from './lib/common/components/forms/form/form.component';\nexport * from './lib/services/gtag.service';\nexport * from './lib/services/workflow-steps.service';\nexport * from './lib/components/rtsee-messenger/message-widgets/rtsee-task/rtsee-task.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.RTSeeAuthService","i2","i1.DefaultImagesService","i1.TimeFormatHelperService","i1.WorkflowStepsService","i1.MessageWidgetsService","i2.TimeFormatHelperService","i1.PaymentsService","DOCUMENT","i2.GtagService","i1.EventsWidgetsService","i2.DefaultImagesService","i3.RTSeeAuthService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rtsee-ngx.mjs","sources":["../../../projects/ngx/src/lib/ngx.service.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-controls/rtsee-controls.component.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-controls/rtsee-controls.component.html","../../../projects/ngx/src/lib/components/rtsee-settings/rtsee-settings.component.ts","../../../projects/ngx/src/lib/components/rtsee-settings/rtsee-settings.component.html","../../../projects/ngx/src/lib/components/rtsee-soundbar/rtsee-soundbar.component.ts","../../../projects/ngx/src/lib/components/rtsee-soundbar/rtsee-soundbar.component.html","../../../projects/ngx/src/lib/components/rtsee-peer/rtsee-peer.component.ts","../../../projects/ngx/src/lib/components/rtsee-peer/rtsee-peer.component.html","../../../projects/ngx/src/lib/components/rtsee/rtsee-conference.component.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-conference.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/services/auth.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/profile/profile.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/profile/profile.component.html","../../../projects/ngx/src/lib/common/components/preloader/preloader.component.ts","../../../projects/ngx/src/lib/common/components/preloader/preloader.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-member/chat-member.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-member/chat-member.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-members-list/chat-members-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-members-list/chat-members-list.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/text-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/text-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/textarea-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/textarea-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/checkbox-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/checkbox-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/radio-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/radio-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/number-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/number-field.component.html","../../../projects/ngx/src/lib/common/components/autocomplete/autocomplete.component.ts","../../../projects/ngx/src/lib/common/components/autocomplete/autocomplete.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/autocomplete-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/autocomplete-field.component.html","../../../projects/ngx/src/lib/common/components/recursive-select/recursive-select.component.ts","../../../projects/ngx/src/lib/common/components/recursive-select/recursive-select.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/recursive-select-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/recursive-select-field.component.html","../../../projects/ngx/src/lib/common/components/cropper/cropper.component.ts","../../../projects/ngx/src/lib/common/components/cropper/cropper.component.html","../../../projects/ngx/src/lib/common/components/uploader/uploader.component.ts","../../../projects/ngx/src/lib/common/components/uploader/uploader.component.html","../../../projects/ngx/src/lib/common/components/image-uploader/image-uploader.component.ts","../../../projects/ngx/src/lib/common/components/image-uploader/image-uploader.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/image-uploader-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/image-uploader-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/dynamic-fields-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/dynamic-fields-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/field-definition-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/field-definition-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/select-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/select-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/location-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/location-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/time-slot-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/time-slot-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/time-slots-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/time-slots-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/entity-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/entity-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/entities-list-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/entities-list-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/date-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/date-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/varchar-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/varchar-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/float-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/field-sub-types/float-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form-field/form-field.component.ts","../../../projects/ngx/src/lib/common/components/forms/form-field/form-field.component.html","../../../projects/ngx/src/lib/common/components/forms/form/form.component.ts","../../../projects/ngx/src/lib/common/components/forms/form/form.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/add-chat-member/add-chat-member.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/add-chat-member/add-chat-member.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/edit-agent-member/edit-agent-member.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/edit-agent-member/edit-agent-member.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-members.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-members/chat-members.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-info/chat-info.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-info/chat-info.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-chat-info/manage-chat-info.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-chat-info/manage-chat-info.component.html","../../../projects/ngx/src/lib/services/default-images.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger-header/messenger-header.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger-header/messenger-header.component.html","../../../projects/ngx/src/lib/services/time-format-helper.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/components/message-time-and-status/message-time-and-status.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/components/message-time-and-status/message-time-and-status.component.html","../../../projects/ngx/src/lib/components/constans/common.const.ts","../../../projects/ngx/src/lib/directives/shave.directive.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chats-list/chats-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chats-list/chats-list.component.html","../../../projects/ngx/src/lib/directives/widget.directive.ts","../../../projects/ngx/src/lib/common/components/rating/rating.component.ts","../../../projects/ngx/src/lib/common/components/rating/rating.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.html","../../../projects/ngx/src/lib/common/components/cost-display/cost-display.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/media-widget/media-widget.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/media-widget/media-widget.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/agentic-text-response/agentic-text-response.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/agentic-text-response/agentic-text-response.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/rtsee-task/rtsee-task.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/rtsee-task/rtsee-task.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/workflow-task-step/workflow-task-step.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/storyteller-form-step/storyteller-form-step.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/storyteller-form-step/storyteller-form-step.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/storyteller-story-link-step/storyteller-story-link-step.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/storyteller-story-link-step/storyteller-story-link-step.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/story-translator-form-step/story-translator-form-step.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-steps/story-translator-form-step/story-translator-form-step.component.html","../../../projects/ngx/src/lib/services/workflow-steps.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/rts-workflow/rts-workflow.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/rts-workflow/rts-workflow.component.html","../../../projects/ngx/src/lib/services/message-widgets.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/message.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/message.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/messages-list/messages-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messages-list/messages-list.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-member-suggestions/chat-member-suggestions.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-member-suggestions/chat-member-suggestions.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/tool-use-request/tool-use-request.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/tool-use-request/tool-use-request.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/workflow-suggestions/workflow-suggestions.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-input/chat-input.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-input/chat-input.component.html","../../../projects/ngx/src/lib/common/directives/viewport-observer.directive.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat/chat.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat/chat.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-profile/manage-profile.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-profile/manage-profile.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-product-snippet/payment-product-snippet.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-product-snippet/payment-product-snippet.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/services/payments.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-page/payment-page.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-page/payment-page.component.html","../../../projects/ngx/src/lib/services/gtag.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-validation-page/payment-validation-page.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/payment-validation-page/payment-validation-page.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-plan/manage-plan.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/manage-plan/manage-plan.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger/messenger.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger/messenger.component.html","../../../projects/ngx/src/lib/services/events-widgets.service.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/event-thumbnail/event-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/event-thumbnail/event-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-session/rtsee-events-dashboard-session.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-session/rtsee-events-dashboard-session.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/join-call/join-call.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/join-call/join-call.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation-header/presentation-header.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation-header/presentation-header.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/story-thumbnail/story-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/story-thumbnail/story-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/slide/slide.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/slide/slide.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/story-player/story-player.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/story-player/story-player.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-slides/manage-slides.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-slides/manage-slides.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-slide/manage-slide.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-slide/manage-slide.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-story.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-story/manage-story.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/interactive-story-editor/story-elements-section/story-elements-section.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/interactive-story-editor/story-elements-section/story-elements-section.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/illustrator/illustrator.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/illustrator/illustrator.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/interactive-story-editor/interactive-story-editor.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/interactive-story-editor/interactive-story-editor.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-stories/manage-stories.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-stories/manage-stories.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-category/manage-category.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-category/manage-category.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-categories/manage-categories.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-categories/manage-categories.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-label/manage-label.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-label/manage-label.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-labels/manage-labels.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-labels/manage-labels.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-topic/manage-topic.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-topic/manage-topic.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-topics/manage-topics.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/manage-topics/manage-topics.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/presentations-dashboard/presentations-dashboard.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/manage/presentations-dashboard/presentations-dashboard.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation-settings/presentation-settings.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation-settings/presentation-settings.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-comments/rtsee-entity-comments.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-comments/rtsee-entity-comments.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-tags/rtsee-entity-tags.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-tags/rtsee-entity-tags.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rate-input/rate-input.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rate-input/rate-input.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rate-item/rate-item.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rate-item/rate-item.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rater/rater.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rater/rater.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rates-list/rates-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rates-list/rates-list.component.html","../../../projects/ngx/src/lib/components/rtsee-rates/rating-section/rating-section.component.ts","../../../projects/ngx/src/lib/components/rtsee-rates/rating-section/rating-section.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-preview/rtsee-entity-preview.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/rtsee-entity-preview/rtsee-entity-preview.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/story-details/story-details.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/story-details/story-details.component.html","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation/presentation.component.ts","../../../projects/ngx/src/lib/components/rtsee-presentation/presentation/presentation.component.html","../../../projects/ngx/src/lib/components/rtsee-container/rtsee-nav/rtsee-nav.component.ts","../../../projects/ngx/src/lib/components/rtsee-container/rtsee-nav/rtsee-nav.component.html","../../../projects/ngx/src/lib/components/rtsee-container/rtsee-container.component.ts","../../../projects/ngx/src/lib/components/rtsee-container/rtsee-container.component.html","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component.ts","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component.html","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-manage/rtsee-tag-manage.component.ts","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-manage/rtsee-tag-manage.component.html","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-groups-manage/rtsee-tag-groups-manage.component.ts","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-groups-manage/rtsee-tag-groups-manage.component.html","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-group-manage/rtsee-tag-group-manage.component.ts","../../../projects/ngx/src/lib/components/rtsee-tags/rtsee-tag-group-manage/rtsee-tag-group-manage.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/entities-configurations-list/entities-configurations-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/entities-configurations-list/entities-configurations-list.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/manage-rating-configuration/manage-rating-configuration.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/manage-rating-configuration/manage-rating-configuration.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/rating-configurations-list/rating-configurations-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/rating-configurations-list/rating-configurations-list.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/manage-entity-configuration/manage-entity-configuration.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/manage-entity-configuration/manage-entity-configuration.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/entities-list/entities-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/entities-list/entities-list.component.html","../../../projects/ngx/src/lib/components/rtsee-entities/manage-entity/manage-entity.component.ts","../../../projects/ngx/src/lib/components/rtsee-entities/manage-entity/manage-entity.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/sign-in/sign-in.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/sign-in/sign-in.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/services/utils.service.ts","../../../projects/ngx/src/lib/components/rtsee-auth/validators/form-fields-validators.ts","../../../projects/ngx/src/lib/components/rtsee-auth/sign-up/sign-up.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/sign-up/sign-up.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/forgot-password/forgot-password.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/forgot-password/forgot-password.component.html","../../../projects/ngx/src/lib/components/enums/form.enum.ts","../../../projects/ngx/src/lib/components/rtsee-auth/reset-password/reset-password.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/reset-password/reset-password.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/privacy-policy/privacy-policy.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/privacy-policy/privacy-policy.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/auth/auth.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/auth/auth.component.html","../../../projects/ngx/src/lib/components/rtsee-peers-list/rtsee-peers-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-peers-list/rtsee-peers-list.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/models/MainMenuState.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/search/search.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/search/search.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/manage-chat/manage-chat.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/manage-chat/manage-chat.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/contacts-multiselect/contacts-multiselect.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/components/contacts-multiselect/contacts-multiselect.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/main-menu.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/main-menu/main-menu.component.html","../../../projects/ngx/src/lib/components/rtsee-auth/vendors/vendors.component.ts","../../../projects/ngx/src/lib/components/rtsee-auth/vendors/vendors.component.html","../../../projects/ngx/src/lib/ngx.module.ts","../../../projects/ngx/src/public-api.ts","../../../projects/ngx/src/rtsee-ngx.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxService {\n lol: string;\n constructor() {\n this.lol = 'lol';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeConference } from '@rtsee/conference';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'ngx-rtsee-controls',\n templateUrl: './rtsee-controls.component.html',\n styleUrls: ['./rtsee-controls.component.scss'],\n imports: [NgClass],\n standalone: true,\n})\nexport class RTSeeControlsComponent {\n @Input() rtsee!: RTSeeConference;\n @Input() fullScreenMode?: boolean;\n\n onPresentClicked() {\n return this.rtsee.isPresenter\n ? this.rtsee.stopScreenShare()\n : this.rtsee.startScreenShare();\n }\n}\n","<div class=\"rtsee-controls\" [ngClass]=\"{'rtsee-full-screen-controls' : fullScreenMode }\">\n <div class=\"rtsee-bottom-panel\">\n <div class=\"mic rtsee-buttons-container\">\n @if (rtsee.microphone) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"this.rtsee.disableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_none</span>\n </button>\n }\n @if (!rtsee.microphone) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\" (click)=\"this.rtsee.enableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_off</span>\n </button>\n }\n </div>\n\n <div class=\"video-camera rtsee-buttons-container\">\n @if (rtsee.camera) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.disableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam</span>\n </button>\n }\n @if (!rtsee.camera) {\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.enableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam_off</span>\n </button>\n }\n </div>\n <div class=\"present rtsee-buttons-container\"\n [ngClass]=\"{'rtsee-present-button-container': rtsee.isPresenter}\"\n >\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"onPresentClicked()\"\n >\n <span class=\"material-icons-outlined\">present_to_all</span>\n </button>\n </div>\n <div class=\"call-end rtsee-buttons-container\">\n <button class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.end()\"\n >\n <span class=\"material-icons-outlined\">call_end</span>\n </button>\n </div>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeConference } from '@rtsee/conference';\nimport { NgClass } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Select } from 'primeng/select';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Button } from 'primeng/button';\n\n@Component({\n selector: 'ngx-rtsee-settings',\n templateUrl: './rtsee-settings.component.html',\n styleUrls: ['./rtsee-settings.component.scss'],\n imports: [NgClass, FormsModule, Select, FloatLabel, Button],\n standalone: true,\n})\nexport class RtseeSettingsComponent implements OnInit {\n @Input() rtSee!: RTSeeConference;\n @Input() fullScreenMode!: boolean;\n constructor() {}\n\n ngOnInit(): void {\n this.refreshSelectOptions();\n }\n\n refreshSelectOptions() {\n void this.rtSee.refreshMediaDevicesList();\n }\n\n audioInputChanged() {\n this.rtSee.setAudioInputDevice();\n }\n\n audioOutputChanged() {\n this.rtSee.setAudioOutputDevice();\n }\n\n videoInputChanged() {\n this.rtSee.setVideoInputDevice();\n }\n}\n","<div class=\"rtsee-settings\" [ngClass]=\"{'rtsee-full-screen-settings' : fullScreenMode}\">\n <div class=\"rtsee-devices rtsee-form-container\">\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.audioInputDevices\"\n [(ngModel)]=\"rtSee.audioInputDeviceId\"\n (ngModelChange)=\"audioInputChanged()\"\n inputId=\"mic_input\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"mic_input\">Microphone</label>\n </p-floatlabel>\n </div>\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.audioOutputDevices\"\n [(ngModel)]=\"rtSee.audioOutputDeviceId\"\n (ngModelChange)=\"audioOutputChanged()\"\n inputId=\"audio_output\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"audio_output\">Speaker</label>\n </p-floatlabel>\n </div>\n <div class=\"rtsee-device-select-wrapper rtsee-form-field-container\">\n <p-floatlabel variant=\"on\">\n <p-select [options]=\"rtSee.videoInputDevices\"\n [(ngModel)]=\"rtSee.videoInputDeviceId\"\n (ngModelChange)=\"videoInputChanged()\"\n inputId=\"video_input\"\n optionLabel=\"label\"\n optionValue=\"deviceId\"\n class=\"rtsee-device-select-field\" />\n <label for=\"video_input\">Camera</label>\n </p-floatlabel>\n </div>\n </div>\n\n <div class=\"rtsee-settings-footer\">\n <p-button label=\"Close\"\n (click)=\"rtSee.toggleSettings()\"\n ></p-button>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeePeerConnection } from '@rtsee/conference';\nimport { interval } from 'rxjs';\n\n@Component({\n selector: 'ngx-rtsee-soundbar',\n templateUrl: './rtsee-soundbar.component.html',\n styleUrls: ['./rtsee-soundbar.component.scss'],\n standalone: true,\n})\nexport class RtseeSoundbarComponent implements OnInit {\n intervalLength: number;\n noiceLevel: number;\n scaleOneLevel: number;\n scaleTwoLevel: number;\n scaleThreeLevel: number;\n\n @Input() peer!: RTSeePeerConnection;\n constructor() {\n this.intervalLength = 1000;\n this.noiceLevel = 0;\n this.scaleOneLevel = 0;\n this.scaleTwoLevel = 0;\n this.scaleThreeLevel = 0;\n }\n\n ngOnInit(): void {\n this.startSoundMeterListening();\n }\n\n startSoundMeterListening() {\n const step = interval(1000 / 10);\n step.subscribe(() => {\n if (!this.peer.soundMeter || !this.peer.soundMeter.level) {\n this.noiceLevel = 0;\n } else {\n this.noiceLevel = this.peer.soundMeter?.level * 100 || 0;\n }\n\n this.setSoundMeterHeights();\n });\n }\n\n setSoundMeterHeights() {\n const ZERO_LEVEL = 25;\n const SCALE_STEP = 25;\n const SCALE_ONE_TOP = ZERO_LEVEL + SCALE_STEP;\n const SCALE_TWO_TOP = SCALE_ONE_TOP + SCALE_STEP;\n\n if (!this.peer || !this.peer.soundMeter || this.noiceLevel < ZERO_LEVEL) {\n this.scaleOneLevel = 0;\n this.scaleTwoLevel = 0;\n this.scaleThreeLevel = 0;\n }\n\n const scaleOneValue = ((this.noiceLevel - ZERO_LEVEL) / SCALE_STEP) * 100;\n const scaleTwoValue =\n ((this.noiceLevel - SCALE_ONE_TOP) / SCALE_STEP) * 100;\n const scaleThreeValue =\n ((this.noiceLevel - SCALE_TWO_TOP) / SCALE_STEP) * 100;\n\n this.scaleOneLevel = scaleOneValue > 0 ? scaleOneValue : 0;\n this.scaleTwoLevel = scaleTwoValue > 0 ? scaleTwoValue : 0;\n this.scaleThreeLevel = scaleThreeValue > 0 ? scaleTwoValue : 0;\n }\n}\n","<div class=\"rtsee-soundbar\">\n <div class=\"rtsee-soundbar-scale\">\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-one\"\n [style.height.%]=\"scaleOneLevel\"\n ></div>\n </div>\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-two\"\n [style.height.%]=\"scaleTwoLevel\"\n ></div>\n </div>\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-three\"\n [style.height.%]=\"scaleThreeLevel\"\n ></div>\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport { RTSeePeerConnection } from '@rtsee/conference';\nimport { NgClass, NgIf } from '@angular/common';\nimport { RtseeSoundbarComponent } from '../rtsee-soundbar/rtsee-soundbar.component';\n\n@Component({\n selector: 'ngx-rtsee-peer',\n templateUrl: './rtsee-peer.component.html',\n imports: [NgClass, NgIf, RtseeSoundbarComponent],\n standalone: true,\n})\nexport class RtseePeerComponent implements AfterViewInit {\n intervalLength: number;\n noiceLevel: number;\n\n @ViewChild('audioOutput') audioOutput?: ElementRef;\n @ViewChild('videoOutput') videoOutput?: ElementRef;\n @Input() peer!: RTSeePeerConnection;\n\n constructor() {\n this.intervalLength = 1000;\n this.noiceLevel = 0;\n }\n\n ngAfterViewInit(): void {\n if (!this.audioOutput) {\n return;\n }\n this.peer.setAudioOutputElement(\n this.audioOutput.nativeElement as HTMLAudioElement,\n );\n }\n}\n","<div class=\"rtsee-peer\" [ngClass]=\"{\n'rtsee-peer-video-disabled': !peer.remoteVideoStream || !peer.camera\n}\">\n <div class=\"rtsee-peer-content\">\n <div class=\"rtsee-peer-photo\" *ngIf=\"!peer.camera\">\n <div class=\"rtsee-peer-photo-wrapper\">\n <div *ngIf=\"peer.imageUrl\"\n [style.background-image]=\"'url(' + peer.imageUrl + ')'\"\n class=\"rtsee-peer-photo-image\"\n ></div>\n <img *ngIf=\"!peer.imageUrl\" [src]=\"\" alt=\"peer_photo\" class=\"rtsee-peer-photo-image\">\n </div>\n <div class=\"rtsee-peer-info\">\n <p class=\"rtsee-peer-name\" *ngIf=\"peer.name\">{{peer.name}}</p>\n </div>\n </div>\n <video #videoOutput\n class=\"rtsee-peer-video\"\n [autoplay]=\"true\"\n [srcObject]=\"peer.remoteVideoStream\"\n playsinline=\"true\"\n >\n </video>\n <div class=\"rtsee-peer-soundbar\">\n <ngx-rtsee-soundbar [peer]=\"peer\"></ngx-rtsee-soundbar>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeConference } from '@rtsee/conference';\nimport { NgClass, NgIf } from '@angular/common';\nimport { RtseeSettingsComponent } from '../rtsee-settings/rtsee-settings.component';\nimport { RtseePeerComponent } from '../rtsee-peer/rtsee-peer.component';\nimport { RTSeeControlsComponent } from './rtsee-controls/rtsee-controls.component';\n\n@Component({\n selector: 'rtsee-conference',\n templateUrl: './rtsee-conference.component.html',\n imports: [\n NgClass,\n RtseeSettingsComponent,\n RtseePeerComponent,\n RTSeeControlsComponent,\n ],\n standalone: true,\n})\nexport class RTSeeConferenceComponent {\n settingsViewEnabled: boolean;\n\n @Input() rtSee!: RTSeeConference;\n constructor() {\n this.settingsViewEnabled = false;\n }\n\n toggleSettings() {\n this.settingsViewEnabled = !this.settingsViewEnabled;\n }\n\n toggleFullScreenMode() {\n this.rtSee.uiControls.toggle();\n }\n}\n","<div class=\"rtsee-conference-shell\" [ngClass]=\"{\n'rtsee-conference-shell-expanded': rtSee.uiControls.isExpanded,\n'rtsee-conference-shell-no-companions': !rtSee.rtcPeerConnections.connections?.length\n}\">\n @if (rtSee.localStream && rtSee.camera) {\n <div class=\"rtsee-local-peer\">\n <video class=\"rtsee-local-video\"\n [autoplay]=\"true\"\n [muted]=\"true\"\n [srcObject]=\"rtSee.localStream\"\n playsinline=\"true\"\n ></video>\n </div>\n }\n <div class=\"rtsee-window-controls\">\n <button type=\"button\"\n (click)=\"rtSee.toggleSettings()\"\n class=\"rtsee-window-controls-button rtsee-ripple-button\"\n >\n <span class=\"material-icons-outlined\">settings</span>\n </button>\n </div>\n @if (rtSee.settingsOpened) {\n <ngx-rtsee-settings [rtSee]=\"rtSee\" [fullScreenMode]=\"rtSee.uiControls.isExpanded\"></ngx-rtsee-settings>\n }\n @if (rtSee.screenSharePeer) {\n <div class=\"rtsee-screen-share\">\n <video [autoplay]=\"true\"\n [muted]=\"'true'\"\n [srcObject]=\"rtSee.screenSharePeer.remoteVideoStream\"\n playsinline=\"true\"\n class=\"rtsee-screen-share-video\"\n ></video>\n </div>\n }\n <div class=\"rtsee-peers\" [ngClass]=\"{\n 'rtsee-peers-alone': !rtSee.rtcPeerConnections.connections?.length,\n 'rtsee-peers-one': rtSee.rtcPeerConnections.connections?.length === 1,\n 'rtsee-peers-three-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 1\n && rtSee.rtcPeerConnections.connections.length < 4,\n 'rtsee-peers-six-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 3\n && rtSee.rtcPeerConnections.connections.length < 7,\n 'rtsee-peers-nine-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length >= 7\n }\">\n @for (peer of rtSee.rtcPeerConnections.connections; track peer.clientId) {\n <div class=\"rtsee-peer-wrapper\">\n <ngx-rtsee-peer [peer]=\"peer\"></ngx-rtsee-peer>\n </div>\n }\n </div>\n <div class=\"rtsee-peers-list\"></div>\n <div class=\"rtsee-controls-wrapper\">\n <ngx-rtsee-controls [rtsee]=\"rtSee\" [fullScreenMode]=\"rtSee.uiControls.isExpanded\"></ngx-rtsee-controls>\n </div>\n</div>\n\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n RTSeeAuth,\n IRtseeSignInRequestOptions,\n IRTSeeSignInResponse,\n IRtseeSignUpRequestOptions,\n IRTSeeSignUpResponse,\n AuthEndpointsKeys,\n RTSeeAuthConfiguration\n} from '@rtsee/auth';\n\nexport interface IRTSeeAuthRequestOptions {\n rtseeAppId?: string;\n}\n\nexport interface IRtseeForgotPasswordRequestOptions extends IRTSeeAuthRequestOptions {\n email: string;\n}\n\nexport interface IRtseeResetPasswordRequestOptions extends IRTSeeAuthRequestOptions {\n password: string;\n passwordConfirm: string;\n token: string;\n}\n\nexport interface IRTSeeForgotPasswordResponse extends IRTSeeAuthRequestOptions {\n success: boolean;\n message: string;\n}\n\nexport interface IRTSeeResetPasswordResponse extends IRTSeeAuthRequestOptions {\n success: boolean;\n message: string;\n}\n\nimport { Observable, tap } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RTSeeAuthService {\n rtseeAuth!: RTSeeAuth<any>;\n authConfiguration!: RTSeeAuthConfiguration;\n\n constructor(private http: HttpClient) {}\n\n init(auth: RTSeeAuth<any>) {\n if (this.rtseeAuth && this.authConfiguration) {\n return;\n }\n\n this.rtseeAuth = auth;\n this.authConfiguration = this.rtseeAuth.authConfiguration;\n }\n\n signIn(\n credentials: IRtseeSignInRequestOptions,\n ): Observable<IRTSeeSignInResponse> {\n return this.http\n .post<IRTSeeSignInResponse>(\n this.authConfiguration.getEndpointPathByEndpointName(\n AuthEndpointsKeys.SIGN_IN,\n ),\n {\n ...credentials,\n rtseeAppId: this.authConfiguration.rtseeAppId\n }\n )\n .pipe(tap((res) => this.rtseeAuth.authenticate(res)));\n }\n\n signUp(\n credentials: IRtseeSignUpRequestOptions,\n ): Observable<IRTSeeSignUpResponse> {\n return this.http.post<IRTSeeSignUpResponse>(\n this.authConfiguration.getEndpointPathByEndpointName(\n AuthEndpointsKeys.SIGN_UP,\n ),\n {\n ...credentials,\n rtseeAppId: this.authConfiguration.rtseeAppId\n }\n );\n }\n\n forgotPassword(\n credentials: IRtseeForgotPasswordRequestOptions,\n ): Observable<IRTSeeForgotPasswordResponse> {\n return this.http.post<IRTSeeForgotPasswordResponse>(\n this.authConfiguration.getEndpointPathByEndpointName(\n AuthEndpointsKeys.FORGOT_PASSWORD\n ),\n {\n ...credentials,\n rtseeAppId: this.authConfiguration.rtseeAppId\n }\n );\n }\n\n resetPassword(\n credentials: IRtseeResetPasswordRequestOptions,\n ): Observable<IRTSeeResetPasswordResponse> {\n return this.http.post<IRTSeeResetPasswordResponse>(\n this.authConfiguration.getEndpointPathByEndpointName(\n AuthEndpointsKeys.RESET_PASSWORD,\n ),\n {\n ...credentials,\n rtseeAppId: this.authConfiguration.rtseeAppId\n }\n );\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { IPeer, RTSeeTextLabelKeys } from '@rtsee/core';\nimport { Button } from 'primeng/button';\nimport { Message } from 'primeng/message';\nimport { RTSeeAuthService } from '../../rtsee-auth/services/auth.service';\nimport { RTSeeAuthConfiguration, AuthEndpointsKeys } from '@rtsee/auth';\nimport { Router, RouterLink } from '@angular/router';\nimport { Select } from 'primeng/select';\nimport { FormsModule } from '@angular/forms';\nimport {Divider} from \"primeng/divider\";\n@Component({\n selector: 'rtsee-profile',\n templateUrl: './profile.component.html',\n imports: [Button, Message, RouterLink, Select, FormsModule, Divider],\n standalone: true,\n})\nexport class ProfileComponent {\n authConfiguration: RTSeeAuthConfiguration;\n\n @Input() messenger!: RTSeeMessenger;\n @Input() peer?: IPeer;\n constructor(\n private authService: RTSeeAuthService,\n private router: Router,\n ) {\n this.authConfiguration = this.authService.rtseeAuth.authConfiguration;\n }\n\n setLanguage(): void {\n this.messenger.setLanguage(this.messenger.currentLanguage);\n void this.messenger.propagateLanguageChange(this.messenger.currentLanguage);\n }\n\n call() {\n if (!this.messenger.openedChat) {\n return;\n }\n void this.messenger.initializeVideoCall(this.messenger.openedChat);\n }\n\n videoCall() {\n if (!this.messenger.openedChat) {\n return;\n }\n void this.messenger.initializeVideoCall(this.messenger.openedChat);\n }\n\n logOut() {\n this.authService.rtseeAuth.logOut();\n void this.router.navigate(\n this.authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN),\n );\n setTimeout(() => {\n window.location.reload();\n }, 200);\n }\n\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rts-messenger-profile\">\n @if (!messenger.ownProfileOpened) {\n <ul class=\"rts-messenger-profile-actions\">\n <li class=\"rts-messenger-profile-actions-item\">\n <p-button\n (click)=\"call()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-phone\"\n />\n </li>\n <li class=\"rts-messenger-profile-actions-item\">\n <p-button\n (click)=\"videoCall()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-video\"\n />\n </li>\n </ul>\n }\n\n @if (messenger.ownProfileOpened && messenger.myPeer && !messenger.myPeer.isAnonymous) {\n <div class=\"rts-messenger-profile-info\">\n <div class=\"rts-messenger-profile-glass-card\">\n <p class=\"rts-messenger-profile-info-name\">{{messenger.myPeer.name}}</p>\n <div class=\"rts-messenger-profile-info-language\">\n <p class=\"rts-messenger-profile-info-language-label\">Language:</p>\n <p-select [options]=\"messenger.languageOptions\"\n [(ngModel)]=\"messenger.currentLanguage\"\n (ngModelChange)=\"setLanguage()\"\n optionLabel=\"key\"\n optionValue=\"key\"\n [placeholder]=\"messenger.labels[RTSeeTextLabelKeys.MESSANGER_LANGUAGE_PLACEHOLDER]\"\n class=\"rts-messenger-profile-info-language-select\"\n />\n </div>\n <div class=\"rts-messenger-profile-edit-btn\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.MESSENGER_EDIT_PROFILE_BTN_LABEL]\"\n (click)=\"messenger.openManageProfile()\"\n ></p-button>\n </div>\n </div>\n\n @if (messenger.myPeer.plan) {\n <p-divider></p-divider>\n <div class=\"rts-messenger-profile-glass-card\">\n <div class=\"rts-messenger-profile-plan-status\">\n <p-message severity=\"success\">\n <span>{{messenger.myPeer.plan.productName}}</span>\n </p-message>\n </div>\n <div class=\"rts-messenger-profile-manage-plan-btn\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.MANAGE_PLAN]\"\n (click)=\"messenger.openManagePlanPage()\"\n ></p-button>\n </div>\n </div>\n } @else {\n <p-divider></p-divider>\n <div class=\"rts-messenger-profile-subscribe-btn\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SUBSCRIBE_LABEL]\"\n (click)=\"messenger.openPaymentPage()\"\n ></p-button>\n </div>\n }\n </div>\n }\n\n @if (messenger.ownProfileOpened && messenger.myPeer?.isAnonymous) {\n <div class=\"rts-messenger-profile-auth\">\n <div class=\"rts-messenger-profile-anon-message\">\n @if (!messenger.currentLanguage || messenger.currentLanguage === 'eng') {\n <p-message severity=\"warn\">\n <span>This is an anonymous identity we've generated for you.</span>\n <span> </span>\n <span>You can use it to play around.</span>\n <span> </span>\n <span>But we are guilty of erasing these time after time.</span>\n <span> </span>\n <span>So please Sign Up if you're looking for something more stable :)</span>\n </p-message>\n } @else if (messenger.currentLanguage === 'ua') {\n <p-message severity=\"warn\">\n <span>Ми згенерували для вас анонімну особистість.</span>\n <span> </span>\n <span>Скористайтеся нею для ознайомлення з сайтом.</span>\n <span> </span>\n <span>Та, час-від-часу, ми їх видаляємо.</span>\n <span> </span>\n <span>Тож краще зареєструтеся, аби не втратити дані :)</span>\n </p-message>\n }\n </div>\n\n <div class=\"rts-messenger-profile-auth-buttons\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SIGN_UP_BUTTON]\"\n severity=\"primary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_UP)\"\n class=\"rts-messenger-profile-auth-button\"\n ></p-button>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.SIGN_IN_BUTTON]\"\n severity=\"secondary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"rts-messenger-profile-auth-button\"\n ></p-button>\n </div>\n </div>\n } @else if (messenger.ownProfileOpened && !messenger.myPeer?.isAnonymous) {\n <p-divider></p-divider>\n <div class=\"rts-messenger-profile-logout-btn\">\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.LOGOUT_BUTTON]\"\n severity=\"danger\"\n (click)=\"logOut()\"\n ></p-button>\n </div>\n }\n</div>\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'rtsee-preloader',\n templateUrl: './preloader.component.html',\n standalone: true,\n})\nexport class PreloaderComponent implements OnInit {\n viewBox = '0 0 100 100';\n d = 'M 50 96 a 46 46 0 0 1 0 -92 46 46 0 0 1 0 92';\n\n @ViewChild('canvas') canvas?: ElementRef<SVGElement>;\n @Input() diameter?: number;\n @Input() color?: string = '#000000';\n constructor() {\n if (this.diameter) {\n this.viewBox = `0 0 ${this.diameter} ${this.diameter}`;\n this.d = `M ${this.diameter / 2} ${this.diameter * 0.96} a ${\n this.diameter * 0.46\n } ${this.diameter * 0.46} 0 0 1 0 -${this.diameter * 0.92} ${\n this.diameter * 0.46\n } ${this.diameter * 0.46} 0 0 1 0 ${this.diameter * 0.92}`;\n }\n }\n\n ngOnInit(): void {\n //viewBox=\"0 0 100 100\"\n //d=\"M 50 96 a 46 46 0 0 1 0 -92 46 46 0 0 1 0 92\"\n }\n}\n","<div class=\"rtsee-preloader\">\n <svg [style.max-width.px]=\"diameter\" #canvas [attr.viewBox]=\"viewBox\">\n <path [attr.d]=\"d\" [attr.stroke]=\"color\"/>\n </svg>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeChatMember } from '@rtsee/messenger';\nimport { RTSeeChatMemberRoles } from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-chat-member',\n standalone: true,\n templateUrl: './chat-member.component.html',\n})\nexport class ChatMemberComponent {\n @Input() member!: RTSeeChatMember;\n @Input() canManage: boolean = false;\n @Input() isSelf: boolean = false;\n @Output() remove = new EventEmitter<string>();\n @Output() roleChange = new EventEmitter<{ memberId: string; role: RTSeeChatMemberRoles }>();\n @Output() editAgent = new EventEmitter<string>();\n\n get isAgent(): boolean {\n return !!(this.member.data as any)?.isAgent;\n }\n\n get isInactive(): boolean {\n return this.member.status === 'inactive';\n }\n\n onRemove(): void {\n this.remove.emit(this.member.id);\n }\n\n onPromote(): void {\n this.roleChange.emit({ memberId: this.member.id, role: RTSeeChatMemberRoles.MODERATOR });\n }\n\n onDemote(): void {\n this.roleChange.emit({ memberId: this.member.id, role: RTSeeChatMemberRoles.MEMBER });\n }\n\n onEditAgent(): void {\n this.editAgent.emit(this.member.id);\n }\n\n protected readonly RTSeeChatMemberRoles = RTSeeChatMemberRoles;\n}\n","<div class=\"rts-chat-member\" [class.rts-chat-member-inactive]=\"isInactive\">\n <div class=\"rts-chat-member-avatar\"\n [style.background-image]=\"'url(' + member.imageUrl + ')'\"\n ></div>\n <div class=\"rts-chat-member-details\">\n <p class=\"rts-chat-member-name\">\n {{ member.name }}\n @if (isAgent) {\n <span class=\"rts-chat-member-agent-badge\">\n <span class=\"material-icons-outlined\">smart_toy</span>\n </span>\n }\n </p>\n @if (isInactive) {\n <p class=\"rts-chat-member-status-inactive\">Inactive</p>\n } @else {\n <p class=\"rts-chat-member-role\">{{ member.role }}</p>\n }\n </div>\n @if (canManage && !isSelf && !isInactive) {\n <div class=\"rts-chat-member-actions\">\n @if (isAgent) {\n <button class=\"rts-btn rts-btn-icon rts-btn-icon-sm\"\n title=\"Edit Agent\"\n (click)=\"onEditAgent()\"\n >\n <span class=\"material-icons-outlined\">edit</span>\n </button>\n }\n @if (member.role === RTSeeChatMemberRoles.MEMBER) {\n <button class=\"rts-btn rts-btn-icon rts-btn-icon-sm\"\n title=\"Promote to Moderator\"\n (click)=\"onPromote()\"\n >\n <span class=\"material-icons-outlined\">arrow_upward</span>\n </button>\n } @else if (member.role === RTSeeChatMemberRoles.MODERATOR) {\n <button class=\"rts-btn rts-btn-icon rts-btn-icon-sm\"\n title=\"Demote to Member\"\n (click)=\"onDemote()\"\n >\n <span class=\"material-icons-outlined\">arrow_downward</span>\n </button>\n }\n <button class=\"rts-btn rts-btn-icon rts-btn-icon-sm rts-btn-danger\"\n title=\"Remove Member\"\n (click)=\"onRemove()\"\n >\n <span class=\"material-icons-outlined\">close</span>\n </button>\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeChatInfo } from '@rtsee/messenger';\nimport { RTSeeChatMemberRoles } from '@rtsee/common';\nimport { ChatMemberComponent } from '../chat-member/chat-member.component';\nimport { PreloaderComponent } from '../../../../common/components/preloader/preloader.component';\n\n@Component({\n selector: 'rtsee-chat-members-list',\n standalone: true,\n imports: [ChatMemberComponent, PreloaderComponent],\n templateUrl: './chat-members-list.component.html',\n})\nexport class ChatMembersListComponent {\n @Input() chatInfo!: RTSeeChatInfo;\n @Output() editAgentRequested = new EventEmitter<string>();\n\n confirmingRemoveId: string | null = null;\n confirmingRemoveName: string = '';\n\n get canManage(): boolean {\n return this.chatInfo.canManageMembers;\n }\n\n onRemoveRequested(memberId: string): void {\n const member = this.chatInfo.chat.members.find(m => m.id === memberId);\n this.confirmingRemoveId = memberId;\n this.confirmingRemoveName = member?.name || memberId;\n }\n\n async confirmRemove(): Promise<void> {\n if (this.confirmingRemoveId) {\n await this.chatInfo.removeMember(this.confirmingRemoveId);\n this.cancelRemove();\n }\n }\n\n cancelRemove(): void {\n this.confirmingRemoveId = null;\n this.confirmingRemoveName = '';\n }\n\n async onRoleChange(event: { memberId: string; role: RTSeeChatMemberRoles }): Promise<void> {\n await this.chatInfo.editMemberRole(event.memberId, event.role);\n }\n\n onEditAgent(memberId: string): void {\n this.editAgentRequested.emit(memberId);\n }\n}\n","@if (confirmingRemoveId) {\n <div class=\"rts-chat-member-remove-confirm\">\n <p class=\"rts-chat-member-remove-confirm-text\">\n Are you sure you want to remove <strong>{{ confirmingRemoveName }}</strong> from the chat?\n </p>\n <div class=\"rts-chat-member-remove-confirm-actions\">\n <button class=\"rts-btn rts-btn-danger rts-btn-sm\"\n (click)=\"confirmRemove()\"\n >Yes</button>\n <button class=\"rts-btn rts-btn-ghost rts-btn-sm\"\n (click)=\"cancelRemove()\"\n >Cancel</button>\n </div>\n </div>\n} @else {\n @if (chatInfo.loadingMembers) {\n <rtsee-preloader [diameter]=\"30\"></rtsee-preloader>\n }\n\n @for (member of chatInfo.chat.members; track member.id) {\n <rtsee-chat-member\n [member]=\"member\"\n [canManage]=\"canManage\"\n [isSelf]=\"member.id === chatInfo.myClientId\"\n (remove)=\"onRemoveRequested($event)\"\n (roleChange)=\"onRoleChange($event)\"\n (editAgent)=\"onEditAgent($event)\"\n ></rtsee-chat-member>\n }\n}\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputText } from \"primeng/inputtext\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-text\",\n standalone: true,\n imports: [FormsModule, InputText, InputGroup, FloatLabel, Message],\n templateUrl: \"./text-field.component.html\"\n})\nexport class TextFieldComponent {\n @Input() field!: RTSeeFormField<string>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input [id]=\"field.name\"\n class=\"rtsee-form-field\"\n pInputText\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n />\n <label [for]=\"field.name\">{{ field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { Textarea } from \"primeng/textarea\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-textarea\",\n standalone: true,\n imports: [FormsModule, Textarea, InputGroup, FloatLabel, Message],\n templateUrl: \"./textarea-field.component.html\"\n})\nexport class TextareaFieldComponent {\n @Input() field!: RTSeeFormField<string>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [id]=\"field.name\"\n class=\"rtsee-form-field\"\n pTextarea\n rows=\"3\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></textarea>\n <label [for]=\"field.name\">{{ field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { Checkbox } from \"primeng/checkbox\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-checkbox\",\n standalone: true,\n imports: [FormsModule, Checkbox, Message],\n templateUrl: \"./checkbox-field.component.html\"\n})\nexport class CheckboxFieldComponent {\n @Input() field!: RTSeeFormField<boolean>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container flex items-center\">\n <p-checkbox [inputId]=\"field.name\"\n [binary]=\"true\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n ></p-checkbox>\n <label [for]=\"field.name\" class=\"ml-2\">{{ field.name }}</label>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RadioButton } from \"primeng/radiobutton\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormFieldRadioGroup } from \"@rtsee/utilities-ui\";\nimport { NgClass } from \"@angular/common\";\n\n@Component({\n selector: \"rtsee-field-radio\",\n standalone: true,\n imports: [FormsModule, RadioButton, Message, NgClass],\n templateUrl: \"./radio-field.component.html\"\n})\nexport class RadioFieldComponent {\n @Input() field!: RTSeeFormFieldRadioGroup;\n @Output() fieldChanged = new EventEmitter<void>();\n\n /**\n * Card mode is enabled when any radio option has an icon or description.\n */\n get isCardMode(): boolean {\n return this.field.radioOptions.some(o => o.icon || o.description);\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rts-form-field-container\">\n <div class=\"rts-radio-group-label font-semibold\">{{ field.name }}</div>\n\n @if (!isCardMode) {\n <!-- Standard inline radio buttons -->\n @for (option of field.radioOptions; track option.value) {\n <div class=\"rts-radio-option\">\n <p-radioButton [name]=\"field.name\"\n [value]=\"option.value\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [inputId]=\"field.name + '_' + option.value\"\n ></p-radioButton>\n <label [for]=\"field.name + '_' + option.value\"\n class=\"rts-radio-option-label\"\n >{{ option.label }}</label>\n </div>\n }\n } @else {\n <!-- Card-styled radio buttons when icon/description is provided -->\n @for (group of field.optionGroups; track group.name) {\n @if (field.isGrouped && group.name) {\n <div class=\"rts-radio-card-group-title\">{{ group.name }}</div>\n }\n <div class=\"rts-radio-card-group\">\n @for (option of group.options; track option.value) {\n <label [for]=\"field.name + '_' + option.value\"\n class=\"rts-radio-card\"\n [ngClass]=\"{'rts-radio-card-selected': field.value === option.value}\"\n >\n <p-radioButton [name]=\"field.name\"\n [value]=\"option.value\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [inputId]=\"field.name + '_' + option.value\"\n class=\"rts-radio-card-input\"\n ></p-radioButton>\n @if (option.icon) {\n <span class=\"rts-radio-card-icon\">\n <span class=\"material-icons-outlined\">{{ option.icon }}</span>\n </span>\n }\n <div class=\"rts-radio-card-content\">\n <strong class=\"rts-radio-card-label\">{{ option.label }}</strong>\n @if (option.description) {\n <small class=\"rts-radio-card-description\">{{ option.description }}</small>\n }\n </div>\n </label>\n }\n </div>\n }\n }\n\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rts-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputNumber } from \"primeng/inputnumber\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-number\",\n standalone: true,\n imports: [FormsModule, InputNumber, InputGroup, FloatLabel, Message],\n templateUrl: \"./number-field.component.html\"\n})\nexport class NumberFieldComponent {\n @Input() field!: RTSeeFormField<number>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [inputId]=\"field.name\"\n class=\"rtsee-form-field\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></p-inputNumber>\n <label [for]=\"field.name\">{{ field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { RTSeeFormAutocomplete } from '@rtsee/utilities-ui';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'rtsee-autocomplete',\n imports: [AutoCompleteModule, FloatLabel, InputGroup, FormsModule],\n templateUrl: './autocomplete.component.html',\n})\nexport class AutocompleteComponent {\n @Input() config!: RTSeeFormAutocomplete;\n}\n","<div class=\"rtsee-autocomplete rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-autoComplete [(ngModel)]=\"config.selectedSuggestions\"\n [inputId]=\"config.inputId\"\n [multiple]=\"true\"\n [fluid]=\"config.fluid\"\n [suggestions]=\"config.visibleSuggestions\"\n [optionLabel]=\"config.suggestionLabel\"\n (completeMethod)=\"config.onQueryChanged($event)\"\n (onSelect)=\"config.onSelect($event)\"\n ></p-autoComplete>\n <label [for]=\"config.inputId\">{{config.inputName}}</label>\n </p-floatlabel>\n </p-inputgroup>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\nimport { AutocompleteComponent } from \"../../../autocomplete/autocomplete.component\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormFieldAutocomplete } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-autocomplete\",\n standalone: true,\n imports: [AutocompleteComponent, Message],\n templateUrl: \"./autocomplete-field.component.html\"\n})\nexport class AutocompleteFieldComponent implements OnInit {\n @Input() field!: RTSeeFormFieldAutocomplete;\n @Output() fieldChanged = new EventEmitter<void>();\n\n ngOnInit() {\n this.field.autocomplete.on(\"select\", () => {\n this.onModelChange();\n });\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <rtsee-autocomplete [config]=\"field.autocomplete\"></rtsee-autocomplete>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, forwardRef, Input, OnInit } from '@angular/core';\nimport { Select } from 'primeng/select';\nimport { RecursiveSelect } from '@rtsee/utilities-ui';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'rtsee-recursive-select',\n imports: [Select, FormsModule],\n templateUrl: './recursive-select.component.html',\n})\nexport class RecursiveSelectComponent<E> implements OnInit {\n @Input() selectModel!: RecursiveSelect<E>;\n value: E | undefined = undefined;\n\n ngOnInit(): void {\n this.value = this.selectModel.value;\n }\n}\n","<div class=\"rtsee-recursive-select\">\n @for (item of selectModel.selectionHierarchy; track item.level) {\n <div class=\"rtsee-form-field-container\">\n <p-select [options]=\"item.children\"\n [(ngModel)]=\"item.selected\"\n [optionLabel]=\"'label'\"\n [placeholder]=\"selectModel.placeholderValue\"\n (onChange)=\"selectModel.onSelectionChanged(item.selected, item.level)\"\n class=\"rtsee-form-field\"\n />\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, DoCheck } from \"@angular/core\";\nimport { RecursiveSelectComponent } from \"../../../recursive-select/recursive-select.component\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormFieldRecursiveSelect } from \"@rtsee/utilities-ui\";\nimport {Divider} from \"primeng/divider\";\n\n@Component({\n selector: \"rtsee-field-recursive-select\",\n standalone: true,\n imports: [RecursiveSelectComponent, Message, Divider],\n templateUrl: \"./recursive-select-field.component.html\"\n})\nexport class RecursiveSelectFieldComponent implements DoCheck {\n @Input() field!: RTSeeFormFieldRecursiveSelect;\n @Output() fieldChanged = new EventEmitter<void>();\n\n private lastValue: any;\n\n ngDoCheck() {\n if (this.field.recursiveSelect.value !== this.lastValue) {\n this.lastValue = this.field.recursiveSelect.value;\n this.onModelChange();\n }\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-divider></p-divider>\n <p>{{field.name}}</p>\n <rtsee-recursive-select [selectModel]=\"field.recursiveSelect\"></rtsee-recursive-select>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n <p-divider></p-divider>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ImageCroppedEvent, ImageCropperComponent } from 'ngx-image-cropper';\nimport { NgClass } from '@angular/common';\nimport { RadioButton } from 'primeng/radiobutton';\nimport { PreloaderComponent } from '../preloader/preloader.component';\nimport { RTSeeImageCropper } from '@rtsee/utilities-ui';\nimport { Button } from 'primeng/button';\n\n@Component({\n selector: 'rtsee-cropper',\n imports: [\n ImageCropperComponent,\n NgClass,\n RadioButton,\n PreloaderComponent,\n Button,\n ],\n templateUrl: './cropper.component.html',\n standalone: true,\n})\nexport class RTSeeCropperComponent {\n loadInProgress: boolean = true;\n\n @Input() cropper!: RTSeeImageCropper;\n @Output() nextClicked = new EventEmitter();\n\n @ViewChild(ImageCropperComponent) imageCropper!: ImageCropperComponent;\n constructor() {}\n\n ngOnInit() {}\n\n onCropperReady() {\n this.loadInProgress = false;\n this.cropper.setCropperElem(this.imageCropper);\n }\n\n onImageCropped(event: ImageCroppedEvent) {\n if (!event.blob) {\n console.log('ImageCropped no Blob after Cropped event');\n return;\n }\n this.cropper.onCropped(event.blob);\n }\n\n // selectValue(event) {\n // this.cropper.setAspectRatio(event.value);\n // }\n}\n","<div class=\"rtsee-image-cropper-container\"\n [ngClass]=\"{'rtsee-image-cropper-loading': loadInProgress}\"\n>\n @if (cropper.activeImage) {\n <div class=\"rtsee-image-cropper-container-inner\">\n <image-cropper style=\"visibility: hidden\"\n [imageFile]=\"cropper.activeImage.file\"\n [maintainAspectRatio]=\"true\"\n [aspectRatio]=\"cropper.aspectRatio\"\n [resizeToWidth]=\"cropper.resizeToWidth\"\n [autoCrop]=\"false\"\n (imageCropped)=\"onImageCropped($event)\"\n (cropperReady)=\"onCropperReady()\"\n [imageQuality]=\"70\"\n format='jpeg'\n ></image-cropper>\n </div>\n }\n @if (cropper.aspectRatioConfigurable) {\n <div class=\"rtsee-select-aspect-ratio-container\">\n <span class=\"radio-btn title-text\">Aspect Ratio:</span>\n\n <p-radio-button name=\"pizza\" value=\"Cheese\" inputId=\"ingredient1\" />\n <label for=\"ingredient1\" class=\"ml-2\">Cheese</label>\n </div>\n }\n\n @if (!loadInProgress) {\n <div class=\"image-cropper-actions\">\n <p-button label=\"Next\"\n severity=\"primary\"\n (click)=\"cropper.onNextButtonClicked()\"\n ></p-button>\n </div>\n }\n\n <rtsee-preloader [diameter]=\"5\"></rtsee-preloader>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeFileUploader } from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-uploader',\n imports: [],\n templateUrl: './uploader.component.html',\n})\nexport class RTSeeUploaderComponent implements OnInit {\n @Input() uploader!: RTSeeFileUploader;\n\n ngOnInit(): void {\n this.uploader.show();\n }\n}\n","<div id=\"rtsee-drag-drop-area\"></div>\n\n","import { ChangeDetectorRef, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { RTSeeCropperComponent } from '../cropper/cropper.component';\nimport { RTSeeUploaderComponent } from '../uploader/uploader.component';\nimport { RTSeeImageUploader, sanitizeImageUrl } from '@rtsee/utilities-ui';\nimport { Button } from 'primeng/button';\nimport { Tooltip } from 'primeng/tooltip';\nimport { RTSeeCore } from '@rtsee/core';\nimport {\n RTSeeIllustratorEvents,\n IRTSeeIllustratorCurrentImageResponse,\n} from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-image-uploader',\n imports: [RTSeeUploaderComponent, RTSeeCropperComponent, Button, Tooltip],\n templateUrl: './image-uploader.component.html',\n})\nexport class RTSeeImageUploaderComponent implements OnInit, OnDestroy {\n @ViewChild(RTSeeCropperComponent) cropperComponent!: RTSeeCropperComponent;\n @Input() imageUploader!: RTSeeImageUploader;\n\n private readonly onUploaderChanged = (): void => this.cdr.markForCheck();\n\n constructor(\n private readonly elementRef: ElementRef<HTMLElement>,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.attachEventHandlers();\n }\n\n ngOnDestroy(): void {\n this.imageUploader?.off('changed', this.onUploaderChanged);\n }\n\n attachEventHandlers() {\n this.imageUploader.on('completed', this.onImagesUploaded.bind(this));\n this.imageUploader.on('changed', this.onUploaderChanged);\n }\n\n get optimizeTooltip(): string {\n if (this.imageUploader.optimizing) {\n return 'Optimizing…';\n }\n const base = `Optimize (curr size: ${this.imageUploader.currentImageSizeMb}mb)`;\n return this.imageUploader.optimizationError\n ? `${base} - last attempt failed: ${this.imageUploader.optimizationError}`\n : base;\n }\n\n async onOptimizeClicked(event: MouseEvent): Promise<void> {\n // The preview container opens the uploader on click\n event.stopPropagation();\n event.preventDefault();\n\n const optimizedUrl: string | null = await this.imageUploader.optimizeCurrentImage();\n if (optimizedUrl) {\n // The optimized url is already propagated to the form field (`completed`) - persist it\n setTimeout(() => this.submitParentForm(), 50);\n }\n }\n\n onNextButtonClicked() {\n this.imageUploader.onNextClicked();\n }\n\n onImagesUploaded(response: any): void {\n console.log(response);\n }\n\n private submittingFromPainting: boolean = false;\n\n onPaintingIconClicked(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n\n if (typeof window === 'undefined' || this.submittingFromPainting) {\n return;\n }\n\n const requestId = RTSeeCore.uuidv4();\n let handled = false;\n\n const handleResponse = (response: IRTSeeIllustratorCurrentImageResponse) => {\n if (handled) {\n return;\n }\n handled = true;\n\n if (!response || !response.isLoaded) {\n // 3. If RTSeeIllustrator is not loaded - do nothing\n return;\n }\n\n if (response.reviewingGeneratedImage && response.imageUrl) {\n // 1. If RTSeeIllustrator is in reviewingGeneratedImage mode, apply currently reviewed image to ImageUploader\n this.submittingFromPainting = true;\n this.imageUploader.applyImageUrl(sanitizeImageUrl(response.imageUrl));\n\n // Reset illustrator state and UI\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(RTSeeIllustratorEvents.RESET_STATE));\n }\n\n // and if Imageuploader is part of the form it should immediately submit the form\n setTimeout(() => {\n this.submitParentForm();\n setTimeout(() => {\n this.submittingFromPainting = false;\n }, 1000);\n }, 50);\n }\n // 2. If RTSeeIllustrator is not active, it expands and scrolls into view (handled by RTSeeIllustrator)\n };\n\n const responseListener = (e: Event) => {\n const customEvent = e as CustomEvent<IRTSeeIllustratorCurrentImageResponse & { requestId?: string }>;\n if (!customEvent.detail || (customEvent.detail.requestId && customEvent.detail.requestId !== requestId)) {\n return;\n }\n window.removeEventListener(RTSeeIllustratorEvents.CURRENT_IMAGE_RESPONSE, responseListener);\n clearTimeout(timer);\n handleResponse(customEvent.detail);\n };\n\n window.addEventListener(RTSeeIllustratorEvents.CURRENT_IMAGE_RESPONSE, responseListener);\n\n const timer = setTimeout(() => {\n window.removeEventListener(RTSeeIllustratorEvents.CURRENT_IMAGE_RESPONSE, responseListener);\n }, 600);\n\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.GET_CURRENT_IMAGE, {\n detail: {\n requestId,\n callback: (res: IRTSeeIllustratorCurrentImageResponse) => {\n window.removeEventListener(RTSeeIllustratorEvents.CURRENT_IMAGE_RESPONSE, responseListener);\n clearTimeout(timer);\n handleResponse(res);\n },\n },\n })\n );\n }\n\n private submitParentForm(): void {\n try {\n // 1. Native HTML form submit so Angular (ngSubmit) / (formSubmit) fires\n const formEl = this.elementRef.nativeElement.closest('form');\n if (formEl) {\n if (typeof formEl.requestSubmit === 'function') {\n formEl.requestSubmit();\n return;\n } else {\n formEl.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));\n return;\n }\n }\n\n // 2. Custom submit hook, then programmatic RTSeeForm submit\n if (this.imageUploader.onSubmitForm) {\n this.imageUploader.onSubmitForm();\n } else if (this.imageUploader.form && typeof this.imageUploader.form.submit === 'function') {\n this.imageUploader.form.submit();\n }\n } catch (e) {\n console.warn('[RTSeeImageUploaderComponent] submitParentForm error:', e);\n }\n }\n}\n","<div class=\"rtsee-image-uploader\">\n @if (!imageUploader.awaitsUploadOrCrop) {\n <div class=\"rtsee-image-uploader-image\"\n (click)=\"imageUploader.init()\"\n >\n @if (imageUploader.uploadedPhotoPreview) {\n <img [src]=\"imageUploader.uploadedPhotoPreview\"\n class=\"rtsee-image-uploader-preview-image\"\n alt=\"uploaded_photo\"\n >\n }\n @if (!imageUploader.uploadedPhotoPreview) {\n <div class=\"rtsee-preloader-image-placeholder\">\n <span class=\"material-icons-outlined rtsee-upload-icon\">cloud_upload</span>\n <span class=\"rtsee-upload-text\">Tap to upload image</span>\n </div>\n }\n <div class=\"rtsee-image-uploader-illustrator-btn\"\n (click)=\"onPaintingIconClicked($event)\"\n title=\"Apply illustration from NanoBanana Illustrator\"\n >\n <p-button icon=\"pi pi-palette\" severity=\"help\" [rounded]=\"true\"></p-button>\n </div>\n <div class=\"rtsee-image-uploader-image-change-btn\"\n [class.rtsee-shifted]=\"imageUploader.needsOptimization\"\n >\n <p-button icon=\"pi pi-pencil\" severity=\"info\"></p-button>\n </div>\n @if (imageUploader.needsOptimization) {\n <div class=\"rtsee-image-uploader-optimize-btn\"\n id=\"rtsee-image-uploader-optimize-btn\"\n [class.rtsee-optimizing]=\"imageUploader.optimizing\"\n [pTooltip]=\"optimizeTooltip\"\n tooltipPosition=\"top\"\n (click)=\"onOptimizeClicked($event)\"\n >\n <p-button [icon]=\"imageUploader.optimizing ? 'pi pi-spin pi-spinner' : 'pi pi-exclamation-triangle'\"\n severity=\"warn\"\n [rounded]=\"true\"\n [disabled]=\"imageUploader.optimizing\"\n [attr.aria-label]=\"optimizeTooltip\"\n ></p-button>\n </div>\n }\n </div>\n }\n\n @if (imageUploader.awaitsUploadOrCrop) {\n <rtsee-uploader [uploader]=\"imageUploader.uploader\"\n [hidden]=\"imageUploader.cropper?.activeImage\"\n ></rtsee-uploader>\n\n @if (imageUploader.cropper?.activeImage) {\n <rtsee-cropper [cropper]=\"imageUploader.cropper\"\n (nextClicked)=\"onNextButtonClicked()\"\n ></rtsee-cropper>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\nimport { RTSeeImageUploaderComponent } from \"../../../image-uploader/image-uploader.component\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormFieldImageUploader } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-image-uploader\",\n standalone: true,\n imports: [RTSeeImageUploaderComponent, Message],\n templateUrl: \"./image-uploader-field.component.html\"\n})\nexport class ImageUploaderFieldComponent implements OnInit {\n @Input() field!: RTSeeFormFieldImageUploader;\n @Output() fieldChanged = new EventEmitter<void>();\n\n ngOnInit() {\n this.field.imageUploader.on(\"completed\", () => {\n this.onModelChange();\n });\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <rtsee-image-uploader [imageUploader]=\"field.imageUploader\"></rtsee-image-uploader>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Input, Output, EventEmitter, Component, forwardRef } from \"@angular/core\";\nimport { RTSeeFormDynamicFields } from \"@rtsee/utilities-ui\";\nimport { Button } from \"primeng/button\";\nimport { FormComponent } from \"../../form/form.component\";\nimport { Divider } from \"primeng/divider\";\n\n@Component({\n selector: \"rtsee-dynamic-fields-field\",\n standalone: true,\n imports: [\n Button,\n forwardRef(() => FormComponent),\n Divider\n ],\n templateUrl: './dynamic-fields-field.component.html',\n})\nexport class DynamicFieldsFieldComponent {\n @Input() field!: RTSeeFormDynamicFields;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-dynamic-fields-field\">\n <p-button label=\"Add a field\"\n (click)=\"field.add()\"\n ></p-button>\n\n <div class=\"rtsee-dynamic-fields-definitions\">\n @for (definition of field.fields; track definition.name) {\n <p-divider></p-divider>\n <p>dynamic field</p>\n <rtsee-form [form]=\"definition.form\"></rtsee-form>\n <p-button label=\"Add a field\"\n (click)=\"field.remove($index)\"\n ></p-button>\n <p-divider></p-divider>\n }\n </div>\n\n</div>\n","import { Input, Output, EventEmitter, Component, forwardRef } from \"@angular/core\";\nimport { RTSeeFormFieldFieldDefinition } from \"@rtsee/utilities-ui\";\nimport { Message } from \"primeng/message\";\nimport { Button } from \"primeng/button\";\nimport { Divider } from \"primeng/divider\";\nimport { Select } from \"primeng/select\";\nimport { FormComponent } from \"../../form/form.component\";\n\n@Component({\n selector: \"rtsee-field-definition-field\",\n standalone: true,\n imports: [\n Message,\n Button,\n Divider,\n Select,\n forwardRef(() => FormComponent)\n ],\n templateUrl: './field-definition-field.component.html',\n})\nexport class FieldDefinitionFieldComponent {\n @Input() field!: RTSeeFormFieldFieldDefinition;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-field-definition\">\n <div class=\"rtsee-form-field-container\">\n <p-divider></p-divider>\n <p>Custom Field</p>\n\n <rtsee-form [form]=\"field.form\"></rtsee-form>\n <p-divider></p-divider>\n </div>\n</div>\n\n<div class=\"rtsee-form-field-container\">\n <p-divider></p-divider>\n <p>Custom Field</p>\n\n <p-select [options]=\"field.typeOptions\"\n [optionLabel]=\"'friendlyName'\"\n ></p-select>\n\n\n\n <p-button label=\"remove\"\n severity=\"warn\"\n ></p-button>\n\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n <p-divider></p-divider>\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { Select } from \"primeng/select\";\nimport { RTSeeFormFieldSelect } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-select\",\n standalone: true,\n imports: [FormsModule, InputGroup, FloatLabel, Message, Select],\n templateUrl: \"./select-field.component.html\"\n})\nexport class SelectFieldComponent {\n @Input() field!: RTSeeFormFieldSelect;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-select [inputId]=\"field.name\"\n class=\"rtsee-form-field\"\n [options]=\"field.options\"\n [optionLabel]=\"field.labelKey\"\n [optionValue]=\"field.valueKey\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></p-select>\n <label [for]=\"field.name\">{{ field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"c\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n\n","import { Component, Input, Output, EventEmitter, forwardRef } from \"@angular/core\";\nimport { RTSeeFormFieldLocation } from \"@rtsee/utilities-ui\";\nimport { FormComponent } from \"../../form/form.component\";\nimport { Message } from \"primeng/message\";\nimport { Fieldset } from \"primeng/fieldset\";\n\n@Component({\n selector: \"rtsee-field-location\",\n standalone: true,\n imports: [\n Fieldset,\n Message,\n forwardRef(() => FormComponent)\n ],\n templateUrl: \"./location-field.component.html\"\n})\nexport class LocationFieldComponent {\n @Input() field!: RTSeeFormFieldLocation;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container rtsee-field-location-container mb-3\">\n <p-fieldset [legend]=\"field.description || field.name || 'Location'\">\n @if (field.form) {\n <rtsee-form [form]=\"field.form\" (formSubmit)=\"onModelChange()\"></rtsee-form>\n }\n </p-fieldset>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, forwardRef } from \"@angular/core\";\nimport { RTSeeFormFieldTimeSlot } from \"@rtsee/utilities-ui\";\nimport { FormComponent } from \"../../form/form.component\";\nimport { Message } from \"primeng/message\";\nimport { Fieldset } from \"primeng/fieldset\";\n\n@Component({\n selector: \"rtsee-field-time-slot\",\n standalone: true,\n imports: [\n Fieldset,\n Message,\n forwardRef(() => FormComponent)\n ],\n templateUrl: \"./time-slot-field.component.html\"\n})\nexport class TimeSlotFieldComponent {\n @Input() field!: RTSeeFormFieldTimeSlot;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container rtsee-field-time-slot-container mb-3\">\n <p-fieldset [legend]=\"field.description || field.name || 'Time Slot'\">\n @if (field.form) {\n <rtsee-form [form]=\"field.form\" (formSubmit)=\"onModelChange()\"></rtsee-form>\n }\n </p-fieldset>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, forwardRef } from \"@angular/core\";\nimport { RTSeeFormFieldTimeSlots } from \"@rtsee/utilities-ui\";\nimport { Button } from \"primeng/button\";\nimport { Divider } from \"primeng/divider\";\nimport { Message } from \"primeng/message\";\nimport { FormComponent } from \"../../form/form.component\";\nimport { Fieldset } from \"primeng/fieldset\";\n\n@Component({\n selector: \"rtsee-field-time-slots\",\n standalone: true,\n imports: [\n Button,\n Divider,\n Message,\n Fieldset,\n forwardRef(() => FormComponent)\n ],\n templateUrl: \"./time-slots-field.component.html\"\n})\nexport class TimeSlotsFieldComponent {\n @Input() field!: RTSeeFormFieldTimeSlots;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container rtsee-field-time-slots-container mb-3\">\n <p-fieldset [legend]=\"field.description || field.name || 'Time Slots'\">\n <div class=\"mb-3\">\n <p-button label=\"Add Time Slot\" (click)=\"field.add()\"></p-button>\n </div>\n @for (slotField of field.slotFields; track $index) {\n <div class=\"p-3 border rounded mb-2\">\n @if (slotField.form) {\n <rtsee-form [form]=\"slotField.form\" (formSubmit)=\"onModelChange()\"></rtsee-form>\n }\n <div class=\"mt-2 text-right\">\n <p-button label=\"Remove Slot\" severity=\"warn\" (click)=\"field.remove($index)\"></p-button>\n </div>\n </div>\n }\n </p-fieldset>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\nimport { RTSeeFormFieldEntity } from \"@rtsee/utilities-ui\";\nimport { AutocompleteComponent } from \"../../../autocomplete/autocomplete.component\";\nimport { Message } from \"primeng/message\";\n\n@Component({\n selector: \"rtsee-field-entity\",\n standalone: true,\n imports: [AutocompleteComponent, Message],\n templateUrl: \"./entity-field.component.html\"\n})\nexport class EntityFieldComponent implements OnInit {\n @Input() field!: RTSeeFormFieldEntity;\n @Output() fieldChanged = new EventEmitter<void>();\n\n ngOnInit() {\n if (this.field.autocompleteField?.autocomplete) {\n this.field.autocompleteField.autocomplete.on(\"select\", () => {\n this.onModelChange();\n });\n }\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n @if (field.autocompleteField) {\n <rtsee-autocomplete [config]=\"field.autocompleteField.autocomplete\"></rtsee-autocomplete>\n }\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\nimport { RTSeeFormFieldEntitiesList } from \"@rtsee/utilities-ui\";\nimport { AutocompleteComponent } from \"../../../autocomplete/autocomplete.component\";\nimport { Message } from \"primeng/message\";\n\n@Component({\n selector: \"rtsee-field-entities-list\",\n standalone: true,\n imports: [AutocompleteComponent, Message],\n templateUrl: \"./entities-list-field.component.html\"\n})\nexport class EntitiesListFieldComponent implements OnInit {\n @Input() field!: RTSeeFormFieldEntitiesList;\n @Output() fieldChanged = new EventEmitter<void>();\n\n ngOnInit() {\n if (this.field.autocompleteField?.autocomplete) {\n this.field.autocompleteField.autocomplete.on(\"select\", () => {\n this.onModelChange();\n });\n }\n }\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n @if (field.autocompleteField) {\n <rtsee-autocomplete [config]=\"field.autocompleteField.autocomplete\"></rtsee-autocomplete>\n }\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message block mt-1\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { DatePicker } from \"primeng/datepicker\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-date\",\n standalone: true,\n imports: [FormsModule, DatePicker, InputGroup, FloatLabel, Message],\n templateUrl: \"./date-field.component.html\"\n})\nexport class DateFieldComponent {\n @Input() field!: RTSeeFormField<Date>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-datePicker [inputId]=\"field.name\"\n class=\"rtsee-form-field\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></p-datePicker>\n <label [for]=\"field.name\">{{ field.description || field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputText } from \"primeng/inputtext\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-varchar\",\n standalone: true,\n imports: [FormsModule, InputText, InputGroup, FloatLabel, Message],\n templateUrl: \"./varchar-field.component.html\"\n})\nexport class VarcharFieldComponent {\n @Input() field!: RTSeeFormField<string>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input pInputText\n [id]=\"field.name\"\n class=\"rtsee-form-field\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n />\n <label [for]=\"field.name\">{{ field.description || field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { InputNumber } from \"primeng/inputnumber\";\nimport { InputGroup } from \"primeng/inputgroup\";\nimport { FloatLabel } from \"primeng/floatlabel\";\nimport { Message } from \"primeng/message\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\n\n@Component({\n selector: \"rtsee-field-float\",\n standalone: true,\n imports: [FormsModule, InputNumber, InputGroup, FloatLabel, Message],\n templateUrl: \"./float-field.component.html\"\n})\nexport class FloatFieldComponent {\n @Input() field!: RTSeeFormField<number>;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onModelChange() {\n this.field.digest();\n this.fieldChanged.emit();\n }\n}\n","<div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [inputId]=\"field.name\"\n class=\"rtsee-form-field\"\n [minFractionDigits]=\"1\"\n [maxFractionDigits]=\"6\"\n [(ngModel)]=\"field.value\"\n (ngModelChange)=\"onModelChange()\"\n [class.p-invalid]=\"!field.isValid && field.isDirty\"\n ></p-inputNumber>\n <label [for]=\"field.name\">{{ field.description || field.name }}</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!field.isValid && field.isDirty) {\n @for (error of field.validator.result.errors; track error.message) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ error.message }}</p-message>\n }\n }\n</div>\n","import { Component, Input, Output, EventEmitter, forwardRef } from \"@angular/core\";\nimport { RTSeeFormField } from \"@rtsee/utilities-ui\";\nimport { TextFieldComponent } from \"./field-sub-types/text-field.component\";\nimport { TextareaFieldComponent } from \"./field-sub-types/textarea-field.component\";\nimport { CheckboxFieldComponent } from \"./field-sub-types/checkbox-field.component\";\nimport { RadioFieldComponent } from \"./field-sub-types/radio-field.component\";\nimport { NumberFieldComponent } from \"./field-sub-types/number-field.component\";\nimport { AutocompleteFieldComponent } from \"./field-sub-types/autocomplete-field.component\";\nimport { RecursiveSelectFieldComponent } from \"./field-sub-types/recursive-select-field.component\";\nimport { ImageUploaderFieldComponent } from \"./field-sub-types/image-uploader-field.component\";\nimport { DynamicFieldsFieldComponent } from \"./field-sub-types/dynamic-fields-field.component\";\nimport { FieldDefinitionFieldComponent } from \"./field-sub-types/field-definition-field.component\";\nimport { SelectFieldComponent } from \"./field-sub-types/select-field.component\";\nimport { LocationFieldComponent } from \"./field-sub-types/location-field.component\";\nimport { TimeSlotFieldComponent } from \"./field-sub-types/time-slot-field.component\";\nimport { TimeSlotsFieldComponent } from \"./field-sub-types/time-slots-field.component\";\nimport { EntityFieldComponent } from \"./field-sub-types/entity-field.component\";\nimport { EntitiesListFieldComponent } from \"./field-sub-types/entities-list-field.component\";\nimport { DateFieldComponent } from \"./field-sub-types/date-field.component\";\nimport { VarcharFieldComponent } from \"./field-sub-types/varchar-field.component\";\nimport { FloatFieldComponent } from \"./field-sub-types/float-field.component\";\n\n@Component({\n selector: \"rtsee-form-field\",\n standalone: true,\n imports: [\n TextFieldComponent,\n TextareaFieldComponent,\n CheckboxFieldComponent,\n RadioFieldComponent,\n NumberFieldComponent,\n AutocompleteFieldComponent,\n RecursiveSelectFieldComponent,\n ImageUploaderFieldComponent,\n forwardRef(() => FieldDefinitionFieldComponent),\n forwardRef(() => DynamicFieldsFieldComponent),\n SelectFieldComponent,\n LocationFieldComponent,\n TimeSlotFieldComponent,\n TimeSlotsFieldComponent,\n EntityFieldComponent,\n EntitiesListFieldComponent,\n DateFieldComponent,\n VarcharFieldComponent,\n FloatFieldComponent\n ],\n templateUrl: \"./form-field.component.html\"\n})\nexport class FormFieldComponent {\n @Input() field!: RTSeeFormField;\n @Output() fieldChanged = new EventEmitter<void>();\n\n onFieldChanged() {\n this.fieldChanged.emit();\n }\n}\n","@switch (field.type) {\n @case ('text') {\n <rtsee-field-text [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-text>\n }\n @case ('varchar') {\n <rtsee-field-varchar [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-varchar>\n }\n @case ('textarea') {\n <rtsee-field-textarea [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-textarea>\n }\n @case ('checkbox') {\n <rtsee-field-checkbox [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-checkbox>\n }\n @case ('radio') {\n <rtsee-field-radio [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-radio>\n }\n @case ('number') {\n <rtsee-field-number [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-number>\n }\n @case ('integer') {\n <rtsee-field-number [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-number>\n }\n @case ('float4') {\n <rtsee-field-float [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-float>\n }\n @case ('date') {\n <rtsee-field-date [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-date>\n }\n @case ('autocomplete') {\n <rtsee-field-autocomplete [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-autocomplete>\n }\n @case ('entity') {\n <rtsee-field-entity [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-entity>\n }\n @case ('entities-list') {\n <rtsee-field-entities-list [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-entities-list>\n }\n @case ('location') {\n <rtsee-field-location [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-location>\n }\n @case ('time_slot') {\n <rtsee-field-time-slot [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-time-slot>\n }\n @case ('time_slots') {\n <rtsee-field-time-slots [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-time-slots>\n }\n @case ('recursive-select') {\n <rtsee-field-recursive-select [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-recursive-select>\n }\n @case ('select') {\n <rtsee-field-select [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-select>\n }\n @case ('image-uploader') {\n <rtsee-field-image-uploader [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-image-uploader>\n }\n @case ('field-definition') {\n <rtsee-field-definition-field [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-field-definition-field>\n }\n @case ('dynamic-fields') {\n <rtsee-dynamic-fields-field [field]=\"$any(field)\" (fieldChanged)=\"onFieldChanged()\"></rtsee-dynamic-fields-field>\n }\n}\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { RTSeeForm } from \"@rtsee/utilities-ui\";\nimport { FormFieldComponent } from \"../form-field/form-field.component\";\nimport { FormsModule } from \"@angular/forms\";\n\n@Component({\n selector: \"rtsee-form\",\n standalone: true,\n imports: [FormFieldComponent, FormsModule],\n templateUrl: \"./form.component.html\"\n})\nexport class FormComponent {\n @Input() form!: RTSeeForm;\n @Output() formSubmit = new EventEmitter<RTSeeForm>();\n\n submit() {\n this.formSubmit.emit(this.form);\n }\n\n onFieldChanged() {\n this.form.evaluateIsValid();\n this.form.evaluateIsDirty();\n this.form.evaluateIsChanged();\n }\n}\n","<div class=\"rtsee-form-container\">\n @if (form.name) {\n <h3 class=\"rts-form-title\">{{ form.name }}</h3>\n }\n @if (form.description) {\n <p class=\"rts-form-description\">{{ form.description }}</p>\n }\n <form class=\"rtsee-form rts-form-group\" (ngSubmit)=\"submit()\">\n @for (field of form.fields; track field.name) {\n <div class=\"rtsee-form-field-container rts-form-field\">\n @if (field.active) {\n <rtsee-form-field [field]=\"field\"\n (fieldChanged)=\"onFieldChanged()\"\n ></rtsee-form-field>\n }\n </div>\n }\n <div class=\"rtsee-form-submit-container rts-form-actions\">\n <ng-content>\n </ng-content>\n </div>\n </form>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RTSeeChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport {IOzzyAgent, IRTSeeGetChatInvitationLinkResult} from '@rtsee/common';\nimport { ManageAgentForm, ManageAgentFormModel } from '@rtsee/utilities-ui';\nimport { FormComponent } from '../../../../common/components/forms/form/form.component';\n\ntype AddMemberMode = 'person' | 'agent';\n\n@Component({\n selector: 'rtsee-add-chat-member',\n standalone: true,\n imports: [FormComponent],\n templateUrl: './add-chat-member.component.html',\n})\nexport class AddChatMemberComponent implements OnInit {\n @Input() chatInfo!: RTSeeChatInfo;\n @Input() messenger!: RTSeeMessenger;\n @Output() memberAdded = new EventEmitter<void>();\n @Output() cancelled = new EventEmitter<void>();\n\n mode: AddMemberMode = 'person';\n invitationLink: string = '';\n invitationExpiresAt: Date | null = null;\n loadingLink: boolean = false;\n linkCopied: boolean = false;\n agentForm!: ManageAgentForm;\n submittingAgent: boolean = false;\n\n ngOnInit(): void {\n this.initAgentForm();\n this.loadInvitationLink();\n }\n\n setMode(mode: AddMemberMode): void {\n this.mode = mode;\n }\n\n async loadInvitationLink(): Promise<void> {\n this.loadingLink = true;\n try {\n const result: IRTSeeGetChatInvitationLinkResult =\n await this.chatInfo.getChatInvitationLink();\n this.invitationLink = result.invitationLink;\n this.invitationExpiresAt = new Date(result.expiresAt);\n } catch (e) {\n console.log('Failed to load invitation link', e);\n } finally {\n this.loadingLink = false;\n }\n }\n\n async copyLink(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.invitationLink);\n this.linkCopied = true;\n setTimeout(() => (this.linkCopied = false), 2500);\n } catch (e) {\n console.log('Failed to copy link', e);\n }\n }\n\n initAgentForm(): void {\n this.agentForm = new ManageAgentForm({\n companionUrl: this.messenger.companionUrl || '',\n peer: this.messenger.myPeer,\n onSubmit: (model: ManageAgentFormModel) => {\n console.log('on submit!');\n void this.submitAgent();\n },\n });\n }\n\n async submitAgent(): Promise<void> {\n this.submittingAgent = true;\n console.log('submitting agent')\n try {\n const agentData: IOzzyAgent = this.agentForm.toAgentData();\n await this.chatInfo.addAgentMember(agentData);\n this.memberAdded.emit();\n } catch (e) {\n console.log('Failed to add agent member', e);\n } finally {\n this.submittingAgent = false;\n }\n }\n\n cancel(): void {\n this.cancelled.emit();\n }\n}\n","<div class=\"rts-add-chat-member\">\n <div class=\"rts-add-member-toggle\">\n <button class=\"rts-btn rts-add-member-toggle-btn\"\n [class.rts-add-member-toggle-active]=\"mode === 'person'\"\n (click)=\"setMode('person')\"\n >\n <span class=\"material-icons-outlined\">person</span>\n Person\n </button>\n <button class=\"rts-btn rts-add-member-toggle-btn\"\n [class.rts-add-member-toggle-active]=\"mode === 'agent'\"\n (click)=\"setMode('agent')\"\n >\n <span class=\"material-icons-outlined\">smart_toy</span>\n Agent\n </button>\n </div>\n\n @if (mode === 'person') {\n <div class=\"rts-invite-link-section\">\n @if (loadingLink) {\n <div class=\"rts-invite-link-loading\">\n <span class=\"material-icons-outlined rts-spin-icon\">autorenew</span>\n Generating link...\n </div>\n } @else if (invitationLink) {\n <div class=\"rts-invite-link-disclaimer\">\n <span class=\"material-icons-outlined rts-invite-link-disclaimer-icon\">info</span>\n Anyone who opens this link will be added to the chat.\n </div>\n\n <div class=\"rts-invite-link-display\">\n <input type=\"text\"\n class=\"rts-invite-link-input\"\n [value]=\"invitationLink\"\n readonly\n >\n <button class=\"rts-btn rts-btn-primary rts-invite-link-copy-btn\"\n (click)=\"copyLink()\"\n >\n <span class=\"material-icons-outlined\">{{ linkCopied ? 'check' : 'content_copy' }}</span>\n {{ linkCopied ? 'Copied!' : 'Copy' }}\n </button>\n </div>\n\n @if (invitationExpiresAt) {\n <p class=\"rts-invite-link-expires\">\n Link expires: {{ invitationExpiresAt.toLocaleDateString() }}\n </p>\n }\n } @else {\n <p class=\"rts-invite-link-error\">Failed to generate invitation link.</p>\n }\n </div>\n }\n\n @if (mode === 'agent') {\n <div class=\"rts-add-agent-form\">\n <rtsee-form [form]=\"agentForm\" (formSubmit)=\"submitAgent()\">\n <button type=\"submit\"\n class=\"rts-btn rts-btn-primary\"\n [disabled]=\"submittingAgent\"\n >\n @if (submittingAgent) {\n <span class=\"material-icons-outlined rts-spin-icon\">autorenew</span>\n }\n Add Agent\n </button>\n </rtsee-form>\n </div>\n }\n\n <div class=\"rts-add-member-cancel\">\n <button class=\"rts-btn rts-btn-ghost rts-btn-block\"\n (click)=\"cancel()\"\n >Back to Members</button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RTSeeChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport { IOzzyAgent, IRTSeeChatMember } from '@rtsee/common';\nimport { ManageAgentForm, ManageAgentFormModel } from '@rtsee/utilities-ui';\nimport { FormComponent } from '../../../../common/components/forms/form/form.component';\n\n@Component({\n selector: 'rtsee-edit-agent-member',\n standalone: true,\n imports: [FormComponent],\n templateUrl: './edit-agent-member.component.html',\n})\nexport class EditAgentMemberComponent implements OnInit {\n @Input() chatInfo!: RTSeeChatInfo;\n @Input() messenger!: RTSeeMessenger;\n @Input() memberId!: string;\n @Output() saved = new EventEmitter<void>();\n @Output() cancelled = new EventEmitter<void>();\n\n agentForm!: ManageAgentForm;\n submitting: boolean = false;\n memberName: string = '';\n\n ngOnInit(): void {\n const member = this.chatInfo.chat.members.find(m => m.id === this.memberId);\n const existingAgent = (member?.data as any) as IOzzyAgent | undefined;\n this.memberName = member?.name || this.memberId;\n\n this.agentForm = new ManageAgentForm({\n companionUrl: this.messenger.companionUrl || '',\n peer: this.messenger.myPeer,\n existingAgent,\n onSubmit: (model: ManageAgentFormModel) => {\n void this.submitEdit();\n },\n });\n }\n\n async submitEdit(): Promise<void> {\n this.submitting = true;\n try {\n const agentData = this.agentForm.toAgentData();\n // Edit the member via the existing editChatMember remote action\n // The agent data is stored on the member's data field\n const updatedMember: IRTSeeChatMember = await this.chatInfo.remoteActions.editChatMember.send({\n chatId: this.chatInfo.chat.id,\n memberId: this.memberId,\n role: this.chatInfo.chat.members.find(m => m.id === this.memberId)?.role!,\n agentData,\n } as any);\n this.chatInfo.chat.updateMember(this.memberId, updatedMember);\n this.saved.emit();\n } catch (e) {\n console.log('Failed to update agent member', e);\n } finally {\n this.submitting = false;\n }\n }\n\n cancel(): void {\n this.cancelled.emit();\n }\n}\n","<div class=\"rts-edit-agent-member\">\n <div class=\"rts-add-agent-form\">\n <rtsee-form [form]=\"agentForm\">\n <button type=\"submit\"\n class=\"rts-btn rts-btn-primary\"\n [disabled]=\"submitting\"\n >\n @if (submitting) {\n <span class=\"material-icons-outlined rts-spin-icon\">autorenew</span>\n }\n Save Changes\n </button>\n </rtsee-form>\n </div>\n\n <div class=\"rts-add-member-cancel\">\n <button class=\"rts-btn rts-btn-ghost rts-btn-block\"\n (click)=\"cancel()\"\n >Back to Members</button>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport { ChatMembersListComponent } from './chat-members-list/chat-members-list.component';\nimport { AddChatMemberComponent } from './add-chat-member/add-chat-member.component';\nimport { EditAgentMemberComponent } from './edit-agent-member/edit-agent-member.component';\n\ntype ChatMembersView = 'list' | 'add' | 'edit-agent';\n\n@Component({\n selector: 'rtsee-chat-members',\n standalone: true,\n imports: [ChatMembersListComponent, AddChatMemberComponent, EditAgentMemberComponent],\n templateUrl: './chat-members.component.html',\n})\nexport class ChatMembersComponent {\n @Input() chatInfo!: RTSeeChatInfo;\n @Input() messenger!: RTSeeMessenger;\n\n view: ChatMembersView = 'list';\n editingAgentMemberId: string | null = null;\n\n showAddMember(): void {\n this.view = 'add';\n }\n\n showEditAgent(memberId: string): void {\n this.editingAgentMemberId = memberId;\n this.view = 'edit-agent';\n }\n\n onMemberAdded(): void {\n this.view = 'list';\n }\n\n onAddCancelled(): void {\n this.view = 'list';\n }\n\n onAgentSaved(): void {\n this.editingAgentMemberId = null;\n this.view = 'list';\n }\n\n onEditAgentCancelled(): void {\n this.editingAgentMemberId = null;\n this.view = 'list';\n }\n}\n","<div class=\"rts-chat-members\">\n <p class=\"rts-chat-members-title\">Members</p>\n\n @if (view === 'list') {\n <rtsee-chat-members-list\n [chatInfo]=\"chatInfo\"\n (editAgentRequested)=\"showEditAgent($event)\"\n ></rtsee-chat-members-list>\n\n @if (chatInfo.canManageMembers) {\n <button class=\"rts-btn rts-btn-ghost rts-btn-block rts-chat-members-add-btn\"\n (click)=\"showAddMember()\"\n >\n <span class=\"material-icons-outlined\">person_add</span>\n Add Member\n </button>\n }\n }\n\n @if (view === 'add') {\n <rtsee-add-chat-member\n [chatInfo]=\"chatInfo\"\n [messenger]=\"messenger\"\n (memberAdded)=\"onMemberAdded()\"\n (cancelled)=\"onAddCancelled()\"\n ></rtsee-add-chat-member>\n }\n\n @if (view === 'edit-agent' && editingAgentMemberId) {\n <rtsee-edit-agent-member\n [chatInfo]=\"chatInfo\"\n [messenger]=\"messenger\"\n [memberId]=\"editingAgentMemberId\"\n (saved)=\"onAgentSaved()\"\n (cancelled)=\"onEditAgentCancelled()\"\n ></rtsee-edit-agent-member>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport { RTSeeChatMemberRoles } from '@rtsee/common';\nimport { PreloaderComponent } from '../../../common/components/preloader/preloader.component';\nimport { ChatMembersComponent } from '../chat-members/chat-members.component';\n\n@Component({\n selector: 'rtsee-chat-info',\n standalone: true,\n imports: [PreloaderComponent, ChatMembersComponent],\n templateUrl: './chat-info.component.html',\n})\nexport class ChatInfoComponent {\n @Input() messenger!: RTSeeMessenger;\n @Input() chatInfo!: RTSeeChatInfo;\n @Output() editChatInfo = new EventEmitter<void>();\n @Output() chatDeleted = new EventEmitter<string>();\n\n onEditChatInfo(): void {\n this.editChatInfo.emit();\n }\n\n async onDeleteChat(): Promise<void> {\n await this.chatInfo.deleteChat();\n }\n\n protected readonly RTSeeChatMemberRoles = RTSeeChatMemberRoles;\n}\n","<div class=\"rts-chat-info\">\n <div class=\"rts-chat-info-meta\">\n <p class=\"rts-chat-info-type\">{{ chatInfo.chat.type }}</p>\n <p class=\"rts-chat-info-member-count\">{{ chatInfo.chat.members.length }} members</p>\n </div>\n\n @if (chatInfo.canManageChatInfo) {\n <div class=\"rts-chat-info-actions\">\n <button class=\"rts-btn rts-btn-ghost rts-btn-block\"\n (click)=\"onEditChatInfo()\"\n >\n <span class=\"material-icons-outlined\">edit</span>\n Edit Chat Info\n </button>\n </div>\n }\n\n <hr class=\"rts-divider\" />\n\n <rtsee-chat-members\n [chatInfo]=\"chatInfo\"\n [messenger]=\"messenger\"\n ></rtsee-chat-members>\n\n @if (chatInfo.myRole === RTSeeChatMemberRoles.ADMIN) {\n <hr class=\"rts-divider\" />\n <div class=\"rts-chat-info-danger-zone\">\n <button class=\"rts-btn rts-btn-danger rts-btn-block\"\n (click)=\"onDeleteChat()\"\n >\n Delete Chat\n </button>\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeManageChatInfo, RTSeeMessenger } from '@rtsee/messenger';\nimport { IRTSeeChat, IRTSeeCreateChatOptions, RTSeeChatTypes } from '@rtsee/common';\nimport {\n IFormFieldImageUploaderOptions,\n IFormFieldRadioGroupFieldOptions,\n RTSeeForm,\n RTSeeFormField,\n RTSeeFormFieldImageUploader,\n RTSeeFormFieldRadioGroup,\n} from '@rtsee/utilities-ui';\nimport { FormComponent } from '../../../common/components/forms/form/form.component';\n\ninterface ManageChatInfoModel {\n type: RTSeeChatTypes;\n name: string;\n imageUrl?: string;\n}\n\nclass ManageChatInfoForm extends RTSeeForm<ManageChatInfoModel> {\n chatTypeField: RTSeeFormFieldRadioGroup<string>;\n chatNameField: RTSeeFormField<string>;\n imageUrlField: RTSeeFormFieldImageUploader;\n\n constructor(options: {\n chatTypeField: RTSeeFormFieldRadioGroup<string>;\n chatNameField: RTSeeFormField<string>;\n imageUrlField: RTSeeFormFieldImageUploader;\n onSubmit: (model: ManageChatInfoModel) => void;\n name: string;\n description: string;\n }) {\n super({\n name: options.name,\n description: options.description,\n fields: [options.imageUrlField, options.chatTypeField, options.chatNameField],\n onSubmit: options.onSubmit,\n });\n\n this.chatTypeField = options.chatTypeField;\n this.chatNameField = options.chatNameField;\n this.imageUrlField = options.imageUrlField;\n }\n\n getModel(): ManageChatInfoModel {\n return {\n type: this.chatTypeField.value as RTSeeChatTypes,\n name: this.chatNameField.value || '',\n imageUrl: this.imageUrlField.value || undefined,\n };\n }\n}\n\n@Component({\n selector: 'rtsee-manage-chat-info',\n standalone: true,\n imports: [FormComponent],\n templateUrl: './manage-chat-info.component.html',\n})\nexport class ManageChatInfoComponent {\n @Input() messenger!: RTSeeMessenger;\n @Input() chat?: IRTSeeChat;\n @Output() chatSaved = new EventEmitter<IRTSeeChat>();\n @Output() cancelled = new EventEmitter<void>();\n\n form!: ManageChatInfoForm;\n manageChatInfo!: RTSeeManageChatInfo;\n\n get isEditMode(): boolean {\n return !!this.chat;\n }\n\n ngOnInit(): void {\n this.manageChatInfo = new RTSeeManageChatInfo({\n chat: this.chat || undefined,\n companionUrl: this.messenger.companionUrl || '',\n remoteActions: this.messenger.remoteActions,\n creatorId: this.messenger.myPeer?.clientId || '',\n peer: this.messenger.myPeer!,\n });\n\n const chatTypeField = new RTSeeFormFieldRadioGroup<string>({\n name: 'chatType',\n type: 'radio',\n description: 'Chat Type',\n value: this.chat?.type || RTSeeChatTypes.GROUP,\n disabled: this.isEditMode,\n validators: [(v: string) => (!v ? 'Chat type is required' : null)],\n radioOptions: [\n {\n label: 'Group',\n value: RTSeeChatTypes.GROUP,\n icon: 'group',\n description: 'A group chat where all members can send messages',\n },\n {\n label: 'Channel',\n value: RTSeeChatTypes.CHANNEL,\n icon: 'campaign',\n description: 'A broadcast channel where only admins can post',\n },\n ],\n } as IFormFieldRadioGroupFieldOptions<string>);\n\n const chatNameField = new RTSeeFormField<string>({\n name: 'chatName',\n type: 'text',\n description: 'Chat Name',\n value: this.chat?.name || '',\n validators: [\n (v: string) => (!v ? 'Chat name is required' : null),\n (v: string) => (v && v.length < 3 ? 'Chat name must be at least 3 characters' : null),\n ],\n });\n\n const imageUrlField = new RTSeeFormFieldImageUploader({\n name: 'imageUrl',\n type: 'image-uploader',\n description: 'Chat Image',\n value: this.chat?.imageUrl || '',\n validators: [],\n imageUploaderOptions: {\n aspectRatio: 1,\n companionUrl: this.messenger.companionUrl || '',\n peer: this.messenger.myPeer!,\n },\n } as IFormFieldImageUploaderOptions);\n\n const formName = this.isEditMode ? 'Edit Chat' : 'New Chat';\n const formDescription = this.isEditMode\n ? 'Update chat name and image'\n : 'Create a group or channel to start chatting';\n\n this.form = new ManageChatInfoForm({\n chatTypeField,\n chatNameField,\n imageUrlField,\n name: formName,\n description: formDescription,\n onSubmit: (model: ManageChatInfoModel) => {\n void this.manageChatInfo.save({\n name: model.name,\n type: model.type,\n imageUrl: model.imageUrl,\n });\n },\n });\n\n this.manageChatInfo.on('saved', (savedChat: IRTSeeChat) => {\n this.chatSaved.emit(savedChat);\n });\n }\n\n get submitLabel(): string {\n return this.isEditMode ? 'Save' : 'Create';\n }\n\n cancel(): void {\n this.cancelled.emit();\n }\n}\n","<div class=\"rts-manage-chat-info\">\n @if (form) {\n <rtsee-form [form]=\"form\"\n (submit)=\"form.submit()\"\n >\n <div class=\"rts-manage-chat-info-buttons rts-form-actions\">\n <button type=\"submit\"\n class=\"rts-btn rts-btn-primary\"\n [disabled]=\"!form.isValid || manageChatInfo?.saveInProgress\"\n >\n @if (manageChatInfo?.saveInProgress) {\n <span class=\"material-icons-outlined rts-btn-spinner\">sync</span>\n }\n {{ submitLabel }}\n </button>\n <button type=\"button\"\n class=\"rts-btn rts-btn-ghost\"\n (click)=\"cancel()\"\n >\n Cancel\n </button>\n </div>\n </rtsee-form>\n }\n</div>\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DefaultImagesService {\n PROFILE = 'https://werf-assets.s3.amazonaws.com/default-profile-logo.png';\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { DefaultImagesService } from '../../../services/default-images.service';\nimport { NgClass } from '@angular/common';\nimport { ProfileComponent } from '../profile/profile.component';\nimport { ChatInfoComponent } from '../chat-info/chat-info.component';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\nimport { IRTSeeChat, RTSeeChatTypes } from '@rtsee/common';\nimport { ManageChatInfoComponent } from '../manage-chat-info/manage-chat-info.component';\n\n@Component({\n selector: 'rtsee-messenger-header',\n templateUrl: './messenger-header.component.html',\n imports: [NgClass, ProfileComponent, ChatInfoComponent, ManageChatInfoComponent],\n standalone: true,\n})\nexport class MessengerHeaderComponent {\n @Input() messenger!: RTSeeMessenger;\n\n isDropdownOpen: boolean = false;\n chatImageExpanded: boolean = false;\n\n constructor(public defaultImagesService: DefaultImagesService) {}\n\n openProfile(id: string): void {\n if (this.messenger.ownProfileOpened) {\n return;\n }\n void this.messenger.openProfile(id);\n }\n\n toggleDropdown(): void {\n this.isDropdownOpen = !this.isDropdownOpen;\n }\n\n closeDropdown(): void {\n this.isDropdownOpen = false;\n }\n\n openNewChatDialog(): void {\n this.isDropdownOpen = false;\n this.messenger.openManageChatInfo();\n }\n\n closeManageChatDialog(): void {\n this.messenger.closeManageChatInfo();\n }\n\n onChatSaved(chat: IRTSeeChat): void {\n this.messenger.closeManageChatInfo();\n }\n\n onChatImageClick(): void {\n if (!this.messenger.openedChatDetails) {\n // First click: open chat info (circle image)\n this.chatImageExpanded = false;\n this.messenger.openChatInfo();\n } else if (!this.chatImageExpanded) {\n // Second click: expand image to full width square\n this.chatImageExpanded = true;\n } else {\n // Third click: collapse back to circle\n this.chatImageExpanded = false;\n }\n }\n\n collapseInfo(): void {\n this.chatImageExpanded = false;\n this.messenger.collapseInfo();\n }\n\n get isGroupOrChannelChat(): boolean {\n return this.messenger.openedChat?.type === RTSeeChatTypes.GROUP ||\n this.messenger.openedChat?.type === RTSeeChatTypes.CHANNEL;\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rts-messenger-header\"\n [ngClass]=\"{\n 'rts-messenger-header-chat-opened': messenger.openedChat && !messenger.manageChatInfo,\n 'rts-chat-header-unread': messenger.openedChat && !messenger.unreadMessagesCount,\n 'rts-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails || messenger.manageChatInfo,\n 'rts-messenger-header-create-chat-mode': messenger.manageChatInfo,\n 'rts-messenger-header-my-profile-mode': messenger.ownProfileOpened,\n 'rts-messenger-header-chat-info-mode': (messenger.openedProfile || messenger.openedChatDetails) && !messenger.ownProfileOpened && !messenger.manageChatInfo,\n 'rts-messenger-header-chat-image-expanded': chatImageExpanded\n }\"\n>\n <span class=\"rts-messenger-header-collapse-button\"\n (click)=\"messenger.manageChatInfo ? closeManageChatDialog() : collapseInfo()\"\n >\n <span class=\"pi pi-arrow-left\"></span>\n </span>\n <div class=\"rts-messenger-header-left\">\n @if (!messenger.openedChat && messenger.myPeer) {\n <div class=\"rts-messenger-header-avatar\"\n (click)=\"openProfile(messenger.myPeer.clientId)\"\n >\n <div [style.background-image]=\"'url(' + messenger.myPeer.imageUrl || defaultImagesService.PROFILE + ')'\"\n class=\"rts-messenger-header-avatar-image\">\n </div>\n </div>\n } @else if (messenger.openedChat) {\n <button class=\"rts-messenger-close-chat\"\n (click)=\"messenger.closeChat()\"\n >\n <span class=\"material-icons-outlined\">arrow_back</span>\n @if (messenger.unreadMessagesCount) {\n <span class=\"unread-count\">{{messenger.unreadMessagesCount}}</span>\n }\n </button>\n }\n </div>\n <div class=\"rts-messenger-header-right\">\n @if (messenger.openedChat) {\n <div class=\"rts-messenger-chat-image-container rts-messenger-header-avatar\"\n (click)=\"onChatImageClick()\"\n >\n <div class=\"rts-messenger-chat-image rts-messenger-header-avatar-image\"\n [style.background-image]=\"'url(' + messenger.openedChat.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n </div>\n } @else {\n <div class=\"rts-messenger-header-actions\">\n <button class=\"rts-messenger-header-add-button\"\n (click)=\"toggleDropdown()\"\n >\n <span class=\"material-icons-outlined\">add</span>\n </button>\n\n @if (isDropdownOpen) {\n <div class=\"rts-messenger-header-dropdown-backdrop\"\n (click)=\"closeDropdown()\"\n ></div>\n <div class=\"rts-messenger-header-dropdown\">\n <button class=\"rts-messenger-header-dropdown-item\"\n (click)=\"openNewChatDialog()\"\n >\n <span class=\"material-icons-outlined rts-messenger-header-dropdown-icon\">chat_bubble_outline</span>\n <span>New Chat</span>\n </button>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"rts-messenger-header-center\">\n @if (messenger.manageChatInfo) {\n <div class=\"rts-messenger-header-create-chat-container\">\n <rtsee-manage-chat-info [messenger]=\"messenger\"\n [chat]=\"messenger.manageChatInfo.chat || undefined\"\n (chatSaved)=\"onChatSaved($event)\"\n (cancelled)=\"closeManageChatDialog()\"\n ></rtsee-manage-chat-info>\n </div>\n } @else if (messenger.openedChat) {\n <div [ngClass]=\"{'rts-messenger-header-opened-chat-info-expanded': messenger.openedProfile || messenger.openedChatDetails}\"\n class=\"rts-messenger-header-opened-chat-info\">\n <div class=\"rts-messenger-profile-header-placeholder\">\n <p class=\"rts-messenger-header-chat-title\"\n >{{ messenger.openedChat.name }}</p>\n </div>\n\n <div class=\"rts-messenger-profile-data-container\">\n @if (messenger.openedChatDetails && isGroupOrChannelChat && messenger.chatInfo) {\n <rtsee-chat-info [messenger]=\"messenger\"\n [chatInfo]=\"messenger.chatInfo\"\n (editChatInfo)=\"messenger.openManageChatInfo(messenger.openedChat)\"\n (chatDeleted)=\"messenger.closeChatInfo()\"\n ></rtsee-chat-info>\n } @else if (messenger.openedChatDetails) {\n <rtsee-profile [messenger]=\"messenger\"\n ></rtsee-profile>\n }\n </div>\n </div>\n } @else {\n <p class=\"rts-messenger-header-title\"\n >{{messenger.labels[RTSeeTextLabelKeys.MESSANGER_TITLE]}}</p>\n <rtsee-profile [messenger]=\"messenger\"\n [peer]=\"messenger.myPeer\"\n ></rtsee-profile>\n }\n </div>\n</div>\n","import { Injectable } from '@angular/core';\n\nimport dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\ndayjs.extend(relativeTime);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimeFormatHelperService {\n toAgo(time: Date): string {\n /* eslint-disable */\n return dayjs(time).fromNow() as string;\n /* eslint-enable */\n }\n toDayOfWeek(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('ddd');\n /* eslint-enable */\n }\n toTime(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('HH:mm') as string;\n /* eslint-enable */\n }\n toDate(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('D MMMM') as string;\n /* eslint-enable */\n }\n toDateNumeral(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('DD.MM');\n /* eslint-enable */\n }\n\n toDateNumeralWithYear(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('DD.MM.YY');\n /* eslint-enable */\n }\n\n toDateWithYear(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('MMMM D, YYYY ') as string;\n /* eslint-enable */\n }\n\n formatDate(time: Date) {\n const today = new Date();\n const dayMs = 1000 * 60 * 60 * 24;\n const twoDays = dayMs * 2;\n\n if (!time) {\n return '';\n }\n\n if (\n today.getTime() - time.getTime() < dayMs &&\n today.getDay() === time.getDay()\n ) {\n return 'Today';\n }\n\n if (\n today.getTime() - time.getTime() < twoDays &&\n today.getTime() - time.getTime() > dayMs &&\n today.getDay() !== time.getDay()\n ) {\n return 'Yesterday';\n }\n\n if (today.getFullYear() === time.getFullYear()) {\n return this.toDate(time);\n }\n\n return this.toDateWithYear(time);\n }\n\n formatTimeOrDate(time: Date) {\n if (!time) {\n return '';\n }\n\n const today = new Date();\n const dayMs = 1000 * 60 * 60 * 24;\n\n if (\n today.getTime() - time.getTime() < dayMs &&\n today.getDay() === time.getDay()\n ) {\n return this.toTime(time);\n }\n\n if (\n today.getTime() - time.getTime() > dayMs &&\n today.getTime() - time.getTime() < dayMs * 7\n ) {\n return this.toDayOfWeek(time);\n }\n\n if (\n today.getTime() - time.getTime() > dayMs * 7 &&\n today.getFullYear() === time.getFullYear()\n ) {\n return this.toDateNumeral(time);\n }\n\n return this.toDateNumeralWithYear(time);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessage } from '@rtsee/messenger';\nimport { IMessageThumbnail } from '@rtsee/common';\nimport { TimeFormatHelperService } from '../../../../../services/time-format-helper.service';\nimport { NgClass, NgIf } from '@angular/common';\nimport { PreloaderComponent } from '../../../../../common/components/preloader/preloader.component';\n\n@Component({\n selector: 'rtsee-message-time-and-status',\n templateUrl: './message-time-and-status.component.html',\n imports: [NgIf, NgClass, PreloaderComponent],\n standalone: true,\n})\nexport class MessageTimeAndStatusComponent {\n @Input() message!: RTSeeMessage | IMessageThumbnail;\n @Input() hideStatus?: boolean;\n @Input() inChat?: boolean;\n constructor(public timeFormatService: TimeFormatHelperService) {}\n}\n","<div class=\"rts-messenger-message-time-and-status\">\n <span class=\"rts-messenger-message-status\" *ngIf=\"!hideStatus\" [ngClass]=\"{'showing-status-inside-chat': inChat }\">\n <span *ngIf=\"message.status === 'pending'\"><rtsee-preloader [diameter]=\"5\"></rtsee-preloader></span>\n <span *ngIf=\"message.status === 'sent'\" class=\"material-icons-outlined rts-message-sent-status\">check</span>\n <span *ngIf=\"message.status === 'delivered'\" class=\"material-icons-outlined rts-message-delivered-status\">check</span>\n <span *ngIf=\"message.status === 'seen'\" class=\"material-icons-outlined rts-message-seen-status\">done_all</span>\n </span>\n <span class=\"rts-messenger-message-time\">{{timeFormatService.formatTimeOrDate(message.createdAt)}}</span>\n</div>\n","export const COMMON_CONSTANTS = {\n minPasswordLength: 8,\n requestItemLimit: 20,\n customTimeFormat: 'HH:mm',\n customDateFormat: 'dd/MM/YYYY',\n customDateFormatDaysJs: 'DD/MM/YYYY',\n customDateTimeFormat: 'dd/MM/YYYY HH:mm',\n defaultProfileImgUrl: 'https://rtsee-local-files-vault.s3.us-east-1.amazonaws.com/0e58dbea-568c-4007-9a55-3d6f0c859ffb_default-profile-image.png',\n mobileBreakpoint: 800,\n};\n","import { AfterViewInit, Directive, ElementRef } from '@angular/core';\nimport shave from 'shave';\n\n@Directive({\n selector: '[rtseeShave]',\n standalone: true,\n})\nexport class ShaveDirective implements AfterViewInit {\n constructor(private elem: ElementRef<HTMLDivElement>) {}\n\n ngAfterViewInit() {\n const height = this.elem.nativeElement?.offsetHeight;\n shave(this.elem.nativeElement as unknown as NodeList, height);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RTSeeChatTypes, IMessageThumbnail } from '@rtsee/common';\nimport { TimeFormatHelperService } from '../../../services/time-format-helper.service';\nimport { MessageTimeAndStatusComponent } from '../message/components/message-time-and-status/message-time-and-status.component';\nimport { NgClass, NgIf } from '@angular/common';\nimport { COMMON_CONSTANTS } from '../../constans/common.const';\nimport {ShaveDirective} from \"../../../directives/shave.directive\";\n\n@Component({\n selector: 'rtsee-chat-thumbnail',\n templateUrl: './chat-thumbnail.component.html',\n imports: [MessageTimeAndStatusComponent, NgClass, NgIf, ShaveDirective],\n standalone: true,\n})\nexport class ChatThumbnailComponent {\n @Input() chat!: IMessageThumbnail;\n @Input() messenger!: RTSeeMessenger;\n\n readonly RTSeeChatTypes = RTSeeChatTypes;\n\n constructor(public timeFormatService: TimeFormatHelperService) {}\n\n protected readonly COMMON_CONSTANTS = COMMON_CONSTANTS;\n}\n","<div class=\"rts-chat-thumbnail\" (click)=\"messenger.openChatById(chat.chatId)\">\n <div class=\"rts-chat-thumbnail-image\">\n <img [src]=\"chat.chatImageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rts-chat-thumbnail-left\">\n <div class=\"rts-chat-thumbnail-name\">\n <span>{{ chat.chatName }}</span>\n <div class=\"rts-chat-thumbnail-status\">\n <rtsee-message-time-and-status [message]=\"chat\"\n [hideStatus]=\"chat && !!(chat.unreadMessagesCount)\">\n </rtsee-message-time-and-status>\n </div>\n </div>\n <div class=\"rts-chat-thumbnail-last-message\"\n [ngClass]=\"{'rts-has-unread': chat.unreadMessagesCount}\"\n rtseeShave>\n @if (chat.chatType !== RTSeeChatTypes.INDIVIDUAL && chat.senderName) {\n <span class=\"rts-chat-thumbnail-last-message-sender\">{{chat.senderName}}</span>\n <span>:</span>\n <span> </span>\n }\n @if (chat.text) {\n <span class=\"rts-chat-thumbnail-last-message-text\">{{chat.text}}</span>\n }\n @if (chat.unreadMessagesCount) {\n <div class=\"rts-messenger-thumbnail-unread\">\n <span class=\"rts-messenger-thumbnail-unread-count\">{{chat.unreadMessagesCount}}</span>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\nimport { NgForOf } from '@angular/common';\nimport { ChatThumbnailComponent } from '../chat-thumbnail/chat-thumbnail.component';\n\n@Component({\n selector: 'rtsee-chats-list',\n templateUrl: './chats-list.component.html',\n imports: [NgForOf, ChatThumbnailComponent],\n standalone: true,\n})\nexport class ChatsListComponent implements OnInit {\n @Input() messenger!: RTSeeMessenger;\n @Input() chats!: RTSeeChat[];\n\n ngOnInit(): void {\n // console.log(this.chats);\n }\n}\n","<div class=\"rts-chats-list\">\n <div class=\"rts-chat-thumbnail-container\" *ngFor=\"let chat of chats; let last = last;\">\n <rtsee-chat-thumbnail [chat]=\"chat.thumbnail\" [messenger]=\"messenger\"></rtsee-chat-thumbnail>\n </div>\n</div>\n","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[widgetHost]',\n standalone: true,\n})\nexport class WidgetDirective {\n constructor(public viewContainerRef: ViewContainerRef) {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { IRatingConfigWithRate } from '@rtsee/common';\nimport { NgClass } from '@angular/common';\nimport { IRTSeeRateBase } from '@rtsee/common/src/interfaces/utilities/rating/Rate';\n\n@Component({\n selector: 'rtsee-rating',\n imports: [NgClass],\n templateUrl: './rating.component.html',\n})\nexport class RatingComponent implements OnInit {\n stars: string[] = [];\n mutable: boolean = false;\n rateValue: number = 0;\n\n @Input() config?: IRatingConfigWithRate;\n @Input() rate?: Pick<IRTSeeRateBase, 'value' | 'maxValue'>;\n\n ngOnInit(): void {\n this.init();\n }\n\n init(): void {\n if (this.rate) {\n this.initStars(this.rate.value, this.rate.maxValue);\n this.rateValue = this.rate.value;\n } else if (this.config) {\n this.mutable = true;\n this.initStars(this.config.rate?.value || 0, this.config.maxRateValue);\n this.rateValue = this.config.rate?.value || 0;\n } else {\n throw new Error(`Neither rate nor vote config provided!`);\n }\n }\n\n initStars(value: number, maxValue: number): void {\n const stars: string[] = [];\n const full: number = Math.floor(value);\n const hasHalf: boolean = value - full >= 0.25;\n for (let i: number = 0; i < full; i++) {\n stars.push('full');\n }\n if (hasHalf) {\n stars.push('half');\n }\n while (stars.length < maxValue) {\n stars.push('empty');\n }\n this.stars = stars;\n }\n\n onStarClicked(index: number): void {\n if (!this.config || !this.config.rate) {\n return;\n }\n this.config.rate.value = index + 1;\n this.init();\n }\n}\n","<div class=\"rtsee-rating\">\n @for (star of stars; track $index) {\n <span class=\"rtsee-rating-star\"\n [ngClass]=\"{\n 'rtsee-rating-star-full': star === 'full',\n 'rtsee-rating-star-half': star === 'half',\n 'rtsee-rating-star-empty': star === 'empty',\n 'rtsee-rating-star-clickable': mutable\n }\"\n (click)=\"onStarClicked($index)\"\n >★</span>\n }\n @if (rateValue) {\n <span class=\"rtsee-rating-number\">{{ rateValue }}</span>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeChat, RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';\nimport { IRTSeeCall } from '@rtsee/core';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'ngx-call-widget',\n templateUrl: './call-widget.component.html',\n styleUrls: ['./call-widget.component.scss'],\n imports: [NgClass],\n standalone: true,\n})\nexport class CallWidgetComponent implements OnInit {\n @Input() message!: RTSeeMessage<IRTSeeCall>;\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n\n ngOnInit(): void {}\n\n joinCall() {\n console.log('message data: ', this.message.data);\n if (\n !this.messenger ||\n (!this.message.data?.roomId && !this.chat.conferenceRoom)\n ) {\n console.log('No Room Id specified or no messenger!');\n return;\n }\n\n const roomId: string | null =\n this.message.data?.roomId || this.chat.conferenceRoom?.id || null;\n\n if (!roomId) {\n console.log('Room Id unavailable!');\n return;\n }\n\n void this.messenger.joinCall(roomId);\n }\n}\n","<div class=\"rts-call-widget\">\n <p> The call has started</p>\n <button class=\"rts-join-call-btn\"\n (click)=\"joinCall()\">\n Join Call\n </button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { IOzzyPromptCost } from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-cost-display',\n standalone: true,\n imports: [],\n template: `\n @if (cost) {\n <div class=\"rts-cost-display\">\n <span class=\"rts-cost-icon\">⚡</span>\n <span class=\"rts-cost-tokens\">\n {{ formatNumber(cost.inputTokens) }} in / {{ formatNumber(cost.outputTokens) }} out\n <span class=\"rts-cost-separator\">·</span>\n {{ formatNumber(cost.totalTokens) }} total\n </span>\n </div>\n }\n `,\n styles: [`\n .rts-cost-display {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 0 0;\n font-size: 11px;\n color: var(--rts-text-muted, #8b8fa3);\n font-family: var(--rts-font-mono, 'SF Mono', 'Fira Code', monospace);\n user-select: none;\n }\n\n .rts-cost-icon {\n font-size: 10px;\n opacity: 0.7;\n }\n\n .rts-cost-tokens {\n letter-spacing: 0.01em;\n }\n\n .rts-cost-separator {\n margin: 0 2px;\n opacity: 0.5;\n }\n `]\n})\nexport class CostDisplayComponent {\n @Input() cost!: IOzzyPromptCost;\n\n formatNumber(n: number): string {\n return n.toLocaleString();\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { RTSeeChat, RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';\nimport { NgClass } from '@angular/common';\nimport { IRTSeeMessageImage, RTSeeIllustratorEvents } from '@rtsee/common';\nimport { fetchImageBlob, sanitizeImageUrl } from '@rtsee/utilities-ui';\nimport { CostDisplayComponent } from '../../../../common/components/cost-display/cost-display.component';\n\n@Component({\n selector: 'rtsee-media-widget',\n standalone: true,\n imports: [NgClass, CostDisplayComponent],\n templateUrl: './media-widget.component.html',\n styleUrls: ['./media-widget.component.scss'],\n})\nexport class MediaWidgetComponent implements OnInit, OnChanges {\n @Input() message!: RTSeeMessage;\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n @Input() showCost = true;\n\n visibleImages: IRTSeeMessageImage[] = [];\n hiddenCount = 0;\n showAll = false;\n downloadingUrl: string | null = null;\n\n private readonly MAX_GRID = 4;\n\n ngOnInit(): void {\n this.updateVisibleImages();\n this.notifyRequestedGeneration();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // e.g. downsized versions got attached to the message images\n if (changes['message'] && !changes['message'].firstChange) {\n this.updateVisibleImages();\n }\n }\n\n /** Downsized version for rendering, the original otherwise */\n previewUrl(img: IRTSeeMessageImage): string {\n return img.smallVersionUrl || img.url;\n }\n\n async downloadOriginal(event: MouseEvent, img: IRTSeeMessageImage): Promise<void> {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window === 'undefined' || !img?.url || this.downloadingUrl) {\n return;\n }\n\n this.downloadingUrl = img.url;\n try {\n const blob: Blob = await fetchImageBlob(img.url);\n const objectUrl: string = URL.createObjectURL(blob);\n const link: HTMLAnchorElement = document.createElement('a');\n link.href = objectUrl;\n link.download = this.getDownloadFileName(img, blob);\n document.body.appendChild(link);\n link.click();\n link.remove();\n setTimeout(() => URL.revokeObjectURL(objectUrl), 1000);\n } catch (e) {\n // CORS / network failure - let the browser open the original instead\n console.warn('[MediaWidget] Blob download failed, opening original image:', e);\n window.open(img.url, '_blank', 'noopener');\n } finally {\n this.downloadingUrl = null;\n }\n }\n\n private getDownloadFileName(img: IRTSeeMessageImage, blob: Blob): string {\n const extension: string = blob.type?.split('/')[1]?.split('+')[0] || 'png';\n const base: string = (img.name || img.id || 'image').replace(/[^\\w.-]+/g, '-');\n return base.includes('.') ? base : `${base}.${extension}`;\n }\n\n get hasVideo(): boolean {\n return !!this.message.video;\n }\n\n get hasImages(): boolean {\n return !!(this.message.images?.length);\n }\n\n get gridClass(): string {\n const count = this.visibleImages.length;\n if (count === 1) return 'rts-media-grid-1';\n if (count === 2) return 'rts-media-grid-2';\n return 'rts-media-grid-4';\n }\n\n toggleShowAll(): void {\n this.showAll = !this.showAll;\n this.updateVisibleImages();\n }\n\n sendToIllustrator(event: MouseEvent, img: IRTSeeMessageImage): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined' && img?.url) {\n // Retain AWS presigned URL so Illustrator can render the image preview!\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.SET_IMAGE_FOR_REVIEW, {\n detail: {\n imageUrl: img.url,\n prompt: img.name || (typeof this.message.text === 'string' ? this.message.text : '') || '',\n source: 'messenger',\n },\n })\n );\n }\n }\n\n addToContext(event: MouseEvent, img: IRTSeeMessageImage): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined' && img?.url) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: 'chat-img-' + Math.random().toString(36).substring(2, 9),\n imageUrl: img.url,\n title: img.name || 'Chat image',\n description: (typeof this.message.text === 'string' ? this.message.text : '') || '',\n visualDescription: '',\n sourceType: 'custom',\n active: true,\n },\n })\n );\n }\n }\n\n private updateVisibleImages(): void {\n const all = this.message.images || [];\n if (this.showAll || all.length <= this.MAX_GRID) {\n this.visibleImages = all;\n this.hiddenCount = 0;\n } else {\n this.visibleImages = all.slice(0, this.MAX_GRID);\n this.hiddenCount = all.length - this.MAX_GRID;\n }\n }\n\n private notifyRequestedGeneration(): void {\n const reqId = (this.message?.data as any)?.requestId;\n if (reqId && this.visibleImages.length > 0 && typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.REQUESTED_GENERATION_SUCCEED, {\n detail: {\n requestId: reqId,\n imageUrl: this.visibleImages[0].url,\n messageId: this.message.id,\n chatId: this.chat?.id,\n },\n })\n );\n }\n }\n}\n","<div class=\"rts-media-widget\">\n <!-- Video player -->\n @if (message.video) {\n <div class=\"rts-media-video\">\n <video\n controls\n playsinline\n preload=\"metadata\"\n [src]=\"message.video.url\"\n class=\"rts-video-player\"\n >\n Your browser does not support video playback.\n </video>\n </div>\n }\n\n <!-- Image grid -->\n @if (hasImages) {\n <div class=\"rts-media-images\" [ngClass]=\"gridClass\">\n @for (img of visibleImages; track img.id || img.url) {\n <div class=\"rts-media-image-wrapper\">\n <img [src]=\"previewUrl(img)\" [alt]=\"img.name\" class=\"rts-media-image\" loading=\"lazy\" />\n <button\n type=\"button\"\n class=\"rts-media-btn-download\"\n [class.rts-downloading]=\"downloadingUrl === img.url\"\n title=\"Download original image\"\n aria-label=\"Download original image\"\n (click)=\"downloadOriginal($event, img)\"\n >\n <i class=\"pi\" [ngClass]=\"downloadingUrl === img.url ? 'pi-spin pi-spinner' : 'pi-download'\"></i>\n </button>\n <div class=\"rts-media-image-actions\">\n <button\n type=\"button\"\n class=\"rts-media-btn-paint\"\n title=\"Send image to Illustrator (Review & Iterate)\"\n (click)=\"sendToIllustrator($event, img)\"\n >\n <i class=\"pi pi-palette\"></i>\n <span>+ paint</span>\n </button>\n <button\n type=\"button\"\n class=\"rts-media-btn-context\"\n title=\"Add image to Illustrator context references\"\n (click)=\"addToContext($event, img)\"\n >\n <i class=\"pi pi-plus\"></i>\n <span>+ context</span>\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Show more / less toggle -->\n @if (hiddenCount > 0 || showAll) {\n <button class=\"rts-media-toggle\" (click)=\"toggleShowAll()\">\n {{ showAll ? 'Show less' : 'Show ' + hiddenCount + ' more' }}\n </button>\n }\n\n <!-- Cost display (optional, disabled when nested inside agentic widget) -->\n @if (showCost && message.cost) {\n <div class=\"rts-media-cost\">\n <rtsee-cost-display [cost]=\"message.cost\"></rtsee-cost-display>\n </div>\n }\n</div>\n","import {\n Component,\n Input,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { RTSeeChat, RTSeeChatEvents, RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';\nimport { NgClass } from '@angular/common';\nimport { CostDisplayComponent } from '../../../../common/components/cost-display/cost-display.component';\nimport { MediaWidgetComponent } from '../media-widget/media-widget.component';\n\n@Component({\n selector: 'rtsee-agentic-text-response',\n standalone: true,\n imports: [NgClass, CostDisplayComponent, MediaWidgetComponent],\n templateUrl: './agentic-text-response.component.html',\n styleUrls: ['./agentic-text-response.component.scss'],\n})\nexport class AgenticTextResponseComponent implements OnInit, OnDestroy {\n @Input() message!: RTSeeMessage;\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n\n isStreaming = false;\n streamText = '';\n\n private flowId: string | null = null;\n private onStreamStartBound: (data: any) => void;\n private onChunkBound: (data: any) => void;\n private onStreamEndBound: (data: any) => void;\n\n constructor(private cdr: ChangeDetectorRef) {\n this.onStreamStartBound = this.onStreamStart.bind(this);\n this.onChunkBound = this.onChunk.bind(this);\n this.onStreamEndBound = this.onStreamEnd.bind(this);\n }\n\n ngOnInit(): void {\n this.flowId = this.message.data?.flowId || null;\n\n // If the message already has text, it's a saved/finished message\n if (this.message.text) {\n this.streamText = this.message.text;\n this.isStreaming = false;\n return;\n }\n\n // Otherwise, listen for streaming events\n this.isStreaming = true;\n this.chat.on(RTSeeChatEvents.AGENT_CHUNK_RECEIVED, this.onChunkBound);\n this.chat.on(RTSeeChatEvents.AGENT_STREAM_STARTED, this.onStreamStartBound);\n this.chat.on(RTSeeChatEvents.AGENT_STREAM_ENDED, this.onStreamEndBound);\n }\n\n ngOnDestroy(): void {\n this.chat.off(RTSeeChatEvents.AGENT_CHUNK_RECEIVED, this.onChunkBound);\n this.chat.off(RTSeeChatEvents.AGENT_STREAM_STARTED, this.onStreamStartBound);\n this.chat.off(RTSeeChatEvents.AGENT_STREAM_ENDED, this.onStreamEndBound);\n }\n\n get displayText(): string {\n return this.streamText || this.message.text || '';\n }\n\n get hasMedia(): boolean {\n return !!(this.message.images?.length || this.message.video);\n }\n\n private onStreamStart(data: { flowId: string }): void {\n if (this.flowId && data.flowId !== this.flowId) {\n return;\n }\n this.isStreaming = true;\n this.streamText = '';\n this.cdr.detectChanges();\n }\n\n private onChunk(data: { chatId: string; flowId: string; text: string }): void {\n if (this.flowId && data.flowId !== this.flowId) {\n return;\n }\n this.streamText += data.text;\n this.cdr.detectChanges();\n }\n\n private onStreamEnd(data: { flowId: string }): void {\n if (this.flowId && data.flowId !== this.flowId) {\n return;\n }\n this.isStreaming = false;\n this.cdr.detectChanges();\n }\n}\n","<div class=\"rts-agentic-response\" [ngClass]=\"{'rts-agentic-streaming': isStreaming}\">\n <div class=\"rts-agentic-badge\">\n <span class=\"rts-agentic-badge-icon\">✦</span>\n <span class=\"rts-agentic-badge-label\">AI</span>\n </div>\n\n <div class=\"rts-agentic-text-block\">\n <p class=\"rts-agentic-text\">{{ displayText }}@if (isStreaming) {<span class=\"rts-agentic-cursor\"></span>}</p>\n </div>\n\n <!-- Media section (images/video from agentic response) -->\n @if (hasMedia) {\n <rtsee-media-widget\n [message]=\"message\"\n [messenger]=\"messenger\"\n [chat]=\"chat\"\n [showCost]=\"false\"\n ></rtsee-media-widget>\n }\n\n <!-- Token usage footer -->\n @if (!isStreaming && message.cost) {\n <div class=\"rts-agentic-footer\">\n <rtsee-cost-display [cost]=\"message.cost\"></rtsee-cost-display>\n </div>\n }\n</div>\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { DatePipe, NgClass } from '@angular/common';\nimport {\n OzzyClientTask,\n OzzyClientTaskEvents,\n RTSeeChat,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { IOzzyTaskLog, OzzyTaskStatus } from '@rtsee/common';\n\n/**\n * Default client-side representation of a server-side OzzyTask.\n * Can be used directly (`[task]`) or as a message widget (`message.data.taskId`).\n */\n@Component({\n selector: 'rtsee-task',\n standalone: true,\n imports: [NgClass, DatePipe],\n templateUrl: './rtsee-task.component.html',\n styleUrls: ['./rtsee-task.component.scss'],\n})\nexport class RTSeeTaskComponent implements OnInit, OnChanges, OnDestroy {\n @Input() task?: OzzyClientTask | null;\n @Input() message?: RTSeeMessage;\n @Input() messenger?: RTSeeMessenger;\n @Input() chat?: RTSeeChat;\n /** hide the execute button (e.g. when the workflow executes the task itself) */\n @Input() allowExecute: boolean = true;\n\n @ViewChild('logsContainer') logsContainer?: ElementRef<HTMLDivElement>;\n\n copied: 'input' | 'output' | null = null;\n\n private subscribedTask: OzzyClientTask | null = null;\n private onChangedBound = () => this.onTaskChanged();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (!this.task && this.message?.data?.taskId && this.messenger) {\n this.task = this.messenger.ozzy.getTask(this.message.data.taskId);\n }\n this.subscribe();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['task'] && !changes['task'].firstChange) {\n this.subscribe();\n }\n }\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n get statusLabel(): string {\n switch (this.task?.status) {\n case OzzyTaskStatus.IN_PROGRESS:\n return 'Running';\n case OzzyTaskStatus.SUCCESS:\n return 'Completed';\n case OzzyTaskStatus.FAIL:\n return 'Failed';\n default:\n return 'Ready';\n }\n }\n\n get statusClass(): string {\n switch (this.task?.status) {\n case OzzyTaskStatus.IN_PROGRESS:\n return 'rts-task-status-running';\n case OzzyTaskStatus.SUCCESS:\n return 'rts-task-status-success';\n case OzzyTaskStatus.FAIL:\n return 'rts-task-status-fail';\n default:\n return 'rts-task-status-ready';\n }\n }\n\n get inputJson(): string {\n return this.toJson(this.task?.input);\n }\n\n get outputJson(): string {\n return this.toJson(this.task?.output);\n }\n\n get hasOutput(): boolean {\n return this.task?.output !== undefined && this.task?.output !== null;\n }\n\n get hasLogs(): boolean {\n return !!(this.task?.logs?.length || this.task?.liveText);\n }\n\n execute(): void {\n void this.task?.execute();\n }\n\n async copy(kind: 'input' | 'output'): Promise<void> {\n try {\n await navigator.clipboard.writeText(kind === 'input' ? this.inputJson : this.outputJson);\n this.copied = kind;\n this.cdr.detectChanges();\n setTimeout(() => {\n this.copied = null;\n this.cdr.detectChanges();\n }, 1500);\n } catch (e) {\n console.log('Failed to copy', e);\n }\n }\n\n trackLog(index: number, log: IOzzyTaskLog): string {\n return `${index}-${log.level}`;\n }\n\n private toJson(value: unknown): string {\n if (value === undefined || value === null) {\n return '';\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n }\n\n private subscribe(): void {\n if (this.subscribedTask === this.task) {\n return;\n }\n this.unsubscribe();\n if (this.task) {\n this.subscribedTask = this.task;\n this.task.on(OzzyClientTaskEvents.CHANGED, this.onChangedBound);\n }\n }\n\n private unsubscribe(): void {\n this.subscribedTask?.off(OzzyClientTaskEvents.CHANGED, this.onChangedBound);\n this.subscribedTask = null;\n }\n\n private onTaskChanged(): void {\n this.cdr.detectChanges();\n const el = this.logsContainer?.nativeElement;\n if (el) {\n el.scrollTop = el.scrollHeight;\n }\n }\n}\n","<div class=\"rts-task\" [ngClass]=\"statusClass\">\n @if (task) {\n <div class=\"rts-task-header\">\n <div class=\"rts-task-identity\">\n <span class=\"rts-task-icon\">⚙</span>\n <div class=\"rts-task-titles\">\n <span class=\"rts-task-name\">{{ task.name || 'Task' }}</span>\n <span class=\"rts-task-id\" [title]=\"task.id\">#{{ task.id }}</span>\n </div>\n </div>\n <span class=\"rts-task-status\">\n <span class=\"rts-task-status-dot\"></span>\n {{ statusLabel }}\n </span>\n </div>\n\n <!-- Input -->\n <div class=\"rts-task-section\">\n <div class=\"rts-task-section-head\">\n <span class=\"rts-task-section-label\">Input</span>\n @if (inputJson) {\n <button type=\"button\" class=\"rts-task-copy\" (click)=\"copy('input')\">\n {{ copied === 'input' ? 'Copied' : 'Copy' }}\n </button>\n }\n </div>\n @if (inputJson) {\n <pre class=\"rts-task-code\"><code>{{ inputJson }}</code></pre>\n } @else if (task.loading) {\n <div class=\"rts-task-placeholder\">Loading…</div>\n } @else {\n <div class=\"rts-task-placeholder\">No input</div>\n }\n </div>\n\n @if (allowExecute) {\n <div class=\"rts-task-actions\">\n <button type=\"button\"\n class=\"rts-task-execute\"\n [disabled]=\"!task.canExecute\"\n (click)=\"execute()\"\n >\n @if (task.isRunning || task.executeInProgress) {\n <span class=\"rts-task-spinner\"></span> Executing…\n } @else if (task.isFailed) {\n <span class=\"pi pi-refresh\"></span> Retry\n } @else if (task.isFinished) {\n <span class=\"pi pi-check\"></span> Executed\n } @else {\n <span class=\"pi pi-play\"></span> Execute\n }\n </button>\n </div>\n }\n\n <!-- Logs -->\n @if (hasLogs || task.isRunning) {\n <div class=\"rts-task-section\">\n <div class=\"rts-task-section-head\">\n <span class=\"rts-task-section-label\">Logs</span>\n @if (task.isRunning) {\n <span class=\"rts-task-live\">LIVE</span>\n }\n </div>\n <div #logsContainer class=\"rts-task-terminal\">\n @for (log of task.logs; track $index) {\n <div class=\"rts-task-log\" [ngClass]=\"'rts-task-log-' + log.level\">\n <span class=\"rts-task-log-time\">{{ log.createdAt | date: 'HH:mm:ss' }}</span>\n <span class=\"rts-task-log-level\">{{ log.level }}</span>\n <span class=\"rts-task-log-message\">{{ log.message }}</span>\n </div>\n }\n @if (task.liveText) {\n <div class=\"rts-task-live-text\">{{ task.liveText }}@if (task.isRunning) {<span class=\"rts-task-cursor\"></span>}</div>\n } @else if (task.isRunning && !task.logs.length) {\n <div class=\"rts-task-log rts-task-log-info\">\n <span class=\"rts-task-log-message\">Waiting for logs…</span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Output -->\n @if (hasOutput) {\n <div class=\"rts-task-section rts-task-section-output\">\n <div class=\"rts-task-section-head\">\n <span class=\"rts-task-section-label\">Output</span>\n <button type=\"button\" class=\"rts-task-copy\" (click)=\"copy('output')\">\n {{ copied === 'output' ? 'Copied' : 'Copy' }}\n </button>\n </div>\n <pre class=\"rts-task-code\"><code>{{ outputJson }}</code></pre>\n </div>\n }\n\n @if (task.errors.length) {\n <div class=\"rts-task-errors\">\n @for (error of task.errors; track $index) {\n <div class=\"rts-task-error\">{{ error.message }}</div>\n }\n </div>\n }\n\n @if (task.requestError) {\n <div class=\"rts-task-errors\">\n <div class=\"rts-task-error\">{{ task.requestError }}</div>\n </div>\n }\n } @else {\n <div class=\"rts-task-placeholder\">Task is not available yet.</div>\n }\n</div>\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n OzzyClientTask,\n OzzyWorkflow,\n OzzyWorkflowClientEvents,\n OzzyWorkflowStep,\n RTSeeChat,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { RTSeeTaskComponent } from '../../message-widgets/rtsee-task/rtsee-task.component';\n\n/**\n * Generic workflow step which renders the task executed by the step.\n */\n@Component({\n selector: 'rtsee-workflow-task-step',\n standalone: true,\n imports: [RTSeeTaskComponent],\n template: `\n @if (task) {\n <rtsee-task [task]=\"task\" [allowExecute]=\"!step.isPending\"></rtsee-task>\n } @else {\n <div class=\"rts-workflow-step-waiting\">\n <span class=\"rts-workflow-step-waiting-spinner\"></span>\n Preparing task…\n </div>\n }\n `,\n styles: [`\n .rts-workflow-step-waiting {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--rts-text-secondary, #8a8fa3);\n padding: 12px 4px;\n }\n .rts-workflow-step-waiting-spinner {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n border: 2px solid rgba(139, 92, 246, 0.25);\n border-top-color: #8b5cf6;\n animation: rts-wts-spin 0.8s linear infinite;\n }\n @keyframes rts-wts-spin { to { transform: rotate(360deg); } }\n `],\n})\nexport class WorkflowTaskStepComponent implements OnInit, OnDestroy {\n @Input() step!: OzzyWorkflowStep;\n @Input() workflow!: OzzyWorkflow;\n @Input() chat?: RTSeeChat;\n @Input() messenger?: RTSeeMessenger;\n\n private onChangedBound = () => this.cdr.detectChanges();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get task(): OzzyClientTask | null {\n return this.step?.task || null;\n }\n\n ngOnInit(): void {\n this.workflow?.on(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n }\n\n ngOnDestroy(): void {\n this.workflow?.off(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n }\n}\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport {\n OzzyWorkflow,\n OzzyWorkflowClientEvents,\n OzzyWorkflowStep,\n RTSeeChat,\n RTSeeChatMember,\n RTSeeMessenger,\n} from '@rtsee/messenger';\n\nexport interface IStorytellerFormOutput {\n title: string;\n text: string;\n historicDescription: string;\n agentId: string;\n}\n\n/**\n * Storyteller step 1: collects the story data and the agent which will build the story.\n */\n@Component({\n selector: 'rtsee-storyteller-form-step',\n standalone: true,\n imports: [ReactiveFormsModule],\n templateUrl: './storyteller-form-step.component.html',\n styleUrls: ['./storyteller-step.scss'],\n})\nexport class StorytellerFormStepComponent implements OnInit, OnDestroy {\n @Input() step!: OzzyWorkflowStep<unknown, IStorytellerFormOutput>;\n @Input() workflow!: OzzyWorkflow;\n @Input() chat?: RTSeeChat;\n @Input() messenger?: RTSeeMessenger;\n\n form: FormGroup = new FormGroup({\n /* eslint-disable */\n title: new FormControl('', [Validators.required, Validators.maxLength(255)]),\n text: new FormControl('', Validators.required),\n historicDescription: new FormControl(''),\n agentId: new FormControl('', Validators.required),\n /* eslint-enable */\n });\n\n private onChangedBound = () => this.onWorkflowChanged();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get agents(): RTSeeChatMember[] {\n return (this.chat?.members || []).filter((m: RTSeeChatMember) => m.isAgent);\n }\n\n get readonly(): boolean {\n return !this.step?.isActive || !!this.workflow?.submitInProgress;\n }\n\n get textLength(): number {\n return ((this.form.get('text')?.value as string) || '').length;\n }\n\n ngOnInit(): void {\n this.workflow?.on(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n\n const agents: RTSeeChatMember[] = this.agents;\n if (agents.length === 1) {\n this.form.get('agentId')?.setValue(agents[0].id);\n }\n\n this.syncWithStep();\n }\n\n ngOnDestroy(): void {\n this.workflow?.off(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n }\n\n submit(): void {\n if (this.readonly) {\n return;\n }\n\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n\n const value = this.form.value as IStorytellerFormOutput;\n void this.workflow.submitStep<IStorytellerFormOutput>({\n title: value.title.trim(),\n text: value.text,\n historicDescription: value.historicDescription || '',\n agentId: value.agentId,\n });\n }\n\n isInvalid(name: string): boolean {\n const control = this.form.get(name);\n return !!control && control.invalid && control.touched;\n }\n\n private onWorkflowChanged(): void {\n this.syncWithStep();\n this.cdr.detectChanges();\n }\n\n private syncWithStep(): void {\n if (this.step?.output) {\n this.form.patchValue(this.step.output, { emitEvent: false });\n }\n\n if (this.readonly) {\n this.form.disable({ emitEvent: false });\n } else {\n this.form.enable({ emitEvent: false });\n }\n }\n}\n","<form class=\"rts-storyteller-form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">Story title</span>\n <input class=\"rts-storyteller-input\"\n [class.rts-storyteller-invalid]=\"isInvalid('title')\"\n formControlName=\"title\"\n type=\"text\"\n placeholder=\"The Lighthouse Keeper\"\n id=\"storyteller-title-{{ step.id }}\"\n />\n </label>\n\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">\n Story\n <span class=\"rts-storyteller-counter\">{{ textLength }} chars</span>\n </span>\n <textarea class=\"rts-storyteller-input rts-storyteller-textarea rts-storyteller-textarea-lg\"\n [class.rts-storyteller-invalid]=\"isInvalid('text')\"\n formControlName=\"text\"\n placeholder=\"Once upon a time…\"\n id=\"storyteller-text-{{ step.id }}\"\n ></textarea>\n </label>\n\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">Historic description</span>\n <textarea class=\"rts-storyteller-input rts-storyteller-textarea\"\n formControlName=\"historicDescription\"\n placeholder=\"Historic context, era, places, people…\"\n id=\"storyteller-historic-{{ step.id }}\"\n ></textarea>\n </label>\n\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">Agent</span>\n @if (agents.length) {\n <div class=\"rts-storyteller-select-wrap\">\n <select class=\"rts-storyteller-input rts-storyteller-select\"\n [class.rts-storyteller-invalid]=\"isInvalid('agentId')\"\n formControlName=\"agentId\"\n id=\"storyteller-agent-{{ step.id }}\"\n >\n <option value=\"\" disabled>Select an agent</option>\n @for (agent of agents; track agent.id) {\n <option [value]=\"agent.id\">\n {{ agent.name }}{{ agent.agentConfiguration?.model?.model ? ' · ' + agent.agentConfiguration?.model?.model : '' }}\n </option>\n }\n </select>\n <span class=\"rts-storyteller-select-caret pi pi-chevron-down\"></span>\n </div>\n } @else {\n <div class=\"rts-storyteller-hint\">There are no agentic members in this chat. Add an agent to continue.</div>\n }\n </label>\n\n @if (workflow.submitError) {\n <div class=\"rts-storyteller-error\">{{ workflow.submitError }}</div>\n }\n\n @if (step.isActive) {\n <div class=\"rts-storyteller-actions\">\n <button class=\"rts-storyteller-submit\"\n type=\"submit\"\n [disabled]=\"workflow.submitInProgress || !agents.length\"\n id=\"storyteller-submit-{{ step.id }}\"\n >\n @if (workflow.submitInProgress) {\n <span class=\"rts-storyteller-spinner\"></span> Creating…\n } @else {\n ✦ Create story\n }\n </button>\n </div>\n }\n</form>\n","import { Component, Input } from '@angular/core';\nimport { OzzyWorkflow, OzzyWorkflowStep, RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\nimport { getStoryTranslatorLanguage } from '@rtsee/common';\n\ninterface IStoryLinkInput {\n storyId?: string;\n name?: string;\n description?: string;\n slidesCount?: number;\n /** set by the story-translator task */\n language?: string;\n}\n\n/**\n * Storyteller step 3: link to the newly created story.\n */\n@Component({\n selector: 'rtsee-storyteller-story-link-step',\n standalone: true,\n templateUrl: './storyteller-story-link-step.component.html',\n styleUrls: ['../storyteller-form-step/storyteller-step.scss'],\n})\nexport class StorytellerStoryLinkStepComponent {\n @Input() step!: OzzyWorkflowStep<IStoryLinkInput>;\n @Input() workflow!: OzzyWorkflow;\n @Input() chat?: RTSeeChat;\n @Input() messenger?: RTSeeMessenger;\n\n get story(): IStoryLinkInput {\n return this.step?.input || {};\n }\n\n get storyUrl(): string {\n return this.story.storyId ? `/story/${this.story.storyId}` : '';\n }\n\n get kicker(): string {\n const language = this.story.language ? getStoryTranslatorLanguage(this.story.language) : undefined;\n return language ? `Translated to ${language.nativeName}` : 'Your story is ready';\n }\n}\n","@if (storyUrl) {\n <a class=\"rts-story-link-card\" [href]=\"storyUrl\" target=\"_blank\" rel=\"noopener\">\n <div class=\"rts-story-link-icon\">📖</div>\n <div class=\"rts-story-link-body\">\n <span class=\"rts-story-link-kicker\">{{ kicker }}</span>\n <span class=\"rts-story-link-title\">{{ story.name || 'Open story' }}</span>\n @if (story.description) {\n <span class=\"rts-story-link-description\">{{ story.description }}</span>\n }\n @if (story.slidesCount) {\n <span class=\"rts-story-link-meta\">{{ story.slidesCount }} slides</span>\n }\n </div>\n <span class=\"rts-story-link-arrow pi pi-arrow-right\"></span>\n </a>\n} @else {\n <div class=\"rts-storyteller-hint\">The story link will appear here once the story is created.</div>\n}\n","import { ChangeDetectorRef, Component, ElementRef, HostListener, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport {\n OzzyWorkflow,\n OzzyWorkflowClientEvents,\n OzzyWorkflowStep,\n RTSeeChat,\n RTSeeChatMember,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport {\n IRTSeeStory,\n IStoryTranslatorInput,\n IStoryTranslatorLanguage,\n STORY_TRANSLATOR_LANGUAGES,\n} from '@rtsee/common';\n\nconst SEARCH_DEBOUNCE_MS = 250;\n\n/**\n * Story Translator step 1: pick a story (autocomplete by name) and the target language.\n */\n@Component({\n selector: 'rtsee-story-translator-form-step',\n standalone: true,\n imports: [ReactiveFormsModule],\n templateUrl: './story-translator-form-step.component.html',\n styleUrls: ['../storyteller-form-step/storyteller-step.scss', './story-translator-form-step.component.scss'],\n})\nexport class StoryTranslatorFormStepComponent implements OnInit, OnDestroy {\n @Input() step!: OzzyWorkflowStep<unknown, IStoryTranslatorInput>;\n @Input() workflow!: OzzyWorkflow;\n @Input() chat?: RTSeeChat;\n @Input() messenger?: RTSeeMessenger;\n\n @ViewChild('storyInput') storyInput?: ElementRef<HTMLInputElement>;\n\n readonly languages: IStoryTranslatorLanguage[] = STORY_TRANSLATOR_LANGUAGES;\n\n form: FormGroup = new FormGroup({\n /* eslint-disable */\n storyQuery: new FormControl(''),\n storyId: new FormControl('', Validators.required),\n language: new FormControl('', Validators.required),\n agentId: new FormControl('', Validators.required),\n /* eslint-enable */\n });\n\n selectedStory: Pick<IRTSeeStory, 'id' | 'name'> | null = null;\n suggestions: IRTSeeStory[] = [];\n suggestionsOpened: boolean = false;\n highlightedIndex: number = 0;\n searchInProgress: boolean = false;\n searchError: string | null = null;\n\n private searchTimer: ReturnType<typeof setTimeout> | null = null;\n private searchRequestId: number = 0;\n private onChangedBound = () => this.onWorkflowChanged();\n\n constructor(private cdr: ChangeDetectorRef, private host: ElementRef<HTMLElement>) {}\n\n get agents(): RTSeeChatMember[] {\n return (this.chat?.members || []).filter((m: RTSeeChatMember) => m.isAgent);\n }\n\n get readonly(): boolean {\n return !this.step?.isActive || !!this.workflow?.submitInProgress;\n }\n\n get canCancel(): boolean {\n return !!this.workflow?.isDraft && !this.workflow?.submitInProgress && !!this.messenger;\n }\n\n get selectedLanguage(): IStoryTranslatorLanguage | undefined {\n return this.languages.find((l) => l.code === this.form.get('language')?.value);\n }\n\n ngOnInit(): void {\n this.workflow?.on(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n\n const agents: RTSeeChatMember[] = this.agents;\n if (agents.length === 1) {\n this.form.get('agentId')?.setValue(agents[0].id);\n }\n\n this.syncWithStep();\n }\n\n ngOnDestroy(): void {\n this.workflow?.off(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n this.clearSearchTimer();\n }\n\n onStoryFocus(): void {\n if (this.readonly) {\n return;\n }\n this.suggestionsOpened = true;\n if (!this.suggestions.length) {\n this.scheduleSearch(0);\n }\n }\n\n onStoryInput(): void {\n // typing invalidates the previous selection\n if (this.selectedStory) {\n this.selectedStory = null;\n this.form.get('storyId')?.setValue('');\n }\n this.suggestionsOpened = true;\n this.scheduleSearch(SEARCH_DEBOUNCE_MS);\n }\n\n onStoryKeydown(event: KeyboardEvent): void {\n if (!this.suggestionsOpened || !this.suggestions.length) {\n if (event.key === 'ArrowDown') {\n this.suggestionsOpened = true;\n this.scheduleSearch(0);\n }\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.highlightedIndex = (this.highlightedIndex + 1) % this.suggestions.length;\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.highlightedIndex = (this.highlightedIndex - 1 + this.suggestions.length) % this.suggestions.length;\n break;\n case 'Enter':\n event.preventDefault();\n this.selectStory(this.suggestions[this.highlightedIndex]);\n break;\n case 'Escape':\n event.preventDefault();\n this.suggestionsOpened = false;\n break;\n }\n }\n\n selectStory(story?: IRTSeeStory): void {\n if (!story || this.readonly) {\n return;\n }\n\n this.selectedStory = story;\n this.form.patchValue({ storyId: story.id, storyQuery: story.name }, { emitEvent: false });\n this.form.get('storyId')?.markAsTouched();\n this.suggestionsOpened = false;\n }\n\n clearStory(): void {\n if (this.readonly) {\n return;\n }\n this.selectedStory = null;\n this.form.patchValue({ storyId: '', storyQuery: '' }, { emitEvent: false });\n this.suggestionsOpened = true;\n this.scheduleSearch(0);\n setTimeout(() => this.storyInput?.nativeElement.focus());\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentMouseDown(event: MouseEvent): void {\n if (this.suggestionsOpened && !this.host.nativeElement.contains(event.target as Node)) {\n this.suggestionsOpened = false;\n }\n }\n\n submit(): void {\n if (this.readonly) {\n return;\n }\n\n if (this.form.invalid || !this.selectedStory) {\n this.form.markAllAsTouched();\n return;\n }\n\n void this.workflow.submitStep<IStoryTranslatorInput>({\n storyId: this.selectedStory.id,\n storyName: this.selectedStory.name,\n language: this.form.get('language')?.value,\n agentId: this.form.get('agentId')?.value,\n });\n }\n\n cancel(): void {\n if (!this.canCancel) {\n return;\n }\n this.messenger?.discardDraftWorkflow(this.workflow);\n }\n\n isInvalid(name: string): boolean {\n const control = this.form.get(name);\n return !!control && control.invalid && control.touched;\n }\n\n private scheduleSearch(delay: number): void {\n this.clearSearchTimer();\n this.searchTimer = setTimeout(() => void this.search(), delay);\n }\n\n private clearSearchTimer(): void {\n if (this.searchTimer) {\n clearTimeout(this.searchTimer);\n this.searchTimer = null;\n }\n }\n\n private async search(): Promise<void> {\n if (!this.messenger) {\n return;\n }\n\n const requestId: number = ++this.searchRequestId;\n const query: string = (this.form.get('storyQuery')?.value as string) || '';\n this.searchInProgress = true;\n this.searchError = null;\n this.cdr.markForCheck();\n\n try {\n const stories: IRTSeeStory[] = await this.messenger.ozzy.searchStories(query);\n if (requestId !== this.searchRequestId) {\n return;\n }\n this.suggestions = stories;\n this.highlightedIndex = 0;\n } catch (e: any) {\n if (requestId !== this.searchRequestId) {\n return;\n }\n this.suggestions = [];\n this.searchError = e?.friendlyMessage || e?.message || 'Failed to load stories.';\n } finally {\n if (requestId === this.searchRequestId) {\n this.searchInProgress = false;\n this.cdr.detectChanges();\n }\n }\n }\n\n private onWorkflowChanged(): void {\n this.syncWithStep();\n this.cdr.detectChanges();\n }\n\n private syncWithStep(): void {\n const output: IStoryTranslatorInput | undefined = this.step?.output;\n if (output?.storyId) {\n this.selectedStory = { id: output.storyId, name: output.storyName || output.storyId };\n this.form.patchValue(\n { storyId: output.storyId, storyQuery: output.storyName || '', language: output.language, agentId: output.agentId },\n { emitEvent: false },\n );\n }\n\n if (this.readonly) {\n this.suggestionsOpened = false;\n this.form.disable({ emitEvent: false });\n } else {\n this.form.enable({ emitEvent: false });\n }\n }\n}\n","<form class=\"rts-storyteller-form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\" autocomplete=\"off\">\n <div class=\"rts-storyteller-field\">\n <label class=\"rts-storyteller-label\" for=\"story-translator-story-{{ step.id }}\">Story</label>\n <div class=\"rts-st-autocomplete\">\n <span class=\"rts-st-autocomplete-icon pi\" [class.pi-search]=\"!searchInProgress\" [class.pi-spin]=\"searchInProgress\" [class.pi-spinner]=\"searchInProgress\"></span>\n <input #storyInput\n class=\"rts-storyteller-input rts-st-autocomplete-input\"\n [class.rts-storyteller-invalid]=\"isInvalid('storyId')\"\n [class.rts-st-autocomplete-selected]=\"!!selectedStory\"\n formControlName=\"storyQuery\"\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"suggestionsOpened\"\n placeholder=\"Search stories by name…\"\n id=\"story-translator-story-{{ step.id }}\"\n (focus)=\"onStoryFocus()\"\n (input)=\"onStoryInput()\"\n (keydown)=\"onStoryKeydown($event)\"\n />\n @if (selectedStory && !readonly) {\n <button type=\"button\"\n class=\"rts-st-autocomplete-clear pi pi-times\"\n aria-label=\"Clear story\"\n id=\"story-translator-clear-{{ step.id }}\"\n (click)=\"clearStory()\"\n ></button>\n }\n\n @if (suggestionsOpened && !readonly) {\n <ul class=\"rts-st-autocomplete-panel\" role=\"listbox\">\n @if (searchError) {\n <li class=\"rts-st-autocomplete-empty rts-st-autocomplete-error\">{{ searchError }}</li>\n } @else if (!suggestions.length && !searchInProgress) {\n <li class=\"rts-st-autocomplete-empty\">No stories found</li>\n }\n @for (story of suggestions; track story.id; let i = $index) {\n <li class=\"rts-st-autocomplete-option\"\n role=\"option\"\n [class.rts-st-autocomplete-option-active]=\"i === highlightedIndex\"\n [attr.aria-selected]=\"story.id === selectedStory?.id\"\n (mouseenter)=\"highlightedIndex = i\"\n (mousedown)=\"$event.preventDefault(); selectStory(story)\"\n >\n @if (story.imageUrl) {\n <img class=\"rts-st-autocomplete-thumb\" [src]=\"story.imageUrl\" [alt]=\"story.name\" loading=\"lazy\" />\n } @else {\n <span class=\"rts-st-autocomplete-thumb rts-st-autocomplete-thumb-empty\">📖</span>\n }\n <span class=\"rts-st-autocomplete-option-body\">\n <span class=\"rts-st-autocomplete-option-name\">{{ story.name }}</span>\n @if (story.totalSlides) {\n <span class=\"rts-st-autocomplete-option-meta\">{{ story.totalSlides }} slides</span>\n }\n </span>\n </li>\n }\n </ul>\n }\n </div>\n </div>\n\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">Translate to</span>\n <div class=\"rts-storyteller-select-wrap\">\n <select class=\"rts-storyteller-input rts-storyteller-select\"\n [class.rts-storyteller-invalid]=\"isInvalid('language')\"\n formControlName=\"language\"\n id=\"story-translator-language-{{ step.id }}\"\n >\n <option value=\"\" disabled>Select a language</option>\n @for (language of languages; track language.code) {\n <option [value]=\"language.code\">{{ language.nativeName }}</option>\n }\n </select>\n <span class=\"rts-storyteller-select-caret pi pi-chevron-down\"></span>\n </div>\n </label>\n\n <label class=\"rts-storyteller-field\">\n <span class=\"rts-storyteller-label\">Agent</span>\n @if (agents.length) {\n <div class=\"rts-storyteller-select-wrap\">\n <select class=\"rts-storyteller-input rts-storyteller-select\"\n [class.rts-storyteller-invalid]=\"isInvalid('agentId')\"\n formControlName=\"agentId\"\n id=\"story-translator-agent-{{ step.id }}\"\n >\n <option value=\"\" disabled>Select an agent</option>\n @for (agent of agents; track agent.id) {\n <option [value]=\"agent.id\">\n {{ agent.name }}{{ agent.agentConfiguration?.model?.model ? ' · ' + agent.agentConfiguration?.model?.model : '' }}\n </option>\n }\n </select>\n <span class=\"rts-storyteller-select-caret pi pi-chevron-down\"></span>\n </div>\n } @else {\n <div class=\"rts-storyteller-hint\">There are no agentic members in this chat. Add an agent to continue.</div>\n }\n </label>\n\n @if (workflow.submitError) {\n <div class=\"rts-storyteller-error\">{{ workflow.submitError }}</div>\n }\n\n @if (step.isActive) {\n <div class=\"rts-storyteller-actions rts-st-translator-actions\">\n @if (canCancel) {\n <button class=\"rts-st-cancel\"\n type=\"button\"\n id=\"story-translator-cancel-{{ step.id }}\"\n (click)=\"cancel()\"\n >Cancel</button>\n }\n <button class=\"rts-storyteller-submit\"\n type=\"submit\"\n [disabled]=\"workflow.submitInProgress || !agents.length\"\n id=\"story-translator-submit-{{ step.id }}\"\n >\n @if (workflow.submitInProgress) {\n <span class=\"rts-storyteller-spinner\"></span> Translating…\n } @else {\n 🌐 Translate{{ selectedLanguage ? ' to ' + selectedLanguage.nativeName : '' }}\n }\n </button>\n </div>\n }\n</form>\n","import { Injectable, Type } from '@angular/core';\nimport { WorkflowTaskStepComponent } from '../components/rtsee-messenger/workflow-steps/workflow-task-step/workflow-task-step.component';\nimport { StorytellerFormStepComponent } from '../components/rtsee-messenger/workflow-steps/storyteller-form-step/storyteller-form-step.component';\nimport { StorytellerStoryLinkStepComponent } from '../components/rtsee-messenger/workflow-steps/storyteller-story-link-step/storyteller-story-link-step.component';\nimport { StoryTranslatorFormStepComponent } from '../components/rtsee-messenger/workflow-steps/story-translator-form-step/story-translator-form-step.component';\n\nexport interface IWorkflowStepWidget {\n /** matches IOzzyWorkflowStepDefinition.widget */\n name: string;\n /** standalone component with `step`, `workflow`, `chat`, `messenger` inputs */\n component: Type<unknown>;\n}\n\n/**\n * Registry of the components which render workflow steps inside the rts-workflow widget.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkflowStepsService {\n stepsMap: IWorkflowStepWidget[] = [\n { name: 'workflow-task-step', component: WorkflowTaskStepComponent },\n { name: 'storyteller-form-step', component: StorytellerFormStepComponent },\n { name: 'storyteller-story-link-step', component: StorytellerStoryLinkStepComponent },\n { name: 'story-translator-form-step', component: StoryTranslatorFormStepComponent },\n ];\n\n register(widget: IWorkflowStepWidget): void {\n this.stepsMap = [...this.stepsMap.filter((e) => e.name !== widget.name), widget];\n }\n\n getStepComponentByName(name?: string): Type<unknown> | null {\n if (!name) {\n return null;\n }\n return this.stepsMap.find((e) => e.name === name)?.component || null;\n }\n}\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit, Type } from '@angular/core';\nimport { NgClass, NgComponentOutlet } from '@angular/common';\nimport {\n OzzyWorkflow,\n OzzyWorkflowClientEvents,\n OzzyWorkflowStep,\n RTSeeChat,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { WorkflowStepsService } from '../../../../services/workflow-steps.service';\n\n/**\n * Message widget hosting an Ozzy workflow: header, step navigation and the viewed step component.\n */\n@Component({\n selector: 'rtsee-rts-workflow',\n standalone: true,\n imports: [NgClass, NgComponentOutlet],\n templateUrl: './rts-workflow.component.html',\n styleUrls: ['./rts-workflow.component.scss'],\n})\nexport class RtsWorkflowComponent implements OnInit, OnDestroy {\n @Input() message!: RTSeeMessage;\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n\n workflow: OzzyWorkflow | null = null;\n loading: boolean = false;\n loadError: string | null = null;\n\n private subscribed: OzzyWorkflow | null = null;\n private onChangedBound = () => this.cdr.detectChanges();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private workflowSteps: WorkflowStepsService,\n ) {}\n\n ngOnInit(): void {\n const draft: OzzyWorkflow | undefined = this.message?.data?.draftWorkflow;\n\n if (draft) {\n this.setWorkflow(draft);\n return;\n }\n\n void this.connect();\n }\n\n ngOnDestroy(): void {\n this.subscribed?.off(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n this.subscribed = null;\n }\n\n get viewedStep(): OzzyWorkflowStep | null {\n return this.workflow?.viewedStep || null;\n }\n\n get stepComponent(): Type<unknown> | null {\n return this.workflowSteps.getStepComponentByName(this.viewedStep?.widget);\n }\n\n get stepInputs(): Record<string, unknown> {\n return {\n step: this.viewedStep,\n workflow: this.workflow,\n chat: this.chat,\n messenger: this.messenger,\n };\n }\n\n get progress(): number {\n const steps = this.workflow?.steps || [];\n if (!steps.length) {\n return 0;\n }\n const finished = steps.filter((s) => s.isFinished).length;\n return Math.round((finished / steps.length) * 100);\n }\n\n get statusLabel(): string {\n if (!this.workflow) {\n return '';\n }\n if (this.workflow.isDraft) {\n return 'Draft';\n }\n if (this.workflow.isFinished) {\n return 'Completed';\n }\n if (this.workflow.isFailed) {\n return 'Failed';\n }\n return 'In progress';\n }\n\n stepClass(step: OzzyWorkflowStep): Record<string, boolean> {\n return {\n 'rts-workflow-step-active': step.isActive,\n 'rts-workflow-step-finished': step.isFinished,\n 'rts-workflow-step-failed': step.isFailed,\n 'rts-workflow-step-pending': step.isPending,\n 'rts-workflow-step-viewed': step === this.viewedStep,\n };\n }\n\n viewStep(step: OzzyWorkflowStep): void {\n this.workflow?.viewStep(step);\n }\n\n canView(step: OzzyWorkflowStep): boolean {\n return !!this.workflow?.canView(step);\n }\n\n retry(): void {\n void this.connect();\n }\n\n private async connect(): Promise<void> {\n const workflowId: string | undefined = this.message?.ozzyWorkflowId;\n if (!workflowId || !this.messenger?.ozzy) {\n this.loadError = 'Workflow is not available.';\n return;\n }\n\n this.loading = true;\n this.loadError = null;\n this.cdr.detectChanges();\n\n try {\n this.setWorkflow(await this.messenger.ozzy.connectToWorkflow(workflowId));\n } catch (e: any) {\n this.loadError = e?.friendlyMessage || e?.message || 'Failed to load workflow.';\n } finally {\n this.loading = false;\n this.cdr.detectChanges();\n }\n }\n\n private setWorkflow(workflow: OzzyWorkflow): void {\n this.subscribed?.off(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n this.workflow = workflow;\n this.subscribed = workflow;\n workflow.on(OzzyWorkflowClientEvents.CHANGED, this.onChangedBound);\n }\n}\n","<div class=\"rts-workflow\">\n @if (workflow) {\n <div class=\"rts-workflow-header\">\n <div class=\"rts-workflow-heading\">\n <span class=\"rts-workflow-badge\">#{{ workflow.name }}</span>\n <span class=\"rts-workflow-title\">{{ workflow.title || workflow.name }}</span>\n </div>\n <span class=\"rts-workflow-status\"\n [ngClass]=\"{\n 'rts-workflow-status-finished': workflow.isFinished,\n 'rts-workflow-status-failed': workflow.isFailed,\n 'rts-workflow-status-draft': workflow.isDraft\n }\"\n >{{ statusLabel }}</span>\n </div>\n\n <div class=\"rts-workflow-progress\">\n <div class=\"rts-workflow-progress-bar\" [style.width.%]=\"progress\"></div>\n </div>\n\n <nav class=\"rts-workflow-steps\">\n @for (step of workflow.steps; track step.id; let i = $index; let last = $last) {\n <button type=\"button\"\n class=\"rts-workflow-step\"\n [ngClass]=\"stepClass(step)\"\n [disabled]=\"!canView(step)\"\n (click)=\"viewStep(step)\"\n [title]=\"step.title || step.name\"\n >\n <span class=\"rts-workflow-step-index\">\n @if (step.isFinished) {\n <span class=\"pi pi-check\"></span>\n } @else if (step.isFailed) {\n <span class=\"pi pi-times\"></span>\n } @else {\n {{ i + 1 }}\n }\n </span>\n <span class=\"rts-workflow-step-label\">{{ step.title || step.name }}</span>\n </button>\n @if (!last) {\n <span class=\"rts-workflow-step-connector\"\n [class.rts-workflow-step-connector-done]=\"step.isFinished\"\n ></span>\n }\n }\n </nav>\n\n <section class=\"rts-workflow-body\">\n @if (viewedStep; as step) {\n @if (step.error) {\n <div class=\"rts-workflow-error\">{{ step.error.message }}</div>\n }\n @if (stepComponent) {\n @for (s of [step]; track s.id) {\n <ng-container *ngComponentOutlet=\"stepComponent; inputs: stepInputs\"></ng-container>\n }\n } @else {\n <div class=\"rts-workflow-placeholder\">No widget registered for \"{{ step.widget }}\".</div>\n }\n }\n </section>\n } @else if (loading) {\n <div class=\"rts-workflow-skeleton\">\n <div class=\"rts-workflow-skeleton-line rts-workflow-skeleton-line-sm\"></div>\n <div class=\"rts-workflow-skeleton-line\"></div>\n <div class=\"rts-workflow-skeleton-line rts-workflow-skeleton-line-lg\"></div>\n </div>\n } @else if (loadError) {\n <div class=\"rts-workflow-error\">\n {{ loadError }}\n @if (message.ozzyWorkflowId) {\n <button type=\"button\" class=\"rts-workflow-retry\" (click)=\"retry()\">Retry</button>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { CallWidgetComponent } from '../components/rtsee-messenger/message-widgets/call-widget/call-widget.component';\nimport { AgenticTextResponseComponent } from '../components/rtsee-messenger/message-widgets/agentic-text-response/agentic-text-response.component';\nimport { MediaWidgetComponent } from '../components/rtsee-messenger/message-widgets/media-widget/media-widget.component';\nimport { RtsWorkflowComponent } from '../components/rtsee-messenger/message-widgets/rts-workflow/rts-workflow.component';\nimport { RTSeeTaskComponent } from '../components/rtsee-messenger/message-widgets/rtsee-task/rtsee-task.component';\n\nexport interface IMessageWidget {\n name: string;\n component: any;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MessageWidgetsService {\n widgetsMap: IMessageWidget[] = [\n { name: 'rtsee-call', component: CallWidgetComponent },\n { name: 'agentic-text-response', component: AgenticTextResponseComponent },\n { name: 'rtsee-media', component: MediaWidgetComponent },\n { name: 'rts-workflow', component: RtsWorkflowComponent },\n { name: 'rtsee-task', component: RTSeeTaskComponent },\n ];\n\n getWidgetComponentByName(name: string) {\n /* eslint-disable */\n const mapping = this.widgetsMap.find((e) => e.name === name);\n if (!mapping) {\n return null;\n }\n return mapping.component;\n /* eslint-enable */\n }\n}\n","import {\n AfterViewInit,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n reflectComponentType,\n} from '@angular/core';\nimport {\n RTSeeChat,\n RTSeeChatMember,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { MessageWidgetsService } from '../../../services/message-widgets.service';\nimport { WidgetDirective } from '../../../directives/widget.directive';\nimport { TimeFormatHelperService } from '../../../services/time-format-helper.service';\nimport { NgClass, NgIf } from '@angular/common';\nimport { MessageTimeAndStatusComponent } from './components/message-time-and-status/message-time-and-status.component';\nimport { RatingComponent } from '../../../common/components/rating/rating.component';\nimport { IRTSeeRateConfiguration } from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-message',\n templateUrl: './message.component.html',\n imports: [\n NgClass,\n MessageTimeAndStatusComponent,\n WidgetDirective,\n RatingComponent,\n ],\n standalone: true,\n})\nexport class MessageComponent implements OnInit, AfterViewInit, OnChanges {\n @Input() chat!: RTSeeChat;\n @Input() message!: RTSeeMessage;\n @Input() member!: RTSeeChatMember<any>;\n @Input() messenger!: RTSeeMessenger;\n @ViewChild(WidgetDirective, { static: false }) widgetHost!: WidgetDirective;\n private widgetRef: ComponentRef<any> | null = null;\n private widgetHasMessageInput: boolean = false;\n\n constructor(\n private widgetsService: MessageWidgetsService,\n private componentFactoryResolver: ComponentFactoryResolver,\n public timeFormatService: TimeFormatHelperService,\n ) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n // The message instance can be replaced (e.g. images got downsized versions) - forward it to the widget\n if (changes['message'] && !changes['message'].firstChange && this.widgetRef) {\n if (this.widgetHasMessageInput) {\n this.widgetRef.setInput('message', this.message);\n } else {\n this.widgetRef.instance.message = this.message;\n this.widgetRef.changeDetectorRef.markForCheck();\n }\n }\n }\n\n ngAfterViewInit() {\n /* eslint-disable */\n if (this.message.widget) {\n const widget = this.widgetsService.getWidgetComponentByName(\n this.message.widget,\n );\n if (!widget) {\n return;\n }\n const viewContainerRef = this.widgetHost.viewContainerRef;\n viewContainerRef.clear();\n const componentToShow =\n this.componentFactoryResolver.resolveComponentFactory(widget);\n const componentRef: ComponentRef<typeof widget> =\n viewContainerRef.createComponent(componentToShow);\n componentRef.instance.message = this.message;\n componentRef.instance.messenger = this.messenger;\n componentRef.instance.chat = this.chat;\n componentRef.changeDetectorRef.detectChanges();\n this.widgetRef = componentRef;\n this.widgetHasMessageInput = !!reflectComponentType(widget)?.inputs.some(\n (input) => input.propName === 'message',\n );\n }\n /* eslint-enable */\n }\n}\n","<div class=\"rts-message-container\" #rtsMessageContainer\n [ngClass]=\"{'rts-message-from-me': message.from.id === messenger.clientId}\"\n>\n <div class=\"rts-messenger-message\">\n @if (message.widget) {\n <ng-template widgetHost></ng-template>\n }\n @if (!message.widget) {\n <p class=\"rts-messenger-message-text\"\n >{{ message.text }}</p>\n }\n <div class=\"rts-messenger-message-info\" #rtsMessageInfo>\n <rtsee-message-time-and-status [message]=\"message\"\n [inChat]=\"true\"\n [hideStatus]=\"message.from.id !== messenger.clientId\"\n ></rtsee-message-time-and-status>\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n DOCUMENT,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {\n RTSeeChat,\n RTSeeChatEvents,\n RTSeeChatMember,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { TimeFormatHelperService } from '../../../services/time-format-helper.service';\nimport { InfiniteScrollDirective } from 'ngx-infinite-scroll';\nimport { NgClass, ViewportScroller } from '@angular/common';\nimport { MessageComponent } from '../message/message.component';\nimport { RTSeeChatTypes } from '@rtsee/common';\nimport { COMMON_CONSTANTS } from '../../constans/common.const';\n\nexport interface IRTSeeMessageGroup {\n id: string;\n sender: RTSeeChatMember;\n senderVisible: boolean;\n messages: RTSeeMessage[];\n}\n\n@Component({\n selector: 'rtsee-messages-list',\n templateUrl: './messages-list.component.html',\n imports: [InfiniteScrollDirective, MessageComponent, NgClass],\n standalone: true,\n})\nexport class MessagesListComponent implements AfterViewInit, OnDestroy, OnInit {\n bindScrollFunction: () => void;\n bindedGroupFunction: () => void;\n messagesGroups: IRTSeeMessageGroup[] = [];\n\n firstGroupedMessage: RTSeeMessage | null = null;\n lastGroupedMessage: RTSeeMessage | null = null;\n\n @Input() chat!: RTSeeChat;\n @Input() messenger!: RTSeeMessenger;\n @ViewChild('scrollBlock') scrollContainer!: ElementRef<HTMLDivElement>;\n constructor(\n private timeFormatService: TimeFormatHelperService,\n private scroller: ViewportScroller,\n @Inject(DOCUMENT) private document: Document,\n ) {\n this.bindScrollFunction = this.scrollToBottom.bind(this) as () => void;\n this.bindedGroupFunction = this.groupMessages.bind(this) as () => void;\n }\n\n @HostListener('window:scroll', ['$event'])\n onWindowScroll(event: Event): void {\n // Get the vertical scroll position\n const verticalOffset: number =\n window.pageYOffset ||\n this.document.documentElement.scrollTop ||\n this.document.body.scrollTop ||\n 0;\n\n if (window.innerWidth >= COMMON_CONSTANTS.mobileBreakpoint) {\n return;\n }\n\n // You can add logic here, e.g., show a 'scroll to top' button\n if (verticalOffset < 300) {\n this.onScrolledToTop();\n }\n }\n\n ngOnInit() {\n this.chat.on(\n RTSeeChatEvents.MESSAGES_LIST_CHANGED,\n this.bindedGroupFunction,\n );\n this.chat.on(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);\n this.groupMessages();\n }\n\n ngAfterViewInit(): void {\n if (this.chat.isStandalone) {\n return;\n }\n this.scrollToBottom();\n }\n\n onMessageSent() {\n this.scrollToBottom();\n }\n\n ngOnDestroy() {\n this.chat.off(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);\n this.chat.off(\n RTSeeChatEvents.MESSAGES_LIST_CHANGED,\n this.bindedGroupFunction,\n );\n }\n\n onScrolledToTop() {\n if (this.chat.messagesLoadInProgress || this.chat.firstMessageLoaded) {\n return;\n }\n this.chat.loadRemoteMessages('back');\n }\n\n onScroll() {\n if (this.chat.messagesLoadInProgress) {\n return;\n }\n this.chat.loadRemoteMessages('front');\n }\n\n scrollToBottom(): void {\n this.groupMessages();\n if (this.chat.isStandalone) {\n return;\n }\n setTimeout(() => {\n if (window.innerWidth < COMMON_CONSTANTS.mobileBreakpoint) {\n this.scroller.scrollToPosition([0, document.body.scrollHeight]);\n }\n\n if (!this.scrollContainer?.nativeElement?.scrollHeight) {\n return;\n }\n\n try {\n this.scrollContainer.nativeElement.scrollTop =\n this.scrollContainer.nativeElement.scrollHeight;\n } catch (err) {\n console.log('Failed to Scroll');\n }\n }, 0);\n }\n\n formatDate(message: RTSeeMessage) {\n return this.timeFormatService.formatDate(message.createdAt);\n }\n\n private groupMessages() {\n if (!this.chat || !this.chat.messages.length) {\n this.messagesGroups.length = 0;\n this.firstGroupedMessage = null;\n this.lastGroupedMessage = null;\n return;\n }\n\n const groups: IRTSeeMessageGroup[] = [];\n let currentGroup: IRTSeeMessageGroup | null = null;\n\n for (let i = 0; i < this.chat.messages.length; i++) {\n const message: RTSeeMessage = this.chat.messages[i];\n\n if (!message.id) {\n continue;\n }\n\n // Same sender as current group → append\n if (currentGroup && message.from.id === currentGroup.sender.id) {\n currentGroup.messages.push(message);\n } else {\n // New sender → start a new group\n const isFromMe: boolean = message.from.id === this.messenger.clientId;\n const isSenderVisible: boolean =\n (this.chat.type !== RTSeeChatTypes.INDIVIDUAL && !isFromMe) ||\n this.chat.type === RTSeeChatTypes.COMMENTS ||\n this.chat.type === RTSeeChatTypes.RATINGS;\n\n currentGroup = {\n id: message.id,\n sender: message.from,\n senderVisible: isSenderVisible,\n messages: [message],\n };\n groups.push(currentGroup);\n }\n }\n\n this.messagesGroups = groups;\n this.saveFirstAndLastGroupedMessages();\n }\n\n private saveFirstAndLastGroupedMessages(): void {\n if (!this.chat.messages.length) {\n this.firstGroupedMessage = null;\n this.lastGroupedMessage = null;\n return;\n }\n\n this.firstGroupedMessage = this.chat.messages[0];\n this.lastGroupedMessage = this.chat.messages[this.chat.messages.length - 1];\n }\n\n protected readonly RTSeeChatTypes = RTSeeChatTypes;\n}\n","<div class=\"rts-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolledUp)=\"onScrolledToTop()\"\n (scroll)=\"onScroll()\"\n [style.padding-bottom]=\"messenger.chatInputHeight + 'px'\"\n>\n @for (messageGroup of messagesGroups; track messageGroup.id) {\n <div class=\"rts-messenger-message-wrapper\" [ngClass]=\"{\n 'rts-messenger-message-wrapper-with-sender': messageGroup.senderVisible\n }\">\n <div class=\"rts-messenger-message-inset\">\n <img [src]=\"messageGroup.sender.imageUrl\"\n class=\"rts-messenger-message-sender-image\"\n >\n </div>\n\n <div class=\"rts-messenger-message-sender-name\">\n <p>{{messageGroup.sender.name}}</p>\n </div>\n\n @for (message of messageGroup.messages; track message.id) {\n <rtsee-message [message]=\"message\"\n [messenger]=\"messenger\"\n [chat]=\"chat\"\n ></rtsee-message>\n }\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RTSeeChatMember } from '@rtsee/messenger';\n\n@Component({\n selector: 'rtsee-chat-member-suggestions',\n standalone: true,\n templateUrl: './chat-member-suggestions.component.html',\n})\nexport class ChatMemberSuggestionsComponent {\n @Input() suggestions: RTSeeChatMember[] = [];\n @Input() selectedIndex: number = 0;\n @Input() visible: boolean = false;\n @Output() memberSelected = new EventEmitter<RTSeeChatMember>();\n\n onSelect(member: RTSeeChatMember): void {\n this.memberSelected.emit(member);\n }\n}\n","@if (visible && suggestions.length > 0) {\n <div class=\"rts-chat-member-suggestions\">\n @for (member of suggestions; track member.id; let i = $index) {\n <div class=\"rts-chat-member-suggestion\"\n [class.rts-chat-member-suggestion-active]=\"i === selectedIndex\"\n (mousedown)=\"onSelect(member)\"\n >\n <div class=\"rts-chat-member-suggestion-avatar\"\n [style.background-image]=\"'url(' + member.imageUrl + ')'\"\n ></div>\n <span class=\"rts-chat-member-suggestion-name\">{{ member.name }}</span>\n </div>\n }\n </div>\n}\n","import {\n Component,\n Input,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { RTSeeChat, RTSeeChatEvents } from '@rtsee/messenger';\nimport { IOzzyToolCall } from '@rtsee/common';\nimport {NgIf, JsonPipe, SlicePipe} from '@angular/common';\nimport { Button } from 'primeng/button';\n\ninterface ToolUseRequestData {\n chatId: string;\n flowId: string;\n toolUseId: string;\n params: IOzzyToolCall;\n agentId: string;\n createdAt: Date;\n}\n\n@Component({\n selector: 'rtsee-tool-use-request',\n standalone: true,\n imports: [NgIf, JsonPipe, Button, SlicePipe],\n templateUrl: './tool-use-request.component.html',\n styleUrls: ['./tool-use-request.component.scss'],\n})\nexport class ToolUseRequestComponent implements OnInit, OnDestroy {\n @Input() chat!: RTSeeChat;\n\n visible = false;\n request: ToolUseRequestData | null = null;\n secondsRemaining = 60;\n responded = false;\n\n private timer: ReturnType<typeof setInterval> | null = null;\n private onToolUseRequestBound = (data: ToolUseRequestData) => this.onToolUseRequest(data);\n\n constructor(private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.chat.on(RTSeeChatEvents.TOOL_USE_REQUEST, this.onToolUseRequestBound);\n }\n\n ngOnDestroy(): void {\n this.chat.off(RTSeeChatEvents.TOOL_USE_REQUEST, this.onToolUseRequestBound);\n this.clearTimer();\n }\n\n get parsedParams(): string {\n if (!this.request?.params?.accumulatedInput) { return '{}'; }\n try {\n return JSON.stringify(JSON.parse(this.request.params.accumulatedInput), null, 2);\n } catch {\n return this.request.params.accumulatedInput;\n }\n }\n\n private onToolUseRequest(data: ToolUseRequestData): void {\n this.request = data;\n this.visible = true;\n this.responded = false;\n\n // Calculate remaining time from createdAt\n const createdMs = new Date(data.createdAt).getTime();\n const nowMs = Date.now();\n const elapsed = Math.floor((nowMs - createdMs) / 1000);\n this.secondsRemaining = Math.max(0, 60 - elapsed);\n\n this.startTimer();\n this.cd.detectChanges();\n }\n\n private startTimer(): void {\n this.clearTimer();\n this.timer = setInterval(() => {\n this.secondsRemaining--;\n if (this.secondsRemaining <= 0) {\n this.deny(); // auto-deny on timeout\n }\n this.cd.detectChanges();\n }, 1000);\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n }\n\n allow(): void {\n if (this.responded || !this.request) { return; }\n this.responded = true;\n this.clearTimer();\n this.chat.respondToToolUseRequest(\n this.request.flowId,\n this.request.toolUseId,\n true,\n );\n this.visible = false;\n this.cd.detectChanges();\n }\n\n deny(): void {\n if (this.responded || !this.request) { return; }\n this.responded = true;\n this.clearTimer();\n this.chat.respondToToolUseRequest(\n this.request.flowId,\n this.request.toolUseId,\n false,\n );\n this.visible = false;\n this.cd.detectChanges();\n }\n}\n","<div class=\"tool-use-request-overlay\" *ngIf=\"visible && request\">\n <div class=\"tool-use-request-card\">\n <div class=\"tool-use-request-header\">\n <i class=\"pi pi-cog tool-icon\"></i>\n <span class=\"tool-name\">{{ request.params.name }}</span>\n <span class=\"tool-timer\" [class.urgent]=\"secondsRemaining <= 10\">\n {{ secondsRemaining }}s\n </span>\n </div>\n\n <div class=\"tool-use-request-body\">\n <div class=\"tool-id\">\n <span class=\"label\">Tool ID:</span>\n <code>{{ request.toolUseId | slice:0:12 }}…</code>\n </div>\n\n <div class=\"tool-params\">\n <span class=\"label\">Parameters:</span>\n <pre class=\"params-snippet\">{{ parsedParams }}</pre>\n </div>\n </div>\n\n <div class=\"tool-use-request-actions\">\n <p-button\n label=\"Allow\"\n icon=\"pi pi-check\"\n severity=\"success\"\n size=\"small\"\n (click)=\"allow()\"\n />\n <p-button\n label=\"Deny\"\n icon=\"pi pi-times\"\n severity=\"danger\"\n size=\"small\"\n (click)=\"deny()\"\n />\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IOzzyWorkflowDefinition } from '@rtsee/common';\n\n/**\n * \"#\" workflow suggestions popup for the chat input.\n */\n@Component({\n selector: 'rtsee-workflow-suggestions',\n standalone: true,\n template: `\n @if (visible && suggestions.length > 0) {\n <div class=\"rts-chat-member-suggestions rts-workflow-suggestions\">\n <div class=\"rts-workflow-suggestions-head\">Workflows</div>\n @for (workflow of suggestions; track workflow.name; let i = $index) {\n <div class=\"rts-chat-member-suggestion rts-workflow-suggestion\"\n [class.rts-chat-member-suggestion-active]=\"i === selectedIndex\"\n (mousedown)=\"onSelect($event, workflow)\"\n >\n <span class=\"rts-workflow-suggestion-icon\">#</span>\n <span class=\"rts-workflow-suggestion-body\">\n <span class=\"rts-chat-member-suggestion-name\">{{ workflow.title || workflow.name }}</span>\n <span class=\"rts-workflow-suggestion-meta\">\n #{{ workflow.name }} · {{ workflow.steps.length }} steps\n </span>\n </span>\n </div>\n }\n </div>\n }\n `,\n})\nexport class WorkflowSuggestionsComponent {\n @Input() suggestions: IOzzyWorkflowDefinition[] = [];\n @Input() selectedIndex: number = 0;\n @Input() visible: boolean = false;\n @Output() workflowSelected = new EventEmitter<IOzzyWorkflowDefinition>();\n\n onSelect(event: MouseEvent, workflow: IOzzyWorkflowDefinition): void {\n event.preventDefault();\n this.workflowSelected.emit(workflow);\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { RTSeeChat, RTSeeMessenger, RTSeeMentionAutocomplete, RTSeeChatMember, RTSeeChatEvents, RTSeeWorkflowAutocomplete } from '@rtsee/messenger';\nimport { IOzzyWorkflowDefinition, RTSeeChatTypes } from '@rtsee/common';\nimport { Textarea } from 'primeng/textarea';\nimport { ChatMemberSuggestionsComponent } from '../chat-member-suggestions/chat-member-suggestions.component';\nimport { ToolUseRequestComponent } from '../message-widgets/tool-use-request/tool-use-request.component';\nimport { WorkflowSuggestionsComponent } from '../workflow-suggestions/workflow-suggestions.component';\n\n@Component({\n selector: 'rtsee-chat-input',\n templateUrl: './chat-input.component.html',\n imports: [ReactiveFormsModule, Textarea, ChatMemberSuggestionsComponent, ToolUseRequestComponent, WorkflowSuggestionsComponent],\n standalone: true,\n})\nexport class ChatInputComponent implements OnInit, OnDestroy {\n sendMessageForm: FormGroup = new FormGroup({\n /* eslint-disable */\n message: new FormControl('', Validators.required),\n /* eslint-enable */\n });\n\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n @ViewChild('chatInput') chatInput!: ElementRef<HTMLTextAreaElement>;\n @ViewChild('messageTextarea') messageTextarea!: ElementRef<HTMLTextAreaElement>;\n\n autocomplete: RTSeeMentionAutocomplete = new RTSeeMentionAutocomplete();\n workflowAutocomplete: RTSeeWorkflowAutocomplete = new RTSeeWorkflowAutocomplete();\n mentionedMemberId: string | null = null;\n agentAccessDenied: boolean = false;\n\n /** prevents the Enter keyup that selected a workflow from sending the message */\n private workflowJustSelected: boolean = false;\n\n private accessDeniedTimer: ReturnType<typeof setTimeout> | null = null;\n\n private onAutocompleteChanged = () => {\n // Angular change detection will pick up the property mutations\n };\n\n private onAgentAccessDeniedBound = () => this.showAccessDeniedBanner();\n\n ngOnInit(): void {\n this.autocomplete.on('changed', this.onAutocompleteChanged);\n\n if (this.chat.type !== RTSeeChatTypes.INDIVIDUAL) {\n this.autocomplete.members = this.chat.members;\n }\n\n this.chat.on(RTSeeChatEvents.AGENT_ACCESS_DENIED, this.onAgentAccessDeniedBound);\n\n if (this.messenger?.ozzy) {\n void this.messenger.ozzy.loadDefinitions().then((definitions: IOzzyWorkflowDefinition[]) => {\n this.workflowAutocomplete.workflows = definitions;\n });\n }\n }\n\n ngOnDestroy(): void {\n this.autocomplete.off('changed', this.onAutocompleteChanged);\n this.autocomplete.removeAllListeners();\n this.workflowAutocomplete.removeAllListeners();\n this.chat.off(RTSeeChatEvents.AGENT_ACCESS_DENIED, this.onAgentAccessDeniedBound);\n this.clearAccessDeniedTimer();\n }\n\n get isGroupChat(): boolean {\n return this.chat.type !== RTSeeChatTypes.INDIVIDUAL;\n }\n\n sendMessage() {\n const text: string =\n (this.sendMessageForm.get('message')?.value as string) || '';\n const trimmedText: string = text.trim();\n\n if (trimmedText) {\n if (this.mentionedMemberId) {\n this.chat.sendMessageTo(text, this.mentionedMemberId);\n this.mentionedMemberId = null;\n } else {\n this.chat.sendMessage(text);\n }\n }\n\n this.sendMessageForm.get('message')?.setValue('');\n this.autocomplete.dismiss();\n this.workflowAutocomplete.dismiss();\n this.handleResize();\n }\n\n get anyAutocompleteVisible(): boolean {\n return this.autocomplete.visible || this.workflowAutocomplete.visible;\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.workflowAutocomplete.visible) {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.workflowAutocomplete.moveUp();\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.workflowAutocomplete.moveDown();\n return;\n }\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault();\n this.selectWorkflow();\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n this.workflowAutocomplete.dismiss();\n return;\n }\n }\n\n if (this.autocomplete.visible) {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.autocomplete.moveUp();\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.autocomplete.moveDown();\n return;\n }\n if (event.key === 'Enter') {\n event.preventDefault();\n this.selectMention();\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n this.autocomplete.dismiss();\n return;\n }\n }\n }\n\n onKeyUp(event: KeyboardEvent): void {\n this.handleResize();\n\n if (event.key === 'Enter' && !event.shiftKey && !this.anyAutocompleteVisible && !this.workflowJustSelected) {\n this.sendMessage();\n return;\n }\n this.workflowJustSelected = false;\n\n this.updateAutocomplete();\n }\n\n onInput(): void {\n this.updateAutocomplete();\n }\n\n onMemberSelected(member: RTSeeChatMember): void {\n const result = this.autocomplete.select(member);\n if (result) {\n this.applyMentionToInput(result.member, result.startIndex, result.endLength);\n }\n }\n\n onWorkflowSelected(workflow: IOzzyWorkflowDefinition): void {\n const result = this.workflowAutocomplete.select(workflow);\n if (result) {\n this.applyWorkflow(result.workflow, result.startIndex, result.endLength);\n }\n }\n\n stopAgent(): void {\n this.chat.stopAgentStream();\n }\n\n dismissAccessDenied(): void {\n this.agentAccessDenied = false;\n this.clearAccessDeniedTimer();\n }\n\n handleResize(): void {\n const newHeight: number = this.chatInput.nativeElement.offsetHeight + 16;\n\n if (newHeight !== this.messenger.chatInputHeight) {\n this.messenger.setChatInputHeight(newHeight);\n }\n }\n\n private showAccessDeniedBanner(): void {\n this.agentAccessDenied = true;\n this.clearAccessDeniedTimer();\n this.accessDeniedTimer = setTimeout(() => {\n this.agentAccessDenied = false;\n }, 5000);\n }\n\n private clearAccessDeniedTimer(): void {\n if (this.accessDeniedTimer) {\n clearTimeout(this.accessDeniedTimer);\n this.accessDeniedTimer = null;\n }\n }\n\n private updateAutocomplete(): void {\n const textarea = this.messageTextarea?.nativeElement;\n if (!textarea) { return; }\n\n const text = textarea.value;\n const cursorPos = textarea.selectionStart || 0;\n\n if (!this.chat.isPreset) {\n this.workflowAutocomplete.update(text, cursorPos);\n }\n\n if (!this.isGroupChat) {\n return;\n }\n\n this.autocomplete.members = this.chat.members;\n this.autocomplete.update(text, cursorPos);\n }\n\n private selectWorkflow(): void {\n const result = this.workflowAutocomplete.select();\n if (result) {\n this.workflowJustSelected = true;\n this.applyWorkflow(result.workflow, result.startIndex, result.endLength);\n }\n }\n\n private applyWorkflow(\n workflow: IOzzyWorkflowDefinition,\n startIndex: number,\n replaceLength: number,\n ): void {\n const currentText: string = this.sendMessageForm.get('message')?.value || '';\n const newText: string = (\n currentText.substring(0, startIndex) + currentText.substring(startIndex + replaceLength)\n ).replace(/^\\s+$/, '');\n\n this.sendMessageForm.get('message')?.setValue(newText);\n this.messenger.startWorkflow(this.chat, workflow);\n\n setTimeout(() => {\n this.handleResize();\n this.messageTextarea?.nativeElement?.focus();\n }, 0);\n }\n\n private selectMention(): void {\n const result = this.autocomplete.select();\n if (result) {\n this.applyMentionToInput(result.member, result.startIndex, result.endLength);\n }\n }\n\n private applyMentionToInput(\n member: RTSeeChatMember,\n startIndex: number,\n replaceLength: number,\n ): void {\n const currentText: string = this.sendMessageForm.get('message')?.value || '';\n const before = currentText.substring(0, startIndex);\n const after = currentText.substring(startIndex + replaceLength);\n const replacement = `@${member.name} `;\n const newText = before + replacement + after;\n\n this.sendMessageForm.get('message')?.setValue(newText);\n this.mentionedMemberId = member.id;\n\n // Set cursor after the inserted mention\n setTimeout(() => {\n const textarea = this.messageTextarea?.nativeElement;\n if (textarea) {\n const newCursorPos = startIndex + replacement.length;\n textarea.setSelectionRange(newCursorPos, newCursorPos);\n textarea.focus();\n }\n }, 0);\n }\n}\n","<div #chatInput\n class=\"rts-chat-input\"\n [class.rts-chat-input-streaming]=\"chat.agentStreaming\"\n>\n <rtsee-tool-use-request [chat]=\"chat\"></rtsee-tool-use-request>\n <rtsee-chat-member-suggestions\n [suggestions]=\"autocomplete.suggestions\"\n [selectedIndex]=\"autocomplete.selectedIndex\"\n [visible]=\"autocomplete.visible\"\n (memberSelected)=\"onMemberSelected($event)\"\n ></rtsee-chat-member-suggestions>\n <rtsee-workflow-suggestions\n [suggestions]=\"workflowAutocomplete.suggestions\"\n [selectedIndex]=\"workflowAutocomplete.selectedIndex\"\n [visible]=\"workflowAutocomplete.visible\"\n (workflowSelected)=\"onWorkflowSelected($event)\"\n ></rtsee-workflow-suggestions>\n @if (agentAccessDenied) {\n <div class=\"rts-agent-access-denied-banner\">\n <span class=\"rts-agent-access-denied-icon\">🔒</span>\n <span class=\"rts-agent-access-denied-text\">You don't have permission to call agents in this chat.</span>\n <button class=\"rts-agent-access-denied-dismiss\" (click)=\"dismissAccessDenied()\">Got it!</button>\n </div>\n }\n <div class=\"rts-send-message\">\n <form [formGroup]=\"sendMessageForm\" class=\"rts-chat-input-form\">\n <textarea #messageTextarea\n [invalid]=\"false\"\n [autoResize]=\"true\"\n (keydown)=\"onKeyDown($event)\"\n (keyup)=\"onKeyUp($event)\"\n (input)=\"onInput()\"\n [attr.disabled]=\"chat.agentStreaming ? '' : null\"\n formControlName=\"message\"\n pTextarea\n [placeholder]=\"chat.agentStreaming ? 'Agent is responding...' : 'Type a message...'\"\n class=\"rts-chat-input-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n @if (chat.agentStreaming) {\n <button (click)=\"stopAgent()\"\n class=\"rts-send-message-button rts-send-message-button-stop\"\n type=\"button\"\n title=\"Stop agent response\"\n >\n <span class=\"pi pi-stop-circle\"></span>\n </button>\n } @else {\n <button (click)=\"sendMessage()\"\n class=\"rts-send-message-button\"\n type=\"submit\"\n >\n <span class=\"pi pi-send\"></span>\n </button>\n }\n</div>\n","import {\n Directive,\n ElementRef,\n Output,\n EventEmitter,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\n\n@Directive({\n selector: '[rtseeViewportObserver]',\n standalone: true, // Use `standalone: true` in modern Angular\n})\nexport class ViewportObserverDirective implements AfterViewInit, OnDestroy {\n @Output() inViewport = new EventEmitter<boolean>();\n private observer!: IntersectionObserver;\n\n constructor(private element: ElementRef<HTMLElement>) {}\n\n ngAfterViewInit() {\n // Options for the observer: 0.2 means 20% of the element must be visible\n // to trigger the callback\n const options = {\n root: null, // observing relative to the document's viewport\n rootMargin: '0px',\n threshold: 0,\n };\n\n this.observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n // entry.isIntersecting is true if the element is in the viewport\n this.inViewport.emit(entry.isIntersecting);\n });\n }, options);\n\n this.observer.observe(this.element.nativeElement);\n }\n\n ngOnDestroy() {\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\nimport { MessagesListComponent } from '../messages-list/messages-list.component';\nimport { ChatInputComponent } from '../chat-input/chat-input.component';\nimport { IRTSeeChat } from '@rtsee/common';\nimport { ViewportObserverDirective } from '../../../common/directives/viewport-observer.directive';\nimport { NgClass } from '@angular/common';\nimport { RTSeeEntity } from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-chat',\n templateUrl: './chat.component.html',\n imports: [\n MessagesListComponent,\n ChatInputComponent,\n ViewportObserverDirective,\n NgClass,\n ],\n standalone: true,\n})\nexport class ChatComponent implements OnInit, OnDestroy {\n @Input() chat!: RTSeeChat;\n @Input() chatData?: IRTSeeChat;\n @Input() entity?: RTSeeEntity;\n @Input() messenger!: RTSeeMessenger;\n\n onInViewPortChange(value: boolean): void {\n console.log('Received inViewPortChange', value);\n this.chat.isInViewPort = value;\n }\n\n ngOnInit(): void {\n if (!this.chat && !this.chatData) {\n console.log(`Either chat ot chatData is required!`);\n }\n\n if (!this.chat && this.chatData) {\n this.chat = this.messenger.addStandaloneChat({\n ...this.chatData,\n utilitiesSignalingClient: this.entity?.signalingClient,\n });\n this.chat.loadRemoteMessages('back');\n }\n\n this.chat?.broadcastAgents();\n }\n\n ngOnDestroy() {\n if (this.chat) {\n this.chat.unbindIllustratorEvents();\n if (this.chat.isStandalone) {\n this.messenger.removeStandaloneChat(this.chat.id);\n }\n }\n }\n}\n","<div class=\"rts-chat\"\n [ngClass]=\"{\n 'rts-chat-standalone': chat.isStandalone,\n 'rts-chat-in-viewport': chat.isInViewPort\n }\"\n rtseeViewportObserver\n (inViewport)=\"onInViewPortChange($event)\"\n>\n <div class=\"rts-chat-footer-container\">\n <div class=\"rts-chat-footer-container-inner\">\n <rtsee-chat-input [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-chat-input>\n </div>\n </div>\n <div class=\"rts-chat-body-container\">\n <rtsee-messages-list [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-messages-list>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { Message } from 'primeng/message';\nimport { RTSeeImageUploaderComponent } from '../../../common/components/image-uploader/image-uploader.component';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { InputText } from 'primeng/inputtext';\nimport { TypedReactiveForm } from '../../rtsee-auth/types/auth-form.type';\nimport { RTSeeManageProfile, RTSeeMessenger } from '@rtsee/messenger';\n\nexport type RTSeeProfileForm = {\n firstName: string | null;\n lastName: string | null;\n};\n\n@Component({\n selector: 'rtsee-manage-profile',\n imports: [\n Button,\n FloatLabel,\n InputGroup,\n Message,\n RTSeeImageUploaderComponent,\n ReactiveFormsModule,\n InputText,\n ],\n templateUrl: './manage-profile.component.html',\n})\nexport class ManageProfileComponent implements OnInit {\n profileForm: FormGroup;\n\n @Input() messenger!: RTSeeMessenger;\n @Input() manageProfile!: RTSeeManageProfile;\n constructor(private formBuilder: FormBuilder) {\n this.profileForm = this.formBuilder.group<\n TypedReactiveForm<RTSeeProfileForm>\n >({\n firstName: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(141),\n ],\n }),\n lastName: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(141),\n ],\n }),\n });\n }\n\n ngOnInit() {\n if (!this.messenger.myPeer || !this.messenger.myPeer.name) {\n return;\n }\n\n const nameSplit: string[] = this.messenger.myPeer.name.split(' ');\n this.firstNameField.setValue(nameSplit[0]);\n nameSplit.splice(0, 1);\n this.lastNameField.setValue(nameSplit.join(' '));\n }\n\n async submit(): Promise<void> {\n if (this.profileForm.invalid) {\n this.profileForm.markAsTouched();\n return;\n }\n\n await this.manageProfile.save({\n firstName: this.firstNameField.getRawValue(),\n lastName: this.lastNameField.getRawValue(),\n });\n }\n\n get firstNameField(): FormControl<string> {\n return this.profileForm.get('firstName') as FormControl<string>;\n }\n\n get lastNameField(): FormControl<string> {\n return this.profileForm.get('lastName') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-messenger-manage-profile\">\n <div class=\"rtsee-messenger-manage-profile-info rtsee-form-container\">\n <div class=\"rtsee-messenger-manage-profile-image\">\n <rtsee-image-uploader [imageUploader]=\"manageProfile.imageUploader\"\n ></rtsee-image-uploader>\n </div>\n\n <form class=\"rtsee-manage-profile-form rtsee-form\"\n [formGroup]=\"profileForm\"\n (ngSubmit)=\"submit()\"\n >\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"firstNameField\"\n [class.p-invalid]=\"firstNameField.invalid && firstNameField.touched\"\n />\n <label for=\"sign-up-email\">First Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (firstNameField.hasError('required') && firstNameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >First Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"lastNameField\"\n [class.p-invalid]=\"lastNameField.invalid && lastNameField.touched\"\n />\n <label for=\"sign-up-email\">Last Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (lastNameField.hasError('required') && lastNameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Last Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-manage-profile-buttons\">\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageProfile.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageProfile.cancel()\"\n [disabled]=\"manageProfile.saveInProgress\"\n />\n </div>\n </form>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IRTSeePaymentPriceItem, IRTSeePaymentProduct } from '@rtsee/common';\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'rtsee-payment-product-snippet',\n imports: [\n NgClass\n ],\n templateUrl: './payment-product-snippet.component.html',\n})\nexport class PaymentProductSnippetComponent {\n @Input() product!: IRTSeePaymentProduct;\n @Input() theme: 'dark' | 'light' = 'dark';\n @Output() priceSelected: EventEmitter<IRTSeePaymentPriceItem> =\n new EventEmitter<IRTSeePaymentPriceItem>();\n\n selectPrice(price: IRTSeePaymentPriceItem) {\n this.priceSelected.emit(price);\n }\n}\n","<div class=\"rts-payment-product-snippet\" [ngClass]=\"product.name\">\n <div class=\"rts-payment-product-card\">\n <h3 class=\"rts-payment-product-header\">{{product.name}}</h3>\n <p class=\"rts-payment-product-description\">{{product.description}}</p>\n <div class=\"rts-payment-product-prices\">\n @for (price of product.prices; track price.id) {\n <div class=\"rts-payment-price-card\">\n <p class=\"rts-payment-price-label\">{{price.label}}</p>\n <p class=\"rts-payment-price-description\">{{price.description}}</p>\n <button class=\"rts-payment-select-plan-btn\"\n (click)=\"selectPrice(price)\"\n >Select Plan</button>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { map, Observable, tap } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport {\n IRTSeeCreatePaymentSessionResponse,\n IRTSeeCreatePaymentSessionRequest,\n IRTSeePaymentProduct,\n IRTSeePaymentProductsListResponse\n} from '@rtsee/common';\nimport { IRTSeePlan } from '@rtsee/core';\nimport { RTSeePayments } from '@rtsee/messenger';\nimport { ICheckoutSessionResponse } from \"@rtsee/auth\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentsService {\n paymentsConfig: RTSeePayments | null = null;\n isInitialized: boolean = false;\n userId: string | null = null;\n\n constructor(private http: HttpClient) {}\n\n init(configuration: RTSeePayments, userId: string) {\n this.paymentsConfig = configuration;\n this.isInitialized = true;\n this.userId = userId;\n }\n\n createSession(\n options: IRTSeeCreatePaymentSessionRequest,\n ): Observable<IRTSeeCreatePaymentSessionResponse> {\n if (!this.paymentsConfig) {\n throw new Error('Payments not configured');\n }\n\n return this.http.post<IRTSeeCreatePaymentSessionResponse>(\n this.paymentsConfig.createSessionEndpoint,\n options,\n );\n }\n\n getSession(): Observable<ICheckoutSessionResponse> {\n if (!this.paymentsConfig) {\n throw new Error('Payments not configured');\n }\n\n if (!this.paymentsConfig.sessionId) {\n throw new Error('No SessionId provided');\n }\n\n return this.http\n .get<ICheckoutSessionResponse>(\n `${this.paymentsConfig.getSessionEndpoint}`, {\n params: {\n sessionId: this.paymentsConfig.sessionId,\n userId: this.userId || ''\n }\n }\n )\n .pipe(\n tap((res) => {\n console.log('tap here', res);\n this.paymentsConfig?.setValidationInProgress(false);\n }),\n );\n }\n\n getProducts(): Observable<IRTSeePaymentProduct[]> {\n if (!this.paymentsConfig || !this.paymentsConfig.appId) {\n throw new Error('Payments Config not initialized!');\n }\n\n this.paymentsConfig.setProductsLoadInProgress(true);\n\n return this.http\n .get<IRTSeePaymentProductsListResponse>(\n this.paymentsConfig.productsEndpoint,\n )\n .pipe(\n map((res) => res.products),\n tap((res) => this.paymentsConfig?.setProducts(res)),\n );\n }\n\n unsubscribe(subscriptionId: string): Observable<IRTSeePlan> {\n if (!this.paymentsConfig || !this.paymentsConfig.appId) {\n throw new Error('Payments Config not initialized!');\n }\n\n return this.http\n .post<IRTSeePlan>(\n `${this.paymentsConfig?.unsubscribeEndpoint}`,\n { subscriptionId }\n )\n .pipe(\n tap((res) => {\n console.log('tap with plan here', res);\n }),\n );\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { PaymentsService } from '../services/payments.service';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { loadStripe, Stripe, StripeEmbeddedCheckout } from '@stripe/stripe-js';\nimport { PaymentProductSnippetComponent } from '../payment-product-snippet/payment-product-snippet.component';\nimport { IRTSeePaymentPriceItem } from '@rtsee/common';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\nimport { NgClass } from \"@angular/common\";\n\n@Component({\n selector: 'rtsee-payment-page',\n imports: [\n ReactiveFormsModule,\n PaymentProductSnippetComponent,\n NgClass,\n ],\n templateUrl: './payment-page.component.html',\n})\nexport class PaymentPageComponent implements OnInit, OnDestroy {\n stripe?: Stripe;\n checkout?: StripeEmbeddedCheckout;\n planSelected: boolean = false;\n loadInProgress: boolean = false;\n\n @Input() messenger!: RTSeeMessenger;\n @Input() theme: 'dark' | 'light' = 'dark';\n @ViewChild('checkoutContainer')\n checkoutContainer!: ElementRef<HTMLDivElement>;\n constructor(private paymentsService: PaymentsService) {}\n\n async init(): Promise<void> {\n if (!this.paymentsService.paymentsConfig?.publicKey) {\n return;\n }\n\n this.stripe =\n (await loadStripe(this.paymentsService.paymentsConfig.publicKey)) ||\n undefined;\n this.getProducts();\n }\n\n getProducts(): void {\n this.paymentsService.getProducts().subscribe();\n }\n\n selectPlan(price: IRTSeePaymentPriceItem): void {\n const priceId: string = price.priceId;\n\n if (\n !this.messenger.payments ||\n !this.messenger.payments.createSessionEndpoint\n ) {\n console.log('No payments config.');\n return;\n }\n\n if (!this.messenger.myPeer.rtseeAppId) {\n console.log('No app id on peer.');\n return;\n }\n\n this.planSelected = true;\n this.loadInProgress = true;\n\n this.paymentsService\n .createSession({\n priceId: priceId,\n userId: this.messenger.myPeer.clientId,\n route: `/profile/${this.messenger.myPeer.clientId}`,\n applicationId: this.messenger.myPeer.rtseeAppId,\n })\n .subscribe((response) => {\n void this.initCheckout(response.clientSecret);\n });\n }\n\n async initCheckout(secret: string): Promise<void> {\n if (!this.stripe) {\n console.log('Stripe not yet initialized!');\n return;\n }\n this.checkout = await this.stripe.initEmbeddedCheckout({\n clientSecret: secret\n });\n\n if (!this.checkout) {\n return;\n }\n\n this.loadInProgress = false;\n\n this.checkout.mount(this.checkoutContainer.nativeElement);\n }\n\n ngOnInit() {\n if (!this.paymentsService.isInitialized && this.messenger.payments && this.messenger.myPeer?.clientId) {\n this.paymentsService.init(this.messenger.payments, this.messenger.myPeer.clientId);\n }\n\n void this.init();\n }\n\n ngOnDestroy(): void {\n if (this.checkout) {\n this.checkout.destroy();\n }\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rts-payment-page rts-theme-dark\">\n @if (messenger.payments && !planSelected) {\n @if (messenger.payments.products) {\n <div class=\"rts-payment-page-products\">\n @for (product of messenger.payments.products ; track product.id) {\n <rtsee-payment-product-snippet [product]=\"product\"\n [theme]=\"theme\"\n (priceSelected)=\"selectPlan($event)\"\n ></rtsee-payment-product-snippet>\n }\n </div>\n } @else {\n <div class=\"rts-payment-spinner\">\n <div class=\"rts-payment-spinner-ring\"></div>\n </div>\n }\n }\n @if (loadInProgress) {\n <div class=\"rts-payment-spinner\">\n <div class=\"rts-payment-spinner-ring\"></div>\n </div>\n }\n <div #checkoutContainer class=\"stripe-checkout-container\"></div>\n <div class=\"rts-payment-page-footer\">\n <button class=\"rts-payment-cancel-btn\"\n (click)=\"messenger.closePaymentPage()\"\n >{{messenger.labels[RTSeeTextLabelKeys.CANCEL_LABEL]}}</button>\n </div>\n</div>\n","/// <reference types=\"gtag.js\" />\n\nimport { Inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GtagService {\n private window: (Window & typeof globalThis & { gtag?: Gtag.Gtag }) | null;\n\n constructor(@Inject(DOCUMENT) document: Document) {\n this.window = document.defaultView as (Window & typeof globalThis & { gtag?: Gtag.Gtag }) | null;\n }\n\n reportConversion(\n url?: string,\n key?: string\n ): boolean {\n const callback = () => {\n if (typeof url !== 'undefined' && this.window) {\n this.window.location.href = url;\n }\n };\n\n if (this.window && typeof this.window.gtag === 'function' && key) {\n this.window.gtag('event', 'conversion', {\n send_to: key,\n value: 1.0,\n currency: 'USD',\n event_callback: callback,\n });\n } else {\n callback();\n }\n\n return false;\n }\n}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { PaymentsService } from '../services/payments.service';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { loadStripe, Stripe } from '@stripe/stripe-js';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\nimport { NgClass } from \"@angular/common\";\nimport { LS_TOKEN_LABEL, LS_USER_LABEL, ICheckoutSessionResponse } from \"@rtsee/auth\";\nimport { GtagService } from '../../../services/gtag.service';\n\n@Component({\n selector: 'rtsee-payment-validation-page',\n imports: [ReactiveFormsModule, NgClass],\n templateUrl: './payment-validation-page.component.html',\n})\nexport class PaymentValidationPageComponent implements OnInit {\n stripe?: Stripe;\n loadInProgress: boolean = false;\n\n @Input() messenger!: RTSeeMessenger;\n @Input() theme: 'dark' | 'light' = 'dark';\n @ViewChild('checkoutContainer')\n checkoutContainer!: ElementRef<HTMLDivElement>;\n\n constructor(\n private paymentsService: PaymentsService,\n private gtagService: GtagService\n ) {}\n\n async init(): Promise<void> {\n if (!this.paymentsService.paymentsConfig?.publicKey) {\n return;\n }\n\n this.stripe =\n (await loadStripe(this.paymentsService.paymentsConfig.publicKey)) ||\n undefined;\n this.validatePayment();\n }\n\n reportConversion(url?: string, eventName?: string): boolean {\n return this.gtagService.reportConversion(url, eventName);\n }\n\n validatePayment(): void {\n this.paymentsService.getSession().subscribe((res: ICheckoutSessionResponse) => {\n // this.messenger.closePaymentValidationPage();\n\n if (res.user && res.token) {\n localStorage.setItem(LS_TOKEN_LABEL, res.token);\n localStorage.setItem(LS_USER_LABEL, JSON.stringify(JSON.stringify(res.user)));\n\n if (this.paymentsService.paymentsConfig?.gTagEventName && this.paymentsService.paymentsConfig?.isProdMode) {\n this.reportConversion(undefined, this.paymentsService.paymentsConfig.gTagEventName);\n }\n\n setTimeout(() => {\n window.location.href = document.baseURI;\n }, 1000)\n }\n });\n }\n\n ngOnInit() {\n if (!this.paymentsService.isInitialized && this.messenger.payments && this.messenger.myPeer?.clientId) {\n this.paymentsService.init(this.messenger.payments, this.messenger.myPeer.clientId);\n }\n\n void this.init();\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n\n\n","<div class=\"rtsee-payment-page\" [ngClass]=\"'rtsee-payment-theme-' + theme\">\n @if (messenger.payments?.validationInProgress) {\n <div class=\"rtsee-payment-spinner\">\n <div class=\"rtsee-payment-spinner-ring\"></div>\n </div>\n }\n <div class=\"rtsee-payment-page-footer\">\n <button class=\"rtsee-payment-cancel-btn\"\n (click)=\"messenger.closePaymentPage()\"\n >{{messenger.labels[RTSeeTextLabelKeys.CANCEL_LABEL]}}</button>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Card } from 'primeng/card';\nimport { Divider } from 'primeng/divider';\nimport { Button } from 'primeng/button';\nimport { IRTSeePlan, RTSeeTextLabelKeys } from '@rtsee/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { PaymentsService } from '../services/payments.service';\nimport dayjs from 'dayjs';\n\n@Component({\n selector: 'rtsee-manage-plan',\n imports: [Card, Divider, Button],\n templateUrl: './manage-plan.component.html',\n})\nexport class ManagePlanComponent implements OnInit {\n @Input() messenger!: RTSeeMessenger;\n plan!: IRTSeePlan;\n activeFromFormated: string = '';\n activeToFormated: string = '';\n\n constructor(private paymentsService: PaymentsService) {}\n\n onUnsubscribeClicked(): void {\n this.paymentsService.unsubscribe(this.plan.id)\n .subscribe();\n }\n\n ngOnInit(): void {\n if (!this.messenger.myPeer || !this.messenger.myPeer.plan) {\n throw new Error('No Plans found.');\n }\n\n if (!this.paymentsService.isInitialized && this.messenger.payments && this.messenger.myPeer?.clientId) {\n this.paymentsService.init(this.messenger.payments, this.messenger.myPeer?.clientId);\n }\n\n this.plan = this.messenger.myPeer.plan;\n this.activeFromFormated = dayjs(\n this.messenger.myPeer.plan.activeFrom,\n ).format('DD-MM-YYYY');\n this.activeToFormated = dayjs(this.messenger.myPeer.plan.activeTo).format(\n 'DD-MM-YYYY',\n );\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rtsee-manage-plan\">\n <h2>{{messenger.labels[RTSeeTextLabelKeys.MANAGE_PLAN]}}</h2>\n <p-button [label]=\"messenger.labels[RTSeeTextLabelKeys.BACK_LABEL]\"\n severity=\"secondary\"\n (click)=\"messenger.closeManagePlanPage()\"\n ></p-button>\n @if (plan) {\n <p-card [header]=\"plan.productName\">\n <p>{{plan.productDescription}}</p>\n <p-divider></p-divider>\n <div class=\"rtsee-manage-plan-info\">\n <p>Active From: {{activeFromFormated}}</p>\n <p>Active To: {{activeToFormated}}</p>\n </div>\n <p-button [label]=\"'Unsubscribe'\"\n (click)=\"onUnsubscribeClicked()\"\n ></p-button>\n </p-card>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { MessengerHeaderComponent } from '../messenger-header/messenger-header.component';\nimport { InfiniteScrollDirective } from 'ngx-infinite-scroll';\nimport { NgClass } from '@angular/common';\nimport { ChatsListComponent } from '../chats-list/chats-list.component';\nimport { ChatComponent } from '../chat/chat.component';\nimport { PreloaderComponent } from '../../../common/components/preloader/preloader.component';\nimport { ProfileComponent } from '../profile/profile.component';\nimport { ManageProfileComponent } from '../manage-profile/manage-profile.component';\nimport { ManageChatInfoComponent } from '../manage-chat-info/manage-chat-info.component';\nimport { ChatInfoComponent } from '../chat-info/chat-info.component';\nimport { PaymentPageComponent } from '../payment-page/payment-page.component';\nimport { PaymentValidationPageComponent } from '../payment-validation-page/payment-validation-page.component';\nimport { ManagePlanComponent } from '../manage-plan/manage-plan.component';\n\n@Component({\n selector: 'rtsee-messenger',\n templateUrl: './messenger.component.html',\n imports: [\n MessengerHeaderComponent,\n InfiniteScrollDirective,\n NgClass,\n ChatsListComponent,\n ChatComponent,\n PreloaderComponent,\n ProfileComponent,\n ManageProfileComponent,\n ManageChatInfoComponent,\n ChatInfoComponent,\n PaymentPageComponent,\n PaymentValidationPageComponent,\n ManagePlanComponent,\n ],\n standalone: true,\n})\nexport class MessengerComponent {\n @Input() messenger!: RTSeeMessenger;\n\n onScroll() {\n void this.messenger.loadChats();\n }\n}\n","<div class=\"rts-messenger rts-theme-dark\" [ngClass]=\"{\n 'rts-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rts-messenger-folded': messenger.folded,\n 'rts-messenger-overlay-window': messenger.isOverlayPageOpened\n}\">\n @if (messenger.manageProfile) {\n <div class=\"rts-manage-profile\">\n <rtsee-manage-profile [manageProfile]=\"messenger.manageProfile\"\n [messenger]=\"messenger\"\n ></rtsee-manage-profile>\n </div>\n }\n\n @if (messenger.isPaymentPageOpened) {\n <div class=\"rts-payment-page-container\">\n <rtsee-payment-page [messenger]=\"messenger\" theme=\"dark\"></rtsee-payment-page>\n </div>\n }\n\n @if (messenger.isPaymentValidationPageOpened) {\n <div class=\"rts-payment-page-container\">\n <rtsee-payment-validation-page [messenger]=\"messenger\" theme=\"dark\"></rtsee-payment-validation-page>\n </div>\n }\n\n @if (messenger.isManagePlanPageOpened) {\n <div class=\"rts-payment-page-container\">\n <rtsee-manage-plan [messenger]=\"messenger\"></rtsee-manage-plan>\n </div>\n }\n\n <div class=\"rts-messenger-header-container\">\n <rtsee-messenger-header [messenger]=\"messenger\"\n ></rtsee-messenger-header>\n </div>\n <div class=\"rts-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n @if (messenger.openedChat) {\n <rtsee-chat [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></rtsee-chat>\n } @else if (!messenger.openedChat) {\n <rtsee-chats-list [chats]=\"messenger.chats\" [messenger]=\"messenger\"></rtsee-chats-list>\n } @else if (messenger.openedProfile) {\n <rtsee-profile></rtsee-profile>\n }\n @if (messenger.loadingChatsInProgress) {\n <rtsee-preloader [diameter]=\"50\" ></rtsee-preloader>\n }\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { IMessageWidget } from './message-widgets.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EventsWidgetsService {\n widgetsMap: IMessageWidget[] = [];\n\n getWidgetComponentByName(name: string) {\n /* eslint-disable */\n const mapping = this.widgetsMap.find((e) => e.name === name);\n if (!mapping) {\n return null;\n }\n return mapping.component;\n /* eslint-enable */\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { RTSeeDashboardEvent } from '@rtsee/events-dashboard';\nimport { WidgetDirective } from '../../../../directives/widget.directive';\nimport { EventsWidgetsService } from '../../../../services/events-widgets.service';\nimport { TimeFormatHelperService } from '../../../../services/time-format-helper.service';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'rtsee-event-thumbnail',\n templateUrl: './event-thumbnail.component.html',\n imports: [WidgetDirective, NgClass],\n standalone: true,\n})\nexport class EventThumbnailComponent implements OnInit, AfterViewInit {\n tooltip?: string;\n timeInAgoFormat: string = '';\n\n @Input() event!: RTSeeDashboardEvent;\n @ViewChild(WidgetDirective, { static: false }) widgetHost!: WidgetDirective;\n constructor(\n private widgetsService: EventsWidgetsService,\n private componentFactoryResolver: ComponentFactoryResolver,\n public timeFormatService: TimeFormatHelperService,\n private cd: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n if (this.event.data) {\n this.generateTooltip();\n }\n\n this.timeInAgoFormat = this.timeFormatService.toAgo(this.event.createdAt);\n\n setInterval(() => {\n this.timeInAgoFormat = this.timeFormatService.toAgo(this.event.createdAt);\n }, 20000);\n }\n\n generateTooltip() {\n /* eslint-disable */\n let tooltip = '';\n if (typeof this.event.data !== 'object') {\n return;\n }\n try {\n for (const key in this.event.data) {\n if (this.event.data.hasOwnProperty(key)) {\n if (tooltip) {\n tooltip += '
';\n }\n tooltip += key + ' -> ' + this.event.data[key];\n }\n }\n this.tooltip = tooltip;\n } catch (e) {\n console.log('Failed to generate a tooltip');\n }\n /* eslint-enable */\n }\n\n ngAfterViewInit() {\n this.cd.detectChanges();\n /* eslint-disable */\n if (this.event.widget) {\n const widget = this.widgetsService.getWidgetComponentByName(\n this.event.widget,\n );\n if (!widget) {\n return;\n }\n const viewContainerRef = this.widgetHost.viewContainerRef;\n viewContainerRef.clear();\n const componentToShow =\n this.componentFactoryResolver.resolveComponentFactory(widget);\n const componentRef: ComponentRef<typeof widget> =\n viewContainerRef.createComponent(componentToShow);\n componentRef.instance.event = this.event;\n componentRef.instance.event = this.event;\n componentRef.changeDetectorRef.detectChanges();\n }\n /* eslint-enable */\n }\n}\n","<div class=\"rtsee-events-dashboard-event-thumbnail\">\n @if (event.widget) {\n <ng-template widgetHost></ng-template>\n } @else if (!event.widget) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail\"\n [ngClass]=\"{'rtsee-events-dashboard-default-event-thumbnail-with-data': event.data}\"\n >\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-name\">{{event.name}}</div>\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-info\">\n @if (event.data) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-details\"\n [title]=\"tooltip\"\n >\n <span class=\"rtsee-events-dashboard-default-event-thumbnail-details-icon material-icons-outlined\"\n >info</span>\n </div>\n }\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-time\">\n <span>{{ timeInAgoFormat }}</span>\n </div>\n </div>\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { TimeFormatHelperService } from '../../../../services/time-format-helper.service';\nimport { RTSeeDashboardClientSession } from '@rtsee/events-dashboard';\nimport { NgIf, SlicePipe } from '@angular/common';\nimport { EventThumbnailComponent } from '../event-thumbnail/event-thumbnail.component';\n\n@Component({\n selector: 'rtsee-rtsee-events-dashboard-session',\n templateUrl: './rtsee-events-dashboard-session.component.html',\n imports: [NgIf, EventThumbnailComponent, SlicePipe],\n standalone: true,\n})\nexport class RtseeEventsDashboardSessionComponent {\n @Input() session!: RTSeeDashboardClientSession;\n constructor(public timeFormatService: TimeFormatHelperService) {}\n}\n","<div class=\"rtsee-events-dashboard-session\">\n @if (session.info) {\n <div class=\"rtsee-events-dashboard-session-header\">\n <p class=\"rtsee-events-dashboard-session-client-info\">{{session.info.clientThumbnail}}</p>\n <p class=\"rtsee-events-dashboard-session-os-info\">{{session.info.osThumbnail}}</p>\n <div class=\"rtsee-events-dashboard-session-device-info\" [title]=\"session.info.deviceThumbnail\">\n @if (session.info.deviceType === 'smartphone' && !session.info.botName) {\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >phone_iphone</span>\n }\n @if (session.info.deviceType === 'tablet' && !session.info.botName) {\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >tablet_mac</span>\n }\n @if (session.info.deviceType === 'desktop' && !session.info.botName) {\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >computer</span>\n }\n @if (session.info.botName) {\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >smart_toy</span>\n }\n </div>\n </div>\n }\n @if (session.events && session.events.length) {\n <ul class=\"rtsee-events-dashboard-session-events-list\"\n >\n @for (event of session.events | slice:0:5; track event.id) {\n <li class=\"rtsee-events-dashboard-session-event\">\n <rtsee-event-thumbnail [event]=\"event\"></rtsee-event-thumbnail>\n </li>\n }\n </ul>\n }\n\n <div class=\"rtsee-events-dashboard-session-footer\">\n <button *ngIf=\"session.events.length > 5\">{{session.events.length - 5}} more</button>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { TimeFormatHelperService } from '../../../../services/time-format-helper.service';\nimport { DefaultImagesService } from '../../../../services/default-images.service';\nimport {\n RTSeeEventsDashboard,\n RTSeeDashboardClient,\n} from '@rtsee/events-dashboard';\nimport { RtseeEventsDashboardSessionComponent } from '../rtsee-events-dashboard-session/rtsee-events-dashboard-session.component';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard-client-thumbnail',\n templateUrl: './rtsee-events-dashboard-client-thumbnail.component.html',\n imports: [RtseeEventsDashboardSessionComponent],\n standalone: true,\n})\nexport class RtseeEventsDashboardClientThumbnailComponent implements OnInit {\n @Input() dashboard!: RTSeeEventsDashboard;\n @Input() client!: RTSeeDashboardClient;\n\n constructor(\n public timeFormatService: TimeFormatHelperService,\n public defaultImagesService: DefaultImagesService,\n ) {}\n\n ngOnInit(): void {}\n\n openChat() {\n this.dashboard.openChat(this.client);\n }\n}\n","<div class=\"rtsee-dashboard-client-thumbnail\">\n <div class=\"rtsee-dashboard-client-header\">\n <div class=\"rtsee-dashboard-client-header-photo\">\n <div class=\"rtsee-dashboard-client-header-image\"\n [style.background-image]=\"'url(' + client.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n @if (client.isConnected) {\n <div class=\"rtsee-dashboard-client-live-indicator\"></div>\n }\n </div>\n <p class=\"rtsee-dashboard-client-name\">\n <span class=\"rtsee-dashboard-client-name-text\">{{ client.name || client.id }}</span>\n <button (click)=\"openChat()\" class=\"rtsee-dashboard-client-engage\">\n <span class=\"rtsee-dashboard-client-engage-icon material-icons-outlined\">chat_bubble</span>\n </button>\n </p>\n </div>\n <div class=\"rtsee-dashboard-sessions\">\n @for(session of client.sessions; track session.id) {\n <div class=\"rtsee-dashboard-sessions-container\">\n <rtsee-rtsee-events-dashboard-session [session]=\"session\"></rtsee-rtsee-events-dashboard-session>\n </div>\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeEventsDashboard } from '@rtsee/events-dashboard';\n\nimport { RtseeEventsDashboardClientThumbnailComponent } from './components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component';\n\n@Component({\n selector: 'rtsee-events-dashboard',\n templateUrl: './rtsee-events-dashboard.component.html',\n imports: [RtseeEventsDashboardClientThumbnailComponent],\n standalone: true,\n})\nexport class RtseeEventsDashboardComponent {\n @Input() eventsDashboard!: RTSeeEventsDashboard;\n}\n","<div class=\"rtsee-events-dashboard\">\n <div class=\"rtsee-events-dashboard-client-thumbnails\">\n @for (client of eventsDashboard.clients; track client.id) {\n <div class=\"rtsee-events-dashboard-client-thumbnail-wrapper\">\n <ngx-rtsee-events-dashboard-client-thumbnail\n [client]=\"client\"\n [dashboard]=\"eventsDashboard\"\n ></ngx-rtsee-events-dashboard-client-thumbnail>\n </div>\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { CdkCopyToClipboard } from '@angular/cdk/clipboard';\nimport { IPresentationRoom } from '@rtsee/common';\nimport { RTSeePresentation } from '@rtsee/presentation';\nimport { Message } from 'primeng/message';\nimport { Toast } from 'primeng/toast';\nimport { MessageService } from 'primeng/api';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\n\n@Component({\n selector: 'rtsee-join-call',\n imports: [Button, CdkCopyToClipboard, Message, Toast],\n templateUrl: './join-call.component.html',\n providers: [MessageService],\n})\nexport class JoinCallComponent {\n recentlyCopied: boolean = false;\n\n @Input() presentation!: RTSeePresentation;\n @Input() room!: IPresentationRoom;\n constructor(private messageService: MessageService) {}\n\n copyClicked(): void {\n this.messageService.add({\n severity: 'success',\n summary: 'Link Copied!',\n detail: 'The link was copied to clipboard!',\n });\n this.recentlyCopied = true;\n setTimeout(() => {\n this.recentlyCopied = false;\n }, 2000);\n }\n\n protected readonly window = window;\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rtsee-join-call\">\n <div class=\"rtsee-join-call-button\">\n <p-button [label]=\"presentation.labels[RTSeeTextLabelKeys.START_A_CALL_BUTTON]\"\n (click)=\"presentation.emitJoinRoomCallEvent()\"\n ></p-button>\n </div>\n <div class=\"rtsee-share-call-link\">\n <div class=\"rtsee-share-call-explain-section\">\n <div class=\"rtsee-share-call-explain-section-icon\">\n <span class=\"pi pi-link rtsee-link-icon\"></span>\n </div>\n <div class=\"rtsee-share-call-explain-section-text\">\n <span>Anyone can join your storytelling session using this link.</span>\n </div>\n </div>\n <div class=\"rtsee-share-call-link-section\">\n <p-toast position=\"bottom-center\" />\n <p-button [icon]=\"recentlyCopied ? 'pi pi-check' : 'pi pi-copy'\"\n severity=\"secondary\"\n class=\"rtsee-share-call-link-copy-btn\"\n [cdkCopyToClipboard]=\"window.location.origin + '?room_id=' + room.id\"\n (cdkCopyToClipboardCopied)=\"copyClicked()\"\n ></p-button>\n <p-message severity=\"info\"\n class=\"rtsee-share-call-link-text\"\n >{{ window.location.origin + '?room_id=' + room.id }}</p-message>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeePresentation } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { NgClass } from '@angular/common';\nimport { Chip } from 'primeng/chip';\nimport { JoinCallComponent } from '../join-call/join-call.component';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\nimport { RouterLink } from \"@angular/router\";\n\n@Component({\n selector: 'rtsee-presentation-header',\n templateUrl: './presentation-header.component.html',\n imports: [Button, NgClass, Chip, JoinCallComponent, RouterLink],\n standalone: true,\n})\nexport class PresentationHeaderComponent {\n @Input() public presentation!: RTSeePresentation;\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<header class=\"rtsee-presentation-header\"\n [ngClass]=\"{\n 'rtsee-presentation-header-convertable': presentation.activeStory,\n 'rtsee-presentation-header-visible': presentation.activeStory?.headerVisible\n }\"\n>\n @if (!presentation.activeStory && !presentation.openedStoryDetails) {\n <div class=\"rtsee-presentations-header-title\">\n <div class=\"rtsee-presentations-header-title-overlay\"></div>\n <div class=\"rtsee-presentations-header-title-content\">\n <h1>{{presentation.labels[RTSeeTextLabelKeys.PRESENTATION_TITLE_LABEL]}}</h1>\n <p class=\"rtsee-presentations-header-title-subtitle\">\n <span>{{presentation.labels[RTSeeTextLabelKeys.PRESENTATION_SUBTITLE_LABEL]}}</span>\n </p>\n </div>\n </div>\n }\n\n @if (presentation.activeRoom && !presentation.activeStory && !presentation.openedStoryDetails) {\n <div class=\"rtsee-presentation-room-block\">\n <rtsee-join-call [room]=\"presentation.activeRoom\"\n [presentation]=\"presentation\"\n ></rtsee-join-call>\n </div>\n }\n\n @if (presentation.activeStory) {\n <div class=\"rtsee-presentation-header-active-story-info\">\n <div class=\"rtsee-presentation-header-active-story-info-close\"\n [routerLink]=\"[presentation.homePage]\"\n (click)=\"presentation.disableActiveStory()\"\n >\n <i class=\"pi pi-times rtsee-presentation-header-active-story-info-close-icon\"></i>\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-details\">\n <p-chip [label]=\"presentation.activeStory.name\"\n [image]=\"presentation.activeStory.imageUrl || undefined\"\n class=\"rtsee-presentation-header-active-story-name\"\n alt=\"Story image\" />\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-settings\"\n (click)=\"presentation.settings.expand()\"\n >\n <i class=\"pi pi-cog-h rtsee-presentation-header-active-story-info-settings-icon\"></i>\n </div>\n </div>\n }\n @if (presentation.dashboard && !presentation.activeStory && !presentation.isDashboardOpen && !presentation.openedStoryDetails) {\n <p-button [label]=\"presentation.labels[RTSeeTextLabelKeys.DASHBOARD_BUTTON]\"\n (click)=\"presentation.toggleDashboardState()\"\n ></p-button>\n }\n</header>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeePresentation, RTSeeStory } from '@rtsee/presentation';\nimport { RatingComponent } from '../../../common/components/rating/rating.component';\nimport { RouterLink } from \"@angular/router\";\nimport {RTSeeTextLabelKeys} from \"@rtsee/core\";\n\n@Component({\n selector: 'rtsee-story-thumbnail',\n templateUrl: './story-thumbnail.component.html',\n imports: [RatingComponent, RouterLink],\n standalone: true,\n})\nexport class StoryThumbnailComponent implements OnInit {\n progressPercent: number = 0;\n protected readonly Math = Math;\n @Input() story!: RTSeeStory;\n @Input() presentation!: RTSeePresentation;\n\n ngOnInit(): void {\n if (this.story.preselectedSlideNumber) {\n this.progressPercent = Math.round(\n (this.story.preselectedSlideNumber / this.story.totalSlides) * 100,\n );\n }\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<a [routerLink]=\"[presentation.routePrefix, story.friendlyUrl]\" class=\"rtsee-story-thumbnail\">\n <div class=\"rtsee-story-thumbnail-image-container\">\n <div class=\"rtsee-story-thumbnail-image\">\n <img [src]=\"story.imageUrl\"\n [alt]=\"story.name\"\n class=\"rtsee-story-thumbnail-image\"\n />\n </div>\n @if (story.preselectedSlideNumber) {\n <div class=\"rtsee-story-thumbnail-progress-bar-container\">\n <div class=\"rtsee-story-thumbnail-progress-bar\">\n <div class=\"rtsee-story-thumbnail-progress-bar-inner\"\n [style.width]=\"progressPercent + '%'\"\n ></div>\n </div>\n </div>\n }\n </div>\n <div class=\"rtsee-story-thumbnail-body-container\">\n <h4 class=\"rtsee-story-thumbnail-title\">{{story.name}}</h4>\n <div class=\"rtsee-story-thumbnail-body-meta\">\n @if (story.rating) {\n <rtsee-rating [rate]=\"{maxValue: 5, value: story.rating}\"></rtsee-rating>\n }\n @if (story.averageReadTime) {\n <span class=\"rtsee-story-thumbnail-time-container\">\n <span class=\"rtsee-story-thumbnail-info-time-icon material-icons-outlined\">schedule</span>\n <span class=\"rtsee-story-thumbnail-info-read-time\">\n <span>{{ Math.ceil(story.averageReadTime / 60) }}</span>\n <span> </span>\n <span>{{ presentation.labels[RTSeeTextLabelKeys.MINUTE_LABEL] }}</span>\n </span>\n </span>\n }\n @if (story.recommendedAge) {\n <span class=\"rtsee-story-thumbnail-label-container\">{{story.recommendedAge}}</span>\n }\n </div>\n </div>\n</a>\n","import { AfterViewInit, Component, ElementRef, Input } from '@angular/core';\nimport {RTSeePresentation, RTSeeStory, RTSeeStorySlide} from '@rtsee/presentation';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { WidgetDirective } from '../../../directives/widget.directive';\nimport { Button } from 'primeng/button';\nimport { RTSeePresentationSettings } from '@rtsee/presentation';\nimport {RTSeeTextLabelKeys} from \"@rtsee/core\";\nimport {PaymentPageComponent} from \"../../rtsee-messenger/payment-page/payment-page.component\";\n\n@Component({\n selector: 'rtsee-slide',\n templateUrl: './slide.component.html',\n imports: [NgStyle, WidgetDirective, Button, NgClass, PaymentPageComponent],\n standalone: true,\n})\nexport class SlideComponent implements AfterViewInit {\n hideRewindControls: boolean = true;\n lastScrollPosition: number = 0;\n scrollingDown: boolean = false;\n\n @Input() presentation!: RTSeePresentation;\n @Input() story!: RTSeeStory;\n @Input() slide!: RTSeeStorySlide;\n @Input() settings!: RTSeePresentationSettings;\n constructor(private elementRef: ElementRef<HTMLElement>) {}\n\n slideRewindClicked(forward: boolean) {\n if (forward) {\n this.story.nextSlide();\n } else {\n this.story.previousSlide();\n }\n }\n\n ngAfterViewInit() {\n const parentSlideEl: HTMLElement | null =\n this.elementRef.nativeElement.closest('.story-player-slide-container');\n if (!parentSlideEl) {\n return;\n }\n\n this.story.onNewSlideRendered(this.slide.slideNumber, parentSlideEl);\n this.scrollingDown = !this.story.headerVisible;\n\n setTimeout(() => {\n this.hideRewindControls = false;\n }, 500);\n }\n\n onScroll(target: EventTarget | null): void {\n if (target && target instanceof HTMLElement) {\n this.handleScroll(\n target.scrollTop,\n target.scrollHeight,\n target.clientHeight,\n );\n }\n }\n\n private handleScroll(\n position: number,\n scrollHeight: number,\n clientHeight: number,\n ) {\n const BUFFER: number = 50;\n const isAtBottom: boolean =\n Math.abs(scrollHeight - position - clientHeight) < 10;\n\n if (position > this.lastScrollPosition + BUFFER) {\n if (!this.scrollingDown) {\n this.scrollingDown = true;\n console.log('started scrolling down');\n this.story.toggleHeader(false);\n }\n\n this.lastScrollPosition = position;\n } else if (position + BUFFER < this.lastScrollPosition) {\n if (this.scrollingDown) {\n this.scrollingDown = false;\n console.log('scrolled up');\n this.story.toggleHeader(true);\n }\n\n this.lastScrollPosition = position;\n } else if (isAtBottom) {\n this.lastScrollPosition = position;\n this.story.toggleHeader(true);\n }\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rtsee-presentation-slide\" (scroll)=\"onScroll($event.target)\">\n @if (slide.widget) {\n <ng-template widgetHost></ng-template>\n }\n <div class=\"rtsee-presentation-slide-default\">\n @if (slide.imageUrl) {\n <div class=\"rtsee-presentation-slide-image-container\"\n [ngStyle]=\"{'background-image': 'url(' + slide.imageUrl + ')'}\"\n >\n </div>\n }\n <div class=\"rtsee-presentation-slide-text\">\n <p [style.font-size]=\"settings.fontSize + 'rem'\">{{slide.text}}</p>\n </div>\n <div class=\"rtsee-presentation-slide-controls\"\n [ngClass]=\"{'rtsee-presentation-slide-controls-hidden': hideRewindControls}\"\n >\n @if (story.activeSlideNumber !== 1) {\n <p-button class=\"slide-navigation-btn navigation-prev\"\n [label]=\"presentation.labels[RTSeeTextLabelKeys.PREVIOUS_SLIDE_LABEL]\"\n icon=\"pi pi-arrow-left\"\n [severity]=\"'secondary'\"\n [iconPos]=\"'left'\"\n (click)=\"slideRewindClicked(false)\"\n >\n </p-button>\n }\n @if (story.activeSlideNumber !== this.story.totalSlides) {\n <p-button class=\"slide-navigation-btn navigation-next\"\n [label]=\"presentation.labels[RTSeeTextLabelKeys.NEXT_SLIDE_LABEL]\"\n icon=\"pi pi-arrow-right\"\n [iconPos]=\"'right'\"\n (click)=\"slideRewindClicked(true)\"\n >\n </p-button>\n }\n </div>\n @if (\n presentation.messenger\n && story.activeSlideNumber === this.story.totalSlides\n && !presentation.myPeer.plan\n ) {\n <div class=\"rtsee-presentation-slide-payment\">\n <rtsee-payment-page [messenger]=\"presentation.messenger\" theme=\"light\"></rtsee-payment-page>\n </div>\n }\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {RTSeePresentation, RTSeeStory} from '@rtsee/presentation';\nimport { NgClass } from '@angular/common';\nimport { SlideComponent } from '../slide/slide.component';\nimport Swiper from 'swiper';\nimport { EffectCards, Manipulation } from 'swiper/modules';\nimport { RTSeePresentationSettings } from '@rtsee/presentation';\n\n@Component({\n selector: 'rtsee-story-player',\n templateUrl: './story-player.component.html',\n imports: [NgClass, SlideComponent],\n standalone: true,\n})\nexport class StoryPlayerComponent implements OnInit, AfterViewInit {\n @Input() story!: RTSeeStory;\n @Input() settings!: RTSeePresentationSettings;\n @Input() presentation!: RTSeePresentation;\n @ViewChild('swiperContainer') swiperEl!: ElementRef<HTMLElement>;\n constructor() {\n Swiper.use([EffectCards, Manipulation]);\n }\n\n ngOnInit() {\n console.log('Story Player: Story = ', this.story);\n }\n\n ngAfterViewInit() {\n const swiper = new Swiper(this.swiperEl.nativeElement, {\n effect: 'cards',\n grabCursor: true,\n });\n\n this.story.initSwiper(swiper);\n }\n}\n","<div class=\"rtsee-story-player\">\n <div class=\"rtsee-story-player-slider swiper\" #swiperContainer>\n <div class=\"rtsee-story-player-slider-inner swiper-wrapper\">\n @for (slide of story.slides; track (slide.id || slide.slideNumber)) {\n <div class=\"story-player-slide-container swiper-slide\"\n [ngClass]=\"{'story-player-slide-active': slide.isActive}\"\n >\n <rtsee-slide [slide]=\"slide\"\n [story]=\"story\"\n [presentation]=\"presentation\"\n [settings]=\"settings\"\n ></rtsee-slide>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { OrderList } from 'primeng/orderlist';\nimport { RTSeeManageStorySlides } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'rtsee-manage-slides',\n imports: [OrderList, Button, NgClass],\n templateUrl: './manage-slides.component.html',\n})\nexport class ManageSlidesComponent {\n @Input() manageSlides!: RTSeeManageStorySlides;\n}\n","<div class=\"rtsee-presentation-manage-slides\">\n <div class=\"rtsee-presentation-manage-slides-header\">\n <p-button (click)=\"manageSlides.selectNewSlide()\"\n label=\"Create A New Slide\"\n ></p-button>\n </div>\n <div class=\"rtsee-presentation-manage-slides-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageSlides.slides\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n scrollHeight=\"40rem\"\n controlsPosition=\"right\"\n (onReorder)=\"manageSlides.onReorder($event)\"\n [disabled]=\"manageSlides.loadInProgress\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <div class=\"rtsee-presentation-manage-slides-list-item rtsee-ordered-list-item\">\n <img\n [src]=\"option.imageUrl\"\n [alt]=\"'slide_image'\"\n [style.width]=\"'60px'\"\n class=\"rtsee-presentation-manage-slides-list-item-image rtsee-ordered-list-item-image\"\n />\n <div class=\"rtsee-presentation-manage-slides-list-item-info rtsee-ordered-list-item-info\">\n <span [ngClass]=\"{\n 'text-sm': true,\n 'text-surface-500': !selected,\n 'dark:text-surface-400': !selected,\n 'text-inherit': selected,\n }\"\n class=\"rtsee-ordered-list-item-info-label\"\n >{{ option.slideNumber }}</span>\n <div class=\"rtsee-ordered-list-item-info-buttons\">\n <p-button label=\"Edit\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageSlides.selectSlide(option.slideNumber)\"\n ></p-button>\n <p-button label=\"Delete\"\n severity=\"warn\"\n class=\"rtsee-ordered-list-item-info-button\"\n ></p-button>\n </div>\n </div>\n </div>\n </ng-template>\n </p-orderList>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeManageStorySlide } from '@rtsee/presentation';\nimport { FormComponent } from '../../../../../common/components/forms/form/form.component';\nimport { Button } from 'primeng/button';\n\n@Component({\n selector: 'rtsee-manage-slide',\n imports: [\n FormComponent,\n Button,\n ],\n templateUrl: './manage-slide.component.html',\n})\nexport class ManageSlideComponent {\n @Input() manageSlide!: RTSeeManageStorySlide;\n\n submit() {\n if (this.manageSlide.activeSlideForm) {\n this.manageSlide.activeSlideForm.submit();\n }\n }\n}\n","<div class=\"rtsee-presentation-manage-story-slide\">\n <div class=\"rtsee-manage-story-slide-info rtsee-form-container\">\n @if (manageSlide.activeSlideForm) {\n <rtsee-form [form]=\"manageSlide.activeSlideForm\" (formSubmit)=\"submit()\">\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageSlide.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageSlide.cancel()\"\n [disabled]=\"manageSlide.saveInProgress\"\n />\n </rtsee-form>\n }\n </div>\n</div>\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { RTSeeManageStory } from \"@rtsee/presentation\";\nimport { Button } from \"primeng/button\";\nimport { ManageSlidesComponent } from \"./manage-slides/manage-slides.component\";\nimport { ManageSlideComponent } from \"./manage-slide/manage-slide.component\";\nimport { Divider } from \"primeng/divider\";\nimport { FormComponent } from \"../../../../common/components/forms/form/form.component\";\n\n@Component({\n selector: \"rtsee-manage-story\",\n standalone: true,\n imports: [\n Button,\n ManageSlidesComponent,\n ManageSlideComponent,\n Divider,\n FormComponent,\n ],\n templateUrl: \"./manage-story.component.html\",\n})\nexport class ManageStoryComponent implements OnInit {\n @Input() manageStory!: RTSeeManageStory;\n\n ngOnInit() {\n if (!this.manageStory.activeStoryForm) {\n this.manageStory.initForm();\n }\n\n if (!this.manageStory.activeStoryForm) {\n throw new Error(`Active story form should be selected`);\n }\n }\n\n submit() {\n if (!this.manageStory.activeStoryForm) {\n return;\n }\n this.manageStory.activeStoryForm.submit();\n }\n}\n","<div class=\"rtsee-manage-story\">\n @if (!manageStory.manageSlides.selectedSlide) {\n <div class=\"rtsee-manage-story-info rtsee-form-container\">\n @if (manageStory.activeStoryForm) {\n <rtsee-form [form]=\"manageStory.activeStoryForm\" (formSubmit)=\"submit()\">\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageStory.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageStory.cancel()\"\n [disabled]=\"manageStory.saveInProgress\"\n />\n </rtsee-form>\n\n @if (manageStory.story.id) {\n <p-divider />\n <div class=\"rtsee-story-slides-wrapper\">\n <rtsee-manage-slides [manageSlides]=\"manageStory.manageSlides\"></rtsee-manage-slides>\n </div>\n }\n }\n </div>\n }\n @if (manageStory.manageSlides.selectedSlide) {\n <div class=\"rtsee-manage-story-slide-wrapper\">\n <rtsee-manage-slide [manageSlide]=\"manageStory.manageSlides.selectedSlide\"\n ></rtsee-manage-slide>\n </div>\n }\n</div>\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\nimport { NgClass } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { IRTSeeStoryElement, IRTSeeIllustratorSubmitPayload, RTSeeIllustratorEvents } from \"@rtsee/common\";\nimport {\n RTSeeIllustrator,\n RTSeeStoryElementEntity,\n RTSeeStoryElementsEditor,\n} from \"@rtsee/presentation\";\nimport { RTSeeCore } from \"@rtsee/core\";\nimport { Button } from \"primeng/button\";\nimport { FormComponent } from \"../../../../common/components/forms/form/form.component\";\nimport { sanitizeImageUrl } from \"@rtsee/utilities-ui\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyElementsEditor = RTSeeStoryElementsEditor<any, any>;\n\n/**\n * Collapsible section rendering the thumbnails of one kind of story element\n * (characters / artifacts / locations) and the expanded edit form.\n * All the logic lives in RTSeeStoryElementsEditor.\n */\n@Component({\n selector: \"rtsee-story-elements-section\",\n standalone: true,\n imports: [NgClass, FormsModule, Button, FormComponent],\n templateUrl: \"./story-elements-section.component.html\",\n})\nexport class StoryElementsSectionComponent implements OnDestroy {\n @Input({ required: true }) editor!: AnyElementsEditor;\n @Input({ required: true }) title!: string;\n @Input() icon: string = \"pi pi-box\";\n @Input() collapsed: boolean = false;\n @Input() canDetach: boolean = true;\n @Output() toggled: EventEmitter<void> = new EventEmitter<void>();\n\n batchMode: boolean = false;\n selectedItemIds: Set<string> = new Set<string>();\n batchAdditionalPrompt: string = '';\n generatingItemIds: Set<string> = new Set<string>();\n private activeGenerationListeners: Map<string, (e: Event) => void> = new Map();\n\n private _illustrator?: RTSeeIllustrator;\n private onIllustratorChanged = (): void => {\n this.cdr.markForCheck();\n };\n\n @Input()\n set illustrator(val: RTSeeIllustrator | undefined) {\n if (this._illustrator) {\n this._illustrator.off('changed', this.onIllustratorChanged);\n }\n this._illustrator = val;\n if (this._illustrator) {\n this._illustrator.on('changed', this.onIllustratorChanged);\n }\n this.cdr.markForCheck();\n }\n\n get illustrator(): RTSeeIllustrator | undefined {\n return this._illustrator;\n }\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n ngOnDestroy(): void {\n if (this._illustrator) {\n this._illustrator.off('changed', this.onIllustratorChanged);\n }\n for (const [requestId, listener] of this.activeGenerationListeners.entries()) {\n window.removeEventListener(RTSeeIllustrator.REQUESTED_GENERATION_SUCCEED, listener);\n }\n this.activeGenerationListeners.clear();\n }\n\n startBatchSelection(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.collapsed) {\n this.toggled.emit();\n }\n this.batchMode = true;\n this.selectedItemIds.clear();\n for (const item of this.editor.items) {\n const url = (item.imageUrl || '').toLowerCase();\n if (!url || url.includes('default')) {\n this.selectedItemIds.add(item.id);\n }\n }\n this.cdr.markForCheck();\n }\n\n cancelBatchSelection(): void {\n this.batchMode = false;\n this.selectedItemIds.clear();\n this.batchAdditionalPrompt = '';\n this.cdr.markForCheck();\n }\n\n toggleItemSelection(id: string): void {\n if (this.selectedItemIds.has(id)) {\n this.selectedItemIds.delete(id);\n } else {\n this.selectedItemIds.add(id);\n }\n this.cdr.markForCheck();\n }\n\n isItemSelected(id: string): boolean {\n return this.selectedItemIds.has(id);\n }\n\n isItemGenerating(id: string): boolean {\n return this.generatingItemIds.has(id);\n }\n\n async submitBatchGeneration(): Promise<void> {\n if (this.selectedItemIds.size === 0) return;\n\n const selectedItems = this.editor.items.filter((item) => this.selectedItemIds.has(item.id));\n const additionalPrompt = this.batchAdditionalPrompt.trim();\n\n this.batchMode = false;\n this.selectedItemIds.clear();\n this.batchAdditionalPrompt = '';\n this.cdr.markForCheck();\n\n for (const item of selectedItems) {\n const requestId = RTSeeCore.uuidv4();\n this.generatingItemIds.add(item.id);\n\n const listener = async (e: Event) => {\n const customEvent = e as CustomEvent<{ requestId?: string; imageUrl?: string }>;\n if (customEvent.detail?.requestId === requestId && customEvent.detail?.imageUrl) {\n window.removeEventListener(RTSeeIllustrator.REQUESTED_GENERATION_SUCCEED, listener);\n this.activeGenerationListeners.delete(requestId);\n this.generatingItemIds.delete(item.id);\n\n const cleanUrl = sanitizeImageUrl(customEvent.detail.imageUrl);\n try {\n item.imageUrl = cleanUrl;\n await item.save({ imageUrl: cleanUrl });\n if (this.editor.expanded && this.editor.expanded.id === item.id && this.editor.form) {\n const imageField = this.editor.form.fields.find(\n (f: any) => f.name === 'imageUrl' || f.type === 'image-uploader'\n ) as any;\n if (imageField) {\n imageField.value = cleanUrl;\n if (imageField.imageUploader) {\n imageField.imageUploader.uploadedPhotoPreview = cleanUrl;\n imageField.imageUploader.value = cleanUrl;\n }\n }\n }\n } catch (err) {\n console.error(`Failed to apply generated image to ${this.editor.label}:`, err);\n } finally {\n this.cdr.markForCheck();\n }\n }\n };\n\n window.addEventListener(RTSeeIllustrator.REQUESTED_GENERATION_SUCCEED, listener);\n this.activeGenerationListeners.set(requestId, listener);\n\n const promptParts: string[] = [];\n promptParts.push(`${this.editor.label}: ${item.name || ''}`);\n if (item.visualDescription) {\n promptParts.push(`Visual appearance: ${item.visualDescription}`);\n }\n if (item.description && item.description !== item.visualDescription) {\n promptParts.push(`Description/Role: ${item.description}`);\n }\n if (additionalPrompt) {\n promptParts.push(`Additional prompt: ${additionalPrompt}`);\n }\n const entityPrompt = promptParts.join('\\n');\n\n const config = this.illustrator?.config || {\n aspectRatio: '1:1',\n style: 'Classic Fairy Tale pixel-art Storybook',\n mood: 'Dreamy & Magical',\n lighting: 'Soft Diffused Storybook Glow',\n negativePrompt: 'modern elements, cars, text, watermark, signature, blurry, low quality',\n numberOfImages: 1,\n };\n\n const payload: IRTSeeIllustratorSubmitPayload = {\n chatId: this.illustrator?.activeChatId || undefined,\n agentId: this.illustrator?.activeAgentId || '',\n prompt: entityPrompt,\n config: { ...config },\n contextImages: [],\n requestId,\n };\n\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.SUBMIT_PROMPT, {\n detail: payload,\n })\n );\n }\n\n this.cdr.markForCheck();\n }\n\n async applyReviewedImageToItem(\n event: Event,\n item: RTSeeStoryElementEntity<IRTSeeStoryElement>\n ): Promise<void> {\n event.stopPropagation();\n event.preventDefault();\n const imageUrl = sanitizeImageUrl(this._illustrator?.currentGeneratedImageUrl);\n if (!imageUrl) return;\n\n this.cdr.markForCheck();\n try {\n await item.save({ imageUrl });\n if (this.editor.expanded && this.editor.expanded.id === item.id && this.editor.form) {\n const imageField = this.editor.form.fields.find(\n (f: any) => f.name === 'imageUrl' || f.type === 'image-uploader'\n ) as any;\n if (imageField) {\n imageField.value = imageUrl;\n if (imageField.imageUploader) {\n imageField.imageUploader.uploadedPhotoPreview = imageUrl;\n }\n }\n }\n\n // Reset illustrator state and UI\n this._illustrator?.resetState();\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(RTSeeIllustratorEvents.RESET_STATE));\n }\n } catch (e) {\n console.error(`Failed to apply image to ${this.editor.label}:`, e);\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n submit(): void {\n this.editor.submit();\n }\n\n addToIllustrator(event: Event, item: RTSeeStoryElementEntity<IRTSeeStoryElement>): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: item.id,\n title: item.name || this.editor.label,\n imageUrl: item.imageUrl || '',\n visualDescription: item.visualDescription || item.description || '',\n description: item.description || '',\n sourceType: this.editor.section,\n },\n })\n );\n }\n }\n\n trackById(index: number, item: RTSeeStoryElementEntity<IRTSeeStoryElement>): string {\n return item.id || `new-${index}`;\n }\n}\n\n","<section class=\"rtsee-ise-section\" [ngClass]=\"{ 'rtsee-ise-section--collapsed': collapsed }\">\n <header class=\"rtsee-ise-section-header\">\n <button type=\"button\"\n class=\"rtsee-ise-section-toggle\"\n [attr.aria-expanded]=\"!collapsed\"\n [id]=\"'rtsee-ise-toggle-' + editor.section\"\n (click)=\"toggled.emit()\">\n <i class=\"rtsee-ise-section-icon\" [ngClass]=\"icon\"></i>\n <h3 class=\"rtsee-ise-section-title\">{{ title }}</h3>\n <span class=\"rtsee-ise-section-count\">{{ editor.items.length }}</span>\n <i class=\"pi pi-chevron-down rtsee-ise-chevron\"></i>\n </button>\n @if (editor.items.length > 0 && !batchMode) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-batch-generate\"\n (click)=\"startBatchSelection($event)\"\n [title]=\"'Batch generate images for ' + title\">\n <i class=\"pi pi-sparkles\"></i>\n <span>Generate Images</span>\n </button>\n }\n </header>\n\n @if (batchMode) {\n <div class=\"rtsee-ise-batch-panel\">\n <div class=\"rtsee-ise-batch-header\">\n <span class=\"rtsee-ise-batch-title\">\n <i class=\"pi pi-sparkles\"></i>\n Batch Generate for {{ title }} ({{ selectedItemIds.size }} of {{ editor.items.length }} selected)\n </span>\n <span class=\"rtsee-ise-batch-hint\">\n Click items to select/deselect. Entities with default images are auto-selected.\n </span>\n </div>\n\n <textarea\n class=\"rtsee-ise-batch-prompt-input\"\n rows=\"2\"\n [(ngModel)]=\"batchAdditionalPrompt\"\n placeholder=\"Additional prompt instructions for all selected {{ title }} (optional)...\"\n ></textarea>\n\n <div class=\"rtsee-ise-batch-actions\">\n <button\n type=\"button\"\n class=\"rtsee-ise-btn-batch-cancel\"\n (click)=\"cancelBatchSelection()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"rtsee-ise-btn-batch-submit\"\n [disabled]=\"selectedItemIds.size === 0\"\n (click)=\"submitBatchGeneration()\"\n >\n <i class=\"pi pi-sparkles\"></i>\n <span>Generate {{ selectedItemIds.size }} image{{ selectedItemIds.size === 1 ? '' : 's' }}</span>\n </button>\n </div>\n </div>\n }\n\n @if (!collapsed) {\n <div class=\"rtsee-ise-section-body\">\n <div class=\"rtsee-ise-thumbs-grid\">\n @for (item of editor.items; track trackById($index, item)) {\n <div class=\"rtsee-ise-thumb-card-container\" style=\"position: relative; display: flex; flex-direction: column;\">\n <button type=\"button\"\n class=\"rtsee-ise-thumb\"\n [ngClass]=\"{\n 'rtsee-ise-thumb--active': editor.isExpanded(item),\n 'rtsee-ise-thumb-card--selected': batchMode && isItemSelected(item.id)\n }\"\n [id]=\"'rtsee-ise-' + editor.section + '-' + item.id\"\n (click)=\"batchMode ? toggleItemSelection(item.id) : editor.expand(item)\">\n <div class=\"rtsee-ise-thumb-image\">\n @if (item.imageUrl) {\n <img [src]=\"item.imageUrl\" [alt]=\"item.name\" loading=\"lazy\" />\n } @else {\n <i [ngClass]=\"icon\"></i>\n }\n @if (isItemGenerating(item.id)) {\n <div class=\"rtsee-ise-thumb-generating-overlay\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n <span>Generating…</span>\n </div>\n }\n </div>\n <div class=\"rtsee-ise-thumb-body\">\n <span class=\"rtsee-ise-thumb-name\">{{ item.name }}</span>\n <span class=\"rtsee-ise-thumb-description\">{{ item.getTruncatedDescription(90) }}</span>\n </div>\n </button>\n @if (batchMode) {\n <div class=\"rtsee-ise-thumb-batch-checkbox\" (click)=\"toggleItemSelection(item.id); $event.stopPropagation()\">\n <input type=\"checkbox\" [checked]=\"isItemSelected(item.id)\" />\n </div>\n }\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator\"\n style=\"position: absolute; top: 8px; right: 8px;\"\n title=\"Add {{ item.name }} to Illustrator context\"\n (click)=\"addToIllustrator($event, item)\">\n <i class=\"pi pi-palette\"></i>\n <span>+🎨</span>\n </button>\n @if (illustrator?.reviewingGeneratedImage && illustrator?.currentGeneratedImageUrl) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-quick-apply\"\n style=\"position: absolute; bottom: 8px; right: 8px;\"\n [disabled]=\"item.saveInProgress\"\n [title]=\"'Apply reviewed image to ' + item.name\"\n (click)=\"applyReviewedImageToItem($event, item)\">\n @if (item.saveInProgress) {\n <i class=\"pi pi-spin pi-spinner\"></i>\n } @else {\n <i class=\"pi pi-plus\"></i>\n }\n </button>\n }\n </div>\n }\n\n <button type=\"button\"\n class=\"rtsee-ise-thumb rtsee-ise-thumb--add\"\n [ngClass]=\"{ 'rtsee-ise-thumb--active': editor.isCreating }\"\n [id]=\"'rtsee-ise-add-' + editor.section\"\n (click)=\"editor.expandNew()\">\n <i class=\"pi pi-plus\"></i>\n <span>New {{ editor.label }}</span>\n </button>\n </div>\n\n @if (editor.expanded && editor.form) {\n <div class=\"rtsee-ise-expanded rtsee-form-container\">\n <div class=\"rtsee-ise-expanded-header\">\n <h4>{{ editor.expanded.isNew ? 'New ' + editor.label : editor.expanded.name }}</h4>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n @if (!editor.expanded.isNew) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator\"\n title=\"Add to Illustrator context\"\n (click)=\"addToIllustrator($event, editor.expanded)\">\n <i class=\"pi pi-palette\"></i>\n <span>+🎨 Illustrator</span>\n </button>\n }\n <button type=\"button\" class=\"rtsee-ise-icon-button\" (click)=\"editor.collapse()\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n </div>\n\n @if (editor.error) {\n <div class=\"rtsee-ise-error\">{{ editor.error }}</div>\n }\n\n <rtsee-form [form]=\"editor.form\" (formSubmit)=\"submit()\">\n <div class=\"rtsee-ise-actions\">\n <p-button type=\"submit\"\n [label]=\"editor.expanded.isNew ? 'Create' : 'Save'\"\n [loading]=\"editor.saveInProgress\"\n [disabled]=\"editor.busy\" />\n <p-button label=\"Cancel\"\n severity=\"secondary\"\n (click)=\"editor.collapse()\"\n [disabled]=\"editor.busy\" />\n @if (!editor.expanded.isNew) {\n <span class=\"rtsee-ise-actions-spacer\"></span>\n @if (canDetach) {\n <p-button label=\"Remove from story\"\n icon=\"pi pi-minus-circle\"\n severity=\"secondary\"\n [text]=\"true\"\n (click)=\"editor.detach(editor.expanded)\"\n [disabled]=\"editor.busy\" />\n }\n <p-button label=\"Delete\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n [loading]=\"editor.removeInProgress\"\n (click)=\"editor.delete(editor.expanded)\"\n [disabled]=\"editor.busy\" />\n }\n </div>\n </rtsee-form>\n </div>\n }\n </div>\n }\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from 'primeng/button';\nimport { Checkbox } from 'primeng/checkbox';\nimport { Textarea } from 'primeng/textarea';\nimport {\n RTSeeIllustrator,\n IRTSeeIllustratorAgentOption,\n} from '@rtsee/presentation';\nimport { IRTSeeIllustratorContextImage } from '@rtsee/common';\n\n@Component({\n selector: 'rtsee-illustrator',\n standalone: true,\n imports: [CommonModule, FormsModule, Button, Checkbox, Textarea],\n templateUrl: './illustrator.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IllustratorComponent implements OnInit, OnDestroy {\n @Input() illustrator!: RTSeeIllustrator;\n private ownIllustrator: boolean = false;\n\n readonly aspectRatios: string[] = ['1:1', '4:3', '3:4', '16:9', '9:16', '3:2', '2:3'];\n\n readonly styles: string[] = [\n 'Classic Fairy Tale pixel-art Storybook',\n 'Whimsical Watercolor & Ink',\n 'Golden Age Storybook Illustration',\n 'Enchanted Fantasy Digital Art',\n 'Vibrant Children\\'s Book Illustration',\n 'Ethereal Oil Painting',\n ];\n\n readonly moods: string[] = [\n 'Dreamy & Magical',\n 'Warm, Cozy & Hearth-lit',\n 'Epic, Wonder-filled & Adventurous',\n 'Mysterious & Enchanted',\n 'Playful & Charming',\n 'Dark Fantasy & Gothic',\n ];\n\n readonly lightings: string[] = [\n 'Soft Diffused Storybook Glow',\n 'Golden Hour Sunbeams & Dappled Rays',\n 'Twilight Starlight & Fireflies',\n 'Cozy Candlelight & Lantern Glow',\n 'Dramatic Volumetric Rays',\n 'Moonlit Midnight Glow',\n ];\n\n private readonly onIllustratorChanged = (): void => {\n this.cdr.markForCheck();\n };\n\n private readonly onScrollIntoView = (): void => {\n this.cdr.markForCheck();\n setTimeout(() => {\n this.elementRef.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }, 60);\n };\n\n constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly elementRef: ElementRef<HTMLElement>\n ) {}\n\n ngOnInit(): void {\n if (!this.illustrator) {\n this.illustrator = new RTSeeIllustrator();\n this.ownIllustrator = true;\n }\n this.illustrator.on('changed', this.onIllustratorChanged);\n this.illustrator.on('scroll-into-view', this.onScrollIntoView);\n this.illustrator.requestAgents();\n }\n\n ngOnDestroy(): void {\n if (this.illustrator) {\n this.illustrator.off('changed', this.onIllustratorChanged);\n this.illustrator.off('scroll-into-view', this.onScrollIntoView);\n if (this.ownIllustrator) {\n this.illustrator.destroy();\n }\n }\n }\n\n toggleExpand(): void {\n this.illustrator.toggleExpand();\n }\n\n toggleConfig(): void {\n this.illustrator.toggleConfig();\n }\n\n onSelectAgent(event: Event): void {\n const target = event.target as HTMLSelectElement;\n if (target?.value) {\n this.illustrator.selectAgent(target.value);\n }\n }\n\n refreshAgents(): void {\n this.illustrator.requestAgents();\n }\n\n removeImage(id: string): void {\n this.illustrator.removeContextImage(id);\n }\n\n toggleActive(image: IRTSeeIllustratorContextImage): void {\n this.illustrator.toggleImageActive(image.id);\n }\n\n discardGeneratedImage(): void {\n this.illustrator.discardGeneratedImage();\n }\n\n acceptGeneratedImage(): void {\n this.illustrator.acceptGeneratedImage();\n }\n\n submitIteration(): void {\n this.illustrator.submitIteration();\n }\n\n submitPrompt(): void {\n this.illustrator.submitPrompt();\n }\n\n trackByImageId(index: number, item: IRTSeeIllustratorContextImage): string {\n return item.id || `context-img-${index}`;\n }\n\n trackByAgentId(index: number, item: IRTSeeIllustratorAgentOption): string {\n return item.id || `agent-${index}`;\n }\n}\n","<div class=\"rtsee-illustrator-container\" [ngClass]=\"{ 'rtsee-illustrator--expanded': illustrator.expanded }\">\n <!-- Collapsed Bottom Bar -->\n @if (!illustrator.expanded) {\n <div class=\"rtsee-illustrator-collapsed-bar\" (click)=\"toggleExpand()\">\n <div class=\"rtsee-illustrator-collapsed-info\">\n <div class=\"rtsee-illustrator-badge-icon\">\n <i class=\"pi pi-palette\"></i>\n </div>\n <div class=\"rtsee-illustrator-collapsed-title\">\n <span class=\"rtsee-illustrator-brand-text\">NanoBanana Illustrator</span>\n @if (illustrator.activeAgent) {\n <span class=\"rtsee-illustrator-agent-pill\">\n <i class=\"pi pi-bolt\"></i>\n {{ illustrator.activeAgent.name }}\n </span>\n } @else {\n <span class=\"rtsee-illustrator-agent-pill rtsee-illustrator-agent-pill--waiting\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n Waiting for Chat Agent...\n </span>\n }\n </div>\n </div>\n\n <div class=\"rtsee-illustrator-collapsed-meta\">\n @if (illustrator.reviewingGeneratedImage && illustrator.currentGeneratedImageUrl) {\n <span class=\"rtsee-illustrator-collapsed-review-pill\">\n <img [src]=\"illustrator.currentGeneratedImageUrl\" alt=\"Draft\" class=\"rtsee-illustrator-collapsed-thumb\" />\n <span>✨ Reviewing Draft</span>\n </span>\n }\n @if (illustrator.contextImages.length > 0) {\n <span class=\"rtsee-illustrator-context-count\">\n <i class=\"pi pi-images\"></i>\n {{ illustrator.activeContextImages.length }} / {{ illustrator.contextImages.length }} context refs\n </span>\n }\n @if (illustrator.prompt) {\n <span class=\"rtsee-illustrator-prompt-preview\">\n \"{{ illustrator.prompt.length > 50 ? (illustrator.prompt | slice:0:50) + '…' : illustrator.prompt }}\"\n </span>\n }\n <button type=\"button\" class=\"rtsee-illustrator-expand-btn\" aria-label=\"Expand Illustrator\">\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- Expanded Drawer -->\n @if (illustrator.expanded) {\n <div class=\"rtsee-illustrator-expanded-panel\">\n <!-- Header -->\n <header class=\"rtsee-illustrator-header\">\n <div class=\"rtsee-illustrator-title-group\">\n <div class=\"rtsee-illustrator-icon-circle\">\n <i class=\"pi pi-palette\"></i>\n </div>\n <div>\n <h3 class=\"rtsee-illustrator-heading\">NanoBanana Illustrator</h3>\n <p class=\"rtsee-illustrator-subheading\">Generate enchanted fairy tale visuals with rich contextual styling</p>\n </div>\n </div>\n\n <div class=\"rtsee-illustrator-header-controls\">\n <!-- Agent Picker -->\n <div class=\"rtsee-illustrator-agent-select-wrapper\">\n <label class=\"rtsee-illustrator-agent-label\" for=\"rtsee-illustrator-agent-select\">\n <i class=\"pi pi-sparkles\"></i> Agent:\n </label>\n @if (illustrator.agents.length > 0) {\n <select\n id=\"rtsee-illustrator-agent-select\"\n class=\"rtsee-illustrator-select\"\n [value]=\"illustrator.activeAgentId || ''\"\n (change)=\"onSelectAgent($event)\"\n >\n @for (agent of illustrator.agents; track trackByAgentId($index, agent)) {\n <option [value]=\"agent.id\">\n {{ agent.name }} {{ agent.model ? '(' + agent.model + ')' : '' }}\n </option>\n }\n </select>\n } @else {\n <button\n type=\"button\"\n class=\"rtsee-illustrator-btn-mini\"\n (click)=\"refreshAgents()\"\n title=\"Query active agents from RTSeeChat\"\n >\n <i class=\"pi pi-refresh\"></i>\n <span>Connect RTSeeChat</span>\n </button>\n }\n </div>\n\n <!-- Config Toggle Button -->\n <button\n type=\"button\"\n class=\"rtsee-illustrator-header-btn\"\n [ngClass]=\"{ 'rtsee-illustrator-header-btn--active': illustrator.configExpanded }\"\n (click)=\"toggleConfig()\"\n title=\"Toggle NanoBanana Configuration\"\n >\n <i class=\"pi pi-sliders-h\"></i>\n <span>Config</span>\n <i class=\"pi\" [ngClass]=\"illustrator.configExpanded ? 'pi-chevron-up' : 'pi-chevron-down'\"></i>\n </button>\n\n <!-- Collapse Drawer Button -->\n <button\n type=\"button\"\n class=\"rtsee-illustrator-header-btn rtsee-illustrator-header-btn--close\"\n (click)=\"toggleExpand()\"\n aria-label=\"Collapse Illustrator\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n </header>\n\n <!-- Collapsible Config Section -->\n @if (illustrator.configExpanded) {\n <div class=\"rtsee-illustrator-config-panel\">\n <div class=\"rtsee-illustrator-config-grid\">\n <!-- Aspect Ratio -->\n <div class=\"rtsee-illustrator-config-item\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-aspect-ratio\">\n <i class=\"pi pi-stop\"></i> Aspect Ratio (Default 1:1)\n </label>\n <select\n id=\"cfg-aspect-ratio\"\n class=\"rtsee-illustrator-select\"\n [(ngModel)]=\"illustrator.config.aspectRatio\"\n >\n @for (ratio of aspectRatios; track ratio) {\n <option [value]=\"ratio\">{{ ratio }}{{ ratio === '1:1' ? ' (Square - Fairy Tale Default)' : '' }}</option>\n }\n </select>\n </div>\n\n <!-- Style Preset -->\n <div class=\"rtsee-illustrator-config-item\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-style\">\n <i class=\"pi pi-paint-brush\"></i> Illustration Style\n </label>\n <select\n id=\"cfg-style\"\n class=\"rtsee-illustrator-select\"\n [(ngModel)]=\"illustrator.config.style\"\n >\n @for (s of styles; track s) {\n <option [value]=\"s\">{{ s }}</option>\n }\n </select>\n </div>\n\n <!-- Mood Preset -->\n <div class=\"rtsee-illustrator-config-item\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-mood\">\n <i class=\"pi pi-heart\"></i> Mood & Atmosphere\n </label>\n <select\n id=\"cfg-mood\"\n class=\"rtsee-illustrator-select\"\n [(ngModel)]=\"illustrator.config.mood\"\n >\n @for (m of moods; track m) {\n <option [value]=\"m\">{{ m }}</option>\n }\n </select>\n </div>\n\n <!-- Lighting Preset -->\n <div class=\"rtsee-illustrator-config-item\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-lighting\">\n <i class=\"pi pi-sun\"></i> Lighting\n </label>\n <select\n id=\"cfg-lighting\"\n class=\"rtsee-illustrator-select\"\n [(ngModel)]=\"illustrator.config.lighting\"\n >\n @for (l of lightings; track l) {\n <option [value]=\"l\">{{ l }}</option>\n }\n </select>\n </div>\n </div>\n\n <!-- Negative Prompt -->\n <div class=\"rtsee-illustrator-config-item rtsee-illustrator-config-item--full\">\n <label class=\"rtsee-illustrator-field-label\" for=\"cfg-negative-prompt\">\n <i class=\"pi pi-ban\"></i> Negative Prompt (What to exclude)\n </label>\n <input\n id=\"cfg-negative-prompt\"\n type=\"text\"\n class=\"rtsee-illustrator-input\"\n [(ngModel)]=\"illustrator.config.negativePrompt\"\n placeholder=\"e.g. modern items, cars, text, watermark, blurry...\"\n />\n </div>\n </div>\n }\n\n <!-- Context Images Section -->\n @if (illustrator.contextImages.length > 0) {\n <div class=\"rtsee-illustrator-context-section\">\n <div class=\"rtsee-illustrator-section-header\">\n <span class=\"rtsee-illustrator-section-title\">\n <i class=\"pi pi-images\"></i> Story Context References ({{ illustrator.activeContextImages.length }} of {{ illustrator.contextImages.length }} active)\n </span>\n <button\n type=\"button\"\n class=\"rtsee-illustrator-btn-text\"\n (click)=\"illustrator.clearContext()\"\n title=\"Clear all context references\"\n >\n <i class=\"pi pi-trash\"></i> Clear All\n </button>\n </div>\n\n <div class=\"rtsee-illustrator-context-cards\">\n @for (img of illustrator.contextImages; track trackByImageId($index, img)) {\n <div class=\"rtsee-illustrator-context-card\" [ngClass]=\"{ 'rtsee-illustrator-context-card--inactive': !img.active }\">\n <!-- Thumbnail & Active Checkbox -->\n <div class=\"rtsee-illustrator-card-thumb-col\">\n <div class=\"rtsee-illustrator-card-thumb-wrapper\">\n @if (img.imageUrl) {\n <img [src]=\"img.imageUrl\" [alt]=\"img.title\" class=\"rtsee-illustrator-card-img\" />\n } @else {\n <div class=\"rtsee-illustrator-card-no-img\">\n <i class=\"pi pi-image\"></i>\n </div>\n }\n </div>\n <label class=\"rtsee-illustrator-checkbox-label\">\n <input\n type=\"checkbox\"\n [checked]=\"img.active !== false\"\n (change)=\"toggleActive(img)\"\n />\n <span>Active</span>\n </label>\n </div>\n\n <!-- Editable Fields -->\n <div class=\"rtsee-illustrator-card-fields\">\n <div class=\"rtsee-illustrator-card-header\">\n <span class=\"rtsee-illustrator-source-badge\">{{ img.sourceType || 'reference' }}</span>\n <input\n type=\"text\"\n class=\"rtsee-illustrator-card-title-input\"\n [(ngModel)]=\"img.title\"\n placeholder=\"Reference title...\"\n />\n <button\n type=\"button\"\n class=\"rtsee-illustrator-card-remove-btn\"\n (click)=\"removeImage(img.id)\"\n aria-label=\"Remove image from context\"\n title=\"Remove from context\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"rtsee-illustrator-card-inputs-grid\">\n <div class=\"rtsee-illustrator-input-group\">\n <label class=\"rtsee-illustrator-input-sublabel\">Visual Description (Style / Appearance):</label>\n <textarea\n class=\"rtsee-illustrator-card-textarea\"\n rows=\"2\"\n [(ngModel)]=\"img.visualDescription\"\n placeholder=\"Key visual features, colors, clothing, texture, lighting...\"\n ></textarea>\n </div>\n <div class=\"rtsee-illustrator-input-group\">\n <label class=\"rtsee-illustrator-input-sublabel\">Context / Role Description:</label>\n <textarea\n class=\"rtsee-illustrator-card-textarea\"\n rows=\"2\"\n [(ngModel)]=\"img.description\"\n placeholder=\"Context or lore in this fairy tale scene...\"\n ></textarea>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Generation Error Banner -->\n @if (illustrator.generationError) {\n <div class=\"rtsee-illustrator-error-banner\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span class=\"rtsee-illustrator-error-text\">{{ illustrator.generationError }}</span>\n <button type=\"button\" class=\"rtsee-illustrator-error-close\" (click)=\"illustrator.generationError = null\" aria-label=\"Dismiss error\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n }\n\n <!-- Reviewing Generated Image Mode -->\n @if (illustrator.reviewingGeneratedImage && illustrator.currentGeneratedImageUrl) {\n <div class=\"rtsee-illustrator-review-panel\">\n <div class=\"rtsee-illustrator-review-header\">\n <div class=\"rtsee-illustrator-review-title\">\n <span class=\"rtsee-illustrator-review-badge\">\n <i class=\"pi pi-sparkles\"></i> Reviewing Generated Image\n </span>\n <span class=\"rtsee-illustrator-review-sub\">Review the result, request iterative modifications, or discard.</span>\n </div>\n <div class=\"rtsee-illustrator-review-quick-actions\">\n <p-button\n label=\"Accept & Keep\"\n icon=\"pi pi-check\"\n severity=\"success\"\n (click)=\"acceptGeneratedImage()\"\n />\n <p-button\n label=\"Discard\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n (click)=\"discardGeneratedImage()\"\n />\n </div>\n </div>\n\n <!-- Image Preview -->\n <div class=\"rtsee-illustrator-preview-box\">\n <img [src]=\"illustrator.currentGeneratedImageUrl\" alt=\"Generated fairy tale illustration\" class=\"rtsee-illustrator-preview-img\" />\n <a [href]=\"illustrator.currentGeneratedImageUrl\" target=\"_blank\" rel=\"noopener\" class=\"rtsee-illustrator-preview-zoom-btn\" title=\"Open full image in new tab\">\n <i class=\"pi pi-external-link\"></i> Full View\n </a>\n </div>\n\n <!-- Iteration Modification Controls -->\n <div class=\"rtsee-illustrator-iteration-box\">\n <div class=\"rtsee-illustrator-iteration-info\">\n <span class=\"rtsee-illustrator-iteration-tag\">\n <i class=\"pi pi-refresh\"></i> Request Modifications & Iterate\n </span>\n <span class=\"rtsee-illustrator-iteration-context-hint\">\n <i class=\"pi pi-info-circle\"></i>\n All active context references ({{ illustrator.activeContextImages.length }}) are sent to NanoBanana alongside this base picture.\n </span>\n </div>\n\n <textarea\n class=\"rtsee-illustrator-prompt-textarea rtsee-illustrator-prompt-textarea--iteration\"\n rows=\"3\"\n [(ngModel)]=\"illustrator.iterationPrompt\"\n placeholder=\"Describe modifications to apply to this picture (e.g. 'Make the wizard's cloak sapphire blue with silver runes, add glowing fireflies, soften the background trees')...\"\n (keydown.meta.enter)=\"submitIteration()\"\n (keydown.control.enter)=\"submitIteration()\"\n ></textarea>\n\n <div class=\"rtsee-illustrator-prompt-footer\">\n <span class=\"rtsee-illustrator-tip\">\n <i class=\"pi pi-info-circle\"></i>\n Press <strong>⌘+Enter</strong> to iterate on this picture.\n </span>\n\n <div class=\"rtsee-illustrator-actions\">\n <p-button\n label=\"Discard\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n (click)=\"discardGeneratedImage()\"\n />\n <p-button\n label=\"Iterate & Regenerate\"\n icon=\"pi pi-refresh\"\n [loading]=\"illustrator.submitting\"\n [disabled]=\"!illustrator.canSubmit\"\n (click)=\"submitIteration()\"\n />\n </div>\n </div>\n </div>\n </div>\n } @else {\n <!-- Prompt Input & Submit Action (Standard Mode) -->\n <div class=\"rtsee-illustrator-prompt-section\">\n <div class=\"rtsee-illustrator-prompt-box\">\n <textarea\n class=\"rtsee-illustrator-prompt-textarea\"\n rows=\"3\"\n [(ngModel)]=\"illustrator.prompt\"\n placeholder=\"Describe the fairy tale illustration to generate (e.g. 'A cozy cottage tucked deep inside the emerald moss woods, magical amber lanterns glowing warmly from the windows, soft fireflies in the air')...\"\n (keydown.meta.enter)=\"submitPrompt()\"\n (keydown.control.enter)=\"submitPrompt()\"\n ></textarea>\n\n <div class=\"rtsee-illustrator-prompt-footer\">\n <span class=\"rtsee-illustrator-tip\">\n <i class=\"pi pi-info-circle\"></i>\n Press <strong>⌘+Enter</strong> to submit. Context characters, artifacts, locations & slides are sent to NanoBanana.\n </span>\n\n <div class=\"rtsee-illustrator-actions\">\n <p-button\n label=\"Generate Illustration\"\n icon=\"pi pi-sparkles\"\n [loading]=\"illustrator.submitting\"\n [disabled]=\"!illustrator.canSubmit\"\n (click)=\"submitPrompt()\"\n />\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n</div>\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { NgClass } from \"@angular/common\";\nimport { IRTSeeStorySlide, RTSeeIllustratorEvents } from \"@rtsee/common\";\nimport {\n RTSeeInteractiveStoryEditorVm,\n RTSeeStoryEditorSection,\n RTSeeIllustrator,\n} from \"@rtsee/presentation\";\nimport { Button } from \"primeng/button\";\nimport { FormComponent } from \"../../../common/components/forms/form/form.component\";\nimport { ManageSlideComponent } from \"../manage/manage-story/manage-slide/manage-slide.component\";\nimport { StoryElementsSectionComponent } from \"./story-elements-section/story-elements-section.component\";\nimport { IllustratorComponent } from \"../illustrator/illustrator.component\";\nimport { sanitizeImageUrl } from \"@rtsee/utilities-ui\";\n\n/**\n * Interactive story editor: collapsible sections of thumbnails (details, characters,\n * artifacts, locations, slides, author) that expand into the edit forms.\n * Rendering only, the orchestration lives in RTSeeInteractiveStoryEditorVm.\n */\n@Component({\n selector: \"rtsee-interactive-story-editor\",\n standalone: true,\n imports: [\n NgClass,\n Button,\n FormComponent,\n ManageSlideComponent,\n StoryElementsSectionComponent,\n IllustratorComponent,\n ],\n templateUrl: \"./interactive-story-editor.component.html\",\n})\nexport class InteractiveStoryEditorComponent implements OnInit, OnDestroy {\n @Input({ required: true }) vm!: RTSeeInteractiveStoryEditorVm;\n /** set to false when the vm is initialized by the host */\n @Input() autoInit: boolean = true;\n\n readonly sections: typeof RTSeeStoryEditorSection = RTSeeStoryEditorSection;\n readonly illustrator: RTSeeIllustrator = new RTSeeIllustrator();\n readonly slideUpdatingIds: Set<string> = new Set();\n\n private onIllustratorChanged = (): void => {\n this.cdr.markForCheck();\n };\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (this.autoInit && !this.vm.story) {\n void this.vm.init();\n }\n this.illustrator.on('changed', this.onIllustratorChanged);\n }\n\n ngOnDestroy(): void {\n this.illustrator.off('changed', this.onIllustratorChanged);\n this.vm.collapseSlide();\n this.illustrator.destroy();\n }\n\n isSlideUpdating(id: string): boolean {\n return this.slideUpdatingIds.has(id);\n }\n\n async applyReviewedImageToSlide(event: Event, slide: IRTSeeStorySlide): Promise<void> {\n event.stopPropagation();\n event.preventDefault();\n const imageUrl = sanitizeImageUrl(this.illustrator.currentGeneratedImageUrl);\n if (!imageUrl || !slide.id) return;\n\n this.slideUpdatingIds.add(slide.id);\n this.cdr.markForCheck();\n\n try {\n await this.vm.updateSlideImage(slide, imageUrl);\n\n // Reset illustrator state and UI\n this.illustrator.resetState();\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(RTSeeIllustratorEvents.RESET_STATE));\n }\n } catch (e) {\n console.error('Failed to apply image to slide:', e);\n } finally {\n this.slideUpdatingIds.delete(slide.id);\n this.cdr.markForCheck();\n }\n }\n\n submitDetails(): void {\n this.vm.detailsForm?.submit();\n }\n\n submitAuthor(): void {\n this.vm.authorForm?.submit();\n }\n\n submitNewAuthor(): void {\n this.vm.newAuthorForm?.submit();\n }\n\n addSlideToContext(event: Event, slide: IRTSeeStorySlide): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined') {\n const anySlide = slide as any;\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: slide.id,\n title: `Slide ${slide.slideNumber}: ${slide.name || 'Story Scene'}`,\n imageUrl: slide.imageUrl || '',\n visualDescription: anySlide.visualDescription || slide.text || '',\n description: anySlide.description || slide.text || '',\n sourceType: 'slide',\n },\n })\n );\n }\n }\n\n addSlideEntitiesToContext(event: Event, slide: IRTSeeStorySlide): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window === 'undefined') {\n return;\n }\n\n // 1. Characters: populate all related characters from story level\n const slideCharacters = slide.characters || [];\n const storyChars =\n this.vm.story?.characters ||\n this.vm.charactersEditor?.items ||\n [];\n\n for (const charRef of slideCharacters) {\n const fullChar = storyChars.find(\n (c) => c.id === charRef.id || c.name?.toLowerCase() === charRef.name?.toLowerCase()\n );\n if (fullChar) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullChar.id,\n title: fullChar.name || 'Character',\n imageUrl: fullChar.imageUrl || '',\n visualDescription: fullChar.visualDescription || fullChar.description || '',\n description: fullChar.description || '',\n sourceType: 'character',\n },\n })\n );\n }\n }\n\n if (slide.charactersIds) {\n for (const charId of slide.charactersIds) {\n if (!slideCharacters.some((c) => c.id === charId)) {\n const fullChar = storyChars.find((c) => c.id === charId);\n if (fullChar) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullChar.id,\n title: fullChar.name || 'Character',\n imageUrl: fullChar.imageUrl || '',\n visualDescription: fullChar.visualDescription || fullChar.description || '',\n description: fullChar.description || '',\n sourceType: 'character',\n },\n })\n );\n }\n }\n }\n }\n\n // 2. Locations: populate related location from story level\n const slideLocations = slide.locations || [];\n const storyLocs =\n this.vm.story?.locations ||\n this.vm.locationsEditor?.items ||\n [];\n\n for (const locRef of slideLocations) {\n const fullLoc = storyLocs.find(\n (l) => l.id === locRef.id || l.name?.toLowerCase() === locRef.name?.toLowerCase()\n );\n if (fullLoc) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullLoc.id,\n title: fullLoc.name || 'Location',\n imageUrl: fullLoc.imageUrl || '',\n visualDescription: fullLoc.visualDescription || fullLoc.description || '',\n description: fullLoc.description || '',\n sourceType: 'location',\n },\n })\n );\n }\n }\n\n if (slide.locationId && !slideLocations.some((l) => l.id === slide.locationId)) {\n const fullLoc = storyLocs.find((l) => l.id === slide.locationId);\n if (fullLoc) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullLoc.id,\n title: fullLoc.name || 'Location',\n imageUrl: fullLoc.imageUrl || '',\n visualDescription: fullLoc.visualDescription || fullLoc.description || '',\n description: fullLoc.description || '',\n sourceType: 'location',\n },\n })\n );\n }\n }\n\n // 3. Artifacts: populate related artifacts from story level\n const slideArtifacts = slide.artifacts || [];\n const storyArts =\n this.vm.story?.artifacts ||\n this.vm.artifactsEditor?.items ||\n [];\n\n for (const artRef of slideArtifacts) {\n const fullArt = storyArts.find(\n (a) => a.id === artRef.id || a.name?.toLowerCase() === artRef.name?.toLowerCase()\n );\n if (fullArt) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullArt.id,\n title: fullArt.name || 'Artifact',\n imageUrl: fullArt.imageUrl || '',\n visualDescription: fullArt.visualDescription || fullArt.description || '',\n description: fullArt.description || '',\n sourceType: 'artifact',\n },\n })\n );\n }\n }\n\n if (slide.artifactsIds) {\n for (const artId of slide.artifactsIds) {\n if (!slideArtifacts.some((a) => a.id === artId)) {\n const fullArt = storyArts.find((a) => a.id === artId);\n if (fullArt) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: fullArt.id,\n title: fullArt.name || 'Artifact',\n imageUrl: fullArt.imageUrl || '',\n visualDescription: fullArt.visualDescription || fullArt.description || '',\n description: fullArt.description || '',\n sourceType: 'artifact',\n },\n })\n );\n }\n }\n }\n }\n\n // 4. Illustration prompt: populate prompt box with slide illustrationDescription\n const illustrationDesc =\n slide.illustrationDescription ?? (slide as any).illustrationDescription;\n if (typeof illustrationDesc === 'string' && illustrationDesc.trim()) {\n this.illustrator.setPrompt(illustrationDesc.trim());\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.SET_PROMPT, {\n detail: { prompt: illustrationDesc.trim() },\n })\n );\n }\n }\n\n addAuthorToContext(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n if (typeof window !== 'undefined' && this.vm.author) {\n window.dispatchEvent(\n new CustomEvent(RTSeeIllustratorEvents.ADD_IMAGE_TO_CONTEXT, {\n detail: {\n id: this.vm.author.id,\n title: `Author: ${this.vm.author.name || ''}`,\n imageUrl: this.vm.author.imageUrl || '',\n visualDescription: this.vm.author.description || '',\n description: this.vm.author.description || '',\n sourceType: 'author',\n },\n })\n );\n }\n }\n\n trackSlide(index: number, slide: IRTSeeStorySlide): string {\n return slide.id || `slide-${index}`;\n }\n}\n\n","<div class=\"rtsee-interactive-story-editor\" [style.padding-bottom]=\"illustrator.expanded ? '460px' : '72px'\">\n @if (vm.initInProgress) {\n <div class=\"rtsee-ise-loading\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n <span>Loading story…</span>\n </div>\n } @else if (vm.initError) {\n <div class=\"rtsee-ise-error\">{{ vm.initError }}</div>\n } @else if (vm.story) {\n <header class=\"rtsee-ise-header\">\n <span class=\"rtsee-ise-eyebrow\">{{ vm.isNewStory ? 'New story' : 'Story editor' }}</span>\n <h2 class=\"rtsee-ise-heading\">{{ vm.story.name || 'Untitled story' }}</h2>\n </header>\n\n <!-- 1. Details -->\n <section class=\"rtsee-ise-section\" [ngClass]=\"{ 'rtsee-ise-section--collapsed': vm.isCollapsed(sections.details) }\">\n <header class=\"rtsee-ise-section-header\">\n <button type=\"button\" class=\"rtsee-ise-section-toggle\" id=\"rtsee-ise-toggle-details\"\n [attr.aria-expanded]=\"!vm.isCollapsed(sections.details)\"\n (click)=\"vm.toggleSection(sections.details)\">\n <i class=\"rtsee-ise-section-icon pi pi-book\"></i>\n <h3 class=\"rtsee-ise-section-title\">Story details</h3>\n <i class=\"pi pi-chevron-down rtsee-ise-chevron\"></i>\n </button>\n </header>\n\n @if (!vm.isCollapsed(sections.details)) {\n <div class=\"rtsee-ise-section-body\">\n <button type=\"button\" class=\"rtsee-ise-details-card\" id=\"rtsee-ise-details-card\"\n [ngClass]=\"{ 'rtsee-ise-thumb--active': vm.detailsExpanded }\"\n (click)=\"vm.toggleDetails()\">\n <div class=\"rtsee-ise-details-image\">\n @if (vm.story.imageUrl) {\n <img [src]=\"vm.story.imageUrl\" [alt]=\"vm.story.name\" />\n } @else {\n <i class=\"pi pi-image\"></i>\n }\n </div>\n <div class=\"rtsee-ise-details-body\">\n <span class=\"rtsee-ise-details-name\">{{ vm.story.name || 'Untitled story' }}</span>\n <p class=\"rtsee-ise-details-description\">{{ vm.story.getTruncatedDescription(220) || 'No description yet' }}</p>\n @if (vm.story.tags.length) {\n <div class=\"rtsee-ise-chips\">\n @for (tag of vm.story.tags; track tag.id) {\n <span class=\"rtsee-ise-chip\">{{ tag.name }}</span>\n }\n </div>\n }\n </div>\n <i class=\"pi pi-pencil rtsee-ise-details-edit\"></i>\n </button>\n\n @if (vm.detailsExpanded && vm.detailsForm) {\n <div class=\"rtsee-ise-expanded rtsee-form-container\">\n @if (vm.detailsError) {\n <div class=\"rtsee-ise-error\">{{ vm.detailsError }}</div>\n }\n <rtsee-form [form]=\"vm.detailsForm\" (formSubmit)=\"submitDetails()\">\n <div class=\"rtsee-ise-actions\">\n <p-button type=\"submit\" [label]=\"vm.isNewStory ? 'Create story' : 'Save'\"\n [loading]=\"vm.detailsSaveInProgress\"\n [disabled]=\"vm.detailsSaveInProgress\" />\n <p-button label=\"Cancel\" severity=\"secondary\"\n (click)=\"vm.collapseDetails()\"\n [disabled]=\"vm.detailsSaveInProgress\" />\n </div>\n </rtsee-form>\n </div>\n }\n </div>\n }\n </section>\n\n <!-- 2-4. Characters, artifacts, locations -->\n <rtsee-story-elements-section [editor]=\"vm.charactersEditor\"\n title=\"Characters\"\n icon=\"pi pi-user\"\n [illustrator]=\"illustrator\"\n [collapsed]=\"vm.isCollapsed(sections.characters)\"\n (toggled)=\"vm.toggleSection(sections.characters)\" />\n\n <rtsee-story-elements-section [editor]=\"vm.artifactsEditor\"\n title=\"Artifacts\"\n icon=\"pi pi-star\"\n [illustrator]=\"illustrator\"\n [collapsed]=\"vm.isCollapsed(sections.artifacts)\"\n (toggled)=\"vm.toggleSection(sections.artifacts)\" />\n\n <rtsee-story-elements-section [editor]=\"vm.locationsEditor\"\n title=\"Locations\"\n icon=\"pi pi-map-marker\"\n [illustrator]=\"illustrator\"\n [collapsed]=\"vm.isCollapsed(sections.locations)\"\n (toggled)=\"vm.toggleSection(sections.locations)\" />\n\n <!-- 5. Slides -->\n <section class=\"rtsee-ise-section\" [ngClass]=\"{ 'rtsee-ise-section--collapsed': vm.isCollapsed(sections.slides) }\">\n <header class=\"rtsee-ise-section-header\">\n <button type=\"button\" class=\"rtsee-ise-section-toggle\" id=\"rtsee-ise-toggle-slides\"\n [attr.aria-expanded]=\"!vm.isCollapsed(sections.slides)\"\n (click)=\"vm.toggleSection(sections.slides)\">\n <i class=\"rtsee-ise-section-icon pi pi-images\"></i>\n <h3 class=\"rtsee-ise-section-title\">Slides</h3>\n <span class=\"rtsee-ise-section-count\">{{ vm.slides.length }}</span>\n <i class=\"pi pi-chevron-down rtsee-ise-chevron\"></i>\n </button>\n </header>\n\n @if (!vm.isCollapsed(sections.slides)) {\n <div class=\"rtsee-ise-section-body\">\n @if (vm.isNewStory) {\n <p class=\"rtsee-ise-hint\">Save the story details first to add slides.</p>\n } @else {\n <div class=\"rtsee-ise-slides-strip\">\n @for (slide of vm.slides; track trackSlide($index, slide)) {\n <div class=\"rtsee-ise-slide-thumb-wrapper\" style=\"position: relative; display: inline-flex;\">\n <button type=\"button\" class=\"rtsee-ise-slide-thumb\"\n [id]=\"'rtsee-ise-slide-' + slide.id\"\n [ngClass]=\"{ 'rtsee-ise-thumb--active': vm.isSlideExpanded(slide) }\"\n [attr.aria-label]=\"'Slide ' + slide.slideNumber\"\n (click)=\"vm.expandSlide(slide)\">\n @if (slide.imageUrl) {\n <img [src]=\"slide.imageUrl\" [alt]=\"slide.name\" loading=\"lazy\" />\n } @else {\n <i class=\"pi pi-image\"></i>\n }\n <span class=\"rtsee-ise-slide-number\">{{ slide.slideNumber }}</span>\n </button>\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator rtsee-ise-btn-add-context\"\n style=\"position: absolute; top: 4px; left: 4px;\"\n title=\"Add Slide {{ slide.slideNumber }} context (characters, locations, artifacts) to Illustrator\"\n (click)=\"addSlideEntitiesToContext($event, slide)\">\n <i class=\"pi pi-plus\"></i>\n </button>\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator\"\n style=\"position: absolute; top: 4px; right: 4px;\"\n title=\"Add Slide {{ slide.slideNumber }} to Illustrator context\"\n (click)=\"addSlideToContext($event, slide)\">\n <i class=\"pi pi-palette\"></i>\n <span>+🎨</span>\n </button>\n @if (illustrator.reviewingGeneratedImage && illustrator.currentGeneratedImageUrl) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-quick-apply\"\n style=\"position: absolute; bottom: 4px; right: 4px;\"\n [disabled]=\"isSlideUpdating(slide.id)\"\n [title]=\"'Apply reviewed image to Slide ' + slide.slideNumber\"\n (click)=\"applyReviewedImageToSlide($event, slide)\">\n @if (isSlideUpdating(slide.id)) {\n <i class=\"pi pi-spin pi-spinner\"></i>\n } @else {\n <i class=\"pi pi-plus\"></i>\n }\n </button>\n }\n </div>\n }\n <button type=\"button\" class=\"rtsee-ise-slide-thumb rtsee-ise-slide-thumb--add\"\n id=\"rtsee-ise-add-slide\"\n [disabled]=\"vm.slidesLoadInProgress\"\n (click)=\"vm.expandNewSlide()\">\n <i class=\"pi pi-plus\"></i>\n </button>\n </div>\n\n @if (vm.activeSlide) {\n <div class=\"rtsee-ise-expanded\">\n <rtsee-manage-slide [manageSlide]=\"vm.activeSlide\" />\n </div>\n }\n }\n </div>\n }\n </section>\n\n <!-- 6. Author -->\n <section class=\"rtsee-ise-section\" [ngClass]=\"{ 'rtsee-ise-section--collapsed': vm.isCollapsed(sections.author) }\">\n <header class=\"rtsee-ise-section-header\">\n <button type=\"button\" class=\"rtsee-ise-section-toggle\" id=\"rtsee-ise-toggle-author\"\n [attr.aria-expanded]=\"!vm.isCollapsed(sections.author)\"\n (click)=\"vm.toggleSection(sections.author)\">\n <i class=\"rtsee-ise-section-icon pi pi-pen-to-square\"></i>\n <h3 class=\"rtsee-ise-section-title\">Author</h3>\n <i class=\"pi pi-chevron-down rtsee-ise-chevron\"></i>\n </button>\n </header>\n\n @if (!vm.isCollapsed(sections.author)) {\n <div class=\"rtsee-ise-section-body\">\n <button type=\"button\" class=\"rtsee-ise-author-card\" id=\"rtsee-ise-author-card\"\n [ngClass]=\"{ 'rtsee-ise-thumb--active': vm.authorExpanded }\"\n (click)=\"vm.toggleAuthor()\">\n <div class=\"rtsee-ise-avatar\">\n @if (vm.author?.imageUrl) {\n <img [src]=\"vm.author?.imageUrl\" [alt]=\"vm.author?.name\" />\n } @else {\n <i class=\"pi pi-user\"></i>\n }\n </div>\n <div class=\"rtsee-ise-author-body\">\n <span class=\"rtsee-ise-thumb-name\">{{ vm.author?.name || 'No author assigned' }}</span>\n <span class=\"rtsee-ise-thumb-description\">{{ vm.author?.description || 'Click to pick or create an author' }}</span>\n </div>\n @if (vm.author) {\n <button type=\"button\"\n class=\"rtsee-ise-btn-add-illustrator\"\n title=\"Add Author to Illustrator context\"\n (click)=\"addAuthorToContext($event)\">\n <i class=\"pi pi-palette\"></i>\n <span>+🎨</span>\n </button>\n }\n <i class=\"pi pi-pencil rtsee-ise-details-edit\"></i>\n </button>\n\n @if (vm.authorExpanded) {\n <div class=\"rtsee-ise-expanded rtsee-form-container\">\n @if (vm.authorError) {\n <div class=\"rtsee-ise-error\">{{ vm.authorError }}</div>\n }\n\n @if (vm.newAuthor && vm.newAuthorForm) {\n <h4 class=\"rtsee-ise-subheading\">New author</h4>\n <rtsee-form [form]=\"vm.newAuthorForm\" (formSubmit)=\"submitNewAuthor()\">\n <div class=\"rtsee-ise-actions\">\n <p-button type=\"submit\" label=\"Create & assign\"\n [loading]=\"vm.authorSaveInProgress\"\n [disabled]=\"vm.authorSaveInProgress\" />\n <p-button label=\"Back\" severity=\"secondary\"\n (click)=\"vm.cancelNewAuthor()\"\n [disabled]=\"vm.authorSaveInProgress\" />\n </div>\n </rtsee-form>\n } @else if (vm.authorForm) {\n <rtsee-form [form]=\"vm.authorForm\" (formSubmit)=\"submitAuthor()\">\n <div class=\"rtsee-ise-actions\">\n <p-button type=\"submit\" label=\"Assign\"\n [loading]=\"vm.authorSaveInProgress\"\n [disabled]=\"vm.authorSaveInProgress\" />\n <p-button label=\"New author\" icon=\"pi pi-plus\" severity=\"secondary\"\n (click)=\"vm.startNewAuthor()\"\n [disabled]=\"vm.authorSaveInProgress\" />\n @if (vm.author) {\n <span class=\"rtsee-ise-actions-spacer\"></span>\n <p-button label=\"Clear\" icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\"\n (click)=\"vm.assignAuthor(null)\"\n [disabled]=\"vm.authorSaveInProgress\" />\n }\n </div>\n </rtsee-form>\n }\n </div>\n }\n </div>\n }\n </section>\n\n <!-- 7. NanoBanana Illustrator Overlay -->\n <rtsee-illustrator [illustrator]=\"illustrator\" />\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeManageStories } from '@rtsee/presentation';\nimport { ManageStoryComponent } from '../manage-story/manage-story.component';\nimport { InteractiveStoryEditorComponent } from '../../interactive-story-editor/interactive-story-editor.component';\nimport { Button } from 'primeng/button';\nimport { OrderList } from 'primeng/orderlist';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'rtsee-manage-stories',\n imports: [ManageStoryComponent, InteractiveStoryEditorComponent, Button, OrderList, NgClass],\n templateUrl: './manage-stories.component.html',\n})\nexport class ManageStoriesComponent implements OnInit {\n @Input() manageStories!: RTSeeManageStories;\n\n ngOnInit(): void {\n this.manageStories.init();\n }\n}\n","<div class=\"rtsee-manage-stories\">\n <div class=\"rtsee-manage-stories-header\">\n @if (!manageStories.selectedStory && !manageStories.interactiveStoryEditor) {\n <p-button (click)=\"manageStories.selectNewStory()\"\n label=\"Create A New Story\"\n ></p-button>\n }\n </div>\n @if (manageStories.selectedStory) {\n <div class=\"rtsee-manage-story-container\">\n <rtsee-manage-story [manageStory]=\"manageStories.selectedStory\"\n ></rtsee-manage-story>\n </div>\n }\n @if (manageStories.interactiveStoryEditor) {\n <div class=\"rtsee-manage-story-container\">\n <div style=\"margin-bottom: 1rem;\">\n <p-button icon=\"pi pi-arrow-left\" label=\"Back to Stories\" (click)=\"manageStories.interactiveStoryEditor = null\" [text]=\"true\"></p-button>\n </div>\n <rtsee-interactive-story-editor [vm]=\"manageStories.interactiveStoryEditor\"></rtsee-interactive-story-editor>\n </div>\n }\n @if (!manageStories.selectedStory && !manageStories.interactiveStoryEditor) {\n <div class=\"rtsee-manage-stories-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageStories.stories\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n [scrollHeight]=\"'40rem'\"\n class=\"rtsee-ordered-list-inner\"\n (onReorder)=\"manageStories.onReorder()\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <div class=\"rtsee-presentation-manage-stories-list-item rtsee-ordered-list-item\">\n <img\n [src]=\"option.imageUrl\"\n [alt]=\"'slide_image'\"\n [style.width]=\"'60px'\"\n class=\"rtsee-presentation-manage-stories-list-item-image rtsee-ordered-list-item-image\"\n />\n <div class=\"rtsee-presentation-manage-stories-list-item-info rtsee-ordered-list-item-info\">\n <span [ngClass]=\"{\n 'text-sm': true,\n 'text-surface-500': !selected,\n 'dark:text-surface-400': !selected,\n 'text-inherit': selected,\n }\"\n >{{ option.name }}</span>\n <div class=\"rtsee-ordered-list-item-info-buttons\">\n <p-button label=\"Edit\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectStory(option.id)\"\n ></p-button>\n <p-button label=\"iEdit\"\n [severity]=\"'info'\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectInteractiveStory(option.id)\"\n ></p-button>\n <p-button label=\"Delete\"\n [severity]=\"'warn'\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.selectStory(option.id)\"\n ></p-button>\n <p-button label=\"Clone\"\n [severity]=\"'secondary'\"\n class=\"rtsee-ordered-list-item-info-button\"\n (click)=\"manageStories.cloneStory(option.id)\"\n ></p-button>\n </div>\n </div>\n </div>\n </ng-template>\n </p-orderList>\n </div>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { Textarea } from 'primeng/textarea';\nimport { TypedReactiveForm } from '../../../rtsee-auth/types/auth-form.type';\nimport { RTSeeManageStoryCategory } from '@rtsee/presentation';\n\nexport type RTSeeCategoryForm = {\n name: string | null;\n description: string | null;\n};\n\n@Component({\n selector: 'rtsee-manage-category',\n imports: [\n Button,\n FloatLabel,\n FormsModule,\n InputGroup,\n InputText,\n Message,\n Textarea,\n ReactiveFormsModule,\n ],\n templateUrl: './manage-category.component.html',\n})\nexport class ManageCategoryComponent implements OnInit {\n categoryForm: FormGroup;\n\n @Input() manageCategory!: RTSeeManageStoryCategory;\n\n constructor(private formBuilder: FormBuilder) {\n this.categoryForm = this.formBuilder.group<\n TypedReactiveForm<RTSeeCategoryForm>\n >({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n });\n }\n\n ngOnInit() {\n this.nameField.setValue(this.manageCategory.category.name);\n this.descriptionField.setValue(\n this.manageCategory.category.description || '',\n );\n }\n\n submit() {\n if (this.categoryForm.valid) {\n void this.manageCategory.save({\n name: this.nameField.value,\n description: this.descriptionField.value,\n });\n } else {\n this.categoryForm.markAsTouched(); // this does not work after switching to \"nonNullable\" form fields\n }\n }\n\n get nameField(): FormControl<string> {\n return this.categoryForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.categoryForm.get('description') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-manage-story-category\">\n <div class=\"rtsee-manage-category-info rtsee-form-container\">\n <form class=\"rtsee-story-form rtsee-form\"\n [formGroup]=\"categoryForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"sign-up-email\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageCategory.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageCategory.cancel()\"\n [disabled]=\"manageCategory.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeManageStoryCategories } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { ManageCategoryComponent } from '../manage-category/manage-category.component';\n\n@Component({\n selector: 'rtsee-manage-categories',\n imports: [Button, ManageCategoryComponent],\n templateUrl: './manage-categories.component.html',\n})\nexport class ManageCategoriesComponent implements OnInit {\n @Input() manageCategories!: RTSeeManageStoryCategories;\n\n ngOnInit(): void {\n this.manageCategories.init();\n }\n}\n","<div class=\"rtsee-manage-stories-categories\">\n <div class=\"rtsee-manage-stories-categories-header\">\n @if (!manageCategories.selectedCategory) {\n <p-button (click)=\"manageCategories.selectNewCategory()\"\n label=\"Create A New Category\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-categories-body\">\n @if (manageCategories.selectedCategory) {\n <rtsee-manage-category [manageCategory]=\"manageCategories.selectedCategory\"\n ></rtsee-manage-category>\n }\n @if (!manageCategories.selectedCategory) {\n @for (category of manageCategories.categories; track category.id) {\n <p (click)=\"manageCategories.selectCategory(category.id)\">{{category.name}}</p>\n }\n }\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeManageStoryLabel } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { Textarea } from 'primeng/textarea';\nimport { TypedReactiveForm } from '../../../rtsee-auth/types/auth-form.type';\nimport { ColorPicker } from 'primeng/colorpicker';\n\nexport type RTSeeLabelForm = {\n name: string | null;\n description: string | null;\n symbol: string | null;\n};\n\n@Component({\n selector: 'rtsee-manage-label',\n imports: [\n Button,\n FloatLabel,\n FormsModule,\n InputGroup,\n InputText,\n Message,\n Textarea,\n ReactiveFormsModule,\n ColorPicker,\n ],\n templateUrl: './manage-label.component.html',\n})\nexport class ManageLabelComponent implements OnInit {\n labelForm: FormGroup;\n\n @Input() manageLabel!: RTSeeManageStoryLabel;\n constructor(private formBuilder: FormBuilder) {\n this.labelForm = this.formBuilder.group<TypedReactiveForm<RTSeeLabelForm>>({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n symbol: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(1),\n Validators.maxLength(244),\n ],\n }),\n });\n }\n\n ngOnInit() {\n this.nameField.setValue(this.manageLabel.label.name);\n this.descriptionField.setValue(this.manageLabel.label.description || '');\n }\n\n submit() {\n if (this.labelForm.valid) {\n void this.manageLabel.save({\n name: this.nameField.value,\n description: this.descriptionField.value,\n color: '',\n symbol: this.symbolField.value,\n });\n } else {\n this.labelForm.markAsTouched(); // this does not work after switching to \"nonNullable\" form fields\n }\n }\n\n get nameField(): FormControl<string> {\n return this.labelForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.labelForm.get('description') as FormControl<string>;\n }\n\n get symbolField(): FormControl<string> {\n return this.labelForm.get('symbol') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-manage-story-label\">\n <div class=\"rtsee-manage-story-label-info rtsee-form-container\">\n <form class=\"rtsee-story-label-form rtsee-form\"\n [formGroup]=\"labelForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-label-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-label-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-label-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-symbol-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"symbolField\"\n [class.p-invalid]=\"symbolField.invalid && symbolField.touched\"\n />\n <label for=\"rtsee-story-label-symbol-field\">Symbol</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (symbolField.hasError('required') && symbolField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Symbol is required, pick a smile, dummy</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-colorPicker [(ngModel)]=\"manageLabel.label.color\"/>\n </div>\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageLabel.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageLabel.cancel()\"\n [disabled]=\"manageLabel.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { RTSeeManageStoryLabels } from '@rtsee/presentation';\nimport { ManageLabelComponent } from '../manage-label/manage-label.component';\n\n@Component({\n selector: 'rtsee-manage-labels',\n imports: [Button, ManageLabelComponent],\n templateUrl: './manage-labels.component.html',\n})\nexport class ManageLabelsComponent implements OnInit {\n @Input() manageLabels!: RTSeeManageStoryLabels;\n\n ngOnInit(): void {\n this.manageLabels.init();\n }\n}\n","<div class=\"rtsee-manage-stories-labels\">\n <div class=\"rtsee-manage-stories-labels-header\">\n @if (!manageLabels.selectedLabel) {\n <p-button (click)=\"manageLabels.selectNewLabel()\"\n label=\"Create A New Label\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-labels-body\">\n @if (manageLabels.selectedLabel) {\n <rtsee-manage-label [manageLabel]=\"manageLabels.selectedLabel\"\n ></rtsee-manage-label>\n }\n @if (!manageLabels.selectedLabel) {\n @for (label of manageLabels.labels; track label.id) {\n <p (click)=\"manageLabels.selectLabel(label.id)\">{{label.name}}</p>\n }\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { TypedReactiveForm } from '../../../rtsee-auth/types/auth-form.type';\nimport { RTSeeManageStoryTopic } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { ColorPicker } from 'primeng/colorpicker';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { Textarea } from 'primeng/textarea';\nimport { AutocompleteComponent } from '../../../../common/components/autocomplete/autocomplete.component';\nimport { OrderList } from 'primeng/orderlist';\n\nexport type RTSeeTopicForm = {\n name: string | null;\n key: string | null;\n description: string | null;\n};\n\n@Component({\n selector: 'rtsee-manage-topic',\n imports: [\n Button,\n FloatLabel,\n InputGroup,\n InputText,\n Message,\n ReactiveFormsModule,\n Textarea,\n AutocompleteComponent,\n OrderList,\n ],\n templateUrl: './manage-topic.component.html',\n})\nexport class ManageTopicComponent {\n topicForm: FormGroup;\n\n @Input() manageTopic!: RTSeeManageStoryTopic;\n constructor(private formBuilder: FormBuilder) {\n this.topicForm = this.formBuilder.group<TypedReactiveForm<RTSeeTopicForm>>({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n key: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(1),\n Validators.maxLength(244),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n });\n }\n\n ngOnInit() {\n this.nameField.setValue(this.manageTopic.topic.name);\n this.descriptionField.setValue(this.manageTopic.topic.description || '');\n this.keyField.setValue(this.manageTopic.topic.key || '');\n }\n\n submit() {\n if (this.topicForm.valid) {\n void this.manageTopic.save({\n name: this.nameField.value,\n description: this.descriptionField.value,\n key: this.keyField.value,\n });\n } else {\n this.topicForm.markAsTouched(); // this does not work after switching to \"nonNullable\" form fields\n }\n }\n\n get nameField(): FormControl<string> {\n return this.topicForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.topicForm.get('description') as FormControl<string>;\n }\n\n get keyField(): FormControl<string> {\n return this.topicForm.get('key') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-manage-story-topic\">\n <div class=\"rtsee-manage-story-topic-info rtsee-form-container\">\n <form class=\"rtsee-story-topic-form rtsee-form\"\n [formGroup]=\"topicForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-topic-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-topic-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-topic-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-topic-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-topic-key-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"keyField\"\n [class.p-invalid]=\"keyField.invalid && keyField.touched\"\n />\n <label for=\"rtsee-story-topic-key-field\">Key</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (keyField.hasError('required') && keyField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Key is required, pick a smile, dummy</p-message>\n }\n </div>\n <rtsee-autocomplete [config]=\"manageTopic.categoriesMultiselect\"></rtsee-autocomplete>\n <div class=\"rtsee-manage-story-topic-categories-list rtsee-ordered-list\">\n <p-orderList [value]=\"manageTopic.topic.categories\"\n dataKey=\"id\"\n [dragdrop]=\"true\"\n [responsive]=\"true\"\n scrollHeight=\"40rem\"\n controlsPosition=\"right\"\n (onReorder)=\"manageTopic.onReorder($event)\"\n >\n <ng-template let-option let-selected=\"selected\" #item>\n <p>{{option.name}}</p>\n <p-button label=\"Delete\" (click)=\"manageTopic.removeCategory(option.id)\"></p-button>\n </ng-template>\n </p-orderList>\n </div>\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageTopic.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"manageTopic.cancel()\"\n [disabled]=\"manageTopic.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { ManageTopicComponent } from '../manage-topic/manage-topic.component';\nimport { RTSeeManageStoryTopics } from '@rtsee/presentation';\n\n@Component({\n selector: 'rtsee-manage-topics',\n imports: [Button, ManageTopicComponent],\n templateUrl: './manage-topics.component.html',\n})\nexport class ManageTopicsComponent implements OnInit {\n @Input() manageTopics!: RTSeeManageStoryTopics;\n\n ngOnInit(): void {\n this.manageTopics.init();\n }\n}\n","<div class=\"rtsee-manage-stories-topics\">\n <div class=\"rtsee-manage-stories-topics-header\">\n @if (!manageTopics.selectedTopic) {\n <p-button (click)=\"manageTopics.selectNewTopic()\"\n label=\"Create A New Topic\"\n ></p-button>\n }\n </div>\n <div class=\"rtsee-manage-stories-topics-body\">\n @if (manageTopics.selectedTopic) {\n <rtsee-manage-topic [manageTopic]=\"manageTopics.selectedTopic\"\n ></rtsee-manage-topic>\n }\n @if (!manageTopics.selectedTopic) {\n @for (topic of manageTopics.topics; track topic.id) {\n <p (click)=\"manageTopics.selectTopic(topic.id)\">{{topic.name}}</p>\n }\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { ManageStoriesComponent } from '../manage-stories/manage-stories.component';\nimport { Tab, TabList, TabPanel, TabPanels, Tabs } from 'primeng/tabs';\nimport { RTSeePresentationDashboard } from '@rtsee/presentation';\nimport { ManageCategoriesComponent } from '../manage-categories/manage-categories.component';\nimport { Button } from 'primeng/button';\nimport { Chip } from 'primeng/chip';\nimport { ManageLabelsComponent } from '../manage-labels/manage-labels.component';\nimport { ManageTopicsComponent } from '../manage-topics/manage-topics.component';\n\n@Component({\n selector: 'rtsee-presentations-dashboard',\n imports: [\n ManageStoriesComponent,\n Tabs,\n TabList,\n Tab,\n TabPanels,\n TabPanel,\n ManageCategoriesComponent,\n Button,\n Chip,\n ManageLabelsComponent,\n ManageTopicsComponent,\n ],\n templateUrl: './presentations-dashboard.component.html',\n})\nexport class PresentationsDashboardComponent {\n @Input() dashboard!: RTSeePresentationDashboard;\n}\n","<div class=\"rtsee-presentations-dashboard\">\n <div class=\"rtsee-presentations-dashboard-header\">\n <p-chip label=\"Presentation Dashboard\" />\n <p-button label=\"Close\"\n (click)=\"dashboard.onCloseDashboardClicked()\"\n class=\"rtsee-presentations-dashboard-close-btn\"\n ></p-button>\n </div>\n\n <div class=\"manage-stories-container\">\n <p-tabs lazy value=\"stories\">\n <p-tablist>\n <p-tab value=\"stories\">Stories</p-tab>\n <p-tab value=\"categories\">Categories</p-tab>\n <p-tab value=\"labels\">Labels</p-tab>\n <p-tab value=\"topics\">Topics</p-tab>\n </p-tablist>\n <p-tabpanels>\n <p-tabpanel value=\"stories\">\n <ng-template #content>\n <rtsee-manage-stories [manageStories]=\"dashboard.manageStories\"></rtsee-manage-stories>\n </ng-template>\n </p-tabpanel>\n <p-tabpanel value=\"categories\">\n <ng-template #content>\n <rtsee-manage-categories [manageCategories]=\"dashboard.manageCategories\"></rtsee-manage-categories>\n </ng-template>\n </p-tabpanel>\n <p-tabpanel value=\"labels\">\n <ng-template #content>\n <rtsee-manage-labels [manageLabels]=\"dashboard.manageLabels\"></rtsee-manage-labels>\n </ng-template>\n </p-tabpanel>\n <p-tabpanel value=\"topics\">\n <ng-template #content>\n <rtsee-manage-topics [manageTopics]=\"dashboard.manageTopics\"></rtsee-manage-topics>\n </ng-template>\n </p-tabpanel>\n </p-tabpanels>\n </p-tabs>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Slider } from 'primeng/slider';\nimport { Fieldset } from 'primeng/fieldset';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from 'primeng/button';\nimport {\n RTSeePresentationSettings,\n RTSeePresentation,\n} from '@rtsee/presentation';\nimport { Chip } from 'primeng/chip';\nimport { Message } from 'primeng/message';\nimport { Tag } from 'primeng/tag';\nimport { Listbox } from 'primeng/listbox';\nimport { COMMON_CONSTANTS } from '../../constans/common.const';\nimport { JoinCallComponent } from '../join-call/join-call.component';\n\n@Component({\n selector: 'rtsee-presentation-settings',\n imports: [\n Slider,\n Fieldset,\n FormsModule,\n Button,\n Chip,\n Message,\n Tag,\n Listbox,\n JoinCallComponent,\n ],\n templateUrl: './presentation-settings.component.html',\n})\nexport class PresentationSettingsComponent {\n @Input() public settings!: RTSeePresentationSettings;\n @Input() public presentation!: RTSeePresentation;\n protected readonly COMMON_CONSTANTS = COMMON_CONSTANTS;\n protected readonly window = window;\n}\n","<div class=\"rtsee-presentation-settings\">\n <div class=\"rtsee-presentation-settings-header\">\n <p-chip label=\"Settings\" />\n <p-button label=\"Close\"\n (click)=\"settings.collapse()\"\n class=\"rtsee-presentations-dashboard-close-btn\"\n ></p-button>\n </div>\n\n <div class=\"rtsee-presentation-rooms\">\n <p-fieldset legend=\"Rooms\">\n <p-listbox [options]=\"presentation.rooms\"\n [(ngModel)]=\"presentation.selectedRoom\"\n (onChange)=\"presentation.setActiveRoom()\"\n class=\"rtsee-presentation-settings-rooms-list\"\n >\n <ng-template #item let-room>\n <div class=\"rtsee-presentation-settings-rooms-list-item\">\n\n <img [src]=\"room.imageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\"\n class=\"rtsee-presentation-settings-rooms-list-item-image\" />\n <div>{{ room.name }}</div>\n </div>\n </ng-template>\n </p-listbox>\n @if (presentation.selectedRoom) {\n <rtsee-join-call [room]=\"presentation.selectedRoom\"\n [presentation]=\"presentation\"\n ></rtsee-join-call>\n }\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-sound-settings\">\n <p-fieldset legend=\"Volume\" class=\"rtsee-presentation-sound-settings-fieldset\">\n <div class=\"rtsee-presentation-sound-settings-inner\">\n <div class=\"rtsee-presentation-sound-settings-inner-left\">\n <p-slider [(ngModel)]=\"settings.volume\"\n (onChange)=\"settings.setVolume(settings.volume)\"\n />\n </div>\n <div class=\"rtsee-presentation-sound-settings-inner-right\">\n <p-tag severity=\"info\"\n class=\"rtsee-presentation-sound-value-label\"\n [icon]=\"settings.volume ? 'pi pi-volume-up' : 'pi pi-volume-off'\"\n [value]=\"settings.volume.toString()\"\n [rounded]=\"true\" />\n </div>\n </div>\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-font-size-settings\">\n <p-fieldset legend=\"Font Size\">\n <div class=\"rtsee-presentation-font-size-range\">\n <p-slider [(ngModel)]=\"settings.fontSizeOption\"\n (onChange)=\"settings.setFontSize(settings.fontSizeOption)\"\n [min]=\"1\"\n [max]=\"10\"\n />\n </div>\n <p-message severity=\"secondary\" class=\"rtsee-presentation-font-size-example\">\n <span [style.font-size]=\"settings.fontSize + 'rem'\">A long time ago in a galaxy far, far away...</span>\n </p-message>\n </p-fieldset>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { ChatComponent } from '../../rtsee-messenger/chat/chat.component';\nimport { IRTSeeChat } from '@rtsee/common';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RTSeeEntity } from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-entity-comments',\n imports: [ChatComponent],\n templateUrl: './rtsee-entity-comments.component.html',\n})\nexport class RtseeEntityCommentsComponent {\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: IRTSeeChat;\n @Input() entity!: RTSeeEntity;\n}\n","<div class=\"rtsee-entity-comments\">\n @if (messenger && chat) {\n <rtsee-chat [messenger]=\"messenger\"\n [chatData]=\"chat\"\n [entity]=\"entity\"\n ></rtsee-chat>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeEntity } from '@rtsee/utilities-ui';\nimport { Chip } from 'primeng/chip';\n\n@Component({\n selector: 'rtsee-entity-tags',\n imports: [Chip],\n templateUrl: './rtsee-entity-tags.component.html',\n})\nexport class RtseeEntityTagsComponent {\n @Input() entity!: RTSeeEntity;\n}\n","<div class=\"rtsee-entity-tags\">\n @if (entity && entity.tags?.length) {\n <div class=\"rtsee-entity-tags-list\">\n @for (tag of entity.tags; track tag.id) {\n <p-chip class=\"rtsee-entity-tag\">\n <span class=\"rtsee-entity-tag-right\"\n >{{tag.name}}</span>\n </p-chip>\n }\n </div>\n }\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { Textarea } from 'primeng/textarea';\nimport { RatingComponent } from '../../../common/components/rating/rating.component';\nimport { Message } from 'primeng/message';\nimport { IRatingConfigWithRate } from '@rtsee/common';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'rtsee-rate-input',\n templateUrl: './rate-input.component.html',\n imports: [ReactiveFormsModule, Textarea, RatingComponent, Message],\n standalone: true,\n})\nexport class RateInputComponent implements OnInit, OnDestroy {\n sendRateForm: FormGroup = new FormGroup({\n comment: new FormControl(''),\n });\n showMissingRateError: boolean = false;\n\n private _config!: IRatingConfigWithRate;\n private commentSubscription?: Subscription;\n\n @Input()\n set config(value: IRatingConfigWithRate) {\n this._config = value;\n this.updateCommentControl();\n }\n\n get config(): IRatingConfigWithRate {\n return this._config;\n }\n\n ngOnInit(): void {\n this.updateCommentControl();\n }\n\n ngOnDestroy(): void {\n this.commentSubscription?.unsubscribe();\n }\n\n private updateCommentControl(): void {\n this.commentSubscription?.unsubscribe();\n if (this._config && this._config.rate) {\n this.sendRateForm\n .get('comment')\n ?.setValue(this._config.rate.text || '', { emitEvent: false });\n\n this.commentSubscription = this.sendRateForm\n .get('comment')\n ?.valueChanges.subscribe((value) => {\n if (this._config.rate) {\n this._config.rate.text = value || '';\n }\n });\n }\n }\n}\n","<div class=\"rtsee-rate-input\">\n <div class=\"rtsee-rate-input-header\">\n <h3 class=\"rtsee-rate-input-name\">{{ config.name }}</h3>\n @if (config.description) {\n <p class=\"rtsee-rate-input-description\">{{ config.description }}</p>\n }\n </div>\n <div class=\"rtsee-rate-form-container\">\n <form [formGroup]=\"sendRateForm\" class=\"rtsee-rate-form\">\n <textarea\n [invalid]=\"false\"\n [autoResize]=\"true\"\n formControlName=\"comment\"\n pTextarea\n placeholder=\"Your comment here...\"\n class=\"rtsee-rate-comment-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n <div class=\"rtsee-rate-select-container\">\n <rtsee-rating [config]=\"config\"></rtsee-rating>\n @if (!config.rate?.value && showMissingRateError) {\n <p-message severity=\"error\">Please add your rate!</p-message>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { Button } from 'primeng/button';\nimport { IRTSeeRatesGroup } from '@rtsee/common';\nimport { RTSeeRater } from '@rtsee/utilities-ui';\nimport { RatingComponent } from '../../../common/components/rating/rating.component';\n\n@Component({\n selector: 'rtsee-rate-item',\n imports: [RatingComponent, DatePipe, Button],\n templateUrl: './rate-item.component.html',\n})\nexport class RateItemComponent {\n @Input() group!: IRTSeeRatesGroup;\n @Input() rater!: RTSeeRater;\n @Input() showActions: boolean = false;\n\n @Output() edit = new EventEmitter<void>();\n @Output() delete = new EventEmitter<void>();\n\n onEdit(event: Event): void {\n event.stopPropagation();\n this.edit.emit();\n }\n\n onDelete(event: Event): void {\n event.stopPropagation();\n this.delete.emit();\n }\n\n getRatingConfigName(configId: string): string {\n if (!this.rater) {\n return '';\n }\n const config = this.rater.ratingConfigurations.find(\n (c) => c.id === configId,\n );\n return config ? config.name : '';\n }\n}\n","<div class=\"rtsee-rates-group-item\">\n <div class=\"rtsee-rates-group-header\">\n <div class=\"rtsee-rates-group-user-info\">\n @if (group.peer?.imageUrl) {\n <img\n class=\"rtsee-rates-group-avatar\"\n [src]=\"group.peer.imageUrl\"\n alt=\"User avatar\"\n />\n } @else {\n <div class=\"rtsee-rates-group-avatar-fallback\">\n {{ (group.peer?.name || \"?\").substring(0, 1) }}\n </div>\n }\n <span class=\"rtsee-rates-group-peer-name\">{{\n group.peer?.name || group.peerId\n }}</span>\n </div>\n\n <div class=\"rtsee-rates-group-right-header\">\n <span class=\"rtsee-rates-group-date\">{{\n group.createdAt | date: \"short\"\n }}</span>\n\n @if (showActions) {\n <div class=\"rtsee-rates-group-actions\">\n <p-button\n (click)=\"onEdit($event)\"\n [severity]=\"'secondary'\"\n [text]=\"true\"\n class=\"rtsee-rates-group-btn-edit\"\n >\n <span class=\"pi pi-pencil\"></span>\n </p-button>\n <p-button\n (click)=\"onDelete($event)\"\n [severity]=\"'danger'\"\n [text]=\"true\"\n class=\"rtsee-rates-group-btn-delete\"\n >\n <span class=\"pi pi-trash\"></span>\n </p-button>\n </div>\n }\n </div>\n </div>\n <div class=\"rtsee-rates-group-body\">\n @for (rate of group.rates; track rate.id) {\n <div class=\"rtsee-rates-group-rate-item-container\">\n <div class=\"rtsee-rates-group-rate-item\">\n <span class=\"rtsee-rates-group-rate-config-name\">{{\n getRatingConfigName(rate.configurationId)\n }}</span>\n <rtsee-rating [rate]=\"rate\"></rtsee-rating>\n </div>\n @if (rate.text) {\n <p class=\"rtsee-rates-group-rate-comment\">\"{{ rate.text }}\"</p>\n }\n </div>\n }\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { IRTSeeRate } from '@rtsee/common';\nimport { RTSeeEntity, RTSeeRater } from '@rtsee/utilities-ui';\nimport { RateInputComponent } from '../rate-input/rate-input.component';\nimport { RateItemComponent } from '../rate-item/rate-item.component';\nimport {NgClass} from \"@angular/common\";\nimport {RTSeeTextLabelKeys} from \"@rtsee/core\";\n\n@Component({\n selector: 'rtsee-rater',\n imports: [Button, RateInputComponent, RateItemComponent, NgClass],\n templateUrl: './rater.component.html',\n})\nexport class RaterComponent implements OnInit {\n @Input() entity!: RTSeeEntity;\n @Input() rater!: RTSeeRater;\n\n isEditing: boolean = false;\n\n ngOnInit(): void {\n this.getRatingConfigurations()\n .then(() => {\n console.log('Getting rating configurations...');\n })\n .catch((error) => {\n console.error(error);\n });\n }\n\n async sendRate(): Promise<void> {\n const rates: IRTSeeRate[] = this.rater.configsWithRates\n .map((config) => config.rate)\n .filter((r): r is IRTSeeRate => !!r);\n if (this.rater.userRateGroup) {\n await this.rater.editRateGroup({\n ...this.rater.userRateGroup,\n rates,\n });\n } else {\n await this.rater.createRateGroup({\n entityId: this.rater.entityId,\n peerId: this.rater.peer.clientId,\n rates,\n applicationId: this.rater.applicationId,\n createdAt: new Date(),\n peer: this.rater.peer,\n });\n }\n this.isEditing = false;\n }\n\n async deleteRate(): Promise<void> {\n if (this.rater.userRateGroup) {\n await this.rater.deleteRateGroup(this.rater.userRateGroup.id);\n }\n }\n\n startEdit(): void {\n this.isEditing = true;\n }\n\n private async getRatingConfigurations(): Promise<IRTSeeRate[]> {\n if (!this.rater || !this.entity) {\n console.log('No rater or entity found.');\n return [];\n }\n\n const rates: IRTSeeRate[] = await this.rater.getRates();\n console.log('Rates found.', rates);\n\n return rates;\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"rtsee-rater\" [ngClass]=\"{'rtsee-rater-view-mode': rater.userRateGroup && !isEditing}\">\n @if (rater.userRateGroup && !isEditing) {\n <rtsee-rate-item\n [group]=\"rater.userRateGroup\"\n [rater]=\"rater\"\n [showActions]=\"true\"\n (edit)=\"startEdit()\"\n (delete)=\"deleteRate()\"\n ></rtsee-rate-item>\n } @else {\n <div class=\"rtsee-rater-user-header\">\n @if (rater.peer?.imageUrl) {\n <img\n class=\"rtsee-rater-avatar\"\n [src]=\"rater.peer?.imageUrl\"\n alt=\"User avatar\"\n />\n } @else {\n <div class=\"rtsee-rater-avatar-fallback\">\n {{ (rater.peer?.name || \"?\").substring(0, 1) }}\n </div>\n }\n <div class=\"rtsee-rater-user-info\">\n <span class=\"rtsee-rater-user-name\">{{\n rater.peer?.name || \"Anonymous\"\n }}</span>\n <span class=\"rtsee-rater-user-status\">Rating publicly</span>\n </div>\n </div>\n <hr class=\"rtsee-rater-divider\" />\n @for (config of rater.configsWithRates; track config.id) {\n <rtsee-rate-input [config]=\"config\"></rtsee-rate-input>\n }\n <div class=\"rtsee-rater-actions\">\n @if (rater.userRateGroup) {\n <p-button\n (click)=\"sendRate()\"\n [severity]=\"'success'\"\n [label]=\"rater.messenger.labels[RTSeeTextLabelKeys.RATER_UPDATE]\"\n type=\"submit\"\n class=\"rtsee-rater-btn-update rts-action-button\"\n >\n <span class=\"pi pi-check\"></span>\n </p-button>\n <p-button\n (click)=\"deleteRate()\"\n [severity]=\"'danger'\"\n [label]=\"rater.messenger.labels[RTSeeTextLabelKeys.RATER_DELETE]\"\n class=\"rtsee-rater-btn-delete rts-action-button\"\n >\n <span class=\"pi pi-trash\"></span>\n </p-button>\n } @else {\n <p-button\n (click)=\"sendRate()\"\n [severity]=\"'primary'\"\n [label]=\"rater.messenger.labels[RTSeeTextLabelKeys.RATER_SEND]\"\n type=\"submit\"\n class=\"rtsee-rater-btn-send rts-action-button\"\n >\n <span class=\"pi pi-send\"></span>\n </p-button>\n }\n </div>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeEntity, RTSeeRater } from '@rtsee/utilities-ui';\nimport { InfiniteScrollDirective } from 'ngx-infinite-scroll';\nimport { RateItemComponent } from '../rate-item/rate-item.component';\n\n@Component({\n selector: 'rtsee-rates-list',\n imports: [InfiniteScrollDirective, RateItemComponent],\n templateUrl: './rates-list.component.html',\n})\nexport class RatesListComponent implements OnInit {\n @Input() rater!: RTSeeRater;\n @Input() entity!: RTSeeEntity;\n\n ngOnInit(): void {\n if (this.rater) {\n this.rater\n .loadOtherUsersRateGroups(true)\n .then(() => {\n console.log('Other users rate groups loaded.');\n })\n .catch((err) => {\n console.error(err);\n });\n }\n }\n\n onScroll(): void {\n if (this.rater) {\n this.rater\n .loadOtherUsersRateGroups()\n .then(() => {\n console.log('More other users rate groups loaded.');\n })\n .catch((err) => {\n console.error(err);\n });\n }\n }\n}\n","<div\n class=\"rtsee-rates-list\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n>\n @for (group of rater.otherUsersRateGroups; track group.id) {\n <rtsee-rate-item\n [group]=\"group\"\n [rater]=\"rater\"\n [showActions]=\"false\"\n ></rtsee-rate-item>\n }\n @if (rater.loadingRatesGroups) {\n <div class=\"rtsee-rates-list-loading\">Loading more...</div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RaterComponent } from '../rater/rater.component';\nimport { RatesListComponent } from '../rates-list/rates-list.component';\nimport { RTSeeEntity, RTSeeRater } from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-rating-section',\n imports: [RaterComponent, RatesListComponent],\n templateUrl: './rating-section.component.html',\n})\nexport class RatingSectionComponent {\n @Input() rater!: RTSeeRater;\n @Input() entity!: RTSeeEntity;\n}\n","<div class=\"rtsee-rating-section\">\n <rtsee-rater [rater]=\"rater\"\n [entity]=\"entity\"\n ></rtsee-rater>\n <rtsee-rates-list [rater]=\"rater\"\n [entity]=\"entity\"\n ></rtsee-rates-list>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RtseeEntityCommentsComponent } from '../rtsee-entity-comments/rtsee-entity-comments.component';\nimport { RtseeEntityTagsComponent } from '../rtsee-entity-tags/rtsee-entity-tags.component';\nimport { RTSeeEntity, RTSeeRater } from '@rtsee/utilities-ui';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RatingSectionComponent } from '../../rtsee-rates/rating-section/rating-section.component';\n\n@Component({\n selector: 'rtsee-entity-preview',\n imports: [\n RtseeEntityCommentsComponent,\n RtseeEntityTagsComponent,\n RatingSectionComponent,\n ],\n templateUrl: './rtsee-entity-preview.component.html',\n})\nexport class RtseeEntityPreviewComponent implements OnInit {\n rater: RTSeeRater | null = null;\n\n @Input() entity!: RTSeeEntity;\n @Input() messenger!: RTSeeMessenger;\n\n showRating: boolean = true;\n\n ngOnInit() {\n void this.entity.reload();\n this.rater = new RTSeeRater({\n entityId: this.entity.id,\n messenger: this.messenger,\n entityConfigurationId: this.entity.configurationId,\n ...this.entity.getHandlerCommonOptions(),\n });\n }\n}\n","<div class=\"rtsee-entity-preview\">\n <div class=\"rtsee-entity-preview-tags\">\n <rtsee-entity-tags [entity]=\"entity\"></rtsee-entity-tags>\n </div>\n\n @if (showRating && rater) {\n <rtsee-rating-section [entity]=\"entity\"\n [rater]=\"rater\"\n ></rtsee-rating-section>\n } @else if (!showRating && entity.comments && messenger) {\n <div class=\"rtsee-entity-preview-comments\">\n <rtsee-entity-comments [messenger]=\"messenger\"\n [chat]=\"entity.comments\"\n [entity]=\"entity\"\n ></rtsee-entity-comments>\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Chip } from 'primeng/chip';\nimport { Tag } from 'primeng/tag';\nimport { RTSeePresentation, RTSeeStory } from '@rtsee/presentation';\nimport { Button } from 'primeng/button';\nimport { ChatComponent } from '../../rtsee-messenger/chat/chat.component';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RtseeEntityPreviewComponent } from '../../rtsee-entities/rtsee-entity-preview/rtsee-entity-preview.component';\nimport {RouterLink} from \"@angular/router\";\nimport {RTSeeTextLabelKeys} from \"@rtsee/core\";\n\n@Component({\n selector: 'rtsee-story-details',\n imports: [Chip, Tag, Button, ChatComponent, RtseeEntityPreviewComponent, RouterLink],\n templateUrl: './story-details.component.html',\n})\nexport class StoryDetailsComponent {\n @Input() story!: RTSeeStory;\n @Input() presentation!: RTSeePresentation;\n @Input() messenger?: RTSeeMessenger;\n\n getStarArray(rating: number | null): string[] {\n const stars: string[] = [];\n const val = rating || 0;\n for (let i = 1; i <= 5; i++) {\n if (val >= i) {\n stars.push('full');\n } else if (val + 0.5 >= i) {\n stars.push('half');\n } else {\n stars.push('empty');\n }\n }\n return stars;\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n protected readonly Math = Math;\n}\n","<div class=\"rtsee-story-details\">\n <section\n class=\"rtsee-story-details-cover\"\n [style.background-image]=\"'url(' + story.imageUrl + ')'\"\n >\n <button\n class=\"rtsee-story-details-btn-close\"\n [routerLink]=\"[presentation.homePage]\"\n (click)=\"presentation.closeStoryDetails()\"\n aria-label=\"Close\"\n >\n <span class=\"pi pi-times\"></span>\n </button>\n <div class=\"rtsee-story-details-cover-overlay\"></div>\n <div class=\"rtsee-story-details-cover-content\">\n <div class=\"rtsee-story-details-cover-badges\">\n @if (story.categories?.length) {\n @for (category of story.categories; track category.id) {\n <span class=\"rtsee-story-details-tag-pill\">\n {{ category.name }}\n </span>\n }\n }\n @if (story.tags?.length) {\n @for (tag of story.tags; track tag.id) {\n <span\n class=\"rtsee-story-details-tag-pill rtsee-story-details-tag-pill-label\"\n >\n @if (tag.symbol) {\n <span class=\"symbol\">{{ tag.symbol }}</span>\n }\n {{ tag.name }}\n </span>\n }\n }\n </div>\n\n <h1 class=\"rtsee-story-details-cover-title\">{{ story.name }}</h1>\n\n <div class=\"rtsee-story-details-cover-meta\">\n @if (story.rating !== null) {\n <div class=\"rtsee-story-details-cover-rating\">\n <span class=\"rtsee-story-details-stars\">\n @for (star of getStarArray(story.rating); track $index) {\n <span\n class=\"rtsee-story-details-star\"\n [class.rtsee-story-details-star-full]=\"star === 'full'\"\n [class.rtsee-story-details-star-half]=\"star === 'half'\"\n [class.rtsee-story-details-star-empty]=\"star === 'empty'\"\n >\n @if (star === \"full\") {\n ★\n } @else if (star === \"half\") {\n ★\n } @else {\n ☆\n }\n </span>\n }\n </span>\n <span class=\"rtsee-story-details-rating-number\">{{\n story.rating\n }}</span>\n @if (story.ratesCount !== null) {\n <span class=\"rtsee-story-details-rating-count\">\n <span>(</span>\n <span>{{ presentation.labels[RTSeeTextLabelKeys.FEEDBACKS_LABEL] }}:</span>\n <span> </span>\n <span>{{ story.ratesCount }}</span>\n <span>)</span>\n </span\n >\n }\n </div>\n }\n\n <div class=\"rtsee-story-details-cover-info-chips\">\n @if (story.averageReadTime) {\n <span class=\"rtsee-story-details-info-chip\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n <span>\n <span>{{ Math.ceil(story.averageReadTime / 60) }}</span>\n <span> </span>\n <span>{{ presentation.labels[RTSeeTextLabelKeys.MINUTE_LABEL] }}</span>\n </span>\n </span>\n }\n @if (story.totalSlides) {\n <span class=\"rtsee-story-details-info-chip\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n <span>\n <span>{{ presentation.labels[RTSeeTextLabelKeys.STORY_PAGES_LABEL] }}:</span>\n <span> </span>\n <span>{{ story.totalSlides }}</span>\n </span>\n </span>\n }\n </div>\n </div>\n </div>\n </section>\n\n <!-- CONTENT AREA -->\n <div class=\"rtsee-story-details-content-wrapper\">\n <div class=\"rtsee-story-details-cover-actions\">\n <p-button\n (click)=\"presentation.setActiveStory(story)\"\n [severity]=\"'primary'\"\n [label]=\"story.preselectedSlideNumber ? presentation.labels[RTSeeTextLabelKeys.CONTINUE_READING_BUTTON] : presentation.labels[RTSeeTextLabelKeys.START_READING_BUTTON]\"\n class=\"rtsee-story-details-start-reading rts-action-button\"\n >\n </p-button>\n </div>\n <div class=\"rtsee-story-details-content-grid\">\n <!-- Description Card -->\n <article class=\"rtsee-story-details-glass-card\">\n <div class=\"rtsee-story-details-glass-card-header\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\" />\n <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\" />\n </svg>\n <h2>{{presentation.labels[RTSeeTextLabelKeys.STORY_ABOUT_LABEL]}}</h2>\n </div>\n <p class=\"rtsee-story-details-glass-card-text\">\n {{ story.description }}\n </p>\n </article>\n </div>\n\n @if (messenger) {\n <rtsee-entity-preview\n [entity]=\"story\"\n [messenger]=\"messenger\"\n ></rtsee-entity-preview>\n }\n\n @if (story.categories?.length && false) {\n <div class=\"rtsee-story-details-categories\">\n @for (category of story.categories; track category.id) {\n <p-tag [value]=\"category.name\"></p-tag>\n }\n </div>\n }\n\n @if (story.tags?.length && false) {\n <div class=\"rtsee-story-details-labels\">\n @for (tag of story.tags; track tag.id) {\n <p-chip class=\"rtsee-story-details-label\">\n @if (tag.symbol) {\n <span class=\"rtsee-story-details-label-left\">{{\n tag.symbol\n }}</span>\n }\n <span class=\"rtsee-story-details-label-right\">{{\n tag.name\n }}</span>\n </p-chip>\n }\n </div>\n }\n\n <div class=\"rtsee-story-details-description-history\"></div>\n @if (story.isPublished && false) {\n <div class=\"rtsee-story-details-feedback\">\n <p>feedback here</p>\n </div>\n } @else if (messenger && story.discussion && false) {\n <div class=\"rtsee-story-details-votes\">\n <p class=\"rtsee-story-details-comments-label\">Comments</p>\n <rtsee-chat\n [messenger]=\"messenger\"\n [chatData]=\"story.discussion\"\n ></rtsee-chat>\n </div>\n }\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeePresentation, RTSeeStory } from '@rtsee/presentation';\nimport { PresentationHeaderComponent } from '../presentation-header/presentation-header.component';\nimport { StoryThumbnailComponent } from '../story-thumbnail/story-thumbnail.component';\nimport { StoryPlayerComponent } from '../story-player/story-player.component';\nimport { PreloaderComponent } from '../../../common/components/preloader/preloader.component';\nimport { PresentationsDashboardComponent } from '../manage/presentations-dashboard/presentations-dashboard.component';\nimport { PresentationSettingsComponent } from '../presentation-settings/presentation-settings.component';\nimport { StoryDetailsComponent } from '../story-details/story-details.component';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\n\n@Component({\n selector: 'rtsee-presentation',\n templateUrl: './presentation.component.html',\n imports: [\n PresentationHeaderComponent,\n StoryThumbnailComponent,\n StoryPlayerComponent,\n PreloaderComponent,\n PreloaderComponent,\n PresentationsDashboardComponent,\n PresentationSettingsComponent,\n StoryDetailsComponent,\n ],\n standalone: true,\n})\nexport class PresentationComponent {\n @Input() presentation!: RTSeePresentation;\n @Input() messenger?: RTSeeMessenger;\n constructor() {}\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n\n onStoryThumbnailClicked(story: RTSeeStory): void {\n if (!story.friendlyUrl) {\n void this.presentation.openStoryDetails(story.id, story.preselectedSlideNumber || undefined);\n }\n }\n}\n","<div class=\"rtsee-presentation\">\n <div class=\"rtsee-presentation-header-block\">\n <rtsee-presentation-header [presentation]=\"presentation\"\n ></rtsee-presentation-header>\n </div>\n\n @if (presentation.storyLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n\n @if(presentation.isDashboardOpen && presentation.dashboard) {\n <rtsee-presentations-dashboard [dashboard]=\"presentation.dashboard\"\n ></rtsee-presentations-dashboard>\n }\n\n @if (presentation.settings.isExpanded) {\n <rtsee-presentation-settings [settings]=\"presentation.settings\"\n [presentation]=\"presentation\"\n ></rtsee-presentation-settings>\n }\n\n @if (presentation.isCategoriesListVisible && !presentation.storyLoadInProgress) {\n <div class=\"rtsee-presentation-categories-list\">\n @if (presentation.categoriesLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n\n @if (presentation.activeSessionsStories.length) {\n <div class=\"rtsee-presentation-category-header\">\n <h2 class=\"rtsee-presentation-category-name\">{{presentation.labels[RTSeeTextLabelKeys.CONTINUE_SESSIONS_LABEL]}}</h2>\n </div>\n <div class=\"rtsee-presentation-stories-list\">\n @for (story of presentation.activeSessionsStories; track story.id) {\n <div class=\"rtsee-presentation-story-thumbnail-container\"\n (click)=\"onStoryThumbnailClicked(story)\"\n >\n <rtsee-story-thumbnail\n [story]=\"story\"\n [presentation]=\"presentation\"\n ></rtsee-story-thumbnail>\n </div>\n }\n </div>\n }\n\n @for (category of presentation.categories; track category.id) {\n <div class=\"rtsee-presentation-category-header\">\n <h2 class=\"rtsee-presentation-category-name\">{{ category.name }}</h2>\n <span class=\"rtsee-presentation-category-description\">{{ category.description }}</span>\n </div>\n <div class=\"rtsee-presentation-stories-list\">\n @for (story of category.stories; track story.id) {\n <div class=\"rtsee-presentation-story-thumbnail-container\"\n (click)=\"onStoryThumbnailClicked(story)\"\n >\n <rtsee-story-thumbnail\n [story]=\"story\"\n [presentation]=\"presentation\"\n ></rtsee-story-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n\n @if (presentation.activeStory && !presentation.isDashboardOpen) {\n <div class=\"rtsee-presentation-story-viewer-container\">\n <rtsee-story-player [story]=\"presentation.activeStory\"\n [settings]=\"presentation.settings\"\n [presentation]=\"presentation\"\n ></rtsee-story-player>\n </div>\n } @else if (presentation.openedStoryDetails && !presentation.isDashboardOpen) {\n <rtsee-story-details [story]=\"presentation.openedStoryDetails\"\n [presentation]=\"presentation\"\n [messenger]=\"messenger\"\n ></rtsee-story-details>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n INavigationConfig,\n IRouteConfig,\n RTSee,\n RTSeeRoutesList,\n} from '@rtsee/factory';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { NgClass } from '@angular/common';\nimport { Avatar } from 'primeng/avatar';\nimport { Image } from 'primeng/image';\nimport { Divider } from 'primeng/divider';\nimport { Tooltip } from 'primeng/tooltip';\nimport { RTSeeAuthService } from '../../rtsee-auth/services/auth.service';\nimport { hasPermission, IPeer, RTSeePeerPermissions } from '@rtsee/core';\n\n@Component({\n selector: 'rtsee-nav',\n templateUrl: './rtsee-nav.component.html',\n imports: [\n RouterLink,\n RouterLinkActive,\n NgClass,\n Avatar,\n Image,\n Divider,\n Tooltip,\n ],\n standalone: true,\n})\nexport class RtseeNavComponent implements OnInit {\n @Input() public config!: INavigationConfig<IRouteConfig>;\n @Input() rtsee!: RTSee;\n\n profileLink: string = '';\n queryParams: { [key: string]: string } = {};\n\n constructor(private authService: RTSeeAuthService) {}\n\n ngOnInit(): void {\n this.populateProfileLinkTillSuccess();\n }\n\n populateProfileLinkTillSuccess(): void {\n const success: boolean = this.populateProfileLink();\n\n if (!success) {\n setTimeout(() => {\n this.populateProfileLinkTillSuccess();\n }, 1000);\n }\n }\n\n populateProfileLink(): boolean {\n const peer: IPeer | null = this.rtsee.socketConnection?.myPeer || null;\n\n if (!peer) {\n console.log('RTSeeContainer: user peer not found');\n return false;\n }\n\n const profileRoute: IRouteConfig | null =\n this.config.routes.find(\n (r) => r.rtseeRoute === RTSeeRoutesList.PROFILE,\n ) || null;\n\n const dashboardRoute: IRouteConfig | null =\n this.config.routes.find(\n (r) => r.rtseeRoute === RTSeeRoutesList.EVENTS_DASHBOARD,\n ) || null;\n\n const messengerRoute: IRouteConfig | null =\n this.config.routes.find(\n (r) => r.rtseeRoute === RTSeeRoutesList.MESSENGER,\n ) || null;\n\n if (dashboardRoute) {\n dashboardRoute.isEnabled = hasPermission(\n peer,\n RTSeePeerPermissions.ACCESS_EVENTS_DASHBOARD,\n );\n }\n\n if (profileRoute && profileRoute.link) {\n this.profileLink = `${profileRoute.link}/${peer.clientId}`;\n return true;\n }\n\n if (messengerRoute && messengerRoute.link) {\n this.profileLink = messengerRoute.link;\n this.queryParams = { userId: peer.clientId };\n return true;\n }\n\n return false;\n }\n}\n","<div class=\"rtsee-nav\">\n @if (config.siteLogo) {\n <div class=\"rtsee-site-logo\">\n <p-image [src]=\"config.siteLogo.src\" class=\"rtsee-site-logo-image\"></p-image>\n <p-divider class=\"rtsee-site-logo-divider\" />\n </div>\n }\n <div class=\"rtsee-nav-bar\">\n @for (route of config.routes; track route.name) {\n <a [routerLink]=\"route.link\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [ngClass]=\"{'rtsee-nav-item-hidden': !route.isEnabled || !route.iconClassName}\"\n [routerLinkActiveOptions]=\"{ exact: route.exactActiveLinkMatcher || false }\"\n class=\"rtsee-nav-item\"\n [pTooltip]=\"route.name\"\n >\n <span [ngClass]=\"route.iconClassName\"\n class=\"rtsee-nav-item-icon\" >\n </span>\n </a>\n }\n <p-avatar [image]=\"rtsee.socketConnection?.myPeer?.imageUrl\"\n class=\"rtsee-nav-item rtsee-nav-image rtsee-nav-profile\"\n [routerLink]=\"profileLink\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n [queryParams]=\"queryParams\"\n ></p-avatar>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSee, INavigationConfig, IRouteConfig } from '@rtsee/factory';\nimport { NgClass } from '@angular/common';\nimport { RTSeeConferenceComponent } from '../rtsee/rtsee-conference.component';\nimport { MessengerComponent } from '../rtsee-messenger/messenger/messenger.component';\nimport { RtseeEventsDashboardComponent } from '../rtsee-events-dashboard/rtsee-events-dashboard.component';\nimport { PresentationComponent } from '../rtsee-presentation/presentation/presentation.component';\nimport { RtseeNavComponent } from './rtsee-nav/rtsee-nav.component';\nimport { RTSeeAuthService } from '../rtsee-auth/services/auth.service';\nimport { RTSeeAuth } from '@rtsee/auth';\nimport { filter, Subscription } from 'rxjs';\nimport { Event, NavigationEnd, Router } from '@angular/router';\n\n@Component({\n selector: 'rtsee-container',\n templateUrl: './rtsee-container.component.html',\n imports: [\n NgClass,\n RTSeeConferenceComponent,\n MessengerComponent,\n RtseeEventsDashboardComponent,\n PresentationComponent,\n RtseeNavComponent,\n ],\n standalone: true,\n})\nexport class RTSeeContainerComponent implements OnInit {\n isSidenavExpanded: boolean = true;\n isSidenavContent: boolean = false;\n isSidenavFullScreen: boolean = false;\n\n private routeSubscription!: Subscription;\n\n @Input() rtsee!: RTSee;\n @Input() public navigationConfig!: INavigationConfig<IRouteConfig>;\n @Input() auth!: RTSeeAuth<any>;\n\n constructor(\n private authService: RTSeeAuthService,\n private router: Router,\n ) {}\n\n ngOnInit(): void {\n this.authService.init(this.auth);\n this.routeSubscription = this.router.events\n .pipe(\n // Filter for the NavigationEnd event to know when navigation is complete\n filter(\n (event: Event): event is NavigationEnd =>\n event instanceof NavigationEnd,\n ),\n )\n .subscribe((event: NavigationEnd) => {\n this.defineSideNavState(event.url);\n });\n\n this.subscribeToHtmlEvents();\n }\n\n subscribeToHtmlEvents(): void {\n if (!this.rtsee?.eventsCollector) { return; }\n }\n\n onSidenavToggleClicked() {\n this.isSidenavExpanded = !this.isSidenavExpanded;\n }\n\n defineSideNavState(url: string): void {\n const isBase: boolean = url === '/' || url.startsWith('/?') || url.startsWith('/story');\n const routeUrlSplit: string[] = url.split('/');\n const rootRoutePath: string | null = isBase ? '' : routeUrlSplit[1] || null;\n\n if (!rootRoutePath && !isBase) {\n return;\n }\n\n const rtseeRoute: IRouteConfig | null =\n this.navigationConfig.routes.find((rn) => rn.link === rootRoutePath) ||\n null;\n\n if (!rtseeRoute) {\n return;\n }\n\n this.isSidenavContent = rtseeRoute.fullContent || false;\n this.isSidenavFullScreen = rtseeRoute.fullScreen || false;\n }\n}\n\n","<div class=\"rtsee-shell\"\n [ngClass]=\"{\n 'rtsee-shell-conference-mode': rtsee.conference && rtsee.conference.isInActiveCall,\n 'rtsee-shell-messenger-active': rtsee.messenger && rtsee.activeTab === 'messenger',\n 'rtsee-shell-dashboard-active': rtsee.eventsDashboard && rtsee.activeTab === 'events-dashboard',\n 'rtsee-shell-presentation-active': rtsee.presentation && rtsee.activeTab === 'presentation',\n 'rtsee-shell-side-nav-expanded': isSidenavExpanded,\n 'rtsee-shell-side-nav-is-content': isSidenavContent,\n 'rtsee-shell-side-nav-full-screen': isSidenavFullScreen,\n 'rtsee-lang-eng': rtsee.messenger && rtsee.messenger.currentLanguage === 'eng',\n 'rtsee-lang-ua': rtsee.messenger && rtsee.messenger.currentLanguage === 'ua'\n }\"\n>\n <div class=\"rtsee-nav-block\">\n <rtsee-nav [config]=\"navigationConfig\" [rtsee]=\"rtsee\"></rtsee-nav>\n </div>\n\n <div class=\"rtsee-shell-panel\">\n <div class=\"rtsee-shell-panel-inner\">\n @if (rtsee.conference && rtsee.conference.isInActiveCall) {\n <div class=\"rtsee-conference-container\">\n <rtsee-conference [rtSee]=\"rtsee.conference\"\n ></rtsee-conference>\n </div>\n }\n\n @if (rtsee.messenger) {\n <div class=\"rtsee-messenger-container\">\n <rtsee-messenger [messenger]=\"rtsee.messenger\"\n ></rtsee-messenger>\n </div>\n }\n\n @if (rtsee.eventsDashboard && rtsee.eventsDashboard.isReady) {\n <div class=\"rtsee-events-dashboard-container\">\n <rtsee-events-dashboard [eventsDashboard]=\"rtsee.eventsDashboard\"\n ></rtsee-events-dashboard>\n </div>\n }\n\n @if (rtsee.presentation && rtsee.presentation.isActive) {\n <div class=\"rtsee-presentation-container\">\n <rtsee-presentation [presentation]=\"rtsee.presentation\"\n [messenger]=\"rtsee.messenger\"\n ></rtsee-presentation>\n </div>\n }\n </div>\n </div>\n\n <div class=\"rtsee-content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import {\n Component,\n Input,\n OnInit,\n output,\n OutputEmitterRef,\n} from '@angular/core';\nimport { PanelMenu } from 'primeng/panelmenu';\nimport { RTSeeManageTags, RTSeeTag } from '@rtsee/utilities-ui';\n\nexport interface IAccordionItem {\n label: string;\n icon?: string;\n command?: () => void;\n items?: IAccordionItem[];\n url?: string;\n isSelected: boolean;\n}\n\n@Component({\n selector: 'rtsee-tags-accordion',\n imports: [PanelMenu],\n templateUrl: './rtsee-tags-accordion-menu.component.html',\n})\nexport class RtseeTagsAccordionMenuComponent implements OnInit {\n items: IAccordionItem[] = [];\n onTagClicked: OutputEmitterRef<RTSeeTag> = output<RTSeeTag>();\n\n @Input() manageTags!: RTSeeManageTags;\n\n ngOnInit(): void {\n this.manageTags\n .loadTags()\n .then(() => {\n this.items = this.tagsToItems(this.manageTags.tags);\n console.log(this.items);\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n private tagsToItems(tags: RTSeeTag[]): IAccordionItem[] {\n return tags.map((t) => {\n return {\n label: t.name,\n icon: t.iconClassName || undefined,\n items: t.children ? this.tagsToItems(t.children) : undefined,\n isSelected: false,\n command: (): void => {\n this.onTagClicked.emit(t);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-tags-accordion\">\n <p-panel-menu [model]=\"items\"/>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Button } from 'primeng/button';\nimport { RTSeeManageTags } from '@rtsee/utilities-ui';\nimport { FormComponent } from \"../../../common/components/forms/form/form.component\";\n\nexport type RTSeeTagForm = {\n name: string | null;\n description: string | null;\n iconClass: string | null;\n value: string | null;\n};\n\n@Component({\n selector: 'rtsee-rtsee-tag-manage',\n imports: [\n Button,\n FormComponent,\n ],\n templateUrl: './rtsee-tag-manage.component.html',\n})\nexport class RtseeTagManageComponent implements OnInit {\n @Input() manageTags!: RTSeeManageTags;\n constructor() {}\n\n ngOnInit() {\n if (!this.manageTags.activeTag) {\n this.manageTags.setBlankActiveTag();\n }\n\n if (!this.manageTags.activeTag) {\n throw new Error(`Active tag should be selected`);\n }\n }\n\n cancel(): void {\n console.log('Cancel');\n }\n}\n","<div class=\"rtsee-manage-tag\">\n @if (manageTags.activeTagForm) {\n <rtsee-form [form]=\"manageTags.activeTagForm\" (submit)=\"manageTags.activeTagForm.submit()\">\n <p-button type=\"submit\"\n label=\"Submit\"\n [disabled]=\"manageTags.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageTags.saveInProgress\"\n />\n </rtsee-form>\n }\n</div>\n","import {\n Component,\n Input,\n OnInit,\n output,\n OutputEmitterRef,\n} from '@angular/core';\nimport { RTSeeManageTagGroups, RTSeeTagGroup } from '@rtsee/utilities-ui';\nimport { IAccordionItem } from '../rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nimport { Menu } from 'primeng/menu';\n\n@Component({\n selector: 'rtsee-rtsee-tag-groups-manage',\n imports: [Menu],\n templateUrl: './rtsee-tag-groups-manage.component.html',\n})\nexport class RtseeTagGroupsManageComponent implements OnInit {\n items: IAccordionItem[] = [];\n selectedTagGroup: RTSeeTagGroup | undefined = undefined;\n onTagGroupClicked: OutputEmitterRef<RTSeeTagGroup> = output<RTSeeTagGroup>();\n\n @Input() manageTagGroups!: RTSeeManageTagGroups;\n\n ngOnInit(): void {\n this.manageTagGroups\n .loadTagGroups()\n .then(() => {\n this.items = this.tagGroupsToItems(this.manageTagGroups.tagGroups);\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n private tagGroupsToItems(tagGroups: RTSeeTagGroup[]): IAccordionItem[] {\n console.log('tagGroupsToItems', tagGroups);\n return tagGroups.map((tg) => {\n return {\n label: tg.name,\n isSelected: false,\n command: (): void => {\n this.selectedTagGroup = tg;\n this.onTagGroupClicked.emit(tg);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-manage-tag-groups\">\n <p-menu [model]=\"items\" />\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { IRTSeeTagGroup } from '@rtsee/common';\nimport { TypedReactiveForm } from '../../rtsee-auth/types/auth-form.type';\nimport { RTSeeManageTagGroups } from '@rtsee/utilities-ui';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { Textarea } from 'primeng/textarea';\nimport { AutocompleteComponent } from '../../../common/components/autocomplete/autocomplete.component';\n\nexport type RTSeeTagGroupForm = {\n name: string | null;\n description: string | null;\n};\n\n@Component({\n selector: 'rtsee-rtsee-tag-group-manage',\n imports: [\n Button,\n FloatLabel,\n InputGroup,\n InputText,\n Message,\n ReactiveFormsModule,\n Textarea,\n AutocompleteComponent,\n ],\n templateUrl: './rtsee-tag-group-manage.component.html',\n})\nexport class RtseeTagGroupManageComponent implements OnInit {\n tagGroupForm: FormGroup;\n\n @Input() manageTagGroups!: RTSeeManageTagGroups;\n\n constructor(private formBuilder: FormBuilder) {\n this.tagGroupForm = this.getTagGroupForm();\n }\n\n ngOnInit() {\n if (!this.manageTagGroups.activeTagGroup) {\n this.manageTagGroups.setBlankActiveTag();\n }\n\n if (!this.manageTagGroups.activeTagGroup) {\n throw new Error(`Active tagGroup should be selected`);\n }\n\n this.presetFields(this.manageTagGroups.activeTagGroup);\n void this.manageTagGroups.initMultiselect();\n }\n\n async submit(): Promise<void> {\n if (!this.manageTagGroups.activeTagGroup) {\n throw new Error(`Active tagGroup should be selected`);\n }\n\n if (this.tagGroupForm.invalid || !this.manageTagGroups.peer.rtseeAppId) {\n console.log('Form Invalid!');\n return;\n }\n\n const tagGroupParams: Omit<IRTSeeTagGroup, 'id'> = {\n name: this.nameField.getRawValue(),\n description: this.descriptionField.getRawValue(),\n applicationId: this.manageTagGroups.peer.rtseeAppId,\n };\n\n if (this.manageTagGroups.activeTagGroup.id) {\n await this.manageTagGroups.updateTagGroup({\n ...tagGroupParams,\n id: this.manageTagGroups.activeTagGroup.id,\n });\n } else {\n await this.manageTagGroups.createTagGroup(tagGroupParams);\n }\n }\n\n cancel(): void {\n console.log('Cancel');\n }\n\n private presetFields(tagGroup: Omit<IRTSeeTagGroup, 'id'>): void {\n this.nameField.setValue(tagGroup.name);\n this.descriptionField.setValue(tagGroup.description || '');\n }\n\n private getTagGroupForm(): FormGroup {\n return this.formBuilder.group<TypedReactiveForm<RTSeeTagGroupForm>>({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n });\n }\n\n get nameField(): FormControl<string> {\n return this.tagGroupForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.tagGroupForm.get('description') as FormControl<string>;\n }\n}\n","<div class=\"rtsee-manage-tag-group\">\n <div class=\"rtsee-manage-tag-group-info rtsee-form-container\">\n <form class=\"rtsee-tag-form rtsee-form\"\n [formGroup]=\"tagGroupForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-story-label-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-story-label-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-story-label-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-story-label-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n\n @if (manageTagGroups && manageTagGroups.tagsMultiselect) {\n <div class=\"rtsee-form-field-container\">\n <rtsee-autocomplete [config]=\"manageTagGroups.tagsMultiselect\"></rtsee-autocomplete>\n </div>\n }\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageTagGroups.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageTagGroups.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, output, OutputEmitterRef } from '@angular/core';\nimport { Menu } from 'primeng/menu';\nimport { IAccordionItem } from '../../rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nimport {\n RTSeeEntityConfiguration,\n RTSeeManageEntityConfigurations,\n} from '@rtsee/utilities-ui';\n\n@Component({\n selector: 'rtsee-entities-configurations-list',\n imports: [Menu],\n templateUrl: './entities-configurations-list.component.html',\n})\nexport class EntitiesConfigurationsListComponent {\n items: IAccordionItem[] = [];\n selectedEntityConfiguration?: RTSeeEntityConfiguration;\n onConfigurationClicked: OutputEmitterRef<RTSeeEntityConfiguration> =\n output<RTSeeEntityConfiguration>();\n\n @Input() manageEntityConfigurations!: RTSeeManageEntityConfigurations;\n\n ngOnInit(): void {\n this.manageEntityConfigurations\n .loadEntityConfigurations()\n .then(() => {\n this.items = this.configurationsToItems(\n this.manageEntityConfigurations.entityConfigurations,\n );\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n private configurationsToItems(\n entityConfigurations: RTSeeEntityConfiguration[],\n ): IAccordionItem[] {\n console.log('entityConfigsToItems', entityConfigurations);\n return entityConfigurations.map((ec) => {\n return {\n label: ec.name,\n isSelected: false,\n command: (): void => {\n this.selectedEntityConfiguration = ec;\n this.onConfigurationClicked.emit(ec);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-entities-configurations-list\">\n <p-menu [model]=\"items\" />\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeManageRatingConfigurations } from '@rtsee/utilities-ui';\nimport { IRTSeeRatingConfiguration } from '@rtsee/common';\nimport { Button } from 'primeng/button';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { TypedReactiveForm } from '../../rtsee-auth/types/auth-form.type';\nimport { Textarea } from 'primeng/textarea';\nimport { InputNumber } from 'primeng/inputnumber';\n\nexport type RatingConfigurationForm = {\n name: string | null;\n description: string | null;\n maxRate: number | null;\n step: number | null;\n};\n\n@Component({\n selector: 'rtsee-manage-rating-configuration',\n imports: [\n Button,\n FloatLabel,\n FormsModule,\n InputGroup,\n InputText,\n Message,\n ReactiveFormsModule,\n Textarea,\n InputNumber,\n ],\n templateUrl: './manage-rating-configuration.component.html',\n})\nexport class ManageRatingConfigurationComponent implements OnInit {\n ratingConfigurationForm: FormGroup;\n\n @Input() manageRatingConfigurations!: RTSeeManageRatingConfigurations;\n @Input() ratingConfiguration!: IRTSeeRatingConfiguration;\n constructor(private formBuilder: FormBuilder) {\n this.ratingConfigurationForm = this.getRatingConfigurationForm();\n }\n\n ngOnInit(): void {\n this.presetFields();\n }\n\n private presetFields(): void {\n if (!this.ratingConfiguration) {\n return;\n }\n\n this.nameField.setValue(this.ratingConfiguration.name);\n this.descriptionField.setValue(this.ratingConfiguration.description || '');\n this.maxRateField.setValue(this.ratingConfiguration.maxRateValue || 5);\n this.stepField.setValue(this.ratingConfiguration.stepValue || 1);\n }\n\n async submit(): Promise<void> {\n if (!this.manageRatingConfigurations.entityConfigurationId) {\n throw new Error(`No entity config id found`);\n }\n\n if (\n this.ratingConfigurationForm.invalid ||\n !this.manageRatingConfigurations.applicationId\n ) {\n console.log('Form Invalid!');\n return;\n }\n\n const configurationParams: Omit<IRTSeeRatingConfiguration, 'id'> = {\n name: this.nameField.getRawValue(),\n description: this.descriptionField.getRawValue(),\n entityConfigurationId:\n this.manageRatingConfigurations.entityConfigurationId,\n applicationId: this.manageRatingConfigurations.applicationId,\n maxRateValue: this.maxRateField.getRawValue(),\n stepValue: this.stepField.getRawValue(),\n };\n\n if (this.ratingConfiguration?.id) {\n await this.manageRatingConfigurations.updateRatingConfiguration({\n ...configurationParams,\n id: this.ratingConfiguration.id,\n });\n } else {\n await this.manageRatingConfigurations.createRatingConfiguration(\n configurationParams,\n );\n }\n }\n\n cancel(): void {\n console.log('cancel');\n }\n\n private getRatingConfigurationForm(): FormGroup {\n return this.formBuilder.group<TypedReactiveForm<RatingConfigurationForm>>({\n name: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(131),\n ],\n }),\n description: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(6),\n Validators.maxLength(244),\n ],\n }),\n maxRate: this.formBuilder.control(5, {\n validators: [Validators.required, Validators.min(4)],\n }),\n step: this.formBuilder.control(1, {\n validators: [Validators.required, Validators.min(1)],\n }),\n });\n }\n\n get nameField(): FormControl<string> {\n return this.ratingConfigurationForm.get('name') as FormControl<string>;\n }\n\n get descriptionField(): FormControl<string> {\n return this.ratingConfigurationForm.get(\n 'description',\n ) as FormControl<string>;\n }\n\n get maxRateField(): FormControl<number> {\n return this.ratingConfigurationForm.get('maxRate') as FormControl<number>;\n }\n\n get stepField(): FormControl<number> {\n return this.ratingConfigurationForm.get('step') as FormControl<number>;\n }\n}\n","<div class=\"rtsee-manage-rating-configuration\">\n <div class=\"rtsee-form-container\">\n <form class=\"rtsee-rating-configuration-form rtsee-form\"\n [formGroup]=\"ratingConfigurationForm\" (ngSubmit)=\"submit()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"rtsee-rating-configuration-name-field\"\n class=\"rtsee-form-field\"\n pInputText\n [formControl]=\"nameField\"\n [class.p-invalid]=\"nameField.invalid && nameField.touched\"\n />\n <label for=\"rtsee-rating-configuration-name-field\">Name</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (nameField.hasError('required') && nameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Name is required</p-message>\n }\n </div>\n\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <textarea [formControl]=\"descriptionField\"\n id=\"rtsee-rating-configuration-description-field\"\n class=\"rtsee-form-field\"\n rows=\"3\"\n cols=\"30\"\n pTextarea\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n ></textarea>\n <label for=\"rtsee-rating-configuration-description-field\">Description</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (descriptionField.hasError('required') && descriptionField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Description is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [formControl]=\"maxRateField\"\n [min]=\"1\"\n [max]=\"10\"\n id=\"rtsee-rating-configuration-max-rate-field\"\n [class.p-invalid]=\"descriptionField.invalid && descriptionField.touched\"\n />\n <label for=\"rtsee-rating-configuration-max-rate-field\">Max Rate</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (maxRateField.hasError('required') && maxRateField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Max rate is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-inputNumber [formControl]=\"stepField\"\n [min]=\"1\"\n [max]=\"2\"\n id=\"rtsee-rating-configuration-step-field\"\n [class.p-invalid]=\"stepField.invalid && stepField.touched\"\n />\n <label for=\"rtsee-rating-configuration-step-field\">Max Rate</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (maxRateField.hasError('required') && maxRateField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Step is required</p-message>\n }\n </div>\n\n\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageRatingConfigurations.saveInProgress\"\n />\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageRatingConfigurations.saveInProgress\"\n />\n </form>\n </div>\n</div>\n","import { Component, Input, output, OutputEmitterRef } from '@angular/core';\nimport { Menu } from 'primeng/menu';\nimport { IAccordionItem } from '../../rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nimport {\n RTSeeEntityConfiguration,\n RTSeeManageRatingConfigurations,\n} from '@rtsee/utilities-ui';\nimport { IRTSeeRatingConfiguration } from '@rtsee/common';\nimport { Button } from 'primeng/button';\nimport { Divider } from 'primeng/divider';\nimport { ManageRatingConfigurationComponent } from '../manage-rating-configuration/manage-rating-configuration.component';\n\n@Component({\n selector: 'rtsee-rating-configurations-list',\n imports: [Menu, Button, Divider, ManageRatingConfigurationComponent],\n templateUrl: './rating-configurations-list.component.html',\n})\nexport class RatingConfigurationsListComponent {\n items: IAccordionItem[] = [];\n selectedRatingConfiguration?: IRTSeeRatingConfiguration;\n onRatingConfigurationClicked: OutputEmitterRef<IRTSeeRatingConfiguration> =\n output<IRTSeeRatingConfiguration>();\n @Input() entityConfiguration!: RTSeeEntityConfiguration;\n @Input() manageRatingConfigurations!: RTSeeManageRatingConfigurations;\n\n ngOnInit(): void {\n this.manageRatingConfigurations\n .loadRatingConfigurations(this.entityConfiguration.id)\n .then(() => {\n this.items = this.ratingConfigurationsToItems(\n this.manageRatingConfigurations.ratingConfigurations,\n );\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n onCreateClicked(): void {\n this.manageRatingConfigurations.setBlankActiveConfiguration();\n this.selectedRatingConfiguration =\n this.manageRatingConfigurations.activeRatingConfiguration || undefined;\n }\n\n private ratingConfigurationsToItems(\n ratingConfigurations: IRTSeeRatingConfiguration[],\n ): IAccordionItem[] {\n return ratingConfigurations.map((rc) => {\n return {\n label: rc.name,\n isSelected: false,\n command: (): void => {\n this.selectedRatingConfiguration = rc;\n this.onRatingConfigurationClicked.emit(rc);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-rating-configurations-list\">\n <p-divider></p-divider>\n <p>Rating Configurations</p>\n @if (selectedRatingConfiguration) {\n <rtsee-manage-rating-configuration [manageRatingConfigurations]=\"manageRatingConfigurations\"\n [ratingConfiguration]=\"selectedRatingConfiguration\"\n ></rtsee-manage-rating-configuration>\n } @else {\n <div class=\"rtsee-rating-configurations-controls\">\n <p-button label=\"Create\" (click)=\"onCreateClicked()\"></p-button>\n </div>\n <div class=\"rtsee-rating-configurations-list-items\">\n <p-menu [model]=\"items\" />\n </div>\n }\n</div>\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { Button } from \"primeng/button\";\nimport { RTSeeManageEntityConfigurations } from \"@rtsee/utilities-ui\";\nimport { FormComponent } from \"../../../common/components/forms/form/form.component\";\nimport { RatingConfigurationsListComponent } from \"../rating-configurations-list/rating-configurations-list.component\";\n\n@Component({\n selector: \"rtsee-manage-entity-configuration\",\n standalone: true,\n imports: [\n Button,\n FormComponent,\n RatingConfigurationsListComponent,\n ],\n templateUrl: \"./manage-entity-configuration.component.html\",\n})\nexport class ManageEntityConfigurationComponent implements OnInit {\n @Input() manageEntityConfigurations!: RTSeeManageEntityConfigurations;\n\n ngOnInit() {\n if (!this.manageEntityConfigurations.activeEntityConfiguration) {\n this.manageEntityConfigurations.setBlankActiveEntityConfiguration();\n }\n\n if (!this.manageEntityConfigurations.activeEntityConfigurationForm) {\n throw new Error(`Active entityConfig form should be selected`);\n }\n }\n\n submit(): void {\n if (!this.manageEntityConfigurations.activeEntityConfigurationForm) {\n return;\n }\n\n this.manageEntityConfigurations.activeEntityConfigurationForm.submit();\n }\n\n cancel(): void {\n this.manageEntityConfigurations.flushActiveEntityConfiguration();\n }\n}\n","<div class=\"rtsee-manage-entity-configuration\">\n <div class=\"rtsee-manage-entity-configuration-info rtsee-form-container\">\n @if (manageEntityConfigurations.activeEntityConfigurationForm) {\n <rtsee-form [form]=\"manageEntityConfigurations.activeEntityConfigurationForm\" (formSubmit)=\"submit()\">\n <p-button type=\"submit\"\n [label]=\"'Save'\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageEntityConfigurations.saveInProgress\"\n />\n </rtsee-form>\n\n @if (manageEntityConfigurations.activeEntityConfiguration && manageEntityConfigurations.activeEntityConfiguration.id) {\n <rtsee-rating-configurations-list [entityConfiguration]=\"manageEntityConfigurations.activeEntityConfiguration\"\n [manageRatingConfigurations]=\"manageEntityConfigurations.activeEntityConfiguration.manageRatingConfigurations\"\n ></rtsee-rating-configurations-list>\n }\n }\n </div>\n</div>\n","import { Component, Input, output, OutputEmitterRef } from '@angular/core';\nimport { IAccordionItem } from '../../rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nimport { RTSeeEntity, RTSeeManageEntities } from '@rtsee/utilities-ui';\nimport { Menu } from 'primeng/menu';\n\n@Component({\n selector: 'rtsee-entities-list',\n imports: [Menu],\n templateUrl: './entities-list.component.html',\n})\nexport class EntitiesListComponent {\n items: IAccordionItem[] = [];\n selectedEntity?: RTSeeEntity;\n onEntityClicked: OutputEmitterRef<RTSeeEntity> = output<RTSeeEntity>();\n\n @Input() manageEntities!: RTSeeManageEntities;\n\n ngOnInit(): void {\n this.manageEntities\n .loadEntities()\n .then(() => {\n this.items = this.entitiesToItems(this.manageEntities.entities);\n })\n .catch((err: any) => {\n console.log(err);\n });\n }\n\n private entitiesToItems(\n entityConfigurations: RTSeeEntity[],\n ): IAccordionItem[] {\n console.log('entityConfigsToItems', entityConfigurations);\n return entityConfigurations.map((et) => {\n return {\n label: et.name,\n isSelected: false,\n command: (): void => {\n this.selectedEntity = et;\n this.onEntityClicked.emit(et);\n },\n };\n });\n }\n}\n","<div class=\"rtsee-entities-list\">\n <p-menu [model]=\"items\" />\n</div>\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { Button } from \"primeng/button\";\nimport { RTSeeManageEntities } from \"@rtsee/utilities-ui\";\nimport { FormComponent } from \"../../../common/components/forms/form/form.component\";\n\n@Component({\n selector: \"rtsee-manage-entity\",\n standalone: true,\n imports: [\n Button,\n FormComponent\n ],\n templateUrl: \"./manage-entity.component.html\"\n})\nexport class ManageEntityComponent implements OnInit {\n @Input() manageEntities!: RTSeeManageEntities;\n\n ngOnInit() {\n if (!this.manageEntities.activeEntity) {\n this.manageEntities.setBlankActiveEntity();\n }\n\n if (!this.manageEntities.activeEntityForm) {\n throw new Error(`Active entity form should be selected`);\n }\n }\n\n submit(): void {\n if (!this.manageEntities.activeEntityForm) {\n return;\n }\n\n this.manageEntities.activeEntityForm.submit();\n }\n\n cancel(): void {\n this.manageEntities.flushActiveEntity();\n }\n}\n","<div class=\"rtsee-manage-entity\">\n @if (manageEntities.activeEntityForm) {\n <rtsee-form [form]=\"manageEntities.activeEntityForm\" (formSubmit)=\"submit()\">\n <p-button type=\"submit\"\n label=\"Submit\"\n [disabled]=\"manageEntities.saveInProgress\"\n ></p-button>\n <p-button [label]=\"'Cancel'\"\n severity=\"secondary\"\n (click)=\"cancel()\"\n [disabled]=\"manageEntities.saveInProgress\"\n />\n </rtsee-form>\n }\n</div>\n","import { Component } from '@angular/core';\nimport { Router, RouterLink } from '@angular/router';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { SignInForm, TypedReactiveForm } from '../types/auth-form.type';\nimport { NgOptimizedImage } from '@angular/common';\nimport { RTSeeAuthService } from '../services/auth.service';\nimport { AuthEndpointsKeys, RTSeeAuthConfiguration } from '@rtsee/auth';\nimport { ButtonModule } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Password } from 'primeng/password';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Checkbox } from 'primeng/checkbox';\nimport { Message } from 'primeng/message';\nimport { ProgressSpinner } from 'primeng/progressspinner';\nimport { ServerSideError } from '../../../common/interfaces';\nimport { RTSeeTextLabelKeys } from '@rtsee/core';\n\n@Component({\n selector: 'rtsee-sign-in',\n templateUrl: './sign-in.component.html',\n imports: [\n NgOptimizedImage,\n ReactiveFormsModule,\n RouterLink,\n ButtonModule,\n InputGroup,\n InputText,\n Password,\n FloatLabel,\n Checkbox,\n Message,\n ProgressSpinner,\n ],\n standalone: true,\n})\nexport class SignInComponent {\n public readonly signInForm: FormGroup<TypedReactiveForm<SignInForm>> =\n this.formBuilder.group<TypedReactiveForm<SignInForm>>({\n username: this.formBuilder.nonNullable.control(\n {\n value: '',\n disabled: false,\n },\n {\n validators: [Validators.required, Validators.email],\n },\n ),\n password: this.formBuilder.nonNullable.control(\n {\n value: '',\n disabled: false,\n },\n { validators: [Validators.required] },\n ),\n remember: this.formBuilder.nonNullable.control(false),\n });\n public readonly authConfiguration: RTSeeAuthConfiguration;\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n public loadInProgress: boolean = false;\n public serverSideError: string = '';\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly router: Router,\n public authService: RTSeeAuthService,\n ) {\n this.authConfiguration = this.authService.rtseeAuth.authConfiguration;\n }\n\n get usernameField(): FormControl<string> {\n return this.signInForm.get('username') as FormControl<string>;\n }\n\n get passwordField(): FormControl<string> {\n return this.signInForm.get('password') as FormControl<string>;\n }\n\n get rememberField(): FormControl<boolean> {\n return this.signInForm.get('remember') as FormControl<boolean>;\n }\n\n public login(): void {\n if (this.signInForm.valid) {\n this.disableFormFields();\n this.authService.signIn(this.signInForm.getRawValue()).subscribe({\n next: () => {\n void this.router.navigate(\n this.authService.rtseeAuth.authConfiguration.defaultPostLoginRoute,\n );\n this.enableFormFields();\n setTimeout(() => {\n window.location.reload();\n }, 100);\n },\n error: (error: ServerSideError) => {\n console.log(error);\n this.showServerSideErrorForXSeconds(error.error.message);\n this.enableFormFields();\n },\n complete: () => {\n this.enableFormFields();\n },\n });\n } else {\n this.signInForm.markAsTouched(); // this does not work after switching to \"nonNullable\" form fields\n }\n }\n\n private showServerSideErrorForXSeconds(message: string, x: number = 3): void {\n this.serverSideError = message;\n\n setTimeout(() => {\n this.serverSideError = '';\n }, x * 1000); // we can do pop-up message instead\n }\n\n private disableFormFields(): void {\n this.loadInProgress = true;\n this.usernameField.disable();\n this.passwordField.disable();\n this.rememberField.disable();\n }\n\n private enableFormFields(): void {\n this.loadInProgress = false;\n this.usernameField.enable(); // fuck me, but [disabled]=\"loadInProgress\" on the field no longer works :(\n this.passwordField.enable();\n this.rememberField.enable();\n }\n\n protected readonly RTSeeTextLabelKeys = RTSeeTextLabelKeys;\n}\n","<div class=\"auth-container rtsee-form-container\" >\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">{{ authService.rtseeAuth.labels[RTSeeTextLabelKeys.SIGN_IN_FORM_HEADER] }}</h2>\n <p class=\"auth-title-description\">{{ authService.rtseeAuth.labels[RTSeeTextLabelKeys.SIGN_IN_TEXT_SUBHEADER] }}</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"signInForm\" (ngSubmit)=\"login()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup >\n <p-floatlabel variant=\"on\">\n <input id=\"user-email\"\n pInputText\n [formControl]=\"usernameField\"\n />\n <label for=\"user-email\">Email</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!usernameField.valid && usernameField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Email is invalid</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"user-password\"\n [formControl]=\"passwordField\"\n [feedback]=\"false\"\n />\n <label for=\"user-password\">Password</label>\n </p-floatlabel>\n </p-inputgroup>\n\n @if (!passwordField.valid && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password is required</p-message>\n }\n @if (serverSideError) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{serverSideError}}</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-checkbox inputId=\"remember\" [binary]=\"true\" [formControl]=\"rememberField\" />\n <label for=\"remember\" class=\"ml-2\">\n <span>\n {{authService.rtseeAuth.labels[RTSeeTextLabelKeys.REMEMBER_ME_CHECKBOX_LABEL] }}\n </span>\n </label>\n </div>\n <div class=\"rtsee-form-field-container\">\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.FORGOT_PASSWORD)\"\n class=\"auth-deep-blue-sm-medium\"\n >Forgot password?</a>\n </div>\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Sign In\"\n [disabled]=\"loadInProgress\"\n />\n @if (loadInProgress) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n <p class=\"rtsee-form-label\">\n <span>Don't have an account?</span>\n <span> </span>\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_UP)\"\n class=\"auth-deep-blue-sm-medium\"\n >Create one!</a>\n </p>\n</div>\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UtilsService {\n constructor() {}\n\n public static getKeysAsValueObject<T extends object>(\n obj: T,\n ): Record<string, string> {\n // object was {}\n if (obj) {\n return Object.keys(obj).reduce<Record<string, string>>(\n (result, value) => {\n result[value] = value;\n return result;\n },\n {},\n );\n }\n return {};\n }\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport class ConfirmPasswordValidator {\n /**\n * Check matching password with confirm password\n * @param control AbstractControl\n */\n static MatchFields(control: AbstractControl): ValidationErrors | null {\n const passwordField: AbstractControl | null = control.get('password');\n const passwordConfirmationField: AbstractControl | null = control.get(\n 'passwordConfirmation',\n );\n\n if (!passwordField || !passwordConfirmationField) {\n throw new Error('MatchFieldsValidator unable to find password controls!');\n }\n\n const password: string = passwordField.getRawValue() as string;\n const passwordConfirmation: string =\n passwordConfirmationField.getRawValue() as string;\n\n if (password !== passwordConfirmation) {\n return {\n confirmPassword: true,\n };\n }\n\n return null;\n }\n}\n","import { Component } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { SignUpForm, TypedReactiveForm } from '../types/auth-form.type';\nimport { UtilsService } from '../services/utils.service';\nimport { ConfirmPasswordValidator } from '../validators/form-fields-validators';\nimport { Router, RouterLink } from '@angular/router';\nimport { NgOptimizedImage } from '@angular/common';\nimport { RTSeeAuthService } from '../services/auth.service';\nimport { IRtseeSignUpRequestOptions, IRTSeeSignUpResponse } from '@rtsee/auth';\nimport { RTSeeAuthConfiguration, AuthEndpointsKeys } from '@rtsee/auth';\nimport { ButtonModule } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { Password } from 'primeng/password';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Checkbox } from 'primeng/checkbox';\nimport { Message } from 'primeng/message';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\n@Component({\n selector: 'rtsee-sign-up',\n templateUrl: './sign-up.component.html',\n imports: [\n NgOptimizedImage,\n ReactiveFormsModule,\n RouterLink,\n ButtonModule,\n InputGroup,\n InputText,\n Password,\n FloatLabel,\n Checkbox,\n Message,\n ProgressSpinner,\n ],\n standalone: true,\n})\nexport class SignUpComponent {\n public readonly signUpForm: FormGroup<TypedReactiveForm<SignUpForm>>;\n public readonly signUpFormKeys: Record<keyof SignUpForm, string>;\n public readonly authConfiguration: RTSeeAuthConfiguration;\n public loadInProgress: boolean = false;\n public successMessage: string = '';\n public errorMessage: string = '';\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly router: Router,\n private authService: RTSeeAuthService,\n ) {\n this.signUpForm = this.formBuilder.group<TypedReactiveForm<SignUpForm>>(\n {\n email: this.formBuilder.control('', {\n validators: [Validators.required, Validators.email],\n }),\n password: this.formBuilder.control('', {\n validators: [Validators.required, Validators.minLength(6)],\n }),\n passwordConfirmation: this.formBuilder.control('', {\n validators: [Validators.required, Validators.minLength(6)],\n }),\n terms: this.formBuilder.control(false, {\n nonNullable: true,\n validators: [Validators.requiredTrue],\n }),\n },\n { validators: [ConfirmPasswordValidator.MatchFields] },\n );\n this.signUpFormKeys = UtilsService.getKeysAsValueObject(\n this.signUpForm.getRawValue(),\n );\n this.authConfiguration = this.authService.rtseeAuth.authConfiguration;\n }\n\n get emailField(): FormControl<string> {\n return this.signUpForm.get('email') as FormControl<string>;\n }\n\n get passwordField(): FormControl<string> {\n return this.signUpForm.get('password') as FormControl<string>;\n }\n\n get passwordConfirmationField(): FormControl<string> {\n return this.signUpForm.get('passwordConfirmation') as FormControl<string>;\n }\n\n get termsField(): FormControl<boolean> {\n return this.signUpForm.get('terms') as FormControl<boolean>;\n }\n\n public signUp(): void {\n this.signUpForm.markAllAsTouched();\n\n if (this.signUpForm.valid) {\n this.loadInProgress = true;\n this.errorMessage = '';\n this.successMessage = '';\n const formValues: SignUpForm = this.signUpForm.getRawValue();\n\n this.authService\n .signUp({\n email: formValues.email!,\n password: formValues.password!,\n terms: formValues.terms!,\n } as IRtseeSignUpRequestOptions)\n .subscribe({\n next: (response: IRTSeeSignUpResponse) => {\n this.loadInProgress = false;\n this.successMessage =\n 'Registration successful! You can now sign in.';\n void this.router.navigate(\n this.authConfiguration.getRoutePathSplit(\n this.AuthEndpointsKeys.SIGN_IN,\n ),\n );\n console.log('User registered successfully', response);\n },\n error: (error) => {\n this.loadInProgress = false;\n this.errorMessage =\n error.error?.message ||\n 'Error during registration. Please try again.';\n console.error('Error during registration', error);\n },\n });\n }\n }\n\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n}\n","<div class=\"auth-container rtsee-form-container\">\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">Personal Account Registration</h2>\n <p class=\"auth-title-description\">Create your personal account to view stories</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"signUpForm\" (ngSubmit)=\"signUp()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"sign-up-email\"\n pInputText\n [formControl]=\"emailField\"\n [class.p-invalid]=\"emailField.invalid && emailField.touched\"\n />\n <label for=\"sign-up-email\">Email</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (emailField.hasError('required') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Email is required</p-message>\n }\n @if (emailField.hasError('email') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Please enter a valid email address</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"sign-up-password\"\n [formControl]=\"passwordField\"\n [feedback]=\"false\"\n [styleClass]=\"(passwordField.invalid && passwordField.touched) || (signUpForm.hasError('confirmPassword') && passwordField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"sign-up-password\">Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (passwordField.hasError('required') && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password is required</p-message>\n }\n @if (passwordField.hasError('minlength') && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password must be at least 6 characters long</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"confirm-password\"\n [formControl]=\"passwordConfirmationField\"\n [feedback]=\"false\"\n [styleClass]=\"(passwordConfirmationField.invalid && passwordConfirmationField.touched) || (signUpForm.hasError('confirmPassword') && passwordConfirmationField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"confirm-password\">Confirm Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (passwordConfirmationField.hasError('required') && passwordConfirmationField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password confirmation is required</p-message>\n }\n @if (passwordConfirmationField.hasError('minlength') && passwordConfirmationField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password confirmation must be at least 6 characters long</p-message>\n }\n @if (signUpForm.hasError('confirmPassword') && passwordConfirmationField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Passwords do not match</p-message>\n }\n </div>\n\n @if (successMessage) {\n <p-message class=\"rtsee-form-success-message\"\n severity=\"success\"\n variant=\"simple\"\n size=\"small\"\n >{{ successMessage }}</p-message>\n }\n\n @if (errorMessage) {\n <p-message class=\"rtsee-form-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ errorMessage }}</p-message>\n }\n <div class=\"rtsee-form-field-container\">\n <p-checkbox inputId=\"terms\" [binary]=\"true\" [formControl]=\"termsField\" />\n <label for=\"terms\" class=\"ml-2\">I agree to the <a href=\"#\" [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.PRIVACY_POLICY)\" class=\"auth-deep-blue-sm-medium\">terms of use</a></label>\n @if (termsField.hasError('required') && termsField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >You must accept the terms and conditions</p-message>\n }\n </div>\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Sign Up\"\n [disabled]=\"loadInProgress\"\n />\n @if (loadInProgress) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n\n <p class=\"rtsee-form-label\">\n <span>Already have an account?</span>\n <span> </span>\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"auth-deep-blue-sm-medium\"\n >Sign In</a>\n </p>\n</div>\n","import { Component } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { UtilsService } from '../services/utils.service';\nimport { ForgotPasswordForm, TypedReactiveForm } from '../types/auth-form.type';\nimport { Router, RouterLink } from '@angular/router';\nimport { RTSeeAuthConfiguration, AuthEndpointsKeys } from '@rtsee/auth';\nimport {\n RTSeeAuthService,\n IRtseeForgotPasswordRequestOptions,\n IRTSeeForgotPasswordResponse,\n} from '../services/auth.service';\nimport { NgOptimizedImage } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Message } from 'primeng/message';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\n@Component({\n selector: 'rtsee-forgot-password',\n templateUrl: './forgot-password.component.html',\n imports: [\n NgOptimizedImage,\n ReactiveFormsModule,\n RouterLink,\n ButtonModule,\n InputGroup,\n InputText,\n FloatLabel,\n Message,\n ProgressSpinner,\n ],\n standalone: true,\n})\nexport class ForgotPasswordComponent {\n public isLoading: boolean = false;\n public successMessage: string = '';\n public errorMessage: string = '';\n public readonly emailForm: FormGroup<TypedReactiveForm<ForgotPasswordForm>>;\n public readonly forgotPasswordFormKeys: Record<\n keyof ForgotPasswordForm,\n string\n >;\n authConfiguration: RTSeeAuthConfiguration;\n\n constructor(\n private readonly formBuilder: FormBuilder,\n private readonly router: Router,\n private authService: RTSeeAuthService,\n ) {\n this.emailForm = this.formBuilder.group<\n TypedReactiveForm<ForgotPasswordForm>\n >({\n email: this.formBuilder.nonNullable.control('', {\n validators: [Validators.required, Validators.email],\n }),\n });\n this.forgotPasswordFormKeys = UtilsService.getKeysAsValueObject(\n this.emailForm.getRawValue(),\n );\n this.authConfiguration = this.authService.rtseeAuth.authConfiguration;\n }\n\n get emailField(): FormControl<string> {\n return this.emailForm.get('email') as FormControl<string>;\n }\n\n public submitEmail(): void {\n this.emailForm.markAllAsTouched();\n\n if (this.emailForm.valid) {\n this.isLoading = true;\n this.errorMessage = '';\n this.successMessage = '';\n const email = this.emailForm.getRawValue().email;\n\n this.authService\n .forgotPassword({\n email\n } as IRtseeForgotPasswordRequestOptions)\n .subscribe({\n next: (response: IRTSeeForgotPasswordResponse) => {\n this.isLoading = false;\n this.successMessage =\n response.message || 'Password reset email sent successfully!';\n console.log('Password reset email sent successfully', response);\n void this.router.navigate(\n this.authConfiguration.getRoutePathSplit(\n this.AuthEndpointsKeys.SIGN_IN,\n ),\n );\n },\n error: (error) => {\n this.isLoading = false;\n this.errorMessage =\n error.error?.message ||\n 'Error sending password reset email. Please try again.';\n console.error('Error sending password reset email', error);\n },\n });\n }\n }\n\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n}\n","<div class=\"auth-container rtsee-form-container\">\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">Password Recovery</h2>\n <p class=\"auth-title-description\">Enter your email address to receive password reset instructions</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"emailForm\" (ngSubmit)=\"submitEmail()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <input id=\"forgot-password-email\"\n pInputText\n [formControl]=\"emailField\"\n [class.p-invalid]=\"emailField.invalid && emailField.touched\"\n />\n <label for=\"forgot-password-email\">Email</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (emailField.hasError('required') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Email is required</p-message>\n }\n @if (emailField.hasError('email') && emailField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Please enter a valid email address</p-message>\n }\n </div>\n\n @if (successMessage) {\n <p-message class=\"rtsee-form-success-message\"\n severity=\"success\"\n variant=\"simple\"\n size=\"small\"\n >{{ successMessage }}</p-message>\n }\n\n @if (errorMessage) {\n <p-message class=\"rtsee-form-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ errorMessage }}</p-message>\n }\n\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Send\"\n [disabled]=\"isLoading\"\n />\n @if (isLoading) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n\n <p class=\"rtsee-form-label\">\n <span>Remember your password?</span>\n <span> </span>\n <a href=\"#\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"auth-deep-blue-sm-medium\"\n >Sign In</a>\n </p>\n</div>\n","export enum FormErrorKey {\n required = 'required',\n email = 'email',\n minLength = 'minlength',\n maxLength = 'maxlength',\n requiredLength = 'requiredLength',\n passwordsMismatch = 'passwordsMismatch',\n}\n","import { Component, OnInit } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n ValidatorFn,\n Validators,\n ValidationErrors,\n} from '@angular/forms';\nimport { ResetPasswordForm, TypedReactiveForm } from '../types/auth-form.type';\nimport { UtilsService } from '../services/utils.service';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FormErrorKey } from '../../enums/form.enum';\nimport { COMMON_CONSTANTS } from '../../constans/common.const';\nimport {\n RTSeeAuthService,\n IRtseeResetPasswordRequestOptions,\n IRTSeeResetPasswordResponse,\n} from '../services/auth.service';\nimport { RTSeeAuthConfiguration, AuthEndpointsKeys } from '@rtsee/auth';\nimport { NgOptimizedImage } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { Password } from 'primeng/password';\nimport { FloatLabel } from 'primeng/floatlabel';\nimport { Message } from 'primeng/message';\nimport { ProgressSpinner } from 'primeng/progressspinner';\n\n@Component({\n selector: 'rtsee-reset-password',\n templateUrl: './reset-password.component.html',\n imports: [\n NgOptimizedImage,\n ReactiveFormsModule,\n ButtonModule,\n InputGroup,\n Password,\n FloatLabel,\n Message,\n ProgressSpinner,\n ],\n standalone: true,\n})\nexport class ResetPasswordComponent implements OnInit {\n public isLoading: boolean = false;\n public successMessage: string = '';\n public errorMessage: string = '';\n public resetPasswordForm: FormGroup<TypedReactiveForm<ResetPasswordForm>>;\n public passwordFormKeys: Record<keyof ResetPasswordForm, string>;\n public hidePassword: Record<keyof ResetPasswordForm, boolean> = {\n password: true,\n passwordConfirm: true,\n };\n private token!: string;\n authConfiguration: RTSeeAuthConfiguration;\n\n constructor(\n private formBuilder: FormBuilder,\n private route: ActivatedRoute,\n private readonly router: Router,\n private authService: RTSeeAuthService,\n ) {\n this.resetPasswordForm = this.formBuilder.group(\n {\n password: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(COMMON_CONSTANTS.minPasswordLength),\n ],\n nonNullable: true,\n }),\n passwordConfirm: this.formBuilder.control('', {\n validators: [\n Validators.required,\n Validators.minLength(COMMON_CONSTANTS.minPasswordLength),\n ],\n nonNullable: true,\n }),\n },\n { validators: [this.passwordMatchValidator()] },\n );\n this.passwordFormKeys = UtilsService.getKeysAsValueObject(\n this.resetPasswordForm.value,\n );\n this.authConfiguration = this.authService.authConfiguration;\n }\n\n get passwordField(): FormControl<string> {\n return this.resetPasswordForm.get('password') as FormControl<string>;\n }\n\n get passwordConfirmField(): FormControl<string> {\n return this.resetPasswordForm.get('passwordConfirm') as FormControl<string>;\n }\n\n public ngOnInit(): void {\n this.token = this.route.snapshot.params['token'];\n }\n\n public resetPassword(): void {\n this.resetPasswordForm.markAllAsTouched();\n\n if (this.resetPasswordForm.valid) {\n this.isLoading = true;\n this.errorMessage = '';\n this.successMessage = '';\n const formValues = this.resetPasswordForm.getRawValue();\n\n this.authService\n .resetPassword({\n password: formValues.password,\n passwordConfirm: formValues.passwordConfirm,\n token: this.token,\n } as IRtseeResetPasswordRequestOptions)\n .subscribe({\n next: (response: IRTSeeResetPasswordResponse) => {\n this.isLoading = false;\n this.successMessage =\n response.message || 'Password reset successfully!';\n console.log('Password reset successfully', response);\n void this.router.navigate(\n this.authConfiguration.getRoutePathSplit(\n this.AuthEndpointsKeys.SIGN_IN,\n ),\n );\n },\n error: (error) => {\n this.isLoading = false;\n this.errorMessage =\n error.error?.message ||\n 'Error resetting password. Please try again.';\n console.error('Error resetting password', error);\n },\n });\n }\n }\n\n private passwordMatchValidator(): ValidatorFn {\n // @ts-ignore\n return (\n form: FormGroup<TypedReactiveForm<ResetPasswordForm>>,\n ): ValidationErrors | null => {\n const password = form.value.password;\n const passwordConfirm = form.value.passwordConfirm;\n if (password !== passwordConfirm) {\n if (form.controls.password.valid) {\n form.controls.password.setErrors({\n [FormErrorKey.passwordsMismatch]: true,\n });\n }\n if (form.controls.passwordConfirm.valid) {\n form.controls.passwordConfirm.setErrors({\n [FormErrorKey.passwordsMismatch]: true,\n });\n }\n return { [FormErrorKey.passwordsMismatch]: true };\n }\n if (form.controls.password.hasError(FormErrorKey.passwordsMismatch)) {\n form.controls.password.setErrors(null);\n }\n if (\n form.controls.passwordConfirm.hasError(FormErrorKey.passwordsMismatch)\n ) {\n form.controls.passwordConfirm.setErrors(null);\n }\n return null;\n };\n }\n\n protected readonly FormErrorKey = FormErrorKey;\n protected readonly AuthEndpointsKeys = AuthEndpointsKeys;\n}\n","<div class=\"auth-container rtsee-form-container\">\n <img [ngSrc]=\"authConfiguration.appLogo\"\n alt=\"Company Logo\"\n class=\"auth-logo\"\n height=\"37\"\n width=\"37\"\n />\n <h2 class=\"auth-title\">Password Reset</h2>\n <p class=\"auth-title-description\">Please enter a new password for your account.</p>\n\n <form class=\"auth-form rtsee-form\" [formGroup]=\"resetPasswordForm\" (ngSubmit)=\"resetPassword()\">\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"new-password\"\n [formControl]=\"passwordField\"\n [feedback]=\"false\"\n [class]=\"(passwordField.invalid && passwordField.touched) || (resetPasswordForm.hasError(FormErrorKey.passwordsMismatch) && passwordField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"new-password\">New Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!passwordField.valid && passwordField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password is required</p-message>\n }\n </div>\n <div class=\"rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-password id=\"confirm-password\"\n [formControl]=\"passwordConfirmField\"\n [feedback]=\"false\"\n [class]=\"(passwordConfirmField.invalid && passwordConfirmField.touched) || (resetPasswordForm.hasError(FormErrorKey.passwordsMismatch) && passwordConfirmField.touched) ? 'p-invalid' : ''\"\n />\n <label for=\"confirm-password\">Confirm Password</label>\n </p-floatlabel>\n </p-inputgroup>\n @if (!passwordConfirmField.valid && passwordConfirmField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Password confirmation is required</p-message>\n }\n @if (resetPasswordForm.hasError(FormErrorKey.passwordsMismatch) && passwordConfirmField.touched) {\n <p-message class=\"rtsee-form-field-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >Passwords do not match</p-message>\n }\n </div>\n\n @if (successMessage) {\n <p-message class=\"rtsee-form-success-message\"\n severity=\"success\"\n variant=\"simple\"\n size=\"small\"\n >{{ successMessage }}</p-message>\n }\n\n @if (errorMessage) {\n <p-message class=\"rtsee-form-error-message\"\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n >{{ errorMessage }}</p-message>\n }\n\n <div class=\"rtsee-form-submit-container\">\n <p-button type=\"submit\"\n label=\"Reset Password\"\n [disabled]=\"isLoading\"\n />\n @if (isLoading) {\n <p-progress-spinner class=\"rtsee-progress-spinner rtsee-progress-spinner-sm\"></p-progress-spinner>\n }\n </div>\n </form>\n\n <p class=\"rtsee-form-label\">\n <span>Remember your password?</span>\n <span> </span>\n <a href=\"#\" class=\"auth-deep-blue-sm-medium\">Sign In</a>\n </p>\n</div>\n","import { Component } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n selector: 'rtsee-privacy-policy',\n templateUrl: './privacy-policy.component.html',\n styleUrls: ['./privacy-policy.component.scss'],\n imports: [ButtonModule, MessageModule],\n standalone: true,\n})\nexport class PrivacyPolicyComponent {}\n","<div class=\"privacy-policy-container\">\n <div class=\"policy-card\">\n <div class=\"header-section\">\n <div class=\"header-content\">\n <div class=\"flex justify-content-center align-items-center\">\n <h1>Terms of Use & Privacy Policy</h1>\n </div>\n </div>\n </div>\n\n <div class=\"content-section\">\n <p-message severity=\"info\" [closable]=\"false\" class=\"info-banner\">\n <ng-template pTemplate>\n <div class=\"p-message-content\">\n <p class=\"last-updated\"><strong>Last Updated:</strong> December 2024</p>\n <p>By using our services, you agree to the terms and conditions outlined in this document. Please read this Privacy Policy and Terms of Use carefully before using our platform.</p>\n </div>\n </ng-template>\n </p-message>\n\n <h2>1. Acceptance of Terms</h2>\n <p>By accessing and using this service, you accept and agree to be bound by the terms and provision of this agreement. If you do not agree to abide by the above, please do not use this service.</p>\n\n <h2>2. Privacy Policy</h2>\n\n <h3>2.1 Information We Collect</h3>\n <p>We collect information you provide directly to us, such as when you create an account, use our services, or contact us for support. This may include:</p>\n <ul>\n <li><strong>Personal Information:</strong> Name, email address, phone number, and other contact details</li>\n <li><strong>Account Information:</strong> Username, password, and profile information</li>\n <li><strong>Usage Data:</strong> Information about how you use our services, including pages visited, time spent, and features used</li>\n <li><strong>Device Information:</strong> IP address, browser type, operating system, and device identifiers</li>\n <li><strong>Cookies and Tracking:</strong> We use cookies and similar technologies to enhance your experience</li>\n </ul>\n\n <h3>2.2 How We Use Your Information</h3>\n <p>We use the information we collect to:</p>\n <ul>\n <li>Provide, maintain, and improve our services</li>\n <li>Process transactions and send related information</li>\n <li>Send technical notices, updates, security alerts, and support messages</li>\n <li>Respond to your comments, questions, and requests</li>\n <li>Monitor and analyze trends, usage, and activities</li>\n <li>Personalize and improve your experience</li>\n <li>Detect, investigate, and prevent fraudulent transactions and other illegal activities</li>\n </ul>\n\n <h3>2.3 Information Sharing and Disclosure</h3>\n <p>We do not sell, trade, or otherwise transfer your personal information to third parties without your consent, except in the following circumstances:</p>\n <ul>\n <li><strong>Service Providers:</strong> We may share information with trusted third-party service providers who assist us in operating our platform</li>\n <li><strong>Legal Requirements:</strong> We may disclose information when required by law or to protect our rights and safety</li>\n <li><strong>Business Transfers:</strong> In connection with any merger, sale of assets, or acquisition of all or a portion of our business</li>\n <li><strong>Consent:</strong> We may share information with your explicit consent</li>\n </ul>\n\n <h3>2.4 Data Security</h3>\n <p>We implement appropriate technical and organizational security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction. However, no method of transmission over the internet or electronic storage is 100% secure.</p>\n\n <h3>2.5 Data Retention</h3>\n <p>We retain your personal information for as long as necessary to provide our services and fulfill the purposes outlined in this privacy policy, unless a longer retention period is required or permitted by law.</p>\n\n <h3>2.6 Your Rights</h3>\n <p>Depending on your location, you may have certain rights regarding your personal information, including:</p>\n <ul>\n <li>The right to access and receive a copy of your personal information</li>\n <li>The right to rectify or update your personal information</li>\n <li>The right to erase your personal information</li>\n <li>The right to restrict or object to the processing of your personal information</li>\n <li>The right to data portability</li>\n <li>The right to withdraw consent at any time</li>\n </ul>\n\n <h2>3. Terms of Service</h2>\n\n <h3>3.1 User Accounts</h3>\n <p>To access certain features of our service, you may be required to create an account. You are responsible for:</p>\n <ul>\n <li>Maintaining the confidentiality of your account credentials</li>\n <li>All activities that occur under your account</li>\n <li>Notifying us immediately of any unauthorized use of your account</li>\n <li>Providing accurate and up-to-date information</li>\n </ul>\n\n <h3>3.2 Acceptable Use</h3>\n <p>You agree not to use our service for any unlawful purpose or any purpose prohibited under this clause. You may not use our service in any manner that could damage, disable, overburden, or impair our servers or networks.</p>\n\n <h3>3.3 Prohibited Activities</h3>\n <p>The following activities are prohibited:</p>\n <ul>\n <li>Violating any applicable laws or regulations</li>\n <li>Transmitting or procuring the sending of any unsolicited or unauthorized advertising</li>\n <li>Attempting to gain unauthorized access to any portion of our service</li>\n <li>Interfering with or disrupting the service or servers connected to the service</li>\n <li>Using any automated system to access the service for any purpose</li>\n <li>Impersonating any person or entity or misrepresenting your affiliation with a person or entity</li>\n </ul>\n\n <h3>3.4 Intellectual Property</h3>\n <p>The service and its original content, features, and functionality are and will remain the exclusive property of our company and its licensors. The service is protected by copyright, trademark, and other laws.</p>\n\n <h3>3.5 Termination</h3>\n <p>We may terminate or suspend your account and bar access to the service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever, including without limitation if you breach the Terms.</p>\n\n <h3>3.6 Disclaimer</h3>\n <p>The information on this service is provided on an \"as is\" basis. To the fullest extent permitted by law, this company excludes all representations, warranties, conditions and terms relating to our service and the use of this service.</p>\n\n <h3>3.7 Limitation of Liability</h3>\n <p>In no event shall our company, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from your use of the service.</p>\n\n <h2>4. Cookies and Tracking Technologies</h2>\n <p>We use cookies and similar tracking technologies to track activity on our service and hold certain information. Cookies are files with a small amount of data which may include an anonymous unique identifier. You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent.</p>\n\n <h2>5. Third-Party Services</h2>\n <p>Our service may contain links to third-party websites or services that are not owned or controlled by us. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party websites or services.</p>\n\n <h2>6. Children's Privacy</h2>\n <p>Our service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from children under 13. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact us.</p>\n\n <h2>7. International Data Transfers</h2>\n <p>Your information may be transferred to and processed in countries other than your own. We ensure that such transfers comply with applicable data protection laws and implement appropriate safeguards to protect your personal information.</p>\n\n <h2>8. Changes to This Policy</h2>\n <p>We reserve the right to update or change our Privacy Policy and Terms of Use at any time. We will notify you of any changes by posting the new Privacy Policy and Terms of Use on this page and updating the \"Last Updated\" date.</p>\n\n <div class=\"contact-section\">\n <h2>9. Contact Information</h2>\n <p>If you have any questions about this Privacy Policy and Terms of Use, please contact us:</p>\n <ul>\n <li><strong>Email:</strong> [Your Email Address]</li>\n <li><strong>Address:</strong> [Your Company Address]</li>\n <li><strong>Phone:</strong> [Your Contact Number]</li>\n </ul>\n </div>\n\n <div class=\"footer-section\">\n <p>This document was last updated on December 2024</p>\n </div>\n </div>\n </div>\n</div>\n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { SignInComponent } from '../sign-in/sign-in.component';\nimport { SignUpComponent } from '../sign-up/sign-up.component';\nimport { ForgotPasswordComponent } from '../forgot-password/forgot-password.component';\nimport { ResetPasswordComponent } from '../reset-password/reset-password.component';\nimport { PrivacyPolicyComponent } from '../privacy-policy/privacy-policy.component';\nimport { RTSeeAuthService } from '../services/auth.service';\nimport { RTSeeAuth } from '@rtsee/auth';\nimport { AuthEndpointsKeys, DEFAULT_ROUTE_NAMES } from '@rtsee/auth';\n\n@Component({\n selector: 'rtsee-auth',\n templateUrl: './auth.component.html',\n imports: [\n SignInComponent,\n SignUpComponent,\n ForgotPasswordComponent,\n ResetPasswordComponent,\n PrivacyPolicyComponent,\n ],\n standalone: true,\n})\nexport class RTSeeAuthComponent implements OnInit {\n @Input() auth!: RTSeeAuth<any>;\n\n activeComponent:\n | 'reset-password'\n | 'sign-up'\n | 'sign-in'\n | 'forgot-password'\n | 'privacy-policy' = 'sign-in';\n\n constructor(public authService: RTSeeAuthService) {\n if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.SIGN_IN],\n )\n ) {\n this.activeComponent = 'sign-in';\n } else if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.SIGN_UP],\n )\n ) {\n this.activeComponent = 'sign-up';\n } else if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.FORGOT_PASSWORD],\n )\n ) {\n this.activeComponent = 'forgot-password';\n } else if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.RESET_PASSWORD].split('/')[0],\n )\n ) {\n this.activeComponent = 'reset-password';\n } else if (\n window.location.pathname.includes(\n DEFAULT_ROUTE_NAMES[AuthEndpointsKeys.PRIVACY_POLICY],\n )\n ) {\n this.activeComponent = 'privacy-policy';\n }\n }\n\n ngOnInit() {\n this.authService.init(this.auth);\n }\n}\n","<div class=\"rtsee-auth\">\n @if (authService.rtseeAuth) {\n @if (activeComponent === 'sign-in') {\n <rtsee-sign-in></rtsee-sign-in>\n }\n @if (activeComponent === 'sign-up') {\n <rtsee-sign-up></rtsee-sign-up>\n }\n @if (activeComponent === 'forgot-password') {\n <rtsee-forgot-password></rtsee-forgot-password>\n }\n @if (activeComponent === 'reset-password') {\n <rtsee-reset-password></rtsee-reset-password>\n }\n @if (activeComponent === 'privacy-policy') {\n <rtsee-privacy-policy></rtsee-privacy-policy>\n }\n }\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-rtsee-peers-list',\n templateUrl: './rtsee-peers-list.component.html',\n styleUrls: ['./rtsee-peers-list.component.scss'],\n standalone: true,\n})\nexport class RtseePeersListComponent {}\n","<p>rtsee-peers-list works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard-client',\n templateUrl: './rtsee-events-dashboard-client.component.html',\n standalone: true,\n})\nexport class RtseeEventsDashboardClientComponent {}\n","<p>rtsee-events-dashboard-client works!</p>\n","export enum MainMenuPanels {\n HOME = 'home',\n CONTACTS_SELECT = 'contacts-select',\n MANAGE_CHAT = 'manage-chat',\n}\n\nexport interface IMainMenuState {\n activePanel: MainMenuPanels;\n}\n\nexport const DEFAULT_MAIN_MENU_STATE = MainMenuPanels.HOME;\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { RTSeeMessengerSearch } from '@rtsee/messenger';\nimport { PreloaderComponent } from '../../../../../common/components/preloader/preloader.component';\nimport { NgForOf } from '@angular/common';\n\n@Component({\n selector: 'rtsee-search',\n templateUrl: './search.component.html',\n imports: [ReactiveFormsModule, PreloaderComponent, NgForOf],\n standalone: true,\n})\nexport class SearchComponent implements OnInit, OnDestroy {\n queryControl = new FormControl();\n queryCtrlSub?: Subscription;\n\n @Input() search!: RTSeeMessengerSearch;\n\n ngOnInit(): void {\n this.queryCtrlSub = this.queryControl.valueChanges\n .pipe(debounceTime(200))\n .subscribe((value: string) => this.search.onQueryChange(value));\n }\n\n ngOnDestroy() {\n if (this.queryCtrlSub) {\n this.queryCtrlSub.unsubscribe();\n }\n }\n}\n","<div class=\"rtsee-messenger-search\">\n <input type=\"text\"\n [formControl]=\"queryControl\"\n class=\"rtsee-messenger-search-input\"\n placeholder=\"Search\"/>\n</div>\n\n<div class=\"rtsee-messenger-search-results\">\n <rtsee-preloader [diameter]=\"50\"\n *ngIf=\"search.searchInProgress\"\n ></rtsee-preloader>\n <p>Chats</p>\n <div class=\"rtsee-messenger-search-results-chats\">\n <div *ngFor=\"let chat of search.results.chats\"\n class=\"rtsee-messenger-search-results-chat-wrapper\">\n <p>{{chat.name}}</p>\n </div>\n </div>\n <p>Messages</p>\n <div class=\"rtsee-messenger-search-results-messages\">\n <div *ngFor=\"let message of search.results.messages\" class=\"rtsee-messenger-search-results-message-wrapper\">\n <p>{{message.chatName || message.senderName }}</p>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { IMainMenuState, MainMenuPanels } from '../models/MainMenuState';\n\n@Component({\n selector: 'rtsee-manage-chat',\n templateUrl: './manage-chat.component.html',\n styleUrls: ['./manage-chat.component.scss'],\n standalone: true,\n})\nexport class ManageChatComponent {\n @Input() messenger!: RTSeeMessenger;\n @Input() menuState!: IMainMenuState;\n\n onInviteContactsClicked() {\n this.menuState.activePanel = MainMenuPanels.CONTACTS_SELECT;\n }\n}\n","<div class=\"rtsee-messenger-manage-chat\">\n <p>We are going to manage chat here</p>\n <button (click)=\"onInviteContactsClicked()\">Invite Contacts</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { IMainMenuState } from '../models/MainMenuState';\nimport { RTSeeMessengerSearch } from '@rtsee/messenger';\nimport { SearchComponent } from '../search/search.component';\n\n@Component({\n selector: 'rtsee-contacts-multiselect',\n templateUrl: './contacts-multiselect.component.html',\n styleUrls: ['./contacts-multiselect.component.scss'],\n imports: [SearchComponent],\n standalone: true,\n})\nexport class ContactsMultiselectComponent {\n @Input() menuState!: IMainMenuState;\n @Input() search!: RTSeeMessengerSearch;\n}\n","<div class=\"rtsee-messenger-contacts-multiselect\">\n <rtsee-search [search]=\"search\"></rtsee-search>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger, RTSeeMessengerSearch } from '@rtsee/messenger';\nimport {\n DEFAULT_MAIN_MENU_STATE,\n IMainMenuState,\n MainMenuPanels,\n} from './components/models/MainMenuState';\nimport { NgIf } from '@angular/common';\nimport { SearchComponent } from './components/search/search.component';\nimport { ManageChatComponent } from './components/manage-chat/manage-chat.component';\nimport { ContactsMultiselectComponent } from './components/contacts-multiselect/contacts-multiselect.component';\n\n@Component({\n selector: 'rtsee-main-menu',\n templateUrl: './main-menu.component.html',\n imports: [\n NgIf,\n SearchComponent,\n ManageChatComponent,\n ContactsMultiselectComponent,\n ],\n standalone: true,\n})\nexport class MainMenuComponent {\n @Input() search!: RTSeeMessengerSearch;\n @Input() messenger!: RTSeeMessenger;\n\n readonly MainMenuPanels = MainMenuPanels;\n\n state: IMainMenuState = {\n activePanel: DEFAULT_MAIN_MENU_STATE,\n };\n\n onNewGroupClicked() {\n this.state.activePanel = MainMenuPanels.CONTACTS_SELECT;\n }\n\n onNewChannelClicked() {\n this.state.activePanel = MainMenuPanels.MANAGE_CHAT;\n }\n}\n","<div class=\"rtsee-messenger-main-menu\">\n <div class=\"rtsee-messenger-main-menu-home\" *ngIf=\"state.activePanel === MainMenuPanels.HOME\">\n <ul class=\"rtsee-messenger-controls\">\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewGroupClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">people</span>\n </div>\n <span>New Group</span>\n </div>\n </li>\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewChannelClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">campaign</span>\n </div>\n <span>New Channel</span>\n </div>\n </li>\n </ul>\n <rtsee-search [search]=\"search\" ></rtsee-search>\n </div>\n\n <rtsee-manage-chat *ngIf=\"state.activePanel === MainMenuPanels.MANAGE_CHAT\"\n [messenger]=\"messenger\"\n [menuState]=\"state\"\n ></rtsee-manage-chat>\n <rtsee-contacts-multiselect [search]=\"search\"\n [menuState]=\"state\"\n *ngIf=\"state.activePanel === MainMenuPanels.CONTACTS_SELECT\"\n ></rtsee-contacts-multiselect>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'rtsee-vendors',\n templateUrl: './vendors.component.html',\n standalone: true,\n})\nexport class VendorsComponent {}\n","<p>vendors works!</p>\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { RTSeeControlsComponent } from './components/rtsee/rtsee-controls/rtsee-controls.component';\nimport { CommonModule, NgOptimizedImage } from '@angular/common';\nimport { RtseePeerComponent } from './components/rtsee-peer/rtsee-peer.component';\nimport { RtseeSoundbarComponent } from './components/rtsee-soundbar/rtsee-soundbar.component';\nimport { RtseePeersListComponent } from './components/rtsee-peers-list/rtsee-peers-list.component';\nimport { RtseeSettingsComponent } from './components/rtsee-settings/rtsee-settings.component';\nimport { MessengerComponent } from './components/rtsee-messenger/messenger/messenger.component';\nimport { ChatComponent } from './components/rtsee-messenger/chat/chat.component';\nimport { MessageComponent } from './components/rtsee-messenger/message/message.component';\nimport { ChatsListComponent } from './components/rtsee-messenger/chats-list/chats-list.component';\nimport { MessagesListComponent } from './components/rtsee-messenger/messages-list/messages-list.component';\nimport { ChatThumbnailComponent } from './components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component';\nimport { ChatInputComponent } from './components/rtsee-messenger/chat-input/chat-input.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MessengerHeaderComponent } from './components/rtsee-messenger/messenger-header/messenger-header.component';\nimport { RtseeEventsDashboardComponent } from './components/rtsee-events-dashboard/rtsee-events-dashboard.component';\nimport { RtseeEventsDashboardClientComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component';\nimport { RtseeEventsDashboardClientThumbnailComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component';\nimport { WidgetDirective } from './directives/widget.directive';\nimport { CallWidgetComponent } from './components/rtsee-messenger/message-widgets/call-widget/call-widget.component';\nimport { AutosizeModule } from 'ngx-autosize';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { MainMenuComponent } from './components/rtsee-messenger/main-menu/main-menu.component';\nimport { MessageTimeAndStatusComponent } from './components/rtsee-messenger/message/components/message-time-and-status/message-time-and-status.component';\nimport { PreloaderComponent } from './common/components/preloader/preloader.component';\nimport { FormComponent } from './common/components/forms/form/form.component';\nimport { SearchComponent } from './components/rtsee-messenger/main-menu/components/search/search.component';\nimport { ManageChatComponent } from './components/rtsee-messenger/main-menu/components/manage-chat/manage-chat.component';\nimport { ContactsMultiselectComponent } from './components/rtsee-messenger/main-menu/components/contacts-multiselect/contacts-multiselect.component';\nimport { ShaveDirective } from './directives/shave.directive';\nimport { ProfileComponent } from './components/rtsee-messenger/profile/profile.component';\nimport { EventThumbnailComponent } from './components/rtsee-events-dashboard/components/event-thumbnail/event-thumbnail.component';\nimport { RtseeEventsDashboardSessionComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-session/rtsee-events-dashboard-session.component';\nimport { RTSeeContainerComponent } from './components/rtsee-container/rtsee-container.component';\nimport { RTSeeConferenceComponent } from './components/rtsee/rtsee-conference.component';\nimport { PresentationComponent } from './components/rtsee-presentation/presentation/presentation.component';\nimport { StoryPlayerComponent } from './components/rtsee-presentation/story-player/story-player.component';\nimport { SlideComponent } from './components/rtsee-presentation/slide/slide.component';\nimport { StoryThumbnailComponent } from './components/rtsee-presentation/story-thumbnail/story-thumbnail.component';\nimport { SignUpComponent } from './components/rtsee-auth/sign-up/sign-up.component';\nimport { SignInComponent } from './components/rtsee-auth/sign-in/sign-in.component';\nimport { ForgotPasswordComponent } from './components/rtsee-auth/forgot-password/forgot-password.component';\nimport { VendorsComponent } from './components/rtsee-auth/vendors/vendors.component';\nimport { RTSeeAuthComponent } from './components/rtsee-auth/auth/auth.component';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { ResetPasswordComponent } from './components/rtsee-auth/reset-password/reset-password.component';\nimport { PresentationHeaderComponent } from './components/rtsee-presentation/presentation-header/presentation-header.component';\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { provideAnimationsAsync } from '@angular/platform-browser/animations/async';\nimport { providePrimeNG } from 'primeng/config';\nimport Aura from '@primeuix/themes/aura';\nimport { PaymentProductSnippetComponent } from './components/rtsee-messenger/payment-product-snippet/payment-product-snippet.component';\n\n@NgModule({\n providers: [\n provideAnimationsAsync(),\n providePrimeNG({\n theme: {\n preset: Aura,\n },\n }),\n ],\n declarations: [],\n imports: [\n RTSeeAuthComponent,\n VendorsComponent,\n ForgotPasswordComponent,\n SignInComponent,\n SignUpComponent,\n RtseeEventsDashboardSessionComponent,\n EventThumbnailComponent,\n ShaveDirective,\n ContactsMultiselectComponent,\n ManageChatComponent,\n CallWidgetComponent,\n WidgetDirective,\n RtseeEventsDashboardClientComponent,\n ResetPasswordComponent,\n RtseeEventsDashboardClientThumbnailComponent,\n RtseePeersListComponent,\n ChatComponent,\n MessageComponent,\n MessagesListComponent,\n ChatThumbnailComponent,\n ChatInputComponent,\n RtseeEventsDashboardComponent,\n MessengerComponent,\n RTSeeControlsComponent,\n RTSeeContainerComponent,\n RTSeeConferenceComponent,\n RtseePeerComponent,\n RtseeSoundbarComponent,\n RtseeSettingsComponent,\n MessengerHeaderComponent,\n ChatsListComponent,\n ProfileComponent,\n MainMenuComponent,\n MessageTimeAndStatusComponent,\n PreloaderComponent,\n SearchComponent,\n PresentationComponent,\n StoryPlayerComponent,\n SlideComponent,\n StoryThumbnailComponent,\n PresentationHeaderComponent,\n PaymentProductSnippetComponent,\n CommonModule,\n ReactiveFormsModule,\n AutosizeModule,\n InfiniteScrollModule,\n FormsModule,\n NgOptimizedImage,\n RouterLink,\n RouterLinkActive,\n NgxCaptchaModule,\n FormComponent,\n ],\n exports: [\n RTSeeConferenceComponent,\n MessengerComponent,\n RtseeEventsDashboardComponent,\n RTSeeContainerComponent,\n PresentationComponent,\n RTSeeAuthComponent,\n PaymentProductSnippetComponent,\n FormComponent,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class RTSeeModule {}\n","/*\n * Public API Surface of ngx\n */\n\nexport * from './lib/ngx.service';\nexport * from './lib/components/rtsee/rtsee-controls/rtsee-controls.component';\nexport * from './lib/components/rtsee-settings/rtsee-settings.component';\nexport * from './lib/components/rtsee/rtsee-conference.component';\nexport * from './lib/components/rtsee-peer/rtsee-peer.component';\nexport * from './lib/components/rtsee-messenger/profile/profile.component';\nexport * from './lib/components/rtsee-messenger/messenger/messenger.component';\nexport * from './lib/components/rtsee-messenger/payment-product-snippet/payment-product-snippet.component';\nexport * from './lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component';\nexport * from './lib/components/rtsee-container/rtsee-container.component';\nexport * from './lib/components/rtsee-presentation/presentation/presentation.component';\nexport * from './lib/components/rtsee-presentation/interactive-story-editor/interactive-story-editor.component';\nexport * from './lib/components/rtsee-presentation/interactive-story-editor/story-elements-section/story-elements-section.component';\nexport * from './lib/components/rtsee-presentation/illustrator/illustrator.component';\nexport * from './lib/components/rtsee-tags/rtsee-tags-accordion-menu/rtsee-tags-accordion-menu.component';\nexport * from './lib/components/rtsee-tags/rtsee-tag-manage/rtsee-tag-manage.component';\nexport * from './lib/components/rtsee-tags/rtsee-tag-groups-manage/rtsee-tag-groups-manage.component';\nexport * from './lib/components/rtsee-tags/rtsee-tag-group-manage/rtsee-tag-group-manage.component';\nexport * from './lib/components/rtsee-entities/entities-configurations-list/entities-configurations-list.component';\nexport * from './lib/components/rtsee-entities/manage-entity-configuration/manage-entity-configuration.component';\nexport * from './lib/components/rtsee-entities/entities-list/entities-list.component';\nexport * from './lib/components/rtsee-entities/manage-entity/manage-entity.component';\nexport * from './lib/components/rtsee-entities/rtsee-entity-comments/rtsee-entity-comments.component';\nexport * from './lib/components/rtsee-entities/rtsee-entity-tags/rtsee-entity-tags.component';\nexport * from './lib/components/rtsee-entities/rtsee-entity-preview/rtsee-entity-preview.component';\nexport * from './lib/components/rtsee-auth/auth/auth.component';\nexport * from './lib/ngx.module';\nexport * from './lib/common/components/forms/form/form.component';\nexport * from './lib/services/gtag.service';\nexport * from './lib/services/workflow-steps.service';\nexport * from './lib/components/rtsee-messenger/message-widgets/rtsee-task/rtsee-task.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.RTSeeAuthService","i2","i1.DefaultImagesService","i1.TimeFormatHelperService","i1.WorkflowStepsService","i1.MessageWidgetsService","i2.TimeFormatHelperService","i1.PaymentsService","DOCUMENT","i2.GtagService","i1.EventsWidgetsService","i2.DefaultImagesService","i3.RTSeeAuthService"],"mappings":"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"}
|