@memberjunction/ng-conversations 6.2.0-edge.0 → 6.2.0-edge.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/README.md +35 -2
  2. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +19 -3
  3. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
  4. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +39 -7
  5. package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
  6. package/dist/lib/components/agent/active-agent-indicator.component.d.ts +74 -6
  7. package/dist/lib/components/agent/active-agent-indicator.component.d.ts.map +1 -1
  8. package/dist/lib/components/agent/active-agent-indicator.component.js +111 -21
  9. package/dist/lib/components/agent/active-agent-indicator.component.js.map +1 -1
  10. package/dist/lib/components/agent/agent-process-panel.component.d.ts +31 -5
  11. package/dist/lib/components/agent/agent-process-panel.component.d.ts.map +1 -1
  12. package/dist/lib/components/agent/agent-process-panel.component.js +71 -15
  13. package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -1
  14. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts +65 -9
  15. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
  16. package/dist/lib/components/artifact/artifact-share-modal.component.js +169 -57
  17. package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
  18. package/dist/lib/components/attachment/image-viewer.component.d.ts +77 -11
  19. package/dist/lib/components/attachment/image-viewer.component.d.ts.map +1 -1
  20. package/dist/lib/components/attachment/image-viewer.component.js +181 -47
  21. package/dist/lib/components/attachment/image-viewer.component.js.map +1 -1
  22. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts +129 -19
  23. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -1
  24. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +350 -116
  25. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -1
  26. package/dist/lib/components/collection/artifact-create-modal.component.d.ts +60 -8
  27. package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -1
  28. package/dist/lib/components/collection/artifact-create-modal.component.js +130 -46
  29. package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -1
  30. package/dist/lib/components/collection/collection-artifact-card.component.d.ts +63 -3
  31. package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -1
  32. package/dist/lib/components/collection/collection-artifact-card.component.js +113 -19
  33. package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -1
  34. package/dist/lib/components/collection/collection-form-modal.component.d.ts +54 -8
  35. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  36. package/dist/lib/components/collection/collection-form-modal.component.js +130 -46
  37. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  38. package/dist/lib/components/collection/collection-share-modal.component.d.ts +70 -10
  39. package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
  40. package/dist/lib/components/collection/collection-share-modal.component.js +175 -53
  41. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
  42. package/dist/lib/components/collection/collection-tree.component.d.ts +89 -9
  43. package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
  44. package/dist/lib/components/collection/collection-tree.component.js +220 -70
  45. package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
  46. package/dist/lib/components/collection/collection-view.component.d.ts +89 -11
  47. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  48. package/dist/lib/components/collection/collection-view.component.js +154 -40
  49. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  50. package/dist/lib/components/collection/collections-full-view.component.d.ts +390 -38
  51. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  52. package/dist/lib/components/collection/collections-full-view.component.js +951 -367
  53. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  54. package/dist/lib/components/composer/ai-composer.component.d.ts +213 -18
  55. package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -1
  56. package/dist/lib/components/composer/ai-composer.component.js +388 -44
  57. package/dist/lib/components/composer/ai-composer.component.js.map +1 -1
  58. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +12 -1
  59. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts.map +1 -1
  60. package/dist/lib/components/conversation/conversation-agent-picker.component.js +26 -4
  61. package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -1
  62. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +1090 -123
  63. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  64. package/dist/lib/components/conversation/conversation-chat-area.component.js +2399 -706
  65. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  66. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +139 -19
  67. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
  68. package/dist/lib/components/conversation/conversation-empty-state.component.js +296 -59
  69. package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
  70. package/dist/lib/components/conversation/conversation-list.component.d.ts +579 -78
  71. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
  72. package/dist/lib/components/conversation/conversation-list.component.js +2322 -823
  73. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  74. package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts +40 -4
  75. package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts.map +1 -1
  76. package/dist/lib/components/conversation/pinned-messages-panel.component.js +72 -14
  77. package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
  78. package/dist/lib/components/dialogs/input-dialog.component.d.ts +57 -11
  79. package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -1
  80. package/dist/lib/components/dialogs/input-dialog.component.js +128 -16
  81. package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -1
  82. package/dist/lib/components/dialogs/rating-dialog.component.d.ts +68 -10
  83. package/dist/lib/components/dialogs/rating-dialog.component.d.ts.map +1 -1
  84. package/dist/lib/components/dialogs/rating-dialog.component.js +151 -27
  85. package/dist/lib/components/dialogs/rating-dialog.component.js.map +1 -1
  86. package/dist/lib/components/export/export-modal.component.d.ts +84 -10
  87. package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
  88. package/dist/lib/components/export/export-modal.component.js +173 -49
  89. package/dist/lib/components/export/export-modal.component.js.map +1 -1
  90. package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts +29 -3
  91. package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts.map +1 -1
  92. package/dist/lib/components/global-tasks/global-tasks-panel.component.js +58 -12
  93. package/dist/lib/components/global-tasks/global-tasks-panel.component.js.map +1 -1
  94. package/dist/lib/components/library/library-full-view.component.d.ts +57 -8
  95. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
  96. package/dist/lib/components/library/library-full-view.component.js +119 -35
  97. package/dist/lib/components/library/library-full-view.component.js.map +1 -1
  98. package/dist/lib/components/members/members-modal.component.d.ts +76 -10
  99. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
  100. package/dist/lib/components/members/members-modal.component.js +164 -50
  101. package/dist/lib/components/members/members-modal.component.js.map +1 -1
  102. package/dist/lib/components/message/actionable-commands.component.d.ts +37 -5
  103. package/dist/lib/components/message/actionable-commands.component.d.ts.map +1 -1
  104. package/dist/lib/components/message/actionable-commands.component.js +82 -16
  105. package/dist/lib/components/message/actionable-commands.component.js.map +1 -1
  106. package/dist/lib/components/message/conversation-message-rating.component.d.ts +46 -10
  107. package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
  108. package/dist/lib/components/message/conversation-message-rating.component.js +120 -36
  109. package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
  110. package/dist/lib/components/message/message-input.component.d.ts +549 -74
  111. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  112. package/dist/lib/components/message/message-input.component.js +1250 -421
  113. package/dist/lib/components/message/message-input.component.js.map +1 -1
  114. package/dist/lib/components/message/message-item.component.d.ts +411 -29
  115. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  116. package/dist/lib/components/message/message-item.component.js +896 -222
  117. package/dist/lib/components/message/message-item.component.js.map +1 -1
  118. package/dist/lib/components/message/message-list.component.d.ts +288 -29
  119. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  120. package/dist/lib/components/message/message-list.component.js +561 -123
  121. package/dist/lib/components/message/message-list.component.js.map +1 -1
  122. package/dist/lib/components/navigation/conversation-navigation.component.d.ts +64 -5
  123. package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
  124. package/dist/lib/components/navigation/conversation-navigation.component.js +101 -11
  125. package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
  126. package/dist/lib/components/notification/activity-indicator.component.d.ts +6 -2
  127. package/dist/lib/components/notification/activity-indicator.component.d.ts.map +1 -1
  128. package/dist/lib/components/notification/activity-indicator.component.js +13 -3
  129. package/dist/lib/components/notification/activity-indicator.component.js.map +1 -1
  130. package/dist/lib/components/notification/notification-badge.component.d.ts +15 -3
  131. package/dist/lib/components/notification/notification-badge.component.d.ts.map +1 -1
  132. package/dist/lib/components/notification/notification-badge.component.js +36 -8
  133. package/dist/lib/components/notification/notification-badge.component.js.map +1 -1
  134. package/dist/lib/components/overlay/chat-overlay.component.d.ts +1 -1
  135. package/dist/lib/components/overlay/chat-overlay.component.js +4 -4
  136. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  137. package/dist/lib/components/project/project-form-modal.component.d.ts +93 -11
  138. package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -1
  139. package/dist/lib/components/project/project-form-modal.component.js +348 -87
  140. package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
  141. package/dist/lib/components/project/project-selector.component.d.ts +78 -8
  142. package/dist/lib/components/project/project-selector.component.d.ts.map +1 -1
  143. package/dist/lib/components/project/project-selector.component.js +177 -46
  144. package/dist/lib/components/project/project-selector.component.js.map +1 -1
  145. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +1 -1
  146. package/dist/lib/components/realtime/realtime-activity-rail.component.js +2 -2
  147. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  148. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +1 -1
  149. package/dist/lib/components/realtime/realtime-delegation-card.component.js +2 -2
  150. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  151. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +2 -2
  152. package/dist/lib/components/realtime/realtime-session-overlay.component.js +18 -18
  153. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  154. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +47 -23
  155. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -1
  156. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +136 -92
  157. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -1
  158. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +2 -2
  159. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +4 -4
  160. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  161. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +1 -1
  162. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +3 -3
  163. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  164. package/dist/lib/components/realtime/realtime-ui-config.d.ts +13 -11
  165. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
  166. package/dist/lib/components/realtime/realtime-ui-config.js +29 -25
  167. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
  168. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +3 -1
  169. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
  170. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +6 -2
  171. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
  172. package/dist/lib/components/search/search-panel.component.d.ts +133 -22
  173. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  174. package/dist/lib/components/search/search-panel.component.js +312 -83
  175. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  176. package/dist/lib/components/share/share-modal.component.d.ts +69 -9
  177. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  178. package/dist/lib/components/share/share-modal.component.js +139 -31
  179. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  180. package/dist/lib/components/shared/user-picker.component.d.ts +48 -8
  181. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  182. package/dist/lib/components/shared/user-picker.component.js +110 -30
  183. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  184. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +114 -11
  185. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
  186. package/dist/lib/components/sidebar/conversation-sidebar.component.js +199 -21
  187. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
  188. package/dist/lib/components/sidebar/routines-section.component.d.ts +20 -1
  189. package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -1
  190. package/dist/lib/components/sidebar/routines-section.component.js +25 -5
  191. package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
  192. package/dist/lib/components/slots/slot-interfaces.d.ts +19 -0
  193. package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
  194. package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
  195. package/dist/lib/components/task/tasks-full-view.component.d.ts +95 -13
  196. package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
  197. package/dist/lib/components/task/tasks-full-view.component.js +223 -75
  198. package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
  199. package/dist/lib/components/tasks/task-widget.component.d.ts +46 -6
  200. package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -1
  201. package/dist/lib/components/tasks/task-widget.component.js +100 -16
  202. package/dist/lib/components/tasks/task-widget.component.js.map +1 -1
  203. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +64 -7
  204. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  205. package/dist/lib/components/tasks/tasks-dropdown.component.js +127 -27
  206. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  207. package/dist/lib/components/thread/thread-panel.component.d.ts +66 -8
  208. package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
  209. package/dist/lib/components/thread/thread-panel.component.js +146 -36
  210. package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
  211. package/dist/lib/components/toast/toast.component.d.ts +11 -1
  212. package/dist/lib/components/toast/toast.component.d.ts.map +1 -1
  213. package/dist/lib/components/toast/toast.component.js +25 -5
  214. package/dist/lib/components/toast/toast.component.js.map +1 -1
  215. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +385 -42
  216. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  217. package/dist/lib/components/workspace/conversation-workspace.component.js +887 -291
  218. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  219. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +8 -0
  220. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -1
  221. package/dist/lib/composer-plugins/base-conversation-mention.provider.js +8 -1
  222. package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -1
  223. package/dist/lib/directives/chat-slot.directive.d.ts +5 -1
  224. package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
  225. package/dist/lib/directives/chat-slot.directive.js.map +1 -1
  226. package/dist/lib/directives/search-shortcut.directive.d.ts +9 -1
  227. package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -1
  228. package/dist/lib/directives/search-shortcut.directive.js +14 -4
  229. package/dist/lib/directives/search-shortcut.directive.js.map +1 -1
  230. package/dist/lib/events/chat-events.d.ts +34 -7
  231. package/dist/lib/events/chat-events.d.ts.map +1 -1
  232. package/dist/lib/events/chat-events.js +37 -7
  233. package/dist/lib/events/chat-events.js.map +1 -1
  234. package/dist/lib/models/agent-turn.model.d.ts +103 -0
  235. package/dist/lib/models/agent-turn.model.d.ts.map +1 -0
  236. package/dist/lib/models/agent-turn.model.js +12 -0
  237. package/dist/lib/models/agent-turn.model.js.map +1 -0
  238. package/dist/lib/models/collection-view.model.js.map +1 -1
  239. package/dist/lib/models/conversation-state.model.d.ts +8 -0
  240. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  241. package/dist/lib/models/conversation-state.model.js.map +1 -1
  242. package/dist/lib/models/lazy-artifact-info.d.ts +44 -12
  243. package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
  244. package/dist/lib/models/lazy-artifact-info.js +98 -34
  245. package/dist/lib/models/lazy-artifact-info.js.map +1 -1
  246. package/dist/lib/services/active-tasks.service.d.ts +30 -4
  247. package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
  248. package/dist/lib/services/active-tasks.service.js +71 -19
  249. package/dist/lib/services/active-tasks.service.js.map +1 -1
  250. package/dist/lib/services/agent-state.service.d.ts +17 -1
  251. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  252. package/dist/lib/services/agent-state.service.js +48 -16
  253. package/dist/lib/services/agent-state.service.js.map +1 -1
  254. package/dist/lib/services/artifact-permission.service.d.ts +39 -0
  255. package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
  256. package/dist/lib/services/artifact-permission.service.js +152 -17
  257. package/dist/lib/services/artifact-permission.service.js.map +1 -1
  258. package/dist/lib/services/artifact-state.service.d.ts +58 -5
  259. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  260. package/dist/lib/services/artifact-state.service.js +135 -35
  261. package/dist/lib/services/artifact-state.service.js.map +1 -1
  262. package/dist/lib/services/collection-permission.service.d.ts +28 -0
  263. package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
  264. package/dist/lib/services/collection-permission.service.js +88 -32
  265. package/dist/lib/services/collection-permission.service.js.map +1 -1
  266. package/dist/lib/services/collection-state.service.d.ts +11 -1
  267. package/dist/lib/services/collection-state.service.d.ts.map +1 -1
  268. package/dist/lib/services/collection-state.service.js +25 -5
  269. package/dist/lib/services/collection-state.service.js.map +1 -1
  270. package/dist/lib/services/conversation-agent.service.d.ts +26 -4
  271. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  272. package/dist/lib/services/conversation-agent.service.js +57 -18
  273. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  274. package/dist/lib/services/conversation-attachment.service.d.ts +17 -0
  275. package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
  276. package/dist/lib/services/conversation-attachment.service.js +38 -10
  277. package/dist/lib/services/conversation-attachment.service.js.map +1 -1
  278. package/dist/lib/services/conversation-streaming.service.d.ts +22 -0
  279. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
  280. package/dist/lib/services/conversation-streaming.service.js +50 -10
  281. package/dist/lib/services/conversation-streaming.service.js.map +1 -1
  282. package/dist/lib/services/data-cache.service.d.ts +31 -0
  283. package/dist/lib/services/data-cache.service.d.ts.map +1 -1
  284. package/dist/lib/services/data-cache.service.js +71 -15
  285. package/dist/lib/services/data-cache.service.js.map +1 -1
  286. package/dist/lib/services/dialog.service.d.ts +13 -0
  287. package/dist/lib/services/dialog.service.d.ts.map +1 -1
  288. package/dist/lib/services/dialog.service.js +25 -5
  289. package/dist/lib/services/dialog.service.js.map +1 -1
  290. package/dist/lib/services/export.service.d.ts +2 -0
  291. package/dist/lib/services/export.service.d.ts.map +1 -1
  292. package/dist/lib/services/export.service.js +5 -1
  293. package/dist/lib/services/export.service.js.map +1 -1
  294. package/dist/lib/services/mention-parser.service.d.ts +10 -0
  295. package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
  296. package/dist/lib/services/mention-parser.service.js +25 -5
  297. package/dist/lib/services/mention-parser.service.js.map +1 -1
  298. package/dist/lib/services/notification.service.d.ts +54 -6
  299. package/dist/lib/services/notification.service.d.ts.map +1 -1
  300. package/dist/lib/services/notification.service.js +123 -27
  301. package/dist/lib/services/notification.service.js.map +1 -1
  302. package/dist/lib/services/realtime-audio-recorder.d.ts +4 -4
  303. package/dist/lib/services/realtime-audio-recorder.js +12 -12
  304. package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
  305. package/dist/lib/services/realtime-pcm-wav.d.ts +4 -0
  306. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -1
  307. package/dist/lib/services/realtime-pcm-wav.js +10 -2
  308. package/dist/lib/services/realtime-pcm-wav.js.map +1 -1
  309. package/dist/lib/services/search.service.d.ts +42 -9
  310. package/dist/lib/services/search.service.d.ts.map +1 -1
  311. package/dist/lib/services/search.service.js +103 -23
  312. package/dist/lib/services/search.service.js.map +1 -1
  313. package/dist/lib/services/toast.service.d.ts +19 -1
  314. package/dist/lib/services/toast.service.d.ts.map +1 -1
  315. package/dist/lib/services/toast.service.js +45 -9
  316. package/dist/lib/services/toast.service.js.map +1 -1
  317. package/dist/lib/services/ui-command-handler.service.d.ts +16 -2
  318. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  319. package/dist/lib/services/ui-command-handler.service.js +36 -8
  320. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  321. package/dist/lib/utils/agent-artifact-summary.d.ts +2 -2
  322. package/dist/lib/utils/agent-artifact-summary.js +3 -3
  323. package/dist/lib/utils/agent-artifact-summary.js.map +1 -1
  324. package/dist/lib/utils/agent-turn-routing.d.ts +69 -0
  325. package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -0
  326. package/dist/lib/utils/agent-turn-routing.js +96 -0
  327. package/dist/lib/utils/agent-turn-routing.js.map +1 -0
  328. package/dist/lib/utils/artifact-panel-action.d.ts +15 -4
  329. package/dist/lib/utils/artifact-panel-action.d.ts.map +1 -1
  330. package/dist/lib/utils/artifact-panel-action.js +10 -2
  331. package/dist/lib/utils/artifact-panel-action.js.map +1 -1
  332. package/dist/lib/utils/distinct-artifacts.d.ts +2 -0
  333. package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
  334. package/dist/lib/utils/distinct-artifacts.js +5 -1
  335. package/dist/lib/utils/distinct-artifacts.js.map +1 -1
  336. package/dist/lib/utils/plan-mode-preference.d.ts +2 -2
  337. package/dist/lib/utils/plan-mode-preference.js +6 -6
  338. package/dist/lib/utils/plan-mode-preference.js.map +1 -1
  339. package/dist/public-api.d.ts +3 -0
  340. package/dist/public-api.d.ts.map +1 -1
  341. package/dist/public-api.js +3 -0
  342. package/dist/public-api.js.map +1 -1
  343. package/package.json +32 -32
