@aleph-alpha/chat-kit 4.0.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/{CkInput.vue_vue_type_script_setup_true_lang-DJN-nZ2-.js → CkHistory.vue_vue_type_script_setup_true_lang-CtQUc3m3.js} +435 -378
  2. package/dist/chat-kit.css +28 -6
  3. package/dist/components/base/CkAgentMessage/CkAgentMessage.stories.d.ts +14 -13
  4. package/dist/components/base/CkAgentMessage/CkAgentMessage.stories.d.ts.map +1 -1
  5. package/dist/components/base/CkAgentMessage/CkAgentMessage.vue.d.ts +8 -7
  6. package/dist/components/base/CkAgentMessage/CkAgentMessage.vue.d.ts.map +1 -1
  7. package/dist/components/base/CkAgentMessage/types.d.ts +16 -5
  8. package/dist/components/base/CkAgentMessage/types.d.ts.map +1 -1
  9. package/dist/components/base/CkAgentMessageHeader/CkAgentMessageHeader.stories.d.ts +16 -0
  10. package/dist/components/base/CkAgentMessageHeader/CkAgentMessageHeader.stories.d.ts.map +1 -0
  11. package/dist/components/base/CkAgentMessageHeader/CkAgentMessageHeader.vue.d.ts +21 -0
  12. package/dist/components/base/CkAgentMessageHeader/CkAgentMessageHeader.vue.d.ts.map +1 -0
  13. package/dist/components/base/CkAgentMessageHeader/index.d.ts +3 -0
  14. package/dist/components/base/CkAgentMessageHeader/index.d.ts.map +1 -0
  15. package/dist/components/base/CkAgentMessageHeader/types.d.ts +22 -0
  16. package/dist/components/base/CkAgentMessageHeader/types.d.ts.map +1 -0
  17. package/dist/components/base/CkCitation/CkCitation.stories.d.ts +6 -0
  18. package/dist/components/base/CkCitation/CkCitation.stories.d.ts.map +1 -1
  19. package/dist/components/base/CkCitation/CkCitation.vue.d.ts.map +1 -1
  20. package/dist/components/base/CkCitationCard/CkCitationCard.stories.d.ts +10 -6
  21. package/dist/components/base/CkCitationCard/CkCitationCard.stories.d.ts.map +1 -1
  22. package/dist/components/base/CkCitationCard/CkCitationCard.vue.d.ts.map +1 -1
  23. package/dist/components/base/CkFileItemsList/CkFileItemsList.stories.d.ts +15 -4
  24. package/dist/components/base/CkFileItemsList/CkFileItemsList.stories.d.ts.map +1 -1
  25. package/dist/components/base/CkFileItemsList/CkFileItemsList.vue.d.ts +2 -1
  26. package/dist/components/base/CkFileItemsList/CkFileItemsList.vue.d.ts.map +1 -1
  27. package/dist/components/base/CkFileItemsList/types.d.ts +17 -4
  28. package/dist/components/base/CkFileItemsList/types.d.ts.map +1 -1
  29. package/dist/components/base/CkHeaderActivityButton/CkHeaderActivityButton.stories.d.ts +19 -0
  30. package/dist/components/base/CkHeaderActivityButton/CkHeaderActivityButton.stories.d.ts.map +1 -0
  31. package/dist/components/base/CkHeaderActivityButton/CkHeaderActivityButton.vue.d.ts +22 -0
  32. package/dist/components/base/CkHeaderActivityButton/CkHeaderActivityButton.vue.d.ts.map +1 -0
  33. package/dist/components/base/CkHeaderActivityButton/index.d.ts +3 -0
  34. package/dist/components/base/CkHeaderActivityButton/index.d.ts.map +1 -0
  35. package/dist/components/base/CkHeaderActivityButton/types.d.ts +36 -0
  36. package/dist/components/base/CkHeaderActivityButton/types.d.ts.map +1 -0
  37. package/dist/components/base/CkPromptInput/CkPromptInput.stories.d.ts +6 -6
  38. package/dist/components/base/CkPromptInput/CkPromptInput.vue.d.ts.map +1 -1
  39. package/dist/components/base/CkPromptInput/types.d.ts +4 -4
  40. package/dist/components/base/CkPromptInputDisclaimer/CkPromptInputDisclaimer.vue.d.ts.map +1 -1
  41. package/dist/components/base/CkPromptInputDisclaimer/types.d.ts +1 -1
  42. package/dist/components/base/CkPromptSendButton/CkPromptSendButton.vue.d.ts +1 -1
  43. package/dist/components/base/CkPromptSendButton/types.d.ts +1 -1
  44. package/dist/components/base/CkPromptStopButton/types.d.ts +1 -1
  45. package/dist/components/base/index.d.ts +4 -0
  46. package/dist/components/base/index.d.ts.map +1 -1
  47. package/dist/components/composed/CkConversation/CkConversation.vue.d.ts +13 -1
  48. package/dist/components/composed/CkConversation/CkConversation.vue.d.ts.map +1 -1
  49. package/dist/components/composed/CkConversation/types.d.ts +1 -1
  50. package/dist/components/composed/index.d.ts +0 -1
  51. package/dist/components/composed/index.d.ts.map +1 -1
  52. package/dist/components/index.d.ts +3 -3
  53. package/dist/components/index.d.ts.map +1 -1
  54. package/dist/components/index.js +26 -25
  55. package/dist/index.d.ts +2 -2
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +27 -26
  58. package/package.json +1 -1
  59. package/src/components/base/CkAgentMessage/CkAgentMessage.spec.ts +12 -17
  60. package/src/components/base/CkAgentMessage/CkAgentMessage.stories.ts +124 -113
  61. package/src/components/base/CkAgentMessage/CkAgentMessage.vue +18 -16
  62. package/src/components/base/CkAgentMessage/types.ts +16 -5
  63. package/src/components/base/CkAgentMessageHeader/CkAgentMessageHeader.spec.ts +64 -0
  64. package/src/components/base/CkAgentMessageHeader/CkAgentMessageHeader.stories.ts +90 -0
  65. package/src/components/base/CkAgentMessageHeader/CkAgentMessageHeader.vue +47 -0
  66. package/src/components/base/CkAgentMessageHeader/index.ts +2 -0
  67. package/src/components/base/CkAgentMessageHeader/types.ts +21 -0
  68. package/src/components/base/CkCitation/CkCitation.stories.ts +12 -0
  69. package/src/components/base/CkCitation/CkCitation.vue +34 -9
  70. package/src/components/base/CkCitationCard/CkCitationCard.spec.ts +9 -0
  71. package/src/components/base/CkCitationCard/CkCitationCard.stories.ts +11 -7
  72. package/src/components/base/CkCitationCard/CkCitationCard.vue +5 -3
  73. package/src/components/base/CkConversationLayout/CkConversationLayout.vue +1 -1
  74. package/src/components/base/CkFileItemsList/CkFileItemsList.spec.ts +88 -13
  75. package/src/components/base/CkFileItemsList/CkFileItemsList.stories.ts +61 -13
  76. package/src/components/base/CkFileItemsList/CkFileItemsList.vue +153 -110
  77. package/src/components/base/CkFileItemsList/types.ts +17 -4
  78. package/src/components/base/CkHeaderActivityButton/CkHeaderActivityButton.spec.ts +50 -0
  79. package/src/components/base/CkHeaderActivityButton/CkHeaderActivityButton.stories.ts +102 -0
  80. package/src/components/base/CkHeaderActivityButton/CkHeaderActivityButton.vue +39 -0
  81. package/src/components/base/CkHeaderActivityButton/index.ts +2 -0
  82. package/src/components/base/CkHeaderActivityButton/types.ts +36 -0
  83. package/src/components/base/CkPromptInput/CkPromptInput.spec.ts +88 -0
  84. package/src/components/base/CkPromptInput/CkPromptInput.stories.ts +6 -6
  85. package/src/components/base/CkPromptInput/CkPromptInput.vue +63 -12
  86. package/src/components/base/CkPromptInput/types.ts +4 -4
  87. package/src/components/base/CkPromptInputDisclaimer/CkPromptInputDisclaimer.spec.ts +1 -1
  88. package/src/components/base/CkPromptInputDisclaimer/CkPromptInputDisclaimer.vue +1 -1
  89. package/src/components/base/CkPromptInputDisclaimer/types.ts +1 -1
  90. package/src/components/base/CkPromptSendButton/types.ts +1 -1
  91. package/src/components/base/CkPromptStopButton/types.ts +1 -1
  92. package/src/components/base/index.ts +7 -0
  93. package/src/components/composed/CkConversation/CkConversation.spec.ts +81 -6
  94. package/src/components/composed/CkConversation/CkConversation.vue +78 -35
  95. package/src/components/composed/CkConversation/types.ts +1 -1
  96. package/src/components/composed/index.ts +0 -1
  97. package/src/components/index.ts +6 -1
  98. package/src/index.ts +5 -1
  99. package/dist/components/composed/CkInput/CkInput.stories.d.ts +0 -43
  100. package/dist/components/composed/CkInput/CkInput.stories.d.ts.map +0 -1
  101. package/dist/components/composed/CkInput/CkInput.vue.d.ts +0 -50
  102. package/dist/components/composed/CkInput/CkInput.vue.d.ts.map +0 -1
  103. package/dist/components/composed/CkInput/index.d.ts +0 -3
  104. package/dist/components/composed/CkInput/index.d.ts.map +0 -1
  105. package/dist/components/composed/CkInput/types.d.ts +0 -55
  106. package/dist/components/composed/CkInput/types.d.ts.map +0 -1
  107. package/src/components/composed/CkInput/CkInput.spec.ts +0 -191
  108. package/src/components/composed/CkInput/CkInput.stories.ts +0 -434
  109. package/src/components/composed/CkInput/CkInput.vue +0 -106
  110. package/src/components/composed/CkInput/index.ts +0 -2
  111. package/src/components/composed/CkInput/types.ts +0 -55
