@agentiffai/design 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/{Window-CgGFIYHS.d.cts → Window-CukhSS8T.d.cts} +3 -1
  2. package/dist/{Window-B6e_UfLV.d.ts → Window-CukhSS8T.d.ts} +3 -1
  3. package/dist/{chunk-MNXQDDWP.js → chunk-6NGVSBJZ.js} +71 -10
  4. package/dist/chunk-6NGVSBJZ.js.map +1 -0
  5. package/dist/{chunk-CNVJ5UF2.js → chunk-H5TKEGIC.js} +28 -5
  6. package/dist/chunk-H5TKEGIC.js.map +1 -0
  7. package/dist/{chunk-P4Q3MHIY.cjs → chunk-OPWUJP7J.cjs} +28 -5
  8. package/dist/chunk-OPWUJP7J.cjs.map +1 -0
  9. package/dist/{chunk-KNSPBTTJ.cjs → chunk-ULL2LDN3.cjs} +71 -10
  10. package/dist/chunk-ULL2LDN3.cjs.map +1 -0
  11. package/dist/copilotkit/index.cjs +122 -118
  12. package/dist/copilotkit/index.cjs.map +1 -1
  13. package/dist/copilotkit/index.d.cts +53 -56
  14. package/dist/copilotkit/index.d.ts +53 -56
  15. package/dist/copilotkit/index.js +98 -94
  16. package/dist/copilotkit/index.js.map +1 -1
  17. package/dist/index.cjs +31 -31
  18. package/dist/index.d.cts +3 -3
  19. package/dist/index.d.ts +3 -3
  20. package/dist/index.js +2 -2
  21. package/dist/layout/index.cjs +11 -11
  22. package/dist/layout/index.d.cts +16 -4
  23. package/dist/layout/index.d.ts +16 -4
  24. package/dist/layout/index.js +1 -1
  25. package/package.json +8 -7
  26. package/CHANGELOG.md +0 -35
  27. package/LICENSE +0 -21
  28. package/assets/layout/main-pane-section.png +0 -0
  29. package/assets/layout/nav-complete.png +0 -0
  30. package/assets/layout/nav-horizontal-section.png +0 -0
  31. package/assets/layout/nav-vertical-section.png +0 -0
  32. package/assets/layout/pane-section-dropdowns.png +0 -0
  33. package/assets/layout/pane-section-header.png +0 -0
  34. package/dist/chunk-CNVJ5UF2.js.map +0 -1
  35. package/dist/chunk-KNSPBTTJ.cjs.map +0 -1
  36. package/dist/chunk-MNXQDDWP.js.map +0 -1
  37. package/dist/chunk-P4Q3MHIY.cjs.map +0 -1
  38. package/dist/index.d-DYU1eVeb.d.cts +0 -252
  39. package/dist/index.d-DYU1eVeb.d.ts +0 -252
  40. package/public/assets/bg-set/brand-logos/Google.svg +0 -1
  41. package/public/assets/bg-set/brand-logos/Google2.svg +0 -1
  42. package/public/assets/bg-set/brand-logos/Microsoft.svg +0 -1
  43. package/public/assets/bg-set/brand-logos/Microsoft2.svg +0 -1
  44. package/public/assets/bg-set/brand-logos/Slack.svg +0 -1
  45. package/public/assets/bg-set/brand-logos/Slack2.svg +0 -1
  46. package/public/assets/bg-set/brand-logos/YouTube.svg +0 -1
  47. package/public/assets/bg-set/brand-logos/YouTube2.svg +0 -1
  48. package/public/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg +0 -1
  49. package/public/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg +0 -1
  50. package/public/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg +0 -1
  51. package/public/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg +0 -1
  52. package/public/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg +0 -1
  53. package/public/assets/icon-set/Icon-add-circle-fill.svg +0 -1
  54. package/public/assets/icon-set/Icon-calendar-fill.svg +0 -1
  55. package/public/assets/icon-set/Icon-chat-1-fill.svg +0 -1
  56. package/public/assets/icon-set/Icon-download-2-fill.svg +0 -1
  57. package/public/assets/icon-set/Icon-home-fill.svg +0 -1
  58. package/public/assets/icon-set/Icon-mic-fill.svg +0 -1
  59. package/public/assets/icon-set/Icon-settings-3-fill.svg +0 -1
  60. package/public/assets/icon-set/Icon-settings-fill.svg +0 -1
  61. package/public/assets/icon-set/Icon-settings-line.svg +0 -1
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkP4Q3MHIY_cjs = require('../chunk-P4Q3MHIY.cjs');
3
+ var chunkOPWUJP7J_cjs = require('../chunk-OPWUJP7J.cjs');
4
+ var reactUi = require('@copilotkit/react-ui');
5
+ var styled = require('styled-components');
4
6
  var jsxRuntime = require('react/jsx-runtime');
5
7
  var react = require('react');
6
- var styled = require('styled-components');
7
- var reactUi = require('@copilotkit/react-ui');
8
8
 
9
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
10
 
@@ -24,15 +24,15 @@ var AssistantMessageAdapter = ({
24
24
  // ImageRenderer,
25
25
  }) => {
26
26
  if (isLoading) {
27
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP4Q3MHIY_cjs.AssistantThinking, { message: "Thinking..." });
27
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkOPWUJP7J_cjs.AssistantThinking, { message: "Thinking..." });
28
28
  }
29
29
  if (isGenerating && !message?.content) {
30
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP4Q3MHIY_cjs.AssistantThinking, { message: "Generating response..." });
30
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkOPWUJP7J_cjs.AssistantThinking, { message: "Generating response..." });
31
31
  }
32
32
  const content = message?.content || "";
33
33
  const attachments = [];