@@ -7,19 +7,55 @@ export declare class PinnedMessagesPanelComponent {
7
7
  * a stable reference between real changes is what keeps this input from re-firing every
8
8
  * change detection cycle. The panel renders it; it never mutates it.
9
9
  */
10
- pinnedMessages: readonly MJConversationDetailEntity[];
10
+ PinnedMessages: readonly MJConversationDetailEntity[];
11
+ /** @deprecated Use {@link PinnedMessages}. */
12
+ set pinnedMessages(value: readonly MJConversationDetailEntity[]);
13
+ /** @deprecated Use {@link PinnedMessages}. */
14
+ get pinnedMessages(): readonly MJConversationDetailEntity[];
11
15
  /**
12
16
  * True during the panel's first open, while its rows are being fetched.
13
17
  *
14
18
  * Pins are no longer loaded during conversation open — the open path reads only a count —
15
19
  * so the panel can now render before its contents exist.
16
20
  */
17
- isLoading: boolean;
21
+ IsLoading: boolean;
22
+ /** @deprecated Use {@link IsLoading}. */
23
+ set isLoading(value: PinnedMessagesPanelComponent['IsLoading']);
24
+ /** @deprecated Use {@link IsLoading}. */
25
+ get isLoading(): PinnedMessagesPanelComponent['IsLoading'];
26
+ Closed: EventEmitter<void>;
27
+ /**
28
+ * @deprecated Use {@link Closed}.
29
+ *
30
+ * The same emitter under the old binding name, so a template still binding
31
+ * (closed) keeps working. Must stay AFTER Closed: class fields
32
+ * initialise in order, and the other way round this captures undefined.
33
+ */
18
34
  closed: EventEmitter<void>;
35
+ JumpRequested: EventEmitter<string>;
36
+ /**
37
+ * @deprecated Use {@link JumpRequested}.
38
+ *
39
+ * The same emitter under the old binding name, so a template still binding
40
+ * (jumpRequested) keeps working. Must stay AFTER JumpRequested: class fields
41
+ * initialise in order, and the other way round this captures undefined.
42
+ */
19
43
  jumpRequested: EventEmitter<string>;
44
+ UnpinRequested: EventEmitter<MJConversationDetailEntity>;
45
+ /**
46
+ * @deprecated Use {@link UnpinRequested}.
47
+ *
48
+ * The same emitter under the old binding name, so a template still binding
49
+ * (unpinRequested) keeps working. Must stay AFTER UnpinRequested: class fields
50
+ * initialise in order, and the other way round this captures undefined.
51
+ */
20
52
  unpinRequested: EventEmitter<MJConversationDetailEntity>;
21
53
  /** IDs currently being removed (for fade-out animation) */
22
- unpinningIds: Set<string>;
54
+ UnpinningIds: Set<string>;
55
+ /** @deprecated Use {@link UnpinningIds}. */
56
+ get unpinningIds(): Set<string>;
57
+ /** @deprecated Use {@link UnpinningIds}. */
58
+ set unpinningIds(value: Set<string>);
23
59
  Close(): void;
24
60
  OnJump(message: MJConversationDetailEntity): void;
25
61
  OnUnpin(message: MJConversationDetailEntity): void;
@@ -31,6 +67,6 @@ export declare class PinnedMessagesPanelComponent {
31
67
  /** Display name for the message sender */
32
68
  GetSenderName(message: MJConversationDetailEntity): string;
33
69
  static ɵfac: i0.ɵɵFactoryDeclaration<PinnedMessagesPanelComponent, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<PinnedMessagesPanelComponent, "mj-pinned-messages-panel", never, { "pinnedMessages": { "alias": "pinnedMessages"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; }, { "closed": "closed"; "jumpRequested": "jumpRequested"; "unpinRequested": "unpinRequested"; }, never, never, false, never>;
70
+ static ɵcmp: i0.ɵɵComponentDeclaration<PinnedMessagesPanelComponent, "mj-pinned-messages-panel", never, { "PinnedMessages": { "alias": "PinnedMessages"; "required": false; }; "pinnedMessages": { "alias": "pinnedMessages"; "required": false; }; "IsLoading": { "alias": "IsLoading"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; }, { "Closed": "Closed"; "closed": "closed"; "JumpRequested": "JumpRequested"; "jumpRequested": "jumpRequested"; "UnpinRequested": "UnpinRequested"; "unpinRequested": "unpinRequested"; }, never, never, false, never>;
35
71
  }
36
72
  //# sourceMappingURL=pinned-messages-panel.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pinned-messages-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/pinned-messages-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;;AAE3E,qBAMa,4BAA4B;IACvC;;;;OAIG;IACa,cAAc,EAAE,SAAS,0BAA0B,EAAE,CAAM;IAE3E;;;;;OAKG;IACa,SAAS,UAAS;IAEjB,MAAM,qBAA4B;IAClC,aAAa,uBAA8B;IAC3C,cAAc,2CAAkD;IAEjF,2DAA2D;IACpD,YAAY,cAAqB;IAEjC,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAIjD,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IASlD,WAAW,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO;IAIhE,qDAAqD;IAC9C,cAAc,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;IAgBlE,wCAAwC;IACjC,eAAe,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;IAenE,0CAA0C;IACnC,aAAa,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;yCA9EtD,4BAA4B;2CAA5B,4BAA4B;CAkFxC"}
1
+ {"version":3,"file":"pinned-messages-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/pinned-messages-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;;AAE3E,qBAMa,4BAA4B;IACvC;;;;OAIG;IACa,cAAc,EAAE,SAAS,0BAA0B,EAAE,CAAM;IAE3E,8CAA8C;IAC9C,IAAoB,cAAc,CAAC,KAAK,EAAE,SAAS,0BAA0B,EAAE,EAE9E;IACD,8CAA8C;IAC9C,IAAW,cAAc,IAAI,SAAS,0BAA0B,EAAE,CAEjE;IAED;;;;;OAKG;IACa,SAAS,UAAS;IAElC,yCAAyC;IACzC,IAAoB,SAAS,CAAC,KAAK,EAAE,4BAA4B,CAAC,WAAW,CAAC,EAE7E;IACD,yCAAyC;IACzC,IAAW,SAAS,IAAI,4BAA4B,CAAC,WAAW,CAAC,CAEhE;IAEgB,MAAM,qBAA4B;IAEnD;;;;;;OAMG;IACc,MAAM,qBAAe;IACrB,aAAa,uBAA8B;IAE5D;;;;;;OAMG;IACc,aAAa,uBAAsB;IACnC,cAAc,2CAAkD;IAEjF;;;;;;OAMG;IACc,cAAc,2CAAuB;IAEtD,2DAA2D;IACpD,YAAY,cAAqB;IAExC,4CAA4C;IAC5C,IAAW,YAAY,gBAEtB;IACD,4CAA4C;IAC5C,IAAW,YAAY,CAAC,KAAK,aAAA,EAE5B;IAEM,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAIjD,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IASlD,WAAW,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO;IAIhE,qDAAqD;IAC9C,cAAc,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;IAgBlE,wCAAwC;IACjC,eAAe,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;IAenE,0CAA0C;IACnC,aAAa,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;yCApItD,4BAA4B;2CAA5B,4BAA4B;CAwIxC"}
@@ -50,35 +50,83 @@ export class PinnedMessagesPanelComponent {
50
50
  * a stable reference between real changes is what keeps this input from re-firing every
51
51
  * change detection cycle. The panel renders it; it never mutates it.
52
52
  */
53
- pinnedMessages = [];
53
+ PinnedMessages = [];
54
+ /** @deprecated Use {@link PinnedMessages}. */
55
+ set pinnedMessages(value) {
56
+ this.PinnedMessages = value;
57
+ }
58
+ /** @deprecated Use {@link PinnedMessages}. */
59
+ get pinnedMessages() {
60
+ return this.PinnedMessages;
61
+ }
54
62
  /**
55
63
  * True during the panel's first open, while its rows are being fetched.
56
64
  *
57
65
  * Pins are no longer loaded during conversation open — the open path reads only a count —
58
66
  * so the panel can now render before its contents exist.
59
67
  */
60
- isLoading = false;
61
- closed = new EventEmitter();
62
- jumpRequested = new EventEmitter(); // emits messageId
63
- unpinRequested = new EventEmitter();
68
+ IsLoading = false;
69
+ /** @deprecated Use {@link IsLoading}. */
70
+ set isLoading(value) {
71
+ this.IsLoading = value;
72
+ }
73
+ /** @deprecated Use {@link IsLoading}. */
74
+ get isLoading() {
75
+ return this.IsLoading;
76
+ }
77
+ Closed = new EventEmitter();
78
+ /**
79
+ * @deprecated Use {@link Closed}.
80
+ *
81
+ * The same emitter under the old binding name, so a template still binding
82
+ * (closed) keeps working. Must stay AFTER Closed: class fields
83
+ * initialise in order, and the other way round this captures undefined.
84
+ */
85
+ closed = this.Closed;
86
+ JumpRequested = new EventEmitter();
87
+ /**
88
+ * @deprecated Use {@link JumpRequested}.
89
+ *
90
+ * The same emitter under the old binding name, so a template still binding
91
+ * (jumpRequested) keeps working. Must stay AFTER JumpRequested: class fields
92
+ * initialise in order, and the other way round this captures undefined.
93
+ */
94
+ jumpRequested = this.JumpRequested; // emits messageId
95
+ UnpinRequested = new EventEmitter();
96
+ /**
97
+ * @deprecated Use {@link UnpinRequested}.
98
+ *
99
+ * The same emitter under the old binding name, so a template still binding
100
+ * (unpinRequested) keeps working. Must stay AFTER UnpinRequested: class fields
101
+ * initialise in order, and the other way round this captures undefined.
102
+ */
103
+ unpinRequested = this.UnpinRequested;
64
104
  /** IDs currently being removed (for fade-out animation) */
65
- unpinningIds = new Set();
105
+ UnpinningIds = new Set();
106
+ /** @deprecated Use {@link UnpinningIds}. */
107
+ get unpinningIds() {
108
+ return this.UnpinningIds;
109
+ }
110
+ /** @deprecated Use {@link UnpinningIds}. */
111
+ set unpinningIds(value) {
112
+ this.UnpinningIds = value;
113
+ }
66
114
  Close() {
67
- this.closed.emit();
115
+ this.Closed.emit();
68
116
  }
69
117
  OnJump(message) {
70
- this.jumpRequested.emit(message.ID);
118
+ this.JumpRequested.emit(message.ID);
71
119
  }
72
120
  OnUnpin(message) {
73
- this.unpinningIds.add(message.ID);
121
+ this.UnpinningIds.add(message.ID);
74
122
  // Let the card animate out before the parent removes it from the list
75
123
  setTimeout(() => {
76
- this.unpinningIds.delete(message.ID);
77
- this.unpinRequested.emit(message);
124
+ this.UnpinningIds.delete(message.ID);
125
+ this.UnpinRequested.emit(message);
78
126
  }, 200);
79
127
  }
80
128
  IsUnpinning(message) {
81
- return this.unpinningIds.has(message.ID);
129
+ return this.UnpinningIds.has(message.ID);
82
130
  }
83
131
  /** Strip markdown to plain prose for card preview */
84
132
  GetPreviewText(message) {
@@ -124,7 +172,7 @@ export class PinnedMessagesPanelComponent {
124
172
  return 'AI Response';
125
173
  }
126
174
  static ɵfac = function PinnedMessagesPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PinnedMessagesPanelComponent)(); };
127
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PinnedMessagesPanelComponent, selectors: [["mj-pinned-messages-panel"]], inputs: { pinnedMessages: "pinnedMessages", isLoading: "isLoading" }, outputs: { closed: "closed", jumpRequested: "jumpRequested", unpinRequested: "unpinRequested" }, standalone: false, decls: 15, 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"], ["text", "Loading pinned messages\u2026", "size", "small"], ["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) {
175
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PinnedMessagesPanelComponent, selectors: [["mj-pinned-messages-panel"]], inputs: { PinnedMessages: "PinnedMessages", pinnedMessages: "pinnedMessages", IsLoading: "IsLoading", isLoading: "isLoading" }, outputs: { Closed: "Closed", closed: "closed", JumpRequested: "JumpRequested", jumpRequested: "jumpRequested", UnpinRequested: "UnpinRequested", unpinRequested: "unpinRequested" }, standalone: false, decls: 15, 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"], ["text", "Loading pinned messages\u2026", "size", "small"], ["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) {
128
176
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
129
177
  i0.ɵɵelement(3, "i", 3);
130
178
  i0.ɵɵelementStart(4, "span");
@@ -153,14 +201,24 @@ export class PinnedMessagesPanelComponent {
153
201
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PinnedMessagesPanelComponent, [{
154
202
  type: Component,
155
203
  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 <!-- Rows are fetched on first open now, so \"empty\" and \"not loaded yet\" are different\n states \u2014 showing the empty state during the fetch would claim there are no pins. -->\n @if (isLoading) {\n <mj-loading text=\"Loading pinned messages\u2026\" size=\"small\"></mj-loading>\n } @else 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"] }]
156
- }], null, { pinnedMessages: [{
204
+ }], null, { PinnedMessages: [{
205
+ type: Input
206
+ }], pinnedMessages: [{
207
+ type: Input
208
+ }], IsLoading: [{
157
209
  type: Input
158
210
  }], isLoading: [{
159
211
  type: Input
212
+ }], Closed: [{
213
+ type: Output
160
214
  }], closed: [{
161
215
  type: Output
216
+ }], JumpRequested: [{
217
+ type: Output
162
218
  }], jumpRequested: [{
163
219
  type: Output
220
+ }], UnpinRequested: [{
221
+ type: Output
164
222
  }], unpinRequested: [{
165
223
  type: Output
166
224
  }] }); })();
