@memberjunction/ng-conversations 6.2.0-edge.0 → 6.2.0-edge.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -2
- package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +19 -3
- package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
- package/dist/lib/components/active-tasks/active-tasks-panel.component.js +39 -7
- package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
- package/dist/lib/components/agent/active-agent-indicator.component.d.ts +74 -6
- package/dist/lib/components/agent/active-agent-indicator.component.d.ts.map +1 -1
- package/dist/lib/components/agent/active-agent-indicator.component.js +111 -21
- package/dist/lib/components/agent/active-agent-indicator.component.js.map +1 -1
- package/dist/lib/components/agent/agent-process-panel.component.d.ts +31 -5
- package/dist/lib/components/agent/agent-process-panel.component.d.ts.map +1 -1
- package/dist/lib/components/agent/agent-process-panel.component.js +71 -15
- package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -1
- package/dist/lib/components/artifact/artifact-share-modal.component.d.ts +65 -9
- package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/artifact/artifact-share-modal.component.js +169 -57
- package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
- package/dist/lib/components/attachment/image-viewer.component.d.ts +77 -11
- package/dist/lib/components/attachment/image-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/attachment/image-viewer.component.js +181 -47
- package/dist/lib/components/attachment/image-viewer.component.js.map +1 -1
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts +129 -19
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +350 -116
- package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -1
- package/dist/lib/components/collection/artifact-create-modal.component.d.ts +60 -8
- package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/artifact-create-modal.component.js +130 -46
- package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-artifact-card.component.d.ts +63 -3
- package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-artifact-card.component.js +113 -19
- package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.d.ts +54 -8
- package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.js +130 -46
- package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.d.ts +70 -10
- package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.js +175 -53
- package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-tree.component.d.ts +89 -9
- package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-tree.component.js +220 -70
- package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
- package/dist/lib/components/collection/collection-view.component.d.ts +89 -11
- package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-view.component.js +154 -40
- package/dist/lib/components/collection/collection-view.component.js.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.d.ts +390 -38
- package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.js +951 -367
- package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
- package/dist/lib/components/composer/ai-composer.component.d.ts +213 -18
- package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -1
- package/dist/lib/components/composer/ai-composer.component.js +388 -44
- package/dist/lib/components/composer/ai-composer.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +12 -1
- package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-agent-picker.component.js +26 -4
- package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +1191 -124
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +2816 -785
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +139 -19
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.js +296 -59
- package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +579 -78
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +2322 -823
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts +42 -4
- package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/pinned-messages-panel.component.js +93 -21
- package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
- package/dist/lib/components/dialogs/input-dialog.component.d.ts +57 -11
- package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/dialogs/input-dialog.component.js +128 -16
- package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -1
- package/dist/lib/components/dialogs/rating-dialog.component.d.ts +68 -10
- package/dist/lib/components/dialogs/rating-dialog.component.d.ts.map +1 -1
- package/dist/lib/components/dialogs/rating-dialog.component.js +151 -27
- package/dist/lib/components/dialogs/rating-dialog.component.js.map +1 -1
- package/dist/lib/components/export/export-modal.component.d.ts +84 -10
- package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
- package/dist/lib/components/export/export-modal.component.js +173 -49
- package/dist/lib/components/export/export-modal.component.js.map +1 -1
- package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts +29 -3
- package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts.map +1 -1
- package/dist/lib/components/global-tasks/global-tasks-panel.component.js +58 -12
- package/dist/lib/components/global-tasks/global-tasks-panel.component.js.map +1 -1
- package/dist/lib/components/library/library-full-view.component.d.ts +57 -8
- package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/library/library-full-view.component.js +119 -35
- package/dist/lib/components/library/library-full-view.component.js.map +1 -1
- package/dist/lib/components/members/members-modal.component.d.ts +76 -10
- package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
- package/dist/lib/components/members/members-modal.component.js +164 -50
- package/dist/lib/components/members/members-modal.component.js.map +1 -1
- package/dist/lib/components/message/actionable-commands.component.d.ts +49 -5
- package/dist/lib/components/message/actionable-commands.component.d.ts.map +1 -1
- package/dist/lib/components/message/actionable-commands.component.js +140 -26
- package/dist/lib/components/message/actionable-commands.component.js.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.d.ts +46 -10
- package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.js +120 -36
- package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +613 -74
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +1390 -422
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +490 -29
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +1088 -244
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +297 -29
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +598 -123
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts +64 -5
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.js +101 -11
- package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
- package/dist/lib/components/notification/activity-indicator.component.d.ts +6 -2
- package/dist/lib/components/notification/activity-indicator.component.d.ts.map +1 -1
- package/dist/lib/components/notification/activity-indicator.component.js +13 -3
- package/dist/lib/components/notification/activity-indicator.component.js.map +1 -1
- package/dist/lib/components/notification/notification-badge.component.d.ts +15 -3
- package/dist/lib/components/notification/notification-badge.component.d.ts.map +1 -1
- package/dist/lib/components/notification/notification-badge.component.js +36 -8
- package/dist/lib/components/notification/notification-badge.component.js.map +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.d.ts +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.js +4 -4
- package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
- package/dist/lib/components/project/project-form-modal.component.d.ts +93 -11
- package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/project/project-form-modal.component.js +348 -87
- package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
- package/dist/lib/components/project/project-selector.component.d.ts +78 -8
- package/dist/lib/components/project/project-selector.component.d.ts.map +1 -1
- package/dist/lib/components/project/project-selector.component.js +177 -46
- package/dist/lib/components/project/project-selector.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +1 -1
- package/dist/lib/components/realtime/realtime-activity-rail.component.js +2 -2
- package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +1 -1
- package/dist/lib/components/realtime/realtime-delegation-card.component.js +2 -2
- package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +2 -2
- package/dist/lib/components/realtime/realtime-session-overlay.component.js +18 -18
- package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +47 -23
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +136 -92
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +2 -2
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js +4 -4
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js +3 -3
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.d.ts +13 -11
- package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.js +29 -25
- package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +3 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +6 -2
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
- package/dist/lib/components/search/search-panel.component.d.ts +133 -22
- package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
- package/dist/lib/components/search/search-panel.component.js +312 -83
- package/dist/lib/components/search/search-panel.component.js.map +1 -1
- package/dist/lib/components/share/share-modal.component.d.ts +69 -9
- package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/share/share-modal.component.js +139 -31
- package/dist/lib/components/share/share-modal.component.js.map +1 -1
- package/dist/lib/components/shared/user-picker.component.d.ts +48 -8
- package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
- package/dist/lib/components/shared/user-picker.component.js +110 -30
- package/dist/lib/components/shared/user-picker.component.js.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +114 -11
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.js +199 -21
- package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
- package/dist/lib/components/sidebar/routines-section.component.d.ts +20 -1
- package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -1
- package/dist/lib/components/sidebar/routines-section.component.js +25 -5
- package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
- package/dist/lib/components/slots/slot-interfaces.d.ts +19 -0
- package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
- package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
- package/dist/lib/components/task/tasks-full-view.component.d.ts +95 -13
- package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/task/tasks-full-view.component.js +223 -75
- package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
- package/dist/lib/components/tasks/task-widget.component.d.ts +46 -6
- package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -1
- package/dist/lib/components/tasks/task-widget.component.js +100 -16
- package/dist/lib/components/tasks/task-widget.component.js.map +1 -1
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +64 -7
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
- package/dist/lib/components/tasks/tasks-dropdown.component.js +127 -27
- package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
- package/dist/lib/components/thread/thread-panel.component.d.ts +66 -8
- package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
- package/dist/lib/components/thread/thread-panel.component.js +146 -36
- package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
- package/dist/lib/components/toast/toast.component.d.ts +11 -1
- package/dist/lib/components/toast/toast.component.d.ts.map +1 -1
- package/dist/lib/components/toast/toast.component.js +25 -5
- package/dist/lib/components/toast/toast.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +385 -42
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +891 -292
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +8 -0
- package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -1
- package/dist/lib/composer-plugins/base-conversation-mention.provider.js +8 -1
- package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -1
- package/dist/lib/directives/chat-slot.directive.d.ts +5 -1
- package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
- package/dist/lib/directives/chat-slot.directive.js.map +1 -1
- package/dist/lib/directives/search-shortcut.directive.d.ts +9 -1
- package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -1
- package/dist/lib/directives/search-shortcut.directive.js +14 -4
- package/dist/lib/directives/search-shortcut.directive.js.map +1 -1
- package/dist/lib/events/chat-events.d.ts +34 -7
- package/dist/lib/events/chat-events.d.ts.map +1 -1
- package/dist/lib/events/chat-events.js +37 -7
- package/dist/lib/events/chat-events.js.map +1 -1
- package/dist/lib/models/agent-turn.model.d.ts +113 -0
- package/dist/lib/models/agent-turn.model.d.ts.map +1 -0
- package/dist/lib/models/agent-turn.model.js +12 -0
- package/dist/lib/models/agent-turn.model.js.map +1 -0
- package/dist/lib/models/collection-view.model.js.map +1 -1
- package/dist/lib/models/conversation-state.model.d.ts +8 -0
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
- package/dist/lib/models/conversation-state.model.js.map +1 -1
- package/dist/lib/models/lazy-artifact-info.d.ts +44 -12
- package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
- package/dist/lib/models/lazy-artifact-info.js +98 -34
- package/dist/lib/models/lazy-artifact-info.js.map +1 -1
- package/dist/lib/services/active-tasks.service.d.ts +30 -4
- package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
- package/dist/lib/services/active-tasks.service.js +71 -19
- package/dist/lib/services/active-tasks.service.js.map +1 -1
- package/dist/lib/services/agent-state.service.d.ts +17 -1
- package/dist/lib/services/agent-state.service.d.ts.map +1 -1
- package/dist/lib/services/agent-state.service.js +48 -16
- package/dist/lib/services/agent-state.service.js.map +1 -1
- package/dist/lib/services/artifact-permission.service.d.ts +39 -0
- package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-permission.service.js +152 -17
- package/dist/lib/services/artifact-permission.service.js.map +1 -1
- package/dist/lib/services/artifact-state.service.d.ts +58 -5
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-state.service.js +135 -35
- package/dist/lib/services/artifact-state.service.js.map +1 -1
- package/dist/lib/services/collection-permission.service.d.ts +28 -0
- package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
- package/dist/lib/services/collection-permission.service.js +88 -32
- package/dist/lib/services/collection-permission.service.js.map +1 -1
- package/dist/lib/services/collection-state.service.d.ts +11 -1
- package/dist/lib/services/collection-state.service.d.ts.map +1 -1
- package/dist/lib/services/collection-state.service.js +25 -5
- package/dist/lib/services/collection-state.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +47 -4
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +85 -20
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-attachment.service.d.ts +17 -0
- package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-attachment.service.js +38 -10
- package/dist/lib/services/conversation-attachment.service.js.map +1 -1
- package/dist/lib/services/conversation-liveness-dom.service.d.ts +42 -0
- package/dist/lib/services/conversation-liveness-dom.service.d.ts.map +1 -0
- package/dist/lib/services/conversation-liveness-dom.service.js +74 -0
- package/dist/lib/services/conversation-liveness-dom.service.js.map +1 -0
- package/dist/lib/services/conversation-streaming.service.d.ts +22 -0
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-streaming.service.js +50 -10
- package/dist/lib/services/conversation-streaming.service.js.map +1 -1
- package/dist/lib/services/data-cache.service.d.ts +31 -0
- package/dist/lib/services/data-cache.service.d.ts.map +1 -1
- package/dist/lib/services/data-cache.service.js +71 -15
- package/dist/lib/services/data-cache.service.js.map +1 -1
- package/dist/lib/services/dialog.service.d.ts +13 -0
- package/dist/lib/services/dialog.service.d.ts.map +1 -1
- package/dist/lib/services/dialog.service.js +25 -5
- package/dist/lib/services/dialog.service.js.map +1 -1
- package/dist/lib/services/export.service.d.ts +2 -0
- package/dist/lib/services/export.service.d.ts.map +1 -1
- package/dist/lib/services/export.service.js +5 -1
- package/dist/lib/services/export.service.js.map +1 -1
- package/dist/lib/services/mention-parser.service.d.ts +10 -0
- package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
- package/dist/lib/services/mention-parser.service.js +25 -5
- package/dist/lib/services/mention-parser.service.js.map +1 -1
- package/dist/lib/services/notification.service.d.ts +54 -6
- package/dist/lib/services/notification.service.d.ts.map +1 -1
- package/dist/lib/services/notification.service.js +123 -27
- package/dist/lib/services/notification.service.js.map +1 -1
- package/dist/lib/services/realtime-audio-recorder.d.ts +4 -4
- package/dist/lib/services/realtime-audio-recorder.js +12 -12
- package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
- package/dist/lib/services/realtime-pcm-wav.d.ts +4 -0
- package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -1
- package/dist/lib/services/realtime-pcm-wav.js +10 -2
- package/dist/lib/services/realtime-pcm-wav.js.map +1 -1
- package/dist/lib/services/search.service.d.ts +42 -9
- package/dist/lib/services/search.service.d.ts.map +1 -1
- package/dist/lib/services/search.service.js +103 -23
- package/dist/lib/services/search.service.js.map +1 -1
- package/dist/lib/services/toast.service.d.ts +19 -1
- package/dist/lib/services/toast.service.d.ts.map +1 -1
- package/dist/lib/services/toast.service.js +45 -9
- package/dist/lib/services/toast.service.js.map +1 -1
- package/dist/lib/services/ui-command-handler.service.d.ts +56 -5
- package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
- package/dist/lib/services/ui-command-handler.service.js +113 -16
- package/dist/lib/services/ui-command-handler.service.js.map +1 -1
- package/dist/lib/utils/agent-artifact-summary.d.ts +2 -2
- package/dist/lib/utils/agent-artifact-summary.js +3 -3
- package/dist/lib/utils/agent-artifact-summary.js.map +1 -1
- package/dist/lib/utils/agent-turn-routing.d.ts +70 -0
- package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -0
- package/dist/lib/utils/agent-turn-routing.js +84 -0
- package/dist/lib/utils/agent-turn-routing.js.map +1 -0
- package/dist/lib/utils/artifact-panel-action.d.ts +15 -4
- package/dist/lib/utils/artifact-panel-action.d.ts.map +1 -1
- package/dist/lib/utils/artifact-panel-action.js +10 -2
- package/dist/lib/utils/artifact-panel-action.js.map +1 -1
- package/dist/lib/utils/decision-routing.d.ts +68 -0
- package/dist/lib/utils/decision-routing.d.ts.map +1 -0
- package/dist/lib/utils/decision-routing.js +101 -0
- package/dist/lib/utils/decision-routing.js.map +1 -0
- package/dist/lib/utils/distinct-artifacts.d.ts +2 -0
- package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
- package/dist/lib/utils/distinct-artifacts.js +5 -1
- package/dist/lib/utils/distinct-artifacts.js.map +1 -1
- package/dist/lib/utils/plan-mode-preference.d.ts +2 -2
- package/dist/lib/utils/plan-mode-preference.js +6 -6
- package/dist/lib/utils/plan-mode-preference.js.map +1 -1
- package/dist/public-api.d.ts +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +8 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +32 -32
|
@@ -111,21 +111,85 @@ export class ArtifactCreateModalComponent extends BaseAngularComponent {
|
|
|
111
111
|
toastService;
|
|
112
112
|
permissionService;
|
|
113
113
|
cdr;
|
|
114
|
-
|
|
114
|
+
IsOpen = false;
|
|
115
|
+
/** @deprecated Use {@link IsOpen}. */
|
|
116
|
+
set isOpen(value) {
|
|
117
|
+
this.IsOpen = value;
|
|
118
|
+
}
|
|
119
|
+
/** @deprecated Use {@link IsOpen}. */
|
|
120
|
+
get isOpen() {
|
|
121
|
+
return this.IsOpen;
|
|
122
|
+
}
|
|
115
123
|
collectionId;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
124
|
+
EnvironmentId;
|
|
125
|
+
/** @deprecated Use {@link EnvironmentId}. */
|
|
126
|
+
set environmentId(value) {
|
|
127
|
+
this.EnvironmentId = value;
|
|
128
|
+
}
|
|
129
|
+
/** @deprecated Use {@link EnvironmentId}. */
|
|
130
|
+
get environmentId() {
|
|
131
|
+
return this.EnvironmentId;
|
|
132
|
+
}
|
|
133
|
+
CurrentUser;
|
|
134
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
135
|
+
set currentUser(value) {
|
|
136
|
+
this.CurrentUser = value;
|
|
137
|
+
}
|
|
138
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
139
|
+
get currentUser() {
|
|
140
|
+
return this.CurrentUser;
|
|
141
|
+
}
|
|
142
|
+
Saved = new EventEmitter();
|
|
143
|
+
/**
|
|
144
|
+
* @deprecated Use {@link Saved}.
|
|
145
|
+
*
|
|
146
|
+
* The same emitter under the old binding name, so a template still binding
|
|
147
|
+
* (saved) keeps working. Must stay AFTER Saved: class fields
|
|
148
|
+
* initialise in order, and the other way round this captures undefined.
|
|
149
|
+
*/
|
|
150
|
+
saved = this.Saved;
|
|
119
151
|
cancelled = new EventEmitter();
|
|
120
|
-
|
|
152
|
+
FormData = {
|
|
121
153
|
name: '',
|
|
122
154
|
description: '',
|
|
123
155
|
content: '',
|
|
124
156
|
selectedType: null
|
|
125
157
|
};
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
158
|
+
/** @deprecated Use {@link FormData}. */
|
|
159
|
+
get formData() {
|
|
160
|
+
return this.FormData;
|
|
161
|
+
}
|
|
162
|
+
/** @deprecated Use {@link FormData}. */
|
|
163
|
+
set formData(value) {
|
|
164
|
+
this.FormData = value;
|
|
165
|
+
}
|
|
166
|
+
ArtifactTypes = [];
|
|
167
|
+
/** @deprecated Use {@link ArtifactTypes}. */
|
|
168
|
+
get artifactTypes() {
|
|
169
|
+
return this.ArtifactTypes;
|
|
170
|
+
}
|
|
171
|
+
/** @deprecated Use {@link ArtifactTypes}. */
|
|
172
|
+
set artifactTypes(value) {
|
|
173
|
+
this.ArtifactTypes = value;
|
|
174
|
+
}
|
|
175
|
+
IsLoadingTypes = false;
|
|
176
|
+
/** @deprecated Use {@link IsLoadingTypes}. */
|
|
177
|
+
get isLoadingTypes() {
|
|
178
|
+
return this.IsLoadingTypes;
|
|
179
|
+
}
|
|
180
|
+
/** @deprecated Use {@link IsLoadingTypes}. */
|
|
181
|
+
set isLoadingTypes(value) {
|
|
182
|
+
this.IsLoadingTypes = value;
|
|
183
|
+
}
|
|
184
|
+
IsSaving = false;
|
|
185
|
+
/** @deprecated Use {@link IsSaving}. */
|
|
186
|
+
get isSaving() {
|
|
187
|
+
return this.IsSaving;
|
|
188
|
+
}
|
|
189
|
+
/** @deprecated Use {@link IsSaving}. */
|
|
190
|
+
set isSaving(value) {
|
|
191
|
+
this.IsSaving = value;
|
|
192
|
+
}
|
|
129
193
|
errorMessage = '';
|
|
130
194
|
constructor(toastService, permissionService, cdr) {
|
|
131
195
|
super();
|
|
@@ -135,18 +199,22 @@ export class ArtifactCreateModalComponent extends BaseAngularComponent {
|
|
|
135
199
|
}
|
|
136
200
|
ngOnChanges(changes) {
|
|
137
201
|
this.permissionService.Provider = this.ProviderToUse;
|
|
138
|
-
if (changes['isOpen'] && this.
|
|
202
|
+
if (changes['isOpen'] && this.IsOpen) {
|
|
139
203
|
this.resetForm();
|
|
140
204
|
this.loadArtifactTypes();
|
|
141
205
|
}
|
|
142
206
|
}
|
|
207
|
+
get CanSave() {
|
|
208
|
+
return this.FormData.name.trim().length > 0 &&
|
|
209
|
+
this.FormData.content.trim().length > 0 &&
|
|
210
|
+
this.FormData.selectedType !== null;
|
|
211
|
+
}
|
|
212
|
+
/** @deprecated Use {@link CanSave}. */
|
|
143
213
|
get canSave() {
|
|
144
|
-
return this.
|
|
145
|
-
this.formData.content.trim().length > 0 &&
|
|
146
|
-
this.formData.selectedType !== null;
|
|
214
|
+
return this.CanSave;
|
|
147
215
|
}
|
|
148
216
|
async loadArtifactTypes() {
|
|
149
|
-
this.
|
|
217
|
+
this.IsLoadingTypes = true;
|
|
150
218
|
try {
|
|
151
219
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
152
220
|
const result = await rv.RunView({
|
|
@@ -155,16 +223,16 @@ export class ArtifactCreateModalComponent extends BaseAngularComponent {
|
|
|
155
223
|
OrderBy: 'Name ASC',
|
|
156
224
|
MaxRows: 1000,
|
|
157
225
|
ResultType: 'entity_object'
|
|
158
|
-
}, this.
|
|
226
|
+
}, this.CurrentUser);
|
|
159
227
|
if (result.Success && result.Results) {
|
|
160
|
-
this.
|
|
228
|
+
this.ArtifactTypes = result.Results;
|
|
161
229
|
// Default to "Text" or first type
|
|
162
|
-
const textType = this.
|
|
230
|
+
const textType = this.ArtifactTypes.find(t => t.Name === 'Text' || t.Name === 'Markdown');
|
|
163
231
|
if (textType) {
|
|
164
|
-
this.
|
|
232
|
+
this.FormData.selectedType = textType;
|
|
165
233
|
}
|
|
166
|
-
else if (this.
|
|
167
|
-
this.
|
|
234
|
+
else if (this.ArtifactTypes.length > 0) {
|
|
235
|
+
this.FormData.selectedType = this.ArtifactTypes[0];
|
|
168
236
|
}
|
|
169
237
|
}
|
|
170
238
|
}
|
|
@@ -173,39 +241,43 @@ export class ArtifactCreateModalComponent extends BaseAngularComponent {
|
|
|
173
241
|
this.toastService.error('Failed to load artifact types');
|
|
174
242
|
}
|
|
175
243
|
finally {
|
|
176
|
-
this.
|
|
244
|
+
this.IsLoadingTypes = false;
|
|
177
245
|
this.cdr.detectChanges(); // zone.js 0.15: async RunView doesn't trigger CD
|
|
178
246
|
}
|
|
179
247
|
}
|
|
248
|
+
OnTypeSelected(typeId) {
|
|
249
|
+
this.FormData.selectedType = this.ArtifactTypes.find(t => UUIDsEqual(t.ID, typeId)) || null;
|
|
250
|
+
}
|
|
251
|
+
/** @deprecated Use {@link OnTypeSelected}. */
|
|
180
252
|
onTypeSelected(typeId) {
|
|
181
|
-
|
|
253
|
+
return this.OnTypeSelected(typeId);
|
|
182
254
|
}
|
|
183
|
-
async
|
|
184
|
-
if (!this.
|
|
255
|
+
async OnSave() {
|
|
256
|
+
if (!this.CanSave)
|
|
185
257
|
return;
|
|
186
|
-
this.
|
|
258
|
+
this.IsSaving = true;
|
|
187
259
|
this.errorMessage = '';
|
|
188
260
|
try {
|
|
189
261
|
// Validate permission to add artifacts to collection
|
|
190
262
|
const md = this.ProviderToUse;
|
|
191
|
-
const collection = await md.GetEntityObject('MJ: Collections', this.
|
|
263
|
+
const collection = await md.GetEntityObject('MJ: Collections', this.CurrentUser);
|
|
192
264
|
await collection.Load(this.collectionId);
|
|
193
265
|
// Check if user has Edit permission on collection
|
|
194
|
-
if (collection.OwnerID && !UUIDsEqual(collection.OwnerID, this.
|
|
195
|
-
const permission = await this.permissionService.checkPermission(this.collectionId, this.
|
|
266
|
+
if (collection.OwnerID && !UUIDsEqual(collection.OwnerID, this.CurrentUser.ID)) {
|
|
267
|
+
const permission = await this.permissionService.checkPermission(this.collectionId, this.CurrentUser.ID, this.CurrentUser);
|
|
196
268
|
if (!permission?.canEdit) {
|
|
197
269
|
this.errorMessage = 'You do not have Edit permission to add artifacts to this collection.';
|
|
198
|
-
this.
|
|
270
|
+
this.IsSaving = false;
|
|
199
271
|
return;
|
|
200
272
|
}
|
|
201
273
|
}
|
|
202
274
|
// Step 1: Create the artifact
|
|
203
|
-
const artifact = await md.GetEntityObject('MJ: Artifacts', this.
|
|
204
|
-
artifact.Name = this.
|
|
205
|
-
artifact.Description = this.
|
|
206
|
-
artifact.TypeID = this.
|
|
207
|
-
artifact.EnvironmentID = this.
|
|
208
|
-
artifact.UserID = this.
|
|
275
|
+
const artifact = await md.GetEntityObject('MJ: Artifacts', this.CurrentUser);
|
|
276
|
+
artifact.Name = this.FormData.name.trim();
|
|
277
|
+
artifact.Description = this.FormData.description.trim() || null;
|
|
278
|
+
artifact.TypeID = this.FormData.selectedType.ID;
|
|
279
|
+
artifact.EnvironmentID = this.EnvironmentId;
|
|
280
|
+
artifact.UserID = this.CurrentUser.ID;
|
|
209
281
|
const artifactSaved = await artifact.Save();
|
|
210
282
|
if (!artifactSaved) {
|
|
211
283
|
this.errorMessage = artifact.LatestResult?.Message || 'Failed to create artifact';
|
|
@@ -213,13 +285,13 @@ export class ArtifactCreateModalComponent extends BaseAngularComponent {
|
|
|
213
285
|
return;
|
|
214
286
|
}
|
|
215
287
|
// Step 2: Create the first version
|
|
216
|
-
const version = await md.GetEntityObject('MJ: Artifact Versions', this.
|
|
288
|
+
const version = await md.GetEntityObject('MJ: Artifact Versions', this.CurrentUser);
|
|
217
289
|
version.ArtifactID = artifact.ID;
|
|
218
290
|
version.VersionNumber = 1;
|
|
219
|
-
version.Content = this.
|
|
220
|
-
version.UserID = this.
|
|
221
|
-
version.Name = this.
|
|
222
|
-
version.Description = this.
|
|
291
|
+
version.Content = this.FormData.content.trim();
|
|
292
|
+
version.UserID = this.CurrentUser.ID;
|
|
293
|
+
version.Name = this.FormData.name.trim(); // Version inherits name
|
|
294
|
+
version.Description = this.FormData.description.trim() || null;
|
|
223
295
|
const versionSaved = await version.Save();
|
|
224
296
|
if (!versionSaved) {
|
|
225
297
|
// Rollback: delete the artifact if version creation fails
|
|
@@ -229,7 +301,7 @@ export class ArtifactCreateModalComponent extends BaseAngularComponent {
|
|
|
229
301
|
return;
|
|
230
302
|
}
|
|
231
303
|
// Step 3: Add to collection
|
|
232
|
-
const collectionArtifact = await md.GetEntityObject('MJ: Collection Artifacts', this.
|
|
304
|
+
const collectionArtifact = await md.GetEntityObject('MJ: Collection Artifacts', this.CurrentUser);
|
|
233
305
|
collectionArtifact.CollectionID = this.collectionId;
|
|
234
306
|
collectionArtifact.ArtifactVersionID = version.ID;
|
|
235
307
|
const collectionLinkSaved = await collectionArtifact.Save();
|
|
@@ -242,7 +314,7 @@ export class ArtifactCreateModalComponent extends BaseAngularComponent {
|
|
|
242
314
|
return;
|
|
243
315
|
}
|
|
244
316
|
this.toastService.success('Artifact created successfully');
|
|
245
|
-
this.
|
|
317
|
+
this.Saved.emit(artifact);
|
|
246
318
|
this.resetForm();
|
|
247
319
|
}
|
|
248
320
|
catch (error) {
|
|
@@ -251,24 +323,28 @@ export class ArtifactCreateModalComponent extends BaseAngularComponent {
|
|
|
251
323
|
this.toastService.error(this.errorMessage);
|
|
252
324
|
}
|
|
253
325
|
finally {
|
|
254
|
-
this.
|
|
326
|
+
this.IsSaving = false;
|
|
255
327
|
}
|
|
256
328
|
}
|
|
329
|
+
/** @deprecated Use {@link OnSave}. */
|
|
330
|
+
async onSave() {
|
|
331
|
+
return this.OnSave();
|
|
332
|
+
}
|
|
257
333
|
onCancel() {
|
|
258
334
|
this.resetForm();
|
|
259
335
|
this.cancelled.emit();
|
|
260
336
|
}
|
|
261
337
|
resetForm() {
|
|
262
|
-
this.
|
|
338
|
+
this.FormData = {
|
|
263
339
|
name: '',
|
|
264
340
|
description: '',
|
|
265
341
|
content: '',
|
|
266
|
-
selectedType: this.
|
|
342
|
+
selectedType: this.ArtifactTypes.length > 0 ? this.ArtifactTypes[0] : null
|
|
267
343
|
};
|
|
268
344
|
this.errorMessage = '';
|
|
269
345
|
}
|
|
270
346
|
static ɵfac = function ArtifactCreateModalComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ArtifactCreateModalComponent)(i0.ɵɵdirectiveInject(i1.ToastService), i0.ɵɵdirectiveInject(i2.CollectionPermissionService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
271
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArtifactCreateModalComponent, selectors: [["mj-artifact-create-modal"]], inputs: { isOpen: "isOpen", collectionId: "collectionId", environmentId: "environmentId", currentUser: "currentUser" }, outputs: { saved: "saved", cancelled: "cancelled" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["nameInput", ""], ["Title", "Create Artifact", 3, "Width", "MinWidth", "Visible"], ["Title", "Create Artifact", 3, "Close", "Width", "MinWidth", "Visible"], [1, "artifact-form"], [1, "form-group"], [1, "form-label"], [1, "required"], ["type", "text", "placeholder", "Artifact name", 1, "k-textbox", "form-control", 3, "ngModelChange", "ngModel"], [1, "form-control", "mj-select", 3, "ngModelChange", "ngModel", "disabled"], ["value", "", "disabled", ""], [3, "value"], ["placeholder", "Optional description", "rows", "2", 1, "k-textarea", "form-control", 3, "ngModelChange", "ngModel"], ["placeholder", "Paste your content here...", "rows", "12", 1, "k-textarea", "form-control", "content-area", 3, "ngModelChange", "ngModel"], [1, "content-hint"], [1, "fas", "fa-info-circle"], [1, "form-error"], ["mjButton", "", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fas", "fa-exclamation-circle"]], template: function ArtifactCreateModalComponent_Template(rf, ctx) { if (rf & 1) {
|
|
347
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArtifactCreateModalComponent, selectors: [["mj-artifact-create-modal"]], inputs: { IsOpen: "IsOpen", isOpen: "isOpen", collectionId: "collectionId", EnvironmentId: "EnvironmentId", environmentId: "environmentId", CurrentUser: "CurrentUser", currentUser: "currentUser" }, outputs: { Saved: "Saved", saved: "saved", cancelled: "cancelled" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["nameInput", ""], ["Title", "Create Artifact", 3, "Width", "MinWidth", "Visible"], ["Title", "Create Artifact", 3, "Close", "Width", "MinWidth", "Visible"], [1, "artifact-form"], [1, "form-group"], [1, "form-label"], [1, "required"], ["type", "text", "placeholder", "Artifact name", 1, "k-textbox", "form-control", 3, "ngModelChange", "ngModel"], [1, "form-control", "mj-select", 3, "ngModelChange", "ngModel", "disabled"], ["value", "", "disabled", ""], [3, "value"], ["placeholder", "Optional description", "rows", "2", 1, "k-textarea", "form-control", 3, "ngModelChange", "ngModel"], ["placeholder", "Paste your content here...", "rows", "12", 1, "k-textarea", "form-control", "content-area", 3, "ngModelChange", "ngModel"], [1, "content-hint"], [1, "fas", "fa-info-circle"], [1, "form-error"], ["mjButton", "", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fas", "fa-exclamation-circle"]], template: function ArtifactCreateModalComponent_Template(rf, ctx) { if (rf & 1) {
|
|
272
348
|
i0.ɵɵconditionalCreate(0, ArtifactCreateModalComponent_Conditional_0_Template, 40, 12, "mj-dialog", 1);
|
|
273
349
|
} if (rf & 2) {
|
|
274
350
|
i0.ɵɵconditional(ctx.isOpen ? 0 : -1);
|
|
@@ -356,14 +432,22 @@ export class ArtifactCreateModalComponent extends BaseAngularComponent {
|
|
|
356
432
|
</mj-dialog>
|
|
357
433
|
}
|
|
358
434
|
`, styles: ["\n .artifact-form {\n padding: 20px 0;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .form-label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .required {\n color: var(--mj-status-error);\n }\n\n .form-control {\n width: 100%;\n }\n\n .content-area {\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace;\n font-size: 13px;\n line-height: 1.5;\n }\n\n .content-hint {\n display: flex;\n align-items: start;\n gap: 8px;\n margin-top: 8px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-brand-primary);\n }\n\n .content-hint i {\n flex-shrink: 0;\n margin-top: 2px;\n }\n\n .form-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .form-error i {\n flex-shrink: 0;\n }\n "] }]
|
|
359
|
-
}], () => [{ type: i1.ToastService }, { type: i2.CollectionPermissionService }, { type: i0.ChangeDetectorRef }], {
|
|
435
|
+
}], () => [{ type: i1.ToastService }, { type: i2.CollectionPermissionService }, { type: i0.ChangeDetectorRef }], { IsOpen: [{
|
|
436
|
+
type: Input
|
|
437
|
+
}], isOpen: [{
|
|
360
438
|
type: Input
|
|
361
439
|
}], collectionId: [{
|
|
362
440
|
type: Input
|
|
441
|
+
}], EnvironmentId: [{
|
|
442
|
+
type: Input
|
|
363
443
|
}], environmentId: [{
|
|
364
444
|
type: Input
|
|
445
|
+
}], CurrentUser: [{
|
|
446
|
+
type: Input
|
|
365
447
|
}], currentUser: [{
|
|
366
448
|
type: Input
|
|
449
|
+
}], Saved: [{
|
|
450
|
+
type: Output
|
|
367
451
|
}], saved: [{
|
|
368
452
|
type: Output
|
|
369
453
|
}], cancelled: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-create-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/collection/artifact-create-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { UserInfo, Metadata, RunView } from '@memberjunction/core';\nimport { MJArtifactEntity, MJArtifactTypeEntity, MJArtifactVersionEntity, MJCollectionEntity } from '@memberjunction/core-entities';\nimport { ToastService } from '../../services/toast.service';\nimport { CollectionPermissionService } from '../../services/collection-permission.service';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Modal for creating new artifacts and adding them to collections\n */\n@Component({\n standalone: false,\n selector: 'mj-artifact-create-modal',\n template: `\n @if (isOpen) {\n <mj-dialog\n Title=\"Create Artifact\"\n (Close)=\"onCancel()\"\n [Width]=\"600\"\n [MinWidth]=\"400\"\n [Visible]=\"true\">\n <div class=\"artifact-form\">\n <div class=\"form-group\">\n <label class=\"form-label\">\n Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n class=\"k-textbox form-control\"\n [(ngModel)]=\"formData.name\"\n placeholder=\"Artifact name\"\n #nameInput>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">\n Type <span class=\"required\">*</span>\n </label>\n <select\n [ngModel]=\"formData.selectedType?.ID || ''\"\n (ngModelChange)=\"onTypeSelected($event)\"\n class=\"form-control mj-select\"\n [disabled]=\"isLoadingTypes\">\n <option value=\"\" disabled>Select a type...</option>\n @for (type of artifactTypes; track type.ID) {\n <option [value]=\"type.ID\">{{ type.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Description</label>\n <textarea\n class=\"k-textarea form-control\"\n [(ngModel)]=\"formData.description\"\n placeholder=\"Optional description\"\n rows=\"2\">\n </textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">\n Content <span class=\"required\">*</span>\n </label>\n <textarea\n class=\"k-textarea form-control content-area\"\n [(ngModel)]=\"formData.content\"\n placeholder=\"Paste your content here...\"\n rows=\"12\">\n </textarea>\n <div class=\"content-hint\">\n <i class=\"fas fa-info-circle\"></i>\n Paste or type the artifact content. The content will be saved as version 1.\n </div>\n </div>\n @if (errorMessage) {\n <div class=\"form-error\">\n <i class=\"fas fa-exclamation-circle\"></i>\n {{ errorMessage }}\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton (click)=\"onCancel()\" [disabled]=\"isSaving\">\n Cancel\n </button>\n <button mjButton\n variant=\"primary\"\n (click)=\"onSave()\"\n [disabled]=\"!canSave || isSaving\">\n {{ isSaving ? 'Creating...' : 'Create Artifact' }}\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n `,\n styles: [`\n .artifact-form {\n padding: 20px 0;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .form-label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .required {\n color: var(--mj-status-error);\n }\n\n .form-control {\n width: 100%;\n }\n\n .content-area {\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace;\n font-size: 13px;\n line-height: 1.5;\n }\n\n .content-hint {\n display: flex;\n align-items: start;\n gap: 8px;\n margin-top: 8px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-brand-primary);\n }\n\n .content-hint i {\n flex-shrink: 0;\n margin-top: 2px;\n }\n\n .form-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .form-error i {\n flex-shrink: 0;\n }\n `]\n})\nexport class ArtifactCreateModalComponent extends BaseAngularComponent implements OnChanges {\n @Input() isOpen: boolean = false;\n @Input() collectionId!: string;\n @Input() environmentId!: string;\n @Input() currentUser!: UserInfo;\n\n @Output() saved = new EventEmitter<MJArtifactEntity>();\n @Output() cancelled = new EventEmitter<void>();\n\n public formData = {\n name: '',\n description: '',\n content: '',\n selectedType: null as MJArtifactTypeEntity | null\n };\n\n public artifactTypes: MJArtifactTypeEntity[] = [];\n public isLoadingTypes: boolean = false;\n public isSaving: boolean = false;\n public errorMessage: string = '';\n\n constructor(\n private toastService: ToastService,\n private permissionService: CollectionPermissionService,\n private cdr: ChangeDetectorRef\n ) {\n super();}\n\n ngOnChanges(changes: SimpleChanges) {\n this.permissionService.Provider = this.ProviderToUse;\n if (changes['isOpen'] && this.isOpen) {\n this.resetForm();\n this.loadArtifactTypes();\n }\n }\n\n get canSave(): boolean {\n return this.formData.name.trim().length > 0 &&\n this.formData.content.trim().length > 0 &&\n this.formData.selectedType !== null;\n }\n\n private async loadArtifactTypes(): Promise<void> {\n this.isLoadingTypes = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJArtifactTypeEntity>(\n {\n EntityName: 'MJ: Artifact Types',\n ExtraFilter: 'IsEnabled=1',\n OrderBy: 'Name ASC',\n MaxRows: 1000,\n ResultType: 'entity_object'\n },\n this.currentUser\n );\n\n if (result.Success && result.Results) {\n this.artifactTypes = result.Results;\n // Default to \"Text\" or first type\n const textType = this.artifactTypes.find(t => t.Name === 'Text' || t.Name === 'Markdown');\n if (textType) {\n this.formData.selectedType = textType;\n } else if (this.artifactTypes.length > 0) {\n this.formData.selectedType = this.artifactTypes[0];\n }\n }\n } catch (error) {\n console.error('Error loading artifact types:', error);\n this.toastService.error('Failed to load artifact types');\n } finally {\n this.isLoadingTypes = false;\n this.cdr.detectChanges(); // zone.js 0.15: async RunView doesn't trigger CD\n }\n }\n\n onTypeSelected(typeId: string): void {\n this.formData.selectedType = this.artifactTypes.find(t => UUIDsEqual(t.ID, typeId)) || null;\n }\n\n async onSave(): Promise<void> {\n if (!this.canSave) return;\n\n this.isSaving = true;\n this.errorMessage = '';\n\n try {\n // Validate permission to add artifacts to collection\n const md = this.ProviderToUse;\n const collection = await md.GetEntityObject<MJCollectionEntity>('MJ: Collections', this.currentUser);\n await collection.Load(this.collectionId);\n\n // Check if user has Edit permission on collection\n if (collection.OwnerID && !UUIDsEqual(collection.OwnerID, this.currentUser.ID)) {\n const permission = await this.permissionService.checkPermission(\n this.collectionId,\n this.currentUser.ID,\n this.currentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission to add artifacts to this collection.';\n this.isSaving = false;\n return;\n }\n }\n\n // Step 1: Create the artifact\n const artifact = await md.GetEntityObject<MJArtifactEntity>('MJ: Artifacts', this.currentUser);\n artifact.Name = this.formData.name.trim();\n artifact.Description = this.formData.description.trim() || null;\n artifact.TypeID = this.formData.selectedType!.ID;\n artifact.EnvironmentID = this.environmentId;\n artifact.UserID = this.currentUser.ID;\n\n const artifactSaved = await artifact.Save();\n if (!artifactSaved) {\n this.errorMessage = artifact.LatestResult?.Message || 'Failed to create artifact';\n this.toastService.error(this.errorMessage);\n return;\n }\n\n // Step 2: Create the first version\n const version = await md.GetEntityObject<MJArtifactVersionEntity>('MJ: Artifact Versions', this.currentUser);\n version.ArtifactID = artifact.ID;\n version.VersionNumber = 1;\n version.Content = this.formData.content.trim();\n version.UserID = this.currentUser.ID;\n version.Name = this.formData.name.trim(); // Version inherits name\n version.Description = this.formData.description.trim() || null;\n\n const versionSaved = await version.Save();\n if (!versionSaved) {\n // Rollback: delete the artifact if version creation fails\n await artifact.Delete();\n this.errorMessage = version.LatestResult?.Message || 'Failed to create artifact version';\n this.toastService.error(this.errorMessage);\n return;\n }\n\n // Step 3: Add to collection\n const collectionArtifact = await md.GetEntityObject('MJ: Collection Artifacts', this.currentUser);\n (collectionArtifact as any).CollectionID = this.collectionId;\n (collectionArtifact as any).ArtifactVersionID = version.ID;\n\n const collectionLinkSaved = await collectionArtifact.Save();\n if (!collectionLinkSaved) {\n // Rollback: delete version and artifact if collection link fails\n await version.Delete();\n await artifact.Delete();\n this.errorMessage = 'Failed to add artifact to collection';\n this.toastService.error(this.errorMessage);\n return;\n }\n\n this.toastService.success('Artifact created successfully');\n this.saved.emit(artifact);\n this.resetForm();\n } catch (error) {\n console.error('Error creating artifact:', error);\n this.errorMessage = 'An unexpected error occurred';\n this.toastService.error(this.errorMessage);\n } finally {\n this.isSaving = false;\n }\n }\n\n onCancel(): void {\n this.resetForm();\n this.cancelled.emit();\n }\n\n private resetForm(): void {\n this.formData = {\n name: '',\n description: '',\n content: '',\n selectedType: this.artifactTypes.length > 0 ? this.artifactTypes[0] : null\n };\n this.errorMessage = '';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"artifact-create-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/collection/artifact-create-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAA+C,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAsB,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAInE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;;;;;;;;IAuCpC,kCAA0B;IAAA,YAAe;IAAA,iBAAS;;;IAA1C,kCAAiB;IAAC,cAAe;IAAf,kCAAe;;;IA6B7C,+BAAwB;IACtB,wBAAyC;IACzC,YACF;IAAA,iBAAM;;;IADJ,eACF;IADE,oDACF;;;;IA7DN,oCAKmB;IAHjB,mMAAS,iBAAU,KAAC;IAMhB,AADF,AADF,8BAA2B,aACD,eACI;IACxB,sBAAK;IAAA,+BAAuB;IAAA,iBAAC;IAC/B,AAD+B,iBAAO,EAC9B;IACR,mCAKa;IAFX,8TAA2B;IAG/B,AANE,iBAKa,EACT;IAEJ,AADF,8BAAwB,gBACI;IACxB,uBAAK;IAAA,gCAAuB;IAAA,kBAAC;IAC/B,AAD+B,iBAAO,EAC9B;IACR,kCAI8B;IAF5B,uNAAiB,6BAAsB,KAAC;IAGxC,kCAA0B;IAAA,iCAAgB;IAAA,iBAAS;IACnD,mHAEC;IAEL,AADE,iBAAS,EACL;IAEJ,AADF,+BAAwB,gBACI;IAAA,4BAAW;IAAA,iBAAQ;IAC7C,qCAIW;IAFT,gVAAkC;IAGpC,6BAAA;IACF,AADE,iBAAW,EACP;IAEJ,AADF,+BAAwB,gBACI;IACxB,0BAAQ;IAAA,gCAAuB;IAAA,kBAAC;IAClC,AADkC,iBAAO,EACjC;IACR,qCAIY;IAFV,wUAA8B;IAGhC,6BAAA;IAAA,iBAAW;IACX,gCAA0B;IACxB,yBAAkC;IAClC,8FACF;IACF,AADE,iBAAM,EACF;IACN,+GAAoB;IAMtB,iBAAM;IAEJ,AADF,0CAAmB,kBAC2C;IAA3C,iMAAS,iBAAU,KAAC;IACnC,yBACF;IAAA,iBAAS;IACT,mCAGoC;IADlC,iMAAS,eAAQ,KAAC;IAElB,aACF;IAEJ,AADE,AADE,iBAAS,EACS,EACV;;;IAtEV,AADA,AADA,2BAAa,iBACG,iBACA;IASV,eAA2B;IAA3B,oDAA2B;IAS3B,eAA2C;IAG3C,AAHA,+GAA2C,mCAGhB;IAE3B,eAEC;IAFD,mCAEC;IAOD,eAAkC;IAAlC,2DAAkC;IAWlC,eAA8B;IAA9B,uDAA8B;IASlC,eAKC;IALD,+CAKC;IAGqC,eAAqB;IAArB,0CAAqB;IAMzD,eAAiC;IAAjC,6DAAiC;IACjC,cACF;IADE,oFACF;;AAjFV;;GAEG;AAqJH,MAAM,OAAO,4BAA6B,SAAQ,oBAAoB;IA8F1D;IACA;IACA;IA/FD,MAAM,GAAY,KAAK,CAAC;IAEjC,sCAAsC;IACtC,IAAa,MAAM,CAAC,KAAc;QAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,sCAAsC;IACtC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACQ,YAAY,CAAU;IACtB,aAAa,CAAU;IAEhC,6CAA6C;IAC7C,IAAa,aAAa,CAAC,KAAa;QACtC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IACD,6CAA6C;IAC7C,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACQ,WAAW,CAAY;IAEhC,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAe;QACtC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,2CAA2C;IAC3C,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAES,KAAK,GAAG,IAAI,YAAY,EAAoB,CAAC;IAEvD;;;;;;OAMG;IACO,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACnB,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;IAExC,QAAQ,GAAG;QAChB,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,IAAmC;KAClD,CAAC;IAEF,wCAAwC;IACxC,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,wCAAwC;IACxC,IAAW,QAAQ,CAAC,KAAK;QACvB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,aAAa,GAA2B,EAAE,CAAC;IAElD,6CAA6C;IAC7C,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,6CAA6C;IAC7C,IAAW,aAAa,CAAC,KAA6B;QACpD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IACM,cAAc,GAAY,KAAK,CAAC;IAEvC,8CAA8C;IAC9C,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IACD,8CAA8C;IAC9C,IAAW,cAAc,CAAC,KAAc;QACtC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IACM,QAAQ,GAAY,KAAK,CAAC;IAEjC,wCAAwC;IACxC,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,wCAAwC;IACxC,IAAW,QAAQ,CAAC,KAAc;QAChC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IACM,YAAY,GAAW,EAAE,CAAC;IAEjC,YACU,YAA0B,EAC1B,iBAA8C,EAC9C,GAAsB;QAEhC,KAAK,EAAE,CAAC;QAJE,iBAAY,GAAZ,YAAY,CAAc;QAC1B,sBAAiB,GAAjB,iBAAiB,CAA6B;QAC9C,QAAG,GAAH,GAAG,CAAmB;IAExB,CAAC;IAET,WAAW,CAAC,OAAsB;QAChC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACrD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;IAC7C,CAAC;IAED,uCAAuC;IACvC,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B;gBACE,UAAU,EAAE,oBAAoB;gBAChC,WAAW,EAAE,aAAa;gBAC1B,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,eAAe;aAC5B,EACD,IAAI,CAAC,WAAW,CACjB,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;gBACpC,kCAAkC;gBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;gBAC1F,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC;gBACxC,CAAC;qBAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC3D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,iDAAiD;QAC7E,CAAC;IACH,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC;IAC9F,CAAC;IAED,8CAA8C;IAC9C,cAAc,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC;YACH,qDAAqD;YACrD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAC9B,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,eAAe,CAAqB,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACrG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEzC,kDAAkD;YAClD,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/E,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAC7D,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,WAAW,CAAC,EAAE,EACnB,IAAI,CAAC,WAAW,CACjB,CAAC;gBAEF,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;oBACzB,IAAI,CAAC,YAAY,GAAG,sEAAsE,CAAC;oBAC3F,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACtB,OAAO;gBACT,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,eAAe,CAAmB,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/F,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1C,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;YAChE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAa,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YAC5C,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAEtC,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,EAAE,OAAO,IAAI,2BAA2B,CAAC;gBAClF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,mCAAmC;YACnC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,eAAe,CAA0B,uBAAuB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7G,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;YAC1B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,wBAAwB;YAClE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;YAE/D,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,0DAA0D;gBAC1D,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,OAAO,IAAI,mCAAmC,CAAC;gBACzF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,4BAA4B;YAC5B,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,0BAA0B,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACjG,kBAA0B,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAC5D,kBAA0B,CAAC,iBAAiB,GAAG,OAAO,CAAC,EAAE,CAAC;YAE3D,MAAM,mBAAmB,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,CAAC;YAC5D,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,iEAAiE;gBACjE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC,YAAY,GAAG,sCAAsC,CAAC;gBAC3D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;YAC3D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,YAAY,GAAG,8BAA8B,CAAC;YACnD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,QAAQ,GAAG;YACd,IAAI,EAAE,EAAE;YACR,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;SAC3E,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;sHA3QU,4BAA4B;6DAA5B,4BAA4B;YAhJrC,sGAAc;;YAAd,qCA6EC;;;iFAmEQ,4BAA4B;cApJxC,SAAS;6BACI,KAAK,YACP,0BAA0B,YAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+EP;;kBAmEF,KAAK;;kBAGL,KAAK;;kBAOL,KAAK;;kBACL,KAAK;;kBAGL,KAAK;;kBAOL,KAAK;;kBAGL,KAAK;;kBAQL,MAAM;;kBASN,MAAM;;kBACN,MAAM;;kFA3CI,4BAA4B","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { UserInfo, Metadata, RunView } from '@memberjunction/core';\nimport { MJArtifactEntity, MJArtifactTypeEntity, MJArtifactVersionEntity, MJCollectionEntity } from '@memberjunction/core-entities';\nimport { ToastService } from '../../services/toast.service';\nimport { CollectionPermissionService } from '../../services/collection-permission.service';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Modal for creating new artifacts and adding them to collections\n */\n@Component({\n standalone: false,\n selector: 'mj-artifact-create-modal',\n template: `\n @if (isOpen) {\n <mj-dialog\n Title=\"Create Artifact\"\n (Close)=\"onCancel()\"\n [Width]=\"600\"\n [MinWidth]=\"400\"\n [Visible]=\"true\">\n <div class=\"artifact-form\">\n <div class=\"form-group\">\n <label class=\"form-label\">\n Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n class=\"k-textbox form-control\"\n [(ngModel)]=\"formData.name\"\n placeholder=\"Artifact name\"\n #nameInput>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">\n Type <span class=\"required\">*</span>\n </label>\n <select\n [ngModel]=\"formData.selectedType?.ID || ''\"\n (ngModelChange)=\"onTypeSelected($event)\"\n class=\"form-control mj-select\"\n [disabled]=\"isLoadingTypes\">\n <option value=\"\" disabled>Select a type...</option>\n @for (type of artifactTypes; track type.ID) {\n <option [value]=\"type.ID\">{{ type.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Description</label>\n <textarea\n class=\"k-textarea form-control\"\n [(ngModel)]=\"formData.description\"\n placeholder=\"Optional description\"\n rows=\"2\">\n </textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">\n Content <span class=\"required\">*</span>\n </label>\n <textarea\n class=\"k-textarea form-control content-area\"\n [(ngModel)]=\"formData.content\"\n placeholder=\"Paste your content here...\"\n rows=\"12\">\n </textarea>\n <div class=\"content-hint\">\n <i class=\"fas fa-info-circle\"></i>\n Paste or type the artifact content. The content will be saved as version 1.\n </div>\n </div>\n @if (errorMessage) {\n <div class=\"form-error\">\n <i class=\"fas fa-exclamation-circle\"></i>\n {{ errorMessage }}\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton (click)=\"onCancel()\" [disabled]=\"isSaving\">\n Cancel\n </button>\n <button mjButton\n variant=\"primary\"\n (click)=\"onSave()\"\n [disabled]=\"!canSave || isSaving\">\n {{ isSaving ? 'Creating...' : 'Create Artifact' }}\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n `,\n styles: [`\n .artifact-form {\n padding: 20px 0;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n .form-label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .required {\n color: var(--mj-status-error);\n }\n\n .form-control {\n width: 100%;\n }\n\n .content-area {\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace;\n font-size: 13px;\n line-height: 1.5;\n }\n\n .content-hint {\n display: flex;\n align-items: start;\n gap: 8px;\n margin-top: 8px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-brand-primary);\n }\n\n .content-hint i {\n flex-shrink: 0;\n margin-top: 2px;\n }\n\n .form-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .form-error i {\n flex-shrink: 0;\n }\n `]\n})\nexport class ArtifactCreateModalComponent extends BaseAngularComponent implements OnChanges {\n @Input() IsOpen: boolean = false;\n\n /** @deprecated Use {@link IsOpen}. */\n @Input() set isOpen(value: boolean) {\n this.IsOpen = value;\n }\n /** @deprecated Use {@link IsOpen}. */\n get isOpen(): boolean {\n return this.IsOpen;\n }\n @Input() collectionId!: string;\n @Input() EnvironmentId!: string;\n\n /** @deprecated Use {@link EnvironmentId}. */\n @Input() set environmentId(value: string) {\n this.EnvironmentId = value;\n }\n /** @deprecated Use {@link EnvironmentId}. */\n get environmentId(): string {\n return this.EnvironmentId;\n }\n @Input() CurrentUser!: UserInfo;\n\n /** @deprecated Use {@link CurrentUser}. */\n @Input() set currentUser(value: UserInfo) {\n this.CurrentUser = value;\n }\n /** @deprecated Use {@link CurrentUser}. */\n get currentUser(): UserInfo {\n return this.CurrentUser;\n }\n\n @Output() Saved = new EventEmitter<MJArtifactEntity>();\n\n /**\n * @deprecated Use {@link Saved}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (saved) keeps working. Must stay AFTER Saved: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() saved = this.Saved;\n @Output() cancelled = new EventEmitter<void>();\n\n public FormData = {\n name: '',\n description: '',\n content: '',\n selectedType: null as MJArtifactTypeEntity | null\n };\n\n /** @deprecated Use {@link FormData}. */\n public get formData() {\n return this.FormData;\n }\n /** @deprecated Use {@link FormData}. */\n public set formData(value) {\n this.FormData = value;\n }\n\n public ArtifactTypes: MJArtifactTypeEntity[] = [];\n\n /** @deprecated Use {@link ArtifactTypes}. */\n public get artifactTypes(): MJArtifactTypeEntity[] {\n return this.ArtifactTypes;\n }\n /** @deprecated Use {@link ArtifactTypes}. */\n public set artifactTypes(value: MJArtifactTypeEntity[]) {\n this.ArtifactTypes = value;\n }\n public IsLoadingTypes: boolean = false;\n\n /** @deprecated Use {@link IsLoadingTypes}. */\n public get isLoadingTypes(): boolean {\n return this.IsLoadingTypes;\n }\n /** @deprecated Use {@link IsLoadingTypes}. */\n public set isLoadingTypes(value: boolean) {\n this.IsLoadingTypes = value;\n }\n public IsSaving: boolean = false;\n\n /** @deprecated Use {@link IsSaving}. */\n public get isSaving(): boolean {\n return this.IsSaving;\n }\n /** @deprecated Use {@link IsSaving}. */\n public set isSaving(value: boolean) {\n this.IsSaving = value;\n }\n public errorMessage: string = '';\n\n constructor(\n private toastService: ToastService,\n private permissionService: CollectionPermissionService,\n private cdr: ChangeDetectorRef\n ) {\n super();}\n\n ngOnChanges(changes: SimpleChanges) {\n this.permissionService.Provider = this.ProviderToUse;\n if (changes['isOpen'] && this.IsOpen) {\n this.resetForm();\n this.loadArtifactTypes();\n }\n }\n\n get CanSave(): boolean {\n return this.FormData.name.trim().length > 0 &&\n this.FormData.content.trim().length > 0 &&\n this.FormData.selectedType !== null;\n }\n\n /** @deprecated Use {@link CanSave}. */\n get canSave(): boolean {\n return this.CanSave;\n }\n\n private async loadArtifactTypes(): Promise<void> {\n this.IsLoadingTypes = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJArtifactTypeEntity>(\n {\n EntityName: 'MJ: Artifact Types',\n ExtraFilter: 'IsEnabled=1',\n OrderBy: 'Name ASC',\n MaxRows: 1000,\n ResultType: 'entity_object'\n },\n this.CurrentUser\n );\n\n if (result.Success && result.Results) {\n this.ArtifactTypes = result.Results;\n // Default to \"Text\" or first type\n const textType = this.ArtifactTypes.find(t => t.Name === 'Text' || t.Name === 'Markdown');\n if (textType) {\n this.FormData.selectedType = textType;\n } else if (this.ArtifactTypes.length > 0) {\n this.FormData.selectedType = this.ArtifactTypes[0];\n }\n }\n } catch (error) {\n console.error('Error loading artifact types:', error);\n this.toastService.error('Failed to load artifact types');\n } finally {\n this.IsLoadingTypes = false;\n this.cdr.detectChanges(); // zone.js 0.15: async RunView doesn't trigger CD\n }\n }\n\n OnTypeSelected(typeId: string): void {\n this.FormData.selectedType = this.ArtifactTypes.find(t => UUIDsEqual(t.ID, typeId)) || null;\n }\n\n /** @deprecated Use {@link OnTypeSelected}. */\n onTypeSelected(typeId: string): void {\n return this.OnTypeSelected(typeId);\n }\n\n async OnSave(): Promise<void> {\n if (!this.CanSave) return;\n\n this.IsSaving = true;\n this.errorMessage = '';\n\n try {\n // Validate permission to add artifacts to collection\n const md = this.ProviderToUse;\n const collection = await md.GetEntityObject<MJCollectionEntity>('MJ: Collections', this.CurrentUser);\n await collection.Load(this.collectionId);\n\n // Check if user has Edit permission on collection\n if (collection.OwnerID && !UUIDsEqual(collection.OwnerID, this.CurrentUser.ID)) {\n const permission = await this.permissionService.checkPermission(\n this.collectionId,\n this.CurrentUser.ID,\n this.CurrentUser\n );\n\n if (!permission?.canEdit) {\n this.errorMessage = 'You do not have Edit permission to add artifacts to this collection.';\n this.IsSaving = false;\n return;\n }\n }\n\n // Step 1: Create the artifact\n const artifact = await md.GetEntityObject<MJArtifactEntity>('MJ: Artifacts', this.CurrentUser);\n artifact.Name = this.FormData.name.trim();\n artifact.Description = this.FormData.description.trim() || null;\n artifact.TypeID = this.FormData.selectedType!.ID;\n artifact.EnvironmentID = this.EnvironmentId;\n artifact.UserID = this.CurrentUser.ID;\n\n const artifactSaved = await artifact.Save();\n if (!artifactSaved) {\n this.errorMessage = artifact.LatestResult?.Message || 'Failed to create artifact';\n this.toastService.error(this.errorMessage);\n return;\n }\n\n // Step 2: Create the first version\n const version = await md.GetEntityObject<MJArtifactVersionEntity>('MJ: Artifact Versions', this.CurrentUser);\n version.ArtifactID = artifact.ID;\n version.VersionNumber = 1;\n version.Content = this.FormData.content.trim();\n version.UserID = this.CurrentUser.ID;\n version.Name = this.FormData.name.trim(); // Version inherits name\n version.Description = this.FormData.description.trim() || null;\n\n const versionSaved = await version.Save();\n if (!versionSaved) {\n // Rollback: delete the artifact if version creation fails\n await artifact.Delete();\n this.errorMessage = version.LatestResult?.Message || 'Failed to create artifact version';\n this.toastService.error(this.errorMessage);\n return;\n }\n\n // Step 3: Add to collection\n const collectionArtifact = await md.GetEntityObject('MJ: Collection Artifacts', this.CurrentUser);\n (collectionArtifact as any).CollectionID = this.collectionId;\n (collectionArtifact as any).ArtifactVersionID = version.ID;\n\n const collectionLinkSaved = await collectionArtifact.Save();\n if (!collectionLinkSaved) {\n // Rollback: delete version and artifact if collection link fails\n await version.Delete();\n await artifact.Delete();\n this.errorMessage = 'Failed to add artifact to collection';\n this.toastService.error(this.errorMessage);\n return;\n }\n\n this.toastService.success('Artifact created successfully');\n this.Saved.emit(artifact);\n this.resetForm();\n } catch (error) {\n console.error('Error creating artifact:', error);\n this.errorMessage = 'An unexpected error occurred';\n this.toastService.error(this.errorMessage);\n } finally {\n this.IsSaving = false;\n }\n }\n\n /** @deprecated Use {@link OnSave}. */\n async onSave(): Promise<void> {\n return this.OnSave();\n }\n\n onCancel(): void {\n this.resetForm();\n this.cancelled.emit();\n }\n\n private resetForm(): void {\n this.FormData = {\n name: '',\n description: '',\n content: '',\n selectedType: this.ArtifactTypes.length > 0 ? this.ArtifactTypes[0] : null\n };\n this.errorMessage = '';\n }\n}\n"]}
|
|
@@ -8,13 +8,61 @@ export declare class CollectionArtifactCardComponent implements OnInit, OnChange
|
|
|
8
8
|
private artifactPermissionService;
|
|
9
9
|
private artifactIconService;
|
|
10
10
|
private cdr;
|
|
11
|
-
|
|
11
|
+
Artifact: MJArtifactEntity;
|
|
12
|
+
/** @deprecated Use {@link Artifact}. */
|
|
13
|
+
set artifact(value: MJArtifactEntity);
|
|
14
|
+
/** @deprecated Use {@link Artifact}. */
|
|
15
|
+
get artifact(): MJArtifactEntity;
|
|
12
16
|
version?: MJArtifactVersionEntity;
|
|
13
|
-
|
|
17
|
+
CurrentUser: UserInfo;
|
|
18
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
19
|
+
set currentUser(value: UserInfo);
|
|
20
|
+
/** @deprecated Use {@link CurrentUser}. */
|
|
21
|
+
get currentUser(): UserInfo;
|
|
22
|
+
Selected: EventEmitter<any>;
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated Use {@link Selected}.
|
|
25
|
+
*
|
|
26
|
+
* The same emitter under the old binding name, so a template still binding
|
|
27
|
+
* (selected) keeps working. Must stay AFTER Selected: class fields
|
|
28
|
+
* initialise in order, and the other way round this captures undefined.
|
|
29
|
+
*/
|
|
14
30
|
selected: EventEmitter<any>;
|
|
31
|
+
Viewed: EventEmitter<any>;
|
|
32
|
+
/**
|
|
33
|
+
* @deprecated Use {@link Viewed}.
|
|
34
|
+
*
|
|
35
|
+
* The same emitter under the old binding name, so a template still binding
|
|
36
|
+
* (viewed) keeps working. Must stay AFTER Viewed: class fields
|
|
37
|
+
* initialise in order, and the other way round this captures undefined.
|
|
38
|
+
*/
|
|
15
39
|
viewed: EventEmitter<any>;
|
|
40
|
+
Shared: EventEmitter<any>;
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated Use {@link Shared}.
|
|
43
|
+
*
|
|
44
|
+
* The same emitter under the old binding name, so a template still binding
|
|
45
|
+
* (shared) keeps working. Must stay AFTER Shared: class fields
|
|
46
|
+
* initialise in order, and the other way round this captures undefined.
|
|
47
|
+
*/
|
|
16
48
|
shared: EventEmitter<any>;
|
|
49
|
+
Edited: EventEmitter<any>;
|
|
50
|
+
/**
|
|
51
|
+
* @deprecated Use {@link Edited}.
|
|
52
|
+
*
|
|
53
|
+
* The same emitter under the old binding name, so a template still binding
|
|
54
|
+
* (edited) keeps working. Must stay AFTER Edited: class fields
|
|
55
|
+
* initialise in order, and the other way round this captures undefined.
|
|
56
|
+
*/
|
|
17
57
|
edited: EventEmitter<any>;
|
|
58
|
+
Removed: EventEmitter<any>;
|
|
59
|
+
/**
|
|
60
|
+
* @deprecated Use {@link Removed}.
|
|
61
|
+
*
|
|
62
|
+
* The same emitter under the old binding name, so a template still binding
|
|
63
|
+
* (removed) keeps working. Must stay AFTER Removed: class fields
|
|
64
|
+
* initialise in order, and the other way round this captures undefined.
|
|
65
|
+
*/
|
|
18
66
|
removed: EventEmitter<any>;
|
|
19
67
|
canShare: boolean;
|
|
20
68
|
canEdit: boolean;
|
|
@@ -26,13 +74,25 @@ export declare class CollectionArtifactCardComponent implements OnInit, OnChange
|
|
|
26
74
|
* Get the icon for this artifact using the centralized icon service.
|
|
27
75
|
* Fallback priority: Plugin icon > Metadata icon > Hardcoded mapping > Generic icon
|
|
28
76
|
*/
|
|
77
|
+
GetIconClass(): string;
|
|
78
|
+
/** @deprecated Use {@link GetIconClass}. */
|
|
29
79
|
getIconClass(): string;
|
|
80
|
+
OnSelect(): void;
|
|
81
|
+
/** @deprecated Use {@link OnSelect}. */
|
|
30
82
|
onSelect(): void;
|
|
83
|
+
OnView(event: Event): void;
|
|
84
|
+
/** @deprecated Use {@link OnView}. */
|
|
31
85
|
onView(event: Event): void;
|
|
86
|
+
OnShare(event: Event): void;
|
|
87
|
+
/** @deprecated Use {@link OnShare}. */
|
|
32
88
|
onShare(event: Event): void;
|
|
89
|
+
OnEdit(event: Event): void;
|
|
90
|
+
/** @deprecated Use {@link OnEdit}. */
|
|
33
91
|
onEdit(event: Event): void;
|
|
92
|
+
OnRemove(event: Event): void;
|
|
93
|
+
/** @deprecated Use {@link OnRemove}. */
|
|
34
94
|
onRemove(event: Event): void;
|
|
35
95
|
static ɵfac: i0.ɵɵFactoryDeclaration<CollectionArtifactCardComponent, never>;
|
|
36
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CollectionArtifactCardComponent, "mj-collection-artifact-card", never, { "artifact": { "alias": "artifact"; "required": false; }; "version": { "alias": "version"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, { "selected": "selected"; "viewed": "viewed"; "shared": "shared"; "edited": "edited"; "removed": "removed"; }, never, never, false, never>;
|
|
96
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CollectionArtifactCardComponent, "mj-collection-artifact-card", never, { "Artifact": { "alias": "Artifact"; "required": false; }; "artifact": { "alias": "artifact"; "required": false; }; "version": { "alias": "version"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, { "Selected": "Selected"; "selected": "selected"; "Viewed": "Viewed"; "viewed": "viewed"; "Shared": "Shared"; "shared": "shared"; "Edited": "Edited"; "edited": "edited"; "Removed": "Removed"; "removed": "removed"; }, never, never, false, never>;
|
|
37
97
|
}
|
|
38
98
|
//# sourceMappingURL=collection-artifact-card.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-artifact-card.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-artifact-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;;AAEnE,qBA0Ea,+BAAgC,YAAW,MAAM,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"collection-artifact-card.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collection-artifact-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;;AAEnE,qBA0Ea,+BAAgC,YAAW,MAAM,EAAE,SAAS;IA8ErE,OAAO,CAAC,yBAAyB;IACjC,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,GAAG;IA/EJ,QAAQ,EAAG,gBAAgB,CAAC;IAErC,wCAAwC;IACxC,IAAa,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAE5C;IACD,wCAAwC;IACxC,IAAI,QAAQ,IAAI,gBAAgB,CAE/B;IACQ,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,WAAW,EAAG,QAAQ,CAAC;IAEhC,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAK,EAAE,QAAQ,EAEvC;IACD,2CAA2C;IAC3C,IAAI,WAAW,IAAI,QAAQ,CAE1B;IAES,QAAQ,oBAA2B;IAE7C;;;;;;OAMG;IACO,QAAQ,oBAAiB;IACzB,MAAM,oBAA2B;IAE3C;;;;;;OAMG;IACO,MAAM,oBAAe;IACrB,MAAM,oBAA2B;IAE3C;;;;;;OAMG;IACO,MAAM,oBAAe;IACrB,MAAM,oBAA2B;IAE3C;;;;;;OAMG;IACO,MAAM,oBAAe;IACrB,OAAO,oBAA2B;IAE5C;;;;;;OAMG;IACO,OAAO,oBAAgB;IAEjC,QAAQ,EAAE,OAAO,CAAS;IAC1B,OAAO,EAAE,OAAO,CAAS;gBAGf,yBAAyB,EAAE,yBAAyB,EACpD,mBAAmB,EAAE,mBAAmB,EACxC,GAAG,EAAE,iBAAiB;IAG1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAM1C,eAAe;IAwB7B;;;OAGG;IACH,YAAY,IAAI,MAAM;IAItB,4CAA4C;IAC5C,YAAY,IAAI,MAAM;IAItB,QAAQ,IAAI,IAAI;IAIhB,wCAAwC;IACxC,QAAQ,IAAI,IAAI;IAIhB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK1B,sCAAsC;IACtC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI1B,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK3B,uCAAuC;IACvC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI3B,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK1B,sCAAsC;IACtC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI1B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK5B,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;yCA/KjB,+BAA+B;2CAA/B,+BAA+B;CAkL3C"}
|