34
34
  return /* @__PURE__ */ jsxRuntime.jsx(
35
- chunkP4Q3MHIY_cjs.AssistantMessage,
35
+ chunkOPWUJP7J_cjs.AssistantMessage,
36
36
  {
37
37
  content,
38
38
  avatarInitials: "AI",
@@ -43,6 +43,29 @@ var AssistantMessageAdapter = ({
43
43
  );
44
44
  };
45
45
  AssistantMessageAdapter.displayName = "AssistantMessageAdapter";
46
+ var UserMessageWrapper = styled__default.default.div`
47
+ display: flex;
48
+ justify-content: flex-end;
49
+ width: 100%;
50
+ padding: 8px 0;
51
+ `;
52
+ var UserMessageAdapter = ({
53
+ message,
54
+ ImageRenderer
55
+ }) => {
56
+ if (message?.image) {
57
+ return /* @__PURE__ */ jsxRuntime.jsx(
58
+ ImageRenderer,
59
+ {
60
+ image: message.image,
61
+ content: message.content
62
+ }
63
+ );
64
+ }
65
+ const content = message?.content || "";
66
+ return /* @__PURE__ */ jsxRuntime.jsx(UserMessageWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkOPWUJP7J_cjs.UserMessage, { children: content }) });
67
+ };
68
+ UserMessageAdapter.displayName = "UserMessageAdapter";
46
69
  var InputAdapter = ({
47
70
  inProgress,
48
71
  onSend,
@@ -55,7 +78,7 @@ var InputAdapter = ({
55
78
  setValue("");
56
79
  };
57
80
  return /* @__PURE__ */ jsxRuntime.jsx(
58
- chunkP4Q3MHIY_cjs.ChatInput,
81
+ chunkOPWUJP7J_cjs.ChatInput,
59
82
  {
60
83
  value,
61
84
  onChange: setValue,
@@ -77,23 +100,6 @@ var InputAdapter = ({
77
100
  );
78
101
  };
79
102
  InputAdapter.displayName = "InputAdapter";
80
- var UserMessageWrapper = styled__default.default.div`
81
- display: flex;
82
- justify-content: flex-end;
83
- width: 100%;
84
- padding: 8px 0;
85
- `;
86
- var UserMessageAdapter = ({
87
- message,
88
- ImageRenderer
89
- }) => {
90
- if (message?.image) {
91
- return /* @__PURE__ */ jsxRuntime.jsx(ImageRenderer, { image: message.image, content: message.content });
92
- }
93
- const content = message?.content || "";
94
- return /* @__PURE__ */ jsxRuntime.jsx(UserMessageWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkP4Q3MHIY_cjs.UserMessage, { children: content }) });
95
- };
96
- UserMessageAdapter.displayName = "UserMessageAdapter";
97
103
  var GlobalSidebarStyles = styled.createGlobalStyle`
98
104
  /* Override CopilotKit's default positioning - start off-screen */
99
105
  .copilotKitSidebar {
@@ -110,6 +116,7 @@ var GlobalSidebarStyles = styled.createGlobalStyle`
110
116
 
111
117
  /* Mobile-first: Full viewport sidebar */
112
118
  .copilotKitSidebar .copilotKitWindow {
119
+ /* Override CopilotKit defaults for mobile */
113
120
  position: fixed !important;
114
121
  top: 0 !important;
115
122
  right: 0 !important;
@@ -123,12 +130,14 @@ var GlobalSidebarStyles = styled.createGlobalStyle`
123
130
  border-radius: 0 !important;
124
131
  z-index: 1001 !important;
125
132
 
133
+ /* Hidden by default - translateX(100%) moves it off-screen to the right */
126
134
  transform: translateX(100%) !important;
127
135
  visibility: hidden !important;
128
136
  pointer-events: none !important;
129
137
  opacity: 0 !important;
130
138
  display: none !important;
131
139
 
140
+ /* Smooth slide transition */
132
141
  transition: transform 0.3s ease, visibility 0.3s ease, opacity 0.3s ease !important;
133
142
  }
134
143
 
@@ -171,36 +180,6 @@ var GlobalSidebarStyles = styled.createGlobalStyle`
171
180
  display: flex !important;
172
181
  }
173
182
  }
174
-
175
- /* Override CopilotKit's default message styles with our custom components */
176
- .copilotKitSidebar {
177
- /* Reset all default CopilotKit message styling */
178
- [class*="copilotKitMessage"],
179
- [class*="Message-module"] {
180
- all: unset !important;
181
- display: contents !important;
182
- }
183
-
184
- /* Ensure our custom UserMessage gradient pill shows through */
185
- button[role="presentation"] {
186
- all: revert !important;
187
- display: inline-flex !important;
188
- }
189
-
190
- /* Reset input styles to allow our custom ChatInput */
191
- [class*="Input-module"],
192
- [class*="copilotKitInput"] {
193
- all: unset !important;
194
- display: contents !important;
195
- }
196
-
197
- /* Reset header styles */
198
- [class*="Header-module"],
199
- [class*="copilotKitHeader"] {
200
- all: unset !important;
201
- display: contents !important;
202
- }
203
- }
204
183
  `;
205
184
  var StyledChatButton = styled__default.default.button`
206
185
  position: fixed;
@@ -234,38 +213,32 @@ var StyledChatButton = styled__default.default.button`
234
213
  fill: white;
235
214
  }
236
215
  `;
237
- var CustomCopilotSidebar = ({
216
+ function CustomCopilotSidebar({
238
217
  children,
239
- instructions = "You are a helpful AI assistant.",
240
- labels,
241
- icons,
242
218
  defaultOpen = false,
243
- clickOutsideToClose = true,
244
- hitEscapeToClose = true,
245
- shortcut = "/",
246
219
  onSetOpen,
247
- className,
248
- ...props
249
- }) => {
250
- const HeaderAdapter = (_props) => {
220
+ instructions,
221
+ className
222
+ }) {
223
+ const HeaderAdapterWithClose = (_props) => {
251
224
  const { setOpen } = reactUi.useChatContext();
252
225
  const handleClose = () => {
253
226
  setOpen(false);
254
227
  onSetOpen?.(false);
255
228
  };
256
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP4Q3MHIY_cjs.Header, { title: "AI Assistant", subtitle: "How can I help you today?", onClose: handleClose });
229
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkOPWUJP7J_cjs.Header, { title: "AI Assistant", subtitle: "How can I help you today?", onClose: handleClose });
257
230
  };
258
- const WindowAdapter = (props2) => {
259
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP4Q3MHIY_cjs.Window, { children: props2.children });
231
+ const WindowAdapterLocal = (props) => {
232
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkOPWUJP7J_cjs.Window, { children: props.children });
260
233
  };
261
- const MessagesAdapter = (props2) => {
262
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP4Q3MHIY_cjs.Messages, { children: props2.messages.map((message, index) => /* @__PURE__ */ jsxRuntime.jsx(
263
- props2.RenderMessage,
234
+ const MessagesAdapter = (props) => {
235
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkOPWUJP7J_cjs.Messages, { children: props.messages.map((message, index) => /* @__PURE__ */ jsxRuntime.jsx(
236
+ props.RenderMessage,
264
237
  {
265
238
  message,
266
- inProgress: props2.inProgress,
239
+ inProgress: props.inProgress,
267
240
  index,
268
- isCurrentMessage: index === props2.messages.length - 1
241
+ isCurrentMessage: index === props.messages.length - 1
269
242
  },
270
243
  message.id || `message-${index}`
271
244
  )) });
@@ -310,29 +283,25 @@ var CustomCopilotSidebar = ({
310
283
  AssistantMessage: AssistantMessageAdapter,
311
284
  UserMessage: UserMessageAdapter,
312
285
  Input: InputAdapter,
313
- Header: HeaderAdapter,
314
- Window: WindowAdapter,
286
+ Header: HeaderAdapterWithClose,
287
+ Window: WindowAdapterLocal,
315
288
  Messages: MessagesAdapter,
316
289
  Button: CustomButton,
317
290
  instructions,
318
291
  labels: {
319
292
  title: "AI Assistant",
320
- initial: "Hi! How can I help you today?",
321
- ...labels
293
+ initial: "Hi! How can I help you today?"
322
294
  },
323
- icons,
324
295
  defaultOpen,
325
- clickOutsideToClose,
326
- hitEscapeToClose,
327
- shortcut,
296
+ clickOutsideToClose: true,
297
+ hitEscapeToClose: true,
328
298
  onSetOpen,
329
299
  className,
330
- ...props,
331
300
  children
332
301
  }
333
302
  )
334
303
  ] });
335
- };
304
+ }
336
305
  CustomCopilotSidebar.displayName = "CustomCopilotSidebar";
337
306
  var GlobalSidebarStyles2 = styled.createGlobalStyle`
338
307
  /* Override CopilotKit's default positioning - start off-screen */
@@ -350,7 +319,6 @@ var GlobalSidebarStyles2 = styled.createGlobalStyle`
350
319
 
351
320
  /* Mobile-first: Full viewport sidebar */
352
321
  .copilotKitSidebar .copilotKitWindow {
353
- /* Override CopilotKit defaults for mobile */
354
322
  position: fixed !important;
355
323
  top: 0 !important;
356
324
  right: 0 !important;
@@ -364,14 +332,12 @@ var GlobalSidebarStyles2 = styled.createGlobalStyle`
364
332
  border-radius: 0 !important;
365
333
  z-index: 1001 !important;
366
334
 
367
- /* Hidden by default - translateX(100%) moves it off-screen to the right */
368
335
  transform: translateX(100%) !important;
369
336
  visibility: hidden !important;
370
337
  pointer-events: none !important;
371
338
  opacity: 0 !important;
372
339
  display: none !important;
373
340
 
374
- /* Smooth slide transition */
375
341
  transition: transform 0.3s ease, visibility 0.3s ease, opacity 0.3s ease !important;
376
342
  }
377
343
 
@@ -414,6 +380,36 @@ var GlobalSidebarStyles2 = styled.createGlobalStyle`
414
380
  display: flex !important;
415
381
  }
416
382
  }
383
+
384
+ /* Override CopilotKit's default message styles with our custom components */
385
+ .copilotKitSidebar {
386
+ /* Reset all default CopilotKit message styling */
387
+ [class*="copilotKitMessage"],
388
+ [class*="Message-module"] {
389
+ all: unset !important;
390
+ display: contents !important;
391
+ }
392
+
393
+ /* Ensure our custom UserMessage gradient pill shows through */
394
+ button[role="presentation"] {
395
+ all: revert !important;
396
+ display: inline-flex !important;
397
+ }
398
+
399
+ /* Reset input styles to allow our custom ChatInput */
400
+ [class*="Input-module"],
401
+ [class*="copilotKitInput"] {
402
+ all: unset !important;
403
+ display: contents !important;
404
+ }
405
+
406
+ /* Reset header styles */
407
+ [class*="Header-module"],
408
+ [class*="copilotKitHeader"] {
409
+ all: unset !important;
410
+ display: contents !important;
411
+ }
412
+ }
417
413
  `;
418
414
  var StyledChatButton2 = styled__default.default.button`
419
415
  position: fixed;
@@ -447,26 +443,31 @@ var StyledChatButton2 = styled__default.default.button`
447
443
  fill: white;
448
444
  }
449
445
  `;
