@frankieai/react 0.1.1 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/frankie.css +1 -1
- package/dist/index.cjs +280 -51
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +33 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +32 -18
- package/dist/index.d.ts +32 -18
- package/dist/index.js +278 -50
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/chat/ChatPanel.tsx +6 -2
- package/src/components/chat/FrankieChatPage.tsx +121 -0
- package/src/components/chat/MessageBubble.tsx +22 -5
- package/src/components/chat/ToolActivityList.tsx +10 -6
- package/src/components/chat/message-actions.css +13 -0
- package/src/hooks/FrankieProvider.tsx +1 -9
- package/src/hooks/useFrankieChat.ts +91 -28
- package/src/index.ts +2 -0
- package/src/lib/client.ts +82 -17
- package/src/styles/frankie.css +173 -4
package/src/styles/frankie.css
CHANGED
|
@@ -7,15 +7,23 @@
|
|
|
7
7
|
* a CSS variable scoped to `.frankie-root`, so a host can restyle the widget
|
|
8
8
|
* without touching this file.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* widget then compiles against their design tokens.
|
|
10
|
+
* This stylesheet is self-contained. Widget utilities are compiled ahead of
|
|
11
|
+
* time and prefixed with `.frankie-root`, so they cannot style the host app.
|
|
13
12
|
*/
|
|
14
13
|
|
|
15
14
|
@layer theme, components, utilities;
|
|
16
15
|
|
|
17
16
|
@import "tailwindcss/theme.css" layer(theme);
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
* The widget is embedded inside arbitrary applications. Native CSS scoping
|
|
20
|
+
* keeps Tailwind's generated utilities inside the widget instead of relying on
|
|
21
|
+
* Tailwind's invalid selector-important import syntax (which made the whole
|
|
22
|
+
* utility layer disappear in production).
|
|
23
|
+
*/
|
|
24
|
+
@scope (.frankie-root) {
|
|
25
|
+
@tailwind utilities;
|
|
26
|
+
}
|
|
19
27
|
|
|
20
28
|
@source "../";
|
|
21
29
|
|
|
@@ -156,3 +164,164 @@
|
|
|
156
164
|
padding: 0;
|
|
157
165
|
}
|
|
158
166
|
}
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@layer components {
|
|
170
|
+
.frankie-chat-page {
|
|
171
|
+
display: flex;
|
|
172
|
+
min-width: 0;
|
|
173
|
+
flex-direction: column;
|
|
174
|
+
overflow: hidden;
|
|
175
|
+
background:
|
|
176
|
+
radial-gradient(60rem 24rem at 50% -12rem, color-mix(in srgb, var(--frankie-primary) 8%, transparent), transparent 65%),
|
|
177
|
+
var(--frankie-background);
|
|
178
|
+
color: var(--frankie-foreground);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.frankie-page-header {
|
|
182
|
+
display: flex;
|
|
183
|
+
min-height: 56px;
|
|
184
|
+
flex: 0 0 56px;
|
|
185
|
+
align-items: center;
|
|
186
|
+
justify-content: space-between;
|
|
187
|
+
gap: 16px;
|
|
188
|
+
padding: 0 24px;
|
|
189
|
+
border-bottom: 1px solid var(--frankie-border);
|
|
190
|
+
background: color-mix(in srgb, var(--frankie-background) 92%, transparent);
|
|
191
|
+
backdrop-filter: blur(18px);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.frankie-page-header > div {
|
|
195
|
+
display: flex;
|
|
196
|
+
align-items: center;
|
|
197
|
+
gap: 10px;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.frankie-page-header strong { font-size: 0.925rem; font-weight: 650; }
|
|
201
|
+
|
|
202
|
+
.frankie-page-status {
|
|
203
|
+
width: 10px;
|
|
204
|
+
height: 10px;
|
|
205
|
+
border-radius: 999px;
|
|
206
|
+
background: var(--frankie-primary);
|
|
207
|
+
box-shadow: 0 0 0 4px color-mix(in srgb, var(--frankie-primary) 16%, transparent);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.frankie-page-header button {
|
|
211
|
+
min-height: 36px;
|
|
212
|
+
padding: 0 13px;
|
|
213
|
+
border: 1px solid var(--frankie-border);
|
|
214
|
+
border-radius: calc(var(--frankie-radius) * .9);
|
|
215
|
+
background: var(--frankie-secondary);
|
|
216
|
+
cursor: pointer;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.frankie-page-header button:hover { border-color: var(--frankie-primary); }
|
|
220
|
+
|
|
221
|
+
.frankie-page-canvas {
|
|
222
|
+
display: flex;
|
|
223
|
+
min-width: 0;
|
|
224
|
+
min-height: 0;
|
|
225
|
+
flex: 1;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.frankie-page-canvas > .frankie-inline {
|
|
229
|
+
width: 100%;
|
|
230
|
+
max-width: 56rem;
|
|
231
|
+
margin: 0 auto;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.frankie-page-canvas .frankie-scroll { padding: 2rem clamp(1rem, 4vw, 4rem) 1.25rem; }
|
|
235
|
+
.frankie-page-canvas .frankie-root > .border-t {
|
|
236
|
+
padding: .75rem clamp(1rem, 4vw, 4rem) 1.5rem;
|
|
237
|
+
border-top: 0;
|
|
238
|
+
background: linear-gradient(180deg, transparent, var(--frankie-background) 30%);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.frankie-page-empty {
|
|
242
|
+
display: flex;
|
|
243
|
+
width: min(100%, 38rem);
|
|
244
|
+
min-height: 100%;
|
|
245
|
+
margin: auto;
|
|
246
|
+
padding: clamp(2rem, 7vh, 4.5rem) 1rem 2rem;
|
|
247
|
+
flex-direction: column;
|
|
248
|
+
align-items: center;
|
|
249
|
+
justify-content: center;
|
|
250
|
+
gap: 1rem;
|
|
251
|
+
text-align: center;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.frankie-page-avatar {
|
|
255
|
+
display: grid;
|
|
256
|
+
width: 48px;
|
|
257
|
+
height: 48px;
|
|
258
|
+
place-items: center;
|
|
259
|
+
border-radius: calc(var(--frankie-radius) * 1.4);
|
|
260
|
+
background: var(--frankie-primary);
|
|
261
|
+
color: var(--frankie-primary-foreground);
|
|
262
|
+
font-weight: 750;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.frankie-page-kicker {
|
|
266
|
+
margin: 0 0 .4rem;
|
|
267
|
+
color: var(--frankie-primary);
|
|
268
|
+
font-size: .7rem;
|
|
269
|
+
font-weight: 750;
|
|
270
|
+
letter-spacing: .1em;
|
|
271
|
+
text-transform: uppercase;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.frankie-page-empty h1 {
|
|
275
|
+
margin: 0;
|
|
276
|
+
font-size: clamp(1.65rem, 4vw, 2.15rem);
|
|
277
|
+
line-height: 1.08;
|
|
278
|
+
letter-spacing: -.045em;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.frankie-page-empty h1 + p {
|
|
282
|
+
margin: .6rem auto 0;
|
|
283
|
+
max-width: 30rem;
|
|
284
|
+
color: var(--frankie-muted-foreground);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.frankie-page-prompts {
|
|
288
|
+
display: grid;
|
|
289
|
+
width: 100%;
|
|
290
|
+
gap: .55rem;
|
|
291
|
+
margin-top: .4rem;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.frankie-page-prompts button {
|
|
295
|
+
display: grid;
|
|
296
|
+
min-height: 60px;
|
|
297
|
+
grid-template-columns: 2rem minmax(0, 1fr) auto;
|
|
298
|
+
align-items: center;
|
|
299
|
+
gap: .65rem;
|
|
300
|
+
padding: .75rem .9rem;
|
|
301
|
+
border: 1px solid var(--frankie-border);
|
|
302
|
+
border-radius: calc(var(--frankie-radius) * 1.25);
|
|
303
|
+
background: var(--frankie-secondary);
|
|
304
|
+
text-align: left;
|
|
305
|
+
cursor: pointer;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
.frankie-page-prompts button:hover {
|
|
309
|
+
border-color: color-mix(in srgb, var(--frankie-primary) 58%, var(--frankie-border));
|
|
310
|
+
transform: translateY(-1px);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.frankie-page-prompts button > span {
|
|
314
|
+
color: var(--frankie-muted-foreground);
|
|
315
|
+
font-size: .68rem;
|
|
316
|
+
font-weight: 700;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
.frankie-page-prompts button > strong { font-size: .875rem; }
|
|
320
|
+
.frankie-page-prompts button > b { color: var(--frankie-primary); font-size: 1rem; }
|
|
321
|
+
|
|
322
|
+
@media (max-width: 640px) {
|
|
323
|
+
.frankie-page-header { min-height: 52px; flex-basis: 52px; padding: 0 12px; }
|
|
324
|
+
.frankie-page-canvas .frankie-scroll { padding: 1.25rem .75rem .5rem; }
|
|
325
|
+
.frankie-page-canvas .frankie-root > .border-t { padding: .65rem .75rem calc(.65rem + env(safe-area-inset-bottom)); }
|
|
326
|
+
}
|
|
327
|
+
}
|