@@ -1,50 +0,0 @@
1
- import type { CkInputProps } from './types';
2
- declare function focus(): void;
3
- declare function submit(): void;
4
- declare var __VLS_13: {}, __VLS_16: {}, __VLS_19: {
5
- submit: () => void;
6
- disabled: boolean;
7
- isEmpty: boolean;
8
- }, __VLS_29: {}, __VLS_42: {}, __VLS_50: {};
9
- type __VLS_Slots = {} & {
10
- 'toolbar-top'?: (props: typeof __VLS_13) => any;
11
- } & {
12
- 'toolbar-left'?: (props: typeof __VLS_16) => any;
13
- } & {
14
- 'toolbar-right'?: (props: typeof __VLS_19) => any;
15
- } & {
16
- 'stop-icon'?: (props: typeof __VLS_29) => any;
17
- } & {
18
- 'send-icon'?: (props: typeof __VLS_42) => any;
19
- } & {
20
- footer?: (props: typeof __VLS_50) => any;
21
- };
22
- declare const __VLS_base: import("vue").DefineComponent<CkInputProps, {
23
- focus: typeof focus;
24
- submit: typeof submit;
25
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
26
- stop: () => any;
27
- submit: (value: string) => any;
28
- "update:modelValue": (value: string) => any;
29
- }, string, import("vue").PublicProps, Readonly<CkInputProps> & Readonly<{
30
- onStop?: (() => any) | undefined;
31
- onSubmit?: ((value: string) => any) | undefined;
32
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
33
- }>, {
34
- ariaLabel: string;
35
- loading: boolean;
36
- disabled: boolean;
37
- modelValue: string;
38
- placeholder: string;
39
- stopAriaLabel: string;
40
- disclaimer: string;
41
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
42
- declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
43
- declare const _default: typeof __VLS_export;
44
- export default _default;
45
- type __VLS_WithSlots<T, S> = T & {
46
- new (): {
47
- $slots: S;
48
- };
49
- };
50
- //# sourceMappingURL=CkInput.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CkInput.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/composed/CkInput/CkInput.vue"],"names":[],"mappings":"AAmHA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAwC5C,iBAAS,KAAK,IAAI,IAAI,CAErB;AAED,iBAAS,MAAM,IAAI,IAAI,CAEtB;AA2KD,QAAA,IAAuB,QAAQ,IAAW,EAAE,QAAQ,IAAW,EAAE,QAAQ;;;;CAAW,EAAE,QAAQ,IAAW,EAAE,QAAQ,IAAW,EAAE,QAAQ,IAAY,CAAE;AACtJ,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GACnD;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GACpD;IAAE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GACrD;IAAE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GACjD;IAAE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GACjD;IAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAO/C,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;6EAKd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -1,3 +0,0 @@
1
- export { default as CkInput } from './CkInput.vue';
2
- export type * from './types';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/composed/CkInput/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,mBAAmB,SAAS,CAAC"}
@@ -1,55 +0,0 @@
1
- /**
2
- * Drop-in chat input: combines `CkPromptInput`, a `CkPromptSendButton` send
3
- * button, and a `CkPromptInputDisclaimer`. Supports `v-model`, loading and
4
- * disabled states, and slots to customize the toolbar and footer.
5
- *
6
- * @category Form Inputs
7
- * @useCases chat compose input, prompt box with send button, llm input with disclaimer, quick-start chat input, turnkey chat input
8
- * @keywords input, prompt, chat, send, compose, disclaimer, loading, v-model, textarea
9
- * @related CkPromptInput, CkPromptSendButton, CkPromptInputDisclaimer, CkConversation
10
- */
11
- export interface CkInputProps {
12
- /**
13
- * Current value of the input. Supports `v-model`.
14
- * @default ''
15
- */
16
- modelValue?: string;
17
- /**
18
- * Placeholder shown when the input is empty.
19
- * @default 'Ask me anything'
20
- */
21
- placeholder?: string;
22
- /**
23
- * Whether the input is disabled. Also implied when `loading` is `true`.
24
- * @default false
25
- */
26
- disabled?: boolean;
27
- /**
28
- * Shows a spinner in the send button and disables the input while a reply
29
- * is being generated.
30
- * @default false
31
- */
32
- loading?: boolean;
33
- /**
34
- * Accessible label for the input.
35
- * @default 'Chat message input'
36
- */
37
- ariaLabel?: string;
38
- /**
39
- * Accessible label for the stop generating button.
40
- * @default 'Stop generating'
41
- */
42
- stopAriaLabel?: string;
43
- /**
44
- * Optional disclaimer text rendered below the input via
45
- * `CkPromptInputDisclaimer`. Omit to render no disclaimer.
46
- */
47
- disclaimer?: string;
48
- }
49
- export interface CkInputEmits {
50
- /** Emitted on every keystroke. */
51
- (e: 'update:modelValue', value: string): void;
52
- /** Emitted when the user submits via Enter or the send button. */
53
- (e: 'submit', value: string): void;
54
- }
55
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/composed/CkInput/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,kEAAkE;IAClE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC"}
@@ -1,191 +0,0 @@
1
- import CkInput from './CkInput.vue';
2
- import { render, screen, fireEvent } from '@testing-library/vue';
3
-
4
- describe('CkInput', () => {
5
- describe('defaults', () => {
6
- it('renders default placeholder', () => {
7
- render(CkInput);
8
-
9
- expect(
10
- screen.getByPlaceholderText('Ask me anything'),
11
- ).toBeInTheDocument();
12
- });
13
-
14
- it('renders default aria label', () => {
15
- render(CkInput);
16
-
17
- expect(screen.getByLabelText('Chat message input')).toBeInTheDocument();
18
- });
19
-
20
- it('renders default send button', () => {
21
- render(CkInput);
22
-
23
- expect(
24
- screen.getByRole('button', { name: 'Send message' }),
25
- ).toBeInTheDocument();
26
- });
27
- });
28
-
29
- describe('disclaimer', () => {
30
- it('renders disclaimer text when provided', () => {
31
- render(CkInput, {
32
- props: { disclaimer: 'AI may make mistakes' },
33
- });
34
-
35
- expect(screen.getByText('AI may make mistakes')).toBeInTheDocument();
36
- });
37
-
38
- it('does not render disclaimer when not provided', () => {
39
- const { container } = render(CkInput);
40
-
41
- expect(container.querySelector('p')).not.toBeInTheDocument();
42
- });
43
- });
44
-
45
- describe('v-model', () => {
46
- it('displays the modelValue in the textarea', () => {
47
- render(CkInput, { props: { modelValue: 'Hello world' } });
48
-
49
- expect(screen.getByRole('textbox')).toHaveValue('Hello world');
50
- });
51
-
52
- it('emits update:modelValue on input', async () => {
53
- const { emitted } = render(CkInput);
54
-
55
- await fireEvent.update(screen.getByRole('textbox'), 'New text');
56
-
57
- expect(emitted()['update:modelValue']).toBeTruthy();
58
- expect(emitted()['update:modelValue'][0]).toEqual(['New text']);
59
- });
60
- });
61
-
62
- describe('submit', () => {
63
- it('emits submit with trimmed text on Enter key', async () => {
64
- const { emitted } = render(CkInput, {
65
- props: { modelValue: ' Hello ' },
66
- });
67
-
68
- await fireEvent.keyDown(screen.getByRole('textbox'), { key: 'Enter' });
69
-
70
- expect(emitted().submit).toBeTruthy();
71
- expect(emitted().submit[0]).toEqual(['Hello']);
72
- });
73
-
74
- it('does not emit submit when textarea is empty', async () => {
75
- const { emitted } = render(CkInput, {
76
- props: { modelValue: '' },
77
- });
78
-
79
- await fireEvent.keyDown(screen.getByRole('textbox'), { key: 'Enter' });
80
-
81
- expect(emitted().submit).toBeFalsy();
82
- });
83
- });
84
-
85
- describe('loading state', () => {
86
- it('disables the textarea when loading', () => {
87
- render(CkInput, { props: { loading: true } });
88
-
89
- expect(screen.getByRole('textbox')).toBeDisabled();
90
- });
91
-
92
- it('does not emit submit when loading', async () => {
93
- const { emitted } = render(CkInput, {
94
- props: { modelValue: 'Hello', loading: true },
95
- });
96
-
97
- await fireEvent.keyDown(screen.getByRole('textbox'), { key: 'Enter' });
98
-
99
- expect(emitted().submit).toBeFalsy();
100
- });
101
-
102
- it('shows stop control instead of send when loading', () => {
103
- render(CkInput, { props: { modelValue: 'Hello', loading: true } });
104
-
105
- expect(
106
- screen.queryByRole('button', { name: 'Send message' }),
107
- ).not.toBeInTheDocument();
108
- expect(
109
- screen.getByRole('button', { name: 'Stop generating' }),
110
- ).toBeInTheDocument();
111
- });
112
-
113
- it('emits stop when stop control is clicked while loading', async () => {
114
- const { emitted } = render(CkInput, {
115
- props: { modelValue: 'Hello', loading: true },
116
- });
117
-
118
- await fireEvent.click(
119
- screen.getByRole('button', { name: 'Stop generating' }),
120
- );
121
-
122
- expect(emitted().stop).toBeTruthy();
123
- });
124
- });
125
-
126
- describe('disabled state', () => {
127
- it('disables the textarea when disabled', () => {
128
- render(CkInput, { props: { disabled: true } });
129
-
130
- expect(screen.getByRole('textbox')).toBeDisabled();
131
- });
132
-
133
- it('disables the send button when textarea is empty', () => {
134
- render(CkInput, { props: { modelValue: '' } });
135
-
136
- expect(
137
- screen.getByRole('button', { name: 'Send message' }),
138
- ).toBeDisabled();
139
- });
140
-
141
- it('enables the send button when there is text and not disabled', () => {
142
- render(CkInput, { props: { modelValue: 'Hello' } });
143
-
144
- expect(
145
- screen.getByRole('button', { name: 'Send message' }),
146
- ).toBeEnabled();
147
- });
148
- });
149
-
150
- describe('slots', () => {
151
- it('renders toolbar-left slot content', () => {
152
- render(CkInput, {
153
- slots: { 'toolbar-left': '<button>Express</button>' },
154
- });
155
-
156
- expect(screen.getByText('Express')).toBeInTheDocument();
157
- });
158
-
159
- it('renders toolbar-right slot content instead of default send button', () => {
160
- render(CkInput, {
161
- slots: { 'toolbar-right': '<button>Custom Send</button>' },
162
- });
163
-
164
- expect(screen.getByText('Custom Send')).toBeInTheDocument();
165
- expect(
166
- screen.queryByRole('button', { name: 'Send message' }),
167
- ).not.toBeInTheDocument();
168
- });
169
-
170
- it('renders footer slot content instead of disclaimer', () => {
171
- render(CkInput, {
172
- props: { disclaimer: 'Default disclaimer' },
173
- slots: { footer: '<span>Custom footer</span>' },
174
- });
175
-
176
- expect(screen.getByText('Custom footer')).toBeInTheDocument();
177
- expect(screen.queryByText('Default disclaimer')).not.toBeInTheDocument();
178
- });
179
-
180
- it('renders send-icon slot content inside default send button', () => {
181
- render(CkInput, {
182
- slots: { 'send-icon': '<span data-testid="custom-icon">Go</span>' },
183
- });
184
-
185
- expect(screen.getByTestId('custom-icon')).toBeInTheDocument();
186
- expect(
187
- screen.getByRole('button', { name: 'Send message' }),
188
- ).toBeInTheDocument();
189
- });
190
- });
191
- });