450
- function CustomCopilotSidebar2({
446
+ var CustomCopilotSidebar2 = ({
451
447
  children,
448
+ instructions = "You are a helpful AI assistant.",
449
+ labels,
450
+ icons,
452
451
  defaultOpen = false,
452
+ clickOutsideToClose = true,
453
+ hitEscapeToClose = true,
454
+ shortcut = "/",
453
455
  onSetOpen,
454
- instructions,
455
456
  className
456
- }) {
457
- const HeaderAdapterWithClose = (_props) => {
457
+ }) => {
458
+ const HeaderAdapter = (_props) => {
458
459
  const { setOpen } = reactUi.useChatContext();
459
460
  const handleClose = () => {
460
461
  setOpen(false);
461
462
  onSetOpen?.(false);
462
463
  };
463
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP4Q3MHIY_cjs.Header, { title: "AI Assistant", subtitle: "How can I help you today?", onClose: handleClose });
464
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkOPWUJP7J_cjs.Header, { title: "AI Assistant", subtitle: "How can I help you today?", onClose: handleClose });
464
465
  };
465
- const WindowAdapterLocal = (props) => {
466
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP4Q3MHIY_cjs.Window, { children: props.children });
466
+ const WindowAdapter = (props) => {
467
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkOPWUJP7J_cjs.Window, { children: props.children });
467
468
  };
