@copilotkitnext/angular 0.0.9-alpha.2 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm2022/index.mjs +2 -70
- package/dist/esm2022/lib/agent.mjs +73 -0
- package/dist/esm2022/lib/chat-config.mjs +35 -0
- package/dist/esm2022/lib/chat-state.mjs +18 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-buttons.mjs +344 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-renderer.mjs +260 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-toolbar.mjs +22 -0
- package/dist/esm2022/{components/chat/copilot-chat-assistant-message.component.mjs → lib/components/chat/copilot-chat-assistant-message.mjs} +216 -240
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-audio-recorder.mjs +196 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-buttons.mjs +299 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-input-defaults.mjs +39 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-input.mjs +634 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-input.types.mjs +10 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view-cursor.mjs +27 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view.mjs +268 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-textarea.mjs +139 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-tool-calls-view.mjs +36 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-toolbar.mjs +20 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-tools-menu.mjs +203 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-branch-navigation.mjs +118 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-buttons.mjs +182 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-renderer.mjs +28 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-toolbar.mjs +25 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message.mjs +306 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-disclaimer.mjs +48 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-feather.mjs +41 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-handlers.mjs +19 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-input-container.mjs +96 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.mjs +89 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-view.mjs +456 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view.mjs +404 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat.mjs +167 -0
- package/dist/esm2022/lib/config.mjs +9 -0
- package/dist/esm2022/lib/copilotkit.mjs +124 -0
- package/dist/esm2022/lib/directives/copilotkit-agent-context.mjs +130 -0
- package/dist/esm2022/lib/directives/stick-to-bottom.mjs +170 -0
- package/dist/esm2022/lib/directives/tooltip.mjs +217 -0
- package/dist/esm2022/lib/human-in-the-loop.mjs +19 -0
- package/dist/esm2022/lib/render-tool-calls.mjs +131 -0
- package/dist/esm2022/lib/resize-observer.mjs +152 -0
- package/dist/esm2022/lib/scroll-position.mjs +124 -0
- package/dist/esm2022/lib/slots/copilot-slot.mjs +156 -0
- package/dist/esm2022/lib/slots/index.mjs +4 -0
- package/dist/esm2022/lib/slots/slot.types.mjs +3 -3
- package/dist/esm2022/lib/slots/slot.utils.mjs +19 -15
- package/dist/esm2022/lib/tools.mjs +31 -0
- package/dist/esm2022/lib/utils.mjs +3 -3
- package/dist/esm2022/public-api.mjs +47 -0
- package/dist/fesm2022/copilotkitnext-angular.mjs +5249 -8271
- package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
- package/dist/index.d.ts +1 -55
- package/dist/lib/agent.d.ts +53 -0
- package/dist/{core/chat-configuration/chat-configuration.types.d.ts → lib/chat-config.d.ts} +4 -8
- package/dist/lib/chat-state.d.ts +10 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message-buttons.d.ts +68 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message-renderer.d.ts +26 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message-toolbar.d.ts +7 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message.d.ts +178 -0
- package/dist/{components → lib/components}/chat/copilot-chat-assistant-message.types.d.ts +1 -1
- package/dist/{components/chat/copilot-chat-audio-recorder.component.d.ts → lib/components/chat/copilot-chat-audio-recorder.d.ts} +10 -10
- package/dist/lib/components/chat/copilot-chat-buttons.d.ts +65 -0
- package/dist/lib/components/chat/copilot-chat-input-defaults.d.ts +38 -0
- package/dist/lib/components/chat/copilot-chat-input.d.ts +133 -0
- package/dist/{components → lib/components}/chat/copilot-chat-input.types.d.ts +11 -11
- package/dist/lib/components/chat/copilot-chat-message-view-cursor.d.ts +11 -0
- package/dist/{components/chat/copilot-chat-message-view.component.d.ts → lib/components/chat/copilot-chat-message-view.d.ts} +68 -36
- package/dist/{components → lib/components}/chat/copilot-chat-message-view.types.d.ts +2 -2
- package/dist/lib/components/chat/copilot-chat-textarea.d.ts +41 -0
- package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +55 -0
- package/dist/lib/components/chat/copilot-chat-toolbar.d.ts +7 -0
- package/dist/lib/components/chat/copilot-chat-tools-menu.d.ts +20 -0
- package/dist/lib/components/chat/copilot-chat-user-message-branch-navigation.d.ts +20 -0
- package/dist/lib/components/chat/copilot-chat-user-message-buttons.d.ts +35 -0
- package/dist/lib/components/chat/copilot-chat-user-message-renderer.d.ts +8 -0
- package/dist/lib/components/chat/copilot-chat-user-message-toolbar.d.ts +7 -0
- package/dist/lib/components/chat/copilot-chat-user-message.d.ts +55 -0
- package/dist/{components → lib/components}/chat/copilot-chat-user-message.types.d.ts +2 -2
- package/dist/lib/components/chat/copilot-chat-view-disclaimer.d.ts +15 -0
- package/dist/{components/chat/copilot-chat-view-feather.component.d.ts → lib/components/chat/copilot-chat-view-feather.d.ts} +6 -6
- package/dist/{components/chat/copilot-chat-view-handlers.service.d.ts → lib/components/chat/copilot-chat-view-handlers.d.ts} +3 -3
- package/dist/lib/components/chat/copilot-chat-view-input-container.d.ts +23 -0
- package/dist/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.d.ts +16 -0
- package/dist/lib/components/chat/copilot-chat-view-scroll-view.d.ts +114 -0
- package/dist/lib/components/chat/copilot-chat-view.d.ts +239 -0
- package/dist/{components → lib/components}/chat/copilot-chat-view.types.d.ts +2 -2
- package/dist/lib/components/chat/copilot-chat.d.ts +67 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/copilotkit.d.ts +29 -0
- package/dist/{directives/copilotkit-agent-context.directive.d.ts → lib/directives/copilotkit-agent-context.d.ts} +5 -5
- package/dist/lib/directives/stick-to-bottom.d.ts +62 -0
- package/dist/lib/directives/tooltip.d.ts +33 -0
- package/dist/lib/human-in-the-loop.d.ts +13 -0
- package/dist/lib/render-tool-calls.d.ts +75 -0
- package/dist/{services/resize-observer.service.d.ts → lib/resize-observer.d.ts} +2 -2
- package/dist/{services/scroll-position.service.d.ts → lib/scroll-position.d.ts} +6 -6
- package/dist/lib/slots/copilot-slot.d.ts +34 -0
- package/dist/lib/slots/index.d.ts +3 -0
- package/dist/lib/slots/slot.types.d.ts +1 -1
- package/dist/lib/slots/slot.utils.d.ts +6 -4
- package/dist/lib/tools.d.ts +63 -0
- package/dist/lib/utils.d.ts +1 -1
- package/dist/public-api.d.ts +46 -0
- package/dist/styles.css +0 -69
- package/package.json +3 -3
- package/dist/components/chat/copilot-chat-assistant-message-buttons.component.d.ts +0 -75
- package/dist/components/chat/copilot-chat-assistant-message-renderer.component.d.ts +0 -31
- package/dist/components/chat/copilot-chat-assistant-message-toolbar.component.d.ts +0 -8
- package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +0 -132
- package/dist/components/chat/copilot-chat-buttons.component.d.ts +0 -66
- package/dist/components/chat/copilot-chat-input-defaults.d.ts +0 -37
- package/dist/components/chat/copilot-chat-input.component.d.ts +0 -133
- package/dist/components/chat/copilot-chat-message-view-cursor.component.d.ts +0 -15
- package/dist/components/chat/copilot-chat-textarea.component.d.ts +0 -45
- package/dist/components/chat/copilot-chat-tool-calls-view.component.d.ts +0 -35
- package/dist/components/chat/copilot-chat-toolbar.component.d.ts +0 -8
- package/dist/components/chat/copilot-chat-tools-menu.component.d.ts +0 -20
- package/dist/components/chat/copilot-chat-user-message-branch-navigation.component.d.ts +0 -23
- package/dist/components/chat/copilot-chat-user-message-buttons.component.d.ts +0 -39
- package/dist/components/chat/copilot-chat-user-message-renderer.component.d.ts +0 -9
- package/dist/components/chat/copilot-chat-user-message-toolbar.component.d.ts +0 -8
- package/dist/components/chat/copilot-chat-user-message.component.d.ts +0 -55
- package/dist/components/chat/copilot-chat-view-disclaimer.component.d.ts +0 -15
- package/dist/components/chat/copilot-chat-view-input-container.component.d.ts +0 -23
- package/dist/components/chat/copilot-chat-view-scroll-to-bottom-button.component.d.ts +0 -17
- package/dist/components/chat/copilot-chat-view-scroll-view.component.d.ts +0 -84
- package/dist/components/chat/copilot-chat-view.component.d.ts +0 -205
- package/dist/components/chat/copilot-chat.component.d.ts +0 -36
- package/dist/components/copilotkit-tool-render.component.d.ts +0 -25
- package/dist/core/chat-configuration/chat-configuration.providers.d.ts +0 -54
- package/dist/core/chat-configuration/chat-configuration.service.d.ts +0 -75
- package/dist/core/copilotkit.providers.d.ts +0 -13
- package/dist/core/copilotkit.service.d.ts +0 -119
- package/dist/core/copilotkit.types.d.ts +0 -81
- package/dist/directives/copilotkit-agent.directive.d.ts +0 -106
- package/dist/directives/copilotkit-chat-config.directive.d.ts +0 -84
- package/dist/directives/copilotkit-config.directive.d.ts +0 -44
- package/dist/directives/copilotkit-frontend-tool.directive.d.ts +0 -25
- package/dist/directives/copilotkit-human-in-the-loop.directive.d.ts +0 -124
- package/dist/directives/stick-to-bottom.directive.d.ts +0 -62
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-buttons.component.mjs +0 -384
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-renderer.component.mjs +0 -286
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-toolbar.component.mjs +0 -27
- package/dist/esm2022/components/chat/copilot-chat-assistant-message.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat-audio-recorder.component.mjs +0 -202
- package/dist/esm2022/components/chat/copilot-chat-buttons.component.mjs +0 -321
- package/dist/esm2022/components/chat/copilot-chat-input-defaults.mjs +0 -38
- package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +0 -666
- package/dist/esm2022/components/chat/copilot-chat-input.types.mjs +0 -10
- package/dist/esm2022/components/chat/copilot-chat-message-view-cursor.component.mjs +0 -45
- package/dist/esm2022/components/chat/copilot-chat-message-view.component.mjs +0 -296
- package/dist/esm2022/components/chat/copilot-chat-message-view.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat-textarea.component.mjs +0 -188
- package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +0 -222
- package/dist/esm2022/components/chat/copilot-chat-toolbar.component.mjs +0 -25
- package/dist/esm2022/components/chat/copilot-chat-tools-menu.component.mjs +0 -199
- package/dist/esm2022/components/chat/copilot-chat-user-message-branch-navigation.component.mjs +0 -137
- package/dist/esm2022/components/chat/copilot-chat-user-message-buttons.component.mjs +0 -207
- package/dist/esm2022/components/chat/copilot-chat-user-message-renderer.component.mjs +0 -35
- package/dist/esm2022/components/chat/copilot-chat-user-message-toolbar.component.mjs +0 -34
- package/dist/esm2022/components/chat/copilot-chat-user-message.component.mjs +0 -341
- package/dist/esm2022/components/chat/copilot-chat-user-message.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat-view-disclaimer.component.mjs +0 -52
- package/dist/esm2022/components/chat/copilot-chat-view-feather.component.mjs +0 -55
- package/dist/esm2022/components/chat/copilot-chat-view-handlers.service.mjs +0 -19
- package/dist/esm2022/components/chat/copilot-chat-view-input-container.component.mjs +0 -110
- package/dist/esm2022/components/chat/copilot-chat-view-scroll-to-bottom-button.component.mjs +0 -93
- package/dist/esm2022/components/chat/copilot-chat-view-scroll-view.component.mjs +0 -443
- package/dist/esm2022/components/chat/copilot-chat-view.component.mjs +0 -479
- package/dist/esm2022/components/chat/copilot-chat-view.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat.component.mjs +0 -220
- package/dist/esm2022/components/copilotkit-tool-render.component.mjs +0 -150
- package/dist/esm2022/core/chat-configuration/chat-configuration.providers.mjs +0 -65
- package/dist/esm2022/core/chat-configuration/chat-configuration.service.mjs +0 -145
- package/dist/esm2022/core/chat-configuration/chat-configuration.types.mjs +0 -26
- package/dist/esm2022/core/copilotkit.providers.mjs +0 -34
- package/dist/esm2022/core/copilotkit.service.mjs +0 -411
- package/dist/esm2022/core/copilotkit.types.mjs +0 -13
- package/dist/esm2022/directives/copilotkit-agent-context.directive.mjs +0 -130
- package/dist/esm2022/directives/copilotkit-agent.directive.mjs +0 -221
- package/dist/esm2022/directives/copilotkit-chat-config.directive.mjs +0 -218
- package/dist/esm2022/directives/copilotkit-config.directive.mjs +0 -94
- package/dist/esm2022/directives/copilotkit-frontend-tool.directive.mjs +0 -128
- package/dist/esm2022/directives/copilotkit-human-in-the-loop.directive.mjs +0 -265
- package/dist/esm2022/directives/stick-to-bottom.directive.mjs +0 -181
- package/dist/esm2022/lib/directives/tooltip.directive.mjs +0 -211
- package/dist/esm2022/lib/slots/copilot-slot.component.mjs +0 -154
- package/dist/esm2022/services/resize-observer.service.mjs +0 -152
- package/dist/esm2022/services/scroll-position.service.mjs +0 -124
- package/dist/esm2022/types/frontend-tool.mjs +0 -2
- package/dist/esm2022/types/human-in-the-loop.mjs +0 -2
- package/dist/esm2022/utils/agent-context.utils.mjs +0 -114
- package/dist/esm2022/utils/agent.utils.mjs +0 -212
- package/dist/esm2022/utils/chat-config.utils.mjs +0 -186
- package/dist/esm2022/utils/copilotkit.utils.mjs +0 -20
- package/dist/esm2022/utils/frontend-tool.utils.mjs +0 -224
- package/dist/esm2022/utils/human-in-the-loop.utils.mjs +0 -293
- package/dist/lib/directives/tooltip.directive.d.ts +0 -33
- package/dist/lib/slots/copilot-slot.component.d.ts +0 -34
- package/dist/types/frontend-tool.d.ts +0 -37
- package/dist/types/human-in-the-loop.d.ts +0 -44
- package/dist/utils/agent-context.utils.d.ts +0 -75
- package/dist/utils/agent.utils.d.ts +0 -108
- package/dist/utils/chat-config.utils.d.ts +0 -166
- package/dist/utils/copilotkit.utils.d.ts +0 -16
- package/dist/utils/frontend-tool.utils.d.ts +0 -119
- package/dist/utils/human-in-the-loop.utils.d.ts +0 -92
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGUgKi9cbmltcG9ydCB7IEFzc2lzdGFudE1lc3NhZ2UgfSBmcm9tIFwiQGFnLXVpL2NsaWVudFwiO1xuXG4vLyBDb250ZXh0IGludGVyZmFjZXMgZm9yIHNsb3RzXG5leHBvcnQgaW50ZXJmYWNlIEFzc2lzdGFudE1lc3NhZ2VNYXJrZG93blJlbmRlcmVyQ29udGV4dCB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3Npc3RhbnRNZXNzYWdlVG9vbGJhckNvbnRleHQge1xuICBjaGlsZHJlbj86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3Npc3RhbnRNZXNzYWdlQ29weUJ1dHRvbkNvbnRleHQge1xuICBjb250ZW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRodW1ic1VwQnV0dG9uQ29udGV4dCB7XG4gIC8vIEVtcHR5IGNvbnRleHQgLSBjbGljayBoYW5kbGVkIHZpYSBvdXRwdXRzIG1hcFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRodW1ic0Rvd25CdXR0b25Db250ZXh0IHtcbiAgLy8gRW1wdHkgY29udGV4dCAtIGNsaWNrIGhhbmRsZWQgdmlhIG91dHB1dHMgbWFwXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZEFsb3VkQnV0dG9uQ29udGV4dCB7XG4gIC8vIEVtcHR5IGNvbnRleHQgLSBjbGljayBoYW5kbGVkIHZpYSBvdXRwdXRzIG1hcFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2VuZXJhdGVCdXR0b25Db250ZXh0IHtcbiAgLy8gRW1wdHkgY29udGV4dCAtIGNsaWNrIGhhbmRsZWQgdmlhIG91dHB1dHMgbWFwXG59XG5cbi8vIEV2ZW50IGhhbmRsZXIgcHJvcHNcbmV4cG9ydCBpbnRlcmZhY2UgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlT25UaHVtYnNVcFByb3BzIHtcbiAgbWVzc2FnZTogQXNzaXN0YW50TWVzc2FnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VPblRodW1ic0Rvd25Qcm9wcyB7XG4gIG1lc3NhZ2U6IEFzc2lzdGFudE1lc3NhZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlT25SZWFkQWxvdWRQcm9wcyB7XG4gIG1lc3NhZ2U6IEFzc2lzdGFudE1lc3NhZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlT25SZWdlbmVyYXRlUHJvcHMge1xuICBtZXNzYWdlOiBBc3Npc3RhbnRNZXNzYWdlO1xufVxuXG4vLyBSZS1leHBvcnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEFzc2lzdGFudE1lc3NhZ2UgfTtcbiJdfQ==
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { Component, input, output, ViewChild, signal, computed, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
|
|
2
|
+
import { AudioRecorderError, } from "./copilot-chat-input.types";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class CopilotChatAudioRecorder {
|
|
5
|
+
canvasRef;
|
|
6
|
+
inputClass = input();
|
|
7
|
+
inputShowControls = input(false);
|
|
8
|
+
stateChange = output();
|
|
9
|
+
error = output();
|
|
10
|
+
// Signals for state management
|
|
11
|
+
state = signal("idle");
|
|
12
|
+
showControls = signal(false);
|
|
13
|
+
// Computed values
|
|
14
|
+
computedClass = computed(() => {
|
|
15
|
+
const baseClasses = "h-11 w-full px-5";
|
|
16
|
+
return `${baseClasses} ${this.inputClass() || ""}`;
|
|
17
|
+
});
|
|
18
|
+
statusText = computed(() => {
|
|
19
|
+
switch (this.state()) {
|
|
20
|
+
case "recording":
|
|
21
|
+
return "Recording...";
|
|
22
|
+
case "processing":
|
|
23
|
+
return "Processing...";
|
|
24
|
+
default:
|
|
25
|
+
return "Ready";
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// Animation and canvas properties
|
|
29
|
+
animationFrameId;
|
|
30
|
+
// Sync inputShowControls into internal signal
|
|
31
|
+
constructor() {
|
|
32
|
+
// Use microtask to avoid constructor signal writes complaint in some setups
|
|
33
|
+
Promise.resolve().then(() => {
|
|
34
|
+
this.showControls.set(this.inputShowControls() ?? false);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
ngAfterViewInit() {
|
|
38
|
+
this.startAnimation();
|
|
39
|
+
}
|
|
40
|
+
ngOnDestroy() {
|
|
41
|
+
this.dispose();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Start recording audio
|
|
45
|
+
*/
|
|
46
|
+
async start() {
|
|
47
|
+
try {
|
|
48
|
+
if (this.state() === "recording") {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.setState("recording");
|
|
52
|
+
this.startAnimation();
|
|
53
|
+
// In a real implementation, this would start actual audio recording
|
|
54
|
+
// For now, we just simulate the recording state
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const error = new AudioRecorderError(err instanceof Error ? err.message : "Failed to start recording");
|
|
58
|
+
this.error.emit(error);
|
|
59
|
+
this.setState("idle");
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Stop recording audio and return blob
|
|
65
|
+
*/
|
|
66
|
+
async stop() {
|
|
67
|
+
try {
|
|
68
|
+
this.setState("idle");
|
|
69
|
+
// Return empty blob - stub implementation
|
|
70
|
+
const emptyBlob = new Blob([], { type: "audio/webm" });
|
|
71
|
+
return emptyBlob;
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const error = new AudioRecorderError(err instanceof Error ? err.message : "Failed to stop recording");
|
|
75
|
+
this.error.emit(error);
|
|
76
|
+
this.setState("idle");
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get current recorder state
|
|
82
|
+
*/
|
|
83
|
+
getState() {
|
|
84
|
+
return this.state();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Dispose of resources
|
|
88
|
+
*/
|
|
89
|
+
dispose() {
|
|
90
|
+
this.stopAnimation();
|
|
91
|
+
}
|
|
92
|
+
setState(state) {
|
|
93
|
+
this.state.set(state);
|
|
94
|
+
this.stateChange.emit(state);
|
|
95
|
+
}
|
|
96
|
+
startAnimation() {
|
|
97
|
+
const canvas = this.canvasRef.nativeElement;
|
|
98
|
+
if (!canvas)
|
|
99
|
+
return;
|
|
100
|
+
const ctx = canvas.getContext("2d");
|
|
101
|
+
if (!ctx)
|
|
102
|
+
return;
|
|
103
|
+
const draw = () => {
|
|
104
|
+
const rect = canvas.getBoundingClientRect();
|
|
105
|
+
const dpr = window.devicePixelRatio || 1;
|
|
106
|
+
// Update canvas dimensions if container resized
|
|
107
|
+
if (canvas.width !== rect.width * dpr ||
|
|
108
|
+
canvas.height !== rect.height * dpr) {
|
|
109
|
+
canvas.width = rect.width * dpr;
|
|
110
|
+
canvas.height = rect.height * dpr;
|
|
111
|
+
ctx.scale(dpr, dpr);
|
|
112
|
+
ctx.imageSmoothingEnabled = false;
|
|
113
|
+
}
|
|
114
|
+
// Configuration
|
|
115
|
+
const barWidth = 2;
|
|
116
|
+
const minHeight = 2;
|
|
117
|
+
const maxHeight = 20;
|
|
118
|
+
const gap = 2;
|
|
119
|
+
const numSamples = Math.ceil(rect.width / (barWidth + gap));
|
|
120
|
+
// Get loudness data
|
|
121
|
+
const loudnessData = this.getLoudness(numSamples);
|
|
122
|
+
// Clear canvas
|
|
123
|
+
ctx.clearRect(0, 0, rect.width, rect.height);
|
|
124
|
+
// Get current foreground color
|
|
125
|
+
const computedStyle = getComputedStyle(canvas);
|
|
126
|
+
const currentForeground = computedStyle.color;
|
|
127
|
+
// Draw bars
|
|
128
|
+
ctx.fillStyle = currentForeground;
|
|
129
|
+
const centerY = rect.height / 2;
|
|
130
|
+
for (let i = 0; i < loudnessData.length; i++) {
|
|
131
|
+
const sample = loudnessData[i] ?? 0;
|
|
132
|
+
const barHeight = Math.round(sample * (maxHeight - minHeight) + minHeight);
|
|
133
|
+
const x = Math.round(i * (barWidth + gap));
|
|
134
|
+
const y = Math.round(centerY - barHeight / 2);
|
|
135
|
+
ctx.fillRect(x, y, barWidth, barHeight);
|
|
136
|
+
}
|
|
137
|
+
this.animationFrameId = requestAnimationFrame(draw);
|
|
138
|
+
};
|
|
139
|
+
draw();
|
|
140
|
+
}
|
|
141
|
+
stopAnimation() {
|
|
142
|
+
if (this.animationFrameId) {
|
|
143
|
+
cancelAnimationFrame(this.animationFrameId);
|
|
144
|
+
this.animationFrameId = undefined;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
getLoudness(n) {
|
|
148
|
+
const elapsed = Date.now() / 1000; // Use current timestamp directly
|
|
149
|
+
const samples = [];
|
|
150
|
+
for (let i = 0; i < n; i++) {
|
|
151
|
+
// Create a position that moves from left to right over time
|
|
152
|
+
const position = (i / n) * 10 + elapsed * 0.5; // Scroll speed (slower)
|
|
153
|
+
// Generate waveform using multiple sine waves for realism
|
|
154
|
+
const wave1 = Math.sin(position * 2) * 0.3;
|
|
155
|
+
const wave2 = Math.sin(position * 5 + elapsed) * 0.2;
|
|
156
|
+
const wave3 = Math.sin(position * 0.5 + elapsed * 0.3) * 0.4;
|
|
157
|
+
// Add some randomness for natural variation
|
|
158
|
+
const noise = (Math.random() - 0.5) * 0.1;
|
|
159
|
+
// Combine waves and add envelope for realistic amplitude variation
|
|
160
|
+
const envelope = Math.sin(elapsed * 0.7) * 0.5 + 0.5; // Slow amplitude modulation
|
|
161
|
+
let amplitude = (wave1 + wave2 + wave3 + noise) * envelope;
|
|
162
|
+
// Clamp to 0-1 range
|
|
163
|
+
amplitude = Math.max(0, Math.min(1, amplitude * 0.5 + 0.3));
|
|
164
|
+
samples.push(amplitude);
|
|
165
|
+
}
|
|
166
|
+
return samples;
|
|
167
|
+
}
|
|
168
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatAudioRecorder, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
169
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatAudioRecorder, isStandalone: true, selector: "copilot-chat-audio-recorder", inputs: { inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, inputShowControls: { classPropertyName: "inputShowControls", publicName: "inputShowControls", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stateChange: "stateChange", error: "error" }, host: { properties: { "class.copilot-chat-audio-recorder": "true" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvasRef"], descendants: true, static: true }], ngImport: i0, template: `
|
|
170
|
+
<div [class]="computedClass()">
|
|
171
|
+
<canvas
|
|
172
|
+
#canvasRef
|
|
173
|
+
class="w-full h-full"
|
|
174
|
+
[style.imageRendering]="'pixelated'"
|
|
175
|
+
></canvas>
|
|
176
|
+
</div>
|
|
177
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
178
|
+
}
|
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatAudioRecorder, decorators: [{
|
|
180
|
+
type: Component,
|
|
181
|
+
args: [{ selector: "copilot-chat-audio-recorder", standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
182
|
+
<div [class]="computedClass()">
|
|
183
|
+
<canvas
|
|
184
|
+
#canvasRef
|
|
185
|
+
class="w-full h-full"
|
|
186
|
+
[style.imageRendering]="'pixelated'"
|
|
187
|
+
></canvas>
|
|
188
|
+
</div>
|
|
189
|
+
`, host: {
|
|
190
|
+
"[class.copilot-chat-audio-recorder]": "true",
|
|
191
|
+
} }]
|
|
192
|
+
}], ctorParameters: () => [], propDecorators: { canvasRef: [{
|
|
193
|
+
type: ViewChild,
|
|
194
|
+
args: ["canvasRef", { static: true }]
|
|
195
|
+
}] } });
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LWF1ZGlvLXJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LWF1ZGlvLXJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBSVQsTUFBTSxFQUNOLFFBQVEsRUFDUix1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxrQkFBa0IsR0FDbkIsTUFBTSw0QkFBNEIsQ0FBQzs7QUFxQnBDLE1BQU0sT0FBTyx3QkFBd0I7SUFFbkMsU0FBUyxDQUFpQztJQUUxQyxVQUFVLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBQ3pDLGlCQUFpQixHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUUxQyxXQUFXLEdBQUcsTUFBTSxFQUFzQixDQUFDO0lBQzNDLEtBQUssR0FBRyxNQUFNLEVBQXNCLENBQUM7SUFFckMsK0JBQStCO0lBQy9CLEtBQUssR0FBRyxNQUFNLENBQXFCLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLFlBQVksR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFdEMsa0JBQWtCO0lBQ2xCLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQzVCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO1FBQ3ZDLE9BQU8sR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNyQixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxjQUFjLENBQUM7WUFD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QyxHQUFHLFFBQVEsQ0FBQztZQUUzRCxxQkFBcUI7WUFDckIsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUU1RCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO3dHQTlNVSx3QkFBd0I7NEZBQXhCLHdCQUF3Qiw0bkJBZHpCOzs7Ozs7OztHQVFUOzs0RkFNVSx3QkFBd0I7a0JBbkJwQyxTQUFTOytCQUNFLDZCQUE2QixjQUMzQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksWUFDM0I7Ozs7Ozs7O0dBUVQsUUFFSzt3QkFDSixxQ0FBcUMsRUFBRSxNQUFNO3FCQUM5Qzt3REFJRCxTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEF1ZGlvUmVjb3JkZXJTdGF0ZSxcbiAgQXVkaW9SZWNvcmRlckVycm9yLFxufSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtaW5wdXQudHlwZXNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC1hdWRpby1yZWNvcmRlclwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENsYXNzKClcIj5cbiAgICAgIDxjYW52YXNcbiAgICAgICAgI2NhbnZhc1JlZlxuICAgICAgICBjbGFzcz1cInctZnVsbCBoLWZ1bGxcIlxuICAgICAgICBbc3R5bGUuaW1hZ2VSZW5kZXJpbmddPVwiJ3BpeGVsYXRlZCdcIlxuICAgICAgPjwvY2FudmFzPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtdLFxuICBob3N0OiB7XG4gICAgXCJbY2xhc3MuY29waWxvdC1jaGF0LWF1ZGlvLXJlY29yZGVyXVwiOiBcInRydWVcIixcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRBdWRpb1JlY29yZGVyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChcImNhbnZhc1JlZlwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBjYW52YXNSZWYhOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcblxuICBpbnB1dENsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICBpbnB1dFNob3dDb250cm9scyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBzdGF0ZUNoYW5nZSA9IG91dHB1dDxBdWRpb1JlY29yZGVyU3RhdGU+KCk7XG4gIGVycm9yID0gb3V0cHV0PEF1ZGlvUmVjb3JkZXJFcnJvcj4oKTtcblxuICAvLyBTaWduYWxzIGZvciBzdGF0ZSBtYW5hZ2VtZW50XG4gIHN0YXRlID0gc2lnbmFsPEF1ZGlvUmVjb3JkZXJTdGF0ZT4oXCJpZGxlXCIpO1xuICBzaG93Q29udHJvbHMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIENvbXB1dGVkIHZhbHVlc1xuICBjb21wdXRlZENsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gXCJoLTExIHctZnVsbCBweC01XCI7XG4gICAgcmV0dXJuIGAke2Jhc2VDbGFzc2VzfSAke3RoaXMuaW5wdXRDbGFzcygpIHx8IFwiXCJ9YDtcbiAgfSk7XG5cbiAgc3RhdHVzVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc3RhdGUoKSkge1xuICAgICAgY2FzZSBcInJlY29yZGluZ1wiOlxuICAgICAgICByZXR1cm4gXCJSZWNvcmRpbmcuLi5cIjtcbiAgICAgIGNhc2UgXCJwcm9jZXNzaW5nXCI6XG4gICAgICAgIHJldHVybiBcIlByb2Nlc3NpbmcuLi5cIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcIlJlYWR5XCI7XG4gICAgfVxuICB9KTtcblxuICAvLyBBbmltYXRpb24gYW5kIGNhbnZhcyBwcm9wZXJ0aWVzXG4gIHByaXZhdGUgYW5pbWF0aW9uRnJhbWVJZD86IG51bWJlcjtcblxuICAvLyBTeW5jIGlucHV0U2hvd0NvbnRyb2xzIGludG8gaW50ZXJuYWwgc2lnbmFsXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFVzZSBtaWNyb3Rhc2sgdG8gYXZvaWQgY29uc3RydWN0b3Igc2lnbmFsIHdyaXRlcyBjb21wbGFpbnQgaW4gc29tZSBzZXR1cHNcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0NvbnRyb2xzLnNldCh0aGlzLmlucHV0U2hvd0NvbnRyb2xzKCkgPz8gZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhcnRBbmltYXRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHJlY29yZGluZyBhdWRpb1xuICAgKi9cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnN0YXRlKCkgPT09IFwicmVjb3JkaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKFwicmVjb3JkaW5nXCIpO1xuICAgICAgdGhpcy5zdGFydEFuaW1hdGlvbigpO1xuXG4gICAgICAvLyBJbiBhIHJlYWwgaW1wbGVtZW50YXRpb24sIHRoaXMgd291bGQgc3RhcnQgYWN0dWFsIGF1ZGlvIHJlY29yZGluZ1xuICAgICAgLy8gRm9yIG5vdywgd2UganVzdCBzaW11bGF0ZSB0aGUgcmVjb3JkaW5nIHN0YXRlXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBBdWRpb1JlY29yZGVyRXJyb3IoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBcIkZhaWxlZCB0byBzdGFydCByZWNvcmRpbmdcIlxuICAgICAgKTtcbiAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcik7XG4gICAgICB0aGlzLnNldFN0YXRlKFwiaWRsZVwiKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHJlY29yZGluZyBhdWRpbyBhbmQgcmV0dXJuIGJsb2JcbiAgICovXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXCJpZGxlXCIpO1xuICAgICAgLy8gUmV0dXJuIGVtcHR5IGJsb2IgLSBzdHViIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBlbXB0eUJsb2IgPSBuZXcgQmxvYihbXSwgeyB0eXBlOiBcImF1ZGlvL3dlYm1cIiB9KTtcbiAgICAgIHJldHVybiBlbXB0eUJsb2I7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBBdWRpb1JlY29yZGVyRXJyb3IoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBcIkZhaWxlZCB0byBzdG9wIHJlY29yZGluZ1wiXG4gICAgICApO1xuICAgICAgdGhpcy5lcnJvci5lbWl0KGVycm9yKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXCJpZGxlXCIpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHJlY29yZGVyIHN0YXRlXG4gICAqL1xuICBnZXRTdGF0ZSgpOiBBdWRpb1JlY29yZGVyU3RhdGUge1xuICAgIHJldHVybiB0aGlzLnN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSBvZiByZXNvdXJjZXNcbiAgICovXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wQW5pbWF0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFN0YXRlKHN0YXRlOiBBdWRpb1JlY29yZGVyU3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlLnNldChzdGF0ZSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRBbmltYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5jYW52YXNSZWYubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNhbnZhcykgcmV0dXJuO1xuXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZHJhdyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuXG4gICAgICAvLyBVcGRhdGUgY2FudmFzIGRpbWVuc2lvbnMgaWYgY29udGFpbmVyIHJlc2l6ZWRcbiAgICAgIGlmIChcbiAgICAgICAgY2FudmFzLndpZHRoICE9PSByZWN0LndpZHRoICogZHByIHx8XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgIT09IHJlY3QuaGVpZ2h0ICogZHByXG4gICAgICApIHtcbiAgICAgICAgY2FudmFzLndpZHRoID0gcmVjdC53aWR0aCAqIGRwcjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IHJlY3QuaGVpZ2h0ICogZHByO1xuICAgICAgICBjdHguc2NhbGUoZHByLCBkcHIpO1xuICAgICAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbmZpZ3VyYXRpb25cbiAgICAgIGNvbnN0IGJhcldpZHRoID0gMjtcbiAgICAgIGNvbnN0IG1pbkhlaWdodCA9IDI7XG4gICAgICBjb25zdCBtYXhIZWlnaHQgPSAyMDtcbiAgICAgIGNvbnN0IGdhcCA9IDI7XG4gICAgICBjb25zdCBudW1TYW1wbGVzID0gTWF0aC5jZWlsKHJlY3Qud2lkdGggLyAoYmFyV2lkdGggKyBnYXApKTtcblxuICAgICAgLy8gR2V0IGxvdWRuZXNzIGRhdGFcbiAgICAgIGNvbnN0IGxvdWRuZXNzRGF0YSA9IHRoaXMuZ2V0TG91ZG5lc3MobnVtU2FtcGxlcyk7XG5cbiAgICAgIC8vIENsZWFyIGNhbnZhc1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7XG5cbiAgICAgIC8vIEdldCBjdXJyZW50IGZvcmVncm91bmQgY29sb3JcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGNhbnZhcyk7XG4gICAgICBjb25zdCBjdXJyZW50Rm9yZWdyb3VuZCA9IGNvbXB1dGVkU3R5bGUuY29sb3I7XG5cbiAgICAgIC8vIERyYXcgYmFyc1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IGN1cnJlbnRGb3JlZ3JvdW5kO1xuICAgICAgY29uc3QgY2VudGVyWSA9IHJlY3QuaGVpZ2h0IC8gMjtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb3VkbmVzc0RhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc2FtcGxlID0gbG91ZG5lc3NEYXRhW2ldID8/IDA7XG4gICAgICAgIGNvbnN0IGJhckhlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgc2FtcGxlICogKG1heEhlaWdodCAtIG1pbkhlaWdodCkgKyBtaW5IZWlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgeCA9IE1hdGgucm91bmQoaSAqIChiYXJXaWR0aCArIGdhcCkpO1xuICAgICAgICBjb25zdCB5ID0gTWF0aC5yb3VuZChjZW50ZXJZIC0gYmFySGVpZ2h0IC8gMik7XG5cbiAgICAgICAgY3R4LmZpbGxSZWN0KHgsIHksIGJhcldpZHRoLCBiYXJIZWlnaHQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZHJhdyk7XG4gICAgfTtcblxuICAgIGRyYXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcEFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbmltYXRpb25GcmFtZUlkKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbkZyYW1lSWQpO1xuICAgICAgdGhpcy5hbmltYXRpb25GcmFtZUlkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG91ZG5lc3MobjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC8gMTAwMDsgLy8gVXNlIGN1cnJlbnQgdGltZXN0YW1wIGRpcmVjdGx5XG4gICAgY29uc3Qgc2FtcGxlczogbnVtYmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBDcmVhdGUgYSBwb3NpdGlvbiB0aGF0IG1vdmVzIGZyb20gbGVmdCB0byByaWdodCBvdmVyIHRpbWVcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gKGkgLyBuKSAqIDEwICsgZWxhcHNlZCAqIDAuNTsgLy8gU2Nyb2xsIHNwZWVkIChzbG93ZXIpXG5cbiAgICAgIC8vIEdlbmVyYXRlIHdhdmVmb3JtIHVzaW5nIG11bHRpcGxlIHNpbmUgd2F2ZXMgZm9yIHJlYWxpc21cbiAgICAgIGNvbnN0IHdhdmUxID0gTWF0aC5zaW4ocG9zaXRpb24gKiAyKSAqIDAuMztcbiAgICAgIGNvbnN0IHdhdmUyID0gTWF0aC5zaW4ocG9zaXRpb24gKiA1ICsgZWxhcHNlZCkgKiAwLjI7XG4gICAgICBjb25zdCB3YXZlMyA9IE1hdGguc2luKHBvc2l0aW9uICogMC41ICsgZWxhcHNlZCAqIDAuMykgKiAwLjQ7XG5cbiAgICAgIC8vIEFkZCBzb21lIHJhbmRvbW5lc3MgZm9yIG5hdHVyYWwgdmFyaWF0aW9uXG4gICAgICBjb25zdCBub2lzZSA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuMTtcblxuICAgICAgLy8gQ29tYmluZSB3YXZlcyBhbmQgYWRkIGVudmVsb3BlIGZvciByZWFsaXN0aWMgYW1wbGl0dWRlIHZhcmlhdGlvblxuICAgICAgY29uc3QgZW52ZWxvcGUgPSBNYXRoLnNpbihlbGFwc2VkICogMC43KSAqIDAuNSArIDAuNTsgLy8gU2xvdyBhbXBsaXR1ZGUgbW9kdWxhdGlvblxuICAgICAgbGV0IGFtcGxpdHVkZSA9ICh3YXZlMSArIHdhdmUyICsgd2F2ZTMgKyBub2lzZSkgKiBlbnZlbG9wZTtcblxuICAgICAgLy8gQ2xhbXAgdG8gMC0xIHJhbmdlXG4gICAgICBhbXBsaXR1ZGUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhbXBsaXR1ZGUgKiAwLjUgKyAwLjMpKTtcblxuICAgICAgc2FtcGxlcy5wdXNoKGFtcGxpdHVkZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhbXBsZXM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { Component, input, output, ChangeDetectionStrategy, signal, computed, ViewEncapsulation, } from "@angular/core";
|
|
2
|
+
import { CommonModule } from "@angular/common";
|
|
3
|
+
import { LucideAngularModule, ArrowUp, Mic, X, Check, Plus, } from "lucide-angular";
|
|
4
|
+
import { injectChatLabels } from "../../chat-config";
|
|
5
|
+
import { CopilotTooltip } from "../../directives/tooltip";
|
|
6
|
+
import { cn } from "../../utils";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "lucide-angular";
|
|
9
|
+
// Base button classes matching React's button variants
|
|
10
|
+
const buttonBase = cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium", "transition-all disabled:pointer-events-none disabled:opacity-50", "shrink-0 outline-none", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]");
|
|
11
|
+
const chatInputToolbarPrimary = cn("cursor-pointer",
|
|
12
|
+
// Background and text
|
|
13
|
+
"bg-black text-white",
|
|
14
|
+
// Dark mode
|
|
15
|
+
"dark:bg-white dark:text-black dark:focus-visible:outline-white",
|
|
16
|
+
// Shape and sizing
|
|
17
|
+
"rounded-full h-9 w-9",
|
|
18
|
+
// Interactions
|
|
19
|
+
"transition-colors",
|
|
20
|
+
// Focus states
|
|
21
|
+
"focus:outline-none",
|
|
22
|
+
// Hover states
|
|
23
|
+
"hover:opacity-70 disabled:hover:opacity-100",
|
|
24
|
+
// Disabled states
|
|
25
|
+
"disabled:cursor-not-allowed disabled:bg-[#00000014] disabled:text-[rgb(13,13,13)]", "dark:disabled:bg-[#454545] dark:disabled:text-white");
|
|
26
|
+
const chatInputToolbarSecondary = cn("cursor-pointer",
|
|
27
|
+
// Background and text
|
|
28
|
+
"bg-transparent text-[#444444]",
|
|
29
|
+
// Dark mode
|
|
30
|
+
"dark:text-white dark:border-[#404040]",
|
|
31
|
+
// Shape and sizing
|
|
32
|
+
"rounded-full h-9 w-9",
|
|
33
|
+
// Interactions
|
|
34
|
+
"transition-colors",
|
|
35
|
+
// Focus states
|
|
36
|
+
"focus:outline-none",
|
|
37
|
+
// Hover states
|
|
38
|
+
"hover:bg-[#f8f8f8] hover:text-[#333333]", "dark:hover:bg-[#404040] dark:hover:text-[#FFFFFF]",
|
|
39
|
+
// Disabled states
|
|
40
|
+
"disabled:cursor-not-allowed disabled:opacity-50", "disabled:hover:bg-transparent disabled:hover:text-[#444444]", "dark:disabled:hover:bg-transparent dark:disabled:hover:text-[#CCCCCC]");
|
|
41
|
+
export class CopilotChatSendButton {
|
|
42
|
+
disabled = input(false);
|
|
43
|
+
clicked = output();
|
|
44
|
+
ArrowUpIcon = ArrowUp;
|
|
45
|
+
buttonClass = cn(buttonBase, chatInputToolbarPrimary);
|
|
46
|
+
onClick() {
|
|
47
|
+
if (!this.disabled) {
|
|
48
|
+
this.clicked.emit();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatSendButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
52
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatSendButton, isStandalone: true, selector: "copilot-chat-send-button", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
|
|
53
|
+
<div class="mr-[10px]">
|
|
54
|
+
<button
|
|
55
|
+
type="button"
|
|
56
|
+
[disabled]="disabled()"
|
|
57
|
+
[class]="buttonClass"
|
|
58
|
+
(click)="onClick()"
|
|
59
|
+
>
|
|
60
|
+
<lucide-angular [img]="ArrowUpIcon" [size]="18"></lucide-angular>
|
|
61
|
+
</button>
|
|
62
|
+
</div>
|
|
63
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
64
|
+
}
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatSendButton, decorators: [{
|
|
66
|
+
type: Component,
|
|
67
|
+
args: [{ standalone: true, selector: "copilot-chat-send-button", imports: [CommonModule, LucideAngularModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
68
|
+
<div class="mr-[10px]">
|
|
69
|
+
<button
|
|
70
|
+
type="button"
|
|
71
|
+
[disabled]="disabled()"
|
|
72
|
+
[class]="buttonClass"
|
|
73
|
+
(click)="onClick()"
|
|
74
|
+
>
|
|
75
|
+
<lucide-angular [img]="ArrowUpIcon" [size]="18"></lucide-angular>
|
|
76
|
+
</button>
|
|
77
|
+
</div>
|
|
78
|
+
` }]
|
|
79
|
+
}] });
|
|
80
|
+
export class CopilotChatStartTranscribeButton {
|
|
81
|
+
disabled = input(false);
|
|
82
|
+
clicked = output();
|
|
83
|
+
labels = injectChatLabels();
|
|
84
|
+
MicIcon = Mic;
|
|
85
|
+
buttonClass = cn(buttonBase, chatInputToolbarSecondary, "mr-2");
|
|
86
|
+
get label() {
|
|
87
|
+
return this.labels.chatInputToolbarStartTranscribeButtonLabel;
|
|
88
|
+
}
|
|
89
|
+
onClick() {
|
|
90
|
+
if (!this.disabled()) {
|
|
91
|
+
this.clicked.emit();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatStartTranscribeButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
95
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatStartTranscribeButton, isStandalone: true, selector: "copilot-chat-start-transcribe-button", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
|
|
96
|
+
<button
|
|
97
|
+
type="button"
|
|
98
|
+
[disabled]="disabled()"
|
|
99
|
+
[class]="buttonClass"
|
|
100
|
+
[copilotTooltip]="label"
|
|
101
|
+
tooltipPosition="below"
|
|
102
|
+
(click)="onClick()"
|
|
103
|
+
>
|
|
104
|
+
<lucide-angular [img]="MicIcon" [size]="18"></lucide-angular>
|
|
105
|
+
</button>
|
|
106
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "directive", type: CopilotTooltip, selector: "[copilotTooltip]", inputs: ["copilotTooltip", "tooltipPosition", "tooltipDelay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
107
|
+
}
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatStartTranscribeButton, decorators: [{
|
|
109
|
+
type: Component,
|
|
110
|
+
args: [{ standalone: true, selector: "copilot-chat-start-transcribe-button", imports: [CommonModule, LucideAngularModule, CopilotTooltip], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
111
|
+
<button
|
|
112
|
+
type="button"
|
|
113
|
+
[disabled]="disabled()"
|
|
114
|
+
[class]="buttonClass"
|
|
115
|
+
[copilotTooltip]="label"
|
|
116
|
+
tooltipPosition="below"
|
|
117
|
+
(click)="onClick()"
|
|
118
|
+
>
|
|
119
|
+
<lucide-angular [img]="MicIcon" [size]="18"></lucide-angular>
|
|
120
|
+
</button>
|
|
121
|
+
` }]
|
|
122
|
+
}] });
|
|
123
|
+
export class CopilotChatCancelTranscribeButton {
|
|
124
|
+
disabled = input(false);
|
|
125
|
+
clicked = output();
|
|
126
|
+
labels = injectChatLabels();
|
|
127
|
+
XIcon = X;
|
|
128
|
+
buttonClass = cn(buttonBase, chatInputToolbarSecondary, "mr-2");
|
|
129
|
+
get label() {
|
|
130
|
+
return this.labels.chatInputToolbarCancelTranscribeButtonLabel;
|
|
131
|
+
}
|
|
132
|
+
onClick() {
|
|
133
|
+
if (!this.disabled()) {
|
|
134
|
+
this.clicked.emit();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatCancelTranscribeButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
138
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatCancelTranscribeButton, isStandalone: true, selector: "copilot-chat-cancel-transcribe-button", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
|
|
139
|
+
<button
|
|
140
|
+
type="button"
|
|
141
|
+
[disabled]="disabled()"
|
|
142
|
+
[class]="buttonClass"
|
|
143
|
+
[copilotTooltip]="label"
|
|
144
|
+
tooltipPosition="below"
|
|
145
|
+
(click)="onClick()"
|
|
146
|
+
>
|
|
147
|
+
<lucide-angular [img]="XIcon" [size]="18"></lucide-angular>
|
|
148
|
+
</button>
|
|
149
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "directive", type: CopilotTooltip, selector: "[copilotTooltip]", inputs: ["copilotTooltip", "tooltipPosition", "tooltipDelay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatCancelTranscribeButton, decorators: [{
|
|
152
|
+
type: Component,
|
|
153
|
+
args: [{ standalone: true, selector: "copilot-chat-cancel-transcribe-button", imports: [CommonModule, LucideAngularModule, CopilotTooltip], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
154
|
+
<button
|
|
155
|
+
type="button"
|
|
156
|
+
[disabled]="disabled()"
|
|
157
|
+
[class]="buttonClass"
|
|
158
|
+
[copilotTooltip]="label"
|
|
159
|
+
tooltipPosition="below"
|
|
160
|
+
(click)="onClick()"
|
|
161
|
+
>
|
|
162
|
+
<lucide-angular [img]="XIcon" [size]="18"></lucide-angular>
|
|
163
|
+
</button>
|
|
164
|
+
` }]
|
|
165
|
+
}] });
|
|
166
|
+
export class CopilotChatFinishTranscribeButton {
|
|
167
|
+
disabled = input(false);
|
|
168
|
+
clicked = output();
|
|
169
|
+
labels = injectChatLabels();
|
|
170
|
+
CheckIcon = Check;
|
|
171
|
+
buttonClass = cn(buttonBase, chatInputToolbarSecondary, "mr-[10px]");
|
|
172
|
+
get label() {
|
|
173
|
+
return this.labels.chatInputToolbarFinishTranscribeButtonLabel;
|
|
174
|
+
}
|
|
175
|
+
onClick() {
|
|
176
|
+
if (!this.disabled()) {
|
|
177
|
+
this.clicked.emit();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatFinishTranscribeButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
181
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatFinishTranscribeButton, isStandalone: true, selector: "copilot-chat-finish-transcribe-button", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
|
|
182
|
+
<button
|
|
183
|
+
type="button"
|
|
184
|
+
[disabled]="disabled()"
|
|
185
|
+
[class]="buttonClass"
|
|
186
|
+
[copilotTooltip]="label"
|
|
187
|
+
tooltipPosition="below"
|
|
188
|
+
(click)="onClick()"
|
|
189
|
+
>
|
|
190
|
+
<lucide-angular [img]="CheckIcon" [size]="18"></lucide-angular>
|
|
191
|
+
</button>
|
|
192
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "directive", type: CopilotTooltip, selector: "[copilotTooltip]", inputs: ["copilotTooltip", "tooltipPosition", "tooltipDelay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
193
|
+
}
|
|
194
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatFinishTranscribeButton, decorators: [{
|
|
195
|
+
type: Component,
|
|
196
|
+
args: [{ standalone: true, selector: "copilot-chat-finish-transcribe-button", imports: [CommonModule, LucideAngularModule, CopilotTooltip], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
197
|
+
<button
|
|
198
|
+
type="button"
|
|
199
|
+
[disabled]="disabled()"
|
|
200
|
+
[class]="buttonClass"
|
|
201
|
+
[copilotTooltip]="label"
|
|
202
|
+
tooltipPosition="below"
|
|
203
|
+
(click)="onClick()"
|
|
204
|
+
>
|
|
205
|
+
<lucide-angular [img]="CheckIcon" [size]="18"></lucide-angular>
|
|
206
|
+
</button>
|
|
207
|
+
` }]
|
|
208
|
+
}] });
|
|
209
|
+
export class CopilotChatAddFileButton {
|
|
210
|
+
disabled = input(false);
|
|
211
|
+
clicked = output();
|
|
212
|
+
labels = injectChatLabels();
|
|
213
|
+
PlusIcon = Plus;
|
|
214
|
+
buttonClass = cn(buttonBase, chatInputToolbarSecondary, "ml-2");
|
|
215
|
+
get label() {
|
|
216
|
+
return this.labels.chatInputToolbarAddButtonLabel;
|
|
217
|
+
}
|
|
218
|
+
onClick() {
|
|
219
|
+
if (!this.disabled()) {
|
|
220
|
+
this.clicked.emit();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatAddFileButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
224
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChatAddFileButton, isStandalone: true, selector: "copilot-chat-add-file-button", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, ngImport: i0, template: `
|
|
225
|
+
<button
|
|
226
|
+
type="button"
|
|
227
|
+
[disabled]="disabled()"
|
|
228
|
+
[class]="buttonClass"
|
|
229
|
+
[copilotTooltip]="label"
|
|
230
|
+
tooltipPosition="below"
|
|
231
|
+
(click)="onClick()"
|
|
232
|
+
>
|
|
233
|
+
<lucide-angular [img]="PlusIcon" [size]="20"></lucide-angular>
|
|
234
|
+
</button>
|
|
235
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "directive", type: CopilotTooltip, selector: "[copilotTooltip]", inputs: ["copilotTooltip", "tooltipPosition", "tooltipDelay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
236
|
+
}
|
|
237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatAddFileButton, decorators: [{
|
|
238
|
+
type: Component,
|
|
239
|
+
args: [{ standalone: true, selector: "copilot-chat-add-file-button", imports: [CommonModule, LucideAngularModule, CopilotTooltip], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
240
|
+
<button
|
|
241
|
+
type="button"
|
|
242
|
+
[disabled]="disabled()"
|
|
243
|
+
[class]="buttonClass"
|
|
244
|
+
[copilotTooltip]="label"
|
|
245
|
+
tooltipPosition="below"
|
|
246
|
+
(click)="onClick()"
|
|
247
|
+
>
|
|
248
|
+
<lucide-angular [img]="PlusIcon" [size]="20"></lucide-angular>
|
|
249
|
+
</button>
|
|
250
|
+
` }]
|
|
251
|
+
}] });
|
|
252
|
+
// Base toolbar button component that other buttons can use
|
|
253
|
+
export class CopilotChatToolbarButton {
|
|
254
|
+
disabled = signal(false);
|
|
255
|
+
variant = signal("secondary");
|
|
256
|
+
customClass = signal("");
|
|
257
|
+
title = signal("");
|
|
258
|
+
clicked = output();
|
|
259
|
+
computedClass = computed(() => {
|
|
260
|
+
const variantClass = this.variant() === "primary"
|
|
261
|
+
? chatInputToolbarPrimary
|
|
262
|
+
: chatInputToolbarSecondary;
|
|
263
|
+
return cn(buttonBase, variantClass, this.customClass());
|
|
264
|
+
});
|
|
265
|
+
onClick() {
|
|
266
|
+
if (!this.disabled()) {
|
|
267
|
+
this.clicked.emit();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolbarButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
271
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatToolbarButton, isStandalone: true, selector: "copilot-chat-toolbar-button", outputs: { clicked: "clicked" }, ngImport: i0, template: `
|
|
272
|
+
<button
|
|
273
|
+
type="button"
|
|
274
|
+
[disabled]="disabled()"
|
|
275
|
+
[class]="computedClass()"
|
|
276
|
+
[copilotTooltip]="title()"
|
|
277
|
+
tooltipPosition="below"
|
|
278
|
+
(click)="onClick()"
|
|
279
|
+
>
|
|
280
|
+
<ng-content></ng-content>
|
|
281
|
+
</button>
|
|
282
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: CopilotTooltip, selector: "[copilotTooltip]", inputs: ["copilotTooltip", "tooltipPosition", "tooltipDelay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
283
|
+
}
|
|
284
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatToolbarButton, decorators: [{
|
|
285
|
+
type: Component,
|
|
286
|
+
args: [{ standalone: true, selector: "copilot-chat-toolbar-button", imports: [CommonModule, CopilotTooltip], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
287
|
+
<button
|
|
288
|
+
type="button"
|
|
289
|
+
[disabled]="disabled()"
|
|
290
|
+
[class]="computedClass()"
|
|
291
|
+
[copilotTooltip]="title()"
|
|
292
|
+
tooltipPosition="below"
|
|
293
|
+
(click)="onClick()"
|
|
294
|
+
>
|
|
295
|
+
<ng-content></ng-content>
|
|
296
|
+
</button>
|
|
297
|
+
` }]
|
|
298
|
+
}] });
|
|
299
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LWJ1dHRvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtYnV0dG9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sdUJBQXVCLEVBQ3ZCLE1BQU0sRUFDTixRQUFRLEVBQ1IsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLE9BQU8sRUFDUCxHQUFHLEVBQ0gsQ0FBQyxFQUNELEtBQUssRUFDTCxJQUFJLEdBQ0wsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7O0FBRWpDLHVEQUF1RDtBQUN2RCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQ25CLGdHQUFnRyxFQUNoRyxpRUFBaUUsRUFDakUsdUJBQXVCLEVBQ3ZCLCtFQUErRSxDQUNoRixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQ2hDLGdCQUFnQjtBQUNoQixzQkFBc0I7QUFDdEIscUJBQXFCO0FBQ3JCLFlBQVk7QUFDWixnRUFBZ0U7QUFDaEUsbUJBQW1CO0FBQ25CLHNCQUFzQjtBQUN0QixlQUFlO0FBQ2YsbUJBQW1CO0FBQ25CLGVBQWU7QUFDZixvQkFBb0I7QUFDcEIsZUFBZTtBQUNmLDZDQUE2QztBQUM3QyxrQkFBa0I7QUFDbEIsbUZBQW1GLEVBQ25GLHFEQUFxRCxDQUN0RCxDQUFDO0FBRUYsTUFBTSx5QkFBeUIsR0FBRyxFQUFF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YUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDNUIsTUFBTSxZQUFZLEdBQ2hCLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxTQUFTO1lBQzFCLENBQUMsQ0FBQyx1QkFBdUI7WUFDekIsQ0FBQyxDQUFDLHlCQUF5QixDQUFDO1FBQ2hDLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7d0dBcEJVLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLHdIQWR6Qjs7Ozs7Ozs7Ozs7R0FXVCx5RUFkUyxZQUFZLCtCQUFFLGNBQWM7OzRGQWlCM0Isd0JBQXdCO2tCQXBCcEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sNkJBQTZCLFdBQzlCLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxtQkFDdEIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxZQUMzQjs7Ozs7Ozs7Ozs7R0FXVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgTHVjaWRlQW5ndWxhck1vZHVsZSxcbiAgQXJyb3dVcCxcbiAgTWljLFxuICBYLFxuICBDaGVjayxcbiAgUGx1cyxcbn0gZnJvbSBcImx1Y2lkZS1hbmd1bGFyXCI7XG5pbXBvcnQgeyBpbmplY3RDaGF0TGFiZWxzIH0gZnJvbSBcIi4uLy4uL2NoYXQtY29uZmlnXCI7XG5pbXBvcnQgeyBDb3BpbG90VG9vbHRpcCB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL3Rvb2x0aXBcIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbi8vIEJhc2UgYnV0dG9uIGNsYXNzZXMgbWF0Y2hpbmcgUmVhY3QncyBidXR0b24gdmFyaWFudHNcbmNvbnN0IGJ1dHRvbkJhc2UgPSBjbihcbiAgXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtXCIsXG4gIFwidHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwXCIsXG4gIFwic2hyaW5rLTAgb3V0bGluZS1ub25lXCIsXG4gIFwiZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF1cIlxuKTtcblxuY29uc3QgY2hhdElucHV0VG9vbGJhclByaW1hcnkgPSBjbihcbiAgXCJjdXJzb3ItcG9pbnRlclwiLFxuICAvLyBCYWNrZ3JvdW5kIGFuZCB0ZXh0XG4gIFwiYmctYmxhY2sgdGV4dC13aGl0ZVwiLFxuICAvLyBEYXJrIG1vZGVcbiAgXCJkYXJrOmJnLXdoaXRlIGRhcms6dGV4dC1ibGFjayBkYXJrOmZvY3VzLXZpc2libGU6b3V0bGluZS13aGl0ZVwiLFxuICAvLyBTaGFwZSBhbmQgc2l6aW5nXG4gIFwicm91bmRlZC1mdWxsIGgtOSB3LTlcIixcbiAgLy8gSW50ZXJhY3Rpb25zXG4gIFwidHJhbnNpdGlvbi1jb2xvcnNcIixcbiAgLy8gRm9jdXMgc3RhdGVzXG4gIFwiZm9jdXM6b3V0bGluZS1ub25lXCIsXG4gIC8vIEhvdmVyIHN0YXRlc1xuICBcImhvdmVyOm9wYWNpdHktNzAgZGlzYWJsZWQ6aG92ZXI6b3BhY2l0eS0xMDBcIixcbiAgLy8gRGlzYWJsZWQgc3RhdGVzXG4gIFwiZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOmJnLVsjMDAwMDAwMTRdIGRpc2FibGVkOnRleHQtW3JnYigxMywxMywxMyldXCIsXG4gIFwiZGFyazpkaXNhYmxlZDpiZy1bIzQ1NDU0NV0gZGFyazpkaXNhYmxlZDp0ZXh0LXdoaXRlXCJcbik7XG5cbmNvbnN0IGNoYXRJbnB1dFRvb2xiYXJTZWNvbmRhcnkgPSBjbihcbiAgXCJjdXJzb3ItcG9pbnRlclwiLFxuICAvLyBCYWNrZ3JvdW5kIGFuZCB0ZXh0XG4gIFwiYmctdHJhbnNwYXJlbnQgdGV4dC1bIzQ0NDQ0NF1cIixcbiAgLy8gRGFyayBtb2RlXG4gIFwiZGFyazp0ZXh0LXdoaXRlIGRhcms6Ym9yZGVyLVsjNDA0MDQwXVwiLFxuICAvLyBTaGFwZSBhbmQgc2l6aW5nXG4gIFwicm91bmRlZC1mdWxsIGgtOSB3LTlcIixcbiAgLy8gSW50ZXJhY3Rpb25zXG4gIFwidHJhbnNpdGlvbi1jb2xvcnNcIixcbiAgLy8gRm9jdXMgc3RhdGVzXG4gIFwiZm9jdXM6b3V0bGluZS1ub25lXCIsXG4gIC8vIEhvdmVyIHN0YXRlc1xuICBcImhvdmVyOmJnLVsjZjhmOGY4XSBob3Zlcjp0ZXh0LVsjMzMzMzMzXVwiLFxuICBcImRhcms6aG92ZXI6YmctWyM0MDQwNDBdIGRhcms6aG92ZXI6dGV4dC1bI0ZGRkZGRl1cIixcbiAgLy8gRGlzYWJsZWQgc3RhdGVzXG4gIFwiZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTBcIixcbiAgXCJkaXNhYmxlZDpob3ZlcjpiZy10cmFuc3BhcmVudCBkaXNhYmxlZDpob3Zlcjp0ZXh0LVsjNDQ0NDQ0XVwiLFxuICBcImRhcms6ZGlzYWJsZWQ6aG92ZXI6YmctdHJhbnNwYXJlbnQgZGFyazpkaXNhYmxlZDpob3Zlcjp0ZXh0LVsjQ0NDQ0NDXVwiXG4pO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6IFwiY29waWxvdC1jaGF0LXNlbmQtYnV0dG9uXCIsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEx1Y2lkZUFuZ3VsYXJNb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibXItWzEwcHhdXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrKClcIlxuICAgICAgPlxuICAgICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJBcnJvd1VwSWNvblwiIFtzaXplXT1cIjE4XCI+PC9sdWNpZGUtYW5ndWxhcj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgYF0sXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0U2VuZEJ1dHRvbiB7XG4gIGRpc2FibGVkID0gaW5wdXQoZmFsc2UpO1xuICBjbGlja2VkID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgQXJyb3dVcEljb24gPSBBcnJvd1VwO1xuICBidXR0b25DbGFzcyA9IGNuKGJ1dHRvbkJhc2UsIGNoYXRJbnB1dFRvb2xiYXJQcmltYXJ5KTtcblxuICBvbkNsaWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jbGlja2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC1zdGFydC10cmFuc2NyaWJlLWJ1dHRvblwiLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMdWNpZGVBbmd1bGFyTW9kdWxlLCBDb3BpbG90VG9vbHRpcF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgIFtjb3BpbG90VG9vbHRpcF09XCJsYWJlbFwiXG4gICAgICB0b29sdGlwUG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAoY2xpY2spPVwib25DbGljaygpXCJcbiAgICA+XG4gICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJNaWNJY29uXCIgW3NpemVdPVwiMThcIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgIDwvYnV0dG9uPlxuICBgLFxuICBzdHlsZXM6IFtgYF0sXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0U3RhcnRUcmFuc2NyaWJlQnV0dG9uIHtcbiAgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSk7XG4gIGNsaWNrZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICByZWFkb25seSBsYWJlbHMgPSBpbmplY3RDaGF0TGFiZWxzKCk7XG5cbiAgcmVhZG9ubHkgTWljSWNvbiA9IE1pYztcbiAgYnV0dG9uQ2xhc3MgPSBjbihidXR0b25CYXNlLCBjaGF0SW5wdXRUb29sYmFyU2Vjb25kYXJ5LCBcIm1yLTJcIik7XG5cbiAgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzLmNoYXRJbnB1dFRvb2xiYXJTdGFydFRyYW5zY3JpYmVCdXR0b25MYWJlbDtcbiAgfVxuXG4gIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMuY2xpY2tlZC5lbWl0KCk7XG4gICAgfVxuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXQtY2FuY2VsLXRyYW5zY3JpYmUtYnV0dG9uXCIsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEx1Y2lkZUFuZ3VsYXJNb2R1bGUsIENvcGlsb3RUb29sdGlwXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3NcIlxuICAgICAgW2NvcGlsb3RUb29sdGlwXT1cImxhYmVsXCJcbiAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIChjbGljayk9XCJvbkNsaWNrKClcIlxuICAgID5cbiAgICAgIDxsdWNpZGUtYW5ndWxhciBbaW1nXT1cIlhJY29uXCIgW3NpemVdPVwiMThcIj48L2x1Y2lkZS1hbmd1bGFyPlxuICAgIDwvYnV0dG9uPlxuICBgLFxuICBzdHlsZXM6IFtgYF0sXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0Q2FuY2VsVHJhbnNjcmliZUJ1dHRvbiB7XG4gIGRpc2FibGVkID0gaW5wdXQoZmFsc2UpO1xuICBjbGlja2VkID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgbGFiZWxzID0gaW5qZWN0Q2hhdExhYmVscygpO1xuXG4gIHJlYWRvbmx5IFhJY29uID0gWDtcbiAgYnV0dG9uQ2xhc3MgPSBjbihidXR0b25CYXNlLCBjaGF0SW5wdXRUb29sYmFyU2Vjb25kYXJ5LCBcIm1yLTJcIik7XG5cbiAgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzLmNoYXRJbnB1dFRvb2xiYXJDYW5jZWxUcmFuc2NyaWJlQnV0dG9uTGFiZWw7XG4gIH1cblxuICBvbkNsaWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6IFwiY29waWxvdC1jaGF0LWZpbmlzaC10cmFuc2NyaWJlLWJ1dHRvblwiLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMdWNpZGVBbmd1bGFyTW9kdWxlLCBDb3BpbG90VG9vbHRpcF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgIFtjb3BpbG90VG9vbHRpcF09XCJsYWJlbFwiXG4gICAgICB0b29sdGlwUG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAoY2xpY2spPVwib25DbGljaygpXCJcbiAgICA+XG4gICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJDaGVja0ljb25cIiBbc2l6ZV09XCIxOFwiPjwvbHVjaWRlLWFuZ3VsYXI+XG4gICAgPC9idXR0b24+XG4gIGAsXG4gIHN0eWxlczogW2BgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRGaW5pc2hUcmFuc2NyaWJlQnV0dG9uIHtcbiAgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSk7XG4gIGNsaWNrZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICByZWFkb25seSBsYWJlbHMgPSBpbmplY3RDaGF0TGFiZWxzKCk7XG5cbiAgcmVhZG9ubHkgQ2hlY2tJY29uID0gQ2hlY2s7XG4gIGJ1dHRvbkNsYXNzID0gY24oYnV0dG9uQmFzZSwgY2hhdElucHV0VG9vbGJhclNlY29uZGFyeSwgXCJtci1bMTBweF1cIik7XG5cbiAgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzLmNoYXRJbnB1dFRvb2xiYXJGaW5pc2hUcmFuc2NyaWJlQnV0dG9uTGFiZWw7XG4gIH1cblxuICBvbkNsaWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6IFwiY29waWxvdC1jaGF0LWFkZC1maWxlLWJ1dHRvblwiLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMdWNpZGVBbmd1bGFyTW9kdWxlLCBDb3BpbG90VG9vbHRpcF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgIFtjb3BpbG90VG9vbHRpcF09XCJsYWJlbFwiXG4gICAgICB0b29sdGlwUG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAoY2xpY2spPVwib25DbGljaygpXCJcbiAgICA+XG4gICAgICA8bHVjaWRlLWFuZ3VsYXIgW2ltZ109XCJQbHVzSWNvblwiIFtzaXplXT1cIjIwXCI+PC9sdWNpZGUtYW5ndWxhcj5cbiAgICA8L2J1dHRvbj5cbiAgYCxcbiAgc3R5bGVzOiBbYGBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdEFkZEZpbGVCdXR0b24ge1xuICBkaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgY2xpY2tlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IGxhYmVscyA9IGluamVjdENoYXRMYWJlbHMoKTtcblxuICByZWFkb25seSBQbHVzSWNvbiA9IFBsdXM7XG4gIGJ1dHRvbkNsYXNzID0gY24oYnV0dG9uQmFzZSwgY2hhdElucHV0VG9vbGJhclNlY29uZGFyeSwgXCJtbC0yXCIpO1xuXG4gIGdldCBsYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxhYmVscy5jaGF0SW5wdXRUb29sYmFyQWRkQnV0dG9uTGFiZWw7XG4gIH1cblxuICBvbkNsaWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBCYXNlIHRvb2xiYXIgYnV0dG9uIGNvbXBvbmVudCB0aGF0IG90aGVyIGJ1dHRvbnMgY2FuIHVzZVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC10b29sYmFyLWJ1dHRvblwiLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDb3BpbG90VG9vbHRpcF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3MoKVwiXG4gICAgICBbY29waWxvdFRvb2x0aXBdPVwidGl0bGUoKVwiXG4gICAgICB0b29sdGlwUG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAoY2xpY2spPVwib25DbGljaygpXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9idXR0b24+XG4gIGAsXG4gIHN0eWxlczogW2BgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRUb29sYmFyQnV0dG9uIHtcbiAgZGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xuICB2YXJpYW50ID0gc2lnbmFsPFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIj4oXCJzZWNvbmRhcnlcIik7XG4gIGN1c3RvbUNsYXNzID0gc2lnbmFsKFwiXCIpO1xuICB0aXRsZSA9IHNpZ25hbChcIlwiKTtcblxuICBjbGlja2VkID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgY29tcHV0ZWRDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YXJpYW50Q2xhc3MgPVxuICAgICAgdGhpcy52YXJpYW50KCkgPT09IFwicHJpbWFyeVwiXG4gICAgICAgID8gY2hhdElucHV0VG9vbGJhclByaW1hcnlcbiAgICAgICAgOiBjaGF0SW5wdXRUb29sYmFyU2Vjb25kYXJ5O1xuICAgIHJldHVybiBjbihidXR0b25CYXNlLCB2YXJpYW50Q2xhc3MsIHRoaXMuY3VzdG9tQ2xhc3MoKSk7XG4gIH0pO1xuXG4gIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMuY2xpY2tlZC5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { CopilotChatTextarea } from "./copilot-chat-textarea";
|
|
2
|
+
import { CopilotChatAudioRecorder } from "./copilot-chat-audio-recorder";
|
|
3
|
+
import { CopilotChatSendButton, CopilotChatStartTranscribeButton, CopilotChatCancelTranscribeButton, CopilotChatFinishTranscribeButton, CopilotChatAddFileButton, } from "./copilot-chat-buttons";
|
|
4
|
+
import { CopilotChatToolbar } from "./copilot-chat-toolbar";
|
|
5
|
+
import { CopilotChatToolsMenu } from "./copilot-chat-tools-menu";
|
|
6
|
+
/**
|
|
7
|
+
* Default components used by CopilotChatInput.
|
|
8
|
+
* These can be imported and reused when creating custom slot implementations.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { CopilotChatInputDefaults } from '@copilotkitnext/angular';
|
|
13
|
+
*
|
|
14
|
+
* @Component({
|
|
15
|
+
standalone: true,
|
|
16
|
+
* template: `
|
|
17
|
+
* <copilot-chat-input [sendButtonSlot]="CustomSendButton">
|
|
18
|
+
* </copilot-chat-input>
|
|
19
|
+
* `
|
|
20
|
+
* })
|
|
21
|
+
* export class MyComponent {
|
|
22
|
+
* CustomSendButton = class extends CopilotChatInputDefaults.SendButton {
|
|
23
|
+
* // Custom implementation
|
|
24
|
+
* };
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export class CopilotChatInputDefaults {
|
|
29
|
+
static TextArea = CopilotChatTextarea;
|
|
30
|
+
static AudioRecorder = CopilotChatAudioRecorder;
|
|
31
|
+
static SendButton = CopilotChatSendButton;
|
|
32
|
+
static StartTranscribeButton = CopilotChatStartTranscribeButton;
|
|
33
|
+
static CancelTranscribeButton = CopilotChatCancelTranscribeButton;
|
|
34
|
+
static FinishTranscribeButton = CopilotChatFinishTranscribeButton;
|
|
35
|
+
static AddFileButton = CopilotChatAddFileButton;
|
|
36
|
+
static Toolbar = CopilotChatToolbar;
|
|
37
|
+
static ToolsMenu = CopilotChatToolsMenu;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LWlucHV0LWRlZmF1bHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LWlucHV0LWRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsZ0NBQWdDLEVBQ2hDLGlDQUFpQyxFQUNqQyxpQ0FBaUMsRUFDakMsd0JBQXdCLEdBQ3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFakU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsTUFBTSxDQUFVLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztJQUMvQyxNQUFNLENBQVUsYUFBYSxHQUFHLHdCQUF3QixDQUFDO0lBQ3pELE1BQU0sQ0FBVSxVQUFVLEdBQUcscUJBQXFCLENBQUM7SUFDbkQsTUFBTSxDQUFVLHFCQUFxQixHQUFHLGdDQUFnQyxDQUFDO0lBQ3pFLE1BQU0sQ0FBVSxzQkFBc0IsR0FBRyxpQ0FBaUMsQ0FBQztJQUMzRSxNQUFNLENBQVUsc0JBQXNCLEdBQUcsaUNBQWlDLENBQUM7SUFDM0UsTUFBTSxDQUFVLGFBQWEsR0FBRyx3QkFBd0IsQ0FBQztJQUN6RCxNQUFNLENBQVUsT0FBTyxHQUFHLGtCQUFrQixDQUFDO0lBQzdDLE1BQU0sQ0FBVSxTQUFTLEdBQUcsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb3BpbG90Q2hhdFRleHRhcmVhIH0gZnJvbSBcIi4vY29waWxvdC1jaGF0LXRleHRhcmVhXCI7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdEF1ZGlvUmVjb3JkZXIgfSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtYXVkaW8tcmVjb3JkZXJcIjtcbmltcG9ydCB7XG4gIENvcGlsb3RDaGF0U2VuZEJ1dHRvbixcbiAgQ29waWxvdENoYXRTdGFydFRyYW5zY3JpYmVCdXR0b24sXG4gIENvcGlsb3RDaGF0Q2FuY2VsVHJhbnNjcmliZUJ1dHRvbixcbiAgQ29waWxvdENoYXRGaW5pc2hUcmFuc2NyaWJlQnV0dG9uLFxuICBDb3BpbG90Q2hhdEFkZEZpbGVCdXR0b24sXG59IGZyb20gXCIuL2NvcGlsb3QtY2hhdC1idXR0b25zXCI7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdFRvb2xiYXIgfSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtdG9vbGJhclwiO1xuaW1wb3J0IHsgQ29waWxvdENoYXRUb29sc01lbnUgfSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtdG9vbHMtbWVudVwiO1xuXG4vKipcbiAqIERlZmF1bHQgY29tcG9uZW50cyB1c2VkIGJ5IENvcGlsb3RDaGF0SW5wdXQuXG4gKiBUaGVzZSBjYW4gYmUgaW1wb3J0ZWQgYW5kIHJldXNlZCB3aGVuIGNyZWF0aW5nIGN1c3RvbSBzbG90IGltcGxlbWVudGF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29waWxvdENoYXRJbnB1dERlZmF1bHRzIH0gZnJvbSAnQGNvcGlsb3RraXRuZXh0L2FuZ3VsYXInO1xuICpcbiAqIEBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuKiAgIHRlbXBsYXRlOiBgXG4gKiAgICAgPGNvcGlsb3QtY2hhdC1pbnB1dCBbc2VuZEJ1dHRvblNsb3RdPVwiQ3VzdG9tU2VuZEJ1dHRvblwiPlxuICogICAgIDwvY29waWxvdC1jaGF0LWlucHV0PlxuICogICBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgQ3VzdG9tU2VuZEJ1dHRvbiA9IGNsYXNzIGV4dGVuZHMgQ29waWxvdENoYXRJbnB1dERlZmF1bHRzLlNlbmRCdXR0b24ge1xuICogICAgIC8vIEN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICogICB9O1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdElucHV0RGVmYXVsdHMge1xuICBzdGF0aWMgcmVhZG9ubHkgVGV4dEFyZWEgPSBDb3BpbG90Q2hhdFRleHRhcmVhO1xuICBzdGF0aWMgcmVhZG9ubHkgQXVkaW9SZWNvcmRlciA9IENvcGlsb3RDaGF0QXVkaW9SZWNvcmRlcjtcbiAgc3RhdGljIHJlYWRvbmx5IFNlbmRCdXR0b24gPSBDb3BpbG90Q2hhdFNlbmRCdXR0b247XG4gIHN0YXRpYyByZWFkb25seSBTdGFydFRyYW5zY3JpYmVCdXR0b24gPSBDb3BpbG90Q2hhdFN0YXJ0VHJhbnNjcmliZUJ1dHRvbjtcbiAgc3RhdGljIHJlYWRvbmx5IENhbmNlbFRyYW5zY3JpYmVCdXR0b24gPSBDb3BpbG90Q2hhdENhbmNlbFRyYW5zY3JpYmVCdXR0b247XG4gIHN0YXRpYyByZWFkb25seSBGaW5pc2hUcmFuc2NyaWJlQnV0dG9uID0gQ29waWxvdENoYXRGaW5pc2hUcmFuc2NyaWJlQnV0dG9uO1xuICBzdGF0aWMgcmVhZG9ubHkgQWRkRmlsZUJ1dHRvbiA9IENvcGlsb3RDaGF0QWRkRmlsZUJ1dHRvbjtcbiAgc3RhdGljIHJlYWRvbmx5IFRvb2xiYXIgPSBDb3BpbG90Q2hhdFRvb2xiYXI7XG4gIHN0YXRpYyByZWFkb25seSBUb29sc01lbnUgPSBDb3BpbG90Q2hhdFRvb2xzTWVudTtcbn1cbiJdfQ==
|