@@ -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":"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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 /**\n * Readonly because the chat area hands over the window store's own pin array by reference —\n * a stable reference between real changes is what keeps this input from re-firing every\n * change detection cycle. The panel renders it; it never mutates it.\n */\n @Input() public pinnedMessages: readonly MJConversationDetailEntity[] = [];\n\n /**\n * True during the panel's first open, while its rows are being fetched.\n *\n * Pins are no longer loaded during conversation open — the open path reads only a count —\n * so the panel can now render before its contents exist.\n */\n @Input() public isLoading = false;\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 <!-- Rows are fetched on first open now, so \"empty\" and \"not loaded yet\" are different\n states — showing the empty state during the fetch would claim there are no pins. -->\n @if (isLoading) {\n <mj-loading text=\"Loading pinned messages…\" size=\"small\"></mj-loading>\n } @else 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
+ {"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 /**\n * Readonly because the chat area hands over the window store's own pin array by reference —\n * a stable reference between real changes is what keeps this input from re-firing every\n * change detection cycle. The panel renders it; it never mutates it.\n */\n @Input() public PinnedMessages: readonly MJConversationDetailEntity[] = [];\n\n /** @deprecated Use {@link PinnedMessages}. */\n @Input() public set pinnedMessages(value: readonly MJConversationDetailEntity[]) {\n this.PinnedMessages = value;\n }\n /** @deprecated Use {@link PinnedMessages}. */\n public get pinnedMessages(): readonly MJConversationDetailEntity[] {\n return this.PinnedMessages;\n }\n\n /**\n * True during the panel's first open, while its rows are being fetched.\n *\n * Pins are no longer loaded during conversation open — the open path reads only a count —\n * so the panel can now render before its contents exist.\n */\n @Input() public IsLoading = false;\n\n /** @deprecated Use {@link IsLoading}. */\n @Input() public set isLoading(value: PinnedMessagesPanelComponent['IsLoading']) {\n this.IsLoading = value;\n }\n /** @deprecated Use {@link IsLoading}. */\n public get isLoading(): PinnedMessagesPanelComponent['IsLoading'] {\n return this.IsLoading;\n }\n\n @Output() public Closed = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link Closed}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (closed) keeps working. Must stay AFTER Closed: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() public closed = this.Closed;\n @Output() public JumpRequested = new EventEmitter<string>();\n\n /**\n * @deprecated Use {@link JumpRequested}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (jumpRequested) keeps working. Must stay AFTER JumpRequested: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() public jumpRequested = this.JumpRequested; // emits messageId\n @Output() public UnpinRequested = new EventEmitter<MJConversationDetailEntity>();\n\n /**\n * @deprecated Use {@link UnpinRequested}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (unpinRequested) keeps working. Must stay AFTER UnpinRequested: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() public unpinRequested = this.UnpinRequested;\n\n /** IDs currently being removed (for fade-out animation) */\n public UnpinningIds = new Set<string>();\n\n /** @deprecated Use {@link UnpinningIds}. */\n public get unpinningIds() {\n return this.UnpinningIds;\n }\n /** @deprecated Use {@link UnpinningIds}. */\n public set unpinningIds(value) {\n this.UnpinningIds = value;\n }\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 <!-- Rows are fetched on first open now, so \"empty\" and \"not loaded yet\" are different\n states — showing the empty state during the fetch would claim there are no pins. -->\n @if (isLoading) {\n <mj-loading text=\"Loading pinned messages…\" size=\"small\"></mj-loading>\n } @else 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,19 +1,65 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class InputDialogComponent {
3
- message: string;
4
- inputLabel: string;
5
- inputType: 'text' | 'textarea' | 'number' | 'email';
6
- placeholder: string;
7
- required: boolean;
8
- value: string;
9
- secondInputLabel: string;
10
- secondInputPlaceholder: string;
11
- secondInputRequired: boolean;
12
- secondValue: string;
3
+ Message: string;
4
+ /** @deprecated Use {@link Message}. */
5
+ set message(value: string);
6
+ /** @deprecated Use {@link Message}. */
7
+ get message(): string;
8
+ InputLabel: string;
9
+ /** @deprecated Use {@link InputLabel}. */
10
+ set inputLabel(value: string);
11
+ /** @deprecated Use {@link InputLabel}. */
12
+ get inputLabel(): string;
13
+ InputType: 'text' | 'textarea' | 'number' | 'email';
14
+ /** @deprecated Use {@link InputType}. */
15
+ set inputType(value: 'text' | 'textarea' | 'number' | 'email');
16
+ /** @deprecated Use {@link InputType}. */
17
+ get inputType(): 'text' | 'textarea' | 'number' | 'email';
18
+ Placeholder: string;
19
+ /** @deprecated Use {@link Placeholder}. */
20
+ set placeholder(value: string);
21
+ /** @deprecated Use {@link Placeholder}. */
22
+ get placeholder(): string;
23
+ Required: boolean;
24
+ /** @deprecated Use {@link Required}. */
25
+ set required(value: boolean);
26
+ /** @deprecated Use {@link Required}. */
27
+ get required(): boolean;
28
+ Value: string;
29
+ /** @deprecated Use {@link Value}. */
30
+ set value(value: string);
31
+ /** @deprecated Use {@link Value}. */
32
+ get value(): string;
33
+ SecondInputLabel: string;
34
+ /** @deprecated Use {@link SecondInputLabel}. */
35
+ set secondInputLabel(value: string);
36
+ /** @deprecated Use {@link SecondInputLabel}. */
37
+ get secondInputLabel(): string;
38
+ SecondInputPlaceholder: string;
39
+ /** @deprecated Use {@link SecondInputPlaceholder}. */
40
+ set secondInputPlaceholder(value: string);
41
+ /** @deprecated Use {@link SecondInputPlaceholder}. */
42
+ get secondInputPlaceholder(): string;
43
+ SecondInputRequired: boolean;
44
+ /** @deprecated Use {@link SecondInputRequired}. */
45
+ set secondInputRequired(value: boolean);
46
+ /** @deprecated Use {@link SecondInputRequired}. */
47
+ get secondInputRequired(): boolean;
48
+ SecondValue: string;
49
+ /** @deprecated Use {@link SecondValue}. */
50
+ set secondValue(value: string);
51
+ /** @deprecated Use {@link SecondValue}. */
52
+ get secondValue(): string;
53
+ OnEnterKey(event: Event): void;
54
+ /** @deprecated Use {@link OnEnterKey}. */
13
55
  onEnterKey(event: Event): void;
56
+ GetValue(): string;
57
+ /** @deprecated Use {@link GetValue}. */
14
58
  getValue(): string;
59
+ GetSecondValue(): string;
60
+ /** @deprecated Use {@link GetSecondValue}. */
15
61
  getSecondValue(): string;
16
62
  static ɵfac: i0.ɵɵFactoryDeclaration<InputDialogComponent, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<InputDialogComponent, "mj-input-dialog", never, { "message": { "alias": "message"; "required": false; }; "inputLabel": { "alias": "inputLabel"; "required": false; }; "inputType": { "alias": "inputType"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "value": { "alias": "value"; "required": false; }; "secondInputLabel": { "alias": "secondInputLabel"; "required": false; }; "secondInputPlaceholder": { "alias": "secondInputPlaceholder"; "required": false; }; "secondInputRequired": { "alias": "secondInputRequired"; "required": false; }; "secondValue": { "alias": "secondValue"; "required": false; }; }, {}, never, never, false, never>;
63
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputDialogComponent, "mj-input-dialog", never, { "Message": { "alias": "Message"; "required": false; }; "message": { "alias": "message"; "required": false; }; "InputLabel": { "alias": "InputLabel"; "required": false; }; "inputLabel": { "alias": "inputLabel"; "required": false; }; "InputType": { "alias": "InputType"; "required": false; }; "inputType": { "alias": "inputType"; "required": false; }; "Placeholder": { "alias": "Placeholder"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "Required": { "alias": "Required"; "required": false; }; "required": { "alias": "required"; "required": false; }; "Value": { "alias": "Value"; "required": false; }; "value": { "alias": "value"; "required": false; }; "SecondInputLabel": { "alias": "SecondInputLabel"; "required": false; }; "secondInputLabel": { "alias": "secondInputLabel"; "required": false; }; "SecondInputPlaceholder": { "alias": "SecondInputPlaceholder"; "required": false; }; "secondInputPlaceholder": { "alias": "secondInputPlaceholder"; "required": false; }; "SecondInputRequired": { "alias": "SecondInputRequired"; "required": false; }; "secondInputRequired": { "alias": "secondInputRequired"; "required": false; }; "SecondValue": { "alias": "SecondValue"; "required": false; }; "secondValue": { "alias": "secondValue"; "required": false; }; }, {}, never, never, false, never>;
18
64
  }
19
65
  //# sourceMappingURL=input-dialog.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/dialogs/input-dialog.component.ts"],"names":[],"mappings":";AAEA,qBAsGa,oBAAoB;IACtB,OAAO,EAAE,MAAM,CAAM;IACrB,UAAU,EAAE,MAAM,CAAM;IACxB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAU;IAC7D,WAAW,EAAE,MAAM,CAAM;IACzB,QAAQ,EAAE,OAAO,CAAS;IAC1B,KAAK,EAAE,MAAM,CAAM;IACnB,gBAAgB,EAAE,MAAM,CAAM;IAC9B,sBAAsB,EAAE,MAAM,CAAM;IACpC,mBAAmB,EAAE,OAAO,CAAS;IACrC,WAAW,EAAE,MAAM,CAAM;IAElC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAY9B,QAAQ,IAAI,MAAM;IAIlB,cAAc,IAAI,MAAM;yCA5Bb,oBAAoB;2CAApB,oBAAoB;CA+BhC"}
1
+ {"version":3,"file":"input-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/dialogs/input-dialog.component.ts"],"names":[],"mappings":";AAEA,qBAsGa,oBAAoB;IACtB,OAAO,EAAE,MAAM,CAAM;IAE9B,uCAAuC;IACvC,IAAa,OAAO,CAAC,KAAK,EAAE,MAAM,EAEjC;IACD,uCAAuC;IACvC,IAAI,OAAO,IAAI,MAAM,CAEpB;IACQ,UAAU,EAAE,MAAM,CAAM;IAEjC,0CAA0C;IAC1C,IAAa,UAAU,CAAC,KAAK,EAAE,MAAM,EAEpC;IACD,0CAA0C;IAC1C,IAAI,UAAU,IAAI,MAAM,CAEvB;IACQ,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAU;IAEtE,yCAAyC;IACzC,IAAa,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,EAErE;IACD,yCAAyC;IACzC,IAAI,SAAS,IAAI,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAExD;IACQ,WAAW,EAAE,MAAM,CAAM;IAElC,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAK,EAAE,MAAM,EAErC;IACD,2CAA2C;IAC3C,IAAI,WAAW,IAAI,MAAM,CAExB;IACQ,QAAQ,EAAE,OAAO,CAAS;IAEnC,wCAAwC;IACxC,IAAa,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEnC;IACD,wCAAwC;IACxC,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACQ,KAAK,EAAE,MAAM,CAAM;IAE5B,qCAAqC;IACrC,IAAa,KAAK,CAAC,KAAK,EAAE,MAAM,EAE/B;IACD,qCAAqC;IACrC,IAAI,KAAK,IAAI,MAAM,CAElB;IACQ,gBAAgB,EAAE,MAAM,CAAM;IAEvC,gDAAgD;IAChD,IAAa,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAE1C;IACD,gDAAgD;IAChD,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IACQ,sBAAsB,EAAE,MAAM,CAAM;IAE7C,sDAAsD;IACtD,IAAa,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAEhD;IACD,sDAAsD;IACtD,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IACQ,mBAAmB,EAAE,OAAO,CAAS;IAE9C,mDAAmD;IACnD,IAAa,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAE9C;IACD,mDAAmD;IACnD,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IACQ,WAAW,EAAE,MAAM,CAAM;IAElC,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAK,EAAE,MAAM,EAErC;IACD,2CAA2C;IAC3C,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAY9B,0CAA0C;IAC1C,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI9B,QAAQ,IAAI,MAAM;IAIlB,wCAAwC;IACxC,QAAQ,IAAI,MAAM;IAIlB,cAAc,IAAI,MAAM;IAIxB,8CAA8C;IAC9C,cAAc,IAAI,MAAM;yCArIb,oBAAoB;2CAApB,oBAAoB;CAwIhC"}
@@ -54,19 +54,99 @@ function InputDialogComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
54
54
  i0.ɵɵproperty("placeholder", ctx_r1.secondInputPlaceholder);
55
55
  } }
