@anvia/react-ui 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attachment/index.d.ts +3 -21
- package/dist/attachment/index.js +3 -12
- package/dist/attachment-DsKTPumt.js +89 -0
- package/dist/attachment-DsKTPumt.js.map +1 -0
- package/dist/chat/index.d.ts +3 -152
- package/dist/chat/index.js +3 -25
- package/dist/chat-CAnvUEAv.js +1210 -0
- package/dist/chat-CAnvUEAv.js.map +1 -0
- package/dist/completion/index.d.ts +3 -29
- package/dist/completion/index.js +3 -16
- package/dist/completion-DDTKoZRJ.js +124 -0
- package/dist/completion-DDTKoZRJ.js.map +1 -0
- package/dist/connection-DeNq8wHS.js +203 -0
- package/dist/connection-DeNq8wHS.js.map +1 -0
- package/dist/contexts-B4ijG24z.js +212 -0
- package/dist/contexts-B4ijG24z.js.map +1 -0
- package/dist/elements-D4vmkkF8.js +19 -0
- package/dist/elements-D4vmkkF8.js.map +1 -0
- package/dist/graph-explorer/index.d.ts +54 -73
- package/dist/graph-explorer/index.d.ts.map +1 -0
- package/dist/graph-explorer/index.js +181 -248
- package/dist/graph-explorer/index.js.map +1 -1
- package/dist/human-input/index.d.ts +3 -78
- package/dist/human-input/index.js +3 -21
- package/dist/human-input-CsCbZomZ.js +314 -0
- package/dist/human-input-CsCbZomZ.js.map +1 -0
- package/dist/image/index.d.ts +3 -40
- package/dist/image/index.js +3 -12
- package/dist/image-D_7vaQCR.js +302 -0
- package/dist/image-D_7vaQCR.js.map +1 -0
- package/dist/index-B1Qs2Cjv.d.ts +145 -0
- package/dist/index-B1Qs2Cjv.d.ts.map +1 -0
- package/dist/index-BCBVcl0D.d.ts +277 -0
- package/dist/index-BCBVcl0D.d.ts.map +1 -0
- package/dist/index-CE22tsua.d.ts +20 -0
- package/dist/index-CE22tsua.d.ts.map +1 -0
- package/dist/index-CGqtpc6b.d.ts +25 -0
- package/dist/index-CGqtpc6b.d.ts.map +1 -0
- package/dist/index-DqdyM0Jm.d.ts +7 -0
- package/dist/index-DqdyM0Jm.d.ts.map +1 -0
- package/dist/index-Mw3ltwSG.d.ts +318 -0
- package/dist/index-Mw3ltwSG.d.ts.map +1 -0
- package/dist/index.d.ts +7 -40
- package/dist/index.js +34 -118
- package/dist/index.js.map +1 -1
- package/dist/message/index.d.ts +3 -105
- package/dist/message/index.js +3 -20
- package/dist/message-Dn3wW6yy.js +783 -0
- package/dist/message-Dn3wW6yy.js.map +1 -0
- package/dist/primitives-xfE7zfwJ.js +15 -0
- package/dist/primitives-xfE7zfwJ.js.map +1 -0
- package/dist/refs-Djj9rSvB.js +10 -0
- package/dist/refs-Djj9rSvB.js.map +1 -0
- package/dist/sandbox-desktop/index.d.ts +100 -104
- package/dist/sandbox-desktop/index.d.ts.map +1 -0
- package/dist/sandbox-desktop/index.js +344 -342
- package/dist/sandbox-desktop/index.js.map +1 -1
- package/dist/sandbox-terminal/index.d.ts +52 -56
- package/dist/sandbox-terminal/index.d.ts.map +1 -0
- package/dist/sandbox-terminal/index.js +217 -208
- package/dist/sandbox-terminal/index.js.map +1 -1
- package/dist/selection-toolbar/index.d.ts +3 -21
- package/dist/selection-toolbar/index.js +3 -13
- package/dist/selection-toolbar-CIkOoM-7.js +171 -0
- package/dist/selection-toolbar-CIkOoM-7.js.map +1 -0
- package/dist/shared-BSYElFU2.d.ts +2 -0
- package/dist/shared.d.ts +4 -14
- package/dist/shared.js +1 -43
- package/dist/stream/index.d.ts +2 -22
- package/dist/stream/index.js +1 -8
- package/dist/stream-CAO0x8_1.js +298 -0
- package/dist/stream-CAO0x8_1.js.map +1 -0
- package/dist/thread-list/index.d.ts +3 -47
- package/dist/thread-list/index.js +3 -18
- package/dist/thread-list-xJbGXFrE.js +228 -0
- package/dist/thread-list-xJbGXFrE.js.map +1 -0
- package/dist/ticket-CoJHBpdF.d.ts +32 -0
- package/dist/ticket-CoJHBpdF.d.ts.map +1 -0
- package/dist/value-BGGrx72L.js +13 -0
- package/dist/value-BGGrx72L.js.map +1 -0
- package/package.json +22 -22
- package/dist/attachment/index.js.map +0 -1
- package/dist/attachment-mbjsroli.d.ts +0 -9
- package/dist/chat/index.js.map +0 -1
- package/dist/chat-PSj1Fo4W.d.ts +0 -88
- package/dist/chunk-22EZJUPM.js +0 -120
- package/dist/chunk-22EZJUPM.js.map +0 -1
- package/dist/chunk-5FZKTDZR.js +0 -201
- package/dist/chunk-5FZKTDZR.js.map +0 -1
- package/dist/chunk-6XOJFLX4.js +0 -22
- package/dist/chunk-6XOJFLX4.js.map +0 -1
- package/dist/chunk-CKA4CE26.js +0 -25
- package/dist/chunk-CKA4CE26.js.map +0 -1
- package/dist/chunk-DLBNFBXQ.js +0 -425
- package/dist/chunk-DLBNFBXQ.js.map +0 -1
- package/dist/chunk-E73S3SOF.js +0 -404
- package/dist/chunk-E73S3SOF.js.map +0 -1
- package/dist/chunk-F6AKBUO3.js +0 -380
- package/dist/chunk-F6AKBUO3.js.map +0 -1
- package/dist/chunk-HGOPGZNQ.js +0 -195
- package/dist/chunk-HGOPGZNQ.js.map +0 -1
- package/dist/chunk-KHB5CHAU.js +0 -220
- package/dist/chunk-KHB5CHAU.js.map +0 -1
- package/dist/chunk-LHABOAOP.js +0 -316
- package/dist/chunk-LHABOAOP.js.map +0 -1
- package/dist/chunk-N5XQU36W.js +0 -410
- package/dist/chunk-N5XQU36W.js.map +0 -1
- package/dist/chunk-T3ZFZ3NP.js +0 -30
- package/dist/chunk-T3ZFZ3NP.js.map +0 -1
- package/dist/chunk-T4IYUEPH.js +0 -1612
- package/dist/chunk-T4IYUEPH.js.map +0 -1
- package/dist/chunk-W2AHKMRS.js +0 -1092
- package/dist/chunk-W2AHKMRS.js.map +0 -1
- package/dist/completion/index.js.map +0 -1
- package/dist/completion-input-DHlwrhxB.d.ts +0 -24
- package/dist/composer-6iCSIq6L.d.ts +0 -111
- package/dist/human-input/index.js.map +0 -1
- package/dist/human-input-CkLrZ8IC.d.ts +0 -27
- package/dist/image/index.js.map +0 -1
- package/dist/image-VZv6Ddsn.d.ts +0 -14
- package/dist/message/index.js.map +0 -1
- package/dist/message-CNRnZQwU.d.ts +0 -14
- package/dist/render-CRKWam2v.d.ts +0 -8
- package/dist/selection-toolbar/index.js.map +0 -1
- package/dist/selection-toolbar-Cwjbuv5S.d.ts +0 -14
- package/dist/shared.js.map +0 -1
- package/dist/stream/index.js.map +0 -1
- package/dist/thread-Bz6-1zaJ.d.ts +0 -12
- package/dist/thread-list/index.js.map +0 -1
- package/dist/thread-list-On8db4XL.d.ts +0 -34
- package/dist/ticket-pexI1zIa.d.ts +0 -33
package/dist/chunk-KHB5CHAU.js
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
messageElementFromNode
|
|
3
|
-
} from "./chunk-6XOJFLX4.js";
|
|
4
|
-
import {
|
|
5
|
-
renderPrimitive
|
|
6
|
-
} from "./chunk-T3ZFZ3NP.js";
|
|
7
|
-
import {
|
|
8
|
-
InternalSelectionToolbarProvider,
|
|
9
|
-
useSelectionToolbar
|
|
10
|
-
} from "./chunk-E73S3SOF.js";
|
|
11
|
-
|
|
12
|
-
// src/selection-toolbar/parts.tsx
|
|
13
|
-
import {
|
|
14
|
-
forwardRef,
|
|
15
|
-
useCallback,
|
|
16
|
-
useEffect,
|
|
17
|
-
useMemo,
|
|
18
|
-
useState
|
|
19
|
-
} from "react";
|
|
20
|
-
import { createPortal } from "react-dom";
|
|
21
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
22
|
-
var SelectionToolbarRoot = forwardRef(
|
|
23
|
-
function SelectionToolbarRoot2({ children, container, onQuote, onSelectionChange, style, ...props }, ref) {
|
|
24
|
-
const [selection, setSelectionState] = useState();
|
|
25
|
-
const portalContainer = container ?? globalThis.document?.body;
|
|
26
|
-
const setSelection = useCallback(
|
|
27
|
-
(nextSelection) => {
|
|
28
|
-
setSelectionState((currentSelection) => {
|
|
29
|
-
if (sameSelection(currentSelection, nextSelection)) {
|
|
30
|
-
return currentSelection;
|
|
31
|
-
}
|
|
32
|
-
onSelectionChange?.(nextSelection);
|
|
33
|
-
return nextSelection;
|
|
34
|
-
});
|
|
35
|
-
},
|
|
36
|
-
[onSelectionChange]
|
|
37
|
-
);
|
|
38
|
-
const clear = useCallback(() => {
|
|
39
|
-
globalThis.document?.getSelection()?.removeAllRanges();
|
|
40
|
-
setSelection(void 0);
|
|
41
|
-
}, [setSelection]);
|
|
42
|
-
const copy = useCallback(async () => {
|
|
43
|
-
if (selection === void 0) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
await globalThis.navigator?.clipboard?.writeText(selection.text);
|
|
47
|
-
clear();
|
|
48
|
-
}, [clear, selection]);
|
|
49
|
-
const quote = useCallback(() => {
|
|
50
|
-
if (selection === void 0) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
onQuote?.(selection);
|
|
54
|
-
clear();
|
|
55
|
-
}, [clear, onQuote, selection]);
|
|
56
|
-
const value = useMemo(() => {
|
|
57
|
-
const context = { quote, copy, clear };
|
|
58
|
-
if (selection !== void 0) context.selection = selection;
|
|
59
|
-
return context;
|
|
60
|
-
}, [clear, copy, quote, selection]);
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
const document = globalThis.document;
|
|
63
|
-
if (document === void 0) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
const handleSelectionChange = () => {
|
|
67
|
-
setSelection(selectionFromDocument(document));
|
|
68
|
-
};
|
|
69
|
-
document.addEventListener("selectionchange", handleSelectionChange);
|
|
70
|
-
document.addEventListener("mouseup", handleSelectionChange);
|
|
71
|
-
document.addEventListener("keyup", handleSelectionChange);
|
|
72
|
-
document.addEventListener("scroll", handleSelectionChange, true);
|
|
73
|
-
return () => {
|
|
74
|
-
document.removeEventListener("selectionchange", handleSelectionChange);
|
|
75
|
-
document.removeEventListener("mouseup", handleSelectionChange);
|
|
76
|
-
document.removeEventListener("keyup", handleSelectionChange);
|
|
77
|
-
document.removeEventListener("scroll", handleSelectionChange, true);
|
|
78
|
-
};
|
|
79
|
-
}, [setSelection]);
|
|
80
|
-
if (selection === void 0 || portalContainer === void 0) {
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
const toolbarStyle = {
|
|
84
|
-
position: "fixed",
|
|
85
|
-
top: selection.rect.top,
|
|
86
|
-
left: selection.rect.left + selection.rect.width / 2,
|
|
87
|
-
transform: "translate(-50%, calc(-100% - 8px))",
|
|
88
|
-
...style
|
|
89
|
-
};
|
|
90
|
-
const toolbar = /* @__PURE__ */ jsx(InternalSelectionToolbarProvider, { value, children: renderPrimitive(
|
|
91
|
-
"div",
|
|
92
|
-
{
|
|
93
|
-
...props,
|
|
94
|
-
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
95
|
-
/* @__PURE__ */ jsx(SelectionToolbarQuote, {}),
|
|
96
|
-
/* @__PURE__ */ jsx(SelectionToolbarCopy, {})
|
|
97
|
-
] }),
|
|
98
|
-
style: toolbarStyle,
|
|
99
|
-
role: props.role ?? "toolbar"
|
|
100
|
-
},
|
|
101
|
-
ref
|
|
102
|
-
) });
|
|
103
|
-
return createPortal(toolbar, portalContainer);
|
|
104
|
-
}
|
|
105
|
-
);
|
|
106
|
-
var SelectionToolbarQuote = forwardRef(
|
|
107
|
-
function SelectionToolbarQuote2({ onClick, ...props }, ref) {
|
|
108
|
-
const { disabled, handleClick } = useSelectionToolbarAction("quote", props.disabled, onClick);
|
|
109
|
-
return renderPrimitive(
|
|
110
|
-
"button",
|
|
111
|
-
{
|
|
112
|
-
...props,
|
|
113
|
-
children: props.children ?? "Quote",
|
|
114
|
-
disabled,
|
|
115
|
-
onClick: handleClick,
|
|
116
|
-
type: props.type ?? "button",
|
|
117
|
-
"data-state": disabled ? "disabled" : "enabled"
|
|
118
|
-
},
|
|
119
|
-
ref
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
);
|
|
123
|
-
var SelectionToolbarCopy = forwardRef(
|
|
124
|
-
function SelectionToolbarCopy2({ onClick, ...props }, ref) {
|
|
125
|
-
const { disabled, handleClick } = useSelectionToolbarAction("copy", props.disabled, onClick);
|
|
126
|
-
return renderPrimitive(
|
|
127
|
-
"button",
|
|
128
|
-
{
|
|
129
|
-
...props,
|
|
130
|
-
children: props.children ?? "Copy",
|
|
131
|
-
disabled,
|
|
132
|
-
onClick: handleClick,
|
|
133
|
-
type: props.type ?? "button",
|
|
134
|
-
"data-state": disabled ? "disabled" : "enabled"
|
|
135
|
-
},
|
|
136
|
-
ref
|
|
137
|
-
);
|
|
138
|
-
}
|
|
139
|
-
);
|
|
140
|
-
function useSelectionToolbarAction(actionName, disabledProp, onClick) {
|
|
141
|
-
const toolbar = useSelectionToolbar();
|
|
142
|
-
const disabled = disabledProp ?? toolbar.selection === void 0;
|
|
143
|
-
const action = toolbar[actionName];
|
|
144
|
-
const handleClick = useCallback(
|
|
145
|
-
(event) => {
|
|
146
|
-
onClick?.(event);
|
|
147
|
-
if (event.defaultPrevented || disabled) {
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
void action();
|
|
151
|
-
},
|
|
152
|
-
[action, disabled, onClick]
|
|
153
|
-
);
|
|
154
|
-
return { disabled, handleClick };
|
|
155
|
-
}
|
|
156
|
-
function selectionFromDocument(document) {
|
|
157
|
-
const selection = document.getSelection();
|
|
158
|
-
if (selection === null || selection.rangeCount === 0) {
|
|
159
|
-
return void 0;
|
|
160
|
-
}
|
|
161
|
-
const text = selection.toString();
|
|
162
|
-
if (text.trim().length === 0) {
|
|
163
|
-
return void 0;
|
|
164
|
-
}
|
|
165
|
-
const anchorMessage = messageElementFromNode(selection.anchorNode);
|
|
166
|
-
const focusMessage = messageElementFromNode(selection.focusNode);
|
|
167
|
-
if (anchorMessage === void 0 || focusMessage === void 0 || anchorMessage.element !== focusMessage.element) {
|
|
168
|
-
return void 0;
|
|
169
|
-
}
|
|
170
|
-
const range = selection.getRangeAt(0);
|
|
171
|
-
return {
|
|
172
|
-
text,
|
|
173
|
-
messageId: anchorMessage.messageId,
|
|
174
|
-
rect: selectionRect(range)
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
function selectionRect(range) {
|
|
178
|
-
const rangeWithRect = range;
|
|
179
|
-
const rect = rangeWithRect.getBoundingClientRect?.();
|
|
180
|
-
if (rect !== void 0 && (rect.width > 0 || rect.height > 0)) {
|
|
181
|
-
return rect;
|
|
182
|
-
}
|
|
183
|
-
const firstRect = range.getClientRects().item(0);
|
|
184
|
-
if (firstRect !== null) {
|
|
185
|
-
return firstRect;
|
|
186
|
-
}
|
|
187
|
-
const DOMRectConstructor = globalThis.DOMRect;
|
|
188
|
-
if (DOMRectConstructor !== void 0) {
|
|
189
|
-
return new DOMRectConstructor(0, 0, 0, 0);
|
|
190
|
-
}
|
|
191
|
-
return {
|
|
192
|
-
bottom: 0,
|
|
193
|
-
height: 0,
|
|
194
|
-
left: 0,
|
|
195
|
-
right: 0,
|
|
196
|
-
top: 0,
|
|
197
|
-
width: 0,
|
|
198
|
-
x: 0,
|
|
199
|
-
y: 0,
|
|
200
|
-
toJSON: () => ({})
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
function sameSelection(currentSelection, nextSelection) {
|
|
204
|
-
if (currentSelection === void 0 || nextSelection === void 0) {
|
|
205
|
-
return currentSelection === nextSelection;
|
|
206
|
-
}
|
|
207
|
-
return currentSelection.text === nextSelection.text && currentSelection.messageId === nextSelection.messageId && currentSelection.rect.left === nextSelection.rect.left && currentSelection.rect.top === nextSelection.rect.top && currentSelection.rect.width === nextSelection.rect.width && currentSelection.rect.height === nextSelection.rect.height;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// src/selection-toolbar/index.ts
|
|
211
|
-
var SelectionToolbarPrimitive = {
|
|
212
|
-
Root: SelectionToolbarRoot,
|
|
213
|
-
Quote: SelectionToolbarQuote,
|
|
214
|
-
Copy: SelectionToolbarCopy
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
export {
|
|
218
|
-
SelectionToolbarPrimitive
|
|
219
|
-
};
|
|
220
|
-
//# sourceMappingURL=chunk-KHB5CHAU.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/selection-toolbar/parts.tsx","../src/selection-toolbar/index.ts"],"sourcesContent":["import {\n type CSSProperties,\n forwardRef,\n type MouseEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport {\n InternalSelectionToolbarProvider,\n type SelectionToolbarContextValue,\n type SelectionToolbarSelection,\n useSelectionToolbar,\n} from \"../contexts\";\nimport { messageElementFromNode } from \"../message/elements\";\nimport { type PrimitiveProps, renderPrimitive } from \"../primitives\";\n\ntype SelectionToolbarRootProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: ReactNode;\n container?: Element | DocumentFragment;\n onQuote?: (selection: SelectionToolbarSelection) => void;\n onSelectionChange?: (selection: SelectionToolbarSelection | undefined) => void;\n};\n\nconst SelectionToolbarRoot = forwardRef<HTMLDivElement, SelectionToolbarRootProps>(\n function SelectionToolbarRoot(\n { children, container, onQuote, onSelectionChange, style, ...props },\n ref,\n ) {\n const [selection, setSelectionState] = useState<SelectionToolbarSelection | undefined>();\n const portalContainer = container ?? globalThis.document?.body;\n\n const setSelection = useCallback(\n (nextSelection: SelectionToolbarSelection | undefined) => {\n setSelectionState((currentSelection) => {\n if (sameSelection(currentSelection, nextSelection)) {\n return currentSelection;\n }\n onSelectionChange?.(nextSelection);\n return nextSelection;\n });\n },\n [onSelectionChange],\n );\n\n const clear = useCallback(() => {\n globalThis.document?.getSelection()?.removeAllRanges();\n setSelection(undefined);\n }, [setSelection]);\n\n const copy = useCallback(async () => {\n if (selection === undefined) {\n return;\n }\n await globalThis.navigator?.clipboard?.writeText(selection.text);\n clear();\n }, [clear, selection]);\n\n const quote = useCallback(() => {\n if (selection === undefined) {\n return;\n }\n onQuote?.(selection);\n clear();\n }, [clear, onQuote, selection]);\n\n const value = useMemo<SelectionToolbarContextValue>(() => {\n const context: SelectionToolbarContextValue = { quote, copy, clear };\n if (selection !== undefined) context.selection = selection;\n return context;\n }, [clear, copy, quote, selection]);\n\n useEffect(() => {\n const document = globalThis.document;\n if (document === undefined) {\n return;\n }\n\n const handleSelectionChange = () => {\n setSelection(selectionFromDocument(document));\n };\n\n document.addEventListener(\"selectionchange\", handleSelectionChange);\n document.addEventListener(\"mouseup\", handleSelectionChange);\n document.addEventListener(\"keyup\", handleSelectionChange);\n document.addEventListener(\"scroll\", handleSelectionChange, true);\n return () => {\n document.removeEventListener(\"selectionchange\", handleSelectionChange);\n document.removeEventListener(\"mouseup\", handleSelectionChange);\n document.removeEventListener(\"keyup\", handleSelectionChange);\n document.removeEventListener(\"scroll\", handleSelectionChange, true);\n };\n }, [setSelection]);\n\n if (selection === undefined || portalContainer === undefined) {\n return null;\n }\n\n const toolbarStyle: CSSProperties = {\n position: \"fixed\",\n top: selection.rect.top,\n left: selection.rect.left + selection.rect.width / 2,\n transform: \"translate(-50%, calc(-100% - 8px))\",\n ...style,\n };\n\n const toolbar = (\n <InternalSelectionToolbarProvider value={value}>\n {renderPrimitive(\n \"div\",\n {\n ...props,\n children: children ?? (\n <>\n <SelectionToolbarQuote />\n <SelectionToolbarCopy />\n </>\n ),\n style: toolbarStyle,\n role: props.role ?? \"toolbar\",\n } as PrimitiveProps<\"div\">,\n ref,\n )}\n </InternalSelectionToolbarProvider>\n );\n\n return createPortal(toolbar, portalContainer);\n },\n);\n\nconst SelectionToolbarQuote = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function SelectionToolbarQuote({ onClick, ...props }, ref) {\n const { disabled, handleClick } = useSelectionToolbarAction(\"quote\", props.disabled, onClick);\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Quote\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\nconst SelectionToolbarCopy = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function SelectionToolbarCopy({ onClick, ...props }, ref) {\n const { disabled, handleClick } = useSelectionToolbarAction(\"copy\", props.disabled, onClick);\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Copy\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\ntype SelectionToolbarAction = \"copy\" | \"quote\";\n\nfunction useSelectionToolbarAction(\n actionName: SelectionToolbarAction,\n disabledProp: boolean | undefined,\n onClick: ((event: MouseEvent<HTMLButtonElement>) => void) | undefined,\n): {\n disabled: boolean;\n handleClick(event: MouseEvent<HTMLButtonElement>): void;\n} {\n const toolbar = useSelectionToolbar();\n const disabled = disabledProp ?? toolbar.selection === undefined;\n const action = toolbar[actionName];\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n void action();\n },\n [action, disabled, onClick],\n );\n return { disabled, handleClick };\n}\n\nfunction selectionFromDocument(document: Document): SelectionToolbarSelection | undefined {\n const selection = document.getSelection();\n if (selection === null || selection.rangeCount === 0) {\n return undefined;\n }\n const text = selection.toString();\n if (text.trim().length === 0) {\n return undefined;\n }\n\n const anchorMessage = messageElementFromNode(selection.anchorNode);\n const focusMessage = messageElementFromNode(selection.focusNode);\n if (\n anchorMessage === undefined ||\n focusMessage === undefined ||\n anchorMessage.element !== focusMessage.element\n ) {\n return undefined;\n }\n\n const range = selection.getRangeAt(0);\n return {\n text,\n messageId: anchorMessage.messageId,\n rect: selectionRect(range),\n };\n}\n\nfunction selectionRect(range: Range): DOMRect {\n const rangeWithRect = range as Range & {\n getBoundingClientRect?: () => DOMRect;\n };\n const rect = rangeWithRect.getBoundingClientRect?.();\n if (rect !== undefined && (rect.width > 0 || rect.height > 0)) {\n return rect;\n }\n const firstRect = range.getClientRects().item(0);\n if (firstRect !== null) {\n return firstRect;\n }\n const DOMRectConstructor = globalThis.DOMRect;\n if (DOMRectConstructor !== undefined) {\n return new DOMRectConstructor(0, 0, 0, 0);\n }\n return {\n bottom: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n width: 0,\n x: 0,\n y: 0,\n toJSON: () => ({}),\n } as DOMRect;\n}\n\nfunction sameSelection(\n currentSelection: SelectionToolbarSelection | undefined,\n nextSelection: SelectionToolbarSelection | undefined,\n): boolean {\n if (currentSelection === undefined || nextSelection === undefined) {\n return currentSelection === nextSelection;\n }\n return (\n currentSelection.text === nextSelection.text &&\n currentSelection.messageId === nextSelection.messageId &&\n currentSelection.rect.left === nextSelection.rect.left &&\n currentSelection.rect.top === nextSelection.rect.top &&\n currentSelection.rect.width === nextSelection.rect.width &&\n currentSelection.rect.height === nextSelection.rect.height\n );\n}\n\nexport { SelectionToolbarCopy, SelectionToolbarQuote, SelectionToolbarRoot };\n","import { SelectionToolbarCopy, SelectionToolbarQuote, SelectionToolbarRoot } from \"./parts\";\n\nexport const SelectionToolbarPrimitive = {\n Root: SelectionToolbarRoot,\n Quote: SelectionToolbarQuote,\n Copy: SelectionToolbarCopy,\n} as const;\n\nexport type { SelectionToolbarContextValue, SelectionToolbarSelection } from \"../contexts\";\nexport { useSelectionToolbar } from \"../contexts\";\n"],"mappings":"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","names":["SelectionToolbarRoot","SelectionToolbarQuote","SelectionToolbarCopy"]}
|
package/dist/chunk-LHABOAOP.js
DELETED
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
composeRefs,
|
|
3
|
-
renderPrimitive
|
|
4
|
-
} from "./chunk-T3ZFZ3NP.js";
|
|
5
|
-
import {
|
|
6
|
-
InternalThreadListItemProvider,
|
|
7
|
-
InternalThreadListRootProvider,
|
|
8
|
-
useInternalThreadListRoot,
|
|
9
|
-
useThreadList,
|
|
10
|
-
useThreadListItem
|
|
11
|
-
} from "./chunk-E73S3SOF.js";
|
|
12
|
-
|
|
13
|
-
// src/thread-list/parts.tsx
|
|
14
|
-
import {
|
|
15
|
-
forwardRef,
|
|
16
|
-
useCallback,
|
|
17
|
-
useMemo,
|
|
18
|
-
useRef
|
|
19
|
-
} from "react";
|
|
20
|
-
import { jsx } from "react/jsx-runtime";
|
|
21
|
-
var ThreadListRoot = forwardRef(function ThreadListRoot2({ onKeyDown, ...props }, ref) {
|
|
22
|
-
const threadList = useThreadList();
|
|
23
|
-
const rootRef = useRef(null);
|
|
24
|
-
const newButtonRef = useRef(null);
|
|
25
|
-
const itemElements = useRef(/* @__PURE__ */ new Map());
|
|
26
|
-
const triggerElements = useRef(/* @__PURE__ */ new Map());
|
|
27
|
-
const registerItem = useCallback((threadId, element) => {
|
|
28
|
-
if (element === null) itemElements.current.delete(threadId);
|
|
29
|
-
else itemElements.current.set(threadId, element);
|
|
30
|
-
}, []);
|
|
31
|
-
const registerTrigger = useCallback((threadId, element) => {
|
|
32
|
-
if (element === null) triggerElements.current.delete(threadId);
|
|
33
|
-
else triggerElements.current.set(threadId, element);
|
|
34
|
-
}, []);
|
|
35
|
-
const rootContext = useMemo(
|
|
36
|
-
() => ({
|
|
37
|
-
rootRef,
|
|
38
|
-
newButtonRef,
|
|
39
|
-
itemElements,
|
|
40
|
-
triggerElements,
|
|
41
|
-
registerItem,
|
|
42
|
-
registerTrigger
|
|
43
|
-
}),
|
|
44
|
-
[registerItem, registerTrigger]
|
|
45
|
-
);
|
|
46
|
-
const composedRef = useMemo(
|
|
47
|
-
() => composeRefs(ref, (node) => {
|
|
48
|
-
rootRef.current = node;
|
|
49
|
-
}),
|
|
50
|
-
[ref]
|
|
51
|
-
);
|
|
52
|
-
const handleKeyDown = useCallback(
|
|
53
|
-
(event) => {
|
|
54
|
-
onKeyDown?.(event);
|
|
55
|
-
if (event.defaultPrevented || !["ArrowDown", "ArrowUp", "Home", "End"].includes(event.key)) {
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
const triggers = orderedEnabledTriggers(rootContext);
|
|
59
|
-
if (triggers.length === 0) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
event.preventDefault();
|
|
63
|
-
const activeElement = document.activeElement;
|
|
64
|
-
const currentIndex = activeElement instanceof HTMLButtonElement ? triggers.indexOf(activeElement) : -1;
|
|
65
|
-
const nextIndex = nextTriggerIndex(event.key, currentIndex, triggers.length);
|
|
66
|
-
triggers[nextIndex]?.focus();
|
|
67
|
-
},
|
|
68
|
-
[onKeyDown, rootContext]
|
|
69
|
-
);
|
|
70
|
-
return /* @__PURE__ */ jsx(InternalThreadListRootProvider, { value: rootContext, children: renderPrimitive(
|
|
71
|
-
"div",
|
|
72
|
-
{
|
|
73
|
-
...props,
|
|
74
|
-
onKeyDown: handleKeyDown,
|
|
75
|
-
"data-state": threadList.status ?? "idle"
|
|
76
|
-
},
|
|
77
|
-
composedRef
|
|
78
|
-
) });
|
|
79
|
-
});
|
|
80
|
-
var ThreadListNew = forwardRef(
|
|
81
|
-
function ThreadListNew2({ onClick, ...props }, ref) {
|
|
82
|
-
const threadList = useThreadList();
|
|
83
|
-
const root = useInternalThreadListRoot();
|
|
84
|
-
const composedRef = useMemo(
|
|
85
|
-
() => composeRefs(ref, (node) => {
|
|
86
|
-
root.newButtonRef.current = node;
|
|
87
|
-
}),
|
|
88
|
-
[ref, root.newButtonRef]
|
|
89
|
-
);
|
|
90
|
-
const handleClick = useCallback(
|
|
91
|
-
(event) => {
|
|
92
|
-
onClick?.(event);
|
|
93
|
-
if (event.defaultPrevented || props.disabled) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
void threadList.createThread();
|
|
97
|
-
},
|
|
98
|
-
[onClick, props.disabled, threadList]
|
|
99
|
-
);
|
|
100
|
-
return renderPrimitive(
|
|
101
|
-
"button",
|
|
102
|
-
{
|
|
103
|
-
...props,
|
|
104
|
-
children: props.children ?? "New chat",
|
|
105
|
-
onClick: handleClick,
|
|
106
|
-
type: props.type ?? "button",
|
|
107
|
-
"data-state": props.disabled ? "disabled" : "enabled"
|
|
108
|
-
},
|
|
109
|
-
composedRef
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
|
-
);
|
|
113
|
-
var ThreadListItems = forwardRef(function ThreadListItems2({ archived = false, children, keepMounted = false, ...props }, ref) {
|
|
114
|
-
const threadList = useThreadList();
|
|
115
|
-
const threads = threadList.threads.filter((thread) => Boolean(thread.archived) === archived);
|
|
116
|
-
const empty = threads.length === 0;
|
|
117
|
-
if (empty && !keepMounted) {
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
return renderPrimitive(
|
|
121
|
-
"div",
|
|
122
|
-
{
|
|
123
|
-
...props,
|
|
124
|
-
children: threads.map((thread) => /* @__PURE__ */ jsx(
|
|
125
|
-
InternalThreadListItemProvider,
|
|
126
|
-
{
|
|
127
|
-
value: { thread, active: thread.id === threadList.activeThreadId },
|
|
128
|
-
children: typeof children === "function" ? children(thread) : children ?? /* @__PURE__ */ jsx(DefaultThreadItem, {})
|
|
129
|
-
},
|
|
130
|
-
thread.id
|
|
131
|
-
)),
|
|
132
|
-
"data-state": empty ? "empty" : "populated"
|
|
133
|
-
},
|
|
134
|
-
ref
|
|
135
|
-
);
|
|
136
|
-
});
|
|
137
|
-
var ThreadListEmpty = forwardRef(function ThreadListEmpty2({ archived = false, ...props }, ref) {
|
|
138
|
-
const threadList = useThreadList();
|
|
139
|
-
const hasVisibleThreads = threadList.threads.some(
|
|
140
|
-
(thread) => Boolean(thread.archived) === archived
|
|
141
|
-
);
|
|
142
|
-
if (hasVisibleThreads) {
|
|
143
|
-
return null;
|
|
144
|
-
}
|
|
145
|
-
return renderPrimitive(
|
|
146
|
-
"div",
|
|
147
|
-
{
|
|
148
|
-
...props,
|
|
149
|
-
children: props.children ?? "No conversations."
|
|
150
|
-
},
|
|
151
|
-
ref
|
|
152
|
-
);
|
|
153
|
-
});
|
|
154
|
-
var ThreadListItemRoot = forwardRef(
|
|
155
|
-
function ThreadListItemRoot2(props, ref) {
|
|
156
|
-
const item = useThreadListItem();
|
|
157
|
-
const root = useInternalThreadListRoot();
|
|
158
|
-
const composedRef = useMemo(
|
|
159
|
-
() => composeRefs(ref, (node) => root.registerItem(item.thread.id, node)),
|
|
160
|
-
[item.thread.id, ref, root]
|
|
161
|
-
);
|
|
162
|
-
return renderPrimitive(
|
|
163
|
-
"div",
|
|
164
|
-
{
|
|
165
|
-
...props,
|
|
166
|
-
"data-state": item.active ? "active" : "inactive"
|
|
167
|
-
},
|
|
168
|
-
composedRef
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
);
|
|
172
|
-
var ThreadListItemTrigger = forwardRef(
|
|
173
|
-
function ThreadListItemTrigger2({ onClick, ...props }, ref) {
|
|
174
|
-
const threadList = useThreadList();
|
|
175
|
-
const item = useThreadListItem();
|
|
176
|
-
const root = useInternalThreadListRoot();
|
|
177
|
-
const disabled = props.disabled ?? false;
|
|
178
|
-
const composedRef = useMemo(
|
|
179
|
-
() => composeRefs(ref, (node) => root.registerTrigger(item.thread.id, node)),
|
|
180
|
-
[item.thread.id, ref, root]
|
|
181
|
-
);
|
|
182
|
-
const handleClick = useCallback(
|
|
183
|
-
(event) => {
|
|
184
|
-
onClick?.(event);
|
|
185
|
-
if (event.defaultPrevented || disabled) {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
void threadList.switchThread(item.thread.id);
|
|
189
|
-
},
|
|
190
|
-
[disabled, item.thread.id, onClick, threadList]
|
|
191
|
-
);
|
|
192
|
-
return renderPrimitive(
|
|
193
|
-
"button",
|
|
194
|
-
{
|
|
195
|
-
...props,
|
|
196
|
-
children: props.children ?? /* @__PURE__ */ jsx(ThreadListItemTitle, {}),
|
|
197
|
-
disabled,
|
|
198
|
-
onClick: handleClick,
|
|
199
|
-
type: props.type ?? "button",
|
|
200
|
-
"aria-current": item.active ? "true" : void 0,
|
|
201
|
-
"data-state": disabled ? "disabled" : "enabled"
|
|
202
|
-
},
|
|
203
|
-
composedRef
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
);
|
|
207
|
-
var ThreadListItemTitle = forwardRef(
|
|
208
|
-
function ThreadListItemTitle2({ fallback = "New chat", ...props }, ref) {
|
|
209
|
-
const { thread } = useThreadListItem();
|
|
210
|
-
return renderPrimitive(
|
|
211
|
-
"span",
|
|
212
|
-
{
|
|
213
|
-
...props,
|
|
214
|
-
children: props.children ?? thread.title ?? fallback
|
|
215
|
-
},
|
|
216
|
-
ref
|
|
217
|
-
);
|
|
218
|
-
}
|
|
219
|
-
);
|
|
220
|
-
function createThreadListItemAction(action, defaultLabel) {
|
|
221
|
-
return forwardRef(function ThreadListItemAction({ onClick, ...props }, ref) {
|
|
222
|
-
const threadList = useThreadList();
|
|
223
|
-
const { thread } = useThreadListItem();
|
|
224
|
-
const root = useInternalThreadListRoot();
|
|
225
|
-
const actionHandler = threadList[action];
|
|
226
|
-
const disabled = props.disabled ?? actionHandler === void 0;
|
|
227
|
-
const handleClick = useCallback(
|
|
228
|
-
(event) => {
|
|
229
|
-
onClick?.(event);
|
|
230
|
-
if (event.defaultPrevented || disabled) {
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
focusAfterThreadItemRemoval(thread.id, root);
|
|
234
|
-
void actionHandler?.(thread.id);
|
|
235
|
-
},
|
|
236
|
-
[actionHandler, disabled, onClick, root, thread.id]
|
|
237
|
-
);
|
|
238
|
-
return renderPrimitive(
|
|
239
|
-
"button",
|
|
240
|
-
{
|
|
241
|
-
...props,
|
|
242
|
-
children: props.children ?? defaultLabel,
|
|
243
|
-
disabled,
|
|
244
|
-
onClick: handleClick,
|
|
245
|
-
type: props.type ?? "button",
|
|
246
|
-
"data-state": disabled ? "disabled" : "enabled"
|
|
247
|
-
},
|
|
248
|
-
ref
|
|
249
|
-
);
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
var ThreadListItemArchive = createThreadListItemAction("archiveThread", "Archive");
|
|
253
|
-
var ThreadListItemUnarchive = createThreadListItemAction("unarchiveThread", "Unarchive");
|
|
254
|
-
var ThreadListItemDelete = createThreadListItemAction("deleteThread", "Delete");
|
|
255
|
-
function DefaultThreadItem() {
|
|
256
|
-
return /* @__PURE__ */ jsx(ThreadListItemRoot, { children: /* @__PURE__ */ jsx(ThreadListItemTrigger, {}) });
|
|
257
|
-
}
|
|
258
|
-
function nextTriggerIndex(key, currentIndex, triggerCount) {
|
|
259
|
-
if (key === "Home") {
|
|
260
|
-
return 0;
|
|
261
|
-
}
|
|
262
|
-
if (key === "End") {
|
|
263
|
-
return triggerCount - 1;
|
|
264
|
-
}
|
|
265
|
-
if (currentIndex === -1) {
|
|
266
|
-
return key === "ArrowUp" ? triggerCount - 1 : 0;
|
|
267
|
-
}
|
|
268
|
-
if (key === "ArrowUp") {
|
|
269
|
-
return (currentIndex - 1 + triggerCount) % triggerCount;
|
|
270
|
-
}
|
|
271
|
-
return (currentIndex + 1) % triggerCount;
|
|
272
|
-
}
|
|
273
|
-
function focusAfterThreadItemRemoval(threadId, rootContext) {
|
|
274
|
-
const root = rootContext.rootRef.current;
|
|
275
|
-
const currentItem = rootContext.itemElements.current.get(threadId);
|
|
276
|
-
if (root === null || currentItem === void 0 || !currentItem.contains(root.ownerDocument.activeElement)) {
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
const triggers = orderedEnabledTriggers(rootContext);
|
|
280
|
-
const currentTrigger = rootContext.triggerElements.current.get(threadId);
|
|
281
|
-
const currentIndex = currentTrigger === void 0 ? -1 : triggers.indexOf(currentTrigger);
|
|
282
|
-
const remainingTriggers = triggers.filter((trigger) => !currentItem.contains(trigger));
|
|
283
|
-
const fallback = rootContext.newButtonRef.current;
|
|
284
|
-
const focusTarget = remainingTriggers[Math.min(Math.max(currentIndex, 0), remainingTriggers.length - 1)] ?? fallback ?? root;
|
|
285
|
-
if (focusTarget === root && !root.hasAttribute("tabindex")) {
|
|
286
|
-
root.tabIndex = -1;
|
|
287
|
-
}
|
|
288
|
-
focusTarget.focus();
|
|
289
|
-
}
|
|
290
|
-
function orderedEnabledTriggers(rootContext) {
|
|
291
|
-
return [...rootContext.triggerElements.current.values()].filter((trigger) => trigger.isConnected && !trigger.disabled).sort(
|
|
292
|
-
(left, right) => left.compareDocumentPosition(right) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1
|
|
293
|
-
);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// src/thread-list/index.ts
|
|
297
|
-
var ThreadListPrimitive = {
|
|
298
|
-
Root: ThreadListRoot,
|
|
299
|
-
New: ThreadListNew,
|
|
300
|
-
Items: ThreadListItems,
|
|
301
|
-
Empty: ThreadListEmpty
|
|
302
|
-
};
|
|
303
|
-
var ThreadListItemPrimitive = {
|
|
304
|
-
Root: ThreadListItemRoot,
|
|
305
|
-
Trigger: ThreadListItemTrigger,
|
|
306
|
-
Title: ThreadListItemTitle,
|
|
307
|
-
Archive: ThreadListItemArchive,
|
|
308
|
-
Unarchive: ThreadListItemUnarchive,
|
|
309
|
-
Delete: ThreadListItemDelete
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
export {
|
|
313
|
-
ThreadListPrimitive,
|
|
314
|
-
ThreadListItemPrimitive
|
|
315
|
-
};
|
|
316
|
-
//# sourceMappingURL=chunk-LHABOAOP.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/thread-list/parts.tsx","../src/thread-list/index.ts"],"sourcesContent":["import {\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\n\nimport {\n InternalThreadListItemProvider,\n InternalThreadListRootProvider,\n type ThreadListRecord,\n useInternalThreadListRoot,\n useThreadList,\n useThreadListItem,\n} from \"../contexts\";\nimport { composeRefs, type PrimitiveProps, renderPrimitive } from \"../primitives\";\n\ntype ThreadListRootProps = PrimitiveProps<\"div\">;\n\nconst ThreadListRoot = forwardRef<HTMLDivElement, ThreadListRootProps>(function ThreadListRoot(\n { onKeyDown, ...props },\n ref,\n) {\n const threadList = useThreadList();\n const rootRef = useRef<HTMLDivElement | null>(null);\n const newButtonRef = useRef<HTMLButtonElement | null>(null);\n const itemElements = useRef(new Map<string, HTMLDivElement>());\n const triggerElements = useRef(new Map<string, HTMLButtonElement>());\n const registerItem = useCallback((threadId: string, element: HTMLDivElement | null) => {\n if (element === null) itemElements.current.delete(threadId);\n else itemElements.current.set(threadId, element);\n }, []);\n const registerTrigger = useCallback((threadId: string, element: HTMLButtonElement | null) => {\n if (element === null) triggerElements.current.delete(threadId);\n else triggerElements.current.set(threadId, element);\n }, []);\n const rootContext = useMemo(\n () => ({\n rootRef,\n newButtonRef,\n itemElements,\n triggerElements,\n registerItem,\n registerTrigger,\n }),\n [registerItem, registerTrigger],\n );\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLDivElement>(ref, (node) => {\n rootRef.current = node;\n }),\n [ref],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || ![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) {\n return;\n }\n const triggers = orderedEnabledTriggers(rootContext);\n if (triggers.length === 0) {\n return;\n }\n event.preventDefault();\n const activeElement = document.activeElement;\n const currentIndex =\n activeElement instanceof HTMLButtonElement ? triggers.indexOf(activeElement) : -1;\n const nextIndex = nextTriggerIndex(event.key, currentIndex, triggers.length);\n triggers[nextIndex]?.focus();\n },\n [onKeyDown, rootContext],\n );\n\n return (\n <InternalThreadListRootProvider value={rootContext}>\n {renderPrimitive(\n \"div\",\n {\n ...props,\n onKeyDown: handleKeyDown,\n \"data-state\": threadList.status ?? \"idle\",\n } as PrimitiveProps<\"div\">,\n composedRef,\n )}\n </InternalThreadListRootProvider>\n );\n});\n\nconst ThreadListNew = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function ThreadListNew({ onClick, ...props }, ref) {\n const threadList = useThreadList();\n const root = useInternalThreadListRoot();\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLButtonElement>(ref, (node) => {\n root.newButtonRef.current = node;\n }),\n [ref, root.newButtonRef],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || props.disabled) {\n return;\n }\n void threadList.createThread();\n },\n [onClick, props.disabled, threadList],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"New chat\",\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": props.disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n composedRef,\n );\n },\n);\n\ntype ThreadListItemsChildren = ReactNode | ((thread: ThreadListRecord) => ReactNode);\n\ntype ThreadListItemsProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n archived?: boolean;\n children?: ThreadListItemsChildren;\n keepMounted?: boolean;\n};\n\nconst ThreadListItems = forwardRef<HTMLDivElement, ThreadListItemsProps>(function ThreadListItems(\n { archived = false, children, keepMounted = false, ...props },\n ref,\n) {\n const threadList = useThreadList();\n const threads = threadList.threads.filter((thread) => Boolean(thread.archived) === archived);\n const empty = threads.length === 0;\n if (empty && !keepMounted) {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: threads.map((thread) => (\n <InternalThreadListItemProvider\n key={thread.id}\n value={{ thread, active: thread.id === threadList.activeThreadId }}\n >\n {typeof children === \"function\" ? children(thread) : (children ?? <DefaultThreadItem />)}\n </InternalThreadListItemProvider>\n )),\n \"data-state\": empty ? \"empty\" : \"populated\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\ntype ThreadListEmptyProps = PrimitiveProps<\"div\"> & {\n archived?: boolean;\n};\n\nconst ThreadListEmpty = forwardRef<HTMLDivElement, ThreadListEmptyProps>(function ThreadListEmpty(\n { archived = false, ...props },\n ref,\n) {\n const threadList = useThreadList();\n const hasVisibleThreads = threadList.threads.some(\n (thread) => Boolean(thread.archived) === archived,\n );\n if (hasVisibleThreads) {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: props.children ?? \"No conversations.\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\nconst ThreadListItemRoot = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function ThreadListItemRoot(props, ref) {\n const item = useThreadListItem();\n const root = useInternalThreadListRoot();\n const composedRef = useMemo(\n () => composeRefs<HTMLDivElement>(ref, (node) => root.registerItem(item.thread.id, node)),\n [item.thread.id, ref, root],\n );\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n \"data-state\": item.active ? \"active\" : \"inactive\",\n } as PrimitiveProps<\"div\">,\n composedRef,\n );\n },\n);\n\nconst ThreadListItemTrigger = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function ThreadListItemTrigger({ onClick, ...props }, ref) {\n const threadList = useThreadList();\n const item = useThreadListItem();\n const root = useInternalThreadListRoot();\n const disabled = props.disabled ?? false;\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLButtonElement>(ref, (node) => root.registerTrigger(item.thread.id, node)),\n [item.thread.id, ref, root],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n void threadList.switchThread(item.thread.id);\n },\n [disabled, item.thread.id, onClick, threadList],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? <ThreadListItemTitle />,\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"aria-current\": item.active ? \"true\" : undefined,\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n composedRef,\n );\n },\n);\n\ntype ThreadListItemTitleProps = PrimitiveProps<\"span\"> & {\n fallback?: ReactNode;\n};\n\nconst ThreadListItemTitle = forwardRef<HTMLSpanElement, ThreadListItemTitleProps>(\n function ThreadListItemTitle({ fallback = \"New chat\", ...props }, ref) {\n const { thread } = useThreadListItem();\n\n return renderPrimitive(\n \"span\",\n {\n ...props,\n children: props.children ?? thread.title ?? fallback,\n } as PrimitiveProps<\"span\">,\n ref,\n );\n },\n);\n\ntype ThreadListItemActionKey = \"archiveThread\" | \"unarchiveThread\" | \"deleteThread\";\nfunction createThreadListItemAction(action: ThreadListItemActionKey, defaultLabel: string) {\n return forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(function ThreadListItemAction(\n { onClick, ...props },\n ref,\n ) {\n const threadList = useThreadList();\n const { thread } = useThreadListItem();\n const root = useInternalThreadListRoot();\n const actionHandler = threadList[action];\n const disabled = props.disabled ?? actionHandler === undefined;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n focusAfterThreadItemRemoval(thread.id, root);\n void actionHandler?.(thread.id);\n },\n [actionHandler, disabled, onClick, root, thread.id],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? defaultLabel,\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n });\n}\n\nconst ThreadListItemArchive = createThreadListItemAction(\"archiveThread\", \"Archive\");\nconst ThreadListItemUnarchive = createThreadListItemAction(\"unarchiveThread\", \"Unarchive\");\nconst ThreadListItemDelete = createThreadListItemAction(\"deleteThread\", \"Delete\");\n\nfunction DefaultThreadItem(): ReactNode {\n return (\n <ThreadListItemRoot>\n <ThreadListItemTrigger />\n </ThreadListItemRoot>\n );\n}\n\nfunction nextTriggerIndex(key: string, currentIndex: number, triggerCount: number): number {\n if (key === \"Home\") {\n return 0;\n }\n if (key === \"End\") {\n return triggerCount - 1;\n }\n if (currentIndex === -1) {\n return key === \"ArrowUp\" ? triggerCount - 1 : 0;\n }\n if (key === \"ArrowUp\") {\n return (currentIndex - 1 + triggerCount) % triggerCount;\n }\n return (currentIndex + 1) % triggerCount;\n}\n\nfunction focusAfterThreadItemRemoval(\n threadId: string,\n rootContext: ReturnType<typeof useInternalThreadListRoot>,\n): void {\n const root = rootContext.rootRef.current;\n const currentItem = rootContext.itemElements.current.get(threadId);\n if (\n root === null ||\n currentItem === undefined ||\n !currentItem.contains(root.ownerDocument.activeElement)\n ) {\n return;\n }\n\n const triggers = orderedEnabledTriggers(rootContext);\n const currentTrigger = rootContext.triggerElements.current.get(threadId);\n const currentIndex = currentTrigger === undefined ? -1 : triggers.indexOf(currentTrigger);\n const remainingTriggers = triggers.filter((trigger) => !currentItem.contains(trigger));\n const fallback = rootContext.newButtonRef.current;\n const focusTarget =\n remainingTriggers[Math.min(Math.max(currentIndex, 0), remainingTriggers.length - 1)] ??\n fallback ??\n root;\n\n if (focusTarget === root && !root.hasAttribute(\"tabindex\")) {\n root.tabIndex = -1;\n }\n focusTarget.focus();\n}\n\nfunction orderedEnabledTriggers(\n rootContext: ReturnType<typeof useInternalThreadListRoot>,\n): HTMLButtonElement[] {\n return [...rootContext.triggerElements.current.values()]\n .filter((trigger) => trigger.isConnected && !trigger.disabled)\n .sort((left, right) =>\n left.compareDocumentPosition(right) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1,\n );\n}\n\nexport {\n ThreadListEmpty,\n ThreadListItemArchive,\n ThreadListItemDelete,\n ThreadListItemRoot,\n ThreadListItems,\n ThreadListItemTitle,\n ThreadListItemTrigger,\n ThreadListItemUnarchive,\n ThreadListNew,\n ThreadListRoot,\n};\n","import {\n ThreadListEmpty,\n ThreadListItemArchive,\n ThreadListItemDelete,\n ThreadListItemRoot,\n ThreadListItems,\n ThreadListItemTitle,\n ThreadListItemTrigger,\n ThreadListItemUnarchive,\n ThreadListNew,\n ThreadListRoot,\n} from \"./parts\";\n\nexport const ThreadListPrimitive = {\n Root: ThreadListRoot,\n New: ThreadListNew,\n Items: ThreadListItems,\n Empty: ThreadListEmpty,\n} as const;\n\nexport const ThreadListItemPrimitive = {\n Root: ThreadListItemRoot,\n Trigger: ThreadListItemTrigger,\n Title: ThreadListItemTitle,\n Archive: ThreadListItemArchive,\n Unarchive: ThreadListItemUnarchive,\n Delete: ThreadListItemDelete,\n} as const;\n\nexport type {\n ThreadListController,\n ThreadListItemContextValue,\n ThreadListProviderProps,\n ThreadListRecord,\n} from \"../contexts\";\nexport { ThreadListProvider, useThreadList, useThreadListItem } from \"../contexts\";\n"],"mappings":"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","names":["ThreadListRoot","ThreadListNew","ThreadListItems","ThreadListEmpty","ThreadListItemRoot","ThreadListItemTrigger","ThreadListItemTitle"]}
|