@jini-ai/chat 0.3.2 → 0.3.4

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 (84) hide show
  1. package/README.md +1 -1
  2. package/dist/react/components/Composer.d.ts +36 -1
  3. package/dist/react/components/Composer.d.ts.map +1 -1
  4. package/dist/react/components/Composer.js +57 -7
  5. package/dist/react/components/Composer.js.map +1 -1
  6. package/dist/react/components/MessageList.d.ts +14 -1
  7. package/dist/react/components/MessageList.d.ts.map +1 -1
  8. package/dist/react/components/MessageList.js +10 -8
  9. package/dist/react/components/MessageList.js.map +1 -1
  10. package/dist/react/components/MessageRow.d.ts +8 -0
  11. package/dist/react/components/MessageRow.d.ts.map +1 -1
  12. package/dist/react/components/MessageRow.js +31 -2
  13. package/dist/react/components/MessageRow.js.map +1 -1
  14. package/dist/react/features/chat-pane/components/AgentRuntimePicker.d.ts.map +1 -1
  15. package/dist/react/features/chat-pane/components/AgentRuntimePicker.js +1 -1
  16. package/dist/react/features/chat-pane/components/AgentRuntimePicker.js.map +1 -1
  17. package/dist/react/features/chat-pane/components/ChatPane.d.ts +1 -1
  18. package/dist/react/features/chat-pane/components/ChatPane.d.ts.map +1 -1
  19. package/dist/react/features/chat-pane/components/ChatPane.js +98 -12
  20. package/dist/react/features/chat-pane/components/ChatPane.js.map +1 -1
  21. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts +15 -0
  22. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts.map +1 -1
  23. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js +66 -5
  24. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js.map +1 -1
  25. package/dist/react/features/chat-pane/rules.d.ts +14 -0
  26. package/dist/react/features/chat-pane/rules.d.ts.map +1 -1
  27. package/dist/react/features/chat-pane/rules.js +16 -0
  28. package/dist/react/features/chat-pane/rules.js.map +1 -1
  29. package/dist/react/features/chat-pane/styles.d.ts +1 -1
  30. package/dist/react/features/chat-pane/styles.d.ts.map +1 -1
  31. package/dist/react/features/chat-pane/styles.js +144 -0
  32. package/dist/react/features/chat-pane/styles.js.map +1 -1
  33. package/dist/react/features/chat-pane/types.d.ts +29 -0
  34. package/dist/react/features/chat-pane/types.d.ts.map +1 -1
  35. package/dist/react/styles/reference.css +15 -0
  36. package/package.json +3 -3
  37. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts +0 -12
  38. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts.map +0 -1
  39. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js +0 -102
  40. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js.map +0 -1
  41. package/dist/react/features/chat-pane/react/components/ChatPane.d.ts +0 -10
  42. package/dist/react/features/chat-pane/react/components/ChatPane.d.ts.map +0 -1
  43. package/dist/react/features/chat-pane/react/components/ChatPane.js +0 -137
  44. package/dist/react/features/chat-pane/react/components/ChatPane.js.map +0 -1
  45. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts +0 -133
  46. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts.map +0 -1
  47. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js +0 -258
  48. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js.map +0 -1
  49. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts +0 -66
  50. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts.map +0 -1
  51. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js +0 -223
  52. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js.map +0 -1
  53. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts +0 -38
  54. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts.map +0 -1
  55. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js +0 -252
  56. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js.map +0 -1
  57. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts +0 -26
  58. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts.map +0 -1
  59. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js +0 -60
  60. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js.map +0 -1
  61. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts +0 -25
  62. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts.map +0 -1
  63. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js +0 -83
  64. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js.map +0 -1
  65. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts +0 -38
  66. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts.map +0 -1
  67. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js +0 -184
  68. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js.map +0 -1
  69. package/dist/react/features/chat-pane/react/styles.d.ts +0 -2
  70. package/dist/react/features/chat-pane/react/styles.d.ts.map +0 -1
  71. package/dist/react/features/chat-pane/react/styles.js +0 -863
  72. package/dist/react/features/chat-pane/react/styles.js.map +0 -1
  73. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts +0 -7
  74. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts.map +0 -1
  75. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js +0 -20
  76. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js.map +0 -1
  77. package/dist/react/features/model-picker/react/components/ModelPicker.d.ts +0 -9
  78. package/dist/react/features/model-picker/react/components/ModelPicker.d.ts.map +0 -1
  79. package/dist/react/features/model-picker/react/components/ModelPicker.js +0 -34
  80. package/dist/react/features/model-picker/react/components/ModelPicker.js.map +0 -1
  81. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts +0 -27
  82. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts.map +0 -1
  83. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js +0 -62
  84. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js.map +0 -1