468
469
  const MessagesAdapter = (props) => {
469
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP4Q3MHIY_cjs.Messages, { children: props.messages.map((message, index) => /* @__PURE__ */ jsxRuntime.jsx(
470
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkOPWUJP7J_cjs.Messages, { children: props.messages.map((message, index) => /* @__PURE__ */ jsxRuntime.jsx(
470
471
  props.RenderMessage,
471
472
  {
472
473
  message,
@@ -517,95 +518,98 @@ function CustomCopilotSidebar2({
517
518
  AssistantMessage: AssistantMessageAdapter,
518
519
  UserMessage: UserMessageAdapter,
519
520
  Input: InputAdapter,
520
- Header: HeaderAdapterWithClose,
521
- Window: WindowAdapterLocal,
521
+ Header: HeaderAdapter,
522
+ Window: WindowAdapter,
522
523
  Messages: MessagesAdapter,
523
524
  Button: CustomButton,
524
525
  instructions,
525
526
  labels: {
526
527
  title: "AI Assistant",
527
- initial: "Hi! How can I help you today?"
528
+ initial: "Hi! How can I help you today?",
529
+ ...labels
528
530
  },
531
+ icons,
529
532
  defaultOpen,
530
- clickOutsideToClose: true,
531
- hitEscapeToClose: true,
533
+ clickOutsideToClose,
534
+ hitEscapeToClose,
535
+ shortcut,
532
536
  onSetOpen,
533
537
  className,
534
538
  children
535
539
  }
536
540
  )
537
541
  ] });
538
- }
542
+ };
539
543
  CustomCopilotSidebar2.displayName = "CustomCopilotSidebar";
540
544
 
541
545
  Object.defineProperty(exports, "Actions", {
542
546
  enumerable: true,
543
- get: function () { return chunkP4Q3MHIY_cjs.Actions; }
547
+ get: function () { return chunkOPWUJP7J_cjs.Actions; }
544
548
  });
545
549
  Object.defineProperty(exports, "AgentState", {
546
550
  enumerable: true,
547
- get: function () { return chunkP4Q3MHIY_cjs.AgentState; }
551
+ get: function () { return chunkOPWUJP7J_cjs.AgentState; }
548
552
  });
549
553
  Object.defineProperty(exports, "AssistantMessage", {
550
554
  enumerable: true,
551
- get: function () { return chunkP4Q3MHIY_cjs.AssistantMessage; }
555
+ get: function () { return chunkOPWUJP7J_cjs.AssistantMessage; }
552
556
  });
553
557
  Object.defineProperty(exports, "Button", {
554
558
  enumerable: true,
555
- get: function () { return chunkP4Q3MHIY_cjs.Button; }
559
+ get: function () { return chunkOPWUJP7J_cjs.Button; }
556
560
  });
557
561
  Object.defineProperty(exports, "FileAttachment", {
558
562
  enumerable: true,
559
- get: function () { return chunkP4Q3MHIY_cjs.FileAttachment; }
563
+ get: function () { return chunkOPWUJP7J_cjs.FileAttachment; }
560
564
  });
561
565
  Object.defineProperty(exports, "Footer", {
562
566
  enumerable: true,
563
- get: function () { return chunkP4Q3MHIY_cjs.Footer; }
567
+ get: function () { return chunkOPWUJP7J_cjs.Footer; }
564
568
  });
565
569
  Object.defineProperty(exports, "Header", {
566
570
  enumerable: true,
567
- get: function () { return chunkP4Q3MHIY_cjs.Header; }
571
+ get: function () { return chunkOPWUJP7J_cjs.Header; }
568
572
  });
569
573
  Object.defineProperty(exports, "Input", {
570
574
  enumerable: true,
571
- get: function () { return chunkP4Q3MHIY_cjs.Input; }
575
+ get: function () { return chunkOPWUJP7J_cjs.Input; }
572
576
  });
573
577
  Object.defineProperty(exports, "Messages", {
574
578
  enumerable: true,
575
- get: function () { return chunkP4Q3MHIY_cjs.Messages; }
579
+ get: function () { return chunkOPWUJP7J_cjs.Messages; }
576
580
  });
577
581
  Object.defineProperty(exports, "MessagesList", {
578
582
  enumerable: true,
579
- get: function () { return chunkP4Q3MHIY_cjs.MessagesList; }
583
+ get: function () { return chunkOPWUJP7J_cjs.MessagesList; }
580
584
  });
581
585
  Object.defineProperty(exports, "MessagesListContainer", {
582
586
  enumerable: true,
583
- get: function () { return chunkP4Q3MHIY_cjs.MessagesListContainer; }
587
+ get: function () { return chunkOPWUJP7J_cjs.MessagesListContainer; }
584
588
  });
585
589
  Object.defineProperty(exports, "MessagesListContent", {
586
590
  enumerable: true,
587
- get: function () { return chunkP4Q3MHIY_cjs.MessagesListContent; }
591
+ get: function () { return chunkOPWUJP7J_cjs.MessagesListContent; }
588
592
  });
589
593
  Object.defineProperty(exports, "Response", {
590
594
  enumerable: true,
591
- get: function () { return chunkP4Q3MHIY_cjs.Response; }
595
+ get: function () { return chunkOPWUJP7J_cjs.Response; }
592
596
  });
593
597
  Object.defineProperty(exports, "Suggestions", {
594
598
  enumerable: true,
595
- get: function () { return chunkP4Q3MHIY_cjs.Suggestions; }
599
+ get: function () { return chunkOPWUJP7J_cjs.Suggestions; }
596
600
  });
597
601
  Object.defineProperty(exports, "UserMessage", {
598
602
  enumerable: true,
599
- get: function () { return chunkP4Q3MHIY_cjs.UserMessage2; }
603
+ get: function () { return chunkOPWUJP7J_cjs.UserMessage2; }
600
604
  });
601
605
  Object.defineProperty(exports, "Window", {
602
606
  enumerable: true,
603
- get: function () { return chunkP4Q3MHIY_cjs.Window; }
607
+ get: function () { return chunkOPWUJP7J_cjs.Window; }
604
608
  });
605
609
  exports.AssistantMessageAdapter = AssistantMessageAdapter;
606
- exports.CustomCopilotSidebar = CustomCopilotSidebar2;
610
+ exports.CustomCopilotSidebar = CustomCopilotSidebar;
607
611
  exports.InputAdapter = InputAdapter;
608
- exports.IntegratedSidebar = CustomCopilotSidebar;
612
+ exports.IntegratedSidebar = CustomCopilotSidebar2;
609
613
  exports.UserMessageAdapter = UserMessageAdapter;
610
614
  //# sourceMappingURL=index.cjs.map
611
615
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/copilotkit/adapters/AssistantMessageAdapter.tsx","../../src/components/copilotkit/adapters/InputAdapter.tsx","../../src/components/copilotkit/adapters/UserMessageAdapter.tsx","../../src/components/copilotkit/CopilotSidebarIntegration.tsx","../../src/components/copilotkit/CustomCopilotSidebar/CustomCopilotSidebar.tsx"],"names":["jsx","AssistantThinking","AssistantMessage","useState","ChatInput","styled","UserMessage","createGlobalStyle","useChatContext","Header","props","Window","Messages","jsxs","Fragment","CopilotSidebar","GlobalSidebarStyles","StyledChatButton","CustomCopilotSidebar"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Adapter component that bridges custom AssistantMessage with CopilotKit's expected interface\n *\n * This adapter:\n * 1. Converts CopilotKit's AssistantMessageProps to our custom component props\n * 2. Handles loading states by showing AssistantThinking component\n * 3. Extracts message content and renders with our styled component\n */\n\nimport type { AssistantMessageProps as CopilotAssistantMessageProps } from '@copilotkit/react-ui';\nimport type React from 'react';\nimport { AssistantThinking } from '../../AssistantThinking/AssistantThinking';\nimport { AssistantMessage } from '../Messages/AssistantMessage';\n\n/**\n * Adapter that converts CopilotKit's AssistantMessageProps to our custom component\n */\nexport const AssistantMessageAdapter: React.FC<CopilotAssistantMessageProps> = ({\n message,\n isLoading,\n isGenerating,\n // These are available but not used in our current implementation:\n // isCurrentMessage,\n // onRegenerate,\n // onCopy,\n // onThumbsUp,\n // onThumbsDown,\n // markdownTagRenderers,\n // ImageRenderer,\n}) => {\n // Show thinking state when loading (before content arrives)\n if (isLoading) {\n return <AssistantThinking message=\"Thinking...\" />;\n }\n\n // Show thinking state when generating (content is streaming)\n if (isGenerating && !message?.content) {\n return <AssistantThinking message=\"Generating response...\" />;\n }\n\n // Extract content from the message\n const content = message?.content || '';\n\n // Parse attachments if present in the message\n // Note: generativeUI is a function in CopilotKit's AIMessage, not an array\n // For now, we don't extract attachments from the message\n // TODO: Implement proper attachment extraction when CopilotKit supports it\n const attachments: any[] = [];\n\n return (\n <AssistantMessage\n content={content}\n avatarInitials=\"AI\"\n isLoading={isGenerating} // Show loading dots while generating\n attachments={attachments}\n enableMarkdown={true}\n />\n );\n};\n\nAssistantMessageAdapter.displayName = 'AssistantMessageAdapter';\n","/**\n * Adapter component that bridges custom Input with CopilotKit's expected interface\n *\n * This adapter:\n * 1. Converts CopilotKit's InputProps to our custom component props\n * 2. Handles the onSend callback to work with CopilotKit's message system\n * 3. Manages input state and submission\n */\n\nimport type { InputProps as CopilotInputProps } from '@copilotkit/react-ui';\nimport type React from 'react';\nimport { useState } from 'react';\nimport { ChatInput } from '../../ChatInput/ChatInput';\n\n/**\n * Adapter that converts CopilotKit's InputProps to our custom component\n */\nexport const InputAdapter: React.FC<CopilotInputProps> = ({\n inProgress,\n onSend,\n isVisible = true,\n}) => {\n const [value, setValue] = useState('');\n\n const handleSubmit = async (message: string) => {\n if (!message.trim() || inProgress) return;\n\n // Call CopilotKit's onSend which returns a Promise<Message>\n await onSend(message);\n setValue(''); // Clear input after sending\n };\n\n // TODO: Add support for stop button and file upload if needed\n\n return (\n <ChatInput\n value={value}\n onChange={setValue}\n onSubmit={handleSubmit}\n placeholder=\"Ask, write or search for anything...\"\n isDisabled={inProgress}\n autoFocus={isVisible}\n aria-label=\"Chat message input\"\n suggestions={[\n { text: 'Create in-depth analysis' },\n { text: 'Identify actionable tasks' },\n { text: 'Summarize key points' },\n ]}\n onSuggestionSelect={(suggestion) => {\n setValue(suggestion);\n handleSubmit(suggestion);\n }}\n />\n );\n};\n\nInputAdapter.displayName = 'InputAdapter';\n","/**\n * Adapter component that bridges custom UserMessage with CopilotKit's expected interface\n *\n * This adapter:\n * 1. Converts CopilotKit's UserMessageProps to our custom component props\n * 2. Extracts message content from CopilotKit's message object\n * 3. Handles image messages appropriately\n */\n\nimport type { UserMessageProps as CopilotUserMessageProps } from '@copilotkit/react-ui';\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { UserMessage } from '../../UserMessage/UserMessage';\n\n// Wrapper to align user messages to the right\nconst UserMessageWrapper = styled.div`\n display: flex;\n justify-content: flex-end;\n width: 100%;\n padding: 8px 0;\n`;\n\n/**\n * Adapter that converts CopilotKit's UserMessageProps to our custom component\n */\nexport const UserMessageAdapter: React.FC<CopilotUserMessageProps> = ({\n message,\n ImageRenderer,\n}) => {\n // Handle image messages\n if (message?.image) {\n return <ImageRenderer image={message.image} content={message.content} />;\n }\n\n // Extract text content\n const content = message?.content || '';\n\n // Our UserMessage is a button-like component with React ARIA\n // In the chat context, it's not interactive, so we don't provide onPress\n return (\n <UserMessageWrapper>\n <UserMessage>{content}</UserMessage>\n </UserMessageWrapper>\n );\n};\n\nUserMessageAdapter.displayName = 'UserMessageAdapter';\n","/**\n * Complete CopilotSidebar Integration Example\n *\n * This file demonstrates how to integrate custom-designed components\n * (AssistantMessage, UserMessage, AssistantThinking, Input) with CopilotKit's\n * CopilotSidebar component using adapter components.\n *\n * Usage:\n * ```tsx\n * import { CopilotKit } from \"@copilotkit/react-core\";\n * import { CustomCopilotSidebar } from \"./CopilotSidebarIntegration\";\n *\n * function App() {\n * return (\n * <CopilotKit runtimeUrl=\"/api/copilotkit\">\n * <CustomCopilotSidebar>\n * <YourApp />\n * </CustomCopilotSidebar>\n * </CopilotKit>\n * );\n * }\n * ```\n */\n\nimport type {\n ButtonProps as CopilotButtonProps,\n HeaderProps as CopilotHeaderProps,\n MessagesProps as CopilotMessagesProps,\n WindowProps as CopilotWindowProps,\n} from '@copilotkit/react-ui';\nimport { CopilotSidebar, useChatContext } from '@copilotkit/react-ui';\nimport type React from 'react';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { AssistantMessageAdapter, InputAdapter, UserMessageAdapter } from './adapters';\nimport { Header } from './Header/Header';\nimport { Messages } from './Messages/Messages';\nimport { Window } from './Window/Window';\n\n// Global styles to ensure sidebar starts hidden and button visibility\nconst GlobalSidebarStyles = createGlobalStyle`\n /* Override CopilotKit's default positioning - start off-screen */\n .copilotKitSidebar {\n position: fixed !important;\n right: -100vw !important;\n bottom: 0 !important;\n transition: right 0.3s ease !important;\n }\n\n /* Move sidebar container into view when expanded */\n .copilotKitSidebarContentWrapper.sidebarExpanded .copilotKitSidebar {\n right: 0 !important;\n }\n\n /* Mobile-first: Full viewport sidebar */\n .copilotKitSidebar .copilotKitWindow {\n position: fixed !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: auto !important;\n width: 100vw !important;\n height: 100vh !important;\n max-width: 100vw !important;\n max-height: 100vh !important;\n margin: 0 !important;\n border-radius: 0 !important;\n z-index: 1001 !important;\n\n transform: translateX(100%) !important;\n visibility: hidden !important;\n pointer-events: none !important;\n opacity: 0 !important;\n display: none !important;\n\n transition: transform 0.3s ease, visibility 0.3s ease, opacity 0.3s ease !important;\n }\n\n /* When window has .open class (CopilotKit's native class), show it */\n .copilotKitSidebar .copilotKitWindow.open {\n display: flex !important;\n transform: translateX(0) !important;\n visibility: visible !important;\n pointer-events: auto !important;\n opacity: 1 !important;\n }\n\n /* Desktop: Sidebar panel on the right (640px = CopilotKit's breakpoint) */\n @media (min-width: 640px) {\n .copilotKitSidebar .copilotKitWindow {\n inset: auto !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: auto !important;\n width: 28rem !important;\n height: 100vh !important;\n max-width: 28rem !important;\n max-height: 100vh !important;\n }\n }\n\n /* Hide button when sidebar is open */\n .copilotKitSidebarContentWrapper.sidebarExpanded {\n button[aria-label=\"Open chat\"],\n button[aria-label=\"Close chat\"] {\n display: none !important;\n }\n }\n\n /* Show button when sidebar is closed */\n .copilotKitSidebarContentWrapper:not(.sidebarExpanded) {\n button[aria-label=\"Open chat\"],\n button[aria-label=\"Close chat\"] {\n display: flex !important;\n }\n }\n\n /* Override CopilotKit's default message styles with our custom components */\n .copilotKitSidebar {\n /* Reset all default CopilotKit message styling */\n [class*=\"copilotKitMessage\"],\n [class*=\"Message-module\"] {\n all: unset !important;\n display: contents !important;\n }\n\n /* Ensure our custom UserMessage gradient pill shows through */\n button[role=\"presentation\"] {\n all: revert !important;\n display: inline-flex !important;\n }\n\n /* Reset input styles to allow our custom ChatInput */\n [class*=\"Input-module\"],\n [class*=\"copilotKitInput\"] {\n all: unset !important;\n display: contents !important;\n }\n\n /* Reset header styles */\n [class*=\"Header-module\"],\n [class*=\"copilotKitHeader\"] {\n all: unset !important;\n display: contents !important;\n }\n }\n`;\n\n// Styled button positioned in the bottom-right corner\nconst StyledChatButton = styled.button`\n position: fixed;\n bottom: 8px;\n right: 8px;\n width: 36px;\n height: 36px;\n border-radius: 18px;\n border: none;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 1000;\n transition: all 0.2s ease;\n\n &:hover {\n transform: scale(1.05);\n box-shadow: 0 6px 16px rgba(102, 126, 234, 0.5);\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 20px;\n height: 20px;\n fill: white;\n }\n`;\n\nexport interface CustomCopilotSidebarProps {\n /**\n * Children to render alongside the sidebar\n */\n children?: React.ReactNode;\n /**\n * Instructions for the AI assistant\n */\n instructions?: string;\n /**\n * Custom labels for the sidebar\n */\n labels?: {\n title?: string;\n initial?: string;\n };\n /**\n * Custom icons\n */\n icons?: Record<string, React.ReactNode>;\n /**\n * Whether the sidebar starts open\n */\n defaultOpen?: boolean;\n /**\n * Allow closing by clicking outside\n */\n clickOutsideToClose?: boolean;\n /**\n * Allow closing with Escape key\n */\n hitEscapeToClose?: boolean;\n /**\n * Keyboard shortcut to open\n */\n shortcut?: string;\n /**\n * Callback when open state changes\n */\n onSetOpen?: (open: boolean) => void;\n /**\n * CSS class name\n */\n className?: string;\n}\n\n/**\n * CopilotSidebar with custom-designed components\n *\n * This component wraps CopilotKit's CopilotSidebar and injects our\n * custom components via adapter components.\n *\n * Features:\n * - Custom AssistantMessage with avatar and loading states\n * - AssistantThinking component shown during loading\n * - Custom UserMessage with gradient pill design\n * - Custom Input with React ARIA accessibility\n * - Styled chat button with gradient\n */\nexport const CustomCopilotSidebar: React.FC<CustomCopilotSidebarProps> = ({\n children,\n instructions = 'You are a helpful AI assistant.',\n labels,\n icons,\n defaultOpen = false,\n clickOutsideToClose = true,\n hitEscapeToClose = true,\n shortcut = '/',\n onSetOpen,\n className,\n ...props\n}) => {\n // Header adapter with close handler\n // biome-ignore lint/correctness/noNestedComponentDefinitions: This component must be defined here to access CopilotKit's ChatContext and the onSetOpen prop\n const HeaderAdapter = (_props: CopilotHeaderProps) => {\n const { setOpen } = useChatContext();\n\n const handleClose = () => {\n setOpen(false);\n onSetOpen?.(false);\n };\n\n return (\n <Header title=\"AI Assistant\" subtitle=\"How can I help you today?\" onClose={handleClose} />\n );\n };\n\n // Window adapter - wraps our custom Window component\n // biome-ignore lint/correctness/noNestedComponentDefinitions: Simple adapter component\n const WindowAdapter = (props: CopilotWindowProps) => {\n return <Window>{props.children}</Window>;\n };\n\n // Messages adapter - wraps our custom Messages component\n // biome-ignore lint/correctness/noNestedComponentDefinitions: Simple adapter component\n const MessagesAdapter = (props: CopilotMessagesProps) => {\n return (\n <Messages>\n {props.messages.map((message, index) => (\n <props.RenderMessage\n key={message.id || `message-${index}`}\n message={message}\n inProgress={props.inProgress}\n index={index}\n isCurrentMessage={index === props.messages.length - 1}\n />\n ))}\n </Messages>\n );\n };\n\n // Custom Button component that uses CopilotKit's ChatContext\n // biome-ignore lint/correctness/noNestedComponentDefinitions: This component must be defined here to access CopilotKit's ChatContext and the onSetOpen prop\n const CustomButton = (_props: CopilotButtonProps) => {\n const { open, setOpen } = useChatContext();\n\n const handleClick = () => {\n const newOpenState = !open;\n setOpen(newOpenState);\n onSetOpen?.(newOpenState);\n };\n\n return (\n <StyledChatButton\n onClick={handleClick}\n aria-label={open ? 'Close chat' : 'Open chat'}\n type=\"button\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Chat icon\"\n >\n <title>Chat</title>\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z\" />\n </svg>\n </StyledChatButton>\n );\n };\n\n return (\n <>\n <GlobalSidebarStyles />\n <CopilotSidebar\n // Pass through custom components via adapters\n AssistantMessage={AssistantMessageAdapter}\n UserMessage={UserMessageAdapter}\n Input={InputAdapter}\n Header={HeaderAdapter}\n Window={WindowAdapter}\n Messages={MessagesAdapter}\n Button={CustomButton}\n // Configuration\n instructions={instructions}\n labels={{\n title: 'AI Assistant',\n initial: 'Hi! How can I help you today?',\n ...labels,\n }}\n icons={icons}\n // Behavior\n defaultOpen={defaultOpen}\n clickOutsideToClose={clickOutsideToClose}\n hitEscapeToClose={hitEscapeToClose}\n shortcut={shortcut}\n onSetOpen={onSetOpen}\n // Styling\n className={className}\n // Other props\n {...props}\n >\n {children}\n </CopilotSidebar>\n </>\n );\n};\n\nCustomCopilotSidebar.displayName = 'CustomCopilotSidebar';\n","import type {\n ButtonProps as CopilotButtonProps,\n HeaderProps as CopilotHeaderProps,\n MessagesProps as CopilotMessagesProps,\n WindowProps as CopilotWindowProps,\n} from '@copilotkit/react-ui';\nimport { CopilotSidebar, useChatContext } from '@copilotkit/react-ui';\nimport type { ReactNode } from 'react';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { AssistantMessageAdapter, InputAdapter, UserMessageAdapter } from '../adapters';\nimport { Header } from '../Header/Header';\nimport { Messages } from '../Messages/Messages';\nimport { Window } from '../Window/Window';\n\n// Global styles to ensure sidebar starts hidden and button visibility\nconst GlobalSidebarStyles = createGlobalStyle`\n /* Override CopilotKit's default positioning - start off-screen */\n .copilotKitSidebar {\n position: fixed !important;\n right: -100vw !important;\n bottom: 0 !important;\n transition: right 0.3s ease !important;\n }\n\n /* Move sidebar container into view when expanded */\n .copilotKitSidebarContentWrapper.sidebarExpanded .copilotKitSidebar {\n right: 0 !important;\n }\n\n /* Mobile-first: Full viewport sidebar */\n .copilotKitSidebar .copilotKitWindow {\n /* Override CopilotKit defaults for mobile */\n position: fixed !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: auto !important;\n width: 100vw !important;\n height: 100vh !important;\n max-width: 100vw !important;\n max-height: 100vh !important;\n margin: 0 !important;\n border-radius: 0 !important;\n z-index: 1001 !important;\n\n /* Hidden by default - translateX(100%) moves it off-screen to the right */\n transform: translateX(100%) !important;\n visibility: hidden !important;\n pointer-events: none !important;\n opacity: 0 !important;\n display: none !important;\n\n /* Smooth slide transition */\n transition: transform 0.3s ease, visibility 0.3s ease, opacity 0.3s ease !important;\n }\n\n /* When window has .open class (CopilotKit's native class), show it */\n .copilotKitSidebar .copilotKitWindow.open {\n display: flex !important;\n transform: translateX(0) !important;\n visibility: visible !important;\n pointer-events: auto !important;\n opacity: 1 !important;\n }\n\n /* Desktop: Sidebar panel on the right (640px = CopilotKit's breakpoint) */\n @media (min-width: 640px) {\n .copilotKitSidebar .copilotKitWindow {\n inset: auto !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: auto !important;\n width: 28rem !important;\n height: 100vh !important;\n max-width: 28rem !important;\n max-height: 100vh !important;\n }\n }\n\n /* Hide button when sidebar is open */\n .copilotKitSidebarContentWrapper.sidebarExpanded {\n button[aria-label=\"Open chat\"],\n button[aria-label=\"Close chat\"] {\n display: none !important;\n }\n }\n\n /* Show button when sidebar is closed */\n .copilotKitSidebarContentWrapper:not(.sidebarExpanded) {\n button[aria-label=\"Open chat\"],\n button[aria-label=\"Close chat\"] {\n display: flex !important;\n }\n }\n`;\n\n// Styled button positioned in the bottom-right corner\nconst StyledChatButton = styled.button`\n position: fixed;\n bottom: 8px;\n right: 8px;\n width: 36px;\n height: 36px;\n border-radius: 18px;\n border: none;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 1000;\n transition: all 0.2s ease;\n\n &:hover {\n transform: scale(1.05);\n box-shadow: 0 6px 16px rgba(102, 126, 234, 0.5);\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 20px;\n height: 20px;\n fill: white;\n }\n`;\n\nexport interface CustomCopilotSidebarProps {\n children: ReactNode;\n defaultOpen?: boolean;\n onSetOpen?: (open: boolean) => void;\n instructions?: string;\n className?: string;\n}\n\n/**\n * CustomCopilotSidebar - A CopilotSidebar wrapper using our custom components\n *\n * This component wraps CopilotKit's CopilotSidebar and provides our custom\n * design system components for a consistent look and feel.\n *\n * @example\n * ```tsx\n * <CustomCopilotSidebar defaultOpen={false} onSetOpen={(open) => console.log(open)}>\n * <YourApp />\n * </CustomCopilotSidebar>\n * ```\n */\nexport function CustomCopilotSidebar({\n children,\n defaultOpen = false,\n onSetOpen,\n instructions,\n className,\n}: CustomCopilotSidebarProps) {\n // Header adapter with close handler\n // biome-ignore lint/correctness/noNestedComponentDefinitions: This component must be defined here to access CopilotKit's ChatContext and the onSetOpen prop\n const HeaderAdapterWithClose = (_props: CopilotHeaderProps) => {\n const { setOpen } = useChatContext();\n\n const handleClose = () => {\n setOpen(false);\n onSetOpen?.(false);\n };\n\n return (\n <Header title=\"AI Assistant\" subtitle=\"How can I help you today?\" onClose={handleClose} />\n );\n };\n\n // Window adapter - wraps our custom Window component\n // biome-ignore lint/correctness/noNestedComponentDefinitions: Simple adapter component\n const WindowAdapterLocal = (props: CopilotWindowProps) => {\n return <Window>{props.children}</Window>;\n };\n\n // Messages adapter - wraps our custom Messages component\n // biome-ignore lint/correctness/noNestedComponentDefinitions: Simple adapter component\n const MessagesAdapter = (props: CopilotMessagesProps) => {\n return (\n <Messages>\n {props.messages.map((message, index) => (\n <props.RenderMessage\n key={message.id || `message-${index}`}\n message={message}\n inProgress={props.inProgress}\n index={index}\n isCurrentMessage={index === props.messages.length - 1}\n />\n ))}\n </Messages>\n );\n };\n\n // Custom Button component that uses CopilotKit's ChatContext\n // biome-ignore lint/correctness/noNestedComponentDefinitions: This component must be defined here to access CopilotKit's ChatContext and the onSetOpen prop\n const CustomButton = (_props: CopilotButtonProps) => {\n const { open, setOpen } = useChatContext();\n\n const handleClick = () => {\n const newOpenState = !open;\n setOpen(newOpenState);\n onSetOpen?.(newOpenState);\n };\n\n return (\n <StyledChatButton\n onClick={handleClick}\n aria-label={open ? 'Close chat' : 'Open chat'}\n type=\"button\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Chat icon\"\n >\n <title>Chat</title>\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z\" />\n </svg>\n </StyledChatButton>\n );\n };\n\n return (\n <>\n <GlobalSidebarStyles />\n <CopilotSidebar\n // Pass through custom components via adapters\n AssistantMessage={AssistantMessageAdapter}\n UserMessage={UserMessageAdapter}\n Input={InputAdapter}\n Header={HeaderAdapterWithClose}\n Window={WindowAdapterLocal}\n Messages={MessagesAdapter}\n Button={CustomButton}\n // Configuration\n instructions={instructions}\n labels={{\n title: 'AI Assistant',\n initial: 'Hi! How can I help you today?',\n }}\n // Behavior\n defaultOpen={defaultOpen}\n clickOutsideToClose={true}\n hitEscapeToClose={true}\n onSetOpen={onSetOpen}\n // Styling\n className={className}\n >\n {children}\n </CopilotSidebar>\n </>\n );\n}\n\nCustomCopilotSidebar.displayName = 'CustomCopilotSidebar';\n"]}
1
+ {"version":3,"sources":["../../src/components/copilotkit/adapters/AssistantMessageAdapter.tsx","../../src/components/copilotkit/adapters/UserMessageAdapter.tsx","../../src/components/copilotkit/adapters/InputAdapter.tsx","../../src/components/copilotkit/CustomCopilotSidebar/CustomCopilotSidebar.tsx","../../src/components/copilotkit/CopilotSidebarIntegration.tsx"],"names":["jsx","AssistantThinking","AssistantMessage","styled","UserMessage","useState","ChatInput","createGlobalStyle","useChatContext","Header","Window","Messages","jsxs","Fragment","CopilotSidebar","GlobalSidebarStyles","StyledChatButton","CustomCopilotSidebar"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Adapter component that bridges custom AssistantMessage with CopilotKit's expected interface\n *\n * This adapter:\n * 1. Converts CopilotKit's AssistantMessageProps to our custom component props\n * 2. Handles loading states by showing AssistantThinking component\n * 3. Extracts message content and renders with our styled component\n */\n\nimport type React from 'react';\nimport type { AssistantMessageProps as CopilotAssistantMessageProps } from '@copilotkit/react-ui';\nimport { AssistantMessage } from '../Messages/AssistantMessage';\nimport { AssistantThinking } from '../../AssistantThinking/AssistantThinking';\n\n/**\n * Adapter that converts CopilotKit's AssistantMessageProps to our custom component\n */\nexport const AssistantMessageAdapter: React.FC<CopilotAssistantMessageProps> = ({\n message,\n isLoading,\n isGenerating,\n // These are available but not used in our current implementation:\n // isCurrentMessage,\n // onRegenerate,\n // onCopy,\n // onThumbsUp,\n // onThumbsDown,\n // markdownTagRenderers,\n // ImageRenderer,\n}) => {\n // Show thinking state when loading (before content arrives)\n if (isLoading) {\n return <AssistantThinking message=\"Thinking...\" />;\n }\n\n // Show thinking state when generating (content is streaming)\n if (isGenerating && !message?.content) {\n return <AssistantThinking message=\"Generating response...\" />;\n }\n\n // Extract content from the message\n const content = message?.content || '';\n\n // Parse attachments if present in the message\n // TODO: Implement attachments parsing from CopilotKit message data\n const attachments: any[] = [];\n\n return (\n <AssistantMessage\n content={content}\n avatarInitials=\"AI\"\n isLoading={isGenerating} // Show loading dots while generating\n attachments={attachments}\n enableMarkdown={true}\n />\n );\n};\n\nAssistantMessageAdapter.displayName = 'AssistantMessageAdapter';\n","/**\n * Adapter component that bridges custom UserMessage with CopilotKit's expected interface\n *\n * This adapter:\n * 1. Converts CopilotKit's UserMessageProps to our custom component props\n * 2. Extracts message content from CopilotKit's message object\n * 3. Handles image messages appropriately\n */\n\nimport type React from 'react';\nimport type { UserMessageProps as CopilotUserMessageProps } from '@copilotkit/react-ui';\nimport styled from 'styled-components';\nimport { UserMessage } from '../../UserMessage/UserMessage';\n\n// Wrapper to align user messages to the right\nconst UserMessageWrapper = styled.div`\n display: flex;\n justify-content: flex-end;\n width: 100%;\n padding: 8px 0;\n`;\n\n/**\n * Adapter that converts CopilotKit's UserMessageProps to our custom component\n */\nexport const UserMessageAdapter: React.FC<CopilotUserMessageProps> = ({\n message,\n ImageRenderer,\n}) => {\n // Handle image messages\n if (message?.image) {\n return (\n <ImageRenderer\n image={message.image}\n content={message.content}\n />\n );\n }\n\n // Extract text content\n const content = message?.content || '';\n\n // Our UserMessage is a button-like component with React ARIA\n // In the chat context, it's not interactive, so we don't provide onPress\n return (\n <UserMessageWrapper>\n <UserMessage>\n {content}\n </UserMessage>\n </UserMessageWrapper>\n );\n};\n\nUserMessageAdapter.displayName = 'UserMessageAdapter';\n","/**\n * Adapter component that bridges custom Input with CopilotKit's expected interface\n *\n * This adapter:\n * 1. Converts CopilotKit's InputProps to our custom component props\n * 2. Handles the onSend callback to work with CopilotKit's message system\n * 3. Manages input state and submission\n */\n\nimport { useState } from 'react';\nimport type React from 'react';\nimport type { InputProps as CopilotInputProps } from '@copilotkit/react-ui';\nimport { ChatInput } from '../../ChatInput/ChatInput';\n\n/**\n * Adapter that converts CopilotKit's InputProps to our custom component\n */\nexport const InputAdapter: React.FC<CopilotInputProps> = ({\n inProgress,\n onSend,\n isVisible = true,\n}) => {\n const [value, setValue] = useState('');\n\n const handleSubmit = async (message: string) => {\n if (!message.trim() || inProgress) return;\n\n // Call CopilotKit's onSend which returns a Promise<Message>\n await onSend(message);\n setValue(''); // Clear input after sending\n };\n\n // TODO: Add support for stop button and file upload if needed\n\n return (\n <ChatInput\n value={value}\n onChange={setValue}\n onSubmit={handleSubmit}\n placeholder=\"Ask, write or search for anything...\"\n isDisabled={inProgress}\n autoFocus={isVisible}\n aria-label=\"Chat message input\"\n suggestions={[\n { text: 'Create in-depth analysis' },\n { text: 'Identify actionable tasks' },\n { text: 'Summarize key points' },\n ]}\n onSuggestionSelect={(suggestion) => {\n setValue(suggestion);\n handleSubmit(suggestion);\n }}\n />\n );\n};\n\nInputAdapter.displayName = 'InputAdapter';\n","import type {\n ButtonProps as CopilotButtonProps,\n HeaderProps as CopilotHeaderProps,\n MessagesProps as CopilotMessagesProps,\n WindowProps as CopilotWindowProps,\n} from '@copilotkit/react-ui';\nimport { CopilotSidebar, useChatContext } from '@copilotkit/react-ui';\nimport type { ReactNode } from 'react';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport {\n AssistantMessageAdapter,\n UserMessageAdapter,\n InputAdapter,\n} from '../adapters';\nimport { Header } from '../Header/Header';\nimport { Messages } from '../Messages/Messages';\nimport { Window } from '../Window/Window';\n\n// Global styles to ensure sidebar starts hidden and button visibility\nconst GlobalSidebarStyles = createGlobalStyle`\n /* Override CopilotKit's default positioning - start off-screen */\n .copilotKitSidebar {\n position: fixed !important;\n right: -100vw !important;\n bottom: 0 !important;\n transition: right 0.3s ease !important;\n }\n\n /* Move sidebar container into view when expanded */\n .copilotKitSidebarContentWrapper.sidebarExpanded .copilotKitSidebar {\n right: 0 !important;\n }\n\n /* Mobile-first: Full viewport sidebar */\n .copilotKitSidebar .copilotKitWindow {\n /* Override CopilotKit defaults for mobile */\n position: fixed !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: auto !important;\n width: 100vw !important;\n height: 100vh !important;\n max-width: 100vw !important;\n max-height: 100vh !important;\n margin: 0 !important;\n border-radius: 0 !important;\n z-index: 1001 !important;\n\n /* Hidden by default - translateX(100%) moves it off-screen to the right */\n transform: translateX(100%) !important;\n visibility: hidden !important;\n pointer-events: none !important;\n opacity: 0 !important;\n display: none !important;\n\n /* Smooth slide transition */\n transition: transform 0.3s ease, visibility 0.3s ease, opacity 0.3s ease !important;\n }\n\n /* When window has .open class (CopilotKit's native class), show it */\n .copilotKitSidebar .copilotKitWindow.open {\n display: flex !important;\n transform: translateX(0) !important;\n visibility: visible !important;\n pointer-events: auto !important;\n opacity: 1 !important;\n }\n\n /* Desktop: Sidebar panel on the right (640px = CopilotKit's breakpoint) */\n @media (min-width: 640px) {\n .copilotKitSidebar .copilotKitWindow {\n inset: auto !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: auto !important;\n width: 28rem !important;\n height: 100vh !important;\n max-width: 28rem !important;\n max-height: 100vh !important;\n }\n }\n\n /* Hide button when sidebar is open */\n .copilotKitSidebarContentWrapper.sidebarExpanded {\n button[aria-label=\"Open chat\"],\n button[aria-label=\"Close chat\"] {\n display: none !important;\n }\n }\n\n /* Show button when sidebar is closed */\n .copilotKitSidebarContentWrapper:not(.sidebarExpanded) {\n button[aria-label=\"Open chat\"],\n button[aria-label=\"Close chat\"] {\n display: flex !important;\n }\n }\n`;\n\n// Styled button positioned in the bottom-right corner\nconst StyledChatButton = styled.button`\n position: fixed;\n bottom: 8px;\n right: 8px;\n width: 36px;\n height: 36px;\n border-radius: 18px;\n border: none;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 1000;\n transition: all 0.2s ease;\n\n &:hover {\n transform: scale(1.05);\n box-shadow: 0 6px 16px rgba(102, 126, 234, 0.5);\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 20px;\n height: 20px;\n fill: white;\n }\n`;\n\nexport interface CustomCopilotSidebarProps {\n children: ReactNode;\n defaultOpen?: boolean;\n onSetOpen?: (open: boolean) => void;\n instructions?: string;\n className?: string;\n}\n\n/**\n * CustomCopilotSidebar - A CopilotSidebar wrapper using our custom components\n *\n * This component wraps CopilotKit's CopilotSidebar and provides our custom\n * design system components for a consistent look and feel.\n *\n * @example\n * ```tsx\n * <CustomCopilotSidebar defaultOpen={false} onSetOpen={(open) => console.log(open)}>\n * <YourApp />\n * </CustomCopilotSidebar>\n * ```\n */\nexport function CustomCopilotSidebar({\n children,\n defaultOpen = false,\n onSetOpen,\n instructions,\n className,\n}: CustomCopilotSidebarProps) {\n // Header adapter with close handler\n // biome-ignore lint/correctness/noNestedComponentDefinitions: This component must be defined here to access CopilotKit's ChatContext and the onSetOpen prop\n const HeaderAdapterWithClose = (_props: CopilotHeaderProps) => {\n const { setOpen } = useChatContext();\n\n const handleClose = () => {\n setOpen(false);\n onSetOpen?.(false);\n };\n\n return (\n <Header title=\"AI Assistant\" subtitle=\"How can I help you today?\" onClose={handleClose} />\n );\n };\n\n // Window adapter - wraps our custom Window component\n // biome-ignore lint/correctness/noNestedComponentDefinitions: Simple adapter component\n const WindowAdapterLocal = (props: CopilotWindowProps) => {\n return <Window>{props.children}</Window>;\n };\n\n // Messages adapter - wraps our custom Messages component\n // biome-ignore lint/correctness/noNestedComponentDefinitions: Simple adapter component\n const MessagesAdapter = (props: CopilotMessagesProps) => {\n return (\n <Messages>\n {props.messages.map((message, index) => (\n <props.RenderMessage\n key={message.id || `message-${index}`}\n message={message}\n inProgress={props.inProgress}\n index={index}\n isCurrentMessage={index === props.messages.length - 1}\n />\n ))}\n </Messages>\n );\n };\n\n // Custom Button component that uses CopilotKit's ChatContext\n // biome-ignore lint/correctness/noNestedComponentDefinitions: This component must be defined here to access CopilotKit's ChatContext and the onSetOpen prop\n const CustomButton = (_props: CopilotButtonProps) => {\n const { open, setOpen } = useChatContext();\n\n const handleClick = () => {\n const newOpenState = !open;\n setOpen(newOpenState);\n onSetOpen?.(newOpenState);\n };\n\n return (\n <StyledChatButton\n onClick={handleClick}\n aria-label={open ? 'Close chat' : 'Open chat'}\n type=\"button\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Chat icon\"\n >\n <title>Chat</title>\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z\" />\n </svg>\n </StyledChatButton>\n );\n };\n\n return (\n <>\n <GlobalSidebarStyles />\n <CopilotSidebar\n // Pass through custom components via adapters\n AssistantMessage={AssistantMessageAdapter}\n UserMessage={UserMessageAdapter}\n Input={InputAdapter}\n Header={HeaderAdapterWithClose}\n Window={WindowAdapterLocal}\n Messages={MessagesAdapter}\n Button={CustomButton}\n\n // Configuration\n instructions={instructions}\n labels={{\n title: 'AI Assistant',\n initial: 'Hi! How can I help you today?',\n }}\n\n // Behavior\n defaultOpen={defaultOpen}\n clickOutsideToClose={true}\n hitEscapeToClose={true}\n onSetOpen={onSetOpen}\n\n // Styling\n className={className}\n >\n {children}\n </CopilotSidebar>\n </>\n );\n}\n\nCustomCopilotSidebar.displayName = 'CustomCopilotSidebar';\n","/**\n * Complete CopilotSidebar Integration Example\n *\n * This file demonstrates how to integrate custom-designed components\n * (AssistantMessage, UserMessage, AssistantThinking, Input) with CopilotKit's\n * CopilotSidebar component using adapter components.\n *\n * Usage:\n * ```tsx\n * import { CopilotKit } from \"@copilotkit/react-core\";\n * import { CustomCopilotSidebar } from \"./CopilotSidebarIntegration\";\n *\n * function App() {\n * return (\n * <CopilotKit runtimeUrl=\"/api/copilotkit\">\n * <CustomCopilotSidebar>\n * <YourApp />\n * </CustomCopilotSidebar>\n * </CopilotKit>\n * );\n * }\n * ```\n */\n\nimport type React from 'react';\nimport { CopilotSidebar, useChatContext } from '@copilotkit/react-ui';\nimport type {\n ButtonProps as CopilotButtonProps,\n HeaderProps as CopilotHeaderProps,\n WindowProps as CopilotWindowProps,\n MessagesProps as CopilotMessagesProps,\n} from '@copilotkit/react-ui';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport {\n AssistantMessageAdapter,\n UserMessageAdapter,\n InputAdapter,\n} from './adapters';\nimport { Header } from './Header/Header';\nimport { Window } from './Window/Window';\nimport { Messages } from './Messages/Messages';\n\n// Global styles to ensure sidebar starts hidden and button visibility\nconst GlobalSidebarStyles = createGlobalStyle`\n /* Override CopilotKit's default positioning - start off-screen */\n .copilotKitSidebar {\n position: fixed !important;\n right: -100vw !important;\n bottom: 0 !important;\n transition: right 0.3s ease !important;\n }\n\n /* Move sidebar container into view when expanded */\n .copilotKitSidebarContentWrapper.sidebarExpanded .copilotKitSidebar {\n right: 0 !important;\n }\n\n /* Mobile-first: Full viewport sidebar */\n .copilotKitSidebar .copilotKitWindow {\n position: fixed !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: auto !important;\n width: 100vw !important;\n height: 100vh !important;\n max-width: 100vw !important;\n max-height: 100vh !important;\n margin: 0 !important;\n border-radius: 0 !important;\n z-index: 1001 !important;\n\n transform: translateX(100%) !important;\n visibility: hidden !important;\n pointer-events: none !important;\n opacity: 0 !important;\n display: none !important;\n\n transition: transform 0.3s ease, visibility 0.3s ease, opacity 0.3s ease !important;\n }\n\n /* When window has .open class (CopilotKit's native class), show it */\n .copilotKitSidebar .copilotKitWindow.open {\n display: flex !important;\n transform: translateX(0) !important;\n visibility: visible !important;\n pointer-events: auto !important;\n opacity: 1 !important;\n }\n\n /* Desktop: Sidebar panel on the right (640px = CopilotKit's breakpoint) */\n @media (min-width: 640px) {\n .copilotKitSidebar .copilotKitWindow {\n inset: auto !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: auto !important;\n width: 28rem !important;\n height: 100vh !important;\n max-width: 28rem !important;\n max-height: 100vh !important;\n }\n }\n\n /* Hide button when sidebar is open */\n .copilotKitSidebarContentWrapper.sidebarExpanded {\n button[aria-label=\"Open chat\"],\n button[aria-label=\"Close chat\"] {\n display: none !important;\n }\n }\n\n /* Show button when sidebar is closed */\n .copilotKitSidebarContentWrapper:not(.sidebarExpanded) {\n button[aria-label=\"Open chat\"],\n button[aria-label=\"Close chat\"] {\n display: flex !important;\n }\n }\n\n /* Override CopilotKit's default message styles with our custom components */\n .copilotKitSidebar {\n /* Reset all default CopilotKit message styling */\n [class*=\"copilotKitMessage\"],\n [class*=\"Message-module\"] {\n all: unset !important;\n display: contents !important;\n }\n\n /* Ensure our custom UserMessage gradient pill shows through */\n button[role=\"presentation\"] {\n all: revert !important;\n display: inline-flex !important;\n }\n\n /* Reset input styles to allow our custom ChatInput */\n [class*=\"Input-module\"],\n [class*=\"copilotKitInput\"] {\n all: unset !important;\n display: contents !important;\n }\n\n /* Reset header styles */\n [class*=\"Header-module\"],\n [class*=\"copilotKitHeader\"] {\n all: unset !important;\n display: contents !important;\n }\n }\n`;\n\n// Styled button positioned in the bottom-right corner\nconst StyledChatButton = styled.button`\n position: fixed;\n bottom: 8px;\n right: 8px;\n width: 36px;\n height: 36px;\n border-radius: 18px;\n border: none;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 1000;\n transition: all 0.2s ease;\n\n &:hover {\n transform: scale(1.05);\n box-shadow: 0 6px 16px rgba(102, 126, 234, 0.5);\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 20px;\n height: 20px;\n fill: white;\n }\n`;\n\nexport interface CustomCopilotSidebarProps {\n /**\n * Children to render alongside the sidebar\n */\n children?: React.ReactNode;\n /**\n * Instructions for the AI assistant\n */\n instructions?: string;\n /**\n * Custom labels for the UI\n */\n labels?: Record<string, string>;\n /**\n * Custom icons for the UI\n */\n icons?: Record<string, React.ReactNode>;\n /**\n * Whether the sidebar should be open by default\n */\n defaultOpen?: boolean;\n /**\n * Whether clicking outside should close the sidebar\n */\n clickOutsideToClose?: boolean;\n /**\n * Whether hitting escape should close the sidebar\n */\n hitEscapeToClose?: boolean;\n /**\n * Keyboard shortcut to open the sidebar\n */\n shortcut?: string;\n /**\n * Callback when the sidebar open state changes\n */\n onSetOpen?: (open: boolean) => void;\n /**\n * Additional CSS class name\n */\n className?: string;\n}\n\n/**\n * CopilotSidebar with custom-designed components\n *\n * This component wraps CopilotKit's CopilotSidebar and injects our\n * custom components via adapter components.\n *\n * Features:\n * - Custom AssistantMessage with avatar and loading states\n * - AssistantThinking component shown during loading\n * - Custom UserMessage with gradient pill design\n * - Custom Input with React ARIA accessibility\n * - Styled chat button with gradient\n */\nexport const CustomCopilotSidebar: React.FC<CustomCopilotSidebarProps> = ({\n children,\n instructions = \"You are a helpful AI assistant.\",\n labels,\n icons,\n defaultOpen = false,\n clickOutsideToClose = true,\n hitEscapeToClose = true,\n shortcut = '/',\n onSetOpen,\n className,\n}) => {\n // Header adapter with close handler\n // biome-ignore lint/correctness/noNestedComponentDefinitions: This component must be defined here to access CopilotKit's ChatContext and the onSetOpen prop\n const HeaderAdapter = (_props: CopilotHeaderProps) => {\n const { setOpen } = useChatContext();\n\n const handleClose = () => {\n setOpen(false);\n onSetOpen?.(false);\n };\n\n return (\n <Header title=\"AI Assistant\" subtitle=\"How can I help you today?\" onClose={handleClose} />\n );\n };\n\n // Window adapter - wraps our custom Window component\n // biome-ignore lint/correctness/noNestedComponentDefinitions: Simple adapter component\n const WindowAdapter = (props: CopilotWindowProps) => {\n return <Window>{props.children}</Window>;\n };\n\n // Messages adapter - wraps our custom Messages component\n // biome-ignore lint/correctness/noNestedComponentDefinitions: Simple adapter component\n const MessagesAdapter = (props: CopilotMessagesProps) => {\n return (\n <Messages>\n {props.messages.map((message, index) => (\n <props.RenderMessage\n key={message.id || `message-${index}`}\n message={message}\n inProgress={props.inProgress}\n index={index}\n isCurrentMessage={index === props.messages.length - 1}\n />\n ))}\n </Messages>\n );\n };\n\n // Custom Button component that uses CopilotKit's ChatContext\n // biome-ignore lint/correctness/noNestedComponentDefinitions: This component must be defined here to access CopilotKit's ChatContext and the onSetOpen prop\n const CustomButton = (_props: CopilotButtonProps) => {\n const { open, setOpen } = useChatContext();\n\n const handleClick = () => {\n const newOpenState = !open;\n setOpen(newOpenState);\n onSetOpen?.(newOpenState);\n };\n\n return (\n <StyledChatButton\n onClick={handleClick}\n aria-label={open ? 'Close chat' : 'Open chat'}\n type=\"button\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Chat icon\"\n >\n <title>Chat</title>\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z\" />\n </svg>\n </StyledChatButton>\n );\n };\n\n return (\n <>\n <GlobalSidebarStyles />\n <CopilotSidebar\n // Pass through custom components via adapters\n AssistantMessage={AssistantMessageAdapter}\n UserMessage={UserMessageAdapter}\n Input={InputAdapter}\n Header={HeaderAdapter}\n Window={WindowAdapter}\n Messages={MessagesAdapter}\n Button={CustomButton}\n\n // Configuration\n instructions={instructions}\n labels={{\n title: \"AI Assistant\",\n initial: \"Hi! How can I help you today?\",\n ...labels,\n }}\n icons={icons}\n\n // Behavior\n defaultOpen={defaultOpen}\n clickOutsideToClose={clickOutsideToClose}\n hitEscapeToClose={hitEscapeToClose}\n shortcut={shortcut}\n onSetOpen={onSetOpen}\n\n // Styling\n className={className}\n >\n {children}\n </CopilotSidebar>\n </>\n );\n};\n\nCustomCopilotSidebar.displayName = 'CustomCopilotSidebar';\n"]}