@lemoncat7/dsh-partner 1.6.0 → 1.6.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/README.md +8 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +1379 -1321
- package/lib/client.js.map +4 -4
- package/lib/ui/companion-picker.d.ts +8 -0
- package/lib/ui/companion-picker.d.ts.map +1 -0
- package/lib/ui/companion-picker.js +70 -0
- package/lib/ui/companion-picker.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CompanionView } from '../client-api.js';
|
|
2
|
+
/** Local, themed listbox: no platform select popup or second CSS arrow. */
|
|
3
|
+
export declare function CompanionPicker({ companions, selectedId, onChange }: {
|
|
4
|
+
companions: Pick<CompanionView, 'id' | 'name' | 'role'>[];
|
|
5
|
+
selectedId: string | undefined;
|
|
6
|
+
onChange(id: string): void;
|
|
7
|
+
}): JSX.Element;
|
|
8
|
+
//# sourceMappingURL=companion-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"companion-picker.d.ts","sourceRoot":"","sources":["../../src/ui/companion-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGrD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;IACpE,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzD,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B,GAAG,GAAG,CAAC,OAAO,CA+Dd"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useId, useRef, useState } from 'react';
|
|
3
|
+
import { IconCheckOutline14, IconChevronDownOutline14 } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
|
+
import { Avatar } from './partner-components.js';
|
|
5
|
+
/** Local, themed listbox: no platform select popup or second CSS arrow. */
|
|
6
|
+
export function CompanionPicker({ companions, selectedId, onChange }) {
|
|
7
|
+
const [open, setOpen] = useState(false);
|
|
8
|
+
const root = useRef(null);
|
|
9
|
+
const trigger = useRef(null);
|
|
10
|
+
const list = useRef(null);
|
|
11
|
+
const listId = useId();
|
|
12
|
+
const current = companions.find(item => item.id === selectedId) ?? companions[0];
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!open)
|
|
15
|
+
return;
|
|
16
|
+
const options = list.current?.querySelectorAll('[role="option"]');
|
|
17
|
+
const selected = Math.max(0, companions.findIndex(item => item.id === selectedId));
|
|
18
|
+
options?.[selected]?.focus({ preventScroll: true });
|
|
19
|
+
options?.[selected]?.scrollIntoView({ block: 'nearest' });
|
|
20
|
+
const outside = (event) => {
|
|
21
|
+
if (!root.current?.contains(event.target))
|
|
22
|
+
setOpen(false);
|
|
23
|
+
};
|
|
24
|
+
const close = () => setOpen(false);
|
|
25
|
+
const desktop = window.matchMedia('(min-width: 761px)');
|
|
26
|
+
document.addEventListener('pointerdown', outside);
|
|
27
|
+
window.addEventListener('blur', close);
|
|
28
|
+
desktop.addEventListener('change', close);
|
|
29
|
+
return () => {
|
|
30
|
+
document.removeEventListener('pointerdown', outside);
|
|
31
|
+
window.removeEventListener('blur', close);
|
|
32
|
+
desktop.removeEventListener('change', close);
|
|
33
|
+
};
|
|
34
|
+
}, [open, companions, selectedId]);
|
|
35
|
+
const dismiss = () => { setOpen(false); trigger.current?.focus({ preventScroll: true }); };
|
|
36
|
+
const navigate = (event) => {
|
|
37
|
+
if (event.key === 'Escape') {
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
event.stopPropagation();
|
|
40
|
+
dismiss();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const options = Array.from(list.current?.querySelectorAll('[role="option"]') ?? []);
|
|
44
|
+
const index = options.indexOf(document.activeElement);
|
|
45
|
+
let next;
|
|
46
|
+
if (event.key === 'ArrowDown')
|
|
47
|
+
next = (index + 1) % options.length;
|
|
48
|
+
else if (event.key === 'ArrowUp')
|
|
49
|
+
next = (index - 1 + options.length) % options.length;
|
|
50
|
+
else if (event.key === 'Home')
|
|
51
|
+
next = 0;
|
|
52
|
+
else if (event.key === 'End')
|
|
53
|
+
next = options.length - 1;
|
|
54
|
+
else
|
|
55
|
+
return;
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
options[next]?.focus({ preventScroll: true });
|
|
58
|
+
options[next]?.scrollIntoView({ block: 'nearest' });
|
|
59
|
+
};
|
|
60
|
+
return _jsxs("div", { className: "dsh-partner-companion-picker", ref: root, onBlur: event => {
|
|
61
|
+
if (!event.currentTarget.contains(event.relatedTarget))
|
|
62
|
+
setOpen(false);
|
|
63
|
+
}, children: [_jsxs("button", { ref: trigger, type: "button", className: "dsh-partner-companion-trigger", "aria-label": `切换当前伙伴${current ? `:${current.name}` : ''}`, "aria-haspopup": "listbox", "aria-expanded": open, "aria-controls": open ? listId : undefined, disabled: !current, onClick: () => setOpen(value => !value), onKeyDown: event => {
|
|
64
|
+
if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
setOpen(true);
|
|
67
|
+
}
|
|
68
|
+
}, children: [current && _jsx(Avatar, { name: current.name, small: true }), _jsxs("span", { className: "dsh-partner-companion-copy", children: [_jsx("strong", { children: current?.name ?? '还没有伙伴' }), _jsx("small", { children: current?.role || '选择伙伴' })] }), _jsx("span", { className: "dsh-partner-companion-chevron", "aria-hidden": "true", children: _jsx(IconChevronDownOutline14, { size: 14 }) })] }), open && _jsx("div", { ref: list, id: listId, role: "listbox", "aria-label": "\u9009\u62E9\u4F19\u4F34", className: "dsh-partner-companion-options", onKeyDown: navigate, children: companions.map(item => _jsxs("button", { type: "button", role: "option", "aria-selected": item.id === current?.id, tabIndex: item.id === current?.id ? 0 : -1, onClick: () => { dismiss(); onChange(item.id); }, children: [_jsx(Avatar, { name: item.name, small: true }), _jsxs("span", { className: "dsh-partner-companion-copy", children: [_jsx("strong", { children: item.name }), _jsx("small", { children: item.role })] }), _jsx("span", { className: "dsh-partner-companion-check", "aria-hidden": "true", children: item.id === current?.id && _jsx(IconCheckOutline14, { size: 14 }) })] }, item.id)) })] });
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=companion-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"companion-picker.js","sourceRoot":"","sources":["../../src/ui/companion-picker.tsx"],"names":[],"mappings":"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"}
|