@dxos/react-ui-chat 0.8.4-main.1da679c
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/LICENSE +8 -0
- package/README.md +1 -0
- package/dist/lib/browser/index.mjs +351 -0
- package/dist/lib/browser/index.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -0
- package/dist/lib/node-esm/index.mjs +353 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/types/src/components/ChatDialog/ChatDialog.d.ts +34 -0
- package/dist/types/src/components/ChatDialog/ChatDialog.d.ts.map +1 -0
- package/dist/types/src/components/ChatDialog/ChatDialog.stories.d.ts +39 -0
- package/dist/types/src/components/ChatDialog/ChatDialog.stories.d.ts.map +1 -0
- package/dist/types/src/components/ChatDialog/index.d.ts +2 -0
- package/dist/types/src/components/ChatDialog/index.d.ts.map +1 -0
- package/dist/types/src/components/ChatEditor/ChatEditor.d.ts +21 -0
- package/dist/types/src/components/ChatEditor/ChatEditor.d.ts.map +1 -0
- package/dist/types/src/components/ChatEditor/ChatEditor.stories.d.ts +26 -0
- package/dist/types/src/components/ChatEditor/ChatEditor.stories.d.ts.map +1 -0
- package/dist/types/src/components/ChatEditor/index.d.ts +3 -0
- package/dist/types/src/components/ChatEditor/index.d.ts.map +1 -0
- package/dist/types/src/components/ChatEditor/references.d.ts +30 -0
- package/dist/types/src/components/ChatEditor/references.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +3 -0
- package/dist/types/src/components/index.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +7 -0
- package/dist/types/src/translations.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +75 -0
- package/src/components/ChatDialog/ChatDialog.stories.tsx +66 -0
- package/src/components/ChatDialog/ChatDialog.tsx +193 -0
- package/src/components/ChatDialog/index.ts +5 -0
- package/src/components/ChatEditor/ChatEditor.stories.tsx +97 -0
- package/src/components/ChatEditor/ChatEditor.tsx +89 -0
- package/src/components/ChatEditor/index.ts +7 -0
- package/src/components/ChatEditor/references.ts +175 -0
- package/src/components/index.ts +6 -0
- package/src/index.ts +6 -0
- package/src/translations.ts +15 -0
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/components/ChatDialog/ChatDialog.tsx
|
|
4
|
+
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
5
|
+
import { createContext } from "@radix-ui/react-context";
|
|
6
|
+
import React, { useEffect, useState } from "react";
|
|
7
|
+
import { Dialog, Icon, IconButton, useControlledState } from "@dxos/react-ui";
|
|
8
|
+
import { ResizeHandle, resizeAttributes, sizeStyle } from "@dxos/react-ui-dnd";
|
|
9
|
+
import { mx } from "@dxos/react-ui-theme";
|
|
10
|
+
var preventDefault = (event) => event.preventDefault();
|
|
11
|
+
var Endcap = ({ children }) => {
|
|
12
|
+
var _effect = _useSignals();
|
|
13
|
+
try {
|
|
14
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
15
|
+
className: "grid w-[var(--rail-action)] h-[var(--rail-action)] items-center justify-center"
|
|
16
|
+
}, children);
|
|
17
|
+
} finally {
|
|
18
|
+
_effect.f();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var [ChatDialogContextProvider, useChatDialogContext] = createContext("ChatDialog");
|
|
22
|
+
var ChatDialogRoot = ({ children, open: _open = false, expanded: expandedParam = false, onOpenChange, onExpandedChange, onEscape }) => {
|
|
23
|
+
var _effect = _useSignals();
|
|
24
|
+
try {
|
|
25
|
+
const [size, setSize] = useState("min-content");
|
|
26
|
+
const [open, setOpen] = useControlledState(_open, onOpenChange);
|
|
27
|
+
const [expanded, setExpanded] = useControlledState(expandedParam, onExpandedChange);
|
|
28
|
+
return /* @__PURE__ */ React.createElement(ChatDialogContextProvider, {
|
|
29
|
+
open,
|
|
30
|
+
setOpen,
|
|
31
|
+
expanded,
|
|
32
|
+
setExpanded,
|
|
33
|
+
size,
|
|
34
|
+
setSize
|
|
35
|
+
}, /* @__PURE__ */ React.createElement(Dialog.Root, {
|
|
36
|
+
modal: false,
|
|
37
|
+
open,
|
|
38
|
+
onOpenChange: setOpen
|
|
39
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
40
|
+
role: "none",
|
|
41
|
+
className: "dx-dialog__overlay bg-transparent pointer-events-none",
|
|
42
|
+
"data-block-align": "end"
|
|
43
|
+
}, /* @__PURE__ */ React.createElement(Dialog.Content, {
|
|
44
|
+
inOverlayLayout: true,
|
|
45
|
+
classNames: [
|
|
46
|
+
"grid grid-rows-[var(--rail-action)_1fr_min-content] p-0 overflow-hidden",
|
|
47
|
+
"box-content md:is-[35rem] md:max-is-none pointer-events-auto"
|
|
48
|
+
],
|
|
49
|
+
onEscapeKeyDown: onEscape,
|
|
50
|
+
onInteractOutside: preventDefault
|
|
51
|
+
}, children))));
|
|
52
|
+
} finally {
|
|
53
|
+
_effect.f();
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
ChatDialogRoot.displayName = "ChatDialog.Root";
|
|
57
|
+
var ChatDialogHeader = ({ classNames, title }) => {
|
|
58
|
+
var _effect = _useSignals();
|
|
59
|
+
try {
|
|
60
|
+
const { expanded, setExpanded } = useChatDialogContext(ChatDialogHeader.displayName);
|
|
61
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
62
|
+
className: mx("grid grid-cols-[var(--rail-action)_1fr_min-content] items-center overflow-hidden", classNames)
|
|
63
|
+
}, /* @__PURE__ */ React.createElement(Endcap, null, /* @__PURE__ */ React.createElement(Dialog.Close, null, /* @__PURE__ */ React.createElement(Icon, {
|
|
64
|
+
icon: "ph--x--regular"
|
|
65
|
+
}))), /* @__PURE__ */ React.createElement(Dialog.Title, {
|
|
66
|
+
classNames: "flex w-full justify-center text-sm text-subdued select-none cursor-pointer",
|
|
67
|
+
onClick: () => setExpanded((expanded2) => !expanded2)
|
|
68
|
+
}, title), /* @__PURE__ */ React.createElement(Endcap, null, /* @__PURE__ */ React.createElement(IconButton, {
|
|
69
|
+
variant: "ghost",
|
|
70
|
+
icon: "ph--caret-up--regular",
|
|
71
|
+
iconOnly: true,
|
|
72
|
+
classNames: mx("!p-1 [&>svg]:transition [&>svg]:duration-200", expanded && "[&>svg]:rotate-180"),
|
|
73
|
+
label: expanded ? "Close" : "Open",
|
|
74
|
+
onClick: () => setExpanded((expanded2) => !expanded2)
|
|
75
|
+
})));
|
|
76
|
+
} finally {
|
|
77
|
+
_effect.f();
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
ChatDialogHeader.displayName = "ChatDialog.Header";
|
|
81
|
+
var ChatDialogContent = ({ children, classNames }) => {
|
|
82
|
+
var _effect = _useSignals();
|
|
83
|
+
try {
|
|
84
|
+
const { expanded, size, setSize } = useChatDialogContext(ChatDialogContent.displayName);
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
setSize(expanded ? "min-content" : 0);
|
|
87
|
+
}, [
|
|
88
|
+
expanded
|
|
89
|
+
]);
|
|
90
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
91
|
+
className: mx("flex flex-col overflow-y-auto border-t border-b border-subduedSeparator", 'transition-[block-size] ease-in-out duration-0 [&:not([data-dx-resizing="true"])]:duration-200', classNames),
|
|
92
|
+
style: {
|
|
93
|
+
...sizeStyle(size, "vertical", true),
|
|
94
|
+
maxBlockSize: "calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 14rem)"
|
|
95
|
+
},
|
|
96
|
+
...resizeAttributes
|
|
97
|
+
}, /* @__PURE__ */ React.createElement(ResizeHandle, {
|
|
98
|
+
side: "block-start",
|
|
99
|
+
iconPosition: "center",
|
|
100
|
+
defaultSize: "min-content",
|
|
101
|
+
fallbackSize: 0,
|
|
102
|
+
minSize: 0,
|
|
103
|
+
onSizeChange: setSize
|
|
104
|
+
}), children);
|
|
105
|
+
} finally {
|
|
106
|
+
_effect.f();
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
ChatDialogContent.displayName = "ChatDialog.Content";
|
|
110
|
+
var ChatDialogFooter = ({ children, classNames }) => {
|
|
111
|
+
var _effect = _useSignals();
|
|
112
|
+
try {
|
|
113
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
114
|
+
className: mx(classNames)
|
|
115
|
+
}, children);
|
|
116
|
+
} finally {
|
|
117
|
+
_effect.f();
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
ChatDialogFooter.displayName = "ChatDialog.Footer";
|
|
121
|
+
var ChatDialog = {
|
|
122
|
+
Root: ChatDialogRoot,
|
|
123
|
+
Header: ChatDialogHeader,
|
|
124
|
+
Content: ChatDialogContent,
|
|
125
|
+
Footer: ChatDialogFooter
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// src/components/ChatEditor/references.ts
|
|
129
|
+
import { autocompletion, completionKeymap } from "@codemirror/autocomplete";
|
|
130
|
+
import { RangeSet } from "@codemirror/state";
|
|
131
|
+
import { Decoration, EditorView, ViewPlugin, WidgetType, keymap } from "@codemirror/view";
|
|
132
|
+
import { Mutex } from "@dxos/async";
|
|
133
|
+
import { invariant } from "@dxos/invariant";
|
|
134
|
+
function _define_property(obj, key, value) {
|
|
135
|
+
if (key in obj) {
|
|
136
|
+
Object.defineProperty(obj, key, {
|
|
137
|
+
value,
|
|
138
|
+
enumerable: true,
|
|
139
|
+
configurable: true,
|
|
140
|
+
writable: true
|
|
141
|
+
});
|
|
142
|
+
} else {
|
|
143
|
+
obj[key] = value;
|
|
144
|
+
}
|
|
145
|
+
return obj;
|
|
146
|
+
}
|
|
147
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-ui-chat/src/components/ChatEditor/references.ts";
|
|
148
|
+
var references = ({ provider, triggerCharacter = "@", debug = false }) => {
|
|
149
|
+
invariant(triggerCharacter.length === 1, void 0, {
|
|
150
|
+
F: __dxlog_file,
|
|
151
|
+
L: 50,
|
|
152
|
+
S: void 0,
|
|
153
|
+
A: [
|
|
154
|
+
"triggerCharacter.length === 1",
|
|
155
|
+
""
|
|
156
|
+
]
|
|
157
|
+
});
|
|
158
|
+
const decorationField = ViewPlugin.fromClass(class ReferenceView {
|
|
159
|
+
update(update) {
|
|
160
|
+
if (update.docChanged) {
|
|
161
|
+
queueMicrotask(async () => {
|
|
162
|
+
const guard = await this._mutex.acquire();
|
|
163
|
+
try {
|
|
164
|
+
this.decorations = await this._computeDecorations(update.view);
|
|
165
|
+
} finally {
|
|
166
|
+
guard.release();
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async _computeDecorations(view) {
|
|
172
|
+
const text = view.state.doc.toString();
|
|
173
|
+
const references2 = text.matchAll(new RegExp(`${triggerCharacter}[a-zA-Z0-9@:]+\\s`, "g"));
|
|
174
|
+
const decorations = [];
|
|
175
|
+
for (const match of references2) {
|
|
176
|
+
const reference = match[0];
|
|
177
|
+
const uri = reference.slice(1, -1);
|
|
178
|
+
const data = await provider.resolveReference({
|
|
179
|
+
uri
|
|
180
|
+
});
|
|
181
|
+
if (data) {
|
|
182
|
+
decorations.push(Decoration.replace({
|
|
183
|
+
widget: new ReferenceWidget(data)
|
|
184
|
+
}).range(match.index, match.index + reference.length));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return Decoration.set(decorations);
|
|
188
|
+
}
|
|
189
|
+
constructor(view) {
|
|
190
|
+
_define_property(this, "_mutex", new Mutex());
|
|
191
|
+
_define_property(this, "decorations", Decoration.set([]));
|
|
192
|
+
queueMicrotask(async () => {
|
|
193
|
+
const guard = await this._mutex.acquire();
|
|
194
|
+
try {
|
|
195
|
+
this.decorations = await this._computeDecorations(view);
|
|
196
|
+
} finally {
|
|
197
|
+
guard.release();
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}, {
|
|
202
|
+
decorations: (v) => v.decorations,
|
|
203
|
+
provide: (plugin) => [
|
|
204
|
+
EditorView.atomicRanges.of((view) => view.plugin(decorationField)?.decorations ?? RangeSet.empty)
|
|
205
|
+
]
|
|
206
|
+
});
|
|
207
|
+
return [
|
|
208
|
+
decorationField,
|
|
209
|
+
EditorView.theme({
|
|
210
|
+
".cm-reference-pill": {
|
|
211
|
+
borderRadius: "0.25rem",
|
|
212
|
+
borderWidth: "1px",
|
|
213
|
+
marginRight: "0.25rem",
|
|
214
|
+
marginLeft: "0.25rem"
|
|
215
|
+
}
|
|
216
|
+
}),
|
|
217
|
+
autocompletion({
|
|
218
|
+
tooltipClass: () => "shadow rounded",
|
|
219
|
+
activateOnTyping: true,
|
|
220
|
+
aboveCursor: true,
|
|
221
|
+
closeOnBlur: !debug,
|
|
222
|
+
override: [
|
|
223
|
+
async (context) => {
|
|
224
|
+
const match = context.matchBefore(new RegExp(`${triggerCharacter}[a-zA-Z0-9]+`));
|
|
225
|
+
if (!match || match?.to === match?.from) {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
const query = match.text.slice(1);
|
|
229
|
+
const references2 = await provider.getReferences({
|
|
230
|
+
query
|
|
231
|
+
});
|
|
232
|
+
return {
|
|
233
|
+
from: match.from,
|
|
234
|
+
filter: false,
|
|
235
|
+
options: references2.map((reference) => ({
|
|
236
|
+
label: reference.label,
|
|
237
|
+
apply: `${triggerCharacter}${reference.uri} `
|
|
238
|
+
}))
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
]
|
|
242
|
+
}),
|
|
243
|
+
keymap.of(completionKeymap)
|
|
244
|
+
];
|
|
245
|
+
};
|
|
246
|
+
var ReferenceWidget = class extends WidgetType {
|
|
247
|
+
toDOM() {
|
|
248
|
+
const span = document.createElement("span");
|
|
249
|
+
span.textContent = `@ ${this.data.label}`;
|
|
250
|
+
span.className = "cm-reference-pill";
|
|
251
|
+
return span;
|
|
252
|
+
}
|
|
253
|
+
eq(other) {
|
|
254
|
+
return other.data.uri === this.data.uri;
|
|
255
|
+
}
|
|
256
|
+
ignoreEvent() {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
constructor(data) {
|
|
260
|
+
super(), _define_property(this, "data", void 0), this.data = data;
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
// src/components/ChatEditor/ChatEditor.tsx
|
|
265
|
+
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
266
|
+
import React2, { forwardRef, useImperativeHandle } from "react";
|
|
267
|
+
import { useThemeContext } from "@dxos/react-ui";
|
|
268
|
+
import { autocomplete, createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
|
|
269
|
+
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
270
|
+
import { isNonNullable } from "@dxos/util";
|
|
271
|
+
var ChatEditor = /* @__PURE__ */ forwardRef(({ classNames, extensions, references: references2, autoFocus, lineWrapping = false, placeholder, onSubmit, onSuggest, onCancel }, forwardRef2) => {
|
|
272
|
+
var _effect = _useSignals2();
|
|
273
|
+
try {
|
|
274
|
+
const { themeMode } = useThemeContext();
|
|
275
|
+
const { parentRef, view } = useTextEditor(() => ({
|
|
276
|
+
debug: true,
|
|
277
|
+
autoFocus,
|
|
278
|
+
extensions: [
|
|
279
|
+
createThemeExtensions({
|
|
280
|
+
themeMode
|
|
281
|
+
}),
|
|
282
|
+
autocomplete({
|
|
283
|
+
onSubmit,
|
|
284
|
+
onSuggest,
|
|
285
|
+
onCancel
|
|
286
|
+
}),
|
|
287
|
+
references2 ? references({
|
|
288
|
+
provider: references2.provider
|
|
289
|
+
}) : [],
|
|
290
|
+
createBasicExtensions({
|
|
291
|
+
bracketMatching: false,
|
|
292
|
+
lineWrapping,
|
|
293
|
+
placeholder
|
|
294
|
+
}),
|
|
295
|
+
extensions
|
|
296
|
+
].filter(isNonNullable)
|
|
297
|
+
}), [
|
|
298
|
+
themeMode,
|
|
299
|
+
extensions,
|
|
300
|
+
onSubmit,
|
|
301
|
+
onSuggest,
|
|
302
|
+
onCancel
|
|
303
|
+
]);
|
|
304
|
+
useImperativeHandle(forwardRef2, () => {
|
|
305
|
+
return {
|
|
306
|
+
focus: () => {
|
|
307
|
+
view?.focus();
|
|
308
|
+
},
|
|
309
|
+
getText: () => view?.state.doc.toString() ?? "",
|
|
310
|
+
setText: (text) => {
|
|
311
|
+
view?.dispatch({
|
|
312
|
+
changes: {
|
|
313
|
+
from: 0,
|
|
314
|
+
to: view.state.doc.length,
|
|
315
|
+
insert: text
|
|
316
|
+
},
|
|
317
|
+
selection: {
|
|
318
|
+
anchor: text.length,
|
|
319
|
+
head: text.length
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
}, [
|
|
325
|
+
view,
|
|
326
|
+
onSubmit
|
|
327
|
+
]);
|
|
328
|
+
return /* @__PURE__ */ React2.createElement("div", {
|
|
329
|
+
ref: parentRef,
|
|
330
|
+
className: mx2("is-full", classNames)
|
|
331
|
+
});
|
|
332
|
+
} finally {
|
|
333
|
+
_effect.f();
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
// src/translations.ts
|
|
338
|
+
var translationKey = "react-ui-chat";
|
|
339
|
+
var translations = [
|
|
340
|
+
{
|
|
341
|
+
"en-US": {
|
|
342
|
+
[translationKey]: {}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
];
|
|
346
|
+
export {
|
|
347
|
+
ChatDialog,
|
|
348
|
+
ChatEditor,
|
|
349
|
+
references,
|
|
350
|
+
translationKey,
|
|
351
|
+
translations
|
|
352
|
+
};
|
|
353
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/ChatDialog/ChatDialog.tsx", "../../../src/components/ChatEditor/references.ts", "../../../src/components/ChatEditor/ChatEditor.tsx", "../../../src/translations.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type Dispatch, type PropsWithChildren, type SetStateAction, useEffect, useState } from 'react';\n\nimport { Dialog, Icon, IconButton, type ThemedClassName, useControlledState } from '@dxos/react-ui';\nimport { ResizeHandle, type Size, resizeAttributes, sizeStyle } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst preventDefault = (event: Event) => event.preventDefault();\n\n// TODO(burdon): Factor out.\nconst Endcap = ({ children }: PropsWithChildren) => {\n return (\n <div className='grid w-[var(--rail-action)] h-[var(--rail-action)] items-center justify-center'>{children}</div>\n );\n};\n\n//\n// Context\n//\n\ntype ChatDialogContextValue = {\n open: boolean;\n setOpen: Dispatch<SetStateAction<boolean>>;\n expanded: boolean;\n setExpanded: Dispatch<SetStateAction<boolean>>;\n size: Size;\n setSize: Dispatch<SetStateAction<Size>>;\n};\n\nconst [ChatDialogContextProvider, useChatDialogContext] = createContext<ChatDialogContextValue>('ChatDialog');\n\n//\n// Root\n//\n\ntype ChatDialogRootProps = PropsWithChildren<{\n open?: boolean;\n expanded?: boolean;\n onOpenChange?: (open: boolean) => void;\n onExpandedChange?: (expanded: boolean) => void;\n onEscape?: () => void;\n}>;\n\nconst ChatDialogRoot = ({\n children,\n open: _open = false,\n expanded: expandedParam = false,\n onOpenChange,\n onExpandedChange,\n onEscape,\n}: ChatDialogRootProps) => {\n const [size, setSize] = useState<Size>('min-content');\n const [open, setOpen] = useControlledState<boolean>(_open, onOpenChange);\n const [expanded, setExpanded] = useControlledState<boolean>(expandedParam, onExpandedChange);\n\n // NOTE: We set the min size to 5rem (80px), and the header and prompt bar to 40px (i.e., the rail-size) each.\n // The dialog has no vertical padding and has box-content so that when closed it collapses to the size of the header and prompt bar.\n return (\n <ChatDialogContextProvider\n open={open}\n setOpen={setOpen}\n expanded={expanded}\n setExpanded={setExpanded}\n size={size}\n setSize={setSize}\n >\n <Dialog.Root modal={false} open={open} onOpenChange={setOpen}>\n <div role='none' className='dx-dialog__overlay bg-transparent pointer-events-none' data-block-align='end'>\n <Dialog.Content\n inOverlayLayout\n classNames={[\n 'grid grid-rows-[var(--rail-action)_1fr_min-content] p-0 overflow-hidden',\n 'box-content md:is-[35rem] md:max-is-none pointer-events-auto',\n ]}\n onEscapeKeyDown={onEscape}\n onInteractOutside={preventDefault}\n >\n {children}\n </Dialog.Content>\n </div>\n </Dialog.Root>\n </ChatDialogContextProvider>\n );\n};\n\nChatDialogRoot.displayName = 'ChatDialog.Root';\n\n//\n// Header\n//\n\ntype ChatDialogHeaderProps = ThemedClassName<{\n title?: string;\n}>;\n\nconst ChatDialogHeader = ({ classNames, title }: ChatDialogHeaderProps) => {\n const { expanded, setExpanded } = useChatDialogContext(ChatDialogHeader.displayName);\n\n return (\n <div className={mx('grid grid-cols-[var(--rail-action)_1fr_min-content] items-center overflow-hidden', classNames)}>\n <Endcap>\n <Dialog.Close>\n <Icon icon='ph--x--regular' />\n </Dialog.Close>\n </Endcap>\n <Dialog.Title\n classNames='flex w-full justify-center text-sm text-subdued select-none cursor-pointer'\n onClick={() => setExpanded((expanded) => !expanded)}\n >\n {title}\n </Dialog.Title>\n <Endcap>\n <IconButton\n variant='ghost'\n icon='ph--caret-up--regular'\n iconOnly\n classNames={mx('!p-1 [&>svg]:transition [&>svg]:duration-200', expanded && '[&>svg]:rotate-180')}\n label={expanded ? 'Close' : 'Open'}\n onClick={() => setExpanded((expanded) => !expanded)}\n />\n </Endcap>\n </div>\n );\n};\n\nChatDialogHeader.displayName = 'ChatDialog.Header';\n\n//\n// Content\n//\n\ntype ChatDialogContentProps = ThemedClassName<PropsWithChildren>;\n\nconst ChatDialogContent = ({ children, classNames }: ChatDialogContentProps) => {\n const { expanded, size, setSize } = useChatDialogContext(ChatDialogContent.displayName);\n useEffect(() => {\n setSize(expanded ? 'min-content' : 0);\n }, [expanded]);\n\n return (\n <div\n className={mx(\n 'flex flex-col overflow-y-auto border-t border-b border-subduedSeparator',\n 'transition-[block-size] ease-in-out duration-0 [&:not([data-dx-resizing=\"true\"])]:duration-200',\n classNames,\n )}\n style={{\n ...sizeStyle(size, 'vertical', true),\n maxBlockSize: 'calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 14rem)',\n }}\n {...resizeAttributes}\n >\n <ResizeHandle\n side='block-start'\n iconPosition='center'\n defaultSize='min-content'\n fallbackSize={0}\n minSize={0}\n onSizeChange={setSize}\n />\n {children}\n </div>\n );\n};\n\nChatDialogContent.displayName = 'ChatDialog.Content';\n\n//\n// Footer\n//\n\ntype ChatDialogFooterProps = ThemedClassName<PropsWithChildren>;\n\nconst ChatDialogFooter = ({ children, classNames }: ChatDialogFooterProps) => {\n return <div className={mx(classNames)}>{children}</div>;\n};\n\nChatDialogFooter.displayName = 'ChatDialog.Footer';\n\n//\n// ChatDialog\n//\n\nexport const ChatDialog = {\n Root: ChatDialogRoot,\n Header: ChatDialogHeader,\n Content: ChatDialogContent,\n Footer: ChatDialogFooter,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type CompletionResult, autocompletion, completionKeymap } from '@codemirror/autocomplete';\nimport { type Extension, RangeSet } from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n EditorView,\n ViewPlugin,\n type ViewUpdate,\n WidgetType,\n keymap,\n} from '@codemirror/view';\n\nimport { Mutex } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\n\n// TODO(dmaretskyi): Consider adding details renderer for when you hover over the reference.\nexport type ReferenceData = {\n uri: string;\n label: string;\n};\n\nexport interface ReferencesProvider {\n getReferences({ query }: { query: string }): Promise<ReferenceData[]>;\n resolveReference({ uri }: { uri: string }): Promise<ReferenceData | null>;\n}\n\nexport type ReferencesOptions = {\n provider: ReferencesProvider;\n\n /**\n * @default '@'\n */\n triggerCharacter?: string;\n\n /**\n * Prevent the autocomplete from closing when the user blurs the editor.\n * @default false\n */\n debug?: boolean;\n};\n\n/**\n * Lookup object references.\n */\nexport const references = ({ provider, triggerCharacter = '@', debug = false }: ReferencesOptions): Extension => {\n invariant(triggerCharacter.length === 1);\n\n const decorationField = ViewPlugin.fromClass(\n class ReferenceView {\n // TODO(burdon): Why?\n private _mutex = new Mutex();\n\n decorations: DecorationSet = Decoration.set([]);\n\n constructor(view: EditorView) {\n queueMicrotask(async () => {\n const guard = await this._mutex.acquire();\n try {\n this.decorations = await this._computeDecorations(view);\n } finally {\n guard.release();\n }\n });\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged) {\n queueMicrotask(async () => {\n const guard = await this._mutex.acquire();\n try {\n this.decorations = await this._computeDecorations(update.view);\n } finally {\n guard.release();\n }\n });\n }\n }\n\n private async _computeDecorations(view: EditorView): Promise<DecorationSet> {\n const text = view.state.doc.toString();\n const references = text.matchAll(new RegExp(`${triggerCharacter}[a-zA-Z0-9@:]+\\\\s`, 'g'));\n\n const decorations = [];\n for (const match of references) {\n const reference = match[0];\n const uri = reference.slice(1, -1);\n const data = await provider.resolveReference({ uri });\n if (data) {\n decorations.push(\n Decoration.replace({\n widget: new ReferenceWidget(data),\n }).range(match.index!, match.index! + reference.length),\n );\n }\n }\n\n return Decoration.set(decorations);\n }\n },\n {\n decorations: (v) => v.decorations,\n provide: (plugin) => [\n EditorView.atomicRanges.of(\n (view): DecorationSet => view.plugin(decorationField)?.decorations ?? RangeSet.empty,\n ),\n ],\n },\n );\n\n return [\n decorationField,\n\n EditorView.theme({\n '.cm-reference-pill': {\n borderRadius: '0.25rem',\n borderWidth: '1px',\n marginRight: '0.25rem',\n marginLeft: '0.25rem',\n },\n }),\n\n autocompletion({\n tooltipClass: () => 'shadow rounded',\n activateOnTyping: true,\n aboveCursor: true,\n closeOnBlur: !debug,\n override: [\n async (context): Promise<CompletionResult | null> => {\n const match = context.matchBefore(new RegExp(`${triggerCharacter}[a-zA-Z0-9]+`));\n if (!match || match?.to === match?.from) {\n return null;\n }\n\n const query = match.text.slice(1);\n const references = await provider.getReferences({ query });\n return {\n from: match.from,\n filter: false,\n options: references.map((reference) => ({\n label: reference.label,\n apply: `${triggerCharacter}${reference.uri} `,\n })),\n };\n },\n ],\n }),\n\n keymap.of(completionKeymap),\n ];\n};\n\nclass ReferenceWidget extends WidgetType {\n constructor(private data: ReferenceData) {\n super();\n }\n\n override toDOM(): HTMLSpanElement {\n const span = document.createElement('span');\n span.textContent = `@ ${this.data.label}`;\n span.className = 'cm-reference-pill';\n return span;\n }\n\n override eq(other: ReferenceWidget): boolean {\n return other.data.uri === this.data.uri;\n }\n\n override ignoreEvent(): boolean {\n return true;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension } from '@codemirror/state';\nimport React, { forwardRef, useImperativeHandle } from 'react';\n\nimport { type ThemedClassName, useThemeContext } from '@dxos/react-ui';\nimport {\n type AutocompleteOptions,\n type BasicExtensionsOptions,\n type UseTextEditorProps,\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type ReferencesOptions, references as referencesExtension } from './references';\n\nexport interface ChatEditorController {\n focus(): void;\n getText(): string;\n setText(text: string): void;\n}\n\nexport type ChatEditorProps = ThemedClassName<\n {\n extensions?: Extension;\n references?: ReferencesOptions;\n } & AutocompleteOptions &\n Pick<UseTextEditorProps, 'id' | 'autoFocus'> &\n Pick<BasicExtensionsOptions, 'lineWrapping' | 'placeholder'>\n>;\n\nexport const ChatEditor = forwardRef<ChatEditorController, ChatEditorProps>(\n (\n { classNames, extensions, references, autoFocus, lineWrapping = false, placeholder, onSubmit, onSuggest, onCancel },\n forwardRef,\n ) => {\n const { themeMode } = useThemeContext();\n\n const { parentRef, view } = useTextEditor(\n () => ({\n debug: true,\n autoFocus,\n extensions: [\n createThemeExtensions({ themeMode }),\n autocomplete({ onSubmit, onSuggest, onCancel }),\n references ? referencesExtension({ provider: references.provider }) : [],\n createBasicExtensions({\n bracketMatching: false,\n lineWrapping,\n placeholder,\n }),\n extensions,\n ].filter(isNonNullable),\n }),\n [themeMode, extensions, onSubmit, onSuggest, onCancel],\n );\n\n // Expose editor view.\n useImperativeHandle(forwardRef, () => {\n return {\n focus: () => {\n view?.focus();\n },\n getText: () => view?.state.doc.toString() ?? '',\n setText: (text: string) => {\n view?.dispatch({\n changes: {\n from: 0,\n to: view.state.doc.length,\n insert: text,\n },\n selection: {\n anchor: text.length,\n head: text.length,\n },\n });\n },\n };\n }, [view, onSubmit]);\n\n return <div ref={parentRef} className={mx('is-full', classNames)} />;\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = 'react-ui-chat';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {},\n },\n },\n] as const satisfies Resource[];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["createContext", "React", "useEffect", "useState", "Dialog", "Icon", "IconButton", "useControlledState", "ResizeHandle", "resizeAttributes", "sizeStyle", "mx", "preventDefault", "event", "Endcap", "children", "div", "className", "ChatDialogContextProvider", "useChatDialogContext", "createContext", "ChatDialogRoot", "open", "_open", "expanded", "expandedParam", "onOpenChange", "onExpandedChange", "onEscape", "size", "setSize", "useState", "setOpen", "useControlledState", "setExpanded", "Dialog", "Root", "modal", "role", "data-block-align", "Content", "inOverlayLayout", "classNames", "onEscapeKeyDown", "onInteractOutside", "displayName", "ChatDialogHeader", "title", "mx", "Close", "Icon", "icon", "Title", "onClick", "IconButton", "variant", "iconOnly", "label", "ChatDialogContent", "useEffect", "style", "sizeStyle", "maxBlockSize", "resizeAttributes", "ResizeHandle", "side", "iconPosition", "defaultSize", "fallbackSize", "minSize", "onSizeChange", "ChatDialogFooter", "ChatDialog", "Header", "Footer", "autocompletion", "completionKeymap", "RangeSet", "Decoration", "EditorView", "ViewPlugin", "WidgetType", "keymap", "Mutex", "invariant", "references", "provider", "triggerCharacter", "debug", "length", "decorationField", "fromClass", "ReferenceView", "update", "docChanged", "queueMicrotask", "guard", "_mutex", "acquire", "decorations", "_computeDecorations", "view", "release", "text", "state", "doc", "toString", "matchAll", "RegExp", "match", "reference", "uri", "slice", "data", "resolveReference", "push", "replace", "widget", "ReferenceWidget", "range", "index", "set", "v", "provide", "plugin", "atomicRanges", "of", "empty", "theme", "borderRadius", "borderWidth", "marginRight", "marginLeft", "tooltipClass", "activateOnTyping", "aboveCursor", "closeOnBlur", "override", "context", "matchBefore", "to", "from", "query", "getReferences", "filter", "options", "map", "label", "apply", "toDOM", "span", "document", "createElement", "textContent", "className", "eq", "other", "ignoreEvent", "React", "forwardRef", "useImperativeHandle", "useThemeContext", "autocomplete", "createBasicExtensions", "createThemeExtensions", "useTextEditor", "mx", "isNonNullable", "ChatEditor", "forwardRef", "classNames", "extensions", "references", "autoFocus", "lineWrapping", "placeholder", "onSubmit", "onSuggest", "onCancel", "themeMode", "useThemeContext", "parentRef", "view", "useTextEditor", "debug", "createThemeExtensions", "autocomplete", "referencesExtension", "provider", "createBasicExtensions", "bracketMatching", "filter", "isNonNullable", "useImperativeHandle", "focus", "getText", "state", "doc", "toString", "setText", "text", "dispatch", "changes", "from", "to", "length", "insert", "selection", "anchor", "head", "React", "div", "ref", "className", "mx", "translationKey", "translations"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"src/components/ChatDialog/ChatDialog.tsx":{"bytes":17762,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-dnd","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/components/ChatDialog/index.ts":{"bytes":480,"imports":[{"path":"src/components/ChatDialog/ChatDialog.tsx","kind":"import-statement","original":"./ChatDialog"}],"format":"esm"},"src/components/ChatEditor/references.ts":{"bytes":16344,"imports":[{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/components/ChatEditor/ChatEditor.tsx":{"bytes":8814,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/components/ChatEditor/references.ts","kind":"import-statement","original":"./references"}],"format":"esm"},"src/components/ChatEditor/index.ts":{"bytes":574,"imports":[{"path":"src/components/ChatEditor/references.ts","kind":"import-statement","original":"./references"},{"path":"src/components/ChatEditor/ChatEditor.tsx","kind":"import-statement","original":"./ChatEditor"}],"format":"esm"},"src/components/index.ts":{"bytes":563,"imports":[{"path":"src/components/ChatDialog/index.ts","kind":"import-statement","original":"./ChatDialog"},{"path":"src/components/ChatEditor/index.ts","kind":"import-statement","original":"./ChatEditor"}],"format":"esm"},"src/translations.ts":{"bytes":1041,"imports":[],"format":"esm"},"src/index.ts":{"bytes":558,"imports":[{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":22284},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-dnd","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["ChatDialog","ChatEditor","references","translationKey","translations"],"entryPoint":"src/index.ts","inputs":{"src/components/ChatDialog/ChatDialog.tsx":{"bytesInOutput":4874},"src/components/ChatDialog/index.ts":{"bytesInOutput":0},"src/components/index.ts":{"bytesInOutput":0},"src/components/ChatEditor/references.ts":{"bytesInOutput":3999},"src/components/ChatEditor/index.ts":{"bytesInOutput":0},"src/components/ChatEditor/ChatEditor.tsx":{"bytesInOutput":2035},"src/index.ts":{"bytesInOutput":0},"src/translations.ts":{"bytesInOutput":118}},"bytes":11398}}}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React, { type PropsWithChildren } from 'react';
|
|
2
|
+
import { type ThemedClassName } from '@dxos/react-ui';
|
|
3
|
+
type ChatDialogRootProps = PropsWithChildren<{
|
|
4
|
+
open?: boolean;
|
|
5
|
+
expanded?: boolean;
|
|
6
|
+
onOpenChange?: (open: boolean) => void;
|
|
7
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
8
|
+
onEscape?: () => void;
|
|
9
|
+
}>;
|
|
10
|
+
type ChatDialogHeaderProps = ThemedClassName<{
|
|
11
|
+
title?: string;
|
|
12
|
+
}>;
|
|
13
|
+
type ChatDialogContentProps = ThemedClassName<PropsWithChildren>;
|
|
14
|
+
type ChatDialogFooterProps = ThemedClassName<PropsWithChildren>;
|
|
15
|
+
export declare const ChatDialog: {
|
|
16
|
+
Root: {
|
|
17
|
+
({ children, open: _open, expanded: expandedParam, onOpenChange, onExpandedChange, onEscape, }: ChatDialogRootProps): React.JSX.Element;
|
|
18
|
+
displayName: string;
|
|
19
|
+
};
|
|
20
|
+
Header: {
|
|
21
|
+
({ classNames, title }: ChatDialogHeaderProps): React.JSX.Element;
|
|
22
|
+
displayName: string;
|
|
23
|
+
};
|
|
24
|
+
Content: {
|
|
25
|
+
({ children, classNames }: ChatDialogContentProps): React.JSX.Element;
|
|
26
|
+
displayName: string;
|
|
27
|
+
};
|
|
28
|
+
Footer: {
|
|
29
|
+
({ children, classNames }: ChatDialogFooterProps): React.JSX.Element;
|
|
30
|
+
displayName: string;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=ChatDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatDialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChatDialog/ChatDialog.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAiB,KAAK,iBAAiB,EAA4C,MAAM,OAAO,CAAC;AAE/G,OAAO,EAA4B,KAAK,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AAgCpG,KAAK,mBAAmB,GAAG,iBAAiB,CAAC;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC,CAAC;AAkDH,KAAK,qBAAqB,GAAG,eAAe,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAsCH,KAAK,sBAAsB,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAwCjE,KAAK,qBAAqB,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAYhE,eAAO,MAAM,UAAU;;wGArIpB,mBAAmB;;;;gCA6C2B,qBAAqB;;;;mCAsCjB,sBAAsB;;;;mCAwCvB,qBAAqB;;;CAexE,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import '@dxos-theme';
|
|
2
|
+
import { type StoryObj } from '@storybook/react-vite';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
declare const meta: {
|
|
5
|
+
title: string;
|
|
6
|
+
component: {
|
|
7
|
+
({ children, open: _open, expanded: expandedParam, onOpenChange, onExpandedChange, onEscape, }: {
|
|
8
|
+
open?: boolean;
|
|
9
|
+
expanded?: boolean;
|
|
10
|
+
onOpenChange?: (open: boolean) => void;
|
|
11
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
12
|
+
onEscape?: () => void;
|
|
13
|
+
} & {
|
|
14
|
+
children?: React.ReactNode | undefined;
|
|
15
|
+
}): React.JSX.Element;
|
|
16
|
+
displayName: string;
|
|
17
|
+
};
|
|
18
|
+
render: (args: {
|
|
19
|
+
open?: boolean;
|
|
20
|
+
expanded?: boolean;
|
|
21
|
+
onOpenChange?: (open: boolean) => void;
|
|
22
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
23
|
+
onEscape?: () => void;
|
|
24
|
+
} & {
|
|
25
|
+
children?: React.ReactNode | undefined;
|
|
26
|
+
}) => React.JSX.Element;
|
|
27
|
+
decorators: import("@storybook/react").Decorator[];
|
|
28
|
+
parameters: {
|
|
29
|
+
translations: [{
|
|
30
|
+
readonly 'en-US': {
|
|
31
|
+
readonly "react-ui-chat": {};
|
|
32
|
+
};
|
|
33
|
+
}];
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export default meta;
|
|
37
|
+
type Story = StoryObj<typeof meta>;
|
|
38
|
+
export declare const Default: Story;
|
|
39
|
+
//# sourceMappingURL=ChatDialog.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatDialog.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChatDialog/ChatDialog.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAWxC,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyC8B,CAAC;AAEzC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChatDialog/index.ts"],"names":[],"mappings":"AAIA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Extension } from '@codemirror/state';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { type ThemedClassName } from '@dxos/react-ui';
|
|
4
|
+
import { type AutocompleteOptions, type BasicExtensionsOptions, type UseTextEditorProps } from '@dxos/react-ui-editor';
|
|
5
|
+
import { type ReferencesOptions } from './references';
|
|
6
|
+
export interface ChatEditorController {
|
|
7
|
+
focus(): void;
|
|
8
|
+
getText(): string;
|
|
9
|
+
setText(text: string): void;
|
|
10
|
+
}
|
|
11
|
+
export type ChatEditorProps = ThemedClassName<{
|
|
12
|
+
extensions?: Extension;
|
|
13
|
+
references?: ReferencesOptions;
|
|
14
|
+
} & AutocompleteOptions & Pick<UseTextEditorProps, 'id' | 'autoFocus'> & Pick<BasicExtensionsOptions, 'lineWrapping' | 'placeholder'>>;
|
|
15
|
+
export declare const ChatEditor: React.ForwardRefExoticComponent<Omit<{
|
|
16
|
+
extensions?: Extension;
|
|
17
|
+
references?: ReferencesOptions;
|
|
18
|
+
} & AutocompleteOptions & Pick<UseTextEditorProps, "autoFocus" | "id"> & Pick<BasicExtensionsOptions, "lineWrapping" | "placeholder">, "className"> & {
|
|
19
|
+
classNames?: import("@dxos/react-ui-types").ClassNameValue;
|
|
20
|
+
} & React.RefAttributes<ChatEditorController>>;
|
|
21
|
+
//# sourceMappingURL=ChatEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChatEditor/ChatEditor.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAA0C,MAAM,OAAO,CAAC;AAE/D,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EAKxB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,KAAK,iBAAiB,EAAqC,MAAM,cAAc,CAAC;AAEzF,MAAM,WAAW,oBAAoB;IACnC,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,MAAM,CAAC;IAClB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,eAAe,GAAG,eAAe,CAC3C;IACE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,GAAG,mBAAmB,GACrB,IAAI,CAAC,kBAAkB,EAAE,IAAI,GAAG,WAAW,CAAC,GAC5C,IAAI,CAAC,sBAAsB,EAAE,cAAc,GAAG,aAAa,CAAC,CAC/D,CAAC;AAEF,eAAO,MAAM,UAAU;iBAPN,SAAS;iBACT,iBAAiB;;;8CAyDjC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import '@dxos-theme';
|
|
2
|
+
import { type StoryObj } from '@storybook/react-vite';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: import("react").ForwardRefExoticComponent<Omit<{
|
|
6
|
+
extensions?: import("@codemirror/state").Extension;
|
|
7
|
+
references?: import("./references").ReferencesOptions;
|
|
8
|
+
} & import("@dxos/react-ui-editor").AutocompleteOptions & Pick<import("@dxos/react-ui-editor").UseTextEditorProps, "autoFocus" | "id"> & Pick<import("@dxos/react-ui-editor").BasicExtensionsOptions, "lineWrapping" | "placeholder">, "className"> & {
|
|
9
|
+
classNames?: import("@dxos/react-ui-types").ClassNameValue;
|
|
10
|
+
} & import("react").RefAttributes<import("./ChatEditor").ChatEditorController>>;
|
|
11
|
+
decorators: import("@storybook/react").Decorator[];
|
|
12
|
+
parameters: {
|
|
13
|
+
layout: string;
|
|
14
|
+
translations: [{
|
|
15
|
+
readonly 'en-US': {
|
|
16
|
+
readonly "react-ui-chat": {};
|
|
17
|
+
};
|
|
18
|
+
}];
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export default meta;
|
|
22
|
+
type Story = StoryObj<typeof meta>;
|
|
23
|
+
export declare const Default: Story;
|
|
24
|
+
export declare const WithSuggestions: Story;
|
|
25
|
+
export declare const WithReferences: Story;
|
|
26
|
+
//# sourceMappingURL=ChatEditor.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatEditor.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChatEditor/ChatEditor.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAUjE,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;CAQyB,CAAC;AAEpC,eAAe,IAAI,CAAC;AAIpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAuB7B,CAAC;AAiBF,eAAO,MAAM,cAAc,EAAE,KAkB5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChatEditor/index.ts"],"names":[],"mappings":"AAIA,cAAc,cAAc,CAAC;AAE7B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Extension } from '@codemirror/state';
|
|
2
|
+
export type ReferenceData = {
|
|
3
|
+
uri: string;
|
|
4
|
+
label: string;
|
|
5
|
+
};
|
|
6
|
+
export interface ReferencesProvider {
|
|
7
|
+
getReferences({ query }: {
|
|
8
|
+
query: string;
|
|
9
|
+
}): Promise<ReferenceData[]>;
|
|
10
|
+
resolveReference({ uri }: {
|
|
11
|
+
uri: string;
|
|
12
|
+
}): Promise<ReferenceData | null>;
|
|
13
|
+
}
|
|
14
|
+
export type ReferencesOptions = {
|
|
15
|
+
provider: ReferencesProvider;
|
|
16
|
+
/**
|
|
17
|
+
* @default '@'
|
|
18
|
+
*/
|
|
19
|
+
triggerCharacter?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Prevent the autocomplete from closing when the user blurs the editor.
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
debug?: boolean;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Lookup object references.
|
|
28
|
+
*/
|
|
29
|
+
export declare const references: ({ provider, triggerCharacter, debug }: ReferencesOptions) => Extension;
|
|
30
|
+
//# sourceMappingURL=references.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChatEditor/references.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,mBAAmB,CAAC;AAe7D,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACtE,gBAAgB,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;CAC3E;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,uCAAqD,iBAAiB,KAAG,SAyGnG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAIA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|