@@ -1,863 +0,0 @@
1
- export const CHAT_PANE_STYLES = `
2
- .jini-chat-pane {
3
- --jini-chat-bg: #faf9f7;
4
- --jini-chat-panel: #fdfcfa;
5
- --jini-chat-text: #1a1916;
6
- --jini-chat-text-strong: #0d0c0a;
7
- --jini-chat-muted: #74716b;
8
- --jini-chat-faint: #b3b0a8;
9
- --jini-chat-border: #e1e5eb;
10
- --jini-chat-border-strong: #c9d0da;
11
- --jini-chat-border-soft: #edf0f4;
12
- --jini-chat-subtle: #f4f5f7;
13
- --jini-chat-accent: #c96442;
14
- --jini-chat-accent-soft: #fbeee5;
15
- --bg-panel: var(--jini-chat-panel);
16
- --bg-subtle: var(--jini-chat-subtle);
17
- --border: var(--jini-chat-border);
18
- --border-strong: var(--jini-chat-border-strong);
19
- --text: var(--jini-chat-text);
20
- --text-strong: var(--jini-chat-text-strong);
21
- --text-muted: var(--jini-chat-muted);
22
- --danger: #e5484d;
23
- --radius: 8px;
24
- --radius-lg: 12px;
25
- position: relative;
26
- display: grid;
27
- grid-template-rows: auto minmax(0, 1fr) auto;
28
- min-width: 0;
29
- min-height: 0;
30
- height: 100%;
31
- overflow: hidden;
32
- color: var(--jini-chat-text);
33
- background: var(--jini-chat-bg);
34
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei UI", "Noto Sans", Roboto, "Helvetica Neue", Arial, sans-serif;
35
- font-size: 13.5px;
36
- line-height: 1.5;
37
- -webkit-font-smoothing: antialiased;
38
- -moz-osx-font-smoothing: grayscale;
39
- }
40
- .jini-chat-pane button,
41
- .jini-runtime-popover button,
42
- .jini-runtime-popover select {
43
- font: inherit;
44
- }
45
- .jini-chat-pane__header {
46
- display: flex;
47
- align-items: center;
48
- justify-content: space-between;
49
- min-height: 74px;
50
- padding: 18px 22px 14px;
51
- border-bottom: 1px solid var(--jini-chat-border-soft);
52
- }
53
- .jini-chat-pane__heading { min-width: 0; }
54
- .jini-chat-pane__eyebrow {
55
- display: block;
56
- margin-bottom: 4px;
57
- color: var(--jini-chat-muted);
58
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
59
- font-size: 10px;
60
- letter-spacing: .1em;
61
- text-transform: uppercase;
62
- }
63
- .jini-chat-pane__title {
64
- overflow: hidden;
65
- margin: 0;
66
- font-size: 21px;
67
- font-weight: 650;
68
- letter-spacing: -.025em;
69
- text-overflow: ellipsis;
70
- white-space: nowrap;
71
- }
72
- .jini-chat-pane__new-thread {
73
- padding: 8px 12px;
74
- color: var(--jini-chat-muted);
75
- background: var(--jini-chat-panel);
76
- border: 1px solid var(--jini-chat-border);
77
- border-radius: 8px;
78
- cursor: pointer;
79
- }
80
- .jini-chat-pane__body {
81
- position: relative;
82
- min-height: 0;
83
- overflow: hidden;
84
- }
85
- .jini-chat-pane .jini-message-list {
86
- height: 100%;
87
- overflow-y: auto;
88
- /*
89
- * .jini-chat-pane__controls is an absolutely-positioned overlay (not a flex/grid sibling that
90
- * pushes this list up), so its real height has to be reserved here instead. Measured against a
91
- * live render: the composer + footer + working-directory row alone is already 179.75px, above
92
- * the 170px this used to reserve -- the last message's tail rendered clipped under the overlay as
93
- * a direct result. 240px adds real margin above that measurement rather than matching it exactly,
94
- * because the composer also grows conditionally (a suggestions row, an attachment tray) that
95
- * this measurement did not have present.
96
- */
97
- padding: 20px 22px 240px;
98
- scrollbar-width: thin;
99
- }
100
- .jini-chat-pane .jini-message {
101
- margin-bottom: 20px;
102
- color: var(--jini-chat-text);
103
- font-size: 14px;
104
- line-height: 1.62;
105
- }
106
- /*
107
- * Bubble on the content, not the row: MessageRow.tsx renders attachments as siblings of
108
- * .jini-message-content inside .jini-message-user, each with their own chip styling -- bubbling
109
- * the whole row would nest one background box inside another. This replaces a dead rule this file
110
- * shipped with (.jini-message-row[data-role="user"] / .jini-message-row.user): MessageRow.tsx
111
- * has never rendered a jini-message-row class or a data-role attribute, and a user message's
112
- * root class is jini-message-user, not bare "user" -- the selector never matched anything real.
113
- */
114
- .jini-chat-pane .jini-message-user .jini-message-content {
115
- margin-left: auto;
116
- padding: 10px 13px;
117
- width: fit-content;
118
- max-width: 88%;
119
- background: var(--jini-chat-subtle);
120
- border-radius: 12px 12px 3px 12px;
121
- }
122
- .jini-chat-pane .jini-message-user .jini-message-attachments {
123
- display: flex;
124
- flex-wrap: wrap;
125
- gap: 6px;
126
- justify-content: flex-end;
127
- margin-bottom: 4px;
128
- }
129
- .jini-chat-pane .jini-message-user .jini-message-attachment-chip {
130
- font-size: 11px;
131
- color: var(--jini-chat-muted);
132
- background: var(--jini-chat-subtle);
133
- border: 1px solid var(--jini-chat-border);
134
- border-radius: 999px;
135
- padding: 3px 10px;
136
- }
137
- .jini-chat-pane .jini-message-agent {
138
- font-size: 11px;
139
- font-weight: 700;
140
- letter-spacing: .02em;
141
- text-transform: uppercase;
142
- color: var(--jini-chat-faint);
143
- margin-bottom: 4px;
144
- }
145
- .jini-chat-pane .jini-message-error { color: var(--danger); font-size: 13px; }
146
- .jini-chat-pane .jini-message-pending { color: var(--jini-chat-muted); font-size: 13px; font-style: italic; }
147
- .jini-chat-pane__controls {
148
- position: absolute;
149
- right: 0;
150
- bottom: 0;
151
- left: 0;
152
- z-index: 4;
153
- padding: 0 16px 14px;
154
- background: linear-gradient(to bottom, transparent, var(--jini-chat-bg) 22px);
155
- }
156
- .jini-chat-pane__suggestions {
157
- display: flex;
158
- gap: 8px;
159
- margin: 0 2px 8px;
160
- overflow-x: auto;
161
- }
162
- .jini-chat-pane__suggestion {
163
- flex: 0 0 auto;
164
- max-width: 290px;
165
- overflow: hidden;
166
- padding: 7px 11px;
167
- color: var(--jini-chat-muted);
168
- background: color-mix(in srgb, var(--jini-chat-panel) 92%, transparent);
169
- border: 1px solid var(--jini-chat-border);
170
- border-radius: 999px;
171
- font-size: 11px;
172
- text-overflow: ellipsis;
173
- white-space: nowrap;
174
- cursor: pointer;
175
- }
176
- .jini-chat-pane__error {
177
- margin: 0 2px 8px;
178
- padding: 8px 10px;
179
- color: #8c2f20;
180
- background: #fff1ed;
181
- border: 1px solid #f2c8bb;
182
- border-radius: 8px;
183
- font-size: 12px;
184
- }
185
- .jini-chat-pane__status {
186
- margin: 0 2px 8px;
187
- padding: 8px 10px;
188
- color: var(--jini-chat-muted);
189
- background: var(--jini-chat-subtle);
190
- border: 1px solid var(--jini-chat-border);
191
- border-radius: 8px;
192
- font-size: 12px;
193
- }
194
- .jini-chat-pane__drop-target {
195
- position: relative;
196
- margin: -8px -8px -8px;
197
- padding: 6px;
198
- border: 2px dashed transparent;
199
- border-radius: 16px;
200
- transition:
201
- background-color .14s ease,
202
- border-color .14s ease,
203
- box-shadow .14s ease;
204
- }
205
- .jini-chat-pane__drop-target.is-dragging-files {
206
- background: color-mix(in srgb, var(--jini-chat-accent-soft) 72%, transparent);
207
- border-color: var(--jini-chat-accent);
208
- box-shadow: 0 0 0 1px color-mix(in srgb, var(--jini-chat-accent) 15%, transparent);
209
- }
210
- .jini-chat-pane__drop-target.is-dragging-files .jini-composer {
211
- background: color-mix(in srgb, var(--jini-chat-accent-soft) 58%, var(--jini-chat-panel));
212
- border-color: color-mix(in srgb, var(--jini-chat-accent) 68%, var(--jini-chat-border));
213
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--jini-chat-accent) 10%, transparent);
214
- }
215
- .jini-chat-pane__drop-announcement {
216
- position: absolute;
217
- width: 1px;
218
- height: 1px;
219
- overflow: hidden;
220
- clip: rect(0, 0, 0, 0);
221
- white-space: nowrap;
222
- clip-path: inset(50%);
223
- }
224
- .jini-chat-pane .jini-composer {
225
- position: relative;
226
- overflow: visible;
227
- padding: 0;
228
- background: var(--jini-chat-subtle);
229
- border: 1px solid var(--jini-chat-border);
230
- border-radius: 12px;
231
- box-shadow: none;
232
- transition: border-color .16s ease, box-shadow .16s ease;
233
- }
234
- .jini-chat-pane .jini-composer:focus-within {
235
- background: var(--jini-chat-panel);
236
- border-color: color-mix(in srgb, var(--jini-chat-accent) 22%, var(--jini-chat-border-strong));
237
- box-shadow: 0 1px 2px rgba(26, 25, 22, .06), 0 0 0 1px rgba(201, 100, 66, .06);
238
- }
239
- .jini-chat-pane .jini-composer-leading {
240
- padding: 8px 12px 0;
241
- }
242
- .jini-chat-pane .jini-attachment-tray {
243
- display: flex;
244
- flex-wrap: wrap;
245
- gap: 6px;
246
- max-height: 88px;
247
- overflow-y: auto;
248
- padding: 8px 10px 0;
249
- scrollbar-width: thin;
250
- }
251
- .jini-chat-pane .jini-attachment-tray:empty { display: none; }
252
- .jini-chat-pane .jini-attachment-chip {
253
- display: inline-flex;
254
- align-items: center;
255
- box-sizing: border-box;
256
- min-width: 0;
257
- max-width: min(100%, 290px);
258
- height: 36px;
259
- padding: 3px 4px 3px 5px;
260
- color: var(--jini-chat-text);
261
- background: color-mix(in srgb, var(--jini-chat-panel) 88%, var(--jini-chat-subtle));
262
- border: 1px solid var(--jini-chat-border);
263
- border-radius: 9px;
264
- box-shadow: 0 1px 1px rgba(13, 12, 10, .025);
265
- }
266
- .jini-chat-pane .jini-attachment-chip-body {
267
- display: flex;
268
- align-items: center;
269
- min-width: 0;
270
- gap: 7px;
271
- }
272
- .jini-chat-pane .jini-attachment-chip-icon {
273
- display: grid;
274
- flex: 0 0 auto;
275
- place-items: center;
276
- width: 26px;
277
- height: 26px;
278
- color: var(--jini-chat-muted);
279
- background: var(--jini-chat-subtle);
280
- border-radius: 7px;
281
- }
282
- .jini-chat-pane .jini-attachment-chip-icon.is-image {
283
- color: var(--jini-chat-accent);
284
- background: var(--jini-chat-accent-soft);
285
- }
286
- .jini-chat-pane .jini-attachment-chip-copy {
287
- display: flex;
288
- min-width: 0;
289
- flex-direction: column;
290
- line-height: 1.15;
291
- }
292
- .jini-chat-pane .jini-attachment-chip-name {
293
- overflow: hidden;
294
- font-size: 11.5px;
295
- font-weight: 550;
296
- text-overflow: ellipsis;
297
- white-space: nowrap;
298
- }
299
- .jini-chat-pane .jini-attachment-chip-size {
300
- color: var(--jini-chat-muted);
301
- font-size: 9.5px;
302
- }
303
- .jini-chat-pane .jini-attachment-remove {
304
- display: grid;
305
- flex: 0 0 auto;
306
- place-items: center;
307
- width: 25px;
308
- height: 25px;
309
- margin-left: 4px;
310
- padding: 0;
311
- color: var(--jini-chat-muted);
312
- background: transparent;
313
- border: 0;
314
- border-radius: 7px;
315
- cursor: pointer;
316
- }
317
- .jini-chat-pane .jini-attachment-remove:hover,
318
- .jini-chat-pane .jini-attachment-remove:focus-visible {
319
- color: var(--jini-chat-text-strong);
320
- background: var(--jini-chat-subtle);
321
- outline: none;
322
- }
323
- .jini-chat-pane .jini-composer-input {
324
- display: block;
325
- box-sizing: border-box;
326
- width: 100%;
327
- min-height: 92px;
328
- resize: none;
329
- padding: 12px 14px 8px;
330
- color: var(--jini-chat-text);
331
- background: transparent;
332
- border: 0;
333
- outline: 0;
334
- font-size: 13.5px;
335
- line-height: 1.6;
336
- }
337
- .jini-chat-pane .jini-composer-input::placeholder { color: var(--jini-chat-faint); }
338
- .jini-chat-pane .jini-composer-footer {
339
- display: flex;
340
- align-items: center;
341
- justify-content: space-between;
342
- min-height: 42px;
343
- gap: 6px;
344
- padding: 6px 8px 8px;
345
- border-top: 1px solid var(--jini-chat-border-soft);
346
- }
347
- .jini-chat-pane .jini-composer-attachment-picker { display: inline-flex; }
348
- .jini-chat-pane .jini-composer-file-input {
349
- position: absolute;
350
- width: 1px;
351
- height: 1px;
352
- overflow: hidden;
353
- clip: rect(0, 0, 0, 0);
354
- white-space: nowrap;
355
- clip-path: inset(50%);
356
- }
357
- .jini-chat-pane .jini-composer-attach {
358
- display: inline-flex;
359
- align-items: center;
360
- justify-content: center;
361
- width: 32px;
362
- height: 32px;
363
- padding: 0;
364
- color: var(--jini-chat-muted);
365
- background: transparent;
366
- border: 1px solid transparent;
367
- border-radius: 8px;
368
- cursor: pointer;
369
- }
370
- .jini-chat-pane .jini-composer-attach:hover:not(:disabled) {
371
- color: var(--jini-chat-text);
372
- background: var(--jini-chat-panel);
373
- border-color: var(--jini-chat-border);
374
- }
375
- .jini-chat-pane .jini-composer-attach:disabled { opacity: .45; cursor: default; }
376
- .jini-composer-spinner,
377
- .jini-runtime-spinner { animation: jini-chat-spin .8s linear infinite; }
378
- @keyframes jini-chat-spin { to { transform: rotate(360deg); } }
379
- .jini-chat-pane .jini-composer-footer-accessories {
380
- display: flex;
381
- margin-left: auto;
382
- min-width: 0;
383
- }
384
- .jini-chat-pane .jini-composer-send {
385
- display: grid;
386
- place-items: center;
387
- width: 32px;
388
- height: 32px;
389
- padding: 0;
390
- color: white;
391
- background: var(--jini-chat-text-strong);
392
- border: 0;
393
- border-radius: 8px;
394
- cursor: pointer;
395
- }
396
- .jini-chat-pane .jini-composer-send:disabled {
397
- color: #aaa59e;
398
- background: #ece8e2;
399
- cursor: default;
400
- }
401
- .jini-chat-pane__cancel {
402
- position: absolute;
403
- right: 48px;
404
- bottom: 22px;
405
- padding: 5px 9px;
406
- color: var(--jini-chat-muted);
407
- background: var(--jini-chat-panel);
408
- border: 1px solid var(--jini-chat-border);
409
- border-radius: 7px;
410
- cursor: pointer;
411
- }
412
- .jini-chat-pane__workdir {
413
- display: flex;
414
- align-items: center;
415
- gap: 7px;
416
- min-width: 0;
417
- padding: 5px 4px 0;
418
- color: var(--jini-chat-muted);
419
- font-size: 13px;
420
- }
421
- .jini-chat-pane__workdir code {
422
- overflow: hidden;
423
- text-overflow: ellipsis;
424
- white-space: nowrap;
425
- }
426
- .jini-chat-pane .jini-working-dir-picker {
427
- position: relative;
428
- display: inline-flex;
429
- align-items: flex-start;
430
- }
431
- .jini-chat-pane .jini-working-dir-trigger-row {
432
- display: inline-flex;
433
- align-items: center;
434
- gap: 2px;
435
- }
436
- .jini-chat-pane .jini-working-dir-trigger {
437
- appearance: none;
438
- display: inline-flex;
439
- align-items: center;
440
- gap: 6px;
441
- padding: 4px 6px;
442
- color: var(--jini-chat-muted);
443
- background: transparent;
444
- border: 0;
445
- border-radius: 8px;
446
- font: inherit;
447
- font-size: 13px;
448
- cursor: pointer;
449
- }
450
- .jini-chat-pane .jini-working-dir-trigger:hover,
451
- .jini-chat-pane .jini-working-dir-trigger:focus-visible {
452
- color: var(--jini-chat-text-strong);
453
- background: var(--jini-chat-subtle);
454
- outline: none;
455
- }
456
- .jini-chat-pane .jini-working-dir-trigger.invalid { color: var(--danger); }
457
- .jini-chat-pane .jini-working-dir-trigger-icon { flex: 0 0 auto; opacity: .75; }
458
- .jini-chat-pane .jini-working-dir-trigger.invalid .jini-working-dir-trigger-icon {
459
- color: var(--danger);
460
- opacity: 1;
461
- }
462
- .jini-chat-pane .jini-working-dir-trigger-label {
463
- max-width: 240px;
464
- overflow: hidden;
465
- text-overflow: ellipsis;
466
- white-space: nowrap;
467
- }
468
- .jini-chat-pane .jini-working-dir-trigger-chevron { flex: 0 0 auto; opacity: .55; }
469
- .jini-chat-pane .jini-working-dir-panel,
470
- .jini-chat-pane .jini-working-dir-flyout {
471
- position: absolute;
472
- z-index: 90;
473
- display: flex;
474
- flex-direction: column;
475
- min-width: 210px;
476
- padding: 5px;
477
- background: var(--jini-chat-panel);
478
- border: 1px solid var(--jini-chat-border-strong);
479
- border-radius: 12px;
480
- box-shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 10px 28px -10px rgba(0, 0, 0, .18);
481
- }
482
- .jini-chat-pane .jini-working-dir-panel {
483
- top: calc(100% + 6px);
484
- left: 0;
485
- }
486
- .jini-chat-pane .jini-working-dir-panel.up {
487
- top: auto;
488
- bottom: calc(100% + 6px);
489
- }
490
- .jini-chat-pane .jini-working-dir-item {
491
- appearance: none;
492
- display: flex;
493
- align-items: center;
494
- gap: 9px;
495
- width: 100%;
496
- min-height: 32px;
497
- padding: 0 9px;
498
- color: var(--jini-chat-text-strong);
499
- background: transparent;
500
- border: 0;
501
- border-radius: 8px;
502
- font: inherit;
503
- font-size: 13px;
504
- text-align: left;
505
- cursor: pointer;
506
- }
507
- .jini-chat-pane .jini-working-dir-item:hover,
508
- .jini-chat-pane .jini-working-dir-item:focus-visible,
509
- .jini-chat-pane .jini-working-dir-recent-item:hover,
510
- .jini-chat-pane .jini-working-dir-recent-item:focus-visible {
511
- background: var(--jini-chat-subtle);
512
- outline: none;
513
- }
514
- .jini-chat-pane .jini-working-dir-item-icon { flex: 0 0 auto; opacity: .8; }
515
- .jini-chat-pane .jini-working-dir-item > span {
516
- flex: 1 1 auto;
517
- min-width: 0;
518
- overflow: hidden;
519
- text-overflow: ellipsis;
520
- white-space: nowrap;
521
- }
522
- .jini-chat-pane .jini-working-dir-item-chevron { margin-left: auto; opacity: .55; }
523
- .jini-chat-pane .jini-working-dir-submenu-row { position: relative; }
524
- .jini-chat-pane .jini-working-dir-flyout {
525
- top: -5px;
526
- left: 100%;
527
- z-index: 91;
528
- min-width: 220px;
529
- max-width: 320px;
530
- margin-left: 4px;
531
- }
532
- .jini-chat-pane .jini-working-dir-flyout.up { top: auto; bottom: -5px; }
533
- .jini-chat-pane .jini-working-dir-flyout::before {
534
- position: absolute;
535
- top: 0;
536
- left: -8px;
537
- width: 8px;
538
- height: 100%;
539
- content: "";
540
- }
541
- .jini-chat-pane .jini-working-dir-recent-item {
542
- appearance: none;
543
- display: grid;
544
- grid-template-rows: auto auto;
545
- grid-template-columns: auto 1fr;
546
- align-items: center;
547
- width: 100%;
548
- min-height: 36px;
549
- padding: 4px 9px;
550
- color: var(--jini-chat-text-strong);
551
- background: transparent;
552
- border: 0;
553
- border-radius: 8px;
554
- font: inherit;
555
- text-align: left;
556
- cursor: pointer;
557
- column-gap: 9px;
558
- }
559
- .jini-chat-pane .jini-working-dir-recent-item .jini-working-dir-item-icon {
560
- grid-row: 1 / span 2;
561
- }
562
- .jini-chat-pane .jini-working-dir-recent-name,
563
- .jini-chat-pane .jini-working-dir-recent-path {
564
- grid-column: 2;
565
- overflow: hidden;
566
- text-overflow: ellipsis;
567
- white-space: nowrap;
568
- }
569
- .jini-chat-pane .jini-working-dir-recent-name { font-size: 13px; }
570
- .jini-chat-pane .jini-working-dir-recent-path {
571
- color: var(--jini-chat-muted);
572
- font-size: 11px;
573
- opacity: .7;
574
- }
575
- .jini-chat-pane .jini-working-dir-empty {
576
- padding: 8px 10px;
577
- color: var(--jini-chat-muted);
578
- font-size: 12px;
579
- white-space: nowrap;
580
- opacity: .7;
581
- }
582
- .jini-runtime-picker { position: relative; }
583
- .jini-runtime-trigger {
584
- display: inline-grid;
585
- grid-template-columns: 24px 14px;
586
- align-items: center;
587
- gap: 7px;
588
- height: 32px;
589
- min-width: 0;
590
- padding: 3px 7px 3px 5px;
591
- color: var(--jini-chat-text);
592
- background: transparent;
593
- border: 0;
594
- border-radius: 8px;
595
- cursor: pointer;
596
- }
597
- .jini-runtime-trigger:hover { background: var(--jini-chat-subtle); }
598
- .jini-runtime-trigger__copy { display: none; }
599
- .jini-runtime-trigger__copy strong {
600
- overflow: hidden;
601
- max-width: 122px;
602
- font-size: 11px;
603
- font-weight: 650;
604
- text-overflow: ellipsis;
605
- white-space: nowrap;
606
- }
607
- .jini-runtime-trigger__copy small {
608
- overflow: hidden;
609
- max-width: 122px;
610
- color: var(--jini-chat-muted);
611
- font-size: 9px;
612
- text-overflow: ellipsis;
613
- white-space: nowrap;
614
- }
615
- .jini-runtime-trigger__chevron { color: var(--jini-chat-muted); font-size: 12px; }
616
- .jini-runtime-agent-icon.agent-icon { flex: 0 0 auto; object-fit: contain; }
617
- .jini-runtime-agent-icon.agent-icon-mono {
618
- display: inline-block;
619
- background-color: currentColor;
620
- -webkit-mask-repeat: no-repeat;
621
- mask-repeat: no-repeat;
622
- -webkit-mask-position: center;
623
- mask-position: center;
624
- -webkit-mask-size: contain;
625
- mask-size: contain;
626
- }
627
- .jini-runtime-agent-icon.agent-icon-fallback {
628
- display: inline-flex;
629
- align-items: center;
630
- justify-content: center;
631
- color: #74716b;
632
- background: #f4f5f7;
633
- border: 1px solid #e1e5eb;
634
- border-radius: 6px;
635
- font-weight: 700;
636
- }
637
- .jini-runtime-popover {
638
- --jini-chat-panel: #fdfcfa;
639
- --jini-chat-text: #1a1916;
640
- --jini-chat-text-strong: #0d0c0a;
641
- --jini-chat-muted: #74716b;
642
- --jini-chat-faint: #b3b0a8;
643
- --jini-chat-border: #e1e5eb;
644
- --jini-chat-border-soft: #edf0f4;
645
- --jini-chat-subtle: #f4f5f7;
646
- box-sizing: border-box;
647
- padding: 8px;
648
- color: var(--jini-chat-text);
649
- background: var(--jini-chat-panel);
650
- border: 1px solid var(--jini-chat-border);
651
- border-radius: 12px;
652
- box-shadow: 0 18px 46px rgba(13, 12, 10, .15), 0 2px 8px rgba(13, 12, 10, .06);
653
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei UI", "Noto Sans", Roboto, "Helvetica Neue", Arial, sans-serif;
654
- font-size: 13.5px;
655
- line-height: 1.5;
656
- -webkit-font-smoothing: antialiased;
657
- }
658
- .jini-runtime-popover__head {
659
- display: flex;
660
- flex-direction: column;
661
- gap: 3px;
662
- padding: 10px 12px 12px;
663
- border-bottom: 1px solid var(--jini-chat-border-soft);
664
- }
665
- .jini-runtime-popover__head strong { color: var(--jini-chat-text-strong); font-size: 14px; font-weight: 650; }
666
- .jini-runtime-popover__head span { color: var(--jini-chat-muted); font-size: 12px; }
667
- .jini-runtime-mode,
668
- .jini-runtime-agent,
669
- .jini-runtime-rescan {
670
- display: flex;
671
- align-items: center;
672
- gap: 11px;
673
- box-sizing: border-box;
674
- width: 100%;
675
- min-height: 40px;
676
- padding: 8px 11px;
677
- color: var(--jini-chat-text);
678
- background: transparent;
679
- border: 0;
680
- border-radius: 8px;
681
- text-align: left;
682
- cursor: pointer;
683
- }
684
- .jini-runtime-mode:hover,
685
- .jini-runtime-agent:hover:not(:disabled),
686
- .jini-runtime-rescan:hover:not(:disabled) { background: var(--jini-chat-subtle); }
687
- .jini-runtime-mode.is-active { font-weight: 650; }
688
- .jini-runtime-mode:disabled,
689
- .jini-runtime-agent:disabled,
690
- .jini-runtime-rescan:disabled { color: var(--jini-chat-faint); cursor: default; }
691
- .jini-runtime-mode__meta,
692
- .jini-runtime-agent__status {
693
- margin-left: auto;
694
- color: var(--jini-chat-muted);
695
- font-size: 12px;
696
- white-space: nowrap;
697
- }
698
- .jini-runtime-check { flex: 0 0 auto; color: var(--jini-chat-text); }
699
- .jini-runtime-section-label {
700
- padding: 12px 11px 5px;
701
- color: var(--jini-chat-faint);
702
- font-size: 11px;
703
- font-weight: 650;
704
- letter-spacing: .08em;
705
- text-transform: uppercase;
706
- }
707
- .jini-runtime-agent.is-active { background: transparent; }
708
- .jini-runtime-agent__copy {
709
- display: flex;
710
- flex: 1;
711
- flex-direction: column;
712
- min-width: 0;
713
- }
714
- .jini-runtime-agent__copy strong { font-size: 13.5px; font-weight: 500; }
715
- .jini-runtime-agent__copy small {
716
- overflow: hidden;
717
- color: #8b857e;
718
- font-size: 10px;
719
- text-overflow: ellipsis;
720
- white-space: nowrap;
721
- }
722
- .jini-runtime-empty { padding: 10px 11px; color: var(--jini-chat-muted); font-size: 12px; }
723
- .jini-runtime-models {
724
- display: flex;
725
- flex-direction: column;
726
- gap: 9px;
727
- margin-top: 5px;
728
- padding: 10px 11px 8px;
729
- border-top: 1px dashed var(--jini-chat-border);
730
- }
731
- .jini-runtime-select {
732
- display: flex;
733
- flex-direction: column;
734
- gap: 5px;
735
- color: var(--jini-chat-muted);
736
- font-size: 13px;
737
- }
738
- .jini-runtime-select select {
739
- box-sizing: border-box;
740
- width: 100%;
741
- min-height: 40px;
742
- padding: 7px 10px;
743
- color: var(--jini-chat-text);
744
- background: var(--jini-chat-panel);
745
- border: 1px solid var(--jini-chat-border);
746
- border-radius: 8px;
747
- }
748
- /*
749
- * The BYOK model, rendered as a value rather than a control — see RuntimeByokDetails for why it
750
- * is not a disabled select. It occupies the same box the sibling selects do so the row still
751
- * reads as part of the same list, but carries no border: a bordered box with no affordance is
752
- * exactly the "looks editable, isn't" shape the plain text exists to avoid.
753
- */
754
- /*
755
- * The BYOK model list, which CustomSelect portals to document.body. runtimePopoverPosition puts
756
- * the runtime popover at z-index 1000; the shared .jini-select-menu default is 60, which is right
757
- * everywhere else and puts this menu behind the very popover that opened it. One above the
758
- * popover, not far above: it must clear its own surface and nothing else.
759
- */
760
- .jini-select-menu.jini-runtime-model-menu {
761
- z-index: 1001;
762
- }
763
- .jini-runtime-byok-model strong {
764
- box-sizing: border-box;
765
- display: flex;
766
- align-items: center;
767
- min-height: 40px;
768
- padding: 7px 10px;
769
- color: var(--jini-chat-text);
770
- font-weight: 600;
771
- word-break: break-all;
772
- }
773
- /*
774
- * Tool-call cards (ToolCard.tsx) and the per-turn usage summary (MessageRow.tsx) ship no CSS of
775
- * their own — see this file's own header note on why the package supplies a default theme at all.
776
- * Collapsed by default (.op-card-head is the only always-visible part), so a run with a dozen tool
777
- * calls reads as a dozen one-line rows, not a page of raw JSON.
778
- */
779
- .jini-chat-pane .jini-message-tools {
780
- display: flex;
781
- flex-direction: column;
782
- gap: 6px;
783
- width: 100%;
784
- }
785
- .jini-chat-pane .op-card {
786
- border: 1px solid var(--jini-chat-border);
787
- border-radius: var(--radius);
788
- background: var(--jini-chat-subtle);
789
- overflow: hidden;
790
- font-size: 13px;
791
- }
792
- .jini-chat-pane .op-card-head {
793
- display: flex;
794
- align-items: center;
795
- gap: 8px;
796
- width: 100%;
797
- padding: 7px 10px;
798
- background: none;
799
- border: 0;
800
- font: inherit;
801
- text-align: left;
802
- cursor: pointer;
803
- color: inherit;
804
- }
805
- .jini-chat-pane .op-status { display: inline-flex; flex-shrink: 0; }
806
- .jini-chat-pane .op-status-ok { color: #4e875f; }
807
- .jini-chat-pane .op-status-error { color: var(--danger); }
808
- .jini-chat-pane .op-status-running { color: var(--jini-chat-accent); }
809
- .jini-chat-pane .op-title { font-weight: 600; flex-shrink: 0; }
810
- .jini-chat-pane .shimmer-text { opacity: .6; }
811
- .jini-chat-pane .op-meta {
812
- color: var(--jini-chat-muted);
813
- overflow: hidden;
814
- text-overflow: ellipsis;
815
- white-space: nowrap;
816
- flex: 1;
817
- min-width: 0;
818
- }
819
- .jini-chat-pane .op-expand-chev { flex-shrink: 0; color: var(--jini-chat-faint); }
820
- /* Collapsed by default: 0 max-height clips the inner content, no display:none — keeps the height
821
- transition instead of an instant jump cut. */
822
- .jini-chat-pane .accordion-collapsible { max-height: 0; overflow: hidden; transition: max-height .15s ease; }
823
- .jini-chat-pane .accordion-collapsible.open { max-height: 480px; overflow-y: auto; }
824
- .jini-chat-pane .accordion-collapsible-inner { padding: 0 10px 10px; }
825
- .jini-chat-pane .op-card-detail { display: flex; flex-direction: column; gap: 6px; }
826
- .jini-chat-pane .op-path,
827
- .jini-chat-pane .op-command,
828
- .jini-chat-pane .op-output {
829
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
830
- font-size: 12px;
831
- background: var(--jini-chat-panel);
832
- border: 1px solid var(--jini-chat-border);
833
- border-radius: 6px;
834
- padding: 6px 8px;
835
- margin: 0;
836
- white-space: pre-wrap;
837
- word-break: break-word;
838
- }
839
- .jini-chat-pane .op-open {
840
- border: 1px solid var(--jini-chat-border-strong);
841
- border-radius: 6px;
842
- background: var(--jini-chat-panel);
843
- padding: 2px 8px;
844
- font-size: 11px;
845
- cursor: pointer;
846
- }
847
- /* The "Done · 6m 29s · 2612 out · $0.4028" line — real numbers from the run's own kind:'usage' event. */
848
- .jini-chat-pane .jini-message-usage {
849
- display: flex;
850
- align-items: center;
851
- gap: 6px;
852
- font-size: 11px;
853
- color: var(--jini-chat-muted);
854
- margin-top: 2px;
855
- }
856
- .jini-chat-pane .jini-message-usage-dot { font-size: 8px; color: #4e875f; }
857
- @media (max-width: 560px) {
858
- .jini-chat-pane__header { padding-inline: 16px; }
859
- .jini-chat-pane .jini-message-list { padding-inline: 16px; }
860
- .jini-chat-pane__controls { padding-inline: 10px; }
861
- }
862
- `;
863
- //# sourceMappingURL=styles.js.map