@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.
- package/README.md +1 -1
- package/dist/react/components/Composer.d.ts +36 -1
- package/dist/react/components/Composer.d.ts.map +1 -1
- package/dist/react/components/Composer.js +57 -7
- package/dist/react/components/Composer.js.map +1 -1
- package/dist/react/components/MessageList.d.ts +14 -1
- package/dist/react/components/MessageList.d.ts.map +1 -1
- package/dist/react/components/MessageList.js +10 -8
- package/dist/react/components/MessageList.js.map +1 -1
- package/dist/react/components/MessageRow.d.ts +8 -0
- package/dist/react/components/MessageRow.d.ts.map +1 -1
- package/dist/react/components/MessageRow.js +31 -2
- package/dist/react/components/MessageRow.js.map +1 -1
- package/dist/react/features/chat-pane/components/AgentRuntimePicker.d.ts.map +1 -1
- package/dist/react/features/chat-pane/components/AgentRuntimePicker.js +1 -1
- package/dist/react/features/chat-pane/components/AgentRuntimePicker.js.map +1 -1
- package/dist/react/features/chat-pane/components/ChatPane.d.ts +1 -1
- package/dist/react/features/chat-pane/components/ChatPane.d.ts.map +1 -1
- package/dist/react/features/chat-pane/components/ChatPane.js +98 -12
- package/dist/react/features/chat-pane/components/ChatPane.js.map +1 -1
- package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts +15 -0
- package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts.map +1 -1
- package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js +66 -5
- package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js.map +1 -1
- package/dist/react/features/chat-pane/rules.d.ts +14 -0
- package/dist/react/features/chat-pane/rules.d.ts.map +1 -1
- package/dist/react/features/chat-pane/rules.js +16 -0
- package/dist/react/features/chat-pane/rules.js.map +1 -1
- package/dist/react/features/chat-pane/styles.d.ts +1 -1
- package/dist/react/features/chat-pane/styles.d.ts.map +1 -1
- package/dist/react/features/chat-pane/styles.js +144 -0
- package/dist/react/features/chat-pane/styles.js.map +1 -1
- package/dist/react/features/chat-pane/types.d.ts +29 -0
- package/dist/react/features/chat-pane/types.d.ts.map +1 -1
- package/dist/react/styles/reference.css +15 -0
- package/package.json +3 -3
- package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts +0 -12
- package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts.map +0 -1
- package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js +0 -102
- package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js.map +0 -1
- package/dist/react/features/chat-pane/react/components/ChatPane.d.ts +0 -10
- package/dist/react/features/chat-pane/react/components/ChatPane.d.ts.map +0 -1
- package/dist/react/features/chat-pane/react/components/ChatPane.js +0 -137
- package/dist/react/features/chat-pane/react/components/ChatPane.js.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts +0 -133
- package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js +0 -258
- package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts +0 -66
- package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js +0 -223
- package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts +0 -38
- package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js +0 -252
- package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts +0 -26
- package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js +0 -60
- package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts +0 -25
- package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js +0 -83
- package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts +0 -38
- package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts.map +0 -1
- package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js +0 -184
- package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js.map +0 -1
- package/dist/react/features/chat-pane/react/styles.d.ts +0 -2
- package/dist/react/features/chat-pane/react/styles.d.ts.map +0 -1
- package/dist/react/features/chat-pane/react/styles.js +0 -863
- package/dist/react/features/chat-pane/react/styles.js.map +0 -1
- package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts +0 -7
- package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts.map +0 -1
- package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js +0 -20
- package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js.map +0 -1
- package/dist/react/features/model-picker/react/components/ModelPicker.d.ts +0 -9
- package/dist/react/features/model-picker/react/components/ModelPicker.d.ts.map +0 -1
- package/dist/react/features/model-picker/react/components/ModelPicker.js +0 -34
- package/dist/react/features/model-picker/react/components/ModelPicker.js.map +0 -1
- package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts +0 -27
- package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts.map +0 -1
- package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js +0 -62
- package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js.map +0 -1
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
-
import { useLatestOperation } from '../../../../hooks/useLatestOperation.js';
|
|
3
|
-
/**
|
|
4
|
-
* Owns controlled/uncontrolled directory state and orchestrates the native
|
|
5
|
-
* filesystem effects used by the packaged working-directory picker.
|
|
6
|
-
*
|
|
7
|
-
* Every async path runs through one {@link useLatestOperation} instance, so a validation still in
|
|
8
|
-
* flight cannot clobber the result of the pick that replaced it, and a resolved promise arriving
|
|
9
|
-
* after unmount writes nothing. `token.ensureCurrent()` is that check — it stands where a
|
|
10
|
-
* `if (!mounted || stale) return;` guard used to sit after each await.
|
|
11
|
-
*
|
|
12
|
-
* @param options - Public value, change callback, and optional host I/O access.
|
|
13
|
-
* @returns Current picker state plus actions consumed by {@link ChatPane}.
|
|
14
|
-
* @throws Never. Native capability failures are exposed as
|
|
15
|
-
* `workingDirectoryError` for package-owned validation UI.
|
|
16
|
-
*
|
|
17
|
-
* @complexity Time: O(r) when refreshing `r` recent paths; O(1) otherwise.
|
|
18
|
-
* @complexity Space: O(r) for the package-owned recent-directory snapshot.
|
|
19
|
-
* @overallScore 100/100
|
|
20
|
-
*/
|
|
21
|
-
export function useChatPaneWorkingDirectory(options) {
|
|
22
|
-
const controlled = options.workingDirectory !== undefined;
|
|
23
|
-
const [uncontrolledWorkingDirectory, setUncontrolledWorkingDirectory] = useState(options.initialWorkingDirectory ?? null);
|
|
24
|
-
const [recentDirectories, setRecentDirectories] = useState([]);
|
|
25
|
-
const [workingDirectoryInvalid, setWorkingDirectoryInvalid] = useState(false);
|
|
26
|
-
const [workingDirectoryPending, setWorkingDirectoryPending] = useState(false);
|
|
27
|
-
const [workingDirectoryError, setWorkingDirectoryError] = useState(null);
|
|
28
|
-
const operation = useLatestOperation();
|
|
29
|
-
const observedDirectoryRef = useRef(undefined);
|
|
30
|
-
const workingDirectory = controlled
|
|
31
|
-
? options.workingDirectory ?? null
|
|
32
|
-
: uncontrolledWorkingDirectory;
|
|
33
|
-
const reportWorkingDirectory = useCallback((directory) => {
|
|
34
|
-
observedDirectoryRef.current = directory;
|
|
35
|
-
if (!controlled)
|
|
36
|
-
setUncontrolledWorkingDirectory(directory);
|
|
37
|
-
options.onChangeWorkingDirectory?.(directory);
|
|
38
|
-
}, [controlled, options.onChangeWorkingDirectory]);
|
|
39
|
-
/** Shared by every action: a failed native call invalidates and stops pending. */
|
|
40
|
-
const reportFailure = useCallback((error) => {
|
|
41
|
-
setWorkingDirectoryError(error);
|
|
42
|
-
setWorkingDirectoryPending(false);
|
|
43
|
-
}, []);
|
|
44
|
-
useEffect(() => {
|
|
45
|
-
if (observedDirectoryRef.current === workingDirectory)
|
|
46
|
-
return;
|
|
47
|
-
observedDirectoryRef.current = workingDirectory;
|
|
48
|
-
operation.supersede();
|
|
49
|
-
const access = options.workingDirectoryAccess;
|
|
50
|
-
setWorkingDirectoryError(null);
|
|
51
|
-
if (workingDirectory === null || !access) {
|
|
52
|
-
setWorkingDirectoryInvalid(false);
|
|
53
|
-
setWorkingDirectoryPending(false);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
let validationSettled = false;
|
|
57
|
-
setWorkingDirectoryPending(true);
|
|
58
|
-
void operation.run(async (token) => {
|
|
59
|
-
const normalized = access.normalizeWorkingDirectory
|
|
60
|
-
? await access.normalizeWorkingDirectory(workingDirectory)
|
|
61
|
-
: workingDirectory;
|
|
62
|
-
token.ensureCurrent();
|
|
63
|
-
if (normalized === null) {
|
|
64
|
-
validationSettled = true;
|
|
65
|
-
setWorkingDirectoryInvalid(true);
|
|
66
|
-
setWorkingDirectoryPending(false);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const exists = await access.directoryExists(normalized);
|
|
70
|
-
token.ensureCurrent();
|
|
71
|
-
if (normalized !== workingDirectory)
|
|
72
|
-
reportWorkingDirectory(normalized);
|
|
73
|
-
validationSettled = true;
|
|
74
|
-
setWorkingDirectoryInvalid(!exists);
|
|
75
|
-
setWorkingDirectoryPending(false);
|
|
76
|
-
}, (error) => {
|
|
77
|
-
validationSettled = true;
|
|
78
|
-
setWorkingDirectoryInvalid(true);
|
|
79
|
-
reportFailure(error);
|
|
80
|
-
});
|
|
81
|
-
return () => {
|
|
82
|
-
operation.supersede();
|
|
83
|
-
// React Strict Mode replays this effect while preserving refs. Release
|
|
84
|
-
// only the marker for the directory owned by this setup so its replay
|
|
85
|
-
// starts fresh. Settled validations keep their marker so an unstable
|
|
86
|
-
// host adapter object cannot trigger a validation/render loop.
|
|
87
|
-
if (!validationSettled
|
|
88
|
-
&& observedDirectoryRef.current === workingDirectory) {
|
|
89
|
-
observedDirectoryRef.current = undefined;
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
}, [
|
|
93
|
-
operation,
|
|
94
|
-
options.workingDirectoryAccess,
|
|
95
|
-
reportFailure,
|
|
96
|
-
reportWorkingDirectory,
|
|
97
|
-
workingDirectory,
|
|
98
|
-
]);
|
|
99
|
-
const openWorkingDirectoryPicker = useCallback(async () => {
|
|
100
|
-
const access = options.workingDirectoryAccess;
|
|
101
|
-
if (!access)
|
|
102
|
-
return;
|
|
103
|
-
setWorkingDirectoryError(null);
|
|
104
|
-
setWorkingDirectoryPending(true);
|
|
105
|
-
await operation.run(async (token) => {
|
|
106
|
-
const [recent, exists] = await Promise.all([
|
|
107
|
-
access.recentDirectories(),
|
|
108
|
-
workingDirectory === null
|
|
109
|
-
? Promise.resolve(true)
|
|
110
|
-
: access.directoryExists(workingDirectory),
|
|
111
|
-
]);
|
|
112
|
-
token.ensureCurrent();
|
|
113
|
-
setRecentDirectories([...recent]);
|
|
114
|
-
setWorkingDirectoryInvalid(!exists);
|
|
115
|
-
setWorkingDirectoryPending(false);
|
|
116
|
-
}, reportFailure);
|
|
117
|
-
}, [operation, options.workingDirectoryAccess, reportFailure, workingDirectory]);
|
|
118
|
-
const pickWorkingDirectory = useCallback(async () => {
|
|
119
|
-
const access = options.workingDirectoryAccess;
|
|
120
|
-
if (!access)
|
|
121
|
-
return;
|
|
122
|
-
setWorkingDirectoryError(null);
|
|
123
|
-
setWorkingDirectoryPending(true);
|
|
124
|
-
await operation.run(async (token) => {
|
|
125
|
-
const selected = await access.pickWorkingDirectory(workingDirectory ?? undefined);
|
|
126
|
-
token.ensureCurrent();
|
|
127
|
-
if (selected === null) {
|
|
128
|
-
setWorkingDirectoryPending(false);
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
const [exists, recent] = await Promise.all([
|
|
132
|
-
access.directoryExists(selected),
|
|
133
|
-
access.recentDirectories(),
|
|
134
|
-
]);
|
|
135
|
-
token.ensureCurrent();
|
|
136
|
-
reportWorkingDirectory(selected);
|
|
137
|
-
setWorkingDirectoryInvalid(!exists);
|
|
138
|
-
setRecentDirectories([...recent]);
|
|
139
|
-
setWorkingDirectoryPending(false);
|
|
140
|
-
}, reportFailure);
|
|
141
|
-
}, [
|
|
142
|
-
operation,
|
|
143
|
-
options.workingDirectoryAccess,
|
|
144
|
-
reportFailure,
|
|
145
|
-
reportWorkingDirectory,
|
|
146
|
-
workingDirectory,
|
|
147
|
-
]);
|
|
148
|
-
const selectRecentDirectory = useCallback(async (directory) => {
|
|
149
|
-
operation.supersede();
|
|
150
|
-
setWorkingDirectoryError(null);
|
|
151
|
-
const access = options.workingDirectoryAccess;
|
|
152
|
-
if (!access) {
|
|
153
|
-
reportWorkingDirectory(directory);
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
setWorkingDirectoryPending(true);
|
|
157
|
-
await operation.run(async (token) => {
|
|
158
|
-
const exists = await access.directoryExists(directory);
|
|
159
|
-
token.ensureCurrent();
|
|
160
|
-
reportWorkingDirectory(directory);
|
|
161
|
-
setWorkingDirectoryInvalid(!exists);
|
|
162
|
-
setWorkingDirectoryPending(false);
|
|
163
|
-
}, reportFailure);
|
|
164
|
-
}, [operation, options.workingDirectoryAccess, reportFailure, reportWorkingDirectory]);
|
|
165
|
-
const clearWorkingDirectory = useCallback(() => {
|
|
166
|
-
operation.supersede();
|
|
167
|
-
reportWorkingDirectory(null);
|
|
168
|
-
setWorkingDirectoryInvalid(false);
|
|
169
|
-
setWorkingDirectoryPending(false);
|
|
170
|
-
setWorkingDirectoryError(null);
|
|
171
|
-
}, [operation, reportWorkingDirectory]);
|
|
172
|
-
return {
|
|
173
|
-
workingDirectory,
|
|
174
|
-
recentDirectories,
|
|
175
|
-
workingDirectoryInvalid,
|
|
176
|
-
workingDirectoryPending,
|
|
177
|
-
workingDirectoryError,
|
|
178
|
-
openWorkingDirectoryPicker,
|
|
179
|
-
pickWorkingDirectory,
|
|
180
|
-
selectRecentDirectory,
|
|
181
|
-
clearWorkingDirectory,
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=useChatPaneWorkingDirectory.hooks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useChatPaneWorkingDirectory.hooks.js","sourceRoot":"","sources":["../../../../../../src/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export declare const CHAT_PANE_STYLES = "\n.jini-chat-pane {\n --jini-chat-bg: #faf9f7;\n --jini-chat-panel: #fdfcfa;\n --jini-chat-text: #1a1916;\n --jini-chat-text-strong: #0d0c0a;\n --jini-chat-muted: #74716b;\n --jini-chat-faint: #b3b0a8;\n --jini-chat-border: #e1e5eb;\n --jini-chat-border-strong: #c9d0da;\n --jini-chat-border-soft: #edf0f4;\n --jini-chat-subtle: #f4f5f7;\n --jini-chat-accent: #c96442;\n --jini-chat-accent-soft: #fbeee5;\n --bg-panel: var(--jini-chat-panel);\n --bg-subtle: var(--jini-chat-subtle);\n --border: var(--jini-chat-border);\n --border-strong: var(--jini-chat-border-strong);\n --text: var(--jini-chat-text);\n --text-strong: var(--jini-chat-text-strong);\n --text-muted: var(--jini-chat-muted);\n --danger: #e5484d;\n --radius: 8px;\n --radius-lg: 12px;\n position: relative;\n display: grid;\n grid-template-rows: auto minmax(0, 1fr) auto;\n min-width: 0;\n min-height: 0;\n height: 100%;\n overflow: hidden;\n color: var(--jini-chat-text);\n background: var(--jini-chat-bg);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Microsoft YaHei UI\", \"Noto Sans\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n font-size: 13.5px;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.jini-chat-pane button,\n.jini-runtime-popover button,\n.jini-runtime-popover select {\n font: inherit;\n}\n.jini-chat-pane__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 74px;\n padding: 18px 22px 14px;\n border-bottom: 1px solid var(--jini-chat-border-soft);\n}\n.jini-chat-pane__heading { min-width: 0; }\n.jini-chat-pane__eyebrow {\n display: block;\n margin-bottom: 4px;\n color: var(--jini-chat-muted);\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 10px;\n letter-spacing: .1em;\n text-transform: uppercase;\n}\n.jini-chat-pane__title {\n overflow: hidden;\n margin: 0;\n font-size: 21px;\n font-weight: 650;\n letter-spacing: -.025em;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane__new-thread {\n padding: 8px 12px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 8px;\n cursor: pointer;\n}\n.jini-chat-pane__body {\n position: relative;\n min-height: 0;\n overflow: hidden;\n}\n.jini-chat-pane .jini-message-list {\n height: 100%;\n overflow-y: auto;\n /*\n * .jini-chat-pane__controls is an absolutely-positioned overlay (not a flex/grid sibling that\n * pushes this list up), so its real height has to be reserved here instead. Measured against a\n * live render: the composer + footer + working-directory row alone is already 179.75px, above\n * the 170px this used to reserve -- the last message's tail rendered clipped under the overlay as\n * a direct result. 240px adds real margin above that measurement rather than matching it exactly,\n * because the composer also grows conditionally (a suggestions row, an attachment tray) that\n * this measurement did not have present.\n */\n padding: 20px 22px 240px;\n scrollbar-width: thin;\n}\n.jini-chat-pane .jini-message {\n margin-bottom: 20px;\n color: var(--jini-chat-text);\n font-size: 14px;\n line-height: 1.62;\n}\n/*\n * Bubble on the content, not the row: MessageRow.tsx renders attachments as siblings of\n * .jini-message-content inside .jini-message-user, each with their own chip styling -- bubbling\n * the whole row would nest one background box inside another. This replaces a dead rule this file\n * shipped with (.jini-message-row[data-role=\"user\"] / .jini-message-row.user): MessageRow.tsx\n * has never rendered a jini-message-row class or a data-role attribute, and a user message's\n * root class is jini-message-user, not bare \"user\" -- the selector never matched anything real.\n */\n.jini-chat-pane .jini-message-user .jini-message-content {\n margin-left: auto;\n padding: 10px 13px;\n width: fit-content;\n max-width: 88%;\n background: var(--jini-chat-subtle);\n border-radius: 12px 12px 3px 12px;\n}\n.jini-chat-pane .jini-message-user .jini-message-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n justify-content: flex-end;\n margin-bottom: 4px;\n}\n.jini-chat-pane .jini-message-user .jini-message-attachment-chip {\n font-size: 11px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-subtle);\n border: 1px solid var(--jini-chat-border);\n border-radius: 999px;\n padding: 3px 10px;\n}\n.jini-chat-pane .jini-message-agent {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: .02em;\n text-transform: uppercase;\n color: var(--jini-chat-faint);\n margin-bottom: 4px;\n}\n.jini-chat-pane .jini-message-error { color: var(--danger); font-size: 13px; }\n.jini-chat-pane .jini-message-pending { color: var(--jini-chat-muted); font-size: 13px; font-style: italic; }\n.jini-chat-pane__controls {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 4;\n padding: 0 16px 14px;\n background: linear-gradient(to bottom, transparent, var(--jini-chat-bg) 22px);\n}\n.jini-chat-pane__suggestions {\n display: flex;\n gap: 8px;\n margin: 0 2px 8px;\n overflow-x: auto;\n}\n.jini-chat-pane__suggestion {\n flex: 0 0 auto;\n max-width: 290px;\n overflow: hidden;\n padding: 7px 11px;\n color: var(--jini-chat-muted);\n background: color-mix(in srgb, var(--jini-chat-panel) 92%, transparent);\n border: 1px solid var(--jini-chat-border);\n border-radius: 999px;\n font-size: 11px;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n.jini-chat-pane__error {\n margin: 0 2px 8px;\n padding: 8px 10px;\n color: #8c2f20;\n background: #fff1ed;\n border: 1px solid #f2c8bb;\n border-radius: 8px;\n font-size: 12px;\n}\n.jini-chat-pane__status {\n margin: 0 2px 8px;\n padding: 8px 10px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-subtle);\n border: 1px solid var(--jini-chat-border);\n border-radius: 8px;\n font-size: 12px;\n}\n.jini-chat-pane__drop-target {\n position: relative;\n margin: -8px -8px -8px;\n padding: 6px;\n border: 2px dashed transparent;\n border-radius: 16px;\n transition:\n background-color .14s ease,\n border-color .14s ease,\n box-shadow .14s ease;\n}\n.jini-chat-pane__drop-target.is-dragging-files {\n background: color-mix(in srgb, var(--jini-chat-accent-soft) 72%, transparent);\n border-color: var(--jini-chat-accent);\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--jini-chat-accent) 15%, transparent);\n}\n.jini-chat-pane__drop-target.is-dragging-files .jini-composer {\n background: color-mix(in srgb, var(--jini-chat-accent-soft) 58%, var(--jini-chat-panel));\n border-color: color-mix(in srgb, var(--jini-chat-accent) 68%, var(--jini-chat-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--jini-chat-accent) 10%, transparent);\n}\n.jini-chat-pane__drop-announcement {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n clip-path: inset(50%);\n}\n.jini-chat-pane .jini-composer {\n position: relative;\n overflow: visible;\n padding: 0;\n background: var(--jini-chat-subtle);\n border: 1px solid var(--jini-chat-border);\n border-radius: 12px;\n box-shadow: none;\n transition: border-color .16s ease, box-shadow .16s ease;\n}\n.jini-chat-pane .jini-composer:focus-within {\n background: var(--jini-chat-panel);\n border-color: color-mix(in srgb, var(--jini-chat-accent) 22%, var(--jini-chat-border-strong));\n box-shadow: 0 1px 2px rgba(26, 25, 22, .06), 0 0 0 1px rgba(201, 100, 66, .06);\n}\n.jini-chat-pane .jini-composer-leading {\n padding: 8px 12px 0;\n}\n.jini-chat-pane .jini-attachment-tray {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n max-height: 88px;\n overflow-y: auto;\n padding: 8px 10px 0;\n scrollbar-width: thin;\n}\n.jini-chat-pane .jini-attachment-tray:empty { display: none; }\n.jini-chat-pane .jini-attachment-chip {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n min-width: 0;\n max-width: min(100%, 290px);\n height: 36px;\n padding: 3px 4px 3px 5px;\n color: var(--jini-chat-text);\n background: color-mix(in srgb, var(--jini-chat-panel) 88%, var(--jini-chat-subtle));\n border: 1px solid var(--jini-chat-border);\n border-radius: 9px;\n box-shadow: 0 1px 1px rgba(13, 12, 10, .025);\n}\n.jini-chat-pane .jini-attachment-chip-body {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 7px;\n}\n.jini-chat-pane .jini-attachment-chip-icon {\n display: grid;\n flex: 0 0 auto;\n place-items: center;\n width: 26px;\n height: 26px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-subtle);\n border-radius: 7px;\n}\n.jini-chat-pane .jini-attachment-chip-icon.is-image {\n color: var(--jini-chat-accent);\n background: var(--jini-chat-accent-soft);\n}\n.jini-chat-pane .jini-attachment-chip-copy {\n display: flex;\n min-width: 0;\n flex-direction: column;\n line-height: 1.15;\n}\n.jini-chat-pane .jini-attachment-chip-name {\n overflow: hidden;\n font-size: 11.5px;\n font-weight: 550;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-attachment-chip-size {\n color: var(--jini-chat-muted);\n font-size: 9.5px;\n}\n.jini-chat-pane .jini-attachment-remove {\n display: grid;\n flex: 0 0 auto;\n place-items: center;\n width: 25px;\n height: 25px;\n margin-left: 4px;\n padding: 0;\n color: var(--jini-chat-muted);\n background: transparent;\n border: 0;\n border-radius: 7px;\n cursor: pointer;\n}\n.jini-chat-pane .jini-attachment-remove:hover,\n.jini-chat-pane .jini-attachment-remove:focus-visible {\n color: var(--jini-chat-text-strong);\n background: var(--jini-chat-subtle);\n outline: none;\n}\n.jini-chat-pane .jini-composer-input {\n display: block;\n box-sizing: border-box;\n width: 100%;\n min-height: 92px;\n resize: none;\n padding: 12px 14px 8px;\n color: var(--jini-chat-text);\n background: transparent;\n border: 0;\n outline: 0;\n font-size: 13.5px;\n line-height: 1.6;\n}\n.jini-chat-pane .jini-composer-input::placeholder { color: var(--jini-chat-faint); }\n.jini-chat-pane .jini-composer-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 42px;\n gap: 6px;\n padding: 6px 8px 8px;\n border-top: 1px solid var(--jini-chat-border-soft);\n}\n.jini-chat-pane .jini-composer-attachment-picker { display: inline-flex; }\n.jini-chat-pane .jini-composer-file-input {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n clip-path: inset(50%);\n}\n.jini-chat-pane .jini-composer-attach {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n color: var(--jini-chat-muted);\n background: transparent;\n border: 1px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n}\n.jini-chat-pane .jini-composer-attach:hover:not(:disabled) {\n color: var(--jini-chat-text);\n background: var(--jini-chat-panel);\n border-color: var(--jini-chat-border);\n}\n.jini-chat-pane .jini-composer-attach:disabled { opacity: .45; cursor: default; }\n.jini-composer-spinner,\n.jini-runtime-spinner { animation: jini-chat-spin .8s linear infinite; }\n@keyframes jini-chat-spin { to { transform: rotate(360deg); } }\n.jini-chat-pane .jini-composer-footer-accessories {\n display: flex;\n margin-left: auto;\n min-width: 0;\n}\n.jini-chat-pane .jini-composer-send {\n display: grid;\n place-items: center;\n width: 32px;\n height: 32px;\n padding: 0;\n color: white;\n background: var(--jini-chat-text-strong);\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n.jini-chat-pane .jini-composer-send:disabled {\n color: #aaa59e;\n background: #ece8e2;\n cursor: default;\n}\n.jini-chat-pane__cancel {\n position: absolute;\n right: 48px;\n bottom: 22px;\n padding: 5px 9px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 7px;\n cursor: pointer;\n}\n.jini-chat-pane__workdir {\n display: flex;\n align-items: center;\n gap: 7px;\n min-width: 0;\n padding: 5px 4px 0;\n color: var(--jini-chat-muted);\n font-size: 13px;\n}\n.jini-chat-pane__workdir code {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-working-dir-picker {\n position: relative;\n display: inline-flex;\n align-items: flex-start;\n}\n.jini-chat-pane .jini-working-dir-trigger-row {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n}\n.jini-chat-pane .jini-working-dir-trigger {\n appearance: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 6px;\n color: var(--jini-chat-muted);\n background: transparent;\n border: 0;\n border-radius: 8px;\n font: inherit;\n font-size: 13px;\n cursor: pointer;\n}\n.jini-chat-pane .jini-working-dir-trigger:hover,\n.jini-chat-pane .jini-working-dir-trigger:focus-visible {\n color: var(--jini-chat-text-strong);\n background: var(--jini-chat-subtle);\n outline: none;\n}\n.jini-chat-pane .jini-working-dir-trigger.invalid { color: var(--danger); }\n.jini-chat-pane .jini-working-dir-trigger-icon { flex: 0 0 auto; opacity: .75; }\n.jini-chat-pane .jini-working-dir-trigger.invalid .jini-working-dir-trigger-icon {\n color: var(--danger);\n opacity: 1;\n}\n.jini-chat-pane .jini-working-dir-trigger-label {\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-working-dir-trigger-chevron { flex: 0 0 auto; opacity: .55; }\n.jini-chat-pane .jini-working-dir-panel,\n.jini-chat-pane .jini-working-dir-flyout {\n position: absolute;\n z-index: 90;\n display: flex;\n flex-direction: column;\n min-width: 210px;\n padding: 5px;\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border-strong);\n border-radius: 12px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 10px 28px -10px rgba(0, 0, 0, .18);\n}\n.jini-chat-pane .jini-working-dir-panel {\n top: calc(100% + 6px);\n left: 0;\n}\n.jini-chat-pane .jini-working-dir-panel.up {\n top: auto;\n bottom: calc(100% + 6px);\n}\n.jini-chat-pane .jini-working-dir-item {\n appearance: none;\n display: flex;\n align-items: center;\n gap: 9px;\n width: 100%;\n min-height: 32px;\n padding: 0 9px;\n color: var(--jini-chat-text-strong);\n background: transparent;\n border: 0;\n border-radius: 8px;\n font: inherit;\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n}\n.jini-chat-pane .jini-working-dir-item:hover,\n.jini-chat-pane .jini-working-dir-item:focus-visible,\n.jini-chat-pane .jini-working-dir-recent-item:hover,\n.jini-chat-pane .jini-working-dir-recent-item:focus-visible {\n background: var(--jini-chat-subtle);\n outline: none;\n}\n.jini-chat-pane .jini-working-dir-item-icon { flex: 0 0 auto; opacity: .8; }\n.jini-chat-pane .jini-working-dir-item > span {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-working-dir-item-chevron { margin-left: auto; opacity: .55; }\n.jini-chat-pane .jini-working-dir-submenu-row { position: relative; }\n.jini-chat-pane .jini-working-dir-flyout {\n top: -5px;\n left: 100%;\n z-index: 91;\n min-width: 220px;\n max-width: 320px;\n margin-left: 4px;\n}\n.jini-chat-pane .jini-working-dir-flyout.up { top: auto; bottom: -5px; }\n.jini-chat-pane .jini-working-dir-flyout::before {\n position: absolute;\n top: 0;\n left: -8px;\n width: 8px;\n height: 100%;\n content: \"\";\n}\n.jini-chat-pane .jini-working-dir-recent-item {\n appearance: none;\n display: grid;\n grid-template-rows: auto auto;\n grid-template-columns: auto 1fr;\n align-items: center;\n width: 100%;\n min-height: 36px;\n padding: 4px 9px;\n color: var(--jini-chat-text-strong);\n background: transparent;\n border: 0;\n border-radius: 8px;\n font: inherit;\n text-align: left;\n cursor: pointer;\n column-gap: 9px;\n}\n.jini-chat-pane .jini-working-dir-recent-item .jini-working-dir-item-icon {\n grid-row: 1 / span 2;\n}\n.jini-chat-pane .jini-working-dir-recent-name,\n.jini-chat-pane .jini-working-dir-recent-path {\n grid-column: 2;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-working-dir-recent-name { font-size: 13px; }\n.jini-chat-pane .jini-working-dir-recent-path {\n color: var(--jini-chat-muted);\n font-size: 11px;\n opacity: .7;\n}\n.jini-chat-pane .jini-working-dir-empty {\n padding: 8px 10px;\n color: var(--jini-chat-muted);\n font-size: 12px;\n white-space: nowrap;\n opacity: .7;\n}\n.jini-runtime-picker { position: relative; }\n.jini-runtime-trigger {\n display: inline-grid;\n grid-template-columns: 24px 14px;\n align-items: center;\n gap: 7px;\n height: 32px;\n min-width: 0;\n padding: 3px 7px 3px 5px;\n color: var(--jini-chat-text);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n.jini-runtime-trigger:hover { background: var(--jini-chat-subtle); }\n.jini-runtime-trigger__copy { display: none; }\n.jini-runtime-trigger__copy strong {\n overflow: hidden;\n max-width: 122px;\n font-size: 11px;\n font-weight: 650;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-runtime-trigger__copy small {\n overflow: hidden;\n max-width: 122px;\n color: var(--jini-chat-muted);\n font-size: 9px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-runtime-trigger__chevron { color: var(--jini-chat-muted); font-size: 12px; }\n.jini-runtime-agent-icon.agent-icon { flex: 0 0 auto; object-fit: contain; }\n.jini-runtime-agent-icon.agent-icon-mono {\n display: inline-block;\n background-color: currentColor;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n -webkit-mask-size: contain;\n mask-size: contain;\n}\n.jini-runtime-agent-icon.agent-icon-fallback {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: #74716b;\n background: #f4f5f7;\n border: 1px solid #e1e5eb;\n border-radius: 6px;\n font-weight: 700;\n}\n.jini-runtime-popover {\n --jini-chat-panel: #fdfcfa;\n --jini-chat-text: #1a1916;\n --jini-chat-text-strong: #0d0c0a;\n --jini-chat-muted: #74716b;\n --jini-chat-faint: #b3b0a8;\n --jini-chat-border: #e1e5eb;\n --jini-chat-border-soft: #edf0f4;\n --jini-chat-subtle: #f4f5f7;\n box-sizing: border-box;\n padding: 8px;\n color: var(--jini-chat-text);\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 12px;\n box-shadow: 0 18px 46px rgba(13, 12, 10, .15), 0 2px 8px rgba(13, 12, 10, .06);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Microsoft YaHei UI\", \"Noto Sans\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n font-size: 13.5px;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n}\n.jini-runtime-popover__head {\n display: flex;\n flex-direction: column;\n gap: 3px;\n padding: 10px 12px 12px;\n border-bottom: 1px solid var(--jini-chat-border-soft);\n}\n.jini-runtime-popover__head strong { color: var(--jini-chat-text-strong); font-size: 14px; font-weight: 650; }\n.jini-runtime-popover__head span { color: var(--jini-chat-muted); font-size: 12px; }\n.jini-runtime-mode,\n.jini-runtime-agent,\n.jini-runtime-rescan {\n display: flex;\n align-items: center;\n gap: 11px;\n box-sizing: border-box;\n width: 100%;\n min-height: 40px;\n padding: 8px 11px;\n color: var(--jini-chat-text);\n background: transparent;\n border: 0;\n border-radius: 8px;\n text-align: left;\n cursor: pointer;\n}\n.jini-runtime-mode:hover,\n.jini-runtime-agent:hover:not(:disabled),\n.jini-runtime-rescan:hover:not(:disabled) { background: var(--jini-chat-subtle); }\n.jini-runtime-mode.is-active { font-weight: 650; }\n.jini-runtime-mode:disabled,\n.jini-runtime-agent:disabled,\n.jini-runtime-rescan:disabled { color: var(--jini-chat-faint); cursor: default; }\n.jini-runtime-mode__meta,\n.jini-runtime-agent__status {\n margin-left: auto;\n color: var(--jini-chat-muted);\n font-size: 12px;\n white-space: nowrap;\n}\n.jini-runtime-check { flex: 0 0 auto; color: var(--jini-chat-text); }\n.jini-runtime-section-label {\n padding: 12px 11px 5px;\n color: var(--jini-chat-faint);\n font-size: 11px;\n font-weight: 650;\n letter-spacing: .08em;\n text-transform: uppercase;\n}\n.jini-runtime-agent.is-active { background: transparent; }\n.jini-runtime-agent__copy {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n}\n.jini-runtime-agent__copy strong { font-size: 13.5px; font-weight: 500; }\n.jini-runtime-agent__copy small {\n overflow: hidden;\n color: #8b857e;\n font-size: 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-runtime-empty { padding: 10px 11px; color: var(--jini-chat-muted); font-size: 12px; }\n.jini-runtime-models {\n display: flex;\n flex-direction: column;\n gap: 9px;\n margin-top: 5px;\n padding: 10px 11px 8px;\n border-top: 1px dashed var(--jini-chat-border);\n}\n.jini-runtime-select {\n display: flex;\n flex-direction: column;\n gap: 5px;\n color: var(--jini-chat-muted);\n font-size: 13px;\n}\n.jini-runtime-select select {\n box-sizing: border-box;\n width: 100%;\n min-height: 40px;\n padding: 7px 10px;\n color: var(--jini-chat-text);\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 8px;\n}\n/*\n * The BYOK model, rendered as a value rather than a control \u2014 see RuntimeByokDetails for why it\n * is not a disabled select. It occupies the same box the sibling selects do so the row still\n * reads as part of the same list, but carries no border: a bordered box with no affordance is\n * exactly the \"looks editable, isn't\" shape the plain text exists to avoid.\n */\n/*\n * The BYOK model list, which CustomSelect portals to document.body. runtimePopoverPosition puts\n * the runtime popover at z-index 1000; the shared .jini-select-menu default is 60, which is right\n * everywhere else and puts this menu behind the very popover that opened it. One above the\n * popover, not far above: it must clear its own surface and nothing else.\n */\n.jini-select-menu.jini-runtime-model-menu {\n z-index: 1001;\n}\n.jini-runtime-byok-model strong {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n min-height: 40px;\n padding: 7px 10px;\n color: var(--jini-chat-text);\n font-weight: 600;\n word-break: break-all;\n}\n/*\n * Tool-call cards (ToolCard.tsx) and the per-turn usage summary (MessageRow.tsx) ship no CSS of\n * their own \u2014 see this file's own header note on why the package supplies a default theme at all.\n * Collapsed by default (.op-card-head is the only always-visible part), so a run with a dozen tool\n * calls reads as a dozen one-line rows, not a page of raw JSON.\n */\n.jini-chat-pane .jini-message-tools {\n display: flex;\n flex-direction: column;\n gap: 6px;\n width: 100%;\n}\n.jini-chat-pane .op-card {\n border: 1px solid var(--jini-chat-border);\n border-radius: var(--radius);\n background: var(--jini-chat-subtle);\n overflow: hidden;\n font-size: 13px;\n}\n.jini-chat-pane .op-card-head {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 10px;\n background: none;\n border: 0;\n font: inherit;\n text-align: left;\n cursor: pointer;\n color: inherit;\n}\n.jini-chat-pane .op-status { display: inline-flex; flex-shrink: 0; }\n.jini-chat-pane .op-status-ok { color: #4e875f; }\n.jini-chat-pane .op-status-error { color: var(--danger); }\n.jini-chat-pane .op-status-running { color: var(--jini-chat-accent); }\n.jini-chat-pane .op-title { font-weight: 600; flex-shrink: 0; }\n.jini-chat-pane .shimmer-text { opacity: .6; }\n.jini-chat-pane .op-meta {\n color: var(--jini-chat-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n min-width: 0;\n}\n.jini-chat-pane .op-expand-chev { flex-shrink: 0; color: var(--jini-chat-faint); }\n/* Collapsed by default: 0 max-height clips the inner content, no display:none \u2014 keeps the height\n transition instead of an instant jump cut. */\n.jini-chat-pane .accordion-collapsible { max-height: 0; overflow: hidden; transition: max-height .15s ease; }\n.jini-chat-pane .accordion-collapsible.open { max-height: 480px; overflow-y: auto; }\n.jini-chat-pane .accordion-collapsible-inner { padding: 0 10px 10px; }\n.jini-chat-pane .op-card-detail { display: flex; flex-direction: column; gap: 6px; }\n.jini-chat-pane .op-path,\n.jini-chat-pane .op-command,\n.jini-chat-pane .op-output {\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 12px;\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 6px;\n padding: 6px 8px;\n margin: 0;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.jini-chat-pane .op-open {\n border: 1px solid var(--jini-chat-border-strong);\n border-radius: 6px;\n background: var(--jini-chat-panel);\n padding: 2px 8px;\n font-size: 11px;\n cursor: pointer;\n}\n/* The \"Done \u00B7 6m 29s \u00B7 2612 out \u00B7 $0.4028\" line \u2014 real numbers from the run's own kind:'usage' event. */\n.jini-chat-pane .jini-message-usage {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n color: var(--jini-chat-muted);\n margin-top: 2px;\n}\n.jini-chat-pane .jini-message-usage-dot { font-size: 8px; color: #4e875f; }\n@media (max-width: 560px) {\n .jini-chat-pane__header { padding-inline: 16px; }\n .jini-chat-pane .jini-message-list { padding-inline: 16px; }\n .jini-chat-pane__controls { padding-inline: 10px; }\n}\n";
|
|
2
|
-
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../../src/react/features/chat-pane/react/styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,i9yBA61B5B,CAAC"}
|