@memberjunction/ng-conversations 5.43.0 → 5.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +0 -1
- 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 +56 -52
- package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
- package/dist/lib/components/artifact/artifact-share-modal.component.d.ts +3 -1
- package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/artifact/artifact-share-modal.component.js +52 -52
- package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.js +10 -14
- package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.d.ts +3 -1
- package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.js +56 -56
- package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-tree.component.d.ts +3 -1
- package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-tree.component.js +10 -7
- package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
- package/dist/lib/components/collection/collection-view.component.d.ts +3 -1
- package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-view.component.js +29 -41
- package/dist/lib/components/collection/collection-view.component.js.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.d.ts +4 -0
- package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.js +134 -166
- package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
- package/dist/lib/components/composer/ai-composer.component.d.ts +103 -0
- package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -0
- package/dist/lib/components/composer/ai-composer.component.js +263 -0
- package/dist/lib/components/composer/ai-composer.component.js.map +1 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +76 -12
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +522 -158
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
- package/dist/lib/components/conversation/pinned-messages-panel.component.js +6 -9
- package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
- package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/library/library-full-view.component.js +20 -24
- package/dist/lib/components/library/library-full-view.component.js.map +1 -1
- package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
- package/dist/lib/components/members/members-modal.component.js +10 -11
- package/dist/lib/components/members/members-modal.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +87 -23
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +245 -158
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +11 -3
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +73 -21
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.js +6 -9
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.d.ts +4 -1
- package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.js +9 -4
- package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +45 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -1
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +10 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -1
- package/dist/lib/components/realtime/channels/client-context-channel.d.ts +46 -0
- package/dist/lib/components/realtime/channels/client-context-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/client-context-channel.js +174 -0
- package/dist/lib/components/realtime/channels/client-context-channel.js.map +1 -0
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts +123 -0
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js +397 -0
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js.map +1 -0
- package/dist/lib/components/realtime/media/media-channel-state.d.ts +103 -0
- package/dist/lib/components/realtime/media/media-channel-state.d.ts.map +1 -0
- package/dist/lib/components/realtime/media/media-channel-state.js +143 -0
- package/dist/lib/components/realtime/media/media-channel-state.js.map +1 -0
- package/dist/lib/components/realtime/media/media-channel-tools.d.ts +24 -0
- package/dist/lib/components/realtime/media/media-channel-tools.d.ts.map +1 -0
- package/dist/lib/components/realtime/media/media-channel-tools.js +107 -0
- package/dist/lib/components/realtime/media/media-channel-tools.js.map +1 -0
- package/dist/lib/components/realtime/media/media-channel.d.ts +89 -0
- package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/media/media-channel.js +253 -0
- package/dist/lib/components/realtime/media/media-channel.js.map +1 -0
- package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts +141 -0
- package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js +574 -0
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +59 -14
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-activity-rail.component.js +277 -74
- package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +28 -27
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-banner.component.js +144 -143
- package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +12 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-picker.component.js +105 -43
- package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +2 -2
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -1
- package/dist/lib/components/realtime/realtime-composer.component.d.ts +41 -7
- package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-composer.component.js +216 -102
- package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +0 -2
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-delegation-card.component.js +67 -71
- package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +364 -44
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.js +839 -153
- package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-state.d.ts +5 -5
- package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-session-state.js.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts +70 -0
- package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tab-style.js +115 -0
- package/dist/lib/components/realtime/realtime-surface-tab-style.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +55 -57
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js +165 -143
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +80 -71
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js +83 -113
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.d.ts +270 -0
- package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-ui-config.js +212 -0
- package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -0
- package/dist/lib/components/search/search-panel.component.d.ts +2 -0
- package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
- package/dist/lib/components/search/search-panel.component.js +92 -101
- package/dist/lib/components/search/search-panel.component.js.map +1 -1
- package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/share/share-modal.component.js +10 -11
- package/dist/lib/components/share/share-modal.component.js.map +1 -1
- package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
- package/dist/lib/components/shared/user-picker.component.js +12 -15
- package/dist/lib/components/shared/user-picker.component.js.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +11 -3
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.js +34 -10
- package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
- package/dist/lib/components/sidebar/routines-section.component.d.ts +73 -0
- package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -0
- package/dist/lib/components/sidebar/routines-section.component.js +211 -0
- package/dist/lib/components/sidebar/routines-section.component.js.map +1 -0
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +12 -0
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
- package/dist/lib/components/tasks/tasks-dropdown.component.js +37 -1
- package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +16 -5
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +51 -31
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/composer-plugins/agent-mention.provider.d.ts +16 -0
- package/dist/lib/composer-plugins/agent-mention.provider.d.ts.map +1 -0
- package/dist/lib/composer-plugins/agent-mention.provider.js +28 -0
- package/dist/lib/composer-plugins/agent-mention.provider.js.map +1 -0
- package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +20 -0
- package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -0
- package/dist/lib/composer-plugins/base-conversation-mention.provider.js +32 -0
- package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -0
- package/dist/lib/composer-plugins/load-composer-plugins.d.ts +9 -0
- package/dist/lib/composer-plugins/load-composer-plugins.d.ts.map +1 -0
- package/dist/lib/composer-plugins/load-composer-plugins.js +17 -0
- package/dist/lib/composer-plugins/load-composer-plugins.js.map +1 -0
- package/dist/lib/composer-plugins/record-mention.provider.d.ts +14 -0
- package/dist/lib/composer-plugins/record-mention.provider.d.ts.map +1 -0
- package/dist/lib/composer-plugins/record-mention.provider.js +26 -0
- package/dist/lib/composer-plugins/record-mention.provider.js.map +1 -0
- package/dist/lib/composer-plugins/skill-command.provider.d.ts +15 -0
- package/dist/lib/composer-plugins/skill-command.provider.d.ts.map +1 -0
- package/dist/lib/composer-plugins/skill-command.provider.js +27 -0
- package/dist/lib/composer-plugins/skill-command.provider.js.map +1 -0
- package/dist/lib/conversations.module.d.ts +68 -64
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +69 -18
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/models/conversation-state.model.d.ts +6 -3
- 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/services/conversation-agent.service.d.ts +9 -2
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +26 -2
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-attachment.service.d.ts +1 -1
- package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-attachment.service.js.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.d.ts +42 -19
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.js +113 -18
- package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
- package/dist/lib/services/realtime-audio-recorder.d.ts +143 -0
- package/dist/lib/services/realtime-audio-recorder.d.ts.map +1 -0
- package/dist/lib/services/realtime-audio-recorder.js +379 -0
- package/dist/lib/services/realtime-audio-recorder.js.map +1 -0
- package/dist/lib/services/realtime-pcm-wav.d.ts +75 -0
- package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -0
- package/dist/lib/services/realtime-pcm-wav.js +205 -0
- package/dist/lib/services/realtime-pcm-wav.js.map +1 -0
- package/dist/lib/services/realtime-session-review.service.d.ts +28 -1
- package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
- package/dist/lib/services/realtime-session-review.service.js +12 -3
- package/dist/lib/services/realtime-session-review.service.js.map +1 -1
- package/dist/lib/services/realtime-session.service.d.ts +210 -20
- package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
- package/dist/lib/services/realtime-session.service.js +452 -21
- package/dist/lib/services/realtime-session.service.js.map +1 -1
- package/dist/lib/services/realtime-sessions-adapter.js +1 -1
- package/dist/lib/services/realtime-sessions-adapter.js.map +1 -1
- package/dist/lib/services/ui-command-handler.service.d.ts +7 -2
- package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
- package/dist/lib/services/ui-command-handler.service.js +6 -2
- package/dist/lib/services/ui-command-handler.service.js.map +1 -1
- package/dist/lib/utils/plan-mode-preference.d.ts +62 -0
- package/dist/lib/utils/plan-mode-preference.d.ts.map +1 -0
- package/dist/lib/utils/plan-mode-preference.js +130 -0
- package/dist/lib/utils/plan-mode-preference.js.map +1 -0
- package/dist/public-api.d.ts +29 -3
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +46 -3
- package/dist/public-api.js.map +1 -1
- package/package.json +30 -26
- package/dist/__tests__/attachment-badge.test.d.ts +0 -2
- package/dist/__tests__/attachment-badge.test.d.ts.map +0 -1
- package/dist/__tests__/attachment-badge.test.js +0 -66
- package/dist/__tests__/attachment-badge.test.js.map +0 -1
- package/dist/__tests__/channel-optional-surface.test.d.ts +0 -2
- package/dist/__tests__/channel-optional-surface.test.d.ts.map +0 -1
- package/dist/__tests__/channel-optional-surface.test.js +0 -53
- package/dist/__tests__/channel-optional-surface.test.js.map +0 -1
- package/dist/__tests__/chat-events.test.d.ts +0 -14
- package/dist/__tests__/chat-events.test.d.ts.map +0 -1
- package/dist/__tests__/chat-events.test.js +0 -109
- package/dist/__tests__/chat-events.test.js.map +0 -1
- package/dist/__tests__/collections-full-view.test.d.ts +0 -2
- package/dist/__tests__/collections-full-view.test.d.ts.map +0 -1
- package/dist/__tests__/collections-full-view.test.js +0 -225
- package/dist/__tests__/collections-full-view.test.js.map +0 -1
- package/dist/__tests__/conversation-cache.test.d.ts +0 -2
- package/dist/__tests__/conversation-cache.test.d.ts.map +0 -1
- package/dist/__tests__/conversation-cache.test.js +0 -233
- package/dist/__tests__/conversation-cache.test.js.map +0 -1
- package/dist/__tests__/conversation-naming.test.d.ts +0 -2
- package/dist/__tests__/conversation-naming.test.d.ts.map +0 -1
- package/dist/__tests__/conversation-naming.test.js +0 -110
- package/dist/__tests__/conversation-naming.test.js.map +0 -1
- package/dist/__tests__/delegation-result-parser.test.d.ts +0 -2
- package/dist/__tests__/delegation-result-parser.test.d.ts.map +0 -1
- package/dist/__tests__/delegation-result-parser.test.js +0 -107
- package/dist/__tests__/delegation-result-parser.test.js.map +0 -1
- package/dist/__tests__/distinct-artifacts.test.d.ts +0 -2
- package/dist/__tests__/distinct-artifacts.test.d.ts.map +0 -1
- package/dist/__tests__/distinct-artifacts.test.js +0 -56
- package/dist/__tests__/distinct-artifacts.test.js.map +0 -1
- package/dist/__tests__/event-wiring.test.d.ts +0 -15
- package/dist/__tests__/event-wiring.test.d.ts.map +0 -1
- package/dist/__tests__/event-wiring.test.js +0 -100
- package/dist/__tests__/event-wiring.test.js.map +0 -1
- package/dist/__tests__/index.test.d.ts +0 -2
- package/dist/__tests__/index.test.d.ts.map +0 -1
- package/dist/__tests__/index.test.js +0 -7
- package/dist/__tests__/index.test.js.map +0 -1
- package/dist/__tests__/narration-template.test.d.ts +0 -2
- package/dist/__tests__/narration-template.test.d.ts.map +0 -1
- package/dist/__tests__/narration-template.test.js +0 -76
- package/dist/__tests__/narration-template.test.js.map +0 -1
- package/dist/__tests__/notification-model.test.d.ts +0 -2
- package/dist/__tests__/notification-model.test.d.ts.map +0 -1
- package/dist/__tests__/notification-model.test.js +0 -68
- package/dist/__tests__/notification-model.test.js.map +0 -1
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts +0 -2
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-agent-picker-models.test.js +0 -49
- package/dist/__tests__/realtime-agent-picker-models.test.js.map +0 -1
- package/dist/__tests__/realtime-audio-visuals.test.d.ts +0 -2
- package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-audio-visuals.test.js +0 -123
- package/dist/__tests__/realtime-audio-visuals.test.js.map +0 -1
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +0 -2
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-delegation-card-cancel.test.js +0 -48
- package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +0 -1
- package/dist/__tests__/realtime-disclosure.test.d.ts +0 -2
- package/dist/__tests__/realtime-disclosure.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-disclosure.test.js +0 -164
- package/dist/__tests__/realtime-disclosure.test.js.map +0 -1
- package/dist/__tests__/realtime-pairing.test.d.ts +0 -2
- package/dist/__tests__/realtime-pairing.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-pairing.test.js +0 -207
- package/dist/__tests__/realtime-pairing.test.js.map +0 -1
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts +0 -2
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-review-lifecycle.test.js +0 -154
- package/dist/__tests__/realtime-review-lifecycle.test.js.map +0 -1
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-cancel-usage.test.js +0 -230
- package/dist/__tests__/realtime-session-cancel-usage.test.js.map +0 -1
- package/dist/__tests__/realtime-session-channels.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-channels.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-channels.test.js +0 -252
- package/dist/__tests__/realtime-session-channels.test.js.map +0 -1
- package/dist/__tests__/realtime-session-client-tools.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-client-tools.test.js +0 -103
- package/dist/__tests__/realtime-session-client-tools.test.js.map +0 -1
- package/dist/__tests__/realtime-session-minimized.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-minimized.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-minimized.test.js +0 -32
- package/dist/__tests__/realtime-session-minimized.test.js.map +0 -1
- package/dist/__tests__/realtime-session-mint.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-mint.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-mint.test.js +0 -69
- package/dist/__tests__/realtime-session-mint.test.js.map +0 -1
- package/dist/__tests__/realtime-session-policy.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-policy.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-policy.test.js +0 -303
- package/dist/__tests__/realtime-session-policy.test.js.map +0 -1
- package/dist/__tests__/realtime-session-review.service.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-review.service.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-review.service.test.js +0 -743
- package/dist/__tests__/realtime-session-review.service.test.js.map +0 -1
- package/dist/__tests__/realtime-session-state.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-state.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-state.test.js +0 -83
- package/dist/__tests__/realtime-session-state.test.js.map +0 -1
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-timeline-card.test.js +0 -106
- package/dist/__tests__/realtime-session-timeline-card.test.js.map +0 -1
- package/dist/__tests__/realtime-session-timeline.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-timeline.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-timeline.test.js +0 -142
- package/dist/__tests__/realtime-session-timeline.test.js.map +0 -1
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts +0 -19
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-sessions-adapter.test.js +0 -188
- package/dist/__tests__/realtime-sessions-adapter.test.js.map +0 -1
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +0 -2
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-surface-panel-prefs.test.js +0 -100
- package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +0 -1
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +0 -2
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-surface-tabs-model.test.js +0 -193
- package/dist/__tests__/realtime-surface-tabs-model.test.js.map +0 -1
- package/dist/__tests__/remote-browser-audio-player.test.d.ts +0 -2
- package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +0 -1
- package/dist/__tests__/remote-browser-audio-player.test.js +0 -137
- package/dist/__tests__/remote-browser-audio-player.test.js.map +0 -1
- package/dist/__tests__/remote-browser-channel.test.d.ts +0 -2
- package/dist/__tests__/remote-browser-channel.test.d.ts.map +0 -1
- package/dist/__tests__/remote-browser-channel.test.js +0 -585
- package/dist/__tests__/remote-browser-channel.test.js.map +0 -1
- package/dist/__tests__/search-service.test.d.ts +0 -2
- package/dist/__tests__/search-service.test.d.ts.map +0 -1
- package/dist/__tests__/search-service.test.js +0 -114
- package/dist/__tests__/search-service.test.js.map +0 -1
- package/dist/__tests__/slot-defaults.test.d.ts +0 -24
- package/dist/__tests__/slot-defaults.test.d.ts.map +0 -1
- package/dist/__tests__/slot-defaults.test.js +0 -63
- package/dist/__tests__/slot-defaults.test.js.map +0 -1
- package/dist/__tests__/toast-service.test.d.ts +0 -2
- package/dist/__tests__/toast-service.test.d.ts.map +0 -1
- package/dist/__tests__/toast-service.test.js +0 -143
- package/dist/__tests__/toast-service.test.js.map +0 -1
- package/dist/__tests__/user-authorization.test.d.ts +0 -2
- package/dist/__tests__/user-authorization.test.d.ts.map +0 -1
- package/dist/__tests__/user-authorization.test.js +0 -97
- package/dist/__tests__/user-authorization.test.js.map +0 -1
- package/dist/__tests__/voice-session-narration.test.d.ts +0 -2
- package/dist/__tests__/voice-session-narration.test.d.ts.map +0 -1
- package/dist/__tests__/voice-session-narration.test.js +0 -609
- package/dist/__tests__/voice-session-narration.test.js.map +0 -1
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +0 -2
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +0 -1
- package/dist/__tests__/whiteboard-artifact-viewer.test.js +0 -101
- package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +0 -1
- package/dist/__tests__/whiteboard-channel.test.d.ts +0 -2
- package/dist/__tests__/whiteboard-channel.test.d.ts.map +0 -1
- package/dist/__tests__/whiteboard-channel.test.js +0 -260
- package/dist/__tests__/whiteboard-channel.test.js.map +0 -1
- package/dist/__tests__/whiteboard-restore-state.test.d.ts +0 -2
- package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +0 -1
- package/dist/__tests__/whiteboard-restore-state.test.js +0 -108
- package/dist/__tests__/whiteboard-restore-state.test.js.map +0 -1
- package/dist/lib/components/mention/mention-dropdown.component.d.ts +0 -53
- package/dist/lib/components/mention/mention-dropdown.component.d.ts.map +0 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +0 -276
- package/dist/lib/components/mention/mention-dropdown.component.js.map +0 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts +0 -256
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +0 -1
- package/dist/lib/components/mention/mention-editor.component.js +0 -1233
- package/dist/lib/components/mention/mention-editor.component.js.map +0 -1
- package/dist/lib/components/message/message-input-box.component.d.ts +0 -137
- package/dist/lib/components/message/message-input-box.component.d.ts.map +0 -1
- package/dist/lib/components/message/message-input-box.component.js +0 -321
- package/dist/lib/components/message/message-input-box.component.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from '@angular/core';
|
|
2
2
|
import { UserInfo } from '@memberjunction/core';
|
|
3
|
-
import { PendingAttachment } from '
|
|
3
|
+
import { PendingAttachment } from '@memberjunction/ng-composer';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class ConversationEmptyStateComponent {
|
|
6
6
|
currentUser: UserInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-empty-state.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-empty-state.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"conversation-empty-state.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-empty-state.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;;AAGhE,qBAMa,+BAA+B;IACjC,WAAW,EAAG,QAAQ,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAS;IAC1B,iBAAiB,EAAE,OAAO,CAAS;IACnC,iBAAiB,EAAE,OAAO,CAAS;IACnC,cAAc,EAAE,OAAO,CAAQ;IAC/B,cAAc,EAAE,MAAM,CAAM;IAC5B,sBAAsB,EAAE,MAAM,CAAoB;IAClD,iBAAiB,EAAE,MAAM,CAAa;IAE/C,2FAA2F;IAClF,QAAQ,EAAE,MAAM,CAAyB;IAElD,8EAA8E;IAC9E,OAAO,CAAC,YAAY,CAAS;IAC7B,IACI,WAAW,CAAC,KAAK,EAAE,OAAO,EAK7B;IACD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEiC,OAAO,CAAC,YAAY,CAAC,CAAwB;IAErE,WAAW;cAA2B,MAAM;qBAAe,iBAAiB,EAAE;OAAK;IACnF,oBAAoB,qBAA4B;IAEnD,WAAW,EAAE,MAAM,CAAM;IAGhC,OAAO,CAAC,mBAAmB,CA0GzB;IAGK,gBAAgB,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAM;;IAOnF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;OAGG;IACI,UAAU,IAAI,IAAI;IAQzB,kBAAkB,CAAC,KAAK,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,iBAAiB,EAAE,CAAA;KAAC,GAAG,IAAI;IAIjF,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;yCA9KnC,+BAA+B;2CAA/B,+BAA+B;CAmL3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-empty-state.component.js","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-empty-state.component.ts","../../../../src/lib/components/conversation/conversation-empty-state.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { PendingAttachment } from '../mention/mention-editor.component';\nimport { MessageInputComponent } from '../message/message-input.component';\n\n@Component({\n standalone: false,\n selector: 'mj-conversation-empty-state',\n templateUrl: './conversation-empty-state.component.html',\n styleUrls: ['./conversation-empty-state.component.css']\n})\nexport class ConversationEmptyStateComponent {\n @Input() currentUser!: UserInfo;\n @Input() disabled: boolean = false;\n @Input() showSidebarToggle: boolean = false;\n @Input() enableAttachments: boolean = false;\n @Input() enableMentions: boolean = true;\n @Input() maxAttachments: number = 10;\n @Input() maxAttachmentSizeBytes: number = 20 * 1024 * 1024;\n @Input() acceptedFileTypes: string = 'image/*';\n\n /** Greeting text shown in the empty state. Set by host app via overlay/chat-area chain. */\n @Input() greeting: string = 'How can I help you?';\n\n /** When true (overlay context), suggested prompts are hidden to save space */\n private _overlayMode = false;\n @Input()\n set overlayMode(value: boolean) {\n this._overlayMode = value;\n if (value) {\n this.suggestedPrompts = [];\n }\n }\n get overlayMode(): boolean {\n return this._overlayMode;\n }\n\n @ViewChild(MessageInputComponent) private messageInput?: MessageInputComponent;\n\n @Output() messageSent = new EventEmitter<{text: string; attachments: PendingAttachment[]}>();\n @Output() sidebarToggleClicked = new EventEmitter<void>();\n\n public messageText: string = '';\n\n // All available suggested prompts (business user focused)\n private allSuggestedPrompts: Array<{icon: string; title: string; prompt: string}> = [\n // Data Analysis & Insights\n {\n icon: 'fa-solid fa-clock-rotate-left',\n title: 'Recent changes',\n prompt: 'Show me what\\'s changed in my data recently'\n },\n {\n icon: 'fa-solid fa-list-check',\n title: 'Pending items',\n prompt: 'Find all my incomplete or pending items'\n },\n {\n icon: 'fa-solid fa-magnifying-glass',\n title: 'Search everything',\n prompt: 'Search everything in my system for a specific topic'\n },\n {\n icon: 'fa-solid fa-clipboard-check',\n title: 'Data quality',\n prompt: 'Analyze my data and find duplicates or inconsistencies'\n },\n {\n icon: 'fa-solid fa-inbox',\n title: 'Catch up',\n prompt: 'Create a summary of activity while I was away'\n },\n\n // Research & Information Gathering\n {\n icon: 'fa-solid fa-download',\n title: 'Research & save',\n prompt: 'Research a topic and save the findings to my database'\n },\n {\n icon: 'fa-solid fa-code-compare',\n title: 'Compare sources',\n prompt: 'Compare my data with information from the web'\n },\n {\n icon: 'fa-solid fa-folder-open',\n title: 'Search files',\n prompt: 'Search my files and documents for related information'\n },\n {\n icon: 'fa-solid fa-layer-group',\n title: 'Multi-source search',\n prompt: 'Find relevant information across all my data sources'\n },\n {\n icon: 'fa-solid fa-sitemap',\n title: 'Comprehensive research',\n prompt: 'Gather information on a topic from multiple sources'\n },\n\n // Automation & Agent Building\n {\n icon: 'fa-solid fa-calendar-day',\n title: 'Daily summaries',\n prompt: 'Create an agent to send me daily data summaries'\n },\n {\n icon: 'fa-solid fa-bell',\n title: 'Change alerts',\n prompt: 'Build an agent that monitors data changes and alerts me'\n },\n {\n icon: 'fa-solid fa-chart-column',\n title: 'Automated reports',\n prompt: 'Design an agent to aggregate data and create reports'\n },\n {\n icon: 'fa-solid fa-arrows-rotate',\n title: 'Data sync',\n prompt: 'Help me create an agent that syncs data with external systems'\n },\n {\n icon: 'fa-solid fa-file-import',\n title: 'File processor',\n prompt: 'Build an agent that processes files and updates my database'\n },\n {\n icon: 'fa-brands fa-slack',\n title: 'Slack notifications',\n prompt: 'Create an agent to post updates to Slack when data changes'\n },\n {\n icon: 'fa-solid fa-broom',\n title: 'Data cleanup',\n prompt: 'Design an agent that validates and cleans up my data regularly'\n },\n {\n icon: 'fa-solid fa-chart-pie',\n title: 'Auto visualizations',\n prompt: 'Build an agent that generates visualizations from my data'\n },\n {\n icon: 'fa-solid fa-graduation-cap',\n title: 'Research compiler',\n prompt: 'Create an agent to research topics and compile findings'\n },\n {\n icon: 'fa-solid fa-diagram-project',\n title: 'Workflow automation',\n prompt: 'Help me design a workflow agent with approval steps'\n }\n ];\n\n // Randomly selected prompts to display (refreshed on each load)\n public suggestedPrompts: Array<{icon: string; title: string; prompt: string}> = [];\n\n constructor() {\n // Select 4 random prompts on initialization\n this.suggestedPrompts = this.selectRandomPrompts(4);\n }\n\n /**\n * Select random prompts from the full list\n */\n private selectRandomPrompts(count: number): Array<{icon: string; title: string; prompt: string}> {\n const shuffled = [...this.allSuggestedPrompts].sort(() => Math.random() - 0.5);\n return shuffled.slice(0, count);\n }\n\n /**\n * Focus the message input programmatically.\n * Called by parent when the user clicks \"New Conversation\" while already on the empty state.\n */\n public FocusInput(): void {\n setTimeout(() => {\n if (this.messageInput) {\n this.messageInput.inputBox?.focus();\n }\n }, 100);\n }\n\n onEmptyStateSubmit(event: {text: string; attachments: PendingAttachment[]}): void {\n this.messageSent.emit(event);\n }\n\n onSuggestedPromptClicked(prompt: string): void {\n if (!this.disabled) {\n this.messageSent.emit({ text: prompt, attachments: [] });\n }\n }\n}\n","<div class=\"conversation-empty-state\" [class.overlay-mode]=\"overlayMode\">\n <!-- Loading Overlay -->\n @if (disabled) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Creating your conversation...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <div class=\"empty-state-container\" [class.loading]=\"disabled\">\n <!-- Greeting Header (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"greeting-section\">\n <div class=\"greeting-icon\">\n <i class=\"fa-solid fa-comments fa-3x\"></i>\n </div>\n <h1 class=\"greeting-title\">Welcome to Conversations</h1>\n <p class=\"greeting-subtitle\">\n Start a new conversation by typing a message below, or choose a suggested prompt to get started.\n </p>\n </div>\n }\n\n <!-- Suggested Prompts (hidden in overlay mode) -->\n @if (suggestedPrompts.length > 0) {\n <div class=\"suggested-prompts\">\n <div class=\"prompt-grid\">\n @for (prompt of suggestedPrompts; track prompt) {\n <div\n class=\"prompt-card\"\n (click)=\"onSuggestedPromptClicked(prompt.prompt)\"\n [class.disabled]=\"disabled\"\n >\n <div class=\"prompt-icon\">\n <i class=\"{{prompt.icon}}\"></i>\n </div>\n <div class=\"prompt-content\">\n <div class=\"prompt-title\">{{prompt.title}}</div>\n <div class=\"prompt-text\">{{prompt.prompt}}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Compact greeting for overlay mode -->\n @if (overlayMode) {\n <div class=\"overlay-greeting\">\n <p class=\"overlay-greeting-text\">{{ greeting }}</p>\n </div>\n }\n\n <!-- Message Input (using full mj-message-input in empty state mode) -->\n <div class=\"message-input-wrapper\">\n <mj-message-input\n [placeholder]=\"overlayMode ? 'Type a message...' : 'Type your message to start a new conversation...'\"\n [disabled]=\"disabled\"\n [currentUser]=\"currentUser\"\n [emptyStateMode]=\"true\"\n [enableMentions]=\"enableMentions\"\n [enableAttachments]=\"enableAttachments\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n (emptyStateSubmit)=\"onEmptyStateSubmit($event)\">\n </mj-message-input>\n </div>\n\n <!-- Footer Tips (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"tips-section\">\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-at\"></i>\n <span>Use <strong>@AgentName</strong> to directly invoke a specific agent</span>\n </div>\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Press <strong>Enter</strong> to send, <strong>Shift+Enter</strong> for new line</span>\n </div>\n </div>\n }\n </div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"conversation-empty-state.component.js","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-empty-state.component.ts","../../../../src/lib/components/conversation/conversation-empty-state.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { PendingAttachment } from '@memberjunction/ng-composer';\nimport { MessageInputComponent } from '../message/message-input.component';\n\n@Component({\n standalone: false,\n selector: 'mj-conversation-empty-state',\n templateUrl: './conversation-empty-state.component.html',\n styleUrls: ['./conversation-empty-state.component.css']\n})\nexport class ConversationEmptyStateComponent {\n @Input() currentUser!: UserInfo;\n @Input() disabled: boolean = false;\n @Input() showSidebarToggle: boolean = false;\n @Input() enableAttachments: boolean = false;\n @Input() enableMentions: boolean = true;\n @Input() maxAttachments: number = 10;\n @Input() maxAttachmentSizeBytes: number = 20 * 1024 * 1024;\n @Input() acceptedFileTypes: string = 'image/*';\n\n /** Greeting text shown in the empty state. Set by host app via overlay/chat-area chain. */\n @Input() greeting: string = 'How can I help you?';\n\n /** When true (overlay context), suggested prompts are hidden to save space */\n private _overlayMode = false;\n @Input()\n set overlayMode(value: boolean) {\n this._overlayMode = value;\n if (value) {\n this.suggestedPrompts = [];\n }\n }\n get overlayMode(): boolean {\n return this._overlayMode;\n }\n\n @ViewChild(MessageInputComponent) private messageInput?: MessageInputComponent;\n\n @Output() messageSent = new EventEmitter<{text: string; attachments: PendingAttachment[]}>();\n @Output() sidebarToggleClicked = new EventEmitter<void>();\n\n public messageText: string = '';\n\n // All available suggested prompts (business user focused)\n private allSuggestedPrompts: Array<{icon: string; title: string; prompt: string}> = [\n // Data Analysis & Insights\n {\n icon: 'fa-solid fa-clock-rotate-left',\n title: 'Recent changes',\n prompt: 'Show me what\\'s changed in my data recently'\n },\n {\n icon: 'fa-solid fa-list-check',\n title: 'Pending items',\n prompt: 'Find all my incomplete or pending items'\n },\n {\n icon: 'fa-solid fa-magnifying-glass',\n title: 'Search everything',\n prompt: 'Search everything in my system for a specific topic'\n },\n {\n icon: 'fa-solid fa-clipboard-check',\n title: 'Data quality',\n prompt: 'Analyze my data and find duplicates or inconsistencies'\n },\n {\n icon: 'fa-solid fa-inbox',\n title: 'Catch up',\n prompt: 'Create a summary of activity while I was away'\n },\n\n // Research & Information Gathering\n {\n icon: 'fa-solid fa-download',\n title: 'Research & save',\n prompt: 'Research a topic and save the findings to my database'\n },\n {\n icon: 'fa-solid fa-code-compare',\n title: 'Compare sources',\n prompt: 'Compare my data with information from the web'\n },\n {\n icon: 'fa-solid fa-folder-open',\n title: 'Search files',\n prompt: 'Search my files and documents for related information'\n },\n {\n icon: 'fa-solid fa-layer-group',\n title: 'Multi-source search',\n prompt: 'Find relevant information across all my data sources'\n },\n {\n icon: 'fa-solid fa-sitemap',\n title: 'Comprehensive research',\n prompt: 'Gather information on a topic from multiple sources'\n },\n\n // Automation & Agent Building\n {\n icon: 'fa-solid fa-calendar-day',\n title: 'Daily summaries',\n prompt: 'Create an agent to send me daily data summaries'\n },\n {\n icon: 'fa-solid fa-bell',\n title: 'Change alerts',\n prompt: 'Build an agent that monitors data changes and alerts me'\n },\n {\n icon: 'fa-solid fa-chart-column',\n title: 'Automated reports',\n prompt: 'Design an agent to aggregate data and create reports'\n },\n {\n icon: 'fa-solid fa-arrows-rotate',\n title: 'Data sync',\n prompt: 'Help me create an agent that syncs data with external systems'\n },\n {\n icon: 'fa-solid fa-file-import',\n title: 'File processor',\n prompt: 'Build an agent that processes files and updates my database'\n },\n {\n icon: 'fa-brands fa-slack',\n title: 'Slack notifications',\n prompt: 'Create an agent to post updates to Slack when data changes'\n },\n {\n icon: 'fa-solid fa-broom',\n title: 'Data cleanup',\n prompt: 'Design an agent that validates and cleans up my data regularly'\n },\n {\n icon: 'fa-solid fa-chart-pie',\n title: 'Auto visualizations',\n prompt: 'Build an agent that generates visualizations from my data'\n },\n {\n icon: 'fa-solid fa-graduation-cap',\n title: 'Research compiler',\n prompt: 'Create an agent to research topics and compile findings'\n },\n {\n icon: 'fa-solid fa-diagram-project',\n title: 'Workflow automation',\n prompt: 'Help me design a workflow agent with approval steps'\n }\n ];\n\n // Randomly selected prompts to display (refreshed on each load)\n public suggestedPrompts: Array<{icon: string; title: string; prompt: string}> = [];\n\n constructor() {\n // Select 4 random prompts on initialization\n this.suggestedPrompts = this.selectRandomPrompts(4);\n }\n\n /**\n * Select random prompts from the full list\n */\n private selectRandomPrompts(count: number): Array<{icon: string; title: string; prompt: string}> {\n const shuffled = [...this.allSuggestedPrompts].sort(() => Math.random() - 0.5);\n return shuffled.slice(0, count);\n }\n\n /**\n * Focus the message input programmatically.\n * Called by parent when the user clicks \"New Conversation\" while already on the empty state.\n */\n public FocusInput(): void {\n setTimeout(() => {\n if (this.messageInput) {\n this.messageInput.inputBox?.focus();\n }\n }, 100);\n }\n\n onEmptyStateSubmit(event: {text: string; attachments: PendingAttachment[]}): void {\n this.messageSent.emit(event);\n }\n\n onSuggestedPromptClicked(prompt: string): void {\n if (!this.disabled) {\n this.messageSent.emit({ text: prompt, attachments: [] });\n }\n }\n}\n","<div class=\"conversation-empty-state\" [class.overlay-mode]=\"overlayMode\">\n <!-- Loading Overlay -->\n @if (disabled) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Creating your conversation...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <div class=\"empty-state-container\" [class.loading]=\"disabled\">\n <!-- Greeting Header (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"greeting-section\">\n <div class=\"greeting-icon\">\n <i class=\"fa-solid fa-comments fa-3x\"></i>\n </div>\n <h1 class=\"greeting-title\">Welcome to Conversations</h1>\n <p class=\"greeting-subtitle\">\n Start a new conversation by typing a message below, or choose a suggested prompt to get started.\n </p>\n </div>\n }\n\n <!-- Suggested Prompts (hidden in overlay mode) -->\n @if (suggestedPrompts.length > 0) {\n <div class=\"suggested-prompts\">\n <div class=\"prompt-grid\">\n @for (prompt of suggestedPrompts; track prompt) {\n <div\n class=\"prompt-card\"\n (click)=\"onSuggestedPromptClicked(prompt.prompt)\"\n [class.disabled]=\"disabled\"\n >\n <div class=\"prompt-icon\">\n <i class=\"{{prompt.icon}}\"></i>\n </div>\n <div class=\"prompt-content\">\n <div class=\"prompt-title\">{{prompt.title}}</div>\n <div class=\"prompt-text\">{{prompt.prompt}}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Compact greeting for overlay mode -->\n @if (overlayMode) {\n <div class=\"overlay-greeting\">\n <p class=\"overlay-greeting-text\">{{ greeting }}</p>\n </div>\n }\n\n <!-- Message Input (using full mj-message-input in empty state mode) -->\n <div class=\"message-input-wrapper\">\n <mj-message-input\n [placeholder]=\"overlayMode ? 'Type a message...' : 'Type your message to start a new conversation...'\"\n [disabled]=\"disabled\"\n [currentUser]=\"currentUser\"\n [emptyStateMode]=\"true\"\n [enableMentions]=\"enableMentions\"\n [enableAttachments]=\"enableAttachments\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n (emptyStateSubmit)=\"onEmptyStateSubmit($event)\">\n </mj-message-input>\n </div>\n\n <!-- Footer Tips (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"tips-section\">\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-at\"></i>\n <span>Use <strong>@AgentName</strong> to directly invoke a specific agent</span>\n </div>\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Press <strong>Enter</strong> to send, <strong>Shift+Enter</strong> for new line</span>\n </div>\n </div>\n }\n </div>\n</div>\n"]}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
3
4
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
4
5
|
function PinnedMessagesPanelComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
5
|
-
i0.ɵɵ
|
|
6
|
-
i0.ɵɵelement(1, "i", 3);
|
|
7
|
-
i0.ɵɵelementStart(2, "p");
|
|
8
|
-
i0.ɵɵtext(3, "No pinned messages");
|
|
9
|
-
i0.ɵɵelementEnd()();
|
|
6
|
+
i0.ɵɵelement(0, "mj-empty-state", 8);
|
|
10
7
|
} }
|
|
11
8
|
function PinnedMessagesPanelComponent_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
12
9
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
@@ -111,7 +108,7 @@ export class PinnedMessagesPanelComponent {
|
|
|
111
108
|
return 'AI Response';
|
|
112
109
|
}
|
|
113
110
|
static ɵfac = function PinnedMessagesPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PinnedMessagesPanelComponent)(); };
|
|
114
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PinnedMessagesPanelComponent, selectors: [["mj-pinned-messages-panel"]], inputs: { pinnedMessages: "pinnedMessages" }, outputs: { closed: "closed", jumpRequested: "jumpRequested", unpinRequested: "unpinRequested" }, standalone: false, decls: 14, vars: 2, consts: [[1, "pins-panel"], [1, "pins-header"], [1, "pins-title"], [1, "fas", "fa-thumbtack"], [1, "pins-count"], ["title", "Close", 1, "pins-close-btn", 3, "click"], [1, "fas", "fa-times"], [1, "pins-body"], [1, "pins-empty"], [1, "pin-card", 3, "unpinning"], [1, "pin-card"], [1, "pin-card-meta"], [1, "pin-sender"], [1, "pin-avatar"], [1, "fas", "fa-robot"], [1, "pin-sender-name"], [1, "pin-time"], [1, "pin-preview"], [1, "pin-actions"], ["title", "Jump to message", 1, "pin-action-btn", "jump-btn", 3, "click"], [1, "fas", "fa-arrow-up-right-from-square"], ["title", "Unpin this message", 1, "pin-action-btn", "unpin-btn", 3, "click"]], template: function PinnedMessagesPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
111
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PinnedMessagesPanelComponent, selectors: [["mj-pinned-messages-panel"]], inputs: { pinnedMessages: "pinnedMessages" }, outputs: { closed: "closed", jumpRequested: "jumpRequested", unpinRequested: "unpinRequested" }, standalone: false, decls: 14, vars: 2, consts: [[1, "pins-panel"], [1, "pins-header"], [1, "pins-title"], [1, "fas", "fa-thumbtack"], [1, "pins-count"], ["title", "Close", 1, "pins-close-btn", 3, "click"], [1, "fas", "fa-times"], [1, "pins-body"], ["Size", "compact", "Icon", "fa-solid fa-thumbtack", "Title", "No pinned messages", 1, "pins-empty"], [1, "pin-card", 3, "unpinning"], [1, "pin-card"], [1, "pin-card-meta"], [1, "pin-sender"], [1, "pin-avatar"], [1, "fas", "fa-robot"], [1, "pin-sender-name"], [1, "pin-time"], [1, "pin-preview"], [1, "pin-actions"], ["title", "Jump to message", 1, "pin-action-btn", "jump-btn", 3, "click"], [1, "fas", "fa-arrow-up-right-from-square"], ["title", "Unpin this message", 1, "pin-action-btn", "unpin-btn", 3, "click"]], template: function PinnedMessagesPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
115
112
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
|
|
116
113
|
i0.ɵɵelement(3, "i", 3);
|
|
117
114
|
i0.ɵɵelementStart(4, "span");
|
|
@@ -125,7 +122,7 @@ export class PinnedMessagesPanelComponent {
|
|
|
125
122
|
i0.ɵɵelement(9, "i", 6);
|
|
126
123
|
i0.ɵɵelementEnd()();
|
|
127
124
|
i0.ɵɵelementStart(10, "div", 7);
|
|
128
|
-
i0.ɵɵconditionalCreate(11, PinnedMessagesPanelComponent_Conditional_11_Template,
|
|
125
|
+
i0.ɵɵconditionalCreate(11, PinnedMessagesPanelComponent_Conditional_11_Template, 1, 0, "mj-empty-state", 8);
|
|
129
126
|
i0.ɵɵrepeaterCreate(12, PinnedMessagesPanelComponent_For_13_Template, 18, 5, "div", 9, _forTrack0);
|
|
130
127
|
i0.ɵɵelementEnd()();
|
|
131
128
|
} if (rf & 2) {
|
|
@@ -135,11 +132,11 @@ export class PinnedMessagesPanelComponent {
|
|
|
135
132
|
i0.ɵɵconditional(ctx.pinnedMessages.length === 0 ? 11 : -1);
|
|
136
133
|
i0.ɵɵadvance();
|
|
137
134
|
i0.ɵɵrepeater(ctx.pinnedMessages);
|
|
138
|
-
} }, styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 340px;\n z-index: 50;\n pointer-events: auto;\n animation: _ngcontent-%COMP%_slideInPanel 0.22s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n@keyframes _ngcontent-%COMP%_slideInPanel {\n from {\n opacity: 0;\n transform: translateX(24px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.pins-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);\n}\n\n\n\n.pins-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.pins-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.pins-title[_ngcontent-%COMP%] > i.fa-thumbtack[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.pins-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n font-size: 11px;\n font-weight: 700;\n}\n\n.pins-close-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.pins-close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n\n\n.pins-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n\n\n.pins-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n color: var(--mj-text-muted);\n}\n\n.pins-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n opacity: 0.4;\n}\n\n.pins-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n margin: 0;\n}\n\n\n\n.pin-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-left: 3px solid var(--mj-status-warning);\n transition: opacity 0.2s, transform 0.2s;\n}\n\n.pin-card.unpinning[_ngcontent-%COMP%] {\n opacity: 0;\n transform: translateX(12px);\n}\n\n.pin-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n border-left-color: var(--mj-status-warning);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n\n\n.pin-card-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.pin-sender[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.pin-avatar[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.pin-avatar[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-brand-primary);\n}\n\n.pin-sender-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.pin-time[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n\n\n.pin-preview[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n\n\n.pin-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n margin-top: 2px;\n}\n\n.pin-action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border-radius: 5px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n border: 1px solid var(--mj-border-default);\n}\n\n.pin-action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.jump-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.jump-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.unpin-btn[_ngcontent-%COMP%] {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.unpin-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.pins-body[_ngcontent-%COMP%]::-webkit-scrollbar { width: 4px; }\n.pins-body[_ngcontent-%COMP%]::-webkit-scrollbar-track { background: transparent; }\n.pins-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 2px;\n}"] });
|
|
135
|
+
} }, dependencies: [i1.MJEmptyStateComponent], styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 340px;\n z-index: 50;\n pointer-events: auto;\n animation: _ngcontent-%COMP%_slideInPanel 0.22s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n@keyframes _ngcontent-%COMP%_slideInPanel {\n from {\n opacity: 0;\n transform: translateX(24px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.pins-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);\n}\n\n\n\n.pins-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.pins-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.pins-title[_ngcontent-%COMP%] > i.fa-thumbtack[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.pins-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n font-size: 11px;\n font-weight: 700;\n}\n\n.pins-close-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.pins-close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n\n\n.pins-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n\n\n.pins-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n color: var(--mj-text-muted);\n}\n\n.pins-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n opacity: 0.4;\n}\n\n.pins-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n margin: 0;\n}\n\n\n\n.pin-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-left: 3px solid var(--mj-status-warning);\n transition: opacity 0.2s, transform 0.2s;\n}\n\n.pin-card.unpinning[_ngcontent-%COMP%] {\n opacity: 0;\n transform: translateX(12px);\n}\n\n.pin-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n border-left-color: var(--mj-status-warning);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n\n\n.pin-card-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.pin-sender[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.pin-avatar[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.pin-avatar[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-brand-primary);\n}\n\n.pin-sender-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.pin-time[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n\n\n.pin-preview[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n\n\n.pin-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n margin-top: 2px;\n}\n\n.pin-action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border-radius: 5px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n border: 1px solid var(--mj-border-default);\n}\n\n.pin-action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.jump-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.jump-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.unpin-btn[_ngcontent-%COMP%] {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.unpin-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.pins-body[_ngcontent-%COMP%]::-webkit-scrollbar { width: 4px; }\n.pins-body[_ngcontent-%COMP%]::-webkit-scrollbar-track { background: transparent; }\n.pins-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 2px;\n}"] });
|
|
139
136
|
}
|
|
140
137
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PinnedMessagesPanelComponent, [{
|
|
141
138
|
type: Component,
|
|
142
|
-
args: [{ standalone: false, selector: 'mj-pinned-messages-panel', template: "<div class=\"pins-panel\">\n <div class=\"pins-header\">\n <div class=\"pins-title\">\n <i class=\"fas fa-thumbtack\"></i>\n <span>Pinned Messages</span>\n <span class=\"pins-count\">{{ pinnedMessages.length }}</span>\n </div>\n <button class=\"pins-close-btn\" (click)=\"Close()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n\n <div class=\"pins-body\">\n @if (pinnedMessages.length === 0) {\n <
|
|
139
|
+
args: [{ standalone: false, selector: 'mj-pinned-messages-panel', template: "<div class=\"pins-panel\">\n <div class=\"pins-header\">\n <div class=\"pins-title\">\n <i class=\"fas fa-thumbtack\"></i>\n <span>Pinned Messages</span>\n <span class=\"pins-count\">{{ pinnedMessages.length }}</span>\n </div>\n <button class=\"pins-close-btn\" (click)=\"Close()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n\n <div class=\"pins-body\">\n @if (pinnedMessages.length === 0) {\n <mj-empty-state class=\"pins-empty\" Size=\"compact\"\n Icon=\"fa-solid fa-thumbtack\"\n Title=\"No pinned messages\" />\n }\n\n @for (message of pinnedMessages; track message.ID) {\n <div class=\"pin-card\" [class.unpinning]=\"IsUnpinning(message)\">\n <div class=\"pin-card-meta\">\n <div class=\"pin-sender\">\n <div class=\"pin-avatar\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <span class=\"pin-sender-name\">{{ GetSenderName(message) }}</span>\n </div>\n <span class=\"pin-time\">{{ GetRelativeTime(message) }}</span>\n </div>\n\n <p class=\"pin-preview\">{{ GetPreviewText(message) }}</p>\n\n <div class=\"pin-actions\">\n <button class=\"pin-action-btn jump-btn\" (click)=\"OnJump(message)\" title=\"Jump to message\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n Jump to message\n </button>\n <button class=\"pin-action-btn unpin-btn\" (click)=\"OnUnpin(message)\" title=\"Unpin this message\">\n <i class=\"fas fa-thumbtack\"></i>\n Unpin\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["/* ============================================================\n Pinned Messages Panel \u2014 overlays the right edge of the chat\n ============================================================ */\n\n:host {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 340px;\n z-index: 50;\n pointer-events: auto;\n animation: slideInPanel 0.22s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n@keyframes slideInPanel {\n from {\n opacity: 0;\n transform: translateX(24px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.pins-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);\n}\n\n/* \u2500\u2500 Header \u2500\u2500 */\n.pins-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.pins-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.pins-title > i.fa-thumbtack {\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.pins-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n font-size: 11px;\n font-weight: 700;\n}\n\n.pins-close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.pins-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n/* \u2500\u2500 Body / Scrollable list \u2500\u2500 */\n.pins-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n/* \u2500\u2500 Empty state \u2500\u2500 */\n.pins-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n color: var(--mj-text-muted);\n}\n\n.pins-empty i {\n font-size: 32px;\n opacity: 0.4;\n}\n\n.pins-empty p {\n font-size: 14px;\n margin: 0;\n}\n\n/* \u2500\u2500 Pin Card \u2500\u2500 */\n.pin-card {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-left: 3px solid var(--mj-status-warning);\n transition: opacity 0.2s, transform 0.2s;\n}\n\n.pin-card.unpinning {\n opacity: 0;\n transform: translateX(12px);\n}\n\n.pin-card:hover {\n border-color: var(--mj-border-strong);\n border-left-color: var(--mj-status-warning);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n/* Card meta row: avatar+name on left, time on right */\n.pin-card-meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.pin-sender {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.pin-avatar {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.pin-avatar i {\n font-size: 10px;\n color: var(--mj-brand-primary);\n}\n\n.pin-sender-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.pin-time {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* Preview text */\n.pin-preview {\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* Card action buttons */\n.pin-actions {\n display: flex;\n gap: 6px;\n margin-top: 2px;\n}\n\n.pin-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border-radius: 5px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n border: 1px solid var(--mj-border-default);\n}\n\n.pin-action-btn i {\n font-size: 11px;\n}\n\n.jump-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.jump-btn:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.unpin-btn {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.unpin-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* \u2500\u2500 Scrollbar styling \u2500\u2500 */\n.pins-body::-webkit-scrollbar { width: 4px; }\n.pins-body::-webkit-scrollbar-track { background: transparent; }\n.pins-body::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 2px;\n}\n"] }]
|
|
143
140
|
}], null, { pinnedMessages: [{
|
|
144
141
|
type: Input
|
|
145
142
|
}], closed: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pinned-messages-panel.component.js","sourceRoot":"","sources":["../../../../src/lib/components/conversation/pinned-messages-panel.component.ts","../../../../src/lib/components/conversation/pinned-messages-panel.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC
|
|
1
|
+
{"version":3,"file":"pinned-messages-panel.component.js","sourceRoot":"","sources":["../../../../src/lib/components/conversation/pinned-messages-panel.component.ts","../../../../src/lib/components/conversation/pinned-messages-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { MJConversationDetailEntity } from '@memberjunction/core-entities';\n\n@Component({\n standalone: false,\n selector: 'mj-pinned-messages-panel',\n templateUrl: './pinned-messages-panel.component.html',\n styleUrls: ['./pinned-messages-panel.component.css']\n})\nexport class PinnedMessagesPanelComponent {\n @Input() public pinnedMessages: MJConversationDetailEntity[] = [];\n\n @Output() public closed = new EventEmitter<void>();\n @Output() public jumpRequested = new EventEmitter<string>(); // emits messageId\n @Output() public unpinRequested = new EventEmitter<MJConversationDetailEntity>();\n\n /** IDs currently being removed (for fade-out animation) */\n public unpinningIds = new Set<string>();\n\n public Close(): void {\n this.closed.emit();\n }\n\n public OnJump(message: MJConversationDetailEntity): void {\n this.jumpRequested.emit(message.ID);\n }\n\n public OnUnpin(message: MJConversationDetailEntity): void {\n this.unpinningIds.add(message.ID);\n // Let the card animate out before the parent removes it from the list\n setTimeout(() => {\n this.unpinningIds.delete(message.ID);\n this.unpinRequested.emit(message);\n }, 200);\n }\n\n public IsUnpinning(message: MJConversationDetailEntity): boolean {\n return this.unpinningIds.has(message.ID);\n }\n\n /** Strip markdown to plain prose for card preview */\n public GetPreviewText(message: MJConversationDetailEntity): string {\n const raw = message.Message || '';\n const stripped = raw\n .replace(/```[\\s\\S]*?```/g, '[code]') // fenced code blocks\n .replace(/`[^`]*`/g, '[code]') // inline code\n .replace(/#{1,6}\\s+/g, '') // headings\n .replace(/\\*\\*(.+?)\\*\\*/g, '$1') // bold\n .replace(/\\*(.+?)\\*/g, '$1') // italic\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1') // links\n .replace(/!\\[([^\\]]*)\\]\\([^)]+\\)/g, '') // images\n .replace(/>\\s+/g, '') // blockquotes\n .replace(/\\n+/g, ' ') // newlines → spaces\n .trim();\n return stripped.length > 200 ? stripped.substring(0, 197) + '…' : stripped;\n }\n\n /** Human-readable relative timestamp */\n public GetRelativeTime(message: MJConversationDetailEntity): string {\n const created = message.__mj_CreatedAt;\n if (!created) return '';\n const diffMs = Date.now() - new Date(created).getTime();\n const mins = Math.floor(diffMs / 60_000);\n const hours = Math.floor(diffMs / 3_600_000);\n const days = Math.floor(diffMs / 86_400_000);\n if (mins < 1) return 'just now';\n if (mins < 60) return `${mins}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days === 1) return 'Yesterday';\n if (days < 7) return `${days} days ago`;\n return new Date(created).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n }\n\n /** Display name for the message sender */\n public GetSenderName(message: MJConversationDetailEntity): string {\n if (message.Role === 'User') return 'You';\n return 'AI Response';\n }\n}\n","<div class=\"pins-panel\">\n <div class=\"pins-header\">\n <div class=\"pins-title\">\n <i class=\"fas fa-thumbtack\"></i>\n <span>Pinned Messages</span>\n <span class=\"pins-count\">{{ pinnedMessages.length }}</span>\n </div>\n <button class=\"pins-close-btn\" (click)=\"Close()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n\n <div class=\"pins-body\">\n @if (pinnedMessages.length === 0) {\n <mj-empty-state class=\"pins-empty\" Size=\"compact\"\n Icon=\"fa-solid fa-thumbtack\"\n Title=\"No pinned messages\" />\n }\n\n @for (message of pinnedMessages; track message.ID) {\n <div class=\"pin-card\" [class.unpinning]=\"IsUnpinning(message)\">\n <div class=\"pin-card-meta\">\n <div class=\"pin-sender\">\n <div class=\"pin-avatar\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <span class=\"pin-sender-name\">{{ GetSenderName(message) }}</span>\n </div>\n <span class=\"pin-time\">{{ GetRelativeTime(message) }}</span>\n </div>\n\n <p class=\"pin-preview\">{{ GetPreviewText(message) }}</p>\n\n <div class=\"pin-actions\">\n <button class=\"pin-action-btn jump-btn\" (click)=\"OnJump(message)\" title=\"Jump to message\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n Jump to message\n </button>\n <button class=\"pin-action-btn unpin-btn\" (click)=\"OnUnpin(message)\" title=\"Unpin this message\">\n <i class=\"fas fa-thumbtack\"></i>\n Unpin\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n"]}
|
|
@@ -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,
|
|
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;IACvB,WAAW,EAAG,QAAQ,CAAC;IAEzB,WAAW,EAAE,kBAAkB,EAAE,CAAM;IACvC,mBAAmB,EAAE,kBAAkB,EAAE,CAAM;IAC/C,WAAW,EAAE,MAAM,CAAM;IACzB,SAAS,EAAE,OAAO,CAAS;IAC3B,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IACtD,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;;IAKjD,QAAQ;IAIF,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BtC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,OAAO,CAAC,WAAW;IAYnB,cAAc,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAOpD,UAAU,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAUrD,cAAc,IAAI,IAAI;IAOtB,OAAO,IAAI,IAAI;yCAvFJ,wBAAwB;2CAAxB,wBAAwB;CA0FpC"}
|
|
@@ -3,7 +3,8 @@ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
|
3
3
|
import { RunView } from '@memberjunction/core';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/forms";
|
|
6
|
-
import * as i2 from "@memberjunction/ng-
|
|
6
|
+
import * as i2 from "@memberjunction/ng-ui-components";
|
|
7
|
+
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
7
8
|
function LibraryFullViewComponent_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
8
9
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
9
10
|
i0.ɵɵelement(0, "i", 17);
|
|
@@ -35,18 +36,13 @@ function LibraryFullViewComponent_Conditional_15_Template(rf, ctx) { if (rf & 1)
|
|
|
35
36
|
i0.ɵɵelementEnd();
|
|
36
37
|
} }
|
|
37
38
|
function LibraryFullViewComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
-
i0.ɵɵ
|
|
39
|
-
i0.ɵɵelement(1, "i", 19);
|
|
40
|
-
i0.ɵɵelementStart(2, "p");
|
|
41
|
-
i0.ɵɵtext(3);
|
|
42
|
-
i0.ɵɵelementEnd()();
|
|
39
|
+
i0.ɵɵelement(0, "mj-empty-state", 15);
|
|
43
40
|
} if (rf & 2) {
|
|
44
41
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
45
|
-
i0.ɵɵ
|
|
46
|
-
i0.ɵɵtextInterpolate(ctx_r2.searchQuery ? "No collections found" : "No collections yet");
|
|
42
|
+
i0.ɵɵproperty("Variant", ctx_r2.searchQuery ? "no-results" : "empty")("Title", ctx_r2.searchQuery ? "No collections found" : "No collections yet");
|
|
47
43
|
} }
|
|
48
44
|
function LibraryFullViewComponent_Conditional_17_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
-
i0.ɵɵelementStart(0, "div",
|
|
45
|
+
i0.ɵɵelementStart(0, "div", 25);
|
|
50
46
|
i0.ɵɵtext(1);
|
|
51
47
|
i0.ɵɵelementEnd();
|
|
52
48
|
} if (rf & 2) {
|
|
@@ -56,15 +52,15 @@ function LibraryFullViewComponent_Conditional_17_For_2_Conditional_6_Template(rf
|
|
|
56
52
|
} }
|
|
57
53
|
function LibraryFullViewComponent_Conditional_17_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
58
54
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
59
|
-
i0.ɵɵelementStart(0, "div",
|
|
55
|
+
i0.ɵɵelementStart(0, "div", 20);
|
|
60
56
|
i0.ɵɵlistener("click", function LibraryFullViewComponent_Conditional_17_For_2_Template_div_click_0_listener() { const collection_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.openCollection(collection_r7)); });
|
|
61
|
-
i0.ɵɵelementStart(1, "div",
|
|
62
|
-
i0.ɵɵelement(2, "i",
|
|
57
|
+
i0.ɵɵelementStart(1, "div", 21);
|
|
58
|
+
i0.ɵɵelement(2, "i", 22);
|
|
63
59
|
i0.ɵɵelementEnd();
|
|
64
|
-
i0.ɵɵelementStart(3, "div",
|
|
60
|
+
i0.ɵɵelementStart(3, "div", 23)(4, "div", 24);
|
|
65
61
|
i0.ɵɵtext(5);
|
|
66
62
|
i0.ɵɵelementEnd();
|
|
67
|
-
i0.ɵɵconditionalCreate(6, LibraryFullViewComponent_Conditional_17_For_2_Conditional_6_Template, 2, 1, "div",
|
|
63
|
+
i0.ɵɵconditionalCreate(6, LibraryFullViewComponent_Conditional_17_For_2_Conditional_6_Template, 2, 1, "div", 25);
|
|
68
64
|
i0.ɵɵelementEnd()();
|
|
69
65
|
} if (rf & 2) {
|
|
70
66
|
const collection_r7 = ctx.$implicit;
|
|
@@ -75,7 +71,7 @@ function LibraryFullViewComponent_Conditional_17_For_2_Template(rf, ctx) { if (r
|
|
|
75
71
|
} }
|
|
76
72
|
function LibraryFullViewComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
77
73
|
i0.ɵɵelementStart(0, "div", 16);
|
|
78
|
-
i0.ɵɵrepeaterCreate(1, LibraryFullViewComponent_Conditional_17_For_2_Template, 7, 2, "div",
|
|
74
|
+
i0.ɵɵrepeaterCreate(1, LibraryFullViewComponent_Conditional_17_For_2_Template, 7, 2, "div", 19, i0.ɵɵrepeaterTrackByIdentity);
|
|
79
75
|
i0.ɵɵelementEnd();
|
|
80
76
|
} if (rf & 2) {
|
|
81
77
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
@@ -164,7 +160,7 @@ export class LibraryFullViewComponent extends BaseAngularComponent {
|
|
|
164
160
|
this.loadCollections();
|
|
165
161
|
}
|
|
166
162
|
static ɵfac = function LibraryFullViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LibraryFullViewComponent)(); };
|
|
167
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LibraryFullViewComponent, selectors: [["mj-library-full-view"]], inputs: { environmentId: "environmentId", currentUser: "currentUser" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 5, consts: [[1, "collections-view"], [1, "collections-header"], [1, "collections-breadcrumb"], [1, "breadcrumb-item"], [1, "fas", "fa-home"], [1, "breadcrumb-link", 3, "click"], [1, "breadcrumb-path"], [1, "collections-search"], [1, "fas", "fa-search"], ["type", "text", "placeholder", "Search collections and artifacts...", 1, "library-search-input", 3, "ngModelChange", "ngModel"], [1, "collections-actions"], ["title", "Refresh", 1, "btn-secondary", 3, "click"], [1, "fas", "fa-sync"], [1, "collections-content"], [1, "loading-state"], [
|
|
163
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LibraryFullViewComponent, selectors: [["mj-library-full-view"]], inputs: { environmentId: "environmentId", currentUser: "currentUser" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 5, consts: [[1, "collections-view"], [1, "collections-header"], [1, "collections-breadcrumb"], [1, "breadcrumb-item"], [1, "fas", "fa-home"], [1, "breadcrumb-link", 3, "click"], [1, "breadcrumb-path"], [1, "collections-search"], [1, "fas", "fa-search"], ["type", "text", "placeholder", "Search collections and artifacts...", 1, "library-search-input", 3, "ngModelChange", "ngModel"], [1, "collections-actions"], ["title", "Refresh", 1, "btn-secondary", 3, "click"], [1, "fas", "fa-sync"], [1, "collections-content"], [1, "loading-state"], ["Icon", "fa-solid fa-folder-open", 3, "Variant", "Title"], [1, "library-folders"], [1, "fas", "fa-chevron-right", "breadcrumb-separator"], ["text", "Loading collections...", "size", "large"], [1, "library-folder"], [1, "library-folder", 3, "click"], [1, "folder-icon"], [1, "fas", "fa-folder"], [1, "folder-info"], [1, "folder-name"], [1, "folder-meta"]], template: function LibraryFullViewComponent_Template(rf, ctx) { if (rf & 1) {
|
|
168
164
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3);
|
|
169
165
|
i0.ɵɵelement(4, "i", 4);
|
|
170
166
|
i0.ɵɵelementStart(5, "a", 5);
|
|
@@ -185,7 +181,7 @@ export class LibraryFullViewComponent extends BaseAngularComponent {
|
|
|
185
181
|
i0.ɵɵelementEnd()()();
|
|
186
182
|
i0.ɵɵelementStart(14, "div", 13);
|
|
187
183
|
i0.ɵɵconditionalCreate(15, LibraryFullViewComponent_Conditional_15_Template, 2, 0, "div", 14);
|
|
188
|
-
i0.ɵɵconditionalCreate(16, LibraryFullViewComponent_Conditional_16_Template,
|
|
184
|
+
i0.ɵɵconditionalCreate(16, LibraryFullViewComponent_Conditional_16_Template, 1, 2, "mj-empty-state", 15);
|
|
189
185
|
i0.ɵɵconditionalCreate(17, LibraryFullViewComponent_Conditional_17_Template, 3, 0, "div", 16);
|
|
190
186
|
i0.ɵɵelementEnd()();
|
|
191
187
|
} if (rf & 2) {
|
|
@@ -199,7 +195,7 @@ export class LibraryFullViewComponent extends BaseAngularComponent {
|
|
|
199
195
|
i0.ɵɵconditional(!ctx.isLoading && ctx.filteredCollections.length === 0 ? 16 : -1);
|
|
200
196
|
i0.ɵɵadvance();
|
|
201
197
|
i0.ɵɵconditional(!ctx.isLoading && ctx.filteredCollections.length > 0 ? 17 : -1);
|
|
202
|
-
} }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent], styles: [".collections-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .collections-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #E5E7EB;\n gap: 16px;\n }\n\n .collections-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .breadcrumb-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6B7280;\n font-size: 14px;\n }\n\n .breadcrumb-link[_ngcontent-%COMP%] {\n color: #111827;\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n }\n\n .breadcrumb-link[_ngcontent-%COMP%]:hover {\n color: #1e40af;\n }\n\n .breadcrumb-link.active[_ngcontent-%COMP%] {\n color: #6B7280;\n cursor: default;\n }\n\n .breadcrumb-path[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator[_ngcontent-%COMP%] {\n color: #D1D5DB;\n font-size: 10px;\n }\n\n .collections-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n padding: 8px 12px;\n min-width: 300px;\n }\n\n .collections-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .library-search-input[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n outline: none;\n font-size: 14px;\n flex: 1;\n color: #111827;\n }\n\n .library-search-input[_ngcontent-%COMP%]::placeholder {\n color: #9CA3AF;\n }\n\n .collections-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .btn-secondary[_ngcontent-%COMP%] {\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n cursor: pointer;\n color: #6B7280;\n transition: all 150ms ease;\n }\n\n .btn-secondary[_ngcontent-%COMP%]:hover {\n background: #F9FAFB;\n color: #111827;\n }\n\n .collections-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n .loading-state[_ngcontent-%COMP%]
|
|
198
|
+
} }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJEmptyStateComponent, i3.LoadingComponent], styles: [".collections-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .collections-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #E5E7EB;\n gap: 16px;\n }\n\n .collections-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .breadcrumb-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6B7280;\n font-size: 14px;\n }\n\n .breadcrumb-link[_ngcontent-%COMP%] {\n color: #111827;\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n }\n\n .breadcrumb-link[_ngcontent-%COMP%]:hover {\n color: #1e40af;\n }\n\n .breadcrumb-link.active[_ngcontent-%COMP%] {\n color: #6B7280;\n cursor: default;\n }\n\n .breadcrumb-path[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator[_ngcontent-%COMP%] {\n color: #D1D5DB;\n font-size: 10px;\n }\n\n .collections-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n padding: 8px 12px;\n min-width: 300px;\n }\n\n .collections-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .library-search-input[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n outline: none;\n font-size: 14px;\n flex: 1;\n color: #111827;\n }\n\n .library-search-input[_ngcontent-%COMP%]::placeholder {\n color: #9CA3AF;\n }\n\n .collections-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .btn-secondary[_ngcontent-%COMP%] {\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n cursor: pointer;\n color: #6B7280;\n transition: all 150ms ease;\n }\n\n .btn-secondary[_ngcontent-%COMP%]:hover {\n background: #F9FAFB;\n color: #111827;\n }\n\n .collections-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n .loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #9CA3AF;\n }\n\n .collections-content[_ngcontent-%COMP%] mj-empty-state[_ngcontent-%COMP%] {\n height: 100%;\n }\n\n .library-folders[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 16px;\n }\n\n .library-folder[_ngcontent-%COMP%] {\n display: flex;\n align-items: start;\n gap: 16px;\n padding: 20px;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .library-folder[_ngcontent-%COMP%]:hover {\n border-color: #1e40af;\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .folder-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #EFF6FF;\n border-radius: 8px;\n flex-shrink: 0;\n }\n\n .folder-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #1e40af;\n }\n\n .folder-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n\n .folder-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n color: #111827;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .folder-meta[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6B7280;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }"] });
|
|
203
199
|
}
|
|
204
200
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LibraryFullViewComponent, [{
|
|
205
201
|
type: Component,
|
|
@@ -245,10 +241,10 @@ export class LibraryFullViewComponent extends BaseAngularComponent {
|
|
|
245
241
|
</div>
|
|
246
242
|
}
|
|
247
243
|
@if (!isLoading && filteredCollections.length === 0) {
|
|
248
|
-
<
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
244
|
+
<mj-empty-state
|
|
245
|
+
[Variant]="searchQuery ? 'no-results' : 'empty'"
|
|
246
|
+
Icon="fa-solid fa-folder-open"
|
|
247
|
+
[Title]="searchQuery ? 'No collections found' : 'No collections yet'" />
|
|
252
248
|
}
|
|
253
249
|
@if (!isLoading && filteredCollections.length > 0) {
|
|
254
250
|
<div class="library-folders">
|
|
@@ -273,11 +269,11 @@ export class LibraryFullViewComponent extends BaseAngularComponent {
|
|
|
273
269
|
}
|
|
274
270
|
</div>
|
|
275
271
|
</div>
|
|
276
|
-
`, styles: ["\n .collections-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .collections-header {\n display: flex;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #E5E7EB;\n gap: 16px;\n }\n\n .collections-breadcrumb {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .breadcrumb-item i {\n color: #6B7280;\n font-size: 14px;\n }\n\n .breadcrumb-link {\n color: #111827;\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n }\n\n .breadcrumb-link:hover {\n color: #1e40af;\n }\n\n .breadcrumb-link.active {\n color: #6B7280;\n cursor: default;\n }\n\n .breadcrumb-path {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator {\n color: #D1D5DB;\n font-size: 10px;\n }\n\n .collections-search {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n padding: 8px 12px;\n min-width: 300px;\n }\n\n .collections-search i {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .library-search-input {\n border: none;\n background: transparent;\n outline: none;\n font-size: 14px;\n flex: 1;\n color: #111827;\n }\n\n .library-search-input::placeholder {\n color: #9CA3AF;\n }\n\n .collections-actions {\n display: flex;\n gap: 8px;\n }\n\n .btn-secondary {\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n cursor: pointer;\n color: #6B7280;\n transition: all 150ms ease;\n }\n\n .btn-secondary:hover {\n background: #F9FAFB;\n color: #111827;\n }\n\n .collections-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n .loading-state
|
|
272
|
+
`, styles: ["\n .collections-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .collections-header {\n display: flex;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #E5E7EB;\n gap: 16px;\n }\n\n .collections-breadcrumb {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .breadcrumb-item i {\n color: #6B7280;\n font-size: 14px;\n }\n\n .breadcrumb-link {\n color: #111827;\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n }\n\n .breadcrumb-link:hover {\n color: #1e40af;\n }\n\n .breadcrumb-link.active {\n color: #6B7280;\n cursor: default;\n }\n\n .breadcrumb-path {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator {\n color: #D1D5DB;\n font-size: 10px;\n }\n\n .collections-search {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n padding: 8px 12px;\n min-width: 300px;\n }\n\n .collections-search i {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .library-search-input {\n border: none;\n background: transparent;\n outline: none;\n font-size: 14px;\n flex: 1;\n color: #111827;\n }\n\n .library-search-input::placeholder {\n color: #9CA3AF;\n }\n\n .collections-actions {\n display: flex;\n gap: 8px;\n }\n\n .btn-secondary {\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n cursor: pointer;\n color: #6B7280;\n transition: all 150ms ease;\n }\n\n .btn-secondary:hover {\n background: #F9FAFB;\n color: #111827;\n }\n\n .collections-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n .loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #9CA3AF;\n }\n\n .collections-content mj-empty-state {\n height: 100%;\n }\n\n .library-folders {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 16px;\n }\n\n .library-folder {\n display: flex;\n align-items: start;\n gap: 16px;\n padding: 20px;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .library-folder:hover {\n border-color: #1e40af;\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .folder-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #EFF6FF;\n border-radius: 8px;\n flex-shrink: 0;\n }\n\n .folder-icon i {\n font-size: 20px;\n color: #1e40af;\n }\n\n .folder-info {\n flex: 1;\n min-width: 0;\n }\n\n .folder-name {\n font-size: 15px;\n font-weight: 500;\n color: #111827;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .folder-meta {\n font-size: 13px;\n color: #6B7280;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n "] }]
|
|
277
273
|
}], () => [], { environmentId: [{
|
|
278
274
|
type: Input
|
|
279
275
|
}], currentUser: [{
|
|
280
276
|
type: Input
|
|
281
277
|
}] }); })();
|
|
282
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LibraryFullViewComponent, { className: "LibraryFullViewComponent", filePath: "src/lib/components/library/library-full-view.component.ts", lineNumber:
|
|
278
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LibraryFullViewComponent, { className: "LibraryFullViewComponent", filePath: "src/lib/components/library/library-full-view.component.ts", lineNumber: 281 }); })();
|
|
283
279
|
//# sourceMappingURL=library-full-view.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-full-view.component.js","sourceRoot":"","sources":["../../../../src/lib/components/library/library-full-view.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { UserInfo, RunView } from '@memberjunction/core';\nimport { MJCollectionEntity } from '@memberjunction/core-entities';\n\n/**\n * Full-panel Collections view component\n * Replaces the main content area when Collections tab is selected\n */\n@Component({\n standalone: false,\n selector: 'mj-library-full-view',\n template: `\n <div class=\"collections-view\">\n <div class=\"collections-header\">\n <div class=\"collections-breadcrumb\">\n <div class=\"breadcrumb-item\">\n <i class=\"fas fa-home\"></i>\n <a class=\"breadcrumb-link\" (click)=\"navigateToRoot()\">Collections</a>\n </div>\n @if (breadcrumbs.length > 0) {\n <span class=\"breadcrumb-path\">\n @for (crumb of breadcrumbs; track crumb; let last = $last) {\n <i class=\"fas fa-chevron-right breadcrumb-separator\"></i>\n <a class=\"breadcrumb-link\"\n [class.active]=\"last\"\n (click)=\"navigateTo(crumb)\">\n {{ crumb.name }}\n </a>\n }\n </span>\n }\n </div>\n <div class=\"collections-search\">\n <i class=\"fas fa-search\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchQuery\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search collections and artifacts...\"\n class=\"library-search-input\">\n </div>\n <div class=\"collections-actions\">\n <button class=\"btn-secondary\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fas fa-sync\"></i>\n </button>\n </div>\n </div>\n <div class=\"collections-content\">\n @if (isLoading) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading collections...\" size=\"large\"></mj-loading>\n </div>\n }\n @if (!isLoading && filteredCollections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fas fa-folder-open\"></i>\n <p>{{ searchQuery ? 'No collections found' : 'No collections yet' }}</p>\n </div>\n }\n @if (!isLoading && filteredCollections.length > 0) {\n <div class=\"library-folders\">\n @for (collection of filteredCollections; track collection) {\n <div\n class=\"library-folder\"\n (click)=\"openCollection(collection)\">\n <div class=\"folder-icon\">\n <i class=\"fas fa-folder\"></i>\n </div>\n <div class=\"folder-info\">\n <div class=\"folder-name\">{{ collection.Name }}</div>\n @if (collection.Description) {\n <div class=\"folder-meta\">\n {{ collection.Description }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n `,\n styles: [`\n .collections-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .collections-header {\n display: flex;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #E5E7EB;\n gap: 16px;\n }\n\n .collections-breadcrumb {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .breadcrumb-item i {\n color: #6B7280;\n font-size: 14px;\n }\n\n .breadcrumb-link {\n color: #111827;\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n }\n\n .breadcrumb-link:hover {\n color: #1e40af;\n }\n\n .breadcrumb-link.active {\n color: #6B7280;\n cursor: default;\n }\n\n .breadcrumb-path {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator {\n color: #D1D5DB;\n font-size: 10px;\n }\n\n .collections-search {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n padding: 8px 12px;\n min-width: 300px;\n }\n\n .collections-search i {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .library-search-input {\n border: none;\n background: transparent;\n outline: none;\n font-size: 14px;\n flex: 1;\n color: #111827;\n }\n\n .library-search-input::placeholder {\n color: #9CA3AF;\n }\n\n .collections-actions {\n display: flex;\n gap: 8px;\n }\n\n .btn-secondary {\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n cursor: pointer;\n color: #6B7280;\n transition: all 150ms ease;\n }\n\n .btn-secondary:hover {\n background: #F9FAFB;\n color: #111827;\n }\n\n .collections-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n .loading-state, .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #9CA3AF;\n }\n\n .empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n }\n\n .empty-state p {\n margin: 0;\n font-size: 14px;\n }\n\n .library-folders {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 16px;\n }\n\n .library-folder {\n display: flex;\n align-items: start;\n gap: 16px;\n padding: 20px;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .library-folder:hover {\n border-color: #1e40af;\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .folder-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #EFF6FF;\n border-radius: 8px;\n flex-shrink: 0;\n }\n\n .folder-icon i {\n font-size: 20px;\n color: #1e40af;\n }\n\n .folder-info {\n flex: 1;\n min-width: 0;\n }\n\n .folder-name {\n font-size: 15px;\n font-weight: 500;\n color: #111827;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .folder-meta {\n font-size: 13px;\n color: #6B7280;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n `]\n})\nexport class LibraryFullViewComponent extends BaseAngularComponent implements OnInit {\n @Input() environmentId!: string;\n @Input() currentUser!: UserInfo;\n\n public collections: MJCollectionEntity[] = [];\n public filteredCollections: MJCollectionEntity[] = [];\n public searchQuery: string = '';\n public isLoading: boolean = false;\n public breadcrumbs: Array<{ id: string; name: string }> = [];\n public currentCollectionId: string | null = null;\n\n constructor() {\n super();}\n\n ngOnInit() {\n this.loadCollections();\n }\n\n async loadCollections(): Promise<void> {\n this.isLoading = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const filter = `EnvironmentID='${this.environmentId}'` +\n (this.currentCollectionId ? ` AND ParentID='${this.currentCollectionId}'` : ' AND ParentID IS NULL');\n\n const result = await rv.RunView<MJCollectionEntity>(\n {\n EntityName: 'MJ: Collections',\n ExtraFilter: filter,\n OrderBy: 'Name ASC',\n MaxRows: 1000,\n ResultType: 'entity_object'\n },\n this.currentUser\n );\n\n if (result.Success) {\n this.collections = result.Results || [];\n this.applySearch();\n }\n } catch (error) {\n console.error('Failed to load collections:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n onSearchChange(query: string): void {\n this.applySearch();\n }\n\n private applySearch(): void {\n if (!this.searchQuery.trim()) {\n this.filteredCollections = [...this.collections];\n } else {\n const query = this.searchQuery.toLowerCase();\n this.filteredCollections = this.collections.filter(c =>\n c.Name.toLowerCase().includes(query) ||\n (c.Description && c.Description.toLowerCase().includes(query))\n );\n }\n }\n\n openCollection(collection: MJCollectionEntity): void {\n this.breadcrumbs.push({ id: collection.ID, name: collection.Name });\n this.currentCollectionId = collection.ID;\n this.searchQuery = '';\n this.loadCollections();\n }\n\n navigateTo(crumb: { id: string; name: string }): void {\n const index = this.breadcrumbs.findIndex(b => b.id === crumb.id);\n if (index !== -1) {\n this.breadcrumbs = this.breadcrumbs.slice(0, index + 1);\n this.currentCollectionId = crumb.id;\n this.searchQuery = '';\n this.loadCollections();\n }\n }\n\n navigateToRoot(): void {\n this.breadcrumbs = [];\n this.currentCollectionId = null;\n this.searchQuery = '';\n this.loadCollections();\n }\n\n refresh(): void {\n this.loadCollections();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"library-full-view.component.js","sourceRoot":"","sources":["../../../../src/lib/components/library/library-full-view.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { UserInfo, RunView } from '@memberjunction/core';\nimport { MJCollectionEntity } from '@memberjunction/core-entities';\n\n/**\n * Full-panel Collections view component\n * Replaces the main content area when Collections tab is selected\n */\n@Component({\n standalone: false,\n selector: 'mj-library-full-view',\n template: `\n <div class=\"collections-view\">\n <div class=\"collections-header\">\n <div class=\"collections-breadcrumb\">\n <div class=\"breadcrumb-item\">\n <i class=\"fas fa-home\"></i>\n <a class=\"breadcrumb-link\" (click)=\"navigateToRoot()\">Collections</a>\n </div>\n @if (breadcrumbs.length > 0) {\n <span class=\"breadcrumb-path\">\n @for (crumb of breadcrumbs; track crumb; let last = $last) {\n <i class=\"fas fa-chevron-right breadcrumb-separator\"></i>\n <a class=\"breadcrumb-link\"\n [class.active]=\"last\"\n (click)=\"navigateTo(crumb)\">\n {{ crumb.name }}\n </a>\n }\n </span>\n }\n </div>\n <div class=\"collections-search\">\n <i class=\"fas fa-search\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchQuery\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search collections and artifacts...\"\n class=\"library-search-input\">\n </div>\n <div class=\"collections-actions\">\n <button class=\"btn-secondary\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fas fa-sync\"></i>\n </button>\n </div>\n </div>\n <div class=\"collections-content\">\n @if (isLoading) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading collections...\" size=\"large\"></mj-loading>\n </div>\n }\n @if (!isLoading && filteredCollections.length === 0) {\n <mj-empty-state\n [Variant]=\"searchQuery ? 'no-results' : 'empty'\"\n Icon=\"fa-solid fa-folder-open\"\n [Title]=\"searchQuery ? 'No collections found' : 'No collections yet'\" />\n }\n @if (!isLoading && filteredCollections.length > 0) {\n <div class=\"library-folders\">\n @for (collection of filteredCollections; track collection) {\n <div\n class=\"library-folder\"\n (click)=\"openCollection(collection)\">\n <div class=\"folder-icon\">\n <i class=\"fas fa-folder\"></i>\n </div>\n <div class=\"folder-info\">\n <div class=\"folder-name\">{{ collection.Name }}</div>\n @if (collection.Description) {\n <div class=\"folder-meta\">\n {{ collection.Description }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n `,\n styles: [`\n .collections-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .collections-header {\n display: flex;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #E5E7EB;\n gap: 16px;\n }\n\n .collections-breadcrumb {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .breadcrumb-item i {\n color: #6B7280;\n font-size: 14px;\n }\n\n .breadcrumb-link {\n color: #111827;\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n }\n\n .breadcrumb-link:hover {\n color: #1e40af;\n }\n\n .breadcrumb-link.active {\n color: #6B7280;\n cursor: default;\n }\n\n .breadcrumb-path {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator {\n color: #D1D5DB;\n font-size: 10px;\n }\n\n .collections-search {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n padding: 8px 12px;\n min-width: 300px;\n }\n\n .collections-search i {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .library-search-input {\n border: none;\n background: transparent;\n outline: none;\n font-size: 14px;\n flex: 1;\n color: #111827;\n }\n\n .library-search-input::placeholder {\n color: #9CA3AF;\n }\n\n .collections-actions {\n display: flex;\n gap: 8px;\n }\n\n .btn-secondary {\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n cursor: pointer;\n color: #6B7280;\n transition: all 150ms ease;\n }\n\n .btn-secondary:hover {\n background: #F9FAFB;\n color: #111827;\n }\n\n .collections-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n .loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #9CA3AF;\n }\n\n .collections-content mj-empty-state {\n height: 100%;\n }\n\n .library-folders {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 16px;\n }\n\n .library-folder {\n display: flex;\n align-items: start;\n gap: 16px;\n padding: 20px;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .library-folder:hover {\n border-color: #1e40af;\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .folder-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #EFF6FF;\n border-radius: 8px;\n flex-shrink: 0;\n }\n\n .folder-icon i {\n font-size: 20px;\n color: #1e40af;\n }\n\n .folder-info {\n flex: 1;\n min-width: 0;\n }\n\n .folder-name {\n font-size: 15px;\n font-weight: 500;\n color: #111827;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .folder-meta {\n font-size: 13px;\n color: #6B7280;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n `]\n})\nexport class LibraryFullViewComponent extends BaseAngularComponent implements OnInit {\n @Input() environmentId!: string;\n @Input() currentUser!: UserInfo;\n\n public collections: MJCollectionEntity[] = [];\n public filteredCollections: MJCollectionEntity[] = [];\n public searchQuery: string = '';\n public isLoading: boolean = false;\n public breadcrumbs: Array<{ id: string; name: string }> = [];\n public currentCollectionId: string | null = null;\n\n constructor() {\n super();}\n\n ngOnInit() {\n this.loadCollections();\n }\n\n async loadCollections(): Promise<void> {\n this.isLoading = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const filter = `EnvironmentID='${this.environmentId}'` +\n (this.currentCollectionId ? ` AND ParentID='${this.currentCollectionId}'` : ' AND ParentID IS NULL');\n\n const result = await rv.RunView<MJCollectionEntity>(\n {\n EntityName: 'MJ: Collections',\n ExtraFilter: filter,\n OrderBy: 'Name ASC',\n MaxRows: 1000,\n ResultType: 'entity_object'\n },\n this.currentUser\n );\n\n if (result.Success) {\n this.collections = result.Results || [];\n this.applySearch();\n }\n } catch (error) {\n console.error('Failed to load collections:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n onSearchChange(query: string): void {\n this.applySearch();\n }\n\n private applySearch(): void {\n if (!this.searchQuery.trim()) {\n this.filteredCollections = [...this.collections];\n } else {\n const query = this.searchQuery.toLowerCase();\n this.filteredCollections = this.collections.filter(c =>\n c.Name.toLowerCase().includes(query) ||\n (c.Description && c.Description.toLowerCase().includes(query))\n );\n }\n }\n\n openCollection(collection: MJCollectionEntity): void {\n this.breadcrumbs.push({ id: collection.ID, name: collection.Name });\n this.currentCollectionId = collection.ID;\n this.searchQuery = '';\n this.loadCollections();\n }\n\n navigateTo(crumb: { id: string; name: string }): void {\n const index = this.breadcrumbs.findIndex(b => b.id === crumb.id);\n if (index !== -1) {\n this.breadcrumbs = this.breadcrumbs.slice(0, index + 1);\n this.currentCollectionId = crumb.id;\n this.searchQuery = '';\n this.loadCollections();\n }\n }\n\n navigateToRoot(): void {\n this.breadcrumbs = [];\n this.currentCollectionId = null;\n this.searchQuery = '';\n this.loadCollections();\n }\n\n refresh(): void {\n this.loadCollections();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"members-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/members/members-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;AAE9D,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,IAAI,CAAC;CACf;AAED,
|
|
1
|
+
{"version":3,"file":"members-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/members/members-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;AAE9D,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,IAAI,CAAC;CACf;AAED,qBAuNa,qBAAqB;IAsBpB,OAAO,CAAC,aAAa;IArBxB,SAAS,UAAS;IAClB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,WAAW,EAAG,QAAQ,CAAC;IACtB,SAAS,qBAA4B;IACrC,cAAc,qBAA4B;IAEpD,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,cAAc,SAAM;IACpB,aAAa,EAAE,QAAQ,GAAG,OAAO,CAAY;IAC7C,SAAS,UAAS;IAClB,YAAY,SAAM;IAElB,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,WAAW;;;QAGT;gBAEkB,aAAa,EAAE,aAAa;IAEhD,WAAW,IAAI,IAAI;YAML,WAAW;IA2BnB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C5B,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB/D,QAAQ,IAAI,IAAI;IAKhB,OAAO,CAAC,SAAS;yCAjIN,qBAAqB;2CAArB,qBAAqB;CAuIjC"}
|