@camunda/copilot-chat 0.0.0-alpha10

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 (45) hide show
  1. package/LICENSE +65 -0
  2. package/README.md +89 -0
  3. package/dist/CopilotChat.d.ts +12 -0
  4. package/dist/CopilotChat.d.ts.map +1 -0
  5. package/dist/constants/theme.d.ts +79 -0
  6. package/dist/constants/theme.d.ts.map +1 -0
  7. package/dist/hooks/index.d.ts +3 -0
  8. package/dist/hooks/index.d.ts.map +1 -0
  9. package/dist/hooks/useAgentAdapter.d.ts +3 -0
  10. package/dist/hooks/useAgentAdapter.d.ts.map +1 -0
  11. package/dist/hooks/useCopilotSidecar.d.ts +6 -0
  12. package/dist/hooks/useCopilotSidecar.d.ts.map +1 -0
  13. package/dist/index.css +1 -0
  14. package/dist/index.d.ts +11 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +8490 -0
  17. package/dist/layout/SidecarLayoutManager.d.ts +8 -0
  18. package/dist/layout/SidecarLayoutManager.d.ts.map +1 -0
  19. package/dist/package.json +61 -0
  20. package/dist/store/agentStore.d.ts +28 -0
  21. package/dist/store/agentStore.d.ts.map +1 -0
  22. package/dist/store/chatStore.d.ts +25 -0
  23. package/dist/store/chatStore.d.ts.map +1 -0
  24. package/dist/store/index.d.ts +4 -0
  25. package/dist/store/index.d.ts.map +1 -0
  26. package/dist/store/messageContextStore.d.ts +21 -0
  27. package/dist/store/messageContextStore.d.ts.map +1 -0
  28. package/dist/styles/ensureSidecarStyles.d.ts +2 -0
  29. package/dist/styles/ensureSidecarStyles.d.ts.map +1 -0
  30. package/dist/test-setup.d.ts +1 -0
  31. package/dist/test-setup.d.ts.map +1 -0
  32. package/dist/types/agentTypes.d.ts +80 -0
  33. package/dist/types/agentTypes.d.ts.map +1 -0
  34. package/dist/types/chatTypes.d.ts +30 -0
  35. package/dist/types/chatTypes.d.ts.map +1 -0
  36. package/dist/types/index.d.ts +3 -0
  37. package/dist/types/index.d.ts.map +1 -0
  38. package/dist/utils/eventHandlers.d.ts +33 -0
  39. package/dist/utils/eventHandlers.d.ts.map +1 -0
  40. package/dist/utils/index.d.ts +3 -0
  41. package/dist/utils/index.d.ts.map +1 -0
  42. package/dist/utils/statusLabels.d.ts +3 -0
  43. package/dist/utils/statusLabels.d.ts.map +1 -0
  44. package/license.header +7 -0
  45. package/package.json +61 -0
