@memberjunction/ng-conversations 6.2.0-edge.0 → 6.2.0-edge.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -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 +1191 -124
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +2816 -785
- 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 +42 -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 +93 -21
- 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 +49 -5
- package/dist/lib/components/message/actionable-commands.component.d.ts.map +1 -1
- package/dist/lib/components/message/actionable-commands.component.js +140 -26
- 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 +613 -74
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +1390 -422
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +490 -29
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +1088 -244
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +297 -29
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +598 -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 +891 -292
- 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 +113 -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 +47 -4
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +85 -20
- 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-liveness-dom.service.d.ts +42 -0
- package/dist/lib/services/conversation-liveness-dom.service.d.ts.map +1 -0
- package/dist/lib/services/conversation-liveness-dom.service.js +74 -0
- package/dist/lib/services/conversation-liveness-dom.service.js.map +1 -0
- 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 +56 -5
- package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
- package/dist/lib/services/ui-command-handler.service.js +113 -16
- 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 +70 -0
- package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -0
- package/dist/lib/utils/agent-turn-routing.js +84 -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/decision-routing.d.ts +68 -0
- package/dist/lib/utils/decision-routing.d.ts.map +1 -0
- package/dist/lib/utils/decision-routing.js +101 -0
- package/dist/lib/utils/decision-routing.js.map +1 -0
- 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 +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +8 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +32 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/export/export-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 } from '@memberjunction/core';\nimport { ExportService, ExportFormat, ExportOptions, ExportBranding } from '../../services/export.service';\nimport { DialogService } from '../../services/dialog.service';\nimport { ToastService } from '../../services/toast.service';\n\n@Component({\n standalone: false,\n selector: 'mj-export-modal',\n template: `\n @if (isVisible) {\n <mj-dialog\n [Title]=\"exportTitle\"\n [Width]=\"600\"\n [Height]=\"600\"\n [Visible]=\"true\"\n (Close)=\"onCancel()\">\n <div class=\"export-modal-content\">\n <section class=\"format-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-file-export\"></i>\n Export Format\n </h3>\n <p class=\"section-description\">\n Choose a format to export this conversation:\n </p>\n <div class=\"format-options\">\n @for (format of formats; track format.value) {\n <div\n class=\"format-option\"\n [class.selected]=\"selectedFormat === format.value\"\n (click)=\"selectFormat(format.value)\">\n <i [class]=\"format.icon\"></i>\n <div class=\"format-details\">\n <div class=\"format-name\">{{ format.name }}</div>\n <div class=\"format-description\">{{ format.description }}</div>\n </div>\n @if (selectedFormat === format.value) {\n <i class=\"fa-solid fa-check-circle check-icon\"></i>\n }\n </div>\n }\n </div>\n </section>\n <section class=\"options-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Export Options\n </h3>\n <div class=\"option-checkboxes\">\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeMessages\"\n [disabled]=\"isExporting\">\n <span>Include messages</span>\n <small>Export all conversation messages</small>\n </label>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeMetadata\"\n [disabled]=\"isExporting\">\n <span>Include metadata</span>\n <small>Add creation date, IDs, and other metadata</small>\n </label>\n <!-- Branding applies to EVERY format (HTML gets theme colors + logo +\n footer; markdown/text/JSON get the title and attribution), so it\n belongs here rather than under HTML Options. Shown for HTML even with\n no host branding, because it still snapshots the app's theme. -->\n @if (selectedFormat === 'html' || branding) {\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeTheme\"\n [disabled]=\"isExporting || (selectedFormat === 'html' && !exportOptions.includeCSS)\">\n <span>Include branding</span>\n <small>{{ brandingHint }}</small>\n </label>\n }\n </div>\n @if (selectedFormat === 'json') {\n <div class=\"format-specific-options\">\n <h4 class=\"subsection-title\">JSON Options</h4>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.prettyPrint\"\n [disabled]=\"isExporting\">\n <span>Pretty print</span>\n <small>Format JSON with indentation</small>\n </label>\n </div>\n }\n @if (selectedFormat === 'html') {\n <div class=\"format-specific-options\">\n <h4 class=\"subsection-title\">HTML Options</h4>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeCSS\"\n [disabled]=\"isExporting\">\n <span>Include CSS styling</span>\n <small>Embed styles for better presentation</small>\n </label>\n <!-- Which palette gets baked in — NOT the mode the app happens to be in.\n Exporting from a dark session would otherwise put dark text on the\n export's white page. -->\n @if (exportOptions.includeTheme && exportOptions.includeCSS) {\n <label class=\"checkbox-label\">\n <span>Theme</span>\n <select\n class=\"mj-input theme-mode-select\"\n [(ngModel)]=\"exportOptions.themeMode\"\n [disabled]=\"isExporting\">\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n <small>Palette baked into the exported file</small>\n </label>\n }\n </div>\n }\n </section>\n @if (errorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ errorMessage }}\n </div>\n }\n @if (isExporting) {\n <div class=\"loading-indicator\">\n <mj-loading text=\"Exporting conversation...\" size=\"small\"></mj-loading>\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton [disabled]=\"isExporting\" (click)=\"onCancel()\">\n <i class=\"fa-solid fa-times\"></i>\n Cancel\n </button>\n <button mjButton variant=\"primary\" [disabled]=\"!canExport\" (click)=\"onExport()\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n `,\n styles: [`\n .export-modal-content {\n padding: 20px;\n max-height: calc(600px - 120px);\n overflow-y: auto;\n }\n\n section {\n margin-bottom: 24px;\n }\n\n .section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .section-title i {\n color: var(--mj-brand-primary);\n }\n\n .section-description {\n margin: 0 0 16px 0;\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .format-options {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .format-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 2px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n background: var(--mj-bg-surface-card);\n }\n\n .format-option:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n }\n\n .format-option.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-card));\n }\n\n .format-option > i.fa-solid,\n .format-option > i.fas {\n font-size: 24px;\n color: var(--mj-text-muted);\n width: 32px;\n text-align: center;\n }\n\n .format-option.selected > i.fa-solid,\n .format-option.selected > i.fas {\n color: var(--mj-brand-primary);\n }\n\n .format-details {\n flex: 1;\n }\n\n .format-name {\n font-weight: 500;\n font-size: 14px;\n margin-bottom: 2px;\n }\n\n .format-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .check-icon {\n font-size: 20px;\n color: var(--mj-status-success);\n }\n\n .option-checkboxes {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .checkbox-label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n cursor: pointer;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .checkbox-label:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .checkbox-label input[type=\"checkbox\"] {\n margin-right: 8px;\n cursor: pointer;\n }\n\n .checkbox-label > span {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n }\n\n .checkbox-label input[type=\"checkbox\"]:disabled {\n cursor: not-allowed;\n }\n\n .theme-mode-select {\n margin-left: 8px;\n padding: 2px 6px;\n font-size: 13px;\n }\n\n .checkbox-label small {\n margin-left: 28px;\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .format-specific-options {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .subsection-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .error-message {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n margin-top: 15px;\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 4px;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n color: var(--mj-text-muted);\n }\n\n mj-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 15px 20px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n mj-dialog-actions button i {\n margin-right: 6px;\n }\n `]\n})\nexport class ExportModalComponent {\n private _isVisible = false;\n @Input()\n set isVisible(value: boolean) {\n const opening = value && !this._isVisible;\n this._isVisible = value;\n if (opening) {\n // Fresh open: \"Include branding\" defaults ON only when the host explicitly\n // configured export branding — plain MJ Explorer keeps today's unthemed file.\n // NOTE this reads `branding`, so a host binding both in one change-detection\n // pass must bind [branding] FIRST (Angular sets inputs in template order).\n // chat-area's template does; a host mounting with isVisible already true and\n // branding bound after would get the checkbox defaulted off.\n this.exportOptions.includeTheme = !!this.branding;\n }\n }\n get isVisible(): boolean {\n return this._isVisible;\n }\n\n @Input() conversation?: MJConversationEntity;\n @Input() currentUser!: UserInfo;\n /**\n * Host-supplied export branding (theme tokens / logo / title). When set, the\n * HTML format's \"Include branding\" checkbox defaults on and the branding is\n * passed to {@link ExportService} on export. See `ExportBranding`.\n */\n @Input() branding: ExportBranding | null = null;\n @Output() cancelled = new EventEmitter<void>();\n @Output() exported = new EventEmitter<void>();\n\n selectedFormat: ExportFormat | null = 'markdown';\n isExporting = false;\n errorMessage = '';\n\n exportOptions: ExportOptions = {\n includeMessages: true,\n includeMetadata: true,\n prettyPrint: true,\n includeCSS: true,\n includeTheme: false,\n themeMode: 'light'\n };\n\n /** Format-aware hint under the \"Include branding\" checkbox. */\n get brandingHint(): string {\n if (this.selectedFormat === 'html') {\n if (!this.exportOptions.includeCSS) {\n return 'Requires \"Include CSS styling\"';\n }\n return `Embed the app's theme colors${this.branding?.logoUrl ? ', logo,' : ''} and attribution line`;\n }\n const logo = this.branding?.logoUrl && this.selectedFormat === 'markdown' ? ', logo,' : '';\n return `Add the title${logo} and attribution line`;\n }\n\n /**\n * The options actually handed to the service. `includeTheme` is the user's INTENT;\n * this resolves it against the selected format:\n *\n * - HTML with the stylesheet off cannot carry branding (a full-size unstyled logo and\n * an unstyled footer would leak), so it drops.\n * - `includeCSS` is an HTML-only concern and must NOT decide anything for\n * markdown / text / JSON — resolving here rather than mutating `includeTheme` is\n * what keeps an HTML-format toggle from silently following the user into another\n * format.\n */\n private resolveExportOptions(): ExportOptions {\n const unstyledHtml = this.selectedFormat === 'html' && !this.exportOptions.includeCSS;\n const brandingOn = !!this.exportOptions.includeTheme && !unstyledHtml;\n return {\n ...this.exportOptions,\n includeTheme: brandingOn,\n branding: brandingOn ? (this.branding ?? undefined) : undefined\n };\n }\n\n get exportTitle(): string {\n return `Export: ${this.conversation?.Name || 'Conversation'}`;\n }\n\n get canExport(): boolean {\n return !this.isExporting &&\n !!this.selectedFormat &&\n (this.exportOptions.includeMessages === true);\n }\n\n formats = [\n {\n value: 'markdown' as ExportFormat,\n name: 'Markdown',\n description: 'Formatted text with markdown syntax',\n icon: 'fa-solid fa-file-alt'\n },\n {\n value: 'json' as ExportFormat,\n name: 'JSON',\n description: 'Structured data format',\n icon: 'fa-solid fa-code'\n },\n {\n value: 'html' as ExportFormat,\n name: 'HTML',\n description: 'Web page format',\n icon: 'fa-solid fa-file-code'\n },\n {\n value: 'text' as ExportFormat,\n name: 'Plain Text',\n description: 'Simple text file',\n icon: 'fa-solid fa-file'\n }\n ];\n\n constructor(\n private exportService: ExportService,\n private dialogService: DialogService,\n private toastService: ToastService\n ) {}\n\n selectFormat(format: ExportFormat): void {\n if (!this.isExporting) {\n this.selectedFormat = format;\n }\n }\n\n async onExport(): Promise<void> {\n if (!this.canExport || !this.conversation) {\n return;\n }\n\n if (!this.exportOptions.includeMessages) {\n this.errorMessage = 'At least \"Include messages\" must be selected';\n return;\n }\n\n this.isExporting = true;\n this.errorMessage = '';\n\n try {\n await this.exportService.exportConversation(\n this.conversation.ID,\n this.selectedFormat!,\n this.currentUser,\n this.resolveExportOptions()\n );\n\n this.toastService.success('Conversation exported successfully');\n this.exported.emit();\n this.resetForm();\n } catch (error) {\n console.error('Error exporting conversation:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Failed to export conversation';\n this.toastService.error(this.errorMessage);\n } finally {\n this.isExporting = false;\n }\n }\n\n onCancel(): void {\n this.cancelled.emit();\n this.resetForm();\n }\n\n private resetForm(): void {\n this.selectedFormat = 'markdown';\n this.errorMessage = '';\n this.exportOptions = {\n includeMessages: true,\n includeMetadata: true,\n prettyPrint: true,\n includeCSS: true,\n includeTheme: !!this.branding,\n themeMode: 'light'\n };\n this.isVisible = false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"export-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/export/export-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 } from '@memberjunction/core';\nimport { ExportService, ExportFormat, ExportOptions, ExportBranding } from '../../services/export.service';\nimport { DialogService } from '../../services/dialog.service';\nimport { ToastService } from '../../services/toast.service';\n\n@Component({\n standalone: false,\n selector: 'mj-export-modal',\n template: `\n @if (isVisible) {\n <mj-dialog\n [Title]=\"exportTitle\"\n [Width]=\"600\"\n [Height]=\"600\"\n [Visible]=\"true\"\n (Close)=\"onCancel()\">\n <div class=\"export-modal-content\">\n <section class=\"format-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-file-export\"></i>\n Export Format\n </h3>\n <p class=\"section-description\">\n Choose a format to export this conversation:\n </p>\n <div class=\"format-options\">\n @for (format of formats; track format.value) {\n <div\n class=\"format-option\"\n [class.selected]=\"selectedFormat === format.value\"\n (click)=\"selectFormat(format.value)\">\n <i [class]=\"format.icon\"></i>\n <div class=\"format-details\">\n <div class=\"format-name\">{{ format.name }}</div>\n <div class=\"format-description\">{{ format.description }}</div>\n </div>\n @if (selectedFormat === format.value) {\n <i class=\"fa-solid fa-check-circle check-icon\"></i>\n }\n </div>\n }\n </div>\n </section>\n <section class=\"options-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Export Options\n </h3>\n <div class=\"option-checkboxes\">\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeMessages\"\n [disabled]=\"isExporting\">\n <span>Include messages</span>\n <small>Export all conversation messages</small>\n </label>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeMetadata\"\n [disabled]=\"isExporting\">\n <span>Include metadata</span>\n <small>Add creation date, IDs, and other metadata</small>\n </label>\n <!-- Branding applies to EVERY format (HTML gets theme colors + logo +\n footer; markdown/text/JSON get the title and attribution), so it\n belongs here rather than under HTML Options. Shown for HTML even with\n no host branding, because it still snapshots the app's theme. -->\n @if (selectedFormat === 'html' || branding) {\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeTheme\"\n [disabled]=\"isExporting || (selectedFormat === 'html' && !exportOptions.includeCSS)\">\n <span>Include branding</span>\n <small>{{ brandingHint }}</small>\n </label>\n }\n </div>\n @if (selectedFormat === 'json') {\n <div class=\"format-specific-options\">\n <h4 class=\"subsection-title\">JSON Options</h4>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.prettyPrint\"\n [disabled]=\"isExporting\">\n <span>Pretty print</span>\n <small>Format JSON with indentation</small>\n </label>\n </div>\n }\n @if (selectedFormat === 'html') {\n <div class=\"format-specific-options\">\n <h4 class=\"subsection-title\">HTML Options</h4>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"exportOptions.includeCSS\"\n [disabled]=\"isExporting\">\n <span>Include CSS styling</span>\n <small>Embed styles for better presentation</small>\n </label>\n <!-- Which palette gets baked in — NOT the mode the app happens to be in.\n Exporting from a dark session would otherwise put dark text on the\n export's white page. -->\n @if (exportOptions.includeTheme && exportOptions.includeCSS) {\n <label class=\"checkbox-label\">\n <span>Theme</span>\n <select\n class=\"mj-input theme-mode-select\"\n [(ngModel)]=\"exportOptions.themeMode\"\n [disabled]=\"isExporting\">\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n <small>Palette baked into the exported file</small>\n </label>\n }\n </div>\n }\n </section>\n @if (errorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ errorMessage }}\n </div>\n }\n @if (isExporting) {\n <div class=\"loading-indicator\">\n <mj-loading text=\"Exporting conversation...\" size=\"small\"></mj-loading>\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton [disabled]=\"isExporting\" (click)=\"onCancel()\">\n <i class=\"fa-solid fa-times\"></i>\n Cancel\n </button>\n <button mjButton variant=\"primary\" [disabled]=\"!canExport\" (click)=\"onExport()\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n `,\n styles: [`\n .export-modal-content {\n padding: 20px;\n max-height: calc(600px - 120px);\n overflow-y: auto;\n }\n\n section {\n margin-bottom: 24px;\n }\n\n .section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .section-title i {\n color: var(--mj-brand-primary);\n }\n\n .section-description {\n margin: 0 0 16px 0;\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .format-options {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .format-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 2px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n background: var(--mj-bg-surface-card);\n }\n\n .format-option:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n }\n\n .format-option.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-card));\n }\n\n .format-option > i.fa-solid,\n .format-option > i.fas {\n font-size: 24px;\n color: var(--mj-text-muted);\n width: 32px;\n text-align: center;\n }\n\n .format-option.selected > i.fa-solid,\n .format-option.selected > i.fas {\n color: var(--mj-brand-primary);\n }\n\n .format-details {\n flex: 1;\n }\n\n .format-name {\n font-weight: 500;\n font-size: 14px;\n margin-bottom: 2px;\n }\n\n .format-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .check-icon {\n font-size: 20px;\n color: var(--mj-status-success);\n }\n\n .option-checkboxes {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .checkbox-label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n cursor: pointer;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .checkbox-label:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .checkbox-label input[type=\"checkbox\"] {\n margin-right: 8px;\n cursor: pointer;\n }\n\n .checkbox-label > span {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n }\n\n .checkbox-label input[type=\"checkbox\"]:disabled {\n cursor: not-allowed;\n }\n\n .theme-mode-select {\n margin-left: 8px;\n padding: 2px 6px;\n font-size: 13px;\n }\n\n .checkbox-label small {\n margin-left: 28px;\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .format-specific-options {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .subsection-title {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .error-message {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n margin-top: 15px;\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 4px;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n color: var(--mj-text-muted);\n }\n\n mj-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 15px 20px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n mj-dialog-actions button i {\n margin-right: 6px;\n }\n `]\n})\nexport class ExportModalComponent {\n private _isVisible = false;\n @Input()\n set IsVisible(value: boolean) {\n const opening = value && !this._isVisible;\n this._isVisible = value;\n if (opening) {\n // Fresh open: \"Include branding\" defaults ON only when the host explicitly\n // configured export branding — plain MJ Explorer keeps today's unthemed file.\n // NOTE this reads `branding`, so a host binding both in one change-detection\n // pass must bind [branding] FIRST (Angular sets inputs in template order).\n // chat-area's template does; a host mounting with isVisible already true and\n // branding bound after would get the checkbox defaulted off.\n this.ExportOptions.includeTheme = !!this.Branding;\n }\n }\n get IsVisible(): boolean {\n return this._isVisible;\n }\n\n /** @deprecated Use {@link IsVisible}. */\n get isVisible(): boolean {\n return this.IsVisible;\n }\n /** @deprecated Use {@link IsVisible}. */\n @Input() set isVisible(value: boolean) {\n this.IsVisible = value;\n }\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 /**\n * Host-supplied export branding (theme tokens / logo / title). When set, the\n * HTML format's \"Include branding\" checkbox defaults on and the branding is\n * passed to {@link ExportService} on export. See `ExportBranding`.\n */\n @Input() Branding: ExportBranding | null = null;\n\n /** @deprecated Use {@link Branding}. */\n @Input() set branding(value: ExportBranding | null) {\n this.Branding = value;\n }\n /** @deprecated Use {@link Branding}. */\n get branding(): ExportBranding | null {\n return this.Branding;\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() Exported = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link Exported}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (exported) keeps working. Must stay AFTER Exported: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() exported = this.Exported;\n\n SelectedFormat: ExportFormat | null = 'markdown';\n\n /** @deprecated Use {@link SelectedFormat}. */\n get selectedFormat(): ExportFormat | null {\n return this.SelectedFormat;\n }\n /** @deprecated Use {@link SelectedFormat}. */\n set selectedFormat(value: ExportFormat | null) {\n this.SelectedFormat = value;\n }\n IsExporting = false;\n\n /** @deprecated Use {@link IsExporting}. */\n get isExporting() {\n return this.IsExporting;\n }\n /** @deprecated Use {@link IsExporting}. */\n set isExporting(value) {\n this.IsExporting = 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 ExportOptions: ExportOptions = {\n includeMessages: true,\n includeMetadata: true,\n prettyPrint: true,\n includeCSS: true,\n includeTheme: false,\n themeMode: 'light'\n };\n\n /** @deprecated Use {@link ExportOptions}. */\n get exportOptions(): ExportOptions {\n return this.ExportOptions;\n }\n /** @deprecated Use {@link ExportOptions}. */\n set exportOptions(value: ExportOptions) {\n this.ExportOptions = value;\n }\n\n /** Format-aware hint under the \"Include branding\" checkbox. */\n get BrandingHint(): string {\n if (this.SelectedFormat === 'html') {\n if (!this.ExportOptions.includeCSS) {\n return 'Requires \"Include CSS styling\"';\n }\n return `Embed the app's theme colors${this.Branding?.logoUrl ? ', logo,' : ''} and attribution line`;\n }\n const logo = this.Branding?.logoUrl && this.SelectedFormat === 'markdown' ? ', logo,' : '';\n return `Add the title${logo} and attribution line`;\n }\n\n /** @deprecated Use {@link BrandingHint}. */\n get brandingHint(): string {\n return this.BrandingHint;\n }\n\n /**\n * The options actually handed to the service. `includeTheme` is the user's INTENT;\n * this resolves it against the selected format:\n *\n * - HTML with the stylesheet off cannot carry branding (a full-size unstyled logo and\n * an unstyled footer would leak), so it drops.\n * - `includeCSS` is an HTML-only concern and must NOT decide anything for\n * markdown / text / JSON — resolving here rather than mutating `includeTheme` is\n * what keeps an HTML-format toggle from silently following the user into another\n * format.\n */\n private resolveExportOptions(): ExportOptions {\n const unstyledHtml = this.SelectedFormat === 'html' && !this.ExportOptions.includeCSS;\n const brandingOn = !!this.ExportOptions.includeTheme && !unstyledHtml;\n return {\n ...this.ExportOptions,\n includeTheme: brandingOn,\n branding: brandingOn ? (this.Branding ?? undefined) : undefined\n };\n }\n\n get ExportTitle(): string {\n return `Export: ${this.Conversation?.Name || 'Conversation'}`;\n }\n\n /** @deprecated Use {@link ExportTitle}. */\n get exportTitle(): string {\n return this.ExportTitle;\n }\n\n get CanExport(): boolean {\n return !this.IsExporting &&\n !!this.SelectedFormat &&\n (this.ExportOptions.includeMessages === true);\n }\n\n /** @deprecated Use {@link CanExport}. */\n get canExport(): boolean {\n return this.CanExport;\n }\n\n Formats = [\n {\n value: 'markdown' as ExportFormat,\n name: 'Markdown',\n description: 'Formatted text with markdown syntax',\n icon: 'fa-solid fa-file-alt'\n },\n {\n value: 'json' as ExportFormat,\n name: 'JSON',\n description: 'Structured data format',\n icon: 'fa-solid fa-code'\n },\n {\n value: 'html' as ExportFormat,\n name: 'HTML',\n description: 'Web page format',\n icon: 'fa-solid fa-file-code'\n },\n {\n value: 'text' as ExportFormat,\n name: 'Plain Text',\n description: 'Simple text file',\n icon: 'fa-solid fa-file'\n }\n ];\n\n /** @deprecated Use {@link Formats}. */\n get formats() {\n return this.Formats;\n }\n /** @deprecated Use {@link Formats}. */\n set formats(value) {\n this.Formats = value;\n }\n\n constructor(\n private exportService: ExportService,\n private dialogService: DialogService,\n private toastService: ToastService\n ) {}\n\n SelectFormat(format: ExportFormat): void {\n if (!this.IsExporting) {\n this.SelectedFormat = format;\n }\n }\n\n /** @deprecated Use {@link SelectFormat}. */\n selectFormat(format: ExportFormat): void {\n return this.SelectFormat(format);\n }\n\n async OnExport(): Promise<void> {\n if (!this.CanExport || !this.Conversation) {\n return;\n }\n\n if (!this.ExportOptions.includeMessages) {\n this.ErrorMessage = 'At least \"Include messages\" must be selected';\n return;\n }\n\n this.IsExporting = true;\n this.ErrorMessage = '';\n\n try {\n await this.exportService.exportConversation(\n this.Conversation.ID,\n this.SelectedFormat!,\n this.CurrentUser,\n this.resolveExportOptions()\n );\n\n this.toastService.success('Conversation exported successfully');\n this.Exported.emit();\n this.resetForm();\n } catch (error) {\n console.error('Error exporting conversation:', error);\n this.ErrorMessage = error instanceof Error ? error.message : 'Failed to export conversation';\n this.toastService.error(this.ErrorMessage);\n } finally {\n this.IsExporting = false;\n }\n }\n\n /** @deprecated Use {@link OnExport}. */\n async onExport(): Promise<void> {\n return this.OnExport();\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.SelectedFormat = 'markdown';\n this.ErrorMessage = '';\n this.ExportOptions = {\n includeMessages: true,\n includeMetadata: true,\n prettyPrint: true,\n includeCSS: true,\n includeTheme: !!this.Branding,\n themeMode: 'light'\n };\n this.IsVisible = false;\n }\n}\n"]}
|
|
@@ -7,19 +7,45 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class GlobalTasksPanelComponent implements OnInit, OnDestroy {
|
|
9
9
|
private activeTasksService;
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
Tasks: ActiveTask[];
|
|
11
|
+
/** @deprecated Use {@link Tasks}. */
|
|
12
|
+
get tasks(): ActiveTask[];
|
|
13
|
+
/** @deprecated Use {@link Tasks}. */
|
|
14
|
+
set tasks(value: ActiveTask[]);
|
|
15
|
+
IsMinimized: boolean;
|
|
16
|
+
/** @deprecated Use {@link IsMinimized}. */
|
|
17
|
+
get isMinimized(): boolean;
|
|
18
|
+
/** @deprecated Use {@link IsMinimized}. */
|
|
19
|
+
set isMinimized(value: boolean);
|
|
12
20
|
private destroy$;
|
|
21
|
+
TaskClicked: EventEmitter<ActiveTask>;
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Use {@link TaskClicked}.
|
|
24
|
+
*
|
|
25
|
+
* The same emitter under the old binding name, so a template still binding
|
|
26
|
+
* (taskClicked) keeps working. Must stay AFTER TaskClicked: class fields
|
|
27
|
+
* initialise in order, and the other way round this captures undefined.
|
|
28
|
+
*/
|
|
13
29
|
taskClicked: EventEmitter<ActiveTask>;
|
|
14
30
|
constructor(activeTasksService: ActiveTasksService);
|
|
15
31
|
ngOnInit(): void;
|
|
16
32
|
ngOnDestroy(): void;
|
|
33
|
+
Expand(): void;
|
|
34
|
+
/** @deprecated Use {@link Expand}. */
|
|
17
35
|
expand(): void;
|
|
36
|
+
Minimize(): void;
|
|
37
|
+
/** @deprecated Use {@link Minimize}. */
|
|
18
38
|
minimize(): void;
|
|
39
|
+
OnTaskClick(task: ActiveTask): void;
|
|
40
|
+
/** @deprecated Use {@link OnTaskClick}. */
|
|
19
41
|
onTaskClick(task: ActiveTask): void;
|
|
42
|
+
GetTrimmedStatus(status: string): string;
|
|
43
|
+
/** @deprecated Use {@link GetTrimmedStatus}. */
|
|
20
44
|
getTrimmedStatus(status: string): string;
|
|
45
|
+
GetElapsedTime(task: ActiveTask): string;
|
|
46
|
+
/** @deprecated Use {@link GetElapsedTime}. */
|
|
21
47
|
getElapsedTime(task: ActiveTask): string;
|
|
22
48
|
static ɵfac: i0.ɵɵFactoryDeclaration<GlobalTasksPanelComponent, never>;
|
|
23
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GlobalTasksPanelComponent, "mj-global-tasks-panel", never, {}, { "taskClicked": "taskClicked"; }, never, never, false, never>;
|
|
49
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GlobalTasksPanelComponent, "mj-global-tasks-panel", never, {}, { "TaskClicked": "TaskClicked"; "taskClicked": "taskClicked"; }, never, never, false, never>;
|
|
24
50
|
}
|
|
25
51
|
//# sourceMappingURL=global-tasks-panel.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-tasks-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/global-tasks/global-tasks-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;;AAIrF;;;GAGG;AACH,qBAkSa,yBAA0B,YAAW,MAAM,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"global-tasks-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/global-tasks/global-tasks-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;;AAIrF;;;GAGG;AACH,qBAkSa,yBAA0B,YAAW,MAAM,EAAE,SAAS;IAmCrD,OAAO,CAAC,kBAAkB;IAlC/B,KAAK,EAAE,UAAU,EAAE,CAAM;IAEhC,qCAAqC;IACrC,IAAW,KAAK,IAAI,UAAU,EAAE,CAE/B;IACD,qCAAqC;IACrC,IAAW,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAEnC;IACM,WAAW,EAAE,OAAO,CAAS;IAEpC,2CAA2C;IAC3C,IAAW,WAAW,IAAI,OAAO,CAEhC;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAK,EAAE,OAAO,EAEpC;IAED,OAAO,CAAC,QAAQ,CAAuB;IAE7B,WAAW,2BAAkC;IAEvD;;;;;;OAMG;IACO,WAAW,2BAAoB;gBAErB,kBAAkB,EAAE,kBAAkB;IAE1D,QAAQ;IAcR,WAAW;IAKX,MAAM;IAIN,sCAAsC;IACtC,MAAM;IAIN,QAAQ;IAIR,wCAAwC;IACxC,QAAQ;IAIR,WAAW,CAAC,IAAI,EAAE,UAAU;IAI5B,2CAA2C;IAC3C,WAAW,CAAC,IAAI,EAAE,UAAU;IAI5B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAMxC,gDAAgD;IAChD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIxC,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAexC,8CAA8C;IAC9C,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;yCA9G7B,yBAAyB;2CAAzB,yBAAyB;CAiHrC"}
|
|
@@ -96,19 +96,43 @@ function GlobalTasksPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1)
|
|
|
96
96
|
*/
|
|
97
97
|
export class GlobalTasksPanelComponent {
|
|
98
98
|
activeTasksService;
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
Tasks = [];
|
|
100
|
+
/** @deprecated Use {@link Tasks}. */
|
|
101
|
+
get tasks() {
|
|
102
|
+
return this.Tasks;
|
|
103
|
+
}
|
|
104
|
+
/** @deprecated Use {@link Tasks}. */
|
|
105
|
+
set tasks(value) {
|
|
106
|
+
this.Tasks = value;
|
|
107
|
+
}
|
|
108
|
+
IsMinimized = false;
|
|
109
|
+
/** @deprecated Use {@link IsMinimized}. */
|
|
110
|
+
get isMinimized() {
|
|
111
|
+
return this.IsMinimized;
|
|
112
|
+
}
|
|
113
|
+
/** @deprecated Use {@link IsMinimized}. */
|
|
114
|
+
set isMinimized(value) {
|
|
115
|
+
this.IsMinimized = value;
|
|
116
|
+
}
|
|
101
117
|
destroy$ = new Subject();
|
|
102
|
-
|
|
118
|
+
TaskClicked = new EventEmitter();
|
|
119
|
+
/**
|
|
120
|
+
* @deprecated Use {@link TaskClicked}.
|
|
121
|
+
*
|
|
122
|
+
* The same emitter under the old binding name, so a template still binding
|
|
123
|
+
* (taskClicked) keeps working. Must stay AFTER TaskClicked: class fields
|
|
124
|
+
* initialise in order, and the other way round this captures undefined.
|
|
125
|
+
*/
|
|
126
|
+
taskClicked = this.TaskClicked;
|
|
103
127
|
constructor(activeTasksService) {
|
|
104
128
|
this.activeTasksService = activeTasksService;
|
|
105
129
|
}
|
|
106
130
|
ngOnInit() {
|
|
107
131
|
// Subscribe to active tasks
|
|
108
132
|
this.activeTasksService.tasks$.pipe(takeUntil(this.destroy$)).subscribe(tasks => {
|
|
109
|
-
this.
|
|
133
|
+
this.Tasks = tasks;
|
|
110
134
|
// Auto-expand if tasks appear and panel was minimized
|
|
111
|
-
if (this.
|
|
135
|
+
if (this.Tasks.length > 0 && this.IsMinimized) {
|
|
112
136
|
// Keep minimized, let user expand manually
|
|
113
137
|
}
|
|
114
138
|
});
|
|
@@ -117,21 +141,37 @@ export class GlobalTasksPanelComponent {
|
|
|
117
141
|
this.destroy$.next();
|
|
118
142
|
this.destroy$.complete();
|
|
119
143
|
}
|
|
144
|
+
Expand() {
|
|
145
|
+
this.IsMinimized = false;
|
|
146
|
+
}
|
|
147
|
+
/** @deprecated Use {@link Expand}. */
|
|
120
148
|
expand() {
|
|
121
|
-
this.
|
|
149
|
+
return this.Expand();
|
|
150
|
+
}
|
|
151
|
+
Minimize() {
|
|
152
|
+
this.IsMinimized = true;
|
|
122
153
|
}
|
|
154
|
+
/** @deprecated Use {@link Minimize}. */
|
|
123
155
|
minimize() {
|
|
124
|
-
this.
|
|
156
|
+
return this.Minimize();
|
|
157
|
+
}
|
|
158
|
+
OnTaskClick(task) {
|
|
159
|
+
this.TaskClicked.emit(task);
|
|
125
160
|
}
|
|
161
|
+
/** @deprecated Use {@link OnTaskClick}. */
|
|
126
162
|
onTaskClick(task) {
|
|
127
|
-
this.
|
|
163
|
+
return this.OnTaskClick(task);
|
|
128
164
|
}
|
|
129
|
-
|
|
165
|
+
GetTrimmedStatus(status) {
|
|
130
166
|
// Remove emojis and trim to 50 chars
|
|
131
167
|
const cleaned = status.replace(/[\u{1F600}-\u{1F64F}]/gu, '').trim();
|
|
132
168
|
return cleaned.length > 50 ? cleaned.substring(0, 47) + '...' : cleaned;
|
|
133
169
|
}
|
|
134
|
-
|
|
170
|
+
/** @deprecated Use {@link GetTrimmedStatus}. */
|
|
171
|
+
getTrimmedStatus(status) {
|
|
172
|
+
return this.GetTrimmedStatus(status);
|
|
173
|
+
}
|
|
174
|
+
GetElapsedTime(task) {
|
|
135
175
|
const elapsed = Date.now() - task.startTime;
|
|
136
176
|
const seconds = Math.floor(elapsed / 1000);
|
|
137
177
|
const minutes = Math.floor(seconds / 60);
|
|
@@ -146,8 +186,12 @@ export class GlobalTasksPanelComponent {
|
|
|
146
186
|
return `${seconds}s`;
|
|
147
187
|
}
|
|
148
188
|
}
|
|
189
|
+
/** @deprecated Use {@link GetElapsedTime}. */
|
|
190
|
+
getElapsedTime(task) {
|
|
191
|
+
return this.GetElapsedTime(task);
|
|
192
|
+
}
|
|
149
193
|
static ɵfac = function GlobalTasksPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || GlobalTasksPanelComponent)(i0.ɵɵdirectiveInject(i1.ActiveTasksService)); };
|
|
150
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GlobalTasksPanelComponent, selectors: [["mj-global-tasks-panel"]], outputs: { taskClicked: "taskClicked" }, standalone: false, decls: 1, vars: 1, consts: [[1, "global-tasks-panel"], ["title", "View active tasks", 1, "minimized-badge"], [1, "expanded-panel"], ["title", "View active tasks", 1, "minimized-badge", 3, "click"], [1, "fas", "fa-bolt"], [1, "task-count"], [1, "panel-header"], [1, "header-left"], [1, "fas", "fa-circle-notch", "fa-spin"], ["title", "Minimize", 1, "minimize-btn", 3, "click"], [1, "fas", "fa-minus"], [1, "panel-content"], [1, "task-item"], [1, "task-item", 3, "click"], [1, "task-header"], [1, "fas", "fa-robot"], [1, "task-agent"], [1, "task-conversation"], [1, "task-status"], [1, "status-indicator", "active"], [1, "status-text"], [1, "task-elapsed"], [1, "fas", "fa-message"]], template: function GlobalTasksPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
194
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GlobalTasksPanelComponent, selectors: [["mj-global-tasks-panel"]], outputs: { TaskClicked: "TaskClicked", taskClicked: "taskClicked" }, standalone: false, decls: 1, vars: 1, consts: [[1, "global-tasks-panel"], ["title", "View active tasks", 1, "minimized-badge"], [1, "expanded-panel"], ["title", "View active tasks", 1, "minimized-badge", 3, "click"], [1, "fas", "fa-bolt"], [1, "task-count"], [1, "panel-header"], [1, "header-left"], [1, "fas", "fa-circle-notch", "fa-spin"], ["title", "Minimize", 1, "minimize-btn", 3, "click"], [1, "fas", "fa-minus"], [1, "panel-content"], [1, "task-item"], [1, "task-item", 3, "click"], [1, "task-header"], [1, "fas", "fa-robot"], [1, "task-agent"], [1, "task-conversation"], [1, "task-status"], [1, "status-indicator", "active"], [1, "status-text"], [1, "task-elapsed"], [1, "fas", "fa-message"]], template: function GlobalTasksPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
151
195
|
i0.ɵɵconditionalCreate(0, GlobalTasksPanelComponent_Conditional_0_Template, 3, 2, "div", 0);
|
|
152
196
|
} if (rf & 2) {
|
|
153
197
|
i0.ɵɵconditional(ctx.tasks.length > 0 ? 0 : -1);
|
|
@@ -206,7 +250,9 @@ export class GlobalTasksPanelComponent {
|
|
|
206
250
|
</div>
|
|
207
251
|
}
|
|
208
252
|
`, styles: ["\n .global-tasks-panel {\n position: fixed;\n bottom: 24px;\n right: 24px;\n z-index: 9999;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n /* Minimized Badge */\n .minimized-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 50%;\n width: 56px;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: var(--mj-shadow-md);\n transition: all 0.3s ease;\n position: relative;\n animation: pulse 2s ease-in-out infinite;\n }\n\n .minimized-badge:hover {\n transform: scale(1.1);\n box-shadow: var(--mj-shadow-lg);\n }\n\n .minimized-badge i {\n font-size: 20px;\n margin-right: 4px;\n }\n\n .minimized-badge .task-count {\n position: absolute;\n top: -4px;\n right: -4px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-radius: 50%;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 600;\n border: 2px solid var(--mj-bg-surface);\n }\n\n @keyframes pulse {\n 0%, 100% {\n box-shadow: var(--mj-shadow-md);\n }\n 50% {\n box-shadow: var(--mj-shadow-lg);\n }\n }\n\n /* Expanded Panel */\n .expanded-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-lg);\n width: 360px;\n max-height: 480px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: slideIn 0.3s ease-out;\n }\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translateY(20px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n .panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n }\n\n .header-left i {\n font-size: 16px;\n }\n\n .minimize-btn {\n background: rgba(255, 255, 255, 0.2);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .minimize-btn:hover {\n background: rgba(255, 255, 255, 0.3);\n }\n\n .panel-content {\n overflow-y: auto;\n max-height: 420px;\n }\n\n .task-item {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .task-item:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .task-item:last-child {\n border-bottom: none;\n }\n\n .task-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n }\n\n .task-header i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n\n .task-agent {\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n }\n\n .task-conversation {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n }\n\n .task-conversation i {\n font-size: 11px;\n }\n\n .task-status {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n }\n\n .status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n }\n\n .status-indicator.active {\n background: var(--mj-status-success);\n animation: blink 2s ease-in-out infinite;\n }\n\n @keyframes blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n }\n\n .status-text {\n font-size: 12px;\n color: var(--mj-text-secondary);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .task-elapsed {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-variant-numeric: tabular-nums;\n }\n\n /* Scrollbar Styling */\n .panel-content::-webkit-scrollbar {\n width: 6px;\n }\n\n .panel-content::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-sunken);\n }\n\n .panel-content::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n }\n\n .panel-content::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n }\n "] }]
|
|
209
|
-
}], () => [{ type: i1.ActiveTasksService }], {
|
|
253
|
+
}], () => [{ type: i1.ActiveTasksService }], { TaskClicked: [{
|
|
254
|
+
type: Output
|
|
255
|
+
}], taskClicked: [{
|
|
210
256
|
type: Output
|
|
211
257
|
}] }); })();
|
|
212
258
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(GlobalTasksPanelComponent, { className: "GlobalTasksPanelComponent", filePath: "src/lib/components/global-tasks/global-tasks-panel.component.ts", lineNumber: 300 }); })();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-tasks-panel.component.js","sourceRoot":"","sources":["../../../../src/lib/components/global-tasks/global-tasks-panel.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { ActiveTasksService, ActiveTask } from '../../services/active-tasks.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Global floating tasks panel that shows all active tasks across all conversations\n * Appears in bottom-right corner, minimizable, shows only when tasks > 0\n */\n@Component({\n standalone: false,\n selector: 'mj-global-tasks-panel',\n template: `\n @if (tasks.length > 0) {\n <div class=\"global-tasks-panel\">\n <!-- Minimized State -->\n @if (isMinimized) {\n <button\n class=\"minimized-badge\"\n (click)=\"expand()\"\n title=\"View active tasks\">\n <i class=\"fas fa-bolt\"></i>\n <span class=\"task-count\">{{ tasks.length }}</span>\n </button>\n }\n <!-- Expanded State -->\n @if (!isMinimized) {\n <div class=\"expanded-panel\">\n <div class=\"panel-header\">\n <div class=\"header-left\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n <span>Active Tasks ({{ tasks.length }})</span>\n </div>\n <button class=\"minimize-btn\" (click)=\"minimize()\" title=\"Minimize\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n <div class=\"panel-content\">\n @for (task of tasks; track task) {\n <div class=\"task-item\" (click)=\"onTaskClick(task)\">\n <div class=\"task-header\">\n <i class=\"fas fa-robot\"></i>\n <span class=\"task-agent\">{{ task.agentName }}</span>\n </div>\n @if (task.conversationName) {\n <div class=\"task-conversation\">\n <i class=\"fas fa-message\"></i>\n <span>{{ task.conversationName }}</span>\n </div>\n }\n <div class=\"task-status\">\n <span class=\"status-indicator active\"></span>\n <span class=\"status-text\">{{ getTrimmedStatus(task.status) }}</span>\n </div>\n <div class=\"task-elapsed\">{{ getElapsedTime(task) }}</div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n `,\n styles: [`\n .global-tasks-panel {\n position: fixed;\n bottom: 24px;\n right: 24px;\n z-index: 9999;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n /* Minimized Badge */\n .minimized-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 50%;\n width: 56px;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: var(--mj-shadow-md);\n transition: all 0.3s ease;\n position: relative;\n animation: pulse 2s ease-in-out infinite;\n }\n\n .minimized-badge:hover {\n transform: scale(1.1);\n box-shadow: var(--mj-shadow-lg);\n }\n\n .minimized-badge i {\n font-size: 20px;\n margin-right: 4px;\n }\n\n .minimized-badge .task-count {\n position: absolute;\n top: -4px;\n right: -4px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-radius: 50%;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 600;\n border: 2px solid var(--mj-bg-surface);\n }\n\n @keyframes pulse {\n 0%, 100% {\n box-shadow: var(--mj-shadow-md);\n }\n 50% {\n box-shadow: var(--mj-shadow-lg);\n }\n }\n\n /* Expanded Panel */\n .expanded-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-lg);\n width: 360px;\n max-height: 480px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: slideIn 0.3s ease-out;\n }\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translateY(20px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n .panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n }\n\n .header-left i {\n font-size: 16px;\n }\n\n .minimize-btn {\n background: rgba(255, 255, 255, 0.2);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .minimize-btn:hover {\n background: rgba(255, 255, 255, 0.3);\n }\n\n .panel-content {\n overflow-y: auto;\n max-height: 420px;\n }\n\n .task-item {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .task-item:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .task-item:last-child {\n border-bottom: none;\n }\n\n .task-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n }\n\n .task-header i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n\n .task-agent {\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n }\n\n .task-conversation {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n }\n\n .task-conversation i {\n font-size: 11px;\n }\n\n .task-status {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n }\n\n .status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n }\n\n .status-indicator.active {\n background: var(--mj-status-success);\n animation: blink 2s ease-in-out infinite;\n }\n\n @keyframes blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n }\n\n .status-text {\n font-size: 12px;\n color: var(--mj-text-secondary);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .task-elapsed {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-variant-numeric: tabular-nums;\n }\n\n /* Scrollbar Styling */\n .panel-content::-webkit-scrollbar {\n width: 6px;\n }\n\n .panel-content::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-sunken);\n }\n\n .panel-content::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n }\n\n .panel-content::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n }\n `]\n})\nexport class GlobalTasksPanelComponent implements OnInit, OnDestroy {\n public tasks: ActiveTask[] = [];\n public isMinimized: boolean = false;\n\n private destroy$ = new Subject<void>();\n\n @Output() taskClicked = new EventEmitter<ActiveTask>();\n\n constructor(private activeTasksService: ActiveTasksService) {}\n\n ngOnInit() {\n // Subscribe to active tasks\n this.activeTasksService.tasks$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(tasks => {\n this.tasks = tasks;\n\n // Auto-expand if tasks appear and panel was minimized\n if (this.tasks.length > 0 && this.isMinimized) {\n // Keep minimized, let user expand manually\n }\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n expand() {\n this.isMinimized = false;\n }\n\n minimize() {\n this.isMinimized = true;\n }\n\n onTaskClick(task: ActiveTask) {\n this.taskClicked.emit(task);\n }\n\n getTrimmedStatus(status: string): string {\n // Remove emojis and trim to 50 chars\n const cleaned = status.replace(/[\\u{1F600}-\\u{1F64F}]/gu, '').trim();\n return cleaned.length > 50 ? cleaned.substring(0, 47) + '...' : cleaned;\n }\n\n getElapsedTime(task: ActiveTask): string {\n const elapsed = Date.now() - task.startTime;\n const seconds = Math.floor(elapsed / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m`;\n } else if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n } else {\n return `${seconds}s`;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"global-tasks-panel.component.js","sourceRoot":"","sources":["../../../../src/lib/components/global-tasks/global-tasks-panel.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { ActiveTasksService, ActiveTask } from '../../services/active-tasks.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Global floating tasks panel that shows all active tasks across all conversations\n * Appears in bottom-right corner, minimizable, shows only when tasks > 0\n */\n@Component({\n standalone: false,\n selector: 'mj-global-tasks-panel',\n template: `\n @if (tasks.length > 0) {\n <div class=\"global-tasks-panel\">\n <!-- Minimized State -->\n @if (isMinimized) {\n <button\n class=\"minimized-badge\"\n (click)=\"expand()\"\n title=\"View active tasks\">\n <i class=\"fas fa-bolt\"></i>\n <span class=\"task-count\">{{ tasks.length }}</span>\n </button>\n }\n <!-- Expanded State -->\n @if (!isMinimized) {\n <div class=\"expanded-panel\">\n <div class=\"panel-header\">\n <div class=\"header-left\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n <span>Active Tasks ({{ tasks.length }})</span>\n </div>\n <button class=\"minimize-btn\" (click)=\"minimize()\" title=\"Minimize\">\n <i class=\"fas fa-minus\"></i>\n </button>\n </div>\n <div class=\"panel-content\">\n @for (task of tasks; track task) {\n <div class=\"task-item\" (click)=\"onTaskClick(task)\">\n <div class=\"task-header\">\n <i class=\"fas fa-robot\"></i>\n <span class=\"task-agent\">{{ task.agentName }}</span>\n </div>\n @if (task.conversationName) {\n <div class=\"task-conversation\">\n <i class=\"fas fa-message\"></i>\n <span>{{ task.conversationName }}</span>\n </div>\n }\n <div class=\"task-status\">\n <span class=\"status-indicator active\"></span>\n <span class=\"status-text\">{{ getTrimmedStatus(task.status) }}</span>\n </div>\n <div class=\"task-elapsed\">{{ getElapsedTime(task) }}</div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n `,\n styles: [`\n .global-tasks-panel {\n position: fixed;\n bottom: 24px;\n right: 24px;\n z-index: 9999;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n /* Minimized Badge */\n .minimized-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 50%;\n width: 56px;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: var(--mj-shadow-md);\n transition: all 0.3s ease;\n position: relative;\n animation: pulse 2s ease-in-out infinite;\n }\n\n .minimized-badge:hover {\n transform: scale(1.1);\n box-shadow: var(--mj-shadow-lg);\n }\n\n .minimized-badge i {\n font-size: 20px;\n margin-right: 4px;\n }\n\n .minimized-badge .task-count {\n position: absolute;\n top: -4px;\n right: -4px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-radius: 50%;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 600;\n border: 2px solid var(--mj-bg-surface);\n }\n\n @keyframes pulse {\n 0%, 100% {\n box-shadow: var(--mj-shadow-md);\n }\n 50% {\n box-shadow: var(--mj-shadow-lg);\n }\n }\n\n /* Expanded Panel */\n .expanded-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-lg);\n width: 360px;\n max-height: 480px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: slideIn 0.3s ease-out;\n }\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translateY(20px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n .panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n }\n\n .header-left i {\n font-size: 16px;\n }\n\n .minimize-btn {\n background: rgba(255, 255, 255, 0.2);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .minimize-btn:hover {\n background: rgba(255, 255, 255, 0.3);\n }\n\n .panel-content {\n overflow-y: auto;\n max-height: 420px;\n }\n\n .task-item {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .task-item:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .task-item:last-child {\n border-bottom: none;\n }\n\n .task-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n }\n\n .task-header i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n\n .task-agent {\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n }\n\n .task-conversation {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n }\n\n .task-conversation i {\n font-size: 11px;\n }\n\n .task-status {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n }\n\n .status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n }\n\n .status-indicator.active {\n background: var(--mj-status-success);\n animation: blink 2s ease-in-out infinite;\n }\n\n @keyframes blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n }\n\n .status-text {\n font-size: 12px;\n color: var(--mj-text-secondary);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .task-elapsed {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-variant-numeric: tabular-nums;\n }\n\n /* Scrollbar Styling */\n .panel-content::-webkit-scrollbar {\n width: 6px;\n }\n\n .panel-content::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-sunken);\n }\n\n .panel-content::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n }\n\n .panel-content::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n }\n `]\n})\nexport class GlobalTasksPanelComponent implements OnInit, OnDestroy {\n public Tasks: ActiveTask[] = [];\n\n /** @deprecated Use {@link Tasks}. */\n public get tasks(): ActiveTask[] {\n return this.Tasks;\n }\n /** @deprecated Use {@link Tasks}. */\n public set tasks(value: ActiveTask[]) {\n this.Tasks = value;\n }\n public IsMinimized: boolean = false;\n\n /** @deprecated Use {@link IsMinimized}. */\n public get isMinimized(): boolean {\n return this.IsMinimized;\n }\n /** @deprecated Use {@link IsMinimized}. */\n public set isMinimized(value: boolean) {\n this.IsMinimized = value;\n }\n\n private destroy$ = new Subject<void>();\n\n @Output() TaskClicked = new EventEmitter<ActiveTask>();\n\n /**\n * @deprecated Use {@link TaskClicked}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (taskClicked) keeps working. Must stay AFTER TaskClicked: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() taskClicked = this.TaskClicked;\n\n constructor(private activeTasksService: ActiveTasksService) {}\n\n ngOnInit() {\n // Subscribe to active tasks\n this.activeTasksService.tasks$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(tasks => {\n this.Tasks = tasks;\n\n // Auto-expand if tasks appear and panel was minimized\n if (this.Tasks.length > 0 && this.IsMinimized) {\n // Keep minimized, let user expand manually\n }\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n Expand() {\n this.IsMinimized = false;\n }\n\n /** @deprecated Use {@link Expand}. */\n expand() {\n return this.Expand();\n }\n\n Minimize() {\n this.IsMinimized = true;\n }\n\n /** @deprecated Use {@link Minimize}. */\n minimize() {\n return this.Minimize();\n }\n\n OnTaskClick(task: ActiveTask) {\n this.TaskClicked.emit(task);\n }\n\n /** @deprecated Use {@link OnTaskClick}. */\n onTaskClick(task: ActiveTask) {\n return this.OnTaskClick(task);\n }\n\n GetTrimmedStatus(status: string): string {\n // Remove emojis and trim to 50 chars\n const cleaned = status.replace(/[\\u{1F600}-\\u{1F64F}]/gu, '').trim();\n return cleaned.length > 50 ? cleaned.substring(0, 47) + '...' : cleaned;\n }\n\n /** @deprecated Use {@link GetTrimmedStatus}. */\n getTrimmedStatus(status: string): string {\n return this.GetTrimmedStatus(status);\n }\n\n GetElapsedTime(task: ActiveTask): string {\n const elapsed = Date.now() - task.startTime;\n const seconds = Math.floor(elapsed / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m`;\n } else if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n } else {\n return `${seconds}s`;\n }\n }\n\n /** @deprecated Use {@link GetElapsedTime}. */\n getElapsedTime(task: ActiveTask): string {\n return this.GetElapsedTime(task);\n }\n}\n"]}
|
|
@@ -8,30 +8,79 @@ import * as i0 from "@angular/core";
|
|
|
8
8
|
* Replaces the main content area when Collections tab is selected
|
|
9
9
|
*/
|
|
10
10
|
export declare class LibraryFullViewComponent extends BaseAngularComponent implements OnInit {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
EnvironmentId: string;
|
|
12
|
+
/** @deprecated Use {@link EnvironmentId}. */
|
|
13
|
+
set environmentId(value: string);
|
|
14
|
+
/** @deprecated Use {@link EnvironmentId}. */
|
|
15
|
+
get environmentId(): string;
|
|
16
|
+
CurrentUser: UserInfo;
|
|
17
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
18
|
+
set currentUser(value: UserInfo);
|
|
19
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
20
|
+
get currentUser(): UserInfo;
|
|
21
|
+
Collections: MJCollectionEntity[];
|
|
22
|
+
/** @deprecated Use {@link Collections}. */
|
|
23
|
+
get collections(): MJCollectionEntity[];
|
|
24
|
+
/** @deprecated Use {@link Collections}. */
|
|
25
|
+
set collections(value: MJCollectionEntity[]);
|
|
26
|
+
FilteredCollections: MJCollectionEntity[];
|
|
27
|
+
/** @deprecated Use {@link FilteredCollections}. */
|
|
28
|
+
get filteredCollections(): MJCollectionEntity[];
|
|
29
|
+
/** @deprecated Use {@link FilteredCollections}. */
|
|
30
|
+
set filteredCollections(value: MJCollectionEntity[]);
|
|
31
|
+
SearchQuery: string;
|
|
32
|
+
/** @deprecated Use {@link SearchQuery}. */
|
|
33
|
+
get searchQuery(): string;
|
|
34
|
+
/** @deprecated Use {@link SearchQuery}. */
|
|
35
|
+
set searchQuery(value: string);
|
|
16
36
|
isLoading: boolean;
|
|
17
|
-
|
|
37
|
+
Breadcrumbs: Array<{
|
|
18
38
|
id: string;
|
|
19
39
|
name: string;
|
|
20
40
|
}>;
|
|
21
|
-
|
|
41
|
+
/** @deprecated Use {@link Breadcrumbs}. */
|
|
42
|
+
get breadcrumbs(): Array<{
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
}>;
|
|
46
|
+
/** @deprecated Use {@link Breadcrumbs}. */
|
|
47
|
+
set breadcrumbs(value: Array<{
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
}>);
|
|
51
|
+
CurrentCollectionId: string | null;
|
|
52
|
+
/** @deprecated Use {@link CurrentCollectionId}. */
|
|
53
|
+
get currentCollectionId(): string | null;
|
|
54
|
+
/** @deprecated Use {@link CurrentCollectionId}. */
|
|
55
|
+
set currentCollectionId(value: string | null);
|
|
22
56
|
constructor();
|
|
23
57
|
ngOnInit(): void;
|
|
58
|
+
LoadCollections(): Promise<void>;
|
|
59
|
+
/** @deprecated Use {@link LoadCollections}. */
|
|
24
60
|
loadCollections(): Promise<void>;
|
|
61
|
+
OnSearchChange(query: string): void;
|
|
62
|
+
/** @deprecated Use {@link OnSearchChange}. */
|
|
25
63
|
onSearchChange(query: string): void;
|
|
26
64
|
private applySearch;
|
|
65
|
+
OpenCollection(collection: MJCollectionEntity): void;
|
|
66
|
+
/** @deprecated Use {@link OpenCollection}. */
|
|
27
67
|
openCollection(collection: MJCollectionEntity): void;
|
|
68
|
+
NavigateTo(crumb: {
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
}): void;
|
|
72
|
+
/** @deprecated Use {@link NavigateTo}. */
|
|
28
73
|
navigateTo(crumb: {
|
|
29
74
|
id: string;
|
|
30
75
|
name: string;
|
|
31
76
|
}): void;
|
|
77
|
+
NavigateToRoot(): void;
|
|
78
|
+
/** @deprecated Use {@link NavigateToRoot}. */
|
|
32
79
|
navigateToRoot(): void;
|
|
80
|
+
Refresh(): void;
|
|
81
|
+
/** @deprecated Use {@link Refresh}. */
|
|
33
82
|
refresh(): void;
|
|
34
83
|
static ɵfac: i0.ɵɵFactoryDeclaration<LibraryFullViewComponent, never>;
|
|
35
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LibraryFullViewComponent, "mj-library-full-view", never, { "environmentId": { "alias": "environmentId"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, {}, never, never, false, never>;
|
|
84
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LibraryFullViewComponent, "mj-library-full-view", never, { "EnvironmentId": { "alias": "EnvironmentId"; "required": false; }; "environmentId": { "alias": "environmentId"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, {}, never, never, false, never>;
|
|
36
85
|
}
|
|
37
86
|
//# sourceMappingURL=library-full-view.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-full-view.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/library/library-full-view.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;;AAEnE;;;GAGG;AACH,qBA+Qa,wBAAyB,SAAQ,oBAAqB,YAAW,MAAM;IACzE,aAAa,EAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"library-full-view.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/library/library-full-view.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;;AAEnE;;;GAGG;AACH,qBA+Qa,wBAAyB,SAAQ,oBAAqB,YAAW,MAAM;IACzE,aAAa,EAAG,MAAM,CAAC;IAEhC,6CAA6C;IAC7C,IAAa,aAAa,CAAC,KAAK,EAAE,MAAM,EAEvC;IACD,6CAA6C;IAC7C,IAAI,aAAa,IAAI,MAAM,CAE1B;IACQ,WAAW,EAAG,QAAQ,CAAC;IAEhC,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAK,EAAE,QAAQ,EAEvC;IACD,2CAA2C;IAC3C,IAAI,WAAW,IAAI,QAAQ,CAE1B;IAEM,WAAW,EAAE,kBAAkB,EAAE,CAAM;IAE9C,2CAA2C;IAC3C,IAAW,WAAW,IAAI,kBAAkB,EAAE,CAE7C;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAEjD;IACM,mBAAmB,EAAE,kBAAkB,EAAE,CAAM;IAEtD,mDAAmD;IACnD,IAAW,mBAAmB,IAAI,kBAAkB,EAAE,CAErD;IACD,mDAAmD;IACnD,IAAW,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAEzD;IACM,WAAW,EAAE,MAAM,CAAM;IAEhC,2CAA2C;IAC3C,IAAW,WAAW,IAAI,MAAM,CAE/B;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAK,EAAE,MAAM,EAEnC;IACM,SAAS,EAAE,OAAO,CAAS;IAC3B,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAE7D,2CAA2C;IAC3C,IAAW,WAAW,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAE5D;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAEhE;IACM,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjD,mDAAmD;IACnD,IAAW,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAE9C;IACD,mDAAmD;IACnD,IAAW,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAElD;;IAKD,QAAQ;IAIF,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BtC,+CAA+C;IACzC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,8CAA8C;IAC9C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,OAAO,CAAC,WAAW;IAYnB,cAAc,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAOpD,8CAA8C;IAC9C,cAAc,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAIpD,UAAU,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAUrD,0CAA0C;IAC1C,UAAU,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIrD,cAAc,IAAI,IAAI;IAOtB,8CAA8C;IAC9C,cAAc,IAAI,IAAI;IAItB,OAAO,IAAI,IAAI;IAIf,uCAAuC;IACvC,OAAO,IAAI,IAAI;yCApLJ,wBAAwB;2CAAxB,wBAAwB;CAuLpC"}
|