56
56
  export class InputDialogComponent {
57
- message = '';
58
- inputLabel = '';
59
- inputType = 'text';
60
- placeholder = '';
61
- required = false;
62
- value = '';
63
- secondInputLabel = '';
64
- secondInputPlaceholder = '';
65
- secondInputRequired = false;
66
- secondValue = '';
67
- onEnterKey(event) {
57
+ Message = '';
58
+ /** @deprecated Use {@link Message}. */
59
+ set message(value) {
60
+ this.Message = value;
61
+ }
62
+ /** @deprecated Use {@link Message}. */
63
+ get message() {
64
+ return this.Message;
65
+ }
66
+ InputLabel = '';
67
+ /** @deprecated Use {@link InputLabel}. */
68
+ set inputLabel(value) {
69
+ this.InputLabel = value;
70
+ }
71
+ /** @deprecated Use {@link InputLabel}. */
72
+ get inputLabel() {
73
+ return this.InputLabel;
74
+ }
75
+ InputType = 'text';
76
+ /** @deprecated Use {@link InputType}. */
77
+ set inputType(value) {
78
+ this.InputType = value;
79
+ }
80
+ /** @deprecated Use {@link InputType}. */
81
+ get inputType() {
82
+ return this.InputType;
83
+ }
84
+ Placeholder = '';
85
+ /** @deprecated Use {@link Placeholder}. */
86
+ set placeholder(value) {
87
+ this.Placeholder = value;
88
+ }
89
+ /** @deprecated Use {@link Placeholder}. */
90
+ get placeholder() {
91
+ return this.Placeholder;
92
+ }
93
+ Required = false;
94
+ /** @deprecated Use {@link Required}. */
95
+ set required(value) {
96
+ this.Required = value;
97
+ }
98
+ /** @deprecated Use {@link Required}. */
99
+ get required() {
100
+ return this.Required;
101
+ }
102
+ Value = '';
103
+ /** @deprecated Use {@link Value}. */
104
+ set value(value) {
105
+ this.Value = value;
106
+ }
107
+ /** @deprecated Use {@link Value}. */
108
+ get value() {
109
+ return this.Value;
110
+ }
111
+ SecondInputLabel = '';
112
+ /** @deprecated Use {@link SecondInputLabel}. */
113
+ set secondInputLabel(value) {
114
+ this.SecondInputLabel = value;
115
+ }
116
+ /** @deprecated Use {@link SecondInputLabel}. */
117
+ get secondInputLabel() {
118
+ return this.SecondInputLabel;
119
+ }
120
+ SecondInputPlaceholder = '';
121
+ /** @deprecated Use {@link SecondInputPlaceholder}. */
122
+ set secondInputPlaceholder(value) {
123
+ this.SecondInputPlaceholder = value;
124
+ }
125
+ /** @deprecated Use {@link SecondInputPlaceholder}. */
126
+ get secondInputPlaceholder() {
127
+ return this.SecondInputPlaceholder;
128
+ }
129
+ SecondInputRequired = false;
130
+ /** @deprecated Use {@link SecondInputRequired}. */
131
+ set secondInputRequired(value) {
132
+ this.SecondInputRequired = value;
133
+ }
134
+ /** @deprecated Use {@link SecondInputRequired}. */
135
+ get secondInputRequired() {
136
+ return this.SecondInputRequired;
137
+ }
138
+ SecondValue = '';
139
+ /** @deprecated Use {@link SecondValue}. */
140
+ set secondValue(value) {
141
+ this.SecondValue = value;
142
+ }
143
+ /** @deprecated Use {@link SecondValue}. */
144
+ get secondValue() {
145
+ return this.SecondValue;
146
+ }
147
+ OnEnterKey(event) {
68
148
  const keyEvent = event;
69
- if (this.inputType !== 'textarea') {
149
+ if (this.InputType !== 'textarea') {
70
150
  keyEvent.preventDefault();
71
151
  // Trigger OK/primary button click in the MJ dialog
72
152
  const okButton = document.querySelector('.mj-dialog-actions .mj-btn--primary');
@@ -75,14 +155,26 @@ export class InputDialogComponent {
75
155
  }
76
156
  }
77
157
  }
158
+ /** @deprecated Use {@link OnEnterKey}. */
159
+ onEnterKey(event) {
160
+ return this.OnEnterKey(event);
161
+ }
162
+ GetValue() {
163
+ return this.Value.trim();
164
+ }
165
+ /** @deprecated Use {@link GetValue}. */
78
166
  getValue() {
79
- return this.value.trim();
167
+ return this.GetValue();
168
+ }
169
+ GetSecondValue() {
170
+ return this.SecondValue.trim();
80
171
  }
172
+ /** @deprecated Use {@link GetSecondValue}. */
81
173
  getSecondValue() {
82
- return this.secondValue.trim();
174
+ return this.GetSecondValue();
83
175
  }
84
176
  static ɵfac = function InputDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || InputDialogComponent)(); };
85
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InputDialogComponent, selectors: [["mj-input-dialog"]], inputs: { message: "message", inputLabel: "inputLabel", inputType: "inputType", placeholder: "placeholder", required: "required", value: "value", secondInputLabel: "secondInputLabel", secondInputPlaceholder: "secondInputPlaceholder", secondInputRequired: "secondInputRequired", secondValue: "secondValue" }, standalone: false, decls: 10, vars: 6, consts: [[1, "input-dialog-content"], [1, "dialog-message"], [1, "input-field"], [1, "input-label"], [1, "required-mark"], [1, "mj-textarea", 3, "ngModel", "placeholder"], [1, "mj-input", 3, "ngModel", "type", "placeholder"], [1, "mj-textarea", 3, "ngModelChange", "ngModel", "placeholder"], [1, "mj-input", 3, "ngModelChange", "keydown.enter", "ngModel", "type", "placeholder"]], template: function InputDialogComponent_Template(rf, ctx) { if (rf & 1) {
177
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InputDialogComponent, selectors: [["mj-input-dialog"]], inputs: { Message: "Message", message: "message", InputLabel: "InputLabel", inputLabel: "inputLabel", InputType: "InputType", inputType: "inputType", Placeholder: "Placeholder", placeholder: "placeholder", Required: "Required", required: "required", Value: "Value", value: "value", SecondInputLabel: "SecondInputLabel", secondInputLabel: "secondInputLabel", SecondInputPlaceholder: "SecondInputPlaceholder", secondInputPlaceholder: "secondInputPlaceholder", SecondInputRequired: "SecondInputRequired", secondInputRequired: "secondInputRequired", SecondValue: "SecondValue", secondValue: "secondValue" }, standalone: false, decls: 10, vars: 6, consts: [[1, "input-dialog-content"], [1, "dialog-message"], [1, "input-field"], [1, "input-label"], [1, "required-mark"], [1, "mj-textarea", 3, "ngModel", "placeholder"], [1, "mj-input", 3, "ngModel", "type", "placeholder"], [1, "mj-textarea", 3, "ngModelChange", "ngModel", "placeholder"], [1, "mj-input", 3, "ngModelChange", "keydown.enter", "ngModel", "type", "placeholder"]], template: function InputDialogComponent_Template(rf, ctx) { if (rf & 1) {
86
178
  i0.ɵɵelementStart(0, "div", 0)(1, "p", 1);
87
179
  i0.ɵɵtext(2);
88
180
  i0.ɵɵelementEnd();
@@ -155,24 +247,44 @@ export class InputDialogComponent {
155
247
  }
156
248
  </div>
157
249
  `, styles: ["\n .input-dialog-content {\n /* MJDialogContainerComponent pads only string content (.mj-dialog-body > p); a component\n body arrives with no horizontal padding at all, so the message, labels and inputs sat flush\n against the dialog edges while the header and footer were padded. Same inset as the sibling\n rating dialog, which already compensates for this. */\n padding: 4px 20px 8px;\n /* Parity with the rating dialog: the Explorer shell's global reset makes this redundant, but a host\n without that reset would let the 100%-wide inputs (padding + border, no local box-sizing) overflow. */\n box-sizing: border-box;\n }\n .input-dialog-content * {\n box-sizing: border-box;\n }\n .dialog-message {\n margin: 0 0 16px 0;\n color: var(--mj-text-primary);\n font-size: 14px;\n }\n .input-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .input-label {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n .required-mark {\n color: var(--mj-status-error);\n margin-left: 2px;\n }\n .mj-input,\n .mj-textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 14px;\n font-family: inherit;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n }\n .mj-input:focus,\n .mj-textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n }\n .mj-textarea {\n min-height: 80px;\n resize: vertical;\n }\n "] }]
158
- }], null, { message: [{
250
+ }], null, { Message: [{
251
+ type: Input
252
+ }], message: [{
253
+ type: Input
254
+ }], InputLabel: [{
159
255
  type: Input
160
256
  }], inputLabel: [{
161
257
  type: Input
258
+ }], InputType: [{
259
+ type: Input
162
260
  }], inputType: [{
163
261
  type: Input
262
+ }], Placeholder: [{
263
+ type: Input
164
264
  }], placeholder: [{
165
265
  type: Input
266
+ }], Required: [{
267
+ type: Input
166
268
  }], required: [{
167
269
  type: Input
270
+ }], Value: [{
271
+ type: Input
168
272
  }], value: [{
169
273
  type: Input
274
+ }], SecondInputLabel: [{
275
+ type: Input
170
276
  }], secondInputLabel: [{
171
277
  type: Input
278
+ }], SecondInputPlaceholder: [{
279
+ type: Input
172
280
  }], secondInputPlaceholder: [{
173
281
  type: Input
282
+ }], SecondInputRequired: [{
283
+ type: Input
174
284
  }], secondInputRequired: [{
175
285
  type: Input
286
+ }], SecondValue: [{
287
+ type: Input
176
288
  }], secondValue: [{
177
289
  type: Input
178
290
  }] }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"input-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/components/dialogs/input-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;;;;IAYrC,+BAA4B;IAAA,iBAAC;IAAA,iBAAO;;;;IAItC,mCAGsB;IAFpB,ySAAmB;IAGrB,0BAAA;IAAA,iBAAW;;;IAHT,4CAAmB;IACnB,gDAA2B;;;;IAK7B,gCAKuC;IAJrC,sSAAmB;IAInB,6MAAiB,yBAAkB,KAAC;IALtC,iBAKuC;;;IAJrC,4CAAmB;IAEnB,AADA,iDAA4B,mCACD;;;IAUzB,+BAA4B;IAAA,iBAAC;IAAA,iBAAO;;;;IAHxC,AADF,8BAAyB,eACI;IACzB,YACA;IAAA,qGAA2B;IAG7B,iBAAQ;IACR,mCAGsB;IAFpB,qTAAyB;IAG3B,0BAAA;IACF,AADE,iBAAW,EACP;;;IAVF,eACA;IADA,wDACA;IAAA,cAEC;IAFD,qDAEC;IAGD,cAAyB;IAAzB,kDAAyB;IACzB,2DAAsC;;AA+DlD,MAAM,OAAO,oBAAoB;IACtB,OAAO,GAAW,EAAE,CAAC;IACrB,UAAU,GAAW,EAAE,CAAC;IACxB,SAAS,GAA6C,MAAM,CAAC;IAC7D,WAAW,GAAW,EAAE,CAAC;IACzB,QAAQ,GAAY,KAAK,CAAC;IAC1B,KAAK,GAAW,EAAE,CAAC;IACnB,gBAAgB,GAAW,EAAE,CAAC;IAC9B,sBAAsB,GAAW,EAAE,CAAC;IACpC,mBAAmB,GAAY,KAAK,CAAC;IACrC,WAAW,GAAW,EAAE,CAAC;IAElC,UAAU,CAAC,KAAY;QACrB,MAAM,QAAQ,GAAG,KAAsB,CAAC;QACxC,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAClC,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,mDAAmD;YACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,qCAAqC,CAAsB,CAAC;YACpG,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;8GA9BU,oBAAoB;6DAApB,oBAAoB;YAjG3B,AADF,8BAAkC,WACN;YAAA,YAAa;YAAA,iBAAI;YAEzC,AADF,8BAAyB,eACI;YACzB,YACA;YAAA,uFAAgB;YAGlB,iBAAQ;YACR,2FAAgC;YAOhC,wFAAgC;YAQlC,iBAAM;YACN,sFAAwB;YAe1B,iBAAM;;YAvCsB,eAAa;YAAb,iCAAa;YAGnC,eACA;YADA,+CACA;YAAA,cAEC;YAFD,uCAEC;YAEH,cAMC;YAND,uDAMC;YACD,cAOC;YAPD,uDAOC;YAEH,cAcC;YAdD,+CAcC;;;iFA2DM,oBAAoB;cAtGhC,SAAS;6BACI,KAAK,YACP,iBAAiB,YACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0CP;;kBA0DF,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kFAVK,oBAAoB","sourcesContent":["import { Component, Input } from '@angular/core';\n\n@Component({\n standalone: false,\n selector: 'mj-input-dialog',\n template: `\n <div class=\"input-dialog-content\">\n <p class=\"dialog-message\">{{ message }}</p>\n <div class=\"input-field\">\n <label class=\"input-label\">\n {{ inputLabel }}\n @if (required) {\n <span class=\"required-mark\">*</span>\n }\n </label>\n @if (inputType === 'textarea') {\n <textarea\n [(ngModel)]=\"value\"\n [placeholder]=\"placeholder\"\n class=\"mj-textarea\">\n </textarea>\n }\n @if (inputType !== 'textarea') {\n <input\n [(ngModel)]=\"value\"\n [type]=\"inputType || 'text'\"\n [placeholder]=\"placeholder\"\n class=\"mj-input\"\n (keydown.enter)=\"onEnterKey($event)\">\n }\n </div>\n @if (secondInputLabel) {\n <div class=\"input-field\">\n <label class=\"input-label\">\n {{ secondInputLabel }}\n @if (secondInputRequired) {\n <span class=\"required-mark\">*</span>\n }\n </label>\n <textarea\n [(ngModel)]=\"secondValue\"\n [placeholder]=\"secondInputPlaceholder\"\n class=\"mj-textarea\">\n </textarea>\n </div>\n }\n </div>\n `,\n styles: [`\n .input-dialog-content {\n /* MJDialogContainerComponent pads only string content (.mj-dialog-body > p); a component\n body arrives with no horizontal padding at all, so the message, labels and inputs sat flush\n against the dialog edges while the header and footer were padded. Same inset as the sibling\n rating dialog, which already compensates for this. */\n padding: 4px 20px 8px;\n /* Parity with the rating dialog: the Explorer shell's global reset makes this redundant, but a host\n without that reset would let the 100%-wide inputs (padding + border, no local box-sizing) overflow. */\n box-sizing: border-box;\n }\n .input-dialog-content * {\n box-sizing: border-box;\n }\n .dialog-message {\n margin: 0 0 16px 0;\n color: var(--mj-text-primary);\n font-size: 14px;\n }\n .input-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .input-label {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n .required-mark {\n color: var(--mj-status-error);\n margin-left: 2px;\n }\n .mj-input,\n .mj-textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 14px;\n font-family: inherit;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n }\n .mj-input:focus,\n .mj-textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n }\n .mj-textarea {\n min-height: 80px;\n resize: vertical;\n }\n `]\n})\nexport class InputDialogComponent {\n @Input() message: string = '';\n @Input() inputLabel: string = '';\n @Input() inputType: 'text' | 'textarea' | 'number' | 'email' = 'text';\n @Input() placeholder: string = '';\n @Input() required: boolean = false;\n @Input() value: string = '';\n @Input() secondInputLabel: string = '';\n @Input() secondInputPlaceholder: string = '';\n @Input() secondInputRequired: boolean = false;\n @Input() secondValue: string = '';\n\n onEnterKey(event: Event): void {\n const keyEvent = event as KeyboardEvent;\n if (this.inputType !== 'textarea') {\n keyEvent.preventDefault();\n // Trigger OK/primary button click in the MJ dialog\n const okButton = document.querySelector('.mj-dialog-actions .mj-btn--primary') as HTMLButtonElement;\n if (okButton) {\n okButton.click();\n }\n }\n }\n\n getValue(): string {\n return this.value.trim();\n }\n\n getSecondValue(): string {\n return this.secondValue.trim();\n }\n}\n"]}
1
+ {"version":3,"file":"input-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/components/dialogs/input-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input } from '@angular/core';\n\n@Component({\n standalone: false,\n selector: 'mj-input-dialog',\n template: `\n <div class=\"input-dialog-content\">\n <p class=\"dialog-message\">{{ message }}</p>\n <div class=\"input-field\">\n <label class=\"input-label\">\n {{ inputLabel }}\n @if (required) {\n <span class=\"required-mark\">*</span>\n }\n </label>\n @if (inputType === 'textarea') {\n <textarea\n [(ngModel)]=\"value\"\n [placeholder]=\"placeholder\"\n class=\"mj-textarea\">\n </textarea>\n }\n @if (inputType !== 'textarea') {\n <input\n [(ngModel)]=\"value\"\n [type]=\"inputType || 'text'\"\n [placeholder]=\"placeholder\"\n class=\"mj-input\"\n (keydown.enter)=\"onEnterKey($event)\">\n }\n </div>\n @if (secondInputLabel) {\n <div class=\"input-field\">\n <label class=\"input-label\">\n {{ secondInputLabel }}\n @if (secondInputRequired) {\n <span class=\"required-mark\">*</span>\n }\n </label>\n <textarea\n [(ngModel)]=\"secondValue\"\n [placeholder]=\"secondInputPlaceholder\"\n class=\"mj-textarea\">\n </textarea>\n </div>\n }\n </div>\n `,\n styles: [`\n .input-dialog-content {\n /* MJDialogContainerComponent pads only string content (.mj-dialog-body > p); a component\n body arrives with no horizontal padding at all, so the message, labels and inputs sat flush\n against the dialog edges while the header and footer were padded. Same inset as the sibling\n rating dialog, which already compensates for this. */\n padding: 4px 20px 8px;\n /* Parity with the rating dialog: the Explorer shell's global reset makes this redundant, but a host\n without that reset would let the 100%-wide inputs (padding + border, no local box-sizing) overflow. */\n box-sizing: border-box;\n }\n .input-dialog-content * {\n box-sizing: border-box;\n }\n .dialog-message {\n margin: 0 0 16px 0;\n color: var(--mj-text-primary);\n font-size: 14px;\n }\n .input-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .input-label {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n .required-mark {\n color: var(--mj-status-error);\n margin-left: 2px;\n }\n .mj-input,\n .mj-textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 14px;\n font-family: inherit;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n }\n .mj-input:focus,\n .mj-textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n }\n .mj-textarea {\n min-height: 80px;\n resize: vertical;\n }\n `]\n})\nexport class InputDialogComponent {\n @Input() Message: string = '';\n\n /** @deprecated Use {@link Message}. */\n @Input() set message(value: string) {\n this.Message = value;\n }\n /** @deprecated Use {@link Message}. */\n get message(): string {\n return this.Message;\n }\n @Input() InputLabel: string = '';\n\n /** @deprecated Use {@link InputLabel}. */\n @Input() set inputLabel(value: string) {\n this.InputLabel = value;\n }\n /** @deprecated Use {@link InputLabel}. */\n get inputLabel(): string {\n return this.InputLabel;\n }\n @Input() InputType: 'text' | 'textarea' | 'number' | 'email' = 'text';\n\n /** @deprecated Use {@link InputType}. */\n @Input() set inputType(value: 'text' | 'textarea' | 'number' | 'email') {\n this.InputType = value;\n }\n /** @deprecated Use {@link InputType}. */\n get inputType(): 'text' | 'textarea' | 'number' | 'email' {\n return this.InputType;\n }\n @Input() Placeholder: string = '';\n\n /** @deprecated Use {@link Placeholder}. */\n @Input() set placeholder(value: string) {\n this.Placeholder = value;\n }\n /** @deprecated Use {@link Placeholder}. */\n get placeholder(): string {\n return this.Placeholder;\n }\n @Input() Required: boolean = false;\n\n /** @deprecated Use {@link Required}. */\n @Input() set required(value: boolean) {\n this.Required = value;\n }\n /** @deprecated Use {@link Required}. */\n get required(): boolean {\n return this.Required;\n }\n @Input() Value: string = '';\n\n /** @deprecated Use {@link Value}. */\n @Input() set value(value: string) {\n this.Value = value;\n }\n /** @deprecated Use {@link Value}. */\n get value(): string {\n return this.Value;\n }\n @Input() SecondInputLabel: string = '';\n\n /** @deprecated Use {@link SecondInputLabel}. */\n @Input() set secondInputLabel(value: string) {\n this.SecondInputLabel = value;\n }\n /** @deprecated Use {@link SecondInputLabel}. */\n get secondInputLabel(): string {\n return this.SecondInputLabel;\n }\n @Input() SecondInputPlaceholder: string = '';\n\n /** @deprecated Use {@link SecondInputPlaceholder}. */\n @Input() set secondInputPlaceholder(value: string) {\n this.SecondInputPlaceholder = value;\n }\n /** @deprecated Use {@link SecondInputPlaceholder}. */\n get secondInputPlaceholder(): string {\n return this.SecondInputPlaceholder;\n }\n @Input() SecondInputRequired: boolean = false;\n\n /** @deprecated Use {@link SecondInputRequired}. */\n @Input() set secondInputRequired(value: boolean) {\n this.SecondInputRequired = value;\n }\n /** @deprecated Use {@link SecondInputRequired}. */\n get secondInputRequired(): boolean {\n return this.SecondInputRequired;\n }\n @Input() SecondValue: string = '';\n\n /** @deprecated Use {@link SecondValue}. */\n @Input() set secondValue(value: string) {\n this.SecondValue = value;\n }\n /** @deprecated Use {@link SecondValue}. */\n get secondValue(): string {\n return this.SecondValue;\n }\n\n OnEnterKey(event: Event): void {\n const keyEvent = event as KeyboardEvent;\n if (this.InputType !== 'textarea') {\n keyEvent.preventDefault();\n // Trigger OK/primary button click in the MJ dialog\n const okButton = document.querySelector('.mj-dialog-actions .mj-btn--primary') as HTMLButtonElement;\n if (okButton) {\n okButton.click();\n }\n }\n }\n\n /** @deprecated Use {@link OnEnterKey}. */\n onEnterKey(event: Event): void {\n return this.OnEnterKey(event);\n }\n\n GetValue(): string {\n return this.Value.trim();\n }\n\n /** @deprecated Use {@link GetValue}. */\n getValue(): string {\n return this.GetValue();\n }\n\n GetSecondValue(): string {\n return this.SecondValue.trim();\n }\n\n /** @deprecated Use {@link GetSecondValue}. */\n getSecondValue(): string {\n return this.GetSecondValue();\n }\n}\n"]}