package/LICENSE ADDED
@@ -0,0 +1,65 @@
1
+ Camunda License 1.0
2
+
3
+ The Camunda License (the “License”) sets forth the terms and conditions
4
+ under which Camunda Services GmbH ("the Licensor") grants You a license
5
+ solely to the source code in this repository ("the Software").
6
+
7
+ Acceptance
8
+ By Using the Software, You agree to all the terms and conditions below.
9
+ If Your Use of the Software does not comply with the terms and conditions
10
+ described in this License, You must purchase a commercial license from the
11
+ Licensor, its affiliated entities, or authorized resellers, or You must
12
+ refrain from Using the Software. If You receive the Software in original or
13
+ modified form from a third party, the terms and conditions outlined in this
14
+ License apply to Your Use of that Software. You should have received a copy
15
+ of this License in this case.
16
+
17
+ Copyright License
18
+ Subject to the terms and conditions of this License, the Licensor hereby grants
19
+ You the non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable
20
+ right to Use the Software in any way or manner that would otherwise infringe the
21
+ Licensor’s copyright as long and insofar as You Use the Software only and limited
22
+ to the Use in or for the purpose of Using the Software in Non-Production Environment.
23
+ Each time you distribute or make otherwise publicly available the Software or
24
+ Derivative Works thereof, the recipient automatically receives a license from
25
+ the original Licensor to the respective Software or Derivative Works thereof
26
+ under the terms of this License.
27
+
28
+ Conditions and Restrictions
29
+ All Use of the Software is explicitly made subject to the following conditions:
30
+ * You may not move, change, disable, or circumvent the license key functionality
31
+ in the Software, and You may not remove or obscure any functionality in the
32
+ Software that is protected by the license key.
33
+ * If You distribute or make available the Software or any modification or Derivative
34
+ Works thereof (including compiled versions), You must conspicuously display and
35
+ attach this License on each original or modified copy of the Software and enable
36
+ the recipient to obtain the source code if You have distributed a compiled version
37
+
38
+
39
+ Patent License
40
+ Patent and trademark rights are not licensed under this Public License.
41
+
42
+
43
+ No Liability
44
+ EXCEPT FOR DAMAGES CAUSED BY INTENT OR FRAUDULENTLY CONCEALED DEFECTS, AND EXCEPT FOR
45
+ DAMAGES RESULTING FROM BREACH OF ANY WARRANTY OR GUARANTEE EXPRESSLY GIVEN BY LICENSOR
46
+ IN THIS LICENCE, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY
47
+ DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK. ANY MANDATORY STATUTORY
48
+ LIABILITY UNDER APPLICABLE LAW REMAINS UNAFFECTED.
49
+
50
+ No Warranty
51
+ EXCEPT AS EXPRESSLY STATED IN THIS LICENSE OR REQUIRED BY APPLICABLE LAW, THE WORKS ARE
52
+ PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND INCLUDING WITHOUT LIMITATION,
53
+ ANY WARRANTIES REGARDING THE CONTENTS, ACCURACY, OR FITNESS FOR A PARTICULAR PURPOSE.
54
+
55
+
56
+ Definitions
57
+ You refer to the individual or entity agreeing to these terms.
58
+ Use means any action concerning the Software that, without permission, would make Youliable
59
+ for infringement under applicable copyright law. Use within the meaning of this License
60
+ includes, but is not limited to, copying, distribution (with or without modification),
61
+ making available to the public, and modifying the Software.
62
+
63
+ Non-Production Environment means a setting in which the Software is used for development, staging,
64
+ testing, quality assurance, demonstration, or evaluation purposes, and not for any live or
65
+ production systems.
package/README.md ADDED
@@ -0,0 +1,89 @@
1
+ # @camunda/copilot-chat
2
+
3
+ React component library for embedding Camunda Copilot chat interface into web applications.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @camunda/copilot-chat
9
+ ```
10
+
11
+ **Peer Dependencies:**
12
+ ```bash
13
+ npm install react react-dom @carbon/react @carbon/icons-react
14
+ ```
15
+
16
+ ## Quick Start
17
+
18
+ ```tsx
19
+ import { CopilotChat, useChatStore } from '@camunda/copilot-chat';
20
+ import '@camunda/copilot-chat/style.css';
21
+
22
+ function App() {
23
+ const handleSendMessage = async (message: string) => {
24
+ const { addAssistantMessage, appendToMessage, updateMessageStatus } = useChatStore.getState();
25
+ const messageId = `msg-${Date.now()}`;
26
+ addAssistantMessage(messageId);
27
+ appendToMessage(messageId, 'Hello!');
28
+ updateMessageStatus(messageId, 'complete'); // 'pending' | 'streaming' | 'complete' | 'error'
29
+ };
30
+
31
+ return <CopilotChat onSendMessage={handleSendMessage} workareaSelector="body" />;
32
+ }
33
+ ```
34
+
35
+ ## With Agent Adapter (Recommended)
36
+
37
+ For full agent orchestration with tool execution:
38
+
39
+ ```tsx
40
+ import { useMemo } from 'react';
41
+ import { CopilotChat, useAgentAdapter } from '@camunda/copilot-chat';
42
+ import '@camunda/copilot-chat/style.css';
43
+
44
+ function App() {
45
+ const transport = useMemo(() => ({
46
+ subscribe: (id, onEvent) => { /* Subscribe to events */ },
47
+ unsubscribe: (id) => { /* Cleanup */ },
48
+ sendMessage: async (payload) => { /* POST to backend */ },
49
+ sendToolResult: async (payload) => { /* POST tool result */ },
50
+ }), []);
51
+
52
+ const { sendMessage, stopGeneration, resetConversation } = useAgentAdapter({
53
+ transport,
54
+ frontendTools: [{ name: 'my_tool', description: '...', parametersSchema: '{}' }],
55
+ onToolInvoke: async (toolName, args) => { /* Return result */ },
56
+ });
57
+
58
+ return (
59
+ <CopilotChat
60
+ onSendMessage={sendMessage}
61
+ onStopGeneration={stopGeneration}
62
+ onResetConversation={resetConversation}
63
+ />
64
+ );
65
+ }
66
+ ```
67
+
68
+ ## Props
69
+
70
+ | Prop | Type | Required | Description |
71
+ |------|------|----------|-------------|
72
+ | `onSendMessage` | `(message: string) => Promise<void>` | Yes | Called when user sends a message |
73
+ | `onStopGeneration` | `() => void` | No | Called when user clicks stop button |
74
+ | `onResetConversation` | `() => void` | No | Called when user resets the conversation |
75
+ | `workareaSelector` | `string` | No | CSS selector for the main content area |
76
+ | `emptyStateTitle` | `string` | No | Title shown when chat is empty |
77
+ | `emptyStateDescription` | `string` | No | Description shown when chat is empty |
78
+
79
+ ## Documentation
80
+
81
+ See the [docs folder](../../docs) for detailed documentation:
82
+
83
+ - [Architecture Overview](../../docs/architecture.md)
84
+ - [Integration Guide](../../docs/integration.md)
85
+ - [Writing Adapters](../../docs/adapters.md)
86
+
87
+ ## License
88
+
89
+ Camunda License 1.0 - See [LICENSE](LICENSE) file for details.
@@ -0,0 +1,12 @@
1
+ export interface CopilotChatProps {
2
+ readonly onSendMessage: (message: string) => void;
3
+ readonly isBusy?: boolean;
4
+ readonly workareaSelector?: string;
5
+ readonly onStopGeneration?: () => void;
6
+ readonly onResetConversation?: () => void;
7
+ readonly emptyStateTitle?: string;
8
+ readonly emptyStateDescription?: string;
9
+ }
10
+ export declare const CopilotChat: ({ onSendMessage, isBusy, workareaSelector, onStopGeneration, onResetConversation, emptyStateTitle, emptyStateDescription, }: CopilotChatProps) => import("react/jsx-runtime").JSX.Element;
11
+ export default CopilotChat;
12
+ //# sourceMappingURL=CopilotChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CopilotChat.d.ts","sourceRoot":"","sources":["../src/CopilotChat.tsx"],"names":[],"mappings":"AAQA,OAAO,0BAA0B,CAAC;AAYlC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,eAAO,MAAM,WAAW,GAAI,6HAQzB,gBAAgB,4CAgFlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,79 @@
1
+ export declare const BRAND_COLOR_PRIMARY = "#8a3ffc";
2
+ export declare const BRAND_COLOR_HOVER = "#7a34e4";
3
+ export declare const BRAND_COLOR_ACTIVE = "#5c24aa";
4
+ export declare const COLOR_TEXT_PRIMARY = "#161616";
5
+ export declare const COLOR_TEXT_SECONDARY = "#525252";
6
+ export declare const COLOR_TEXT_PLACEHOLDER = "#a8a8a8";
7
+ export declare const COLOR_TEXT_DISABLED = "#c6c6c6";
8
+ export declare const COLOR_BACKGROUND_WHITE = "#fff";
9
+ export declare const COLOR_BACKGROUND_GRAY = "#f4f4f4";
10
+ export declare const COLOR_BACKGROUND_HOVER = "#e8e8e8";
11
+ export declare const COLOR_BACKGROUND_ACTIVE = "#c6c6c6";
12
+ export declare const COLOR_BACKGROUND_SELECTED = "#d1d1d1";
13
+ export declare const COLOR_BACKGROUND_SCROLLBAR = "#e0e0e0";
14
+ export declare const COLOR_BORDER_SUBTLE = "rgba(0, 0, 0, 0.12)";
15
+ export declare const COLOR_BORDER_LIGHT = "rgba(0, 0, 0, 0.1)";
16
+ export declare const COLOR_BORDER_FOCUS = "#0f62fe";
17
+ export declare const COLOR_SHADOW_DEFAULT = "rgba(0, 0, 0, 0.16)";
18
+ export declare const COLOR_SHADOW_STRONG = "rgba(0, 0, 0, 0.08)";
19
+ export declare const COLOR_BRAND_ALPHA_10 = "rgba(138, 63, 252, 0.1)";
20
+ export declare const COLOR_BRAND_ALPHA_20 = "rgba(138, 63, 252, 0.2)";
21
+ export declare const SPACING_MICRO = "0.25rem";
22
+ export declare const SPACING_SMALL = "0.5rem";
23
+ export declare const SPACING_MEDIUM = "0.875rem";
24
+ export declare const SPACING_BASE = "1rem";
25
+ export declare const SPACING_LARGE = "1.25rem";
26
+ export declare const SPACING_XLARGE = "2rem";
27
+ export declare const SPACING_PX_6 = "6px";
28
+ export declare const SPACING_PX_8 = "8px";
29
+ export declare const SPACING_PX_12 = "12px";
30
+ export declare const SPACING_PX_16 = "16px";
31
+ export declare const SPACING_PX_24 = "24px";
32
+ export declare const FONT_SIZE_TINY = "0.75rem";
33
+ export declare const FONT_SIZE_SMALL = "0.8125rem";
34
+ export declare const FONT_SIZE_BASE = "0.875rem";
35
+ export declare const FONT_SIZE_MEDIUM = "1rem";
36
+ export declare const FONT_WEIGHT_NORMAL = "400";
37
+ export declare const FONT_WEIGHT_SEMIBOLD = "600";
38
+ export declare const LINE_HEIGHT_BASE = "1.5";
39
+ export declare const BORDER_RADIUS_TINY = "0.25rem";
40
+ export declare const BORDER_RADIUS_SMALL = "3px";
41
+ export declare const BORDER_RADIUS_MEDIUM = "6px";
42
+ export declare const BORDER_RADIUS_LARGE = "1rem";
43
+ export declare const BORDER_RADIUS_CIRCLE = "50%";
44
+ export declare const SIZE_ICON_SMALL = "1.25rem";
45
+ export declare const SIZE_ICON_MEDIUM = "1.5rem";
46
+ export declare const SIZE_ICON_LARGE = "28px";
47
+ export declare const SIZE_BUTTON_SMALL = "24px";
48
+ export declare const SIZE_BUTTON_MEDIUM = "32px";
49
+ export declare const SIZE_BUTTON_LARGE = "2rem";
50
+ export declare const SIZE_BUTTON_LAUNCHER = "56px";
51
+ export declare const SCROLLBAR_WIDTH = "6px";
52
+ export declare const OUTLINE_WIDTH = "2px";
53
+ export declare const OUTLINE_OFFSET_INNER = "-2px";
54
+ export declare const OUTLINE_OFFSET_OUTER = "2px";
55
+ export declare const CHAT_BUBBLE_MAX_WIDTH = "90%";
56
+ export declare const CHAT_INPUT_MAX_HEIGHT = "150px";
57
+ export declare const CHAT_INPUT_MIN_HEIGHT = "1.5em";
58
+ export declare const SIDECAR_WIDTH = "416px";
59
+ export declare const SIDECAR_MIN_WIDTH = "320px";
60
+ export declare const SIDECAR_MAX_WIDTH = "512px";
61
+ export declare const HEADER_HEIGHT = "48px";
62
+ export declare const Z_INDEX_PANEL = "9999";
63
+ export declare const Z_INDEX_LAUNCHER = "10000";
64
+ export declare const Z_INDEX_STOP_BUTTON = "10000";
65
+ export declare const TRANSITION_DURATION_FAST = "110ms";
66
+ export declare const TRANSITION_DURATION_BASE = "120ms";
67
+ export declare const TRANSITION_DURATION_MEDIUM = "160ms";
68
+ export declare const TRANSITION_DURATION_SLOW = "200ms";
69
+ export declare const TRANSITION_TIMING_STANDARD = "cubic-bezier(0.2, 0, 0, 1)";
70
+ export declare const TRANSITION_TIMING_EASE = "ease-in-out";
71
+ export declare const SHADOW_BUTTON = "0 4px 16px rgba(0, 0, 0, 0.16)";
72
+ export declare const SHADOW_PANEL = "0 24px 64px rgba(0, 0, 0, 0.08)";
73
+ export declare const OPACITY_DISABLED = "0.5";
74
+ export declare const OPACITY_HIDDEN = "0";
75
+ export declare const OPACITY_VISIBLE = "1";
76
+ export declare const TRANSFORM_SCALE_DOWN = "0.8";
77
+ export declare const TRANSFORM_SCALE_UP = "1.05";
78
+ export declare const TRANSFORM_SCALE_PRESSED = "0.95";
79
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/constants/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { useCopilotSidecar } from './useCopilotSidecar';
2
+ export { useAgentAdapter } from './useAgentAdapter';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { AgentAdapterConfig, AgentAdapterReturn } from '../types/agentTypes';
2
+ export declare const useAgentAdapter: ({ transport, frontendTools, onToolInvoke, getStatusLabel, }: AgentAdapterConfig) => AgentAdapterReturn;
3
+ //# sourceMappingURL=useAgentAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentAdapter.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgentAdapter.ts"],"names":[],"mappings":"AASA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AA2D7B,eAAO,MAAM,eAAe,GAAI,6DAK7B,kBAAkB,KAAG,kBAkRvB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { SidecarLayoutConfig } from '../layout/SidecarLayoutManager';
2
+ export interface UseCopilotSidecarOptions extends SidecarLayoutConfig {
3
+ enabled: boolean;
4
+ }
5
+ export declare const useCopilotSidecar: ({ enabled, width, zIndex, workareaSelector, responsiveBreakpoint, }: UseCopilotSidecarOptions) => void;
6
+ //# sourceMappingURL=useCopilotSidecar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCopilotSidecar.d.ts","sourceRoot":"","sources":["../../src/hooks/useCopilotSidecar.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,GAAI,qEAM/B,wBAAwB,SAe1B,CAAC"}
package/dist/index.css ADDED
@@ -0,0 +1 @@
1
+ ._inputContainer_19528_1{display:flex;align-items:flex-end;gap:var(--spacing-px-8, 8px);padding:var(--spacing-px-12, 12px) var(--spacing-px-16, 16px);background-color:var(--color-background-white, #fff);border-block-start:1px solid var(--color-border-light, rgba(0, 0, 0, .1));position:relative}._textArea_19528_11{flex:1;padding:var(--spacing-px-8, 8px) 0;border:none;margin:0;background:transparent;color:var(--color-text-primary, #161616);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:14px;line-height:var(--line-height-base, 1.5);resize:none;outline:none;overflow-y:auto;min-height:40px;max-height:var(--chat-input-max-height, 150px);box-shadow:none;scrollbar-width:thin;scrollbar-color:var(--color-background-scrollbar, #e0e0e0) transparent}._textArea_19528_11::-webkit-scrollbar{width:var(--scrollbar-width, 6px)}._textArea_19528_11::-webkit-scrollbar-track{background:transparent}._textArea_19528_11::-webkit-scrollbar-thumb{background-color:var(--color-background-scrollbar, #e0e0e0);border-radius:var(--border-radius-small, 3px)}._textArea_19528_11:focus{border:none;outline:none;box-shadow:none}._textArea_19528_11::placeholder{color:var(--color-text-placeholder, #a8a8a8);font-weight:var(--font-weight-normal, 400)}._textArea_19528_11:disabled{color:var(--color-text-disabled, #c6c6c6);cursor:not-allowed;opacity:var(--opacity-disabled, .5)}._actionButton_19528_62{flex-shrink:0;min-width:var(--size-button-medium, 32px);min-height:var(--size-button-medium, 32px);padding:var(--spacing-px-6, 6px);color:var(--brand-color-primary, #8a3ffc);border-radius:var(--border-radius-medium, 6px);transition:all var(--transition-duration-base, .12s) var(--transition-timing-ease, ease-in-out)}._actionButton_19528_62:hover:not(:disabled){background-color:var(--color-brand-alpha-10, rgba(138, 63, 252, .1));color:var(--brand-color-hover, #7a34e4)}._actionButton_19528_62:active:not(:disabled){background-color:var(--color-brand-alpha-20, rgba(138, 63, 252, .2));transform:scale(var(--transform-scale-pressed, .95))}._actionButton_19528_62:disabled{color:var(--color-text-disabled, #c6c6c6);cursor:not-allowed;opacity:var(--opacity-disabled, .5)}._renderer_qbz39_1,._renderer_qbz39_1 p,._renderer_qbz39_1 ul,._renderer_qbz39_1 ol,._renderer_qbz39_1 li,._renderer_qbz39_1 span,._renderer_qbz39_1 strong,._renderer_qbz39_1 em,._renderer_qbz39_1 a{font-size:14px;line-height:1.5}._renderer_qbz39_1 strong{font-weight:600}._renderer_qbz39_1 p{margin:0 0 12px}._renderer_qbz39_1 p:last-child{margin-bottom:0}._renderer_qbz39_1 ul,._renderer_qbz39_1 ol{margin:0 0 12px;padding-left:20px}._renderer_qbz39_1 ul:last-child,._renderer_qbz39_1 ol:last-child{margin-bottom:0}._renderer_qbz39_1 ul{list-style-type:disc}._renderer_qbz39_1 ol{list-style-type:decimal}._renderer_qbz39_1 li{margin:0 0 4px;padding-left:4px}._renderer_qbz39_1 li:last-child{margin-bottom:0}._renderer_qbz39_1 ul ul,._renderer_qbz39_1 ol ol,._renderer_qbz39_1 ul ol,._renderer_qbz39_1 ol ul{margin:4px 0}._renderer_qbz39_1 h1,._renderer_qbz39_1 h2,._renderer_qbz39_1 h3,._renderer_qbz39_1 h4,._renderer_qbz39_1 h5,._renderer_qbz39_1 h6{font-size:14px;font-weight:600;margin:16px 0 8px;line-height:1.4}._renderer_qbz39_1 h1:first-child,._renderer_qbz39_1 h2:first-child,._renderer_qbz39_1 h3:first-child,._renderer_qbz39_1 h4:first-child,._renderer_qbz39_1 h5:first-child,._renderer_qbz39_1 h6:first-child{margin-top:0}._renderer_qbz39_1 code{font-family:IBM Plex Mono,monospace;font-size:13px;background-color:#0000000f;padding:2px 4px;border-radius:3px}._renderer_qbz39_1 pre{margin:12px 0;padding:12px;background-color:#0000000f;border-radius:4px;overflow-x:auto}._renderer_qbz39_1 pre code{padding:0;background:none;font-size:13px}._renderer_qbz39_1>*:first-child{margin-block-start:0}._renderer_qbz39_1>*:last-child{margin-block-end:0}._streamingIndicator_oudc8_1{display:flex;align-items:center;gap:8px;padding-block-start:4px;color:#525252;font-size:12px}._processingLabel_oudc8_10{color:#525252;font-size:12px}._collapsibleContainer_oudc8_15{display:flex;flex-direction:column;gap:4px;padding-block:4px}._collapseToggle_oudc8_22{display:flex;align-items:center;gap:4px;padding:4px 8px;border:none;background:transparent;color:#525252;font-size:12px;cursor:pointer;border-radius:4px}._collapseToggle_oudc8_22:hover{background-color:#0000000f}._collapseToggle_oudc8_22:focus{outline:2px solid #0f62fe;outline-offset:-2px}._completedLabel_oudc8_44{font-weight:500}._collapsedContent_oudc8_48{padding:8px 12px;margin-inline-start:20px;background-color:#f4f4f4;border-radius:4px;font-size:12px;line-height:1.5;color:#525252;white-space:pre-wrap;word-break:break-word;max-block-size:200px;overflow-y:auto}._thinkingSection_jhhuh_1{display:flex;flex-direction:column;gap:0;margin-block-end:12px}._block_jhhuh_8{position:relative}._blockToggle_jhhuh_12{display:flex;align-items:center;gap:4px;inline-size:100%;padding:4px 0;border:none;background:transparent;color:#8d8d8d;font-size:12px;cursor:pointer;text-align:start;transition:color .15s ease}._blockToggle_jhhuh_12:hover{color:#525252}._blockToggle_jhhuh_12:focus-visible{outline:2px solid #0f62fe;outline-offset:2px;border-radius:2px}._chevron_jhhuh_37{display:flex;align-items:center;justify-content:center;color:inherit;flex-shrink:0;opacity:.7}._blockLabel_jhhuh_46{font-size:12px;font-weight:400;color:inherit}._blockContent_jhhuh_52{display:none;padding-inline-start:20px;padding-block:4px 8px;font-size:13px;line-height:1.4;color:#525252;border-left:1px solid #e0e0e0;margin-left:7px;white-space:pre-wrap}._blockContent_jhhuh_52._expanded_jhhuh_64{display:block}._blockContent_jhhuh_52 p{margin:0 0 8px}._blockContent_jhhuh_52 p:last-child{margin-block-end:0}._blockContent_jhhuh_52 code{font-size:12px;background-color:#0000000d;padding:1px 4px;border-radius:3px}._blockContent_jhhuh_52 pre{margin:8px 0;background-color:#00000008;padding:8px;border-radius:4px;overflow-x:auto}._blockContent_jhhuh_52 pre code{background:none;padding:0}._message_1rpzb_1{display:flex;flex-direction:column;gap:8px;padding:16px 20px}._userMessage_1rpzb_8{align-items:flex-end}._assistantMessage_1rpzb_12{align-items:flex-start}._userBubble_1rpzb_16{max-inline-size:90%;padding:12px 16px;background-color:#f4f4f4;color:#161616;border-radius:16px 16px 4px;font-size:14px;line-height:1.5;word-wrap:break-word}._assistantBubble_1rpzb_28{max-inline-size:90%;font-size:14px;line-height:1.5;color:#161616;word-wrap:break-word}._errorMessage_1rpzb_36{display:flex;align-items:flex-start;gap:8px;padding:12px;background-color:#fff1f1;border-inline-start:3px solid #da1e28;font-size:14px;line-height:1.5;color:#161616}._streamingIndicator_1rpzb_48{display:flex;align-items:center;gap:8px;padding-block-start:4px;color:#525252;font-size:12px}._content_1rpzb_57 pre{margin:12px 0;padding:12px;background-color:#0000000f;border-radius:4px;overflow-x:auto}._content_1rpzb_57 pre code{padding:0;background:none}._container_jclve_1{display:flex;flex-direction:column;flex:1;overflow:hidden}._list_jclve_8{flex:1;overflow-y:auto;padding:var(--spacing-base, 16px) 0}._emptyState_jclve_14{display:flex;flex-direction:column;align-items:center;justify-content:center;block-size:100%;padding:var(--spacing-xlarge, 32px);text-align:center;color:var(--cds-text-secondary, var(--color-text-secondary, #525252))}._emptyTitle_jclve_25{margin-block-end:var(--spacing-small, 8px);font-size:var(--font-size-medium, 16px);font-weight:var(--font-weight-semibold, 600);color:var(--cds-text-primary, var(--color-text-primary, #161616))}._emptyDescription_jclve_32{font-size:var(--font-size-base, 14px)}._header_1hmug_1{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;block-size:var(--copilot-header-height, var(--header-height, 48px));padding-inline:var(--spacing-base, 16px);background-color:var(--color-background-white, #fff);border-inline-start:1px solid var(--cds-border-subtle, var(--color-border-subtle, rgba(0, 0, 0, .12)));border-block-end:1px solid var(--cds-border-subtle, var(--color-border-subtle, rgba(0, 0, 0, .12)));flex-shrink:0}._titleContainer_1hmug_17{display:flex;align-items:center;gap:var(--spacing-small, 8px)}._icon_1hmug_23{width:var(--size-icon-small, 20px);height:var(--size-icon-small, 20px);filter:brightness(0) saturate(100%) invert(26%) sepia(96%) saturate(3427%) hue-rotate(260deg) brightness(95%) contrast(102%)}._title_1hmug_17{font-size:var(--font-size-base, 14px);font-weight:var(--font-weight-semibold, 600);color:var(--cds-text-primary, var(--color-text-primary, #161616))}._headerActions_1hmug_36{display:flex;align-items:center;gap:4px}._headerButton_1hmug_42{display:flex;align-items:center;justify-content:center;inline-size:var(--size-button-large, 32px);block-size:var(--size-button-large, 32px);padding:0;border:none;background:transparent;color:var(--cds-icon-primary, var(--color-text-primary, #161616));cursor:pointer;border-radius:0}._headerButton_1hmug_42:hover{background-color:var(--cds-layer-hover, rgba(0, 0, 0, .06))}._headerButton_1hmug_42:focus{outline:var(--outline-width, 2px) solid var(--cds-focus, var(--color-border-focus, #0f62fe));outline-offset:var(--outline-offset-inner, -2px)}._minimizeButton_1hmug_66{display:flex;align-items:center;justify-content:center;inline-size:var(--size-button-large, 32px);block-size:var(--size-button-large, 32px);padding:0;border:none;background:transparent;color:var(--cds-icon-primary, var(--color-text-primary, #161616));cursor:pointer;border-radius:0}._minimizeButton_1hmug_66:hover{background-color:var(--cds-layer-hover, rgba(0, 0, 0, .06))}._minimizeButton_1hmug_66:focus{outline:var(--outline-width, 2px) solid var(--cds-focus, var(--color-border-focus, #0f62fe));outline-offset:var(--outline-offset-inner, -2px)}._launcher_k7o0g_1{position:fixed;bottom:var(--spacing-px-24, 24px);right:var(--spacing-px-24, 24px);z-index:var(--z-index-launcher, 10000);width:var(--size-button-launcher, 56px);height:var(--size-button-launcher, 56px);border-radius:var(--border-radius-circle, 50%);background-color:var(--brand-color-primary, #8a3ffc);border:none;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color var(--transition-duration-slow, .2s) var(--transition-timing-ease, ease-in-out),opacity var(--transition-duration-slow, .2s) var(--transition-timing-ease, ease-in-out)}._launcher_k7o0g_1:hover{background-color:var(--brand-color-hover, #7a34e4)}._launcher_k7o0g_1:active{background-color:var(--brand-color-active, #5c24aa)}._launcher_k7o0g_1:disabled{opacity:var(--opacity-disabled, .5);cursor:not-allowed}._launcher--hidden_k7o0g_35{opacity:var(--opacity-hidden, 0);pointer-events:none}._icon_k7o0g_40{inline-size:var(--size-icon-large, 28px);block-size:var(--size-icon-large, 28px)}body[data-copilot-chat-layout=bottom-sheet] ._launcher_k7o0g_1{inset-inline-end:var(--spacing-px-16, 16px);inset-block-end:var(--spacing-px-16, 16px)}._stopButton_pyfqx_1{position:absolute;inset-block-end:var(--spacing-px-16, 16px);inset-inline-end:0;transform:translate(-50%);z-index:var(--z-index-stop-button, 10000);display:inline-flex;align-items:center;justify-content:center;width:var(--size-button-small, 24px);height:var(--size-button-small, 24px);background:var(--cds-layer-hover, var(--color-background-hover, #e8e8e8));color:var(--cds-icon-primary, var(--color-text-primary, #161616));border:none;border-radius:var(--border-radius-circle, 50%);cursor:pointer;transition:background var(--transition-duration-fast, .11s) var(--transition-timing-standard, cubic-bezier(.2, 0, 0, 1))}._stopButton_pyfqx_1:hover{background:var(--cds-layer-active, var(--color-background-active, #c6c6c6))}._stopButton_pyfqx_1:active{background:var( --cds-layer-selected, var(--color-background-selected, #d1d1d1) )}._stopButton_pyfqx_1:focus{outline:var(--outline-width, 2px) solid var(--cds-focus, var(--color-border-focus, #0f62fe));outline-offset:var(--outline-offset-outer, 2px)}:root{--copilot-chat-sidecar-width: var(--sidecar-width, 416px);--copilot-chat-panel-z-index: var(--z-index-panel, 9999);--copilot-chat-transition: var(--transition-duration-medium, .16s) var(--transition-timing-standard, cubic-bezier(.2, 0, 0, 1));--copilot-brand-color: var(--brand-color-primary, #8a3ffc);--copilot-brand-color-hover: var(--brand-color-hover, #7a34e4);--copilot-brand-color-active: var(--brand-color-active, #5c24aa);--copilot-header-height: var(--header-height, 48px);--spacing-base: 16px;--spacing-large: 24px;--spacing-xlarge: 32px;--size-icon-medium: 24px;--color-background-white: #fff;--color-border-subtle: rgba(0, 0, 0, .12);--color-shadow-default: rgba(0, 0, 0, .16);--color-shadow-strong: rgba(0, 0, 0, .08);--sidecar-width: 416px;--sidecar-min-width: 320px;--sidecar-max-width: 512px;--opacity-hidden: 0;--opacity-visible: 1;--transform-scale-down: .8;--transform-scale-up: 1.05}body[data-copilot-chat-layout=sidecar],[data-copilot-chat-host]{margin-inline-end:var(--copilot-chat-sidecar-width);transition:margin-inline-end var(--copilot-chat-transition);box-sizing:border-box}body[data-copilot-chat-layout=bottom-sheet]{margin-inline-end:0}.copilot-launcher{position:fixed;inset-block-end:var(--spacing-base, 16px);inset-inline-end:var(--spacing-base, 16px);z-index:var(--copilot-chat-panel-z-index);display:flex;align-items:center;justify-content:center;inline-size:calc(var(--spacing-base) * 3);block-size:calc(var(--spacing-base) * 3);padding:0;border:none;border-radius:50%;background-color:var(--copilot-brand-color);color:var(--color-background-white, #fff);cursor:pointer;box-shadow:0 4px 16px var(--color-shadow-default, rgba(0, 0, 0, .16));transition:background-color var(--transition-duration-medium, .16s),transform var(--transition-duration-medium, .16s),opacity var(--transition-duration-medium, .16s)}.copilot-launcher:hover{background-color:var(--copilot-brand-color-hover);transform:scale(var(--transform-scale-up, 1.05))}.copilot-launcher:active{background-color:var(--copilot-brand-color-active)}.copilot-launcher--hidden{opacity:var(--opacity-hidden, 0);pointer-events:none;transform:scale(var(--transform-scale-down, .8))}.copilot-launcher-icon{inline-size:var(--size-icon-medium, 24px);block-size:var(--size-icon-medium, 24px)}.copilot-chat-wrapper{position:fixed;inset-block:0;inset-inline-end:0;inline-size:var(--copilot-chat-sidecar-width);max-inline-size:clamp(var(--sidecar-min-width, 320px),var(--copilot-chat-sidecar-width),var(--sidecar-max-width, 512px));z-index:var(--copilot-chat-panel-z-index);display:flex;flex-direction:column;pointer-events:none;opacity:var(--opacity-hidden, 0);transform:translate(100%);transition:opacity var(--transition-duration-medium, .16s) var(--transition-timing-standard, cubic-bezier(.2, 0, 0, 1)),transform var(--transition-duration-medium, .16s) var(--transition-timing-standard, cubic-bezier(.2, 0, 0, 1))}.copilot-chat-panel{position:relative;display:flex;flex-direction:column;flex:1;min-block-size:0;background-color:var(--color-background-white, #fff);border-inline-start:1px solid var(--color-border-subtle, rgba(0, 0, 0, .12));box-shadow:0 24px 64px var(--color-shadow-strong, rgba(0, 0, 0, .08));font-family:IBM Plex Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.copilot-chat-panel p,.copilot-chat-panel ul,.copilot-chat-panel ol,.copilot-chat-panel li,.copilot-chat-panel span{font-size:14px;font-weight:400;line-height:1.5}.copilot-chat-wrapper--open{opacity:var(--opacity-visible, 1);pointer-events:auto;transform:translate(0)}.copilot-carbon-sidecar{position:fixed;inset-block:0;inset-inline-end:0;inline-size:var(--copilot-chat-sidecar-width);block-size:100vh;z-index:var(--copilot-chat-panel-z-index)}body[data-copilot-chat-layout=bottom-sheet] .copilot-chat-wrapper{inset-inline:0;inset-block-start:auto;inset-block-end:0;block-size:min(70vh,520px);inline-size:100%;border-inline-start:none;border-block-start:1px solid var(--cds-border-subtle, rgba(0, 0, 0, .12))}
@@ -0,0 +1,11 @@
1
+ export { default as CopilotChat } from './CopilotChat';
2
+ export type { CopilotChatProps } from './CopilotChat';
3
+ export { ChatInput, ChatMessage, ChatMessageList, MarkdownRenderer, ThinkingIndicator, CopilotHeader, CopilotLauncher, CopilotStopButton, } from '@camunda/copilot-components';
4
+ export type { ChatMessageType, MessageRole, MessageStatus, } from '@camunda/copilot-components';
5
+ export { useChatStore, useAgentStore, selectIsBusy, selectAgentState, } from './store';
6
+ export type { ChatMessage as ChatMessageInterface } from './types';
7
+ export { AgentState, EventType, EventStatus, ResultType } from './types';
8
+ export type { AgentStateType, EventTypeValue, EventStatusValue, ResultTypeValue, AgentEvent, AgentResult, ToolInvokeResult, FrontendTool, ToolHandler, AgentTransport, AgentAdapterConfig, AgentAdapterReturn, SendMessagePayload, ToolResultPayload, } from './types';
9
+ export { useAgentAdapter } from './hooks';
10
+ export { getDefaultStatusLabel } from './utils';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,uCAAuC,CAAC;AAC/C,OAAO,0BAA0B,CAAC;AAElC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EACL,SAAS,EACT,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,eAAe,EACf,WAAW,EACX,aAAa,GACd,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzE,YAAY,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}