@kitn.ai/ui 0.15.0 → 0.15.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 (177) hide show
  1. package/dist/kitn-chat.es.js +1 -1
  2. package/package.json +6 -1
  3. package/src/elements/compiled.css +1 -1
  4. package/src/components/artifact.stories.tsx +0 -138
  5. package/src/components/attachments.stories.tsx +0 -303
  6. package/src/components/attachments.test.tsx +0 -64
  7. package/src/components/chain-of-thought.stories.tsx +0 -211
  8. package/src/components/chat-container.stories.tsx +0 -187
  9. package/src/components/chat-thread.test.tsx +0 -58
  10. package/src/components/checkpoint.stories.tsx +0 -102
  11. package/src/components/code-block.stories.tsx +0 -150
  12. package/src/components/confirm-card.stories.tsx +0 -74
  13. package/src/components/context.stories.tsx +0 -229
  14. package/src/components/context.test.tsx +0 -133
  15. package/src/components/conversation-item.stories.tsx +0 -125
  16. package/src/components/conversation-list.stories.tsx +0 -133
  17. package/src/components/default-input.test.tsx +0 -111
  18. package/src/components/empty.stories.tsx +0 -434
  19. package/src/components/feedback-bar.stories.tsx +0 -138
  20. package/src/components/feedback-bar.test.tsx +0 -103
  21. package/src/components/file-tree.stories.tsx +0 -73
  22. package/src/components/file-upload.stories.tsx +0 -156
  23. package/src/components/image.stories.tsx +0 -89
  24. package/src/components/loader.stories.tsx +0 -181
  25. package/src/components/markdown.stories.tsx +0 -180
  26. package/src/components/message-action-bar.test.tsx +0 -128
  27. package/src/components/message-narrow.stories.tsx +0 -329
  28. package/src/components/message-skills.stories.tsx +0 -211
  29. package/src/components/message.stories.tsx +0 -281
  30. package/src/components/model-switcher.stories.tsx +0 -123
  31. package/src/components/model-switcher.test.tsx +0 -65
  32. package/src/components/prompt-input.stories.tsx +0 -222
  33. package/src/components/prompt-suggestion.stories.tsx +0 -142
  34. package/src/components/reasoning.stories.tsx +0 -140
  35. package/src/components/resizable.test.tsx +0 -226
  36. package/src/components/scroll-button.stories.tsx +0 -100
  37. package/src/components/slash-command.stories.tsx +0 -163
  38. package/src/components/source-list.test.tsx +0 -152
  39. package/src/components/source.stories.tsx +0 -124
  40. package/src/components/tasks-card.stories.tsx +0 -78
  41. package/src/components/text-shimmer.stories.tsx +0 -87
  42. package/src/components/thinking-bar.stories.tsx +0 -87
  43. package/src/components/tool.stories.tsx +0 -153
  44. package/src/components/voice-input.stories.tsx +0 -83
  45. package/src/elements/artifact.stories.tsx +0 -506
  46. package/src/elements/attachments.stories.tsx +0 -190
  47. package/src/elements/card.stories.tsx +0 -113
  48. package/src/elements/cards.stories.tsx +0 -59
  49. package/src/elements/catalog.stories.tsx +0 -491
  50. package/src/elements/chain-of-thought.declarative.test.tsx +0 -153
  51. package/src/elements/chain-of-thought.stories.tsx +0 -113
  52. package/src/elements/chat-scope-picker.stories.tsx +0 -73
  53. package/src/elements/chat-workspace.stories.tsx +0 -288
  54. package/src/elements/chat.stories.tsx +0 -151
  55. package/src/elements/checkpoint.stories.tsx +0 -72
  56. package/src/elements/choice.stories.tsx +0 -240
  57. package/src/elements/code-block.stories.tsx +0 -83
  58. package/src/elements/composed-shell.stories.tsx +0 -316
  59. package/src/elements/confirm-card.stories.tsx +0 -227
  60. package/src/elements/context-meter.stories.tsx +0 -151
  61. package/src/elements/conversation-list.declarative.test.tsx +0 -137
  62. package/src/elements/conversation-list.stories.tsx +0 -243
  63. package/src/elements/embed.stories.tsx +0 -213
  64. package/src/elements/empty.stories.tsx +0 -111
  65. package/src/elements/feedback-bar.stories.tsx +0 -114
  66. package/src/elements/file-tree.stories.tsx +0 -134
  67. package/src/elements/file-upload.stories.tsx +0 -82
  68. package/src/elements/form.stories.tsx +0 -248
  69. package/src/elements/image.stories.tsx +0 -71
  70. package/src/elements/link-preview.stories.tsx +0 -209
  71. package/src/elements/loader.stories.tsx +0 -88
  72. package/src/elements/markdown.stories.tsx +0 -76
  73. package/src/elements/message-skills.declarative.test.tsx +0 -104
  74. package/src/elements/message-skills.stories.tsx +0 -114
  75. package/src/elements/message.stories.tsx +0 -218
  76. package/src/elements/model-switcher.declarative.test.tsx +0 -130
  77. package/src/elements/model-switcher.stories.tsx +0 -198
  78. package/src/elements/popover.stories.tsx +0 -80
  79. package/src/elements/prompt-input-slash-command.test.tsx +0 -128
  80. package/src/elements/prompt-input-stoppable.test.tsx +0 -88
  81. package/src/elements/prompt-input-toolbar-actions.test.tsx +0 -120
  82. package/src/elements/prompt-input.stories.tsx +0 -331
  83. package/src/elements/prompt-suggestions.declarative.test.tsx +0 -164
  84. package/src/elements/prompt-suggestions.stories.tsx +0 -213
  85. package/src/elements/reasoning.stories.tsx +0 -77
  86. package/src/elements/remote.stories.tsx +0 -314
  87. package/src/elements/resizable.stories.tsx +0 -426
  88. package/src/elements/response-stream.stories.tsx +0 -79
  89. package/src/elements/scroll-button.stories.tsx +0 -202
  90. package/src/elements/scroll-button.test.tsx +0 -148
  91. package/src/elements/source-list.stories.tsx +0 -143
  92. package/src/elements/source.stories.tsx +0 -88
  93. package/src/elements/switch.stories.tsx +0 -56
  94. package/src/elements/tasks.stories.tsx +0 -237
  95. package/src/elements/text-shimmer.stories.tsx +0 -64
  96. package/src/elements/thinking-bar.stories.tsx +0 -72
  97. package/src/elements/tool.stories.tsx +0 -89
  98. package/src/elements/voice-input.stories.tsx +0 -88
  99. package/src/primitives/controllable.test.ts +0 -47
  100. package/src/stories/chat-panel-layout.stories.tsx +0 -145
  101. package/src/stories/chat-scene.tsx +0 -571
  102. package/src/stories/checkpoint-restore.stories.tsx +0 -256
  103. package/src/stories/context-usage.stories.tsx +0 -212
  104. package/src/stories/conversation-with-reasoning.stories.tsx +0 -182
  105. package/src/stories/conversation-with-sources.stories.tsx +0 -471
  106. package/src/stories/docs/Accessibility.mdx +0 -119
  107. package/src/stories/docs/ChildElements.mdx +0 -269
  108. package/src/stories/docs/ForAIAgents.mdx +0 -162
  109. package/src/stories/docs/GettingStarted.mdx +0 -65
  110. package/src/stories/docs/Installation.mdx +0 -83
  111. package/src/stories/docs/Introduction.mdx +0 -50
  112. package/src/stories/docs/SolidJsAdvanced.mdx +0 -17
  113. package/src/stories/docs/Theming.mdx +0 -85
  114. package/src/stories/docs/element-controls.ts +0 -121
  115. package/src/stories/docs/frameworks/Angular.mdx +0 -245
  116. package/src/stories/docs/frameworks/Html.mdx +0 -227
  117. package/src/stories/docs/frameworks/Overview.mdx +0 -47
  118. package/src/stories/docs/frameworks/React.mdx +0 -227
  119. package/src/stories/docs/frameworks/Solid.mdx +0 -173
  120. package/src/stories/docs/frameworks/Svelte.mdx +0 -194
  121. package/src/stories/docs/frameworks/Vue.mdx +0 -238
  122. package/src/stories/docs/generative-ui-overview.mdx +0 -186
  123. package/src/stories/docs/recipes/SpeechToText.mdx +0 -7
  124. package/src/stories/docs/recipes/Streaming.mdx +0 -68
  125. package/src/stories/docs/recipes/TextToSpeech.mdx +0 -35
  126. package/src/stories/docs/theme-editor/canvas.tsx +0 -32
  127. package/src/stories/docs/theme-editor/inspector.tsx +0 -66
  128. package/src/stories/docs/theme-editor/presets.test.ts +0 -32
  129. package/src/stories/docs/theme-editor/presets.ts +0 -64
  130. package/src/stories/docs/theme-editor/theme-css.test.ts +0 -19
  131. package/src/stories/docs/theme-editor/theme-css.ts +0 -15
  132. package/src/stories/docs/theme-editor/theme-editor.tsx +0 -146
  133. package/src/stories/docs/theme-tokens.tsx +0 -174
  134. package/src/stories/examples/ChoosingComponents.mdx +0 -106
  135. package/src/stories/examples/sample-data.ts +0 -79
  136. package/src/stories/examples/usage/checkpoint-restore.ts +0 -156
  137. package/src/stories/examples/usage/context-usage.ts +0 -591
  138. package/src/stories/examples/usage/conversation-with-reasoning.ts +0 -224
  139. package/src/stories/examples/usage/conversation-with-sources.ts +0 -589
  140. package/src/stories/examples/usage/empty-state.ts +0 -144
  141. package/src/stories/examples/usage/full-chat-app.ts +0 -277
  142. package/src/stories/examples/usage/index.ts +0 -63
  143. package/src/stories/examples/usage/message-actions.ts +0 -704
  144. package/src/stories/examples/usage/pattern-centered-conversation.ts +0 -446
  145. package/src/stories/examples/usage/pattern-chat-panel-layout.ts +0 -442
  146. package/src/stories/examples/usage/pattern-docked-widget.ts +0 -479
  147. package/src/stories/examples/usage/prompt-input-variants.ts +0 -1356
  148. package/src/stories/examples/usage/streaming-response.ts +0 -687
  149. package/src/stories/examples/usage/types.ts +0 -33
  150. package/src/stories/full-chat.stories.tsx +0 -18
  151. package/src/stories/message-actions.stories.tsx +0 -230
  152. package/src/stories/pattern-centered-conversation.stories.tsx +0 -93
  153. package/src/stories/pattern-docked-widget.stories.tsx +0 -93
  154. package/src/stories/pattern-empty-state.stories.tsx +0 -76
  155. package/src/stories/prompt-input-variants.stories.tsx +0 -456
  156. package/src/stories/streaming-response.stories.tsx +0 -438
  157. package/src/stories/theme-editor.stories.tsx +0 -16
  158. package/src/stories/token-reference.stories.tsx +0 -18
  159. package/src/stories/typography.stories.tsx +0 -78
  160. package/src/ui/avatar.stories.tsx +0 -103
  161. package/src/ui/badge.stories.tsx +0 -86
  162. package/src/ui/button.stories.tsx +0 -145
  163. package/src/ui/collapsible.stories.tsx +0 -69
  164. package/src/ui/dropdown.stories.tsx +0 -59
  165. package/src/ui/hover-card.stories.tsx +0 -77
  166. package/src/ui/hover-card.test.tsx +0 -30
  167. package/src/ui/overlay.stories.tsx +0 -115
  168. package/src/ui/popover.stories.tsx +0 -81
  169. package/src/ui/popover.test.tsx +0 -99
  170. package/src/ui/resizable.stories.tsx +0 -236
  171. package/src/ui/scroll-area.stories.tsx +0 -50
  172. package/src/ui/separator.stories.tsx +0 -81
  173. package/src/ui/skeleton.stories.tsx +0 -337
  174. package/src/ui/switch.stories.tsx +0 -51
  175. package/src/ui/switch.test.tsx +0 -59
  176. package/src/ui/textarea.stories.tsx +0 -76
  177. package/src/ui/tooltip.stories.tsx +0 -74
