@memberjunction/ng-conversations 6.2.0-edge.0 → 6.2.0-edge.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -2
- package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +19 -3
- package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
- package/dist/lib/components/active-tasks/active-tasks-panel.component.js +39 -7
- package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
- package/dist/lib/components/agent/active-agent-indicator.component.d.ts +74 -6
- package/dist/lib/components/agent/active-agent-indicator.component.d.ts.map +1 -1
- package/dist/lib/components/agent/active-agent-indicator.component.js +111 -21
- package/dist/lib/components/agent/active-agent-indicator.component.js.map +1 -1
- package/dist/lib/components/agent/agent-process-panel.component.d.ts +31 -5
- package/dist/lib/components/agent/agent-process-panel.component.d.ts.map +1 -1
- package/dist/lib/components/agent/agent-process-panel.component.js +71 -15
- package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -1
- package/dist/lib/components/artifact/artifact-share-modal.component.d.ts +65 -9
- package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/artifact/artifact-share-modal.component.js +169 -57
- package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
- package/dist/lib/components/attachment/image-viewer.component.d.ts +77 -11
- package/dist/lib/components/attachment/image-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/attachment/image-viewer.component.js +181 -47
- package/dist/lib/components/attachment/image-viewer.component.js.map +1 -1
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts +129 -19
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +350 -116
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -1
- package/dist/lib/components/collection/artifact-create-modal.component.d.ts +60 -8
- package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/artifact-create-modal.component.js +130 -46
- package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-artifact-card.component.d.ts +63 -3
- package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-artifact-card.component.js +113 -19
- package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.d.ts +54 -8
- package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.js +130 -46
- package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.d.ts +70 -10
- package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.js +175 -53
- package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-tree.component.d.ts +89 -9
- package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-tree.component.js +220 -70
- package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
- package/dist/lib/components/collection/collection-view.component.d.ts +89 -11
- package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-view.component.js +154 -40
- package/dist/lib/components/collection/collection-view.component.js.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.d.ts +390 -38
- package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.js +951 -367
- package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
- package/dist/lib/components/composer/ai-composer.component.d.ts +213 -18
- package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -1
- package/dist/lib/components/composer/ai-composer.component.js +388 -44
- package/dist/lib/components/composer/ai-composer.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +12 -1
- package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-agent-picker.component.js +26 -4
- package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +1090 -123
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +2399 -706
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +139 -19
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.js +296 -59
- package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +579 -78
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +2322 -823
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts +40 -4
- package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/pinned-messages-panel.component.js +72 -14
- package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
- package/dist/lib/components/dialogs/input-dialog.component.d.ts +57 -11
- package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/dialogs/input-dialog.component.js +128 -16
- package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -1
- package/dist/lib/components/dialogs/rating-dialog.component.d.ts +68 -10
- package/dist/lib/components/dialogs/rating-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/dialogs/rating-dialog.component.js +151 -27
- package/dist/lib/components/dialogs/rating-dialog.component.js.map +1 -1
- package/dist/lib/components/export/export-modal.component.d.ts +84 -10
- package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
- package/dist/lib/components/export/export-modal.component.js +173 -49
- package/dist/lib/components/export/export-modal.component.js.map +1 -1
- package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts +29 -3
- package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts.map +1 -1
- package/dist/lib/components/global-tasks/global-tasks-panel.component.js +58 -12
- package/dist/lib/components/global-tasks/global-tasks-panel.component.js.map +1 -1
- package/dist/lib/components/library/library-full-view.component.d.ts +57 -8
- package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/library/library-full-view.component.js +119 -35
- package/dist/lib/components/library/library-full-view.component.js.map +1 -1
- package/dist/lib/components/members/members-modal.component.d.ts +76 -10
- package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
- package/dist/lib/components/members/members-modal.component.js +164 -50
- package/dist/lib/components/members/members-modal.component.js.map +1 -1
- package/dist/lib/components/message/actionable-commands.component.d.ts +37 -5
- package/dist/lib/components/message/actionable-commands.component.d.ts.map +1 -1
- package/dist/lib/components/message/actionable-commands.component.js +82 -16
- package/dist/lib/components/message/actionable-commands.component.js.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.d.ts +46 -10
- package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.js +120 -36
- package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +549 -74
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +1250 -421
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +411 -29
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +896 -222
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +288 -29
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +561 -123
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts +64 -5
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.js +101 -11
- package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
- package/dist/lib/components/notification/activity-indicator.component.d.ts +6 -2
- package/dist/lib/components/notification/activity-indicator.component.d.ts.map +1 -1
- package/dist/lib/components/notification/activity-indicator.component.js +13 -3
- package/dist/lib/components/notification/activity-indicator.component.js.map +1 -1
- package/dist/lib/components/notification/notification-badge.component.d.ts +15 -3
- package/dist/lib/components/notification/notification-badge.component.d.ts.map +1 -1
- package/dist/lib/components/notification/notification-badge.component.js +36 -8
- package/dist/lib/components/notification/notification-badge.component.js.map +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.d.ts +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.js +4 -4
- package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
- package/dist/lib/components/project/project-form-modal.component.d.ts +93 -11
- package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/project/project-form-modal.component.js +348 -87
- package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
- package/dist/lib/components/project/project-selector.component.d.ts +78 -8
- package/dist/lib/components/project/project-selector.component.d.ts.map +1 -1
- package/dist/lib/components/project/project-selector.component.js +177 -46
- package/dist/lib/components/project/project-selector.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +1 -1
- package/dist/lib/components/realtime/realtime-activity-rail.component.js +2 -2
- package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +1 -1
- package/dist/lib/components/realtime/realtime-delegation-card.component.js +2 -2
- package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +2 -2
- package/dist/lib/components/realtime/realtime-session-overlay.component.js +18 -18
- package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +47 -23
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +136 -92
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +2 -2
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js +4 -4
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js +3 -3
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.d.ts +13 -11
- package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.js +29 -25
- package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +3 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +6 -2
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
- package/dist/lib/components/search/search-panel.component.d.ts +133 -22
- package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
- package/dist/lib/components/search/search-panel.component.js +312 -83
- package/dist/lib/components/search/search-panel.component.js.map +1 -1
- package/dist/lib/components/share/share-modal.component.d.ts +69 -9
- package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/share/share-modal.component.js +139 -31
- package/dist/lib/components/share/share-modal.component.js.map +1 -1
- package/dist/lib/components/shared/user-picker.component.d.ts +48 -8
- package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
- package/dist/lib/components/shared/user-picker.component.js +110 -30
- package/dist/lib/components/shared/user-picker.component.js.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +114 -11
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.js +199 -21
- package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
- package/dist/lib/components/sidebar/routines-section.component.d.ts +20 -1
- package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -1
- package/dist/lib/components/sidebar/routines-section.component.js +25 -5
- package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
- package/dist/lib/components/slots/slot-interfaces.d.ts +19 -0
- package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
- package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
- package/dist/lib/components/task/tasks-full-view.component.d.ts +95 -13
- package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/task/tasks-full-view.component.js +223 -75
- package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
- package/dist/lib/components/tasks/task-widget.component.d.ts +46 -6
- package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -1
- package/dist/lib/components/tasks/task-widget.component.js +100 -16
- package/dist/lib/components/tasks/task-widget.component.js.map +1 -1
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +64 -7
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
- package/dist/lib/components/tasks/tasks-dropdown.component.js +127 -27
- package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
- package/dist/lib/components/thread/thread-panel.component.d.ts +66 -8
- package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
- package/dist/lib/components/thread/thread-panel.component.js +146 -36
- package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
- package/dist/lib/components/toast/toast.component.d.ts +11 -1
- package/dist/lib/components/toast/toast.component.d.ts.map +1 -1
- package/dist/lib/components/toast/toast.component.js +25 -5
- package/dist/lib/components/toast/toast.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +385 -42
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +887 -291
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +8 -0
- package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -1
- package/dist/lib/composer-plugins/base-conversation-mention.provider.js +8 -1
- package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -1
- package/dist/lib/directives/chat-slot.directive.d.ts +5 -1
- package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
- package/dist/lib/directives/chat-slot.directive.js.map +1 -1
- package/dist/lib/directives/search-shortcut.directive.d.ts +9 -1
- package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -1
- package/dist/lib/directives/search-shortcut.directive.js +14 -4
- package/dist/lib/directives/search-shortcut.directive.js.map +1 -1
- package/dist/lib/events/chat-events.d.ts +34 -7
- package/dist/lib/events/chat-events.d.ts.map +1 -1
- package/dist/lib/events/chat-events.js +37 -7
- package/dist/lib/events/chat-events.js.map +1 -1
- package/dist/lib/models/agent-turn.model.d.ts +103 -0
- package/dist/lib/models/agent-turn.model.d.ts.map +1 -0
- package/dist/lib/models/agent-turn.model.js +12 -0
- package/dist/lib/models/agent-turn.model.js.map +1 -0
- package/dist/lib/models/collection-view.model.js.map +1 -1
- package/dist/lib/models/conversation-state.model.d.ts +8 -0
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
- package/dist/lib/models/conversation-state.model.js.map +1 -1
- package/dist/lib/models/lazy-artifact-info.d.ts +44 -12
- package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
- package/dist/lib/models/lazy-artifact-info.js +98 -34
- package/dist/lib/models/lazy-artifact-info.js.map +1 -1
- package/dist/lib/services/active-tasks.service.d.ts +30 -4
- package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
- package/dist/lib/services/active-tasks.service.js +71 -19
- package/dist/lib/services/active-tasks.service.js.map +1 -1
- package/dist/lib/services/agent-state.service.d.ts +17 -1
- package/dist/lib/services/agent-state.service.d.ts.map +1 -1
- package/dist/lib/services/agent-state.service.js +48 -16
- package/dist/lib/services/agent-state.service.js.map +1 -1
- package/dist/lib/services/artifact-permission.service.d.ts +39 -0
- package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-permission.service.js +152 -17
- package/dist/lib/services/artifact-permission.service.js.map +1 -1
- package/dist/lib/services/artifact-state.service.d.ts +58 -5
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-state.service.js +135 -35
- package/dist/lib/services/artifact-state.service.js.map +1 -1
- package/dist/lib/services/collection-permission.service.d.ts +28 -0
- package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
- package/dist/lib/services/collection-permission.service.js +88 -32
- package/dist/lib/services/collection-permission.service.js.map +1 -1
- package/dist/lib/services/collection-state.service.d.ts +11 -1
- package/dist/lib/services/collection-state.service.d.ts.map +1 -1
- package/dist/lib/services/collection-state.service.js +25 -5
- package/dist/lib/services/collection-state.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +26 -4
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +57 -18
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-attachment.service.d.ts +17 -0
- package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-attachment.service.js +38 -10
- package/dist/lib/services/conversation-attachment.service.js.map +1 -1
- package/dist/lib/services/conversation-streaming.service.d.ts +22 -0
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-streaming.service.js +50 -10
- package/dist/lib/services/conversation-streaming.service.js.map +1 -1
- package/dist/lib/services/data-cache.service.d.ts +31 -0
- package/dist/lib/services/data-cache.service.d.ts.map +1 -1
- package/dist/lib/services/data-cache.service.js +71 -15
- package/dist/lib/services/data-cache.service.js.map +1 -1
- package/dist/lib/services/dialog.service.d.ts +13 -0
- package/dist/lib/services/dialog.service.d.ts.map +1 -1
- package/dist/lib/services/dialog.service.js +25 -5
- package/dist/lib/services/dialog.service.js.map +1 -1
- package/dist/lib/services/export.service.d.ts +2 -0
- package/dist/lib/services/export.service.d.ts.map +1 -1
- package/dist/lib/services/export.service.js +5 -1
- package/dist/lib/services/export.service.js.map +1 -1
- package/dist/lib/services/mention-parser.service.d.ts +10 -0
- package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
- package/dist/lib/services/mention-parser.service.js +25 -5
- package/dist/lib/services/mention-parser.service.js.map +1 -1
- package/dist/lib/services/notification.service.d.ts +54 -6
- package/dist/lib/services/notification.service.d.ts.map +1 -1
- package/dist/lib/services/notification.service.js +123 -27
- package/dist/lib/services/notification.service.js.map +1 -1
- package/dist/lib/services/realtime-audio-recorder.d.ts +4 -4
- package/dist/lib/services/realtime-audio-recorder.js +12 -12
- package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
- package/dist/lib/services/realtime-pcm-wav.d.ts +4 -0
- package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -1
- package/dist/lib/services/realtime-pcm-wav.js +10 -2
- package/dist/lib/services/realtime-pcm-wav.js.map +1 -1
- package/dist/lib/services/search.service.d.ts +42 -9
- package/dist/lib/services/search.service.d.ts.map +1 -1
- package/dist/lib/services/search.service.js +103 -23
- package/dist/lib/services/search.service.js.map +1 -1
- package/dist/lib/services/toast.service.d.ts +19 -1
- package/dist/lib/services/toast.service.d.ts.map +1 -1
- package/dist/lib/services/toast.service.js +45 -9
- package/dist/lib/services/toast.service.js.map +1 -1
- package/dist/lib/services/ui-command-handler.service.d.ts +16 -2
- package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
- package/dist/lib/services/ui-command-handler.service.js +36 -8
- package/dist/lib/services/ui-command-handler.service.js.map +1 -1
- package/dist/lib/utils/agent-artifact-summary.d.ts +2 -2
- package/dist/lib/utils/agent-artifact-summary.js +3 -3
- package/dist/lib/utils/agent-artifact-summary.js.map +1 -1
- package/dist/lib/utils/agent-turn-routing.d.ts +69 -0
- package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -0
- package/dist/lib/utils/agent-turn-routing.js +96 -0
- package/dist/lib/utils/agent-turn-routing.js.map +1 -0
- package/dist/lib/utils/artifact-panel-action.d.ts +15 -4
- package/dist/lib/utils/artifact-panel-action.d.ts.map +1 -1
- package/dist/lib/utils/artifact-panel-action.js +10 -2
- package/dist/lib/utils/artifact-panel-action.js.map +1 -1
- package/dist/lib/utils/distinct-artifacts.d.ts +2 -0
- package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
- package/dist/lib/utils/distinct-artifacts.js +5 -1
- package/dist/lib/utils/distinct-artifacts.js.map +1 -1
- package/dist/lib/utils/plan-mode-preference.d.ts +2 -2
- package/dist/lib/utils/plan-mode-preference.js +6 -6
- package/dist/lib/utils/plan-mode-preference.js.map +1 -1
- package/dist/public-api.d.ts +3 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +32 -32
|
@@ -13,30 +13,96 @@ interface ConversationMember {
|
|
|
13
13
|
}
|
|
14
14
|
export declare class MembersModalComponent {
|
|
15
15
|
private dialogService;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
IsVisible: boolean;
|
|
17
|
+
/** @deprecated Use {@link IsVisible}. */
|
|
18
|
+
set isVisible(value: MembersModalComponent['IsVisible']);
|
|
19
|
+
/** @deprecated Use {@link IsVisible}. */
|
|
20
|
+
get isVisible(): MembersModalComponent['IsVisible'];
|
|
21
|
+
Conversation?: MJConversationEntity;
|
|
22
|
+
/** @deprecated Use {@link Conversation}. */
|
|
23
|
+
set conversation(value: MJConversationEntity | undefined);
|
|
24
|
+
/** @deprecated Use {@link Conversation}. */
|
|
25
|
+
get conversation(): MJConversationEntity | undefined;
|
|
26
|
+
CurrentUser: UserInfo;
|
|
27
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
28
|
+
set currentUser(value: UserInfo);
|
|
29
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
30
|
+
get currentUser(): UserInfo;
|
|
31
|
+
Cancelled: EventEmitter<void>;
|
|
32
|
+
/**
|
|
33
|
+
* @deprecated Use {@link Cancelled}.
|
|
34
|
+
*
|
|
35
|
+
* The same emitter under the old binding name, so a template still binding
|
|
36
|
+
* (cancelled) keeps working. Must stay AFTER Cancelled: class fields
|
|
37
|
+
* initialise in order, and the other way round this captures undefined.
|
|
38
|
+
*/
|
|
19
39
|
cancelled: EventEmitter<void>;
|
|
40
|
+
MembersChanged: EventEmitter<void>;
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated Use {@link MembersChanged}.
|
|
43
|
+
*
|
|
44
|
+
* The same emitter under the old binding name, so a template still binding
|
|
45
|
+
* (membersChanged) keeps working. Must stay AFTER MembersChanged: class fields
|
|
46
|
+
* initialise in order, and the other way round this captures undefined.
|
|
47
|
+
*/
|
|
20
48
|
membersChanged: EventEmitter<void>;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
49
|
+
Members: ConversationMember[];
|
|
50
|
+
/** @deprecated Use {@link Members}. */
|
|
51
|
+
get members(): ConversationMember[];
|
|
52
|
+
/** @deprecated Use {@link Members}. */
|
|
53
|
+
set members(value: ConversationMember[]);
|
|
54
|
+
NewMemberEmail: string;
|
|
55
|
+
/** @deprecated Use {@link NewMemberEmail}. */
|
|
56
|
+
get newMemberEmail(): string;
|
|
57
|
+
/** @deprecated Use {@link NewMemberEmail}. */
|
|
58
|
+
set newMemberEmail(value: string);
|
|
59
|
+
NewMemberRole: 'member' | 'owner';
|
|
60
|
+
/** @deprecated Use {@link NewMemberRole}. */
|
|
61
|
+
get newMemberRole(): 'member' | 'owner';
|
|
62
|
+
/** @deprecated Use {@link NewMemberRole}. */
|
|
63
|
+
set newMemberRole(value: 'member' | 'owner');
|
|
64
|
+
IsLoading: boolean;
|
|
65
|
+
/** @deprecated Use {@link IsLoading}. */
|
|
66
|
+
get isLoading(): boolean;
|
|
67
|
+
/** @deprecated Use {@link IsLoading}. */
|
|
68
|
+
set isLoading(value: boolean);
|
|
69
|
+
ErrorMessage: string;
|
|
70
|
+
/** @deprecated Use {@link ErrorMessage}. */
|
|
71
|
+
get errorMessage(): string;
|
|
72
|
+
/** @deprecated Use {@link ErrorMessage}. */
|
|
73
|
+
set errorMessage(value: string);
|
|
74
|
+
get ModalTitle(): string;
|
|
75
|
+
/** @deprecated Use {@link ModalTitle}. */
|
|
26
76
|
get modalTitle(): string;
|
|
27
|
-
|
|
77
|
+
RoleOptions: {
|
|
28
78
|
value: string;
|
|
29
79
|
label: string;
|
|
30
80
|
}[];
|
|
81
|
+
/** @deprecated Use {@link RoleOptions}. */
|
|
82
|
+
get roleOptions(): {
|
|
83
|
+
value: string;
|
|
84
|
+
label: string;
|
|
85
|
+
}[];
|
|
86
|
+
/** @deprecated Use {@link RoleOptions}. */
|
|
87
|
+
set roleOptions(value: {
|
|
88
|
+
value: string;
|
|
89
|
+
label: string;
|
|
90
|
+
}[]);
|
|
31
91
|
constructor(dialogService: DialogService);
|
|
32
92
|
ngOnChanges(): void;
|
|
33
93
|
private loadMembers;
|
|
94
|
+
OnAddMember(): Promise<void>;
|
|
95
|
+
/** @deprecated Use {@link OnAddMember}. */
|
|
34
96
|
onAddMember(): Promise<void>;
|
|
97
|
+
OnRemoveMember(member: ConversationMember): Promise<void>;
|
|
98
|
+
/** @deprecated Use {@link OnRemoveMember}. */
|
|
35
99
|
onRemoveMember(member: ConversationMember): Promise<void>;
|
|
100
|
+
OnCancel(): void;
|
|
101
|
+
/** @deprecated Use {@link OnCancel}. */
|
|
36
102
|
onCancel(): void;
|
|
37
103
|
private resetForm;
|
|
38
104
|
static ɵfac: i0.ɵɵFactoryDeclaration<MembersModalComponent, never>;
|
|
39
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MembersModalComponent, "mj-members-modal", never, { "isVisible": { "alias": "isVisible"; "required": false; }; "conversation": { "alias": "conversation"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, { "cancelled": "cancelled"; "membersChanged": "membersChanged"; }, never, never, false, never>;
|
|
105
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MembersModalComponent, "mj-members-modal", never, { "IsVisible": { "alias": "IsVisible"; "required": false; }; "isVisible": { "alias": "isVisible"; "required": false; }; "Conversation": { "alias": "Conversation"; "required": false; }; "conversation": { "alias": "conversation"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, { "Cancelled": "Cancelled"; "cancelled": "cancelled"; "MembersChanged": "MembersChanged"; "membersChanged": "membersChanged"; }, never, never, false, never>;
|
|
40
106
|
}
|
|
41
107
|
export {};
|
|
42
108
|
//# sourceMappingURL=members-modal.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"members-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/members/members-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;AAE9D,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,IAAI,CAAC;CACf;AAED,qBAuNa,qBAAqB;
|
|
1
|
+
{"version":3,"file":"members-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/members/members-modal.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -130,60 +130,152 @@ function MembersModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
130
130
|
} }
|
|
131
131
|
export class MembersModalComponent {
|
|
132
132
|
dialogService;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
133
|
+
IsVisible = false;
|
|
134
|
+
/** @deprecated Use {@link IsVisible}. */
|
|
135
|
+
set isVisible(value) {
|
|
136
|
+
this.IsVisible = value;
|
|
137
|
+
}
|
|
138
|
+
/** @deprecated Use {@link IsVisible}. */
|
|
139
|
+
get isVisible() {
|
|
140
|
+
return this.IsVisible;
|
|
141
|
+
}
|
|
142
|
+
Conversation;
|
|
143
|
+
/** @deprecated Use {@link Conversation}. */
|
|
144
|
+
set conversation(value) {
|
|
145
|
+
this.Conversation = value;
|
|
146
|
+
}
|
|
147
|
+
/** @deprecated Use {@link Conversation}. */
|
|
148
|
+
get conversation() {
|
|
149
|
+
return this.Conversation;
|
|
150
|
+
}
|
|
151
|
+
CurrentUser;
|
|
152
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
153
|
+
set currentUser(value) {
|
|
154
|
+
this.CurrentUser = value;
|
|
155
|
+
}
|
|
156
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
157
|
+
get currentUser() {
|
|
158
|
+
return this.CurrentUser;
|
|
159
|
+
}
|
|
160
|
+
Cancelled = new EventEmitter();
|
|
161
|
+
/**
|
|
162
|
+
* @deprecated Use {@link Cancelled}.
|
|
163
|
+
*
|
|
164
|
+
* The same emitter under the old binding name, so a template still binding
|
|
165
|
+
* (cancelled) keeps working. Must stay AFTER Cancelled: class fields
|
|
166
|
+
* initialise in order, and the other way round this captures undefined.
|
|
167
|
+
*/
|
|
168
|
+
cancelled = this.Cancelled;
|
|
169
|
+
MembersChanged = new EventEmitter();
|
|
170
|
+
/**
|
|
171
|
+
* @deprecated Use {@link MembersChanged}.
|
|
172
|
+
*
|
|
173
|
+
* The same emitter under the old binding name, so a template still binding
|
|
174
|
+
* (membersChanged) keeps working. Must stay AFTER MembersChanged: class fields
|
|
175
|
+
* initialise in order, and the other way round this captures undefined.
|
|
176
|
+
*/
|
|
177
|
+
membersChanged = this.MembersChanged;
|
|
178
|
+
Members = [];
|
|
179
|
+
/** @deprecated Use {@link Members}. */
|
|
180
|
+
get members() {
|
|
181
|
+
return this.Members;
|
|
182
|
+
}
|
|
183
|
+
/** @deprecated Use {@link Members}. */
|
|
184
|
+
set members(value) {
|
|
185
|
+
this.Members = value;
|
|
186
|
+
}
|
|
187
|
+
NewMemberEmail = '';
|
|
188
|
+
/** @deprecated Use {@link NewMemberEmail}. */
|
|
189
|
+
get newMemberEmail() {
|
|
190
|
+
return this.NewMemberEmail;
|
|
191
|
+
}
|
|
192
|
+
/** @deprecated Use {@link NewMemberEmail}. */
|
|
193
|
+
set newMemberEmail(value) {
|
|
194
|
+
this.NewMemberEmail = value;
|
|
195
|
+
}
|
|
196
|
+
NewMemberRole = 'member';
|
|
197
|
+
/** @deprecated Use {@link NewMemberRole}. */
|
|
198
|
+
get newMemberRole() {
|
|
199
|
+
return this.NewMemberRole;
|
|
200
|
+
}
|
|
201
|
+
/** @deprecated Use {@link NewMemberRole}. */
|
|
202
|
+
set newMemberRole(value) {
|
|
203
|
+
this.NewMemberRole = value;
|
|
204
|
+
}
|
|
205
|
+
IsLoading = false;
|
|
206
|
+
/** @deprecated Use {@link IsLoading}. */
|
|
207
|
+
get isLoading() {
|
|
208
|
+
return this.IsLoading;
|
|
209
|
+
}
|
|
210
|
+
/** @deprecated Use {@link IsLoading}. */
|
|
211
|
+
set isLoading(value) {
|
|
212
|
+
this.IsLoading = value;
|
|
213
|
+
}
|
|
214
|
+
ErrorMessage = '';
|
|
215
|
+
/** @deprecated Use {@link ErrorMessage}. */
|
|
216
|
+
get errorMessage() {
|
|
217
|
+
return this.ErrorMessage;
|
|
218
|
+
}
|
|
219
|
+
/** @deprecated Use {@link ErrorMessage}. */
|
|
220
|
+
set errorMessage(value) {
|
|
221
|
+
this.ErrorMessage = value;
|
|
222
|
+
}
|
|
223
|
+
get ModalTitle() {
|
|
224
|
+
return `Manage Members: ${this.Conversation?.Name || 'Conversation'}`;
|
|
225
|
+
}
|
|
226
|
+
/** @deprecated Use {@link ModalTitle}. */
|
|
143
227
|
get modalTitle() {
|
|
144
|
-
return
|
|
228
|
+
return this.ModalTitle;
|
|
145
229
|
}
|
|
146
|
-
|
|
230
|
+
RoleOptions = [
|
|
147
231
|
{ value: 'member', label: 'Member' },
|
|
148
232
|
{ value: 'owner', label: 'Owner' }
|
|
149
233
|
];
|
|
234
|
+
/** @deprecated Use {@link RoleOptions}. */
|
|
235
|
+
get roleOptions() {
|
|
236
|
+
return this.RoleOptions;
|
|
237
|
+
}
|
|
238
|
+
/** @deprecated Use {@link RoleOptions}. */
|
|
239
|
+
set roleOptions(value) {
|
|
240
|
+
this.RoleOptions = value;
|
|
241
|
+
}
|
|
150
242
|
constructor(dialogService) {
|
|
151
243
|
this.dialogService = dialogService;
|
|
152
244
|
}
|
|
153
245
|
ngOnChanges() {
|
|
154
|
-
if (this.
|
|
246
|
+
if (this.IsVisible && this.Conversation) {
|
|
155
247
|
this.loadMembers();
|
|
156
248
|
}
|
|
157
249
|
}
|
|
158
250
|
async loadMembers() {
|
|
159
|
-
if (!this.
|
|
251
|
+
if (!this.Conversation)
|
|
160
252
|
return;
|
|
161
|
-
this.
|
|
162
|
-
this.
|
|
253
|
+
this.IsLoading = true;
|
|
254
|
+
this.ErrorMessage = '';
|
|
163
255
|
try {
|
|
164
256
|
// TODO: Load from ConversationMembers entity when available
|
|
165
257
|
// For now, show the owner
|
|
166
|
-
this.
|
|
258
|
+
this.Members = [
|
|
167
259
|
{
|
|
168
|
-
id: 'owner-' + this.
|
|
169
|
-
userId: this.
|
|
260
|
+
id: 'owner-' + this.Conversation.ID,
|
|
261
|
+
userId: this.Conversation.UserID || '',
|
|
170
262
|
userName: 'Owner',
|
|
171
|
-
userEmail: this.
|
|
263
|
+
userEmail: this.CurrentUser.Email,
|
|
172
264
|
role: 'owner',
|
|
173
|
-
addedAt: this.
|
|
265
|
+
addedAt: this.Conversation.__mj_CreatedAt
|
|
174
266
|
}
|
|
175
267
|
];
|
|
176
268
|
}
|
|
177
269
|
catch (error) {
|
|
178
270
|
console.error('Error loading members:', error);
|
|
179
|
-
this.
|
|
271
|
+
this.ErrorMessage = 'Failed to load members';
|
|
180
272
|
}
|
|
181
273
|
finally {
|
|
182
|
-
this.
|
|
274
|
+
this.IsLoading = false;
|
|
183
275
|
}
|
|
184
276
|
}
|
|
185
|
-
async
|
|
186
|
-
const email = this.
|
|
277
|
+
async OnAddMember() {
|
|
278
|
+
const email = this.NewMemberEmail.trim();
|
|
187
279
|
if (!email)
|
|
188
280
|
return;
|
|
189
281
|
// Simple email validation
|
|
@@ -192,12 +284,12 @@ export class MembersModalComponent {
|
|
|
192
284
|
return;
|
|
193
285
|
}
|
|
194
286
|
// Check if already a member
|
|
195
|
-
if (this.
|
|
287
|
+
if (this.Members.some(m => m.userEmail === email)) {
|
|
196
288
|
await this.dialogService.alert('Already a Member', 'This user is already a member');
|
|
197
289
|
return;
|
|
198
290
|
}
|
|
199
|
-
this.
|
|
200
|
-
this.
|
|
291
|
+
this.IsLoading = true;
|
|
292
|
+
this.ErrorMessage = '';
|
|
201
293
|
try {
|
|
202
294
|
// TODO: Create ConversationMember entity when available
|
|
203
295
|
const newMember = {
|
|
@@ -205,23 +297,27 @@ export class MembersModalComponent {
|
|
|
205
297
|
userId: 'unknown',
|
|
206
298
|
userName: email.split('@')[0],
|
|
207
299
|
userEmail: email,
|
|
208
|
-
role: this.
|
|
300
|
+
role: this.NewMemberRole,
|
|
209
301
|
addedAt: new Date()
|
|
210
302
|
};
|
|
211
|
-
this.
|
|
212
|
-
this.
|
|
213
|
-
this.
|
|
214
|
-
this.
|
|
303
|
+
this.Members.push(newMember);
|
|
304
|
+
this.NewMemberEmail = '';
|
|
305
|
+
this.NewMemberRole = 'member';
|
|
306
|
+
this.MembersChanged.emit();
|
|
215
307
|
}
|
|
216
308
|
catch (error) {
|
|
217
309
|
console.error('Error adding member:', error);
|
|
218
|
-
this.
|
|
310
|
+
this.ErrorMessage = 'Failed to add member';
|
|
219
311
|
}
|
|
220
312
|
finally {
|
|
221
|
-
this.
|
|
313
|
+
this.IsLoading = false;
|
|
222
314
|
}
|
|
223
315
|
}
|
|
224
|
-
|
|
316
|
+
/** @deprecated Use {@link OnAddMember}. */
|
|
317
|
+
async onAddMember() {
|
|
318
|
+
return this.OnAddMember();
|
|
319
|
+
}
|
|
320
|
+
async OnRemoveMember(member) {
|
|
225
321
|
const confirmed = await this.dialogService.confirm({
|
|
226
322
|
title: 'Remove Member',
|
|
227
323
|
message: `Remove ${member.userEmail} from this conversation?`,
|
|
@@ -230,33 +326,41 @@ export class MembersModalComponent {
|
|
|
230
326
|
});
|
|
231
327
|
if (!confirmed)
|
|
232
328
|
return;
|
|
233
|
-
this.
|
|
234
|
-
this.
|
|
329
|
+
this.IsLoading = true;
|
|
330
|
+
this.ErrorMessage = '';
|
|
235
331
|
try {
|
|
236
332
|
// TODO: Delete ConversationMember entity when available
|
|
237
|
-
this.
|
|
238
|
-
this.
|
|
333
|
+
this.Members = this.Members.filter(m => m.id !== member.id);
|
|
334
|
+
this.MembersChanged.emit();
|
|
239
335
|
}
|
|
240
336
|
catch (error) {
|
|
241
337
|
console.error('Error removing member:', error);
|
|
242
|
-
this.
|
|
338
|
+
this.ErrorMessage = 'Failed to remove member';
|
|
243
339
|
}
|
|
244
340
|
finally {
|
|
245
|
-
this.
|
|
341
|
+
this.IsLoading = false;
|
|
246
342
|
}
|
|
247
343
|
}
|
|
248
|
-
|
|
249
|
-
|
|
344
|
+
/** @deprecated Use {@link OnRemoveMember}. */
|
|
345
|
+
async onRemoveMember(member) {
|
|
346
|
+
return this.OnRemoveMember(member);
|
|
347
|
+
}
|
|
348
|
+
OnCancel() {
|
|
349
|
+
this.Cancelled.emit();
|
|
250
350
|
this.resetForm();
|
|
251
351
|
}
|
|
352
|
+
/** @deprecated Use {@link OnCancel}. */
|
|
353
|
+
onCancel() {
|
|
354
|
+
return this.OnCancel();
|
|
355
|
+
}
|
|
252
356
|
resetForm() {
|
|
253
|
-
this.
|
|
254
|
-
this.
|
|
255
|
-
this.
|
|
256
|
-
this.
|
|
357
|
+
this.NewMemberEmail = '';
|
|
358
|
+
this.NewMemberRole = 'member';
|
|
359
|
+
this.ErrorMessage = '';
|
|
360
|
+
this.IsVisible = false;
|
|
257
361
|
}
|
|
258
362
|
static ɵfac = function MembersModalComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MembersModalComponent)(i0.ɵɵdirectiveInject(i1.DialogService)); };
|
|
259
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MembersModalComponent, selectors: [["mj-members-modal"]], inputs: { isVisible: "isVisible", conversation: "conversation", currentUser: "currentUser" }, outputs: { cancelled: "cancelled", membersChanged: "membersChanged" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "Title", "Width", "Height", "Visible"], [3, "Close", "Title", "Width", "Height", "Visible"], [1, "members-modal-content"], [1, "add-member-section"], [1, "add-member-form"], ["type", "text", "placeholder", "Enter email address", 1, "mj-textbox", 2, "flex", "1", 3, "ngModelChange", "ngModel"], [1, "mj-select", 2, "width", "120px", 3, "ngModelChange", "ngModel"], [3, "value"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "members-section"], [1, "members-list"], [1, "loading-indicator"], [1, "error-message"], ["mjButton", "", 3, "click"], ["Icon", "fa-solid fa-user-group", "Title", "No additional members yet", "Size", "compact"], [1, "member-item"], [1, "member-info"], [1, "fas", "fa-user-circle"], [1, "member-details"], [1, "member-name"], [1, "member-email"], [1, "member-controls"], [1, "member-role"], ["title", "Remove member", 1, "btn-remove"], ["title", "Remove member", 1, "btn-remove", 3, "click"], [1, "fas", "fa-times"], ["text", "Loading members...", "size", "medium"]], template: function MembersModalComponent_Template(rf, ctx) { if (rf & 1) {
|
|
363
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MembersModalComponent, selectors: [["mj-members-modal"]], inputs: { IsVisible: "IsVisible", isVisible: "isVisible", Conversation: "Conversation", conversation: "conversation", CurrentUser: "CurrentUser", currentUser: "currentUser" }, outputs: { Cancelled: "Cancelled", cancelled: "cancelled", MembersChanged: "MembersChanged", membersChanged: "membersChanged" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "Title", "Width", "Height", "Visible"], [3, "Close", "Title", "Width", "Height", "Visible"], [1, "members-modal-content"], [1, "add-member-section"], [1, "add-member-form"], ["type", "text", "placeholder", "Enter email address", 1, "mj-textbox", 2, "flex", "1", 3, "ngModelChange", "ngModel"], [1, "mj-select", 2, "width", "120px", 3, "ngModelChange", "ngModel"], [3, "value"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "members-section"], [1, "members-list"], [1, "loading-indicator"], [1, "error-message"], ["mjButton", "", 3, "click"], ["Icon", "fa-solid fa-user-group", "Title", "No additional members yet", "Size", "compact"], [1, "member-item"], [1, "member-info"], [1, "fas", "fa-user-circle"], [1, "member-details"], [1, "member-name"], [1, "member-email"], [1, "member-controls"], [1, "member-role"], ["title", "Remove member", 1, "btn-remove"], ["title", "Remove member", 1, "btn-remove", 3, "click"], [1, "fas", "fa-times"], ["text", "Loading members...", "size", "medium"]], template: function MembersModalComponent_Template(rf, ctx) { if (rf & 1) {
|
|
260
364
|
i0.ɵɵconditionalCreate(0, MembersModalComponent_Conditional_0_Template, 21, 11, "mj-dialog", 0);
|
|
261
365
|
} if (rf & 2) {
|
|
262
366
|
i0.ɵɵconditional(ctx.isVisible ? 0 : -1);
|
|
@@ -349,14 +453,24 @@ export class MembersModalComponent {
|
|
|
349
453
|
</mj-dialog>
|
|
350
454
|
}
|
|
351
455
|
`, styles: ["\n .members-modal-content {\n padding: 20px;\n }\n\n h4 {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n }\n\n .add-member-section {\n margin-bottom: 24px;\n }\n\n .add-member-form {\n display: flex;\n gap: 8px;\n }\n\n .members-list {\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n max-height: 300px;\n overflow-y: auto;\n }\n\n .member-item {\n padding: 12px;\n border-bottom: 1px solid #e8e8e8;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .member-item:last-child {\n border-bottom: none;\n }\n\n .member-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n }\n\n .member-info i {\n font-size: 32px;\n color: #999;\n }\n\n .member-details {\n display: flex;\n flex-direction: column;\n }\n\n .member-name {\n font-size: 14px;\n font-weight: 500;\n }\n\n .member-email {\n font-size: 12px;\n color: #666;\n }\n\n .member-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .member-role {\n padding: 4px 8px;\n border-radius: 3px;\n font-size: 12px;\n font-weight: 500;\n background: #e3f2fd;\n color: #1976d2;\n }\n\n .member-role.owner {\n background: #fff3e0;\n color: #f57c00;\n }\n\n .btn-remove {\n padding: 6px 8px;\n background: transparent;\n border: none;\n cursor: pointer;\n border-radius: 3px;\n color: #999;\n }\n\n .btn-remove:hover {\n background: #ffebee;\n color: #d32f2f;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 24px;\n color: #666;\n }\n\n .error-message {\n display: block;\n color: #d32f2f;\n font-size: 13px;\n margin-top: 12px;\n padding: 8px 12px;\n background: #ffebee;\n border-radius: 4px;\n }\n\n mj-dialog-actions {\n display: flex;\n justify-content: flex-end;\n padding: 15px 20px;\n border-top: 1px solid #e0e0e0;\n }\n "] }]
|
|
352
|
-
}], () => [{ type: i1.DialogService }], {
|
|
456
|
+
}], () => [{ type: i1.DialogService }], { IsVisible: [{
|
|
457
|
+
type: Input
|
|
458
|
+
}], isVisible: [{
|
|
459
|
+
type: Input
|
|
460
|
+
}], Conversation: [{
|
|
353
461
|
type: Input
|
|
354
462
|
}], conversation: [{
|
|
355
463
|
type: Input
|
|
464
|
+
}], CurrentUser: [{
|
|
465
|
+
type: Input
|
|
356
466
|
}], currentUser: [{
|
|
357
467
|
type: Input
|
|
468
|
+
}], Cancelled: [{
|
|
469
|
+
type: Output
|
|
358
470
|
}], cancelled: [{
|
|
359
471
|
type: Output
|
|
472
|
+
}], MembersChanged: [{
|
|
473
|
+
type: Output
|
|
360
474
|
}], membersChanged: [{
|
|
361
475
|
type: Output
|
|
362
476
|
}] }); })();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"members-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/members/members-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MJConversationEntity } from '@memberjunction/core-entities';\nimport { UserInfo, RunView, Metadata } from '@memberjunction/core';\nimport { DialogService } from '../../services/dialog.service';\n\ninterface ConversationMember {\n id: string;\n userId: string;\n userName: string;\n userEmail: string;\n role: 'owner' | 'member';\n addedAt: Date;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-members-modal',\n template: `\n @if (isVisible) {\n <mj-dialog\n [Title]=\"modalTitle\"\n [Width]=\"600\"\n [Height]=\"500\"\n [Visible]=\"true\"\n (Close)=\"onCancel()\">\n <div class=\"members-modal-content\">\n <div class=\"add-member-section\">\n <h4>Add Member</h4>\n <div class=\"add-member-form\">\n <input\n type=\"text\"\n [(ngModel)]=\"newMemberEmail\"\n placeholder=\"Enter email address\"\n class=\"mj-textbox\"\n style=\"flex: 1;\">\n <select\n [(ngModel)]=\"newMemberRole\"\n class=\"mj-select\"\n style=\"width: 120px;\">\n @for (option of roleOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n <button mjButton variant=\"primary\" [disabled]=\"isLoading\" (click)=\"onAddMember()\">\n Add\n </button>\n </div>\n </div>\n <div class=\"members-section\">\n <h4>Current Members ({{ members.length }})</h4>\n @if (!isLoading) {\n <div class=\"members-list\">\n @if (members.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-user-group\"\n Title=\"No additional members yet\"\n Size=\"compact\" />\n }\n @for (member of members; track member) {\n <div class=\"member-item\">\n <div class=\"member-info\">\n <i class=\"fas fa-user-circle\"></i>\n <div class=\"member-details\">\n <div class=\"member-name\">{{ member.userName }}</div>\n <div class=\"member-email\">{{ member.userEmail }}</div>\n </div>\n </div>\n <div class=\"member-controls\">\n <span class=\"member-role\" [class.owner]=\"member.role === 'owner'\">\n {{ member.role === 'owner' ? 'Owner' : 'Member' }}\n </span>\n @if (member.role !== 'owner') {\n <button\n class=\"btn-remove\"\n (click)=\"onRemoveMember(member)\"\n title=\"Remove member\">\n <i class=\"fas fa-times\"></i>\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n @if (isLoading) {\n <div class=\"loading-indicator\">\n <mj-loading text=\"Loading members...\" size=\"medium\"></mj-loading>\n </div>\n }\n </div>\n @if (errorMessage) {\n <div class=\"error-message\">\n {{ errorMessage }}\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton (click)=\"onCancel()\">Close</button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n `,\n styles: [`\n .members-modal-content {\n padding: 20px;\n }\n\n h4 {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n }\n\n .add-member-section {\n margin-bottom: 24px;\n }\n\n .add-member-form {\n display: flex;\n gap: 8px;\n }\n\n .members-list {\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n max-height: 300px;\n overflow-y: auto;\n }\n\n .member-item {\n padding: 12px;\n border-bottom: 1px solid #e8e8e8;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .member-item:last-child {\n border-bottom: none;\n }\n\n .member-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n }\n\n .member-info i {\n font-size: 32px;\n color: #999;\n }\n\n .member-details {\n display: flex;\n flex-direction: column;\n }\n\n .member-name {\n font-size: 14px;\n font-weight: 500;\n }\n\n .member-email {\n font-size: 12px;\n color: #666;\n }\n\n .member-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .member-role {\n padding: 4px 8px;\n border-radius: 3px;\n font-size: 12px;\n font-weight: 500;\n background: #e3f2fd;\n color: #1976d2;\n }\n\n .member-role.owner {\n background: #fff3e0;\n color: #f57c00;\n }\n\n .btn-remove {\n padding: 6px 8px;\n background: transparent;\n border: none;\n cursor: pointer;\n border-radius: 3px;\n color: #999;\n }\n\n .btn-remove:hover {\n background: #ffebee;\n color: #d32f2f;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 24px;\n color: #666;\n }\n\n .error-message {\n display: block;\n color: #d32f2f;\n font-size: 13px;\n margin-top: 12px;\n padding: 8px 12px;\n background: #ffebee;\n border-radius: 4px;\n }\n\n mj-dialog-actions {\n display: flex;\n justify-content: flex-end;\n padding: 15px 20px;\n border-top: 1px solid #e0e0e0;\n }\n `]\n})\nexport class MembersModalComponent {\n @Input() isVisible = false;\n @Input() conversation?: MJConversationEntity;\n @Input() currentUser!: UserInfo;\n @Output() cancelled = new EventEmitter<void>();\n @Output() membersChanged = new EventEmitter<void>();\n\n members: ConversationMember[] = [];\n newMemberEmail = '';\n newMemberRole: 'member' | 'owner' = 'member';\n isLoading = false;\n errorMessage = '';\n\n get modalTitle(): string {\n return `Manage Members: ${this.conversation?.Name || 'Conversation'}`;\n }\n\n roleOptions = [\n { value: 'member', label: 'Member' },\n { value: 'owner', label: 'Owner' }\n ];\n\n constructor(private dialogService: DialogService) {}\n\n ngOnChanges(): void {\n if (this.isVisible && this.conversation) {\n this.loadMembers();\n }\n }\n\n private async loadMembers(): Promise<void> {\n if (!this.conversation) return;\n\n this.isLoading = true;\n this.errorMessage = '';\n\n try {\n // TODO: Load from ConversationMembers entity when available\n // For now, show the owner\n this.members = [\n {\n id: 'owner-' + this.conversation.ID,\n userId: this.conversation.UserID || '',\n userName: 'Owner',\n userEmail: this.currentUser.Email,\n role: 'owner',\n addedAt: this.conversation.__mj_CreatedAt\n }\n ];\n } catch (error) {\n console.error('Error loading members:', error);\n this.errorMessage = 'Failed to load members';\n } finally {\n this.isLoading = false;\n }\n }\n\n async onAddMember(): Promise<void> {\n const email = this.newMemberEmail.trim();\n if (!email) return;\n\n // Simple email validation\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n await this.dialogService.alert('Invalid Email', 'Please enter a valid email address');\n return;\n }\n\n // Check if already a member\n if (this.members.some(m => m.userEmail === email)) {\n await this.dialogService.alert('Already a Member', 'This user is already a member');\n return;\n }\n\n this.isLoading = true;\n this.errorMessage = '';\n\n try {\n // TODO: Create ConversationMember entity when available\n const newMember: ConversationMember = {\n id: 'temp-' + Date.now(),\n userId: 'unknown',\n userName: email.split('@')[0],\n userEmail: email,\n role: this.newMemberRole,\n addedAt: new Date()\n };\n\n this.members.push(newMember);\n this.newMemberEmail = '';\n this.newMemberRole = 'member';\n this.membersChanged.emit();\n } catch (error) {\n console.error('Error adding member:', error);\n this.errorMessage = 'Failed to add member';\n } finally {\n this.isLoading = false;\n }\n }\n\n async onRemoveMember(member: ConversationMember): Promise<void> {\n const confirmed = await this.dialogService.confirm({\n title: 'Remove Member',\n message: `Remove ${member.userEmail} from this conversation?`,\n okText: 'Remove',\n cancelText: 'Cancel'\n });\n\n if (!confirmed) return;\n\n this.isLoading = true;\n this.errorMessage = '';\n\n try {\n // TODO: Delete ConversationMember entity when available\n this.members = this.members.filter(m => m.id !== member.id);\n this.membersChanged.emit();\n } catch (error) {\n console.error('Error removing member:', error);\n this.errorMessage = 'Failed to remove member';\n } finally {\n this.isLoading = false;\n }\n }\n\n onCancel(): void {\n this.cancelled.emit();\n this.resetForm();\n }\n\n private resetForm(): void {\n this.newMemberEmail = '';\n this.newMemberRole = 'member';\n this.errorMessage = '';\n this.isVisible = false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"members-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/members/members-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MJConversationEntity } from '@memberjunction/core-entities';\nimport { UserInfo, RunView, Metadata } from '@memberjunction/core';\nimport { DialogService } from '../../services/dialog.service';\n\ninterface ConversationMember {\n id: string;\n userId: string;\n userName: string;\n userEmail: string;\n role: 'owner' | 'member';\n addedAt: Date;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-members-modal',\n template: `\n @if (isVisible) {\n <mj-dialog\n [Title]=\"modalTitle\"\n [Width]=\"600\"\n [Height]=\"500\"\n [Visible]=\"true\"\n (Close)=\"onCancel()\">\n <div class=\"members-modal-content\">\n <div class=\"add-member-section\">\n <h4>Add Member</h4>\n <div class=\"add-member-form\">\n <input\n type=\"text\"\n [(ngModel)]=\"newMemberEmail\"\n placeholder=\"Enter email address\"\n class=\"mj-textbox\"\n style=\"flex: 1;\">\n <select\n [(ngModel)]=\"newMemberRole\"\n class=\"mj-select\"\n style=\"width: 120px;\">\n @for (option of roleOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n <button mjButton variant=\"primary\" [disabled]=\"isLoading\" (click)=\"onAddMember()\">\n Add\n </button>\n </div>\n </div>\n <div class=\"members-section\">\n <h4>Current Members ({{ members.length }})</h4>\n @if (!isLoading) {\n <div class=\"members-list\">\n @if (members.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-user-group\"\n Title=\"No additional members yet\"\n Size=\"compact\" />\n }\n @for (member of members; track member) {\n <div class=\"member-item\">\n <div class=\"member-info\">\n <i class=\"fas fa-user-circle\"></i>\n <div class=\"member-details\">\n <div class=\"member-name\">{{ member.userName }}</div>\n <div class=\"member-email\">{{ member.userEmail }}</div>\n </div>\n </div>\n <div class=\"member-controls\">\n <span class=\"member-role\" [class.owner]=\"member.role === 'owner'\">\n {{ member.role === 'owner' ? 'Owner' : 'Member' }}\n </span>\n @if (member.role !== 'owner') {\n <button\n class=\"btn-remove\"\n (click)=\"onRemoveMember(member)\"\n title=\"Remove member\">\n <i class=\"fas fa-times\"></i>\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n @if (isLoading) {\n <div class=\"loading-indicator\">\n <mj-loading text=\"Loading members...\" size=\"medium\"></mj-loading>\n </div>\n }\n </div>\n @if (errorMessage) {\n <div class=\"error-message\">\n {{ errorMessage }}\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton (click)=\"onCancel()\">Close</button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n `,\n styles: [`\n .members-modal-content {\n padding: 20px;\n }\n\n h4 {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n }\n\n .add-member-section {\n margin-bottom: 24px;\n }\n\n .add-member-form {\n display: flex;\n gap: 8px;\n }\n\n .members-list {\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n max-height: 300px;\n overflow-y: auto;\n }\n\n .member-item {\n padding: 12px;\n border-bottom: 1px solid #e8e8e8;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .member-item:last-child {\n border-bottom: none;\n }\n\n .member-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n }\n\n .member-info i {\n font-size: 32px;\n color: #999;\n }\n\n .member-details {\n display: flex;\n flex-direction: column;\n }\n\n .member-name {\n font-size: 14px;\n font-weight: 500;\n }\n\n .member-email {\n font-size: 12px;\n color: #666;\n }\n\n .member-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .member-role {\n padding: 4px 8px;\n border-radius: 3px;\n font-size: 12px;\n font-weight: 500;\n background: #e3f2fd;\n color: #1976d2;\n }\n\n .member-role.owner {\n background: #fff3e0;\n color: #f57c00;\n }\n\n .btn-remove {\n padding: 6px 8px;\n background: transparent;\n border: none;\n cursor: pointer;\n border-radius: 3px;\n color: #999;\n }\n\n .btn-remove:hover {\n background: #ffebee;\n color: #d32f2f;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 24px;\n color: #666;\n }\n\n .error-message {\n display: block;\n color: #d32f2f;\n font-size: 13px;\n margin-top: 12px;\n padding: 8px 12px;\n background: #ffebee;\n border-radius: 4px;\n }\n\n mj-dialog-actions {\n display: flex;\n justify-content: flex-end;\n padding: 15px 20px;\n border-top: 1px solid #e0e0e0;\n }\n `]\n})\nexport class MembersModalComponent {\n @Input() IsVisible = false;\n\n /** @deprecated Use {@link IsVisible}. */\n @Input() set isVisible(value: MembersModalComponent['IsVisible']) {\n this.IsVisible = value;\n }\n /** @deprecated Use {@link IsVisible}. */\n get isVisible(): MembersModalComponent['IsVisible'] {\n return this.IsVisible;\n }\n @Input() Conversation?: MJConversationEntity;\n\n /** @deprecated Use {@link Conversation}. */\n @Input() set conversation(value: MJConversationEntity | undefined) {\n this.Conversation = value;\n }\n /** @deprecated Use {@link Conversation}. */\n get conversation(): MJConversationEntity | undefined {\n return this.Conversation;\n }\n @Input() CurrentUser!: UserInfo;\n\n /** @deprecated Use {@link CurrentUser}. */\n @Input() set currentUser(value: UserInfo) {\n this.CurrentUser = value;\n }\n /** @deprecated Use {@link CurrentUser}. */\n get currentUser(): UserInfo {\n return this.CurrentUser;\n }\n @Output() Cancelled = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link Cancelled}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (cancelled) keeps working. Must stay AFTER Cancelled: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() cancelled = this.Cancelled;\n @Output() MembersChanged = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link MembersChanged}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (membersChanged) keeps working. Must stay AFTER MembersChanged: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() membersChanged = this.MembersChanged;\n\n Members: ConversationMember[] = [];\n\n /** @deprecated Use {@link Members}. */\n get members(): ConversationMember[] {\n return this.Members;\n }\n /** @deprecated Use {@link Members}. */\n set members(value: ConversationMember[]) {\n this.Members = value;\n }\n NewMemberEmail = '';\n\n /** @deprecated Use {@link NewMemberEmail}. */\n get newMemberEmail() {\n return this.NewMemberEmail;\n }\n /** @deprecated Use {@link NewMemberEmail}. */\n set newMemberEmail(value) {\n this.NewMemberEmail = value;\n }\n NewMemberRole: 'member' | 'owner' = 'member';\n\n /** @deprecated Use {@link NewMemberRole}. */\n get newMemberRole(): 'member' | 'owner' {\n return this.NewMemberRole;\n }\n /** @deprecated Use {@link NewMemberRole}. */\n set newMemberRole(value: 'member' | 'owner') {\n this.NewMemberRole = value;\n }\n IsLoading = false;\n\n /** @deprecated Use {@link IsLoading}. */\n get isLoading() {\n return this.IsLoading;\n }\n /** @deprecated Use {@link IsLoading}. */\n set isLoading(value) {\n this.IsLoading = value;\n }\n ErrorMessage = '';\n\n /** @deprecated Use {@link ErrorMessage}. */\n get errorMessage() {\n return this.ErrorMessage;\n }\n /** @deprecated Use {@link ErrorMessage}. */\n set errorMessage(value) {\n this.ErrorMessage = value;\n }\n\n get ModalTitle(): string {\n return `Manage Members: ${this.Conversation?.Name || 'Conversation'}`;\n }\n\n /** @deprecated Use {@link ModalTitle}. */\n get modalTitle(): string {\n return this.ModalTitle;\n }\n\n RoleOptions = [\n { value: 'member', label: 'Member' },\n { value: 'owner', label: 'Owner' }\n ];\n\n /** @deprecated Use {@link RoleOptions}. */\n get roleOptions() {\n return this.RoleOptions;\n }\n /** @deprecated Use {@link RoleOptions}. */\n set roleOptions(value) {\n this.RoleOptions = value;\n }\n\n constructor(private dialogService: DialogService) {}\n\n ngOnChanges(): void {\n if (this.IsVisible && this.Conversation) {\n this.loadMembers();\n }\n }\n\n private async loadMembers(): Promise<void> {\n if (!this.Conversation) return;\n\n this.IsLoading = true;\n this.ErrorMessage = '';\n\n try {\n // TODO: Load from ConversationMembers entity when available\n // For now, show the owner\n this.Members = [\n {\n id: 'owner-' + this.Conversation.ID,\n userId: this.Conversation.UserID || '',\n userName: 'Owner',\n userEmail: this.CurrentUser.Email,\n role: 'owner',\n addedAt: this.Conversation.__mj_CreatedAt\n }\n ];\n } catch (error) {\n console.error('Error loading members:', error);\n this.ErrorMessage = 'Failed to load members';\n } finally {\n this.IsLoading = false;\n }\n }\n\n async OnAddMember(): Promise<void> {\n const email = this.NewMemberEmail.trim();\n if (!email) return;\n\n // Simple email validation\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n await this.dialogService.alert('Invalid Email', 'Please enter a valid email address');\n return;\n }\n\n // Check if already a member\n if (this.Members.some(m => m.userEmail === email)) {\n await this.dialogService.alert('Already a Member', 'This user is already a member');\n return;\n }\n\n this.IsLoading = true;\n this.ErrorMessage = '';\n\n try {\n // TODO: Create ConversationMember entity when available\n const newMember: ConversationMember = {\n id: 'temp-' + Date.now(),\n userId: 'unknown',\n userName: email.split('@')[0],\n userEmail: email,\n role: this.NewMemberRole,\n addedAt: new Date()\n };\n\n this.Members.push(newMember);\n this.NewMemberEmail = '';\n this.NewMemberRole = 'member';\n this.MembersChanged.emit();\n } catch (error) {\n console.error('Error adding member:', error);\n this.ErrorMessage = 'Failed to add member';\n } finally {\n this.IsLoading = false;\n }\n }\n\n /** @deprecated Use {@link OnAddMember}. */\n async onAddMember(): Promise<void> {\n return this.OnAddMember();\n }\n\n async OnRemoveMember(member: ConversationMember): Promise<void> {\n const confirmed = await this.dialogService.confirm({\n title: 'Remove Member',\n message: `Remove ${member.userEmail} from this conversation?`,\n okText: 'Remove',\n cancelText: 'Cancel'\n });\n\n if (!confirmed) return;\n\n this.IsLoading = true;\n this.ErrorMessage = '';\n\n try {\n // TODO: Delete ConversationMember entity when available\n this.Members = this.Members.filter(m => m.id !== member.id);\n this.MembersChanged.emit();\n } catch (error) {\n console.error('Error removing member:', error);\n this.ErrorMessage = 'Failed to remove member';\n } finally {\n this.IsLoading = false;\n }\n }\n\n /** @deprecated Use {@link OnRemoveMember}. */\n async onRemoveMember(member: ConversationMember): Promise<void> {\n return this.OnRemoveMember(member);\n }\n\n OnCancel(): void {\n this.Cancelled.emit();\n this.resetForm();\n }\n\n /** @deprecated Use {@link OnCancel}. */\n onCancel(): void {\n return this.OnCancel();\n }\n\n private resetForm(): void {\n this.NewMemberEmail = '';\n this.NewMemberRole = 'member';\n this.ErrorMessage = '';\n this.IsVisible = false;\n }\n}\n"]}
|
|
@@ -6,28 +6,60 @@ import * as i0 from "@angular/core";
|
|
|
6
6
|
* These are actions the user can trigger after an agent completes a task
|
|
7
7
|
*/
|
|
8
8
|
export declare class ActionableCommandsComponent {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
Commands: ActionableCommand[];
|
|
10
|
+
/** @deprecated Use {@link Commands}. */
|
|
11
|
+
set commands(value: ActionableCommand[]);
|
|
12
|
+
/** @deprecated Use {@link Commands}. */
|
|
13
|
+
get commands(): ActionableCommand[];
|
|
14
|
+
Disabled: boolean;
|
|
15
|
+
/** @deprecated Use {@link Disabled}. */
|
|
16
|
+
set disabled(value: boolean);
|
|
17
|
+
/** @deprecated Use {@link Disabled}. */
|
|
18
|
+
get disabled(): boolean;
|
|
19
|
+
IsLastMessage: boolean;
|
|
20
|
+
/** @deprecated Use {@link IsLastMessage}. */
|
|
21
|
+
set isLastMessage(value: boolean);
|
|
22
|
+
/** @deprecated Use {@link IsLastMessage}. */
|
|
23
|
+
get isLastMessage(): boolean;
|
|
24
|
+
IsConversationOwner: boolean;
|
|
25
|
+
/** @deprecated Use {@link IsConversationOwner}. */
|
|
26
|
+
set isConversationOwner(value: boolean);
|
|
27
|
+
/** @deprecated Use {@link IsConversationOwner}. */
|
|
28
|
+
get isConversationOwner(): boolean;
|
|
29
|
+
CommandExecuted: EventEmitter<ActionableCommand>;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated Use {@link CommandExecuted}.
|
|
32
|
+
*
|
|
33
|
+
* The same emitter under the old binding name, so a template still binding
|
|
34
|
+
* (commandExecuted) keeps working. Must stay AFTER CommandExecuted: class fields
|
|
35
|
+
* initialise in order, and the other way round this captures undefined.
|
|
36
|
+
*/
|
|
13
37
|
commandExecuted: EventEmitter<ActionableCommand>;
|
|
14
38
|
/**
|
|
15
39
|
* Check if component should be visible
|
|
16
40
|
*/
|
|
41
|
+
get IsVisible(): boolean;
|
|
42
|
+
/** @deprecated Use {@link IsVisible}. */
|
|
17
43
|
get isVisible(): boolean;
|
|
18
44
|
/**
|
|
19
45
|
* Handle command button click
|
|
20
46
|
*/
|
|
47
|
+
OnCommandClick(command: ActionableCommand): void;
|
|
48
|
+
/** @deprecated Use {@link OnCommandClick}. */
|
|
21
49
|
onCommandClick(command: ActionableCommand): void;
|
|
22
50
|
/**
|
|
23
51
|
* Get button variant based on command type
|
|
24
52
|
*/
|
|
53
|
+
GetButtonVariant(command: ActionableCommand): 'primary' | 'secondary' | 'outline' | 'flat';
|
|
54
|
+
/** @deprecated Use {@link GetButtonVariant}. */
|
|
25
55
|
getButtonVariant(command: ActionableCommand): 'primary' | 'secondary' | 'outline' | 'flat';
|
|
26
56
|
/**
|
|
27
57
|
* Track by function for commands list
|
|
28
58
|
*/
|
|
59
|
+
TrackByCommand(index: number, command: ActionableCommand): string;
|
|
60
|
+
/** @deprecated Use {@link TrackByCommand}. */
|
|
29
61
|
trackByCommand(index: number, command: ActionableCommand): string;
|
|
30
62
|
static ɵfac: i0.ɵɵFactoryDeclaration<ActionableCommandsComponent, never>;
|
|
31
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ActionableCommandsComponent, "mj-actionable-commands", never, { "commands": { "alias": "commands"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "isLastMessage": { "alias": "isLastMessage"; "required": false; }; "isConversationOwner": { "alias": "isConversationOwner"; "required": false; }; }, { "commandExecuted": "commandExecuted"; }, never, never, false, never>;
|
|
63
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ActionableCommandsComponent, "mj-actionable-commands", never, { "Commands": { "alias": "Commands"; "required": false; }; "commands": { "alias": "commands"; "required": false; }; "Disabled": { "alias": "Disabled"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "IsLastMessage": { "alias": "IsLastMessage"; "required": false; }; "isLastMessage": { "alias": "isLastMessage"; "required": false; }; "IsConversationOwner": { "alias": "IsConversationOwner"; "required": false; }; "isConversationOwner": { "alias": "isConversationOwner"; "required": false; }; }, { "CommandExecuted": "CommandExecuted"; "commandExecuted": "commandExecuted"; }, never, never, false, never>;
|
|
32
64
|
}
|
|
33
65
|
//# sourceMappingURL=actionable-commands.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actionable-commands.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/actionable-commands.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;;AAEjE;;;GAGG;AACH,qBAMa,2BAA2B;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAM;
|
|
1
|
+
{"version":3,"file":"actionable-commands.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/actionable-commands.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;;AAEjE;;;GAGG;AACH,qBAMa,2BAA2B;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAM;IAE5C,wCAAwC;IACxC,IAAa,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAE/C;IACD,wCAAwC;IACxC,IAAI,QAAQ,IAAI,iBAAiB,EAAE,CAElC;IACQ,QAAQ,EAAE,OAAO,CAAS;IAEnC,wCAAwC;IACxC,IAAa,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEnC;IACD,wCAAwC;IACxC,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACQ,aAAa,EAAE,OAAO,CAAS;IAExC,6CAA6C;IAC7C,IAAa,aAAa,CAAC,KAAK,EAAE,OAAO,EAExC;IACD,6CAA6C;IAC7C,IAAI,aAAa,IAAI,OAAO,CAE3B;IACQ,mBAAmB,EAAE,OAAO,CAAS;IAE9C,mDAAmD;IACnD,IAAa,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAE9C;IACD,mDAAmD;IACnD,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAES,eAAe,kCAAyC;IAElE;;;;;;OAMG;IACO,eAAe,kCAAwB;IAEjD;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAO9B;IAED,yCAAyC;IACzC,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACI,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAMvD,8CAA8C;IACvC,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIvD;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM;IASjG,gDAAgD;IACzC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM;IAIjG;;OAEG;IACI,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM;IAIxE,8CAA8C;IACvC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM;yCA7G7D,2BAA2B;2CAA3B,2BAA2B;CAgHvC"}
|