@@ -1,442 +0,0 @@
1
- import type { ExampleUsage, StoryUsage } from './types';
2
-
3
- /**
4
- * ChatGPT Style — compact vertical panel with avatar-led assistant rows
5
- * and right-aligned user bubbles, scaled to embed inside a larger page.
6
- */
7
- const chatGptStyle: StoryUsage = {
8
- intro:
9
- 'Use **Chat Panel Layout** when the chat lives *inside* a larger page — a sidebar, a drawer, or a companion panel (e.g. ChatGPT-style). The panel is a fixed-size flex column: a header strip, a scrollable `ChatContainer` for the thread, and a `PromptInput` footer. Assistant messages lead with an avatar and use transparent-background markdown prose; user messages are right-aligned pills. Contrast with **Centered Conversation** (the chat *is* the page) and **Docked Widget** (a floating overlay).',
10
- snippets: {
11
- html: `<!-- Register the elements once (CDN or bundler) -->
12
- <script type="module">
13
- import 'https://cdn.jsdelivr.net/npm/@kitn.ai/ui/dist/kitn-chat.es.js';
14
- </script>
15
-
16
- <!--
17
- Chat Panel Layout — compact vertical panel sized to embed inside a page.
18
- Typical sizing: 360-480 px wide, full container height.
19
- -->
20
- <div class="flex flex-col overflow-hidden rounded-lg bg-card" style="width:420px; height:700px">
21
-
22
- <!-- Panel header -->
23
- <div class="flex flex-shrink-0 items-center justify-between bg-muted/30 px-3 py-2.5 text-sm font-semibold">
24
- <span>Chat Panel</span>
25
- <span class="text-xs text-muted-foreground">GPT-4o Mini</span>
26
- </div>
27
-
28
- <!-- Scrollable thread -->
29
- <kai-chat-container class="min-w-0 flex-1 space-y-4 px-4 py-3">
30
-
31
- <!-- Assistant message — avatar + transparent prose -->
32
- <kai-message>
33
- <kai-message-avatar src="" alt="AI" fallback="AI"></kai-message-avatar>
34
- <div class="flex min-w-0 w-full flex-col">
35
- <kai-message-content markdown class="bg-transparent p-0 pt-1.5">
36
- Hi there! How can I help?
37
- </kai-message-content>
38
- <kai-message-actions>
39
- <button aria-label="Copy"><!-- icon --></button>
40
- </kai-message-actions>
41
- </div>
42
- </kai-message>
43
-
44
- <!-- User message — right-aligned pill -->
45
- <kai-message class="group flex-col items-end">
46
- <kai-message-content class="bg-muted text-primary mr-1 max-w-[85%] rounded-xl px-4 py-2">
47
- What is this about?
48
- </kai-message-content>
49
- <kai-message-actions class="opacity-0 transition-opacity group-hover:opacity-100">
50
- <button aria-label="Copy"><!-- icon --></button>
51
- </kai-message-actions>
52
- </kai-message>
53
-
54
- </kai-chat-container>
55
-
56
- <!-- Composer footer -->
57
- <div class="flex-shrink-0 px-3 pb-3 pt-1">
58
- <kai-prompt-input id="composer">
59
- <kai-prompt-input-textarea placeholder="Ask about this page…"></kai-prompt-input-textarea>
60
- <kai-prompt-input-actions class="mt-2 flex w-full items-center justify-end gap-2 px-3 pb-3">
61
- <button aria-label="Send"><!-- icon --></button>
62
- </kai-prompt-input-actions>
63
- </kai-prompt-input>
64
- </div>
65
-
66
- </div>
67
-
68
- <script type="module">
69
- document.getElementById('composer').addEventListener('kai-submit', (e) => {
70
- console.log('send', e.detail.value);
71
- });
72
- </script>`,
73
-
74
- react: `import { useState } from 'react';
75
- import {
76
- ChatConfig, ChatContainer,
77
- Message, MessageAvatar, MessageContent, MessageActions,
78
- PromptInput, PromptInputTextarea, PromptInputActions,
79
- Button,
80
- } from '@kitn.ai/ui/react';
81
-
82
- /**
83
- * Chat Panel Layout — compact vertical panel for embedding inside a page.
84
- * Avatar-led assistant rows, right-aligned user bubbles, composer footer.
85
- */
86
- export function ChatPanel() {
87
- const [input, setInput] = useState('');
88
-
89
- return (
90
- <ChatConfig proseSize="base">
91
- <div
92
- className="flex flex-col overflow-hidden rounded-lg bg-card"
93
- style={{ width: 420, height: 700 }}
94
- >
95
- {/* Panel header */}
96
- <div className="flex flex-shrink-0 items-center justify-between bg-muted/30 px-3 py-2.5 text-sm font-semibold">
97
- <span>Chat Panel</span>
98
- <span className="text-xs text-muted-foreground">GPT-4o Mini</span>
99
- </div>
100
-
101
- {/* Scrollable thread */}
102
- <ChatContainer className="min-w-0 flex-1 space-y-4 px-4 py-3">
103
- {/* Assistant message — avatar + transparent prose */}
104
- <Message>
105
- <MessageAvatar src="" alt="AI" fallback="AI" />
106
- <div className="flex min-w-0 w-full flex-col">
107
- <MessageContent markdown className="bg-transparent p-0 pt-1.5">
108
- Hi there! How can I help?
109
- </MessageContent>
110
- <MessageActions>
111
- <Button variant="ghost" size="icon-sm" aria-label="Copy">{/* icon */}</Button>
112
- </MessageActions>
113
- </div>
114
- </Message>
115
-
116
- {/* User message — right-aligned pill */}
117
- <Message className="group flex-col items-end">
118
- <MessageContent className="bg-muted text-primary mr-1 max-w-[85%] rounded-xl px-4 py-2">
119
- What is this about?
120
- </MessageContent>
121
- <MessageActions className="opacity-0 transition-opacity group-hover:opacity-100">
122
- <Button variant="ghost" size="icon-sm" aria-label="Copy">{/* icon */}</Button>
123
- </MessageActions>
124
- </Message>
125
- </ChatContainer>
126
-
127
- {/* Composer footer */}
128
- <div className="flex-shrink-0 px-3 pb-3 pt-1">
129
- <PromptInput value={input} onValueChange={setInput} onSubmit={() => setInput('')}>
130
- <PromptInputTextarea placeholder="Ask about this page…" className="min-h-[44px] pt-3 pl-4" />
131
- <PromptInputActions className="mt-2 flex w-full items-center justify-end gap-2 px-3 pb-3">
132
- <Button size="icon-sm" className="rounded-full" disabled={!input.trim()} aria-label="Send">
133
- {/* icon */}
134
- </Button>
135
- </PromptInputActions>
136
- </PromptInput>
137
- </div>
138
- </div>
139
- </ChatConfig>
140
- );
141
- }`,
142
-
143
- vue: `<script setup>
144
- import '@kitn.ai/ui/elements';
145
- import { ref } from 'vue';
146
-
147
- const input = ref('');
148
-
149
- function onSubmit(e) {
150
- console.log('send', e.detail.value);
151
- input.value = '';
152
- }
153
- </script>
154
-
155
- <!--
156
- Chat Panel Layout — compact vertical panel for embedding inside a page.
157
- Avatar-led assistant rows, right-aligned user bubbles, composer footer.
158
- Typical sizing: 360-480 px wide, full container height.
159
- -->
160
- <template>
161
- <div class="flex flex-col overflow-hidden rounded-lg bg-card" style="width:420px; height:700px">
162
-
163
- <!-- Panel header -->
164
- <div class="flex flex-shrink-0 items-center justify-between bg-muted/30 px-3 py-2.5 text-sm font-semibold">
165
- <span>Chat Panel</span>
166
- <span class="text-xs text-muted-foreground">GPT-4o Mini</span>
167
- </div>
168
-
169
- <!-- Scrollable thread -->
170
- <kai-chat-container class="min-w-0 flex-1 space-y-4 px-4 py-3">
171
-
172
- <!-- Assistant message — avatar + transparent prose -->
173
- <kai-message>
174
- <kai-message-avatar src="" alt="AI" fallback="AI"></kai-message-avatar>
175
- <div class="flex min-w-0 w-full flex-col">
176
- <kai-message-content markdown class="bg-transparent p-0 pt-1.5">
177
- Hi there! How can I help?
178
- </kai-message-content>
179
- <kai-message-actions>
180
- <button aria-label="Copy"><!-- icon --></button>
181
- </kai-message-actions>
182
- </div>
183
- </kai-message>
184
-
185
- <!-- User message — right-aligned pill -->
186
- <kai-message class="group flex-col items-end">
187
- <kai-message-content class="bg-muted text-primary mr-1 max-w-[85%] rounded-xl px-4 py-2">
188
- What is this about?
189
- </kai-message-content>
190
- <kai-message-actions class="opacity-0 transition-opacity group-hover:opacity-100">
191
- <button aria-label="Copy"><!-- icon --></button>
192
- </kai-message-actions>
193
- </kai-message>
194
-
195
- </kai-chat-container>
196
-
197
- <!-- Composer footer -->
198
- <div class="flex-shrink-0 px-3 pb-3 pt-1">
199
- <kai-prompt-input
200
- :value="input"
201
- @kai-value-change="input = $event.detail.value"
202
- @kai-submit="onSubmit"
203
- >
204
- <kai-prompt-input-textarea placeholder="Ask about this page…"></kai-prompt-input-textarea>
205
- <kai-prompt-input-actions class="mt-2 flex w-full items-center justify-end gap-2 px-3 pb-3">
206
- <button :disabled="!input.trim()" aria-label="Send"><!-- icon --></button>
207
- </kai-prompt-input-actions>
208
- </kai-prompt-input>
209
- </div>
210
-
211
- </div>
212
- </template>`,
213
-
214
- svelte: `<script>
215
- import '@kitn.ai/ui/elements';
216
- let input = '';
217
- </script>
218
-
219
- <!--
220
- Chat Panel Layout — compact vertical panel for embedding inside a page.
221
- Avatar-led assistant rows, right-aligned user bubbles, composer footer.
222
- Typical sizing: 360-480 px wide, full container height.
223
- -->
224
- <div class="flex flex-col overflow-hidden rounded-lg bg-card" style="width:420px; height:700px">
225
-
226
- <!-- Panel header -->
227
- <div class="flex flex-shrink-0 items-center justify-between bg-muted/30 px-3 py-2.5 text-sm font-semibold">
228
- <span>Chat Panel</span>
229
- <span class="text-xs text-muted-foreground">GPT-4o Mini</span>
230
- </div>
231
-
232
- <!-- Scrollable thread -->
233
- <kai-chat-container class="min-w-0 flex-1 space-y-4 px-4 py-3">
234
-
235
- <!-- Assistant message — avatar + transparent prose -->
236
- <kai-message>
237
- <kai-message-avatar src="" alt="AI" fallback="AI"></kai-message-avatar>
238
- <div class="flex min-w-0 w-full flex-col">
239
- <kai-message-content markdown class="bg-transparent p-0 pt-1.5">
240
- Hi there! How can I help?
241
- </kai-message-content>
242
- <kai-message-actions>
243
- <button aria-label="Copy"><!-- icon --></button>
244
- </kai-message-actions>
245
- </div>
246
- </kai-message>
247
-
248
- <!-- User message — right-aligned pill -->
249
- <kai-message class="group flex-col items-end">
250
- <kai-message-content class="bg-muted text-primary mr-1 max-w-[85%] rounded-xl px-4 py-2">
251
- What is this about?
252
- </kai-message-content>
253
- <kai-message-actions class="opacity-0 transition-opacity group-hover:opacity-100">
254
- <button aria-label="Copy"><!-- icon --></button>
255
- </kai-message-actions>
256
- </kai-message>
257
-
258
- </kai-chat-container>
259
-
260
- <!-- Composer footer -->
261
- <div class="flex-shrink-0 px-3 pb-3 pt-1">
262
- <kai-prompt-input
263
- value={input}
264
- on:kai-value-change={(e) => (input = e.detail.value)}
265
- on:kai-submit={() => (input = '')}
266
- >
267
- <kai-prompt-input-textarea placeholder="Ask about this page…"></kai-prompt-input-textarea>
268
- <kai-prompt-input-actions class="mt-2 flex w-full items-center justify-end gap-2 px-3 pb-3">
269
- <button disabled={!input.trim()} aria-label="Send"><!-- icon --></button>
270
- </kai-prompt-input-actions>
271
- </kai-prompt-input>
272
- </div>
273
-
274
- </div>`,
275
-
276
- angular: `// main.ts: import '@kitn.ai/ui/elements' before bootstrapApplication,
277
- // and add CUSTOM_ELEMENTS_SCHEMA to the component.
278
- import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
279
-
280
- /**
281
- * Chat Panel Layout — compact vertical panel for embedding inside a page.
282
- * Avatar-led assistant rows, right-aligned user bubbles, composer footer.
283
- */
284
- @Component({
285
- selector: 'app-chat-panel',
286
- standalone: true,
287
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
288
- styles: [':host { display: contents; }'],
289
- template: \`
290
- <div class="flex flex-col overflow-hidden rounded-lg bg-card"
291
- style="width:420px; height:700px">
292
-
293
- <!-- Panel header -->
294
- <div class="flex flex-shrink-0 items-center justify-between bg-muted/30 px-3 py-2.5 text-sm font-semibold">
295
- <span>Chat Panel</span>
296
- <span class="text-xs text-muted-foreground">GPT-4o Mini</span>
297
- </div>
298
-
299
- <!-- Scrollable thread -->
300
- <kai-chat-container class="min-w-0 flex-1 space-y-4 px-4 py-3">
301
-
302
- <!-- Assistant message — avatar + transparent prose -->
303
- <kai-message>
304
- <kai-message-avatar src="" alt="AI" fallback="AI"></kai-message-avatar>
305
- <div class="flex min-w-0 w-full flex-col">
306
- <kai-message-content markdown class="bg-transparent p-0 pt-1.5">
307
- Hi there! How can I help?
308
- </kai-message-content>
309
- <kai-message-actions>
310
- <button aria-label="Copy"><!-- icon --></button>
311
- </kai-message-actions>
312
- </div>
313
- </kai-message>
314
-
315
- <!-- User message — right-aligned pill -->
316
- <kai-message class="group flex-col items-end">
317
- <kai-message-content class="bg-muted text-primary mr-1 max-w-[85%] rounded-xl px-4 py-2">
318
- What is this about?
319
- </kai-message-content>
320
- <kai-message-actions class="opacity-0 transition-opacity group-hover:opacity-100">
321
- <button aria-label="Copy"><!-- icon --></button>
322
- </kai-message-actions>
323
- </kai-message>
324
-
325
- </kai-chat-container>
326
-
327
- <!-- Composer footer -->
328
- <div class="flex-shrink-0 px-3 pb-3 pt-1">
329
- <kai-prompt-input
330
- [value]="input"
331
- (kai-value-change)="input = $event.detail.value"
332
- (kai-submit)="input = ''"
333
- >
334
- <kai-prompt-input-textarea placeholder="Ask about this page…"></kai-prompt-input-textarea>
335
- <kai-prompt-input-actions class="mt-2 flex w-full items-center justify-end gap-2 px-3 pb-3">
336
- <button [disabled]="!input.trim()" aria-label="Send"><!-- icon --></button>
337
- </kai-prompt-input-actions>
338
- </kai-prompt-input>
339
- </div>
340
-
341
- </div>
342
- \`,
343
- })
344
- export class ChatPanelComponent {
345
- input = '';
346
- }`,
347
-
348
- solid: `import { createSignal } from 'solid-js';
349
- import {
350
- ChatConfig, ChatContainer,
351
- Message, MessageAvatar, MessageContent, MessageActions,
352
- PromptInput, PromptInputTextarea, PromptInputActions,
353
- ScrollButton, Button,
354
- } from '@kitn.ai/ui';
355
- import { Copy, ArrowUp } from 'lucide-solid';
356
-
357
- /**
358
- * Chat Panel Layout — compact vertical panel for embedding inside a page.
359
- * Avatar-led assistant rows, right-aligned user bubbles, composer footer.
360
- * Typical sizing: 360-480 px wide, full container height.
361
- */
362
- export function ChatPanel() {
363
- const [input, setInput] = createSignal('');
364
-
365
- return (
366
- <ChatConfig proseSize="base">
367
- <div
368
- style={{ width: '420px', height: '700px' }}
369
- class="flex flex-col overflow-hidden rounded-lg bg-card"
370
- >
371
- {/* Panel header */}
372
- <div class="flex flex-shrink-0 items-center justify-between bg-muted/30 px-3 py-2.5 text-sm font-semibold text-foreground">
373
- <span>Chat Panel</span>
374
- <span class="text-xs text-muted-foreground">GPT-4o Mini</span>
375
- </div>
376
-
377
- {/* Scrollable thread */}
378
- <ChatContainer class="min-w-0 flex-1 space-y-4 px-4 py-3">
379
- {/* Assistant message — avatar + transparent prose */}
380
- <Message>
381
- <MessageAvatar src="" alt="AI" fallback="AI" />
382
- <div class="flex min-w-0 w-full flex-col">
383
- <MessageContent markdown class="bg-transparent p-0 pt-1.5">
384
- Hi there! How can I help?
385
- </MessageContent>
386
- <MessageActions>
387
- <Button variant="ghost" size="icon-sm" aria-label="Copy">
388
- <Copy size={14} />
389
- </Button>
390
- </MessageActions>
391
- </div>
392
- </Message>
393
-
394
- {/* User message — right-aligned pill */}
395
- <Message class="group flex-col items-end">
396
- <MessageContent class="bg-muted text-primary mr-1 max-w-[85%] rounded-xl px-4 py-2">
397
- What is this about?
398
- </MessageContent>
399
- <MessageActions class="opacity-0 transition-opacity duration-150 group-hover:opacity-100">
400
- <Button variant="ghost" size="icon-sm" aria-label="Copy">
401
- <Copy size={14} />
402
- </Button>
403
- </MessageActions>
404
- </Message>
405
-
406
- <ScrollButton />
407
- </ChatContainer>
408
-
409
- {/* Composer footer */}
410
- <div class="flex-shrink-0 px-3 pb-3 pt-1">
411
- <PromptInput value={input()} onValueChange={setInput} onSubmit={() => setInput('')}>
412
- <PromptInputTextarea placeholder="Ask about this page…" class="min-h-[44px] pt-3 pl-4" />
413
- <PromptInputActions class="mt-2 flex w-full items-center justify-end gap-2 px-3 pb-3">
414
- <Button size="icon-sm" class="rounded-full" disabled={!input().trim()} aria-label="Send message">
415
- <ArrowUp class="size-4" />
416
- </Button>
417
- </PromptInputActions>
418
- </PromptInput>
419
- </div>
420
- </div>
421
- </ChatConfig>
422
- );
423
- }`,
424
- },
425
- };
426
-
427
- /**
428
- * Pattern: Chat Panel Layout — compact vertical panel intended to embed inside
429
- * a larger page. `ChatContainer` handles scroll; `MessageAvatar` leads each
430
- * assistant row; user messages right-align as pill bubbles; `PromptInput` pins
431
- * to the bottom. Per-story: the Usage tab shows the snippet for the story you're
432
- * on; the example-level fields below are the fallback.
433
- */
434
- const chatPanelLayout: ExampleUsage = {
435
- title: 'Patterns/Chat Panel Layout',
436
- ...chatGptStyle,
437
- stories: {
438
- 'ChatGPT Style': chatGptStyle,
439
- },
440
- };
441
-
442
- export default chatPanelLayout;