@wzrhine/agent 0.1.0 → 0.2.0
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/CHANGELOG.md +18 -1
- package/dist/agent.css +1 -0
- package/dist/components/artifact/ArtifactCard.d.ts +3 -0
- package/dist/components/artifact/ArtifactCard.d.ts.map +1 -1
- package/dist/components/artifact/ArtifactCard.js +4 -3
- package/dist/components/artifact/ArtifactCard.js.map +1 -1
- package/dist/components/artifact/FilePreview.d.ts +4 -0
- package/dist/components/artifact/FilePreview.d.ts.map +1 -1
- package/dist/components/artifact/FilePreview.js +8 -2
- package/dist/components/artifact/FilePreview.js.map +1 -1
- package/dist/components/composer/AttachmentList.d.ts.map +1 -1
- package/dist/components/composer/AttachmentList.js +7 -3
- package/dist/components/composer/AttachmentList.js.map +1 -1
- package/dist/components/composer/Composer.d.ts +7 -1
- package/dist/components/composer/Composer.d.ts.map +1 -1
- package/dist/components/composer/Composer.js +18 -9
- package/dist/components/composer/Composer.js.map +1 -1
- package/dist/components/composer/ComposerInput.d.ts +2 -0
- package/dist/components/composer/ComposerInput.d.ts.map +1 -1
- package/dist/components/composer/ComposerInput.js +3 -3
- package/dist/components/composer/ComposerInput.js.map +1 -1
- package/dist/components/composer/MentionMenu.d.ts.map +1 -1
- package/dist/components/composer/MentionMenu.js +2 -1
- package/dist/components/composer/MentionMenu.js.map +1 -1
- package/dist/components/composer/ModelPicker.d.ts +15 -2
- package/dist/components/composer/ModelPicker.d.ts.map +1 -1
- package/dist/components/composer/ModelPicker.js +20 -9
- package/dist/components/composer/ModelPicker.js.map +1 -1
- package/dist/components/composer/PermissionPicker.d.ts +5 -1
- package/dist/components/composer/PermissionPicker.d.ts.map +1 -1
- package/dist/components/composer/PermissionPicker.js +13 -5
- package/dist/components/composer/PermissionPicker.js.map +1 -1
- package/dist/components/composer/ReferencePicker.d.ts +31 -0
- package/dist/components/composer/ReferencePicker.d.ts.map +1 -0
- package/dist/components/composer/ReferencePicker.js +50 -0
- package/dist/components/composer/ReferencePicker.js.map +1 -0
- package/dist/components/composer/SendStopButton.d.ts +2 -0
- package/dist/components/composer/SendStopButton.d.ts.map +1 -1
- package/dist/components/composer/SendStopButton.js +3 -2
- package/dist/components/composer/SendStopButton.js.map +1 -1
- package/dist/components/composer/SkillPicker.d.ts +26 -0
- package/dist/components/composer/SkillPicker.d.ts.map +1 -0
- package/dist/components/composer/SkillPicker.js +26 -0
- package/dist/components/composer/SkillPicker.js.map +1 -0
- package/dist/components/conversation/ConversationList.d.ts +6 -0
- package/dist/components/conversation/ConversationList.d.ts.map +1 -1
- package/dist/components/conversation/ConversationList.js +4 -4
- package/dist/components/conversation/ConversationList.js.map +1 -1
- package/dist/components/intervention/ErrorRecoveryNotice.d.ts.map +1 -1
- package/dist/components/intervention/ErrorRecoveryNotice.js +3 -2
- package/dist/components/intervention/ErrorRecoveryNotice.js.map +1 -1
- package/dist/components/intervention/QuestionnaireCard.d.ts +22 -1
- package/dist/components/intervention/QuestionnaireCard.d.ts.map +1 -1
- package/dist/components/intervention/QuestionnaireCard.js +23 -12
- package/dist/components/intervention/QuestionnaireCard.js.map +1 -1
- package/dist/components/intervention/questionnaire-answers.d.ts +5 -0
- package/dist/components/intervention/questionnaire-answers.d.ts.map +1 -1
- package/dist/components/intervention/questionnaire-answers.js +16 -0
- package/dist/components/intervention/questionnaire-answers.js.map +1 -1
- package/dist/components/message/CitationChip.d.ts +4 -0
- package/dist/components/message/CitationChip.d.ts.map +1 -1
- package/dist/components/message/CitationChip.js +6 -4
- package/dist/components/message/CitationChip.js.map +1 -1
- package/dist/components/message/CodeBlock.d.ts.map +1 -1
- package/dist/components/message/CodeBlock.js +2 -2
- package/dist/components/message/CodeBlock.js.map +1 -1
- package/dist/components/message/MessageActions.d.ts +4 -0
- package/dist/components/message/MessageActions.d.ts.map +1 -1
- package/dist/components/message/MessageActions.js +3 -3
- package/dist/components/message/MessageActions.js.map +1 -1
- package/dist/components/message/MessageList.d.ts +6 -0
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +68 -7
- package/dist/components/message/MessageList.js.map +1 -1
- package/dist/components/message/MessagePart.d.ts.map +1 -1
- package/dist/components/message/MessagePart.js +8 -4
- package/dist/components/message/MessagePart.js.map +1 -1
- package/dist/components/message/use-copy.d.ts +1 -0
- package/dist/components/message/use-copy.d.ts.map +1 -1
- package/dist/components/message/use-copy.js +3 -1
- package/dist/components/message/use-copy.js.map +1 -1
- package/dist/components/shell/AgentHeader.d.ts.map +1 -1
- package/dist/components/shell/AgentHeader.js +6 -1
- package/dist/components/shell/AgentHeader.js.map +1 -1
- package/dist/components/shell/AgentShell.d.ts +16 -0
- package/dist/components/shell/AgentShell.d.ts.map +1 -1
- package/dist/components/shell/AgentShell.js +9 -5
- package/dist/components/shell/AgentShell.js.map +1 -1
- package/dist/components/shell/ResizeHandle.d.ts +4 -0
- package/dist/components/shell/ResizeHandle.d.ts.map +1 -1
- package/dist/components/shell/ResizeHandle.js +14 -4
- package/dist/components/shell/ResizeHandle.js.map +1 -1
- package/dist/components/shell/use-controllable.d.ts +1 -1
- package/dist/components/shell/use-controllable.d.ts.map +1 -1
- package/dist/components/tools/DiffPreview.js +2 -2
- package/dist/components/tools/DiffPreview.js.map +1 -1
- package/dist/components/tools/ToolDetails.d.ts +16 -4
- package/dist/components/tools/ToolDetails.d.ts.map +1 -1
- package/dist/components/tools/ToolDetails.js +28 -17
- package/dist/components/tools/ToolDetails.js.map +1 -1
- package/dist/components/tools/ToolRecord.d.ts +4 -0
- package/dist/components/tools/ToolRecord.d.ts.map +1 -1
- package/dist/components/tools/ToolRecord.js +4 -3
- package/dist/components/tools/ToolRecord.js.map +1 -1
- package/dist/components/tools/shared.d.ts +1 -1
- package/dist/components/tools/shared.d.ts.map +1 -1
- package/dist/components/tools/shared.js +1 -1
- package/dist/components/tools/shared.js.map +1 -1
- package/dist/components/workspace/ContextUsage.d.ts +6 -0
- package/dist/components/workspace/ContextUsage.d.ts.map +1 -1
- package/dist/components/workspace/ContextUsage.js +8 -8
- package/dist/components/workspace/ContextUsage.js.map +1 -1
- package/dist/components/workspace/RunOverview.d.ts +29 -0
- package/dist/components/workspace/RunOverview.d.ts.map +1 -0
- package/dist/components/workspace/RunOverview.js +20 -0
- package/dist/components/workspace/RunOverview.js.map +1 -0
- package/dist/components/workspace/SubAgentCard.d.ts +5 -1
- package/dist/components/workspace/SubAgentCard.d.ts.map +1 -1
- package/dist/components/workspace/SubAgentCard.js +10 -5
- package/dist/components/workspace/SubAgentCard.js.map +1 -1
- package/dist/components/workspace/TerminalRow.d.ts +13 -3
- package/dist/components/workspace/TerminalRow.d.ts.map +1 -1
- package/dist/components/workspace/TerminalRow.js +8 -5
- package/dist/components/workspace/TerminalRow.js.map +1 -1
- package/dist/components/workspace/shared.d.ts +6 -2
- package/dist/components/workspace/shared.d.ts.map +1 -1
- package/dist/components/workspace/shared.js +8 -3
- package/dist/components/workspace/shared.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/primitives/StatusGlyph.d.ts +8 -2
- package/dist/primitives/StatusGlyph.d.ts.map +1 -1
- package/dist/primitives/StatusGlyph.js +2 -2
- package/dist/primitives/StatusGlyph.js.map +1 -1
- package/dist/primitives/icons.d.ts +8 -2
- package/dist/primitives/icons.d.ts.map +1 -1
- package/dist/primitives/icons.js +2 -2
- package/dist/primitives/icons.js.map +1 -1
- package/dist/provider/AgentMessages.d.ts +11 -1
- package/dist/provider/AgentMessages.d.ts.map +1 -1
- package/dist/provider/AgentMessages.js +6 -2
- package/dist/provider/AgentMessages.js.map +1 -1
- package/dist/provider/messages/composer.d.ts +27 -5
- package/dist/provider/messages/composer.d.ts.map +1 -1
- package/dist/provider/messages/composer.js +12 -2
- package/dist/provider/messages/composer.js.map +1 -1
- package/dist/provider/messages/intervention.d.ts +5 -4
- package/dist/provider/messages/intervention.d.ts.map +1 -1
- package/dist/provider/messages/intervention.js.map +1 -1
- package/dist/provider/messages/message.d.ts +5 -4
- package/dist/provider/messages/message.d.ts.map +1 -1
- package/dist/provider/messages/message.js.map +1 -1
- package/dist/provider/messages/status.d.ts +2 -1
- package/dist/provider/messages/status.d.ts.map +1 -1
- package/dist/provider/messages/status.js.map +1 -1
- package/dist/provider/messages/tools.d.ts +7 -0
- package/dist/provider/messages/tools.d.ts.map +1 -1
- package/dist/provider/messages/tools.js +14 -0
- package/dist/provider/messages/tools.js.map +1 -1
- package/dist/provider/messages/workspace.d.ts +12 -1
- package/dist/provider/messages/workspace.d.ts.map +1 -1
- package/dist/provider/messages/workspace.js +8 -0
- package/dist/provider/messages/workspace.js.map +1 -1
- package/dist/styles/shell.css +12 -0
- package/dist/styles/workspace.css +3 -0
- package/dist/styles/wpi-adoption.css +24 -0
- package/package.json +7 -7
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface ReferenceOption {
|
|
3
|
+
path: string;
|
|
4
|
+
name: string;
|
|
5
|
+
kind?: 'file' | 'folder';
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export type ReferencePickerProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
9
|
+
value?: string;
|
|
10
|
+
onValueChange?: (value: string) => void;
|
|
11
|
+
items?: readonly ReferenceOption[];
|
|
12
|
+
open?: boolean;
|
|
13
|
+
defaultOpen?: boolean;
|
|
14
|
+
onOpenChange?: (open: boolean) => void;
|
|
15
|
+
anchor?: React.RefObject<HTMLElement | null> | HTMLElement;
|
|
16
|
+
hideTrigger?: boolean;
|
|
17
|
+
onAdd: (path: string) => Promise<boolean> | boolean;
|
|
18
|
+
onNavigate?: (path: string) => void;
|
|
19
|
+
onUp?: () => void;
|
|
20
|
+
onSearch?: (query: string) => void;
|
|
21
|
+
loading?: boolean;
|
|
22
|
+
error?: React.ReactNode;
|
|
23
|
+
truncated?: boolean;
|
|
24
|
+
hasMore?: boolean;
|
|
25
|
+
loadingMore?: boolean;
|
|
26
|
+
onLoadMore?: () => void;
|
|
27
|
+
onRetry?: () => void;
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
};
|
|
30
|
+
export declare function ReferencePicker({ value: valueProp, onValueChange, items, open: openProp, defaultOpen, onOpenChange, anchor, hideTrigger, onAdd, onNavigate, onUp, onSearch, loading, error, truncated, hasMore, loadingMore, onLoadMore, onRetry, disabled, className, ...rest }: ReferencePickerProps): React.JSX.Element;
|
|
31
|
+
//# sourceMappingURL=ReferencePicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReferencePicker.d.ts","sourceRoot":"","sources":["../../../src/components/composer/ReferencePicker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,eAAe;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAAE;AAC9G,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAAG;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACpD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,KAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,WAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAe,EAAE,KAAK,EAAE,SAAiB,EAAE,OAAe,EAAE,WAAmB,EAAE,UAAU,EAAE,OAAO,EAAE,QAAgB,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,oBAAoB,qBA0C3V"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Button, Input, Popover } from '@wzrhine/react';
|
|
5
|
+
import { useAgentMessages } from '../../provider/AgentMessages.js';
|
|
6
|
+
import { cx } from '../../utils/cx.js';
|
|
7
|
+
export function ReferencePicker({ value: valueProp, onValueChange, items = [], open: openProp, defaultOpen, onOpenChange, anchor, hideTrigger = false, onAdd, onNavigate, onUp, onSearch, loading = false, error, truncated = false, hasMore = false, loadingMore = false, onLoadMore, onRetry, disabled = false, className, ...rest }) {
|
|
8
|
+
const m = useAgentMessages().composer;
|
|
9
|
+
const [issue, setIssue] = React.useState(null);
|
|
10
|
+
const [innerValue, setInnerValue] = React.useState(valueProp ?? '');
|
|
11
|
+
const [innerOpen, setInnerOpen] = React.useState(defaultOpen ?? false);
|
|
12
|
+
const [adding, setAdding] = React.useState(false);
|
|
13
|
+
const addAttempt = React.useRef(0);
|
|
14
|
+
const composing = React.useRef(false);
|
|
15
|
+
const value = valueProp ?? innerValue;
|
|
16
|
+
const open = openProp ?? innerOpen;
|
|
17
|
+
const trigger = hideTrigger ? undefined : _jsx(Button, { size: "sm", variant: "ghost", disabled: disabled, children: m.referencePicker.add });
|
|
18
|
+
const setOpen = (next) => { addAttempt.current += 1; setAdding(false); if (openProp === undefined)
|
|
19
|
+
setInnerOpen(next); onOpenChange?.(next); };
|
|
20
|
+
const add = async (path) => {
|
|
21
|
+
const candidate = path.trim();
|
|
22
|
+
if (disabled || adding || !candidate)
|
|
23
|
+
return;
|
|
24
|
+
const attempt = ++addAttempt.current;
|
|
25
|
+
setAdding(true);
|
|
26
|
+
setIssue(null);
|
|
27
|
+
try {
|
|
28
|
+
const ok = await onAdd(candidate);
|
|
29
|
+
if (addAttempt.current !== attempt)
|
|
30
|
+
return;
|
|
31
|
+
if (ok)
|
|
32
|
+
setOpen(false);
|
|
33
|
+
else
|
|
34
|
+
setIssue(m.referencePicker.error);
|
|
35
|
+
}
|
|
36
|
+
catch (reason) {
|
|
37
|
+
if (addAttempt.current !== attempt)
|
|
38
|
+
return;
|
|
39
|
+
setIssue(reason instanceof Error ? reason.message : m.referencePicker.error);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
if (addAttempt.current === attempt)
|
|
43
|
+
setAdding(false);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
return _jsx("div", { ...rest, className: cx('rl-agent-reference-picker', className), children: _jsx(Popover, { trigger: trigger, anchor: anchor, open: open, onOpenChange: setOpen, title: m.referencePicker.label, initialFocus: false, children: _jsxs("form", { className: "rl-agent-reference-picker__body", onSubmit: (event) => { event.preventDefault(); if (!composing.current)
|
|
47
|
+
void add(value); }, children: [_jsx(Input, { "aria-label": m.referencePicker.search, value: value, onValueChange: (next) => { addAttempt.current += 1; setAdding(false); if (valueProp === undefined)
|
|
48
|
+
setInnerValue(next); onValueChange?.(next); onSearch?.(next); }, disabled: disabled || adding, onCompositionStart: () => { composing.current = true; }, onCompositionEnd: () => { composing.current = false; } }), _jsx("div", { className: "rl-agent-reference-picker__actions", children: onUp && _jsx(Button, { size: "sm", variant: "ghost", disabled: adding, onClick: () => { addAttempt.current += 1; setAdding(false); onUp(); }, children: m.referencePicker.up }) }), _jsx(Button, { size: "sm", variant: "secondary", type: "submit", disabled: disabled || adding || value.trim() === '', children: m.referencePicker.add }), loading ? _jsx("p", { role: "status", children: m.referencePicker.loading }) : error || issue ? _jsxs("div", { role: "alert", children: [_jsx("p", { children: error || issue }), onRetry && _jsx(Button, { size: "sm", variant: "ghost", onClick: onRetry, children: m.retry })] }) : items.length === 0 ? _jsx("p", { children: m.referencePicker.empty }) : _jsx("ul", { children: items.map((item) => _jsx("li", { children: _jsx("button", { type: "button", disabled: item.disabled || adding, onClick: () => item.kind === 'folder' ? onNavigate?.(item.path) : void add(item.path), children: item.name }) }, item.path)) }), truncated && _jsx("p", { role: "status", children: m.referencePicker.truncated }), hasMore && onLoadMore && _jsx(Button, { size: "sm", variant: "ghost", loading: loadingMore, disabled: loadingMore || disabled, onClick: onLoadMore, children: m.loadMore })] }) }) });
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=ReferencePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReferencePicker.js","sourceRoot":"","sources":["../../../src/components/composer/ReferencePicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ export type SendStopButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElem
|
|
|
22
22
|
onRetry?: (kind: 'send' | 'stop', actionId: string | undefined) => void;
|
|
23
23
|
/** Draft save failed: the button becomes 重试保存. */
|
|
24
24
|
onRetrySave?: () => void;
|
|
25
|
+
retryBusy?: boolean;
|
|
25
26
|
/** Why sending is not possible; shown in the tooltip and linked with aria-describedby. */
|
|
26
27
|
disabledReason?: string;
|
|
27
28
|
/** Override labels per state. */
|
|
@@ -61,6 +62,7 @@ export declare const SendStopButton: React.ForwardRefExoticComponent<Omit<React.
|
|
|
61
62
|
onRetry?: (kind: "send" | "stop", actionId: string | undefined) => void;
|
|
62
63
|
/** Draft save failed: the button becomes 重试保存. */
|
|
63
64
|
onRetrySave?: () => void;
|
|
65
|
+
retryBusy?: boolean;
|
|
64
66
|
/** Why sending is not possible; shown in the tooltip and linked with aria-describedby. */
|
|
65
67
|
disabledReason?: string;
|
|
66
68
|
/** Override labels per state. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SendStopButton.d.ts","sourceRoot":"","sources":["../../../src/components/composer/SendStopButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAM/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,KAAK,sBAAsB,GAAG,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;AAEtI,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,sBAAsB,CACrF,GAAG;IACF,qFAAqF;IACrF,OAAO,EAAE,OAAO,CAAC;IACjB,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IAC3C,qGAAqG;IACrG,WAAW,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IAC3C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACxE,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc;
|
|
1
|
+
{"version":3,"file":"SendStopButton.d.ts","sourceRoot":"","sources":["../../../src/components/composer/SendStopButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAM/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,KAAK,sBAAsB,GAAG,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;AAEtI,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,sBAAsB,CACrF,GAAG;IACF,qFAAqF;IACrF,OAAO,EAAE,OAAO,CAAC;IACjB,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IAC3C,qGAAqG;IACrG,WAAW,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IAC3C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACxE,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc;IA7CzB,qFAAqF;aAC5E,OAAO;IAChB,gGAAgG;WACzF,MAAM,GAAG,MAAM;gBACV,SAAS;IACrB,0EAA0E;kBAC5D,aAAa,GAAG,YAAY;IAC1C,qGAAqG;kBACvF,aAAa,GAAG,YAAY;kBAC5B,WAAW;aAChB,MAAM,IAAI;aACV,MAAM,IAAI;IACnB;;;OAGG;cACO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI;IACvE,kDAAkD;kBACpC,MAAM,IAAI;gBACZ,OAAO;IACnB,0FAA0F;qBACzE,MAAM;IACvB,iCAAiC;aACxB,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;gBACjE,MAAM;2CAwIlB,CAAC"}
|
|
@@ -26,7 +26,7 @@ function toReceipt(input) {
|
|
|
26
26
|
* (`useSwapTransition`: in `base`, out `fast`); a fast toggle continues from the current
|
|
27
27
|
* opacity. Reduced motion → instant swap. Press feedback matches IconButton.
|
|
28
28
|
*/
|
|
29
|
-
export const SendStopButton = React.forwardRef(function SendStopButton({ canSend, mode, runStatus, sendReceipt, stopReceipt, draftStatus, onSend, onStop, onRetry, onRetrySave, disabledReason, labels, className, 'aria-describedby': describedByProp, ...rest }, ref) {
|
|
29
|
+
export const SendStopButton = React.forwardRef(function SendStopButton({ canSend, mode, runStatus, sendReceipt, stopReceipt, draftStatus, onSend, onStop, onRetry, onRetrySave, retryBusy = false, disabledReason, labels, className, 'aria-describedby': describedByProp, ...rest }, ref) {
|
|
30
30
|
const messages = useAgentMessages().composer;
|
|
31
31
|
const { enter, exit } = useSwapTransition();
|
|
32
32
|
const { reduced, get } = useRhineMotion();
|
|
@@ -47,7 +47,8 @@ export const SendStopButton = React.forwardRef(function SendStopButton({ canSend
|
|
|
47
47
|
retryable: unknown?.retryable,
|
|
48
48
|
hasRetrySave: onRetrySave !== undefined,
|
|
49
49
|
});
|
|
50
|
-
const { state, enabled, action, icon } = resolved;
|
|
50
|
+
const { state, enabled: resolvedEnabled, action, icon } = resolved;
|
|
51
|
+
const enabled = retryBusy && state === 'retry-save' ? false : resolvedEnabled;
|
|
51
52
|
const label = state === 'send'
|
|
52
53
|
? (labels?.send ?? messages.send)
|
|
53
54
|
: state === 'sending'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SendStopButton.js","sourceRoot":"","sources":["../../../src/components/composer/SendStopButton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"SendStopButton.js","sourceRoot":"","sources":["../../../src/components/composer/SendStopButton.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface SkillOption {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
source?: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
disabledReason?: string;
|
|
8
|
+
}
|
|
9
|
+
export type SkillPickerProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'onChange'> & {
|
|
10
|
+
skills: readonly SkillOption[];
|
|
11
|
+
selected: readonly SkillOption[];
|
|
12
|
+
onChange: (skills: SkillOption[]) => void;
|
|
13
|
+
max?: number;
|
|
14
|
+
open?: boolean;
|
|
15
|
+
defaultOpen?: boolean;
|
|
16
|
+
onOpenChange?: (open: boolean) => void;
|
|
17
|
+
anchor?: React.RefObject<HTMLElement | null> | HTMLElement;
|
|
18
|
+
hideTrigger?: boolean;
|
|
19
|
+
loading?: boolean;
|
|
20
|
+
error?: React.ReactNode;
|
|
21
|
+
onRetry?: () => void;
|
|
22
|
+
onLimitReached?: (max: number) => void;
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
};
|
|
25
|
+
export declare function SkillPicker({ skills, selected, onChange, max, open, defaultOpen, onOpenChange, anchor, hideTrigger, loading, error, onRetry, onLimitReached, disabled, className, ...rest }: SkillPickerProps): React.JSX.Element;
|
|
26
|
+
//# sourceMappingURL=SkillPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillPicker.d.ts","sourceRoot":"","sources":["../../../src/components/composer/SkillPicker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,WAAW;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAAE;AACzH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;IACnG,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IACjC,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,WAAmB,EAAE,OAAe,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAgB,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,qBAuBzO"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button, Popover, Tag } from '@wzrhine/react';
|
|
4
|
+
import { useAgentMessages } from '../../provider/AgentMessages.js';
|
|
5
|
+
import { cx } from '../../utils/cx.js';
|
|
6
|
+
export function SkillPicker({ skills, selected, onChange, max = 4, open, defaultOpen, onOpenChange, anchor, hideTrigger = false, loading = false, error, onRetry, onLimitReached, disabled = false, className, ...rest }) {
|
|
7
|
+
const m = useAgentMessages().composer;
|
|
8
|
+
const trigger = hideTrigger ? undefined : _jsx(Button, { size: "sm", variant: "ghost", disabled: disabled, children: m.skillPicker.add });
|
|
9
|
+
const selectedIds = new Set(selected.map((item) => item.id));
|
|
10
|
+
const choose = (item) => {
|
|
11
|
+
if (disabled)
|
|
12
|
+
return;
|
|
13
|
+
if (selectedIds.has(item.id)) {
|
|
14
|
+
// An invalid/stale selection remains removable even though the option itself is disabled.
|
|
15
|
+
onChange(selected.filter((entry) => entry.id !== item.id));
|
|
16
|
+
}
|
|
17
|
+
else if (!item.disabled) {
|
|
18
|
+
if (selected.length < max)
|
|
19
|
+
onChange([...selected, item]);
|
|
20
|
+
else
|
|
21
|
+
onLimitReached?.(max);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
return _jsxs("div", { ...rest, className: cx('rl-agent-skill-picker', className), children: [_jsxs(Popover, { trigger: trigger, anchor: anchor, open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange, title: m.skillPicker.label, initialFocus: false, children: [_jsx("div", { role: "listbox", "aria-label": m.skillPicker.label, "aria-multiselectable": "true", children: loading ? _jsx("p", { role: "status", children: m.skillPicker.loading }) : error ? _jsxs("div", { role: "alert", children: [_jsx("p", { children: error === true ? m.skillPicker.error : error }), onRetry && _jsx(Button, { size: "sm", variant: "ghost", onClick: onRetry, children: m.retry })] }) : skills.length === 0 ? _jsx("p", { children: m.skillPicker.empty }) : skills.map((item) => _jsxs("button", { type: "button", role: "option", "aria-selected": selectedIds.has(item.id), "aria-disabled": item.disabled || undefined, disabled: item.disabled && !selectedIds.has(item.id), title: item.disabledReason, onClick: () => choose(item), children: [_jsx("span", { children: item.label }), item.source && _jsx("small", { children: item.source })] }, item.id)) }), _jsx("p", { className: "rl-agent-skill-picker__limit", children: m.skillPicker.limit(String(max)) })] }), selected.length > 0 && _jsx("div", { className: "rl-agent-skill-picker__selected", "aria-label": m.skillPicker.label, children: selected.map((item) => _jsx(Tag, { tone: item.disabled ? 'invalid' : 'neutral', onRemove: () => choose(item), disabled: disabled, children: item.label }, item.id)) })] });
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=SkillPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillPicker.js","sourceRoot":"","sources":["../../../src/components/composer/SkillPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,9 @@ export type ConversationListProps = Omit<React.HTMLAttributes<HTMLDivElement>, '
|
|
|
53
53
|
now?: Date;
|
|
54
54
|
/** Number of skeleton rows while loading. */
|
|
55
55
|
skeletonRows?: number;
|
|
56
|
+
collapsibleGroups?: boolean;
|
|
57
|
+
collapsedGroups?: readonly string[];
|
|
58
|
+
onCollapsedGroupsChange?: (groups: string[]) => void;
|
|
56
59
|
};
|
|
57
60
|
export declare const ConversationList: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children" | "onSelect"> & {
|
|
58
61
|
sections: ConversationSection[];
|
|
@@ -84,5 +87,8 @@ export declare const ConversationList: React.ForwardRefExoticComponent<Omit<Reac
|
|
|
84
87
|
now?: Date;
|
|
85
88
|
/** Number of skeleton rows while loading. */
|
|
86
89
|
skeletonRows?: number;
|
|
90
|
+
collapsibleGroups?: boolean;
|
|
91
|
+
collapsedGroups?: readonly string[];
|
|
92
|
+
onCollapsedGroupsChange?: (groups: string[]) => void;
|
|
87
93
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
88
94
|
//# sourceMappingURL=ConversationList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationList.d.ts","sourceRoot":"","sources":["../../../src/components/conversation/ConversationList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAKjF,OAAO,KAAK,EAA8B,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;IACxG,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gEAAgE;IAChE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5D,KAAK,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC5C,iFAAiF;IACjF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC;IACjD,+DAA+D;IAC/D,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,wDAAwD;IACxD,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationList.d.ts","sourceRoot":"","sources":["../../../src/components/conversation/ConversationList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { motion } from 'motion/react';
|
|
5
|
-
import { Alert, Button, EmptyState, Input, Skeleton } from '@wzrhine/react';
|
|
5
|
+
import { Alert, Button, Collapsible, EmptyState, Input, Skeleton } from '@wzrhine/react';
|
|
6
6
|
import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
|
|
7
7
|
import { AgentIcon } from '../../primitives/icons.js';
|
|
8
8
|
import { cx } from '../../utils/cx.js';
|
|
9
9
|
import { ConversationRow, ConversationRowContext } from './ConversationRow.js';
|
|
10
10
|
const ROW_SELECTOR = '.rl-agent-row__main';
|
|
11
|
-
export const ConversationList = React.forwardRef(function ConversationList({ sections, selectedId, onSelect, search, onSearchChange, loading = false, error, onRetry, renderActions, onPin, onArchive, onUnarchive, onDelete, isDisabled, headingLevel = 2, label, empty, now, skeletonRows = 5, className, ...rest }, ref) {
|
|
11
|
+
export const ConversationList = React.forwardRef(function ConversationList({ sections, selectedId, onSelect, search, onSearchChange, loading = false, error, onRetry, renderActions, onPin, onArchive, onUnarchive, onDelete, isDisabled, headingLevel = 2, label, empty, now, skeletonRows = 5, collapsibleGroups = false, collapsedGroups = [], onCollapsedGroupsChange, className, ...rest }, ref) {
|
|
12
12
|
const shell = useAgentMessages().shell;
|
|
13
13
|
const format = useAgentFormat();
|
|
14
14
|
const uid = React.useId();
|
|
@@ -75,7 +75,7 @@ export const ConversationList = React.forwardRef(function ConversationList({ sec
|
|
|
75
75
|
const errorText = error === true ? shell.error : error;
|
|
76
76
|
return (_jsxs("div", { ...rest, ref: ref, className: cx('rl-agent-list', className), "data-loading": loading || undefined, children: [onSearchChange && (_jsxs("div", { className: "rl-agent-list__search", children: [_jsx("label", { htmlFor: searchId, className: "rl-agent-sr", children: shell.searchLabel }), _jsx(Input, { id: searchId, type: "search", size: "sm", value: search ?? '', placeholder: shell.searchPlaceholder, prefix: _jsx(AgentIcon, { name: "search" }), autoComplete: "off", onChange: (event) => onSearchChange(event.currentTarget.value) }), _jsx("span", { className: "rl-agent-sr", role: "status", children: query && !loading ? shell.searchResults(format.number(total)) : '' })] })), _jsxs(motion.div, { ref: viewportRef, layoutScroll: true, className: "rl-agent-list__viewport", role: "region", "aria-label": label ?? shell.listLabel, "aria-busy": loading || undefined, tabIndex: -1, onKeyDown: onKeyDown, children: [errorText != null && errorText !== false && (_jsx(Alert, { tone: "danger", className: "rl-agent-list__error", title: errorText, action: onRetry ? (_jsx(Button, { size: "sm", variant: "secondary", onClick: onRetry, children: shell.retry })) : undefined })), showSkeleton && (_jsxs("div", { className: "rl-agent-list__skeleton", children: [_jsx("span", { className: "rl-agent-sr", children: shell.loading }), Array.from({ length: skeletonRows }, (_, i) => (_jsxs("div", { className: "rl-agent-list__skeleton-row", "aria-hidden": "true", children: [_jsx(Skeleton, { shape: "circle", width: "var(--rl-icon-size-sm)" }), _jsx(Skeleton, { width: i % 2 ? '70%' : '85%' })] }, i)))] })), !showSkeleton && total === 0 && !errorText && (_jsx("div", { className: "rl-agent-list__empty", children: query ? (_jsx(EmptyState, { kind: "no-results", size: "sm", headingLevel: headingLevel, title: shell.searchEmptyTitle(query), description: shell.searchEmptyDescription })) : ((empty ?? _jsx(EmptyState, { kind: "first-use", size: "sm", headingLevel: headingLevel, title: shell.emptyTitle, description: shell.emptyDescription }))) })), _jsx(ConversationRowContext.Provider, { value: rowContext, children: visible.map((section) => {
|
|
77
77
|
const headingId = `${uid}-${section.id}`;
|
|
78
|
-
return (_jsxs("div", { className: "rl-agent-list__section", children: [_jsx(Heading, { id: headingId, className: "rl-agent-list__heading", children: section.label }), _jsx("ul", { className: "rl-agent-list__rows", "aria-labelledby": headingId, children: section.items.map((item) => (_jsx(ConversationRow, { item: item, selected: item.id === selectedId, disabled: isDisabled?.(item), onSelect: onSelect, onPin: onPin, onArchive: onArchive, onUnarchive: onUnarchive, onDelete: onDelete, actions: renderActions?.(item), now: now }, item.id))) })] }, section.id));
|
|
78
|
+
return (_jsxs("div", { className: "rl-agent-list__section", children: [collapsibleGroups && _jsx(Collapsible, { open: !collapsedGroups.includes(section.id), onOpenChange: (open) => onCollapsedGroupsChange?.(open ? collapsedGroups.filter((id) => id !== section.id) : [...collapsedGroups, section.id]), trigger: section.label, children: _jsx("ul", { className: "rl-agent-list__rows", "aria-label": section.label, children: section.items.map((item) => _jsx(ConversationRow, { item: item, selected: item.id === selectedId, disabled: isDisabled?.(item), onSelect: onSelect, onPin: onPin, onArchive: onArchive, onUnarchive: onUnarchive, onDelete: onDelete, actions: renderActions?.(item), now: now }, item.id)) }) }), !collapsibleGroups && _jsxs(_Fragment, { children: [_jsx(Heading, { id: headingId, className: "rl-agent-list__heading", children: section.label }), _jsx("ul", { className: "rl-agent-list__rows", "aria-labelledby": headingId, children: section.items.map((item) => (_jsx(ConversationRow, { item: item, selected: item.id === selectedId, disabled: isDisabled?.(item), onSelect: onSelect, onPin: onPin, onArchive: onArchive, onUnarchive: onUnarchive, onDelete: onDelete, actions: renderActions?.(item), now: now }, item.id))) })] })] }, section.id));
|
|
79
79
|
}) })] })] }));
|
|
80
80
|
});
|
|
81
81
|
//# sourceMappingURL=ConversationList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationList.js","sourceRoot":"","sources":["../../../src/components/conversation/ConversationList.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationList.js","sourceRoot":"","sources":["../../../src/components/conversation/ConversationList.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AA4D/E,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAwC,SAAS,gBAAgB,CAC/G,EACE,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,MAAM,EACN,cAAc,EACd,OAAO,GAAG,KAAK,EACf,KAAK,EACL,OAAO,EACP,aAAa,EACb,KAAK,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,GAAG,CAAC,EAChB,KAAK,EACL,KAAK,EACL,GAAG,EACH,YAAY,GAAG,CAAC,EAChB,iBAAiB,GAAG,KAAK,EACzB,eAAe,GAAG,EAAE,EACpB,uBAAuB,EACvB,SAAS,EACT,GAAG,IAAI,EACR,EACD,GAAG;IAEH,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC,KAAK,CAAC;IACvC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC;IACjC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAwB,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAuC,IAAI,CAAC,CAAC;IAE7E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxG,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/G,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;IACzB,MAAM,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IAE5I,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC9B,GAAG,EAAE,CAAC,CAAC;QACL,SAAS;QACT,OAAO,EAAE,GAAG,GAAG,QAAQ;QACvB,UAAU;QACV,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE;YACjB,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACvD,CAAC;KACF,CAAC,EACF,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,CAClC,CAAC;IAEF,6FAA6F;IAC7F,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO;QAC3C,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QACpH,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAoB,GAAG,YAAY,iBAAiB,CAAC,CAAC;QAC3G,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,MAAM,SAAS,GAAG,CAAC,KAA0C,EAAE,EAAE;QAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,6FAA6F;QAC7F,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;YAAE,OAAO;QACxF,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO;QAC3H,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAoB,GAAG,YAAY,iBAAiB,CAAC,CAAC,CAAC;QAC3G,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,IAAI,IAAI,GAAG,OAAO,CAAC;QACnB,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW;YAAE,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC7F,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;YAAE,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;aAC/E,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,CAAC,CAAC;;YACnC,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,MAAM,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,YAAY,EAAU,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACtD,MAAM,SAAS,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAEvD,OAAO,CACL,kBAAS,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,kBAAgB,OAAO,IAAI,SAAS,aACnG,cAAc,IAAI,CACjB,eAAK,SAAS,EAAC,uBAAuB,aACpC,gBAAO,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,aAAa,YAC9C,KAAK,CAAC,WAAW,GACZ,EACR,KAAC,KAAK,IACJ,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,MAAM,IAAI,EAAE,EACnB,WAAW,EAAE,KAAK,CAAC,iBAAiB,EACpC,MAAM,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,QAAQ,GAAG,EACnC,YAAY,EAAC,KAAK,EAClB,QAAQ,EAAE,CAAC,KAA0C,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GACnG,EACF,eAAM,SAAS,EAAC,aAAa,EAAC,IAAI,EAAC,QAAQ,YACxC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAC9D,IACH,CACP,EACD,MAAC,MAAM,CAAC,GAAG,IACT,GAAG,EAAE,WAAW,EAChB,YAAY,QACZ,SAAS,EAAC,yBAAyB,EACnC,IAAI,EAAC,QAAQ,gBACD,KAAK,IAAI,KAAK,CAAC,SAAS,eACzB,OAAO,IAAI,SAAS,EAC/B,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAE,SAAS,aAEnB,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,KAAK,IAAI,CAC3C,KAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE,SAAS,EAChB,MAAM,EACJ,OAAO,CAAC,CAAC,CAAC,CACR,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,OAAO,YACnD,KAAK,CAAC,KAAK,GACL,CACV,CAAC,CAAC,CAAC,SAAS,GAEf,CACH,EACA,YAAY,IAAI,CACf,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,aAAa,YAAE,KAAK,CAAC,OAAO,GAAQ,EACnD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC9C,eAAa,SAAS,EAAC,6BAA6B,iBAAa,MAAM,aACrE,KAAC,QAAQ,IAAC,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAC,wBAAwB,GAAG,EAC1D,KAAC,QAAQ,IAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAI,KAFlC,CAAC,CAGL,CACP,CAAC,IACE,CACP,EACA,CAAC,YAAY,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAC7C,cAAK,SAAS,EAAC,sBAAsB,YAClC,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,UAAU,IACT,IAAI,EAAC,YAAY,EACjB,IAAI,EAAC,IAAI,EACT,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,EACpC,WAAW,EAAE,KAAK,CAAC,sBAAsB,GACzC,CACH,CAAC,CAAC,CAAC,CACF,CAAC,KAAK,IAAI,KAAC,UAAU,IAAC,IAAI,EAAC,WAAW,EAAC,IAAI,EAAC,IAAI,EAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,gBAAgB,GAAI,CAAC,CAC/I,GACG,CACP,EACD,KAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU,YAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;4BACvB,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;4BACzC,OAAO,CACL,eAAsB,SAAS,EAAC,wBAAwB,aACrD,iBAAiB,IAAI,KAAC,WAAW,IAAC,IAAI,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,YAAE,aAAI,SAAS,EAAC,qBAAqB,gBAAa,OAAO,CAAC,KAAK,YAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,eAAe,IAAe,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAnO,IAAI,CAAC,EAAE,CAAgO,CAAC,GAAM,GAAc,EACrmB,CAAC,iBAAiB,IAAI,8BACvB,KAAC,OAAO,IAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAC,wBAAwB,YACvD,OAAO,CAAC,KAAK,GACN,EACV,aAAI,SAAS,EAAC,qBAAqB,qBAAkB,SAAS,YAC3D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,KAAC,eAAe,IAEd,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,UAAU,EAChC,QAAQ,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,EAC5B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,EAC9B,GAAG,EAAE,GAAG,IAVH,IAAI,CAAC,EAAE,CAWZ,CACH,CAAC,GACC,IACF,KAvBK,OAAO,CAAC,EAAE,CAwBd,CACP,CAAC;wBACJ,CAAC,CAAC,GAC8B,IACvB,IACT,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorRecoveryNotice.d.ts","sourceRoot":"","sources":["../../../src/components/intervention/ErrorRecoveryNotice.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ErrorRecoveryNotice.d.ts","sourceRoot":"","sources":["../../../src/components/intervention/ErrorRecoveryNotice.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAA2B,YAAY,EAAmB,MAAM,qBAAqB,CAAC;AAMlG;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC7G,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAgBD,eAAO,MAAM,mBAAmB,8FAiE9B,CAAC"}
|
|
@@ -6,6 +6,7 @@ import { AgentStatus } from '../../primitives/AgentStatus.js';
|
|
|
6
6
|
import { AgentIcon } from '../../primitives/icons.js';
|
|
7
7
|
import { useAgentMessages } from '../../provider/AgentMessages.js';
|
|
8
8
|
import { cx } from '../../utils/cx.js';
|
|
9
|
+
/** Tone + glyph per built-in kind; custom kinds fall back to the `unknown` presentation (ADR-0013 §2). */
|
|
9
10
|
const kindMeta = {
|
|
10
11
|
retryable: { tone: 'info', glyph: 'reconnecting' },
|
|
11
12
|
'save-pending': { tone: 'warning', glyph: 'saving' },
|
|
@@ -22,9 +23,9 @@ export const ErrorRecoveryNotice = React.forwardRef(function ErrorRecoveryNotice
|
|
|
22
23
|
const id = React.useId();
|
|
23
24
|
const titleId = `${id}-title`;
|
|
24
25
|
const { kind } = recovery;
|
|
25
|
-
const meta = kindMeta[kind];
|
|
26
|
+
const meta = kindMeta[kind] ?? kindMeta.unknown;
|
|
26
27
|
const alert = meta.tone === 'danger' && announce;
|
|
27
28
|
const note = m.recoveryNote[kind];
|
|
28
|
-
return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-recovery', className), "aria-labelledby": titleId, "data-kind": kind, "data-tone": meta.tone, children: [_jsxs("div", { className: "rl-agent-recovery__message", role: alert ? 'alert' : undefined, children: [_jsxs("div", { className: "rl-agent-recovery__head", children: [_jsx(AgentStatus, { glyph: meta.glyph, tone: meta.tone, label: m.recoveryKind[kind], className: "rl-agent-recovery__kind" }), recovery.code && (_jsxs("span", { className: "rl-agent-recovery__code", children: [_jsxs("span", { className: "rl-agent-sr", children: [m.recoveryCode, " "] }), _jsx("code", { children: recovery.code })] }))] }), _jsx("p", { id: titleId, className: "rl-agent-recovery__title", children: recovery.title }), recovery.message && _jsx("p", { className: "rl-agent-recovery__text", children: recovery.message }), note && _jsx("p", { className: "rl-agent-recovery__note", children: note }), recovery.preserved && recovery.preserved.length > 0 && (_jsxs("div", { className: "rl-agent-recovery__preserved", children: [_jsx("span", { className: "rl-agent-recovery__preserved-label", children: m.recoveryPreserved }), _jsx("ul", { className: "rl-agent-recovery__preserved-list", children: recovery.preserved.map((item) => (_jsxs("li", { children: [_jsx(AgentIcon, { name: "check" }), _jsx("span", { children: item })] }, item))) })] }))] }), onAction && recovery.actions && recovery.actions.length > 0 && (_jsx("div", { className: "rl-agent-recovery__actions", children: recovery.actions.map((action) => (_jsx(Button, { size: "sm", variant: variantOf[action.tone ?? 'secondary'], "data-tone": action.tone, className: "rl-agent-recovery__action", loading: busyActionIds?.includes(action.id), onClick: () => onAction(action.id), children: action.label }, action.id))) })), onDismiss && kind === 'resolved' && (_jsx(IconButton, { className: "rl-agent-recovery__dismiss", size: "sm", variant: "ghost", icon: _jsx(AgentIcon, { name: "close" }), label: m.recoveryDismiss, onClick: onDismiss }))] }));
|
|
29
|
+
return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-recovery', className), "aria-labelledby": titleId, "data-kind": kind, "data-tone": meta.tone, children: [_jsxs("div", { className: "rl-agent-recovery__message", role: alert ? 'alert' : undefined, children: [_jsxs("div", { className: "rl-agent-recovery__head", children: [_jsx(AgentStatus, { glyph: meta.glyph, tone: meta.tone, label: m.recoveryKind[kind] ?? kind, className: "rl-agent-recovery__kind" }), recovery.code && (_jsxs("span", { className: "rl-agent-recovery__code", children: [_jsxs("span", { className: "rl-agent-sr", children: [m.recoveryCode, " "] }), _jsx("code", { children: recovery.code })] }))] }), _jsx("p", { id: titleId, className: "rl-agent-recovery__title", children: recovery.title }), recovery.message && _jsx("p", { className: "rl-agent-recovery__text", children: recovery.message }), note && _jsx("p", { className: "rl-agent-recovery__note", children: note }), recovery.preserved && recovery.preserved.length > 0 && (_jsxs("div", { className: "rl-agent-recovery__preserved", children: [_jsx("span", { className: "rl-agent-recovery__preserved-label", children: m.recoveryPreserved }), _jsx("ul", { className: "rl-agent-recovery__preserved-list", children: recovery.preserved.map((item) => (_jsxs("li", { children: [_jsx(AgentIcon, { name: "check" }), _jsx("span", { children: item })] }, item))) })] }))] }), onAction && recovery.actions && recovery.actions.length > 0 && (_jsx("div", { className: "rl-agent-recovery__actions", children: recovery.actions.map((action) => (_jsx(Button, { size: "sm", variant: variantOf[action.tone ?? 'secondary'], "data-tone": action.tone, className: "rl-agent-recovery__action", loading: busyActionIds?.includes(action.id), onClick: () => onAction(action.id), children: action.label }, action.id))) })), onDismiss && kind === 'resolved' && (_jsx(IconButton, { className: "rl-agent-recovery__dismiss", size: "sm", variant: "ghost", icon: _jsx(AgentIcon, { name: "close" }), label: m.recoveryDismiss, onClick: onDismiss }))] }));
|
|
29
30
|
});
|
|
30
31
|
//# sourceMappingURL=ErrorRecoveryNotice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorRecoveryNotice.js","sourceRoot":"","sources":["../../../src/components/intervention/ErrorRecoveryNotice.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AA2BvC,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"ErrorRecoveryNotice.js","sourceRoot":"","sources":["../../../src/components/intervention/ErrorRecoveryNotice.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AA2BvC,0GAA0G;AAC1G,MAAM,QAAQ,GAAsE;IAClF,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE;IAClD,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpD,oBAAoB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;IAC5D,mBAAmB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACxD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC7C,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;IAC3C,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IAC9C,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;CAC7C,CAAC;AAEF,MAAM,SAAS,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAW,CAAC;AAE/F,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,UAAU,CAAwC,SAAS,mBAAmB,CACrH,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EACrF,GAAG;IAEH,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC,YAAY,CAAC;IAC1C,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAoB,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC;IAChE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC;IACjD,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,OAAO,CACL,sBAAa,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,qBAAmB,OAAO,eAAa,IAAI,eAAa,IAAI,CAAC,IAAI,aACzI,eAAK,SAAS,EAAC,4BAA4B,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,aAC3E,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,WAAW,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,SAAS,EAAC,yBAAyB,GAAG,EAC3H,QAAQ,CAAC,IAAI,IAAI,CAChB,gBAAM,SAAS,EAAC,yBAAyB,aACvC,gBAAM,SAAS,EAAC,aAAa,aAAE,CAAC,CAAC,YAAY,SAAS,EACtD,yBAAO,QAAQ,CAAC,IAAI,GAAQ,IACvB,CACR,IACG,EACN,YAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,0BAA0B,YACjD,QAAQ,CAAC,KAAK,GACb,EACH,QAAQ,CAAC,OAAO,IAAI,YAAG,SAAS,EAAC,yBAAyB,YAAE,QAAQ,CAAC,OAAO,GAAK,EACjF,IAAI,IAAI,YAAG,SAAS,EAAC,yBAAyB,YAAE,IAAI,GAAK,EACzD,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CACtD,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAM,SAAS,EAAC,oCAAoC,YAAE,CAAC,CAAC,iBAAiB,GAAQ,EACjF,aAAI,SAAS,EAAC,mCAAmC,YAC9C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAChC,yBACE,KAAC,SAAS,IAAC,IAAI,EAAC,OAAO,GAAG,EAC1B,yBAAO,IAAI,GAAQ,KAFZ,IAAI,CAGR,CACN,CAAC,GACC,IACD,CACP,IACG,EACL,QAAQ,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAC9D,cAAK,SAAS,EAAC,4BAA4B,YACxC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAChC,KAAC,MAAM,IAEL,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,eACnC,MAAM,CAAC,IAAI,EACtB,SAAS,EAAC,2BAA2B,EACrC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,YAEjC,MAAM,CAAC,KAAK,IARR,MAAM,CAAC,EAAE,CASP,CACV,CAAC,GACE,CACP,EACA,SAAS,IAAI,IAAI,KAAK,UAAU,IAAI,CACnC,KAAC,UAAU,IAAC,SAAS,EAAC,4BAA4B,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,GAAI,CAChK,IACO,CACX,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import type { AgentActionContext, AgentActionHandler, QuestionAnswer, QuestionnaireView } from '@wzrhine/agent-core';
|
|
2
|
+
import type { AgentActionContext, AgentActionHandler, QuestionAnswer, QuestionnaireView, QuestionView } from '@wzrhine/agent-core';
|
|
3
|
+
/** Everything a `renderQuestion` override needs: the question, its answer, and the same update
|
|
4
|
+
* channel the built-in controls use (ADR-0013 §4). */
|
|
5
|
+
export interface QuestionRenderContext {
|
|
6
|
+
question: QuestionView;
|
|
7
|
+
answer: QuestionAnswer | undefined;
|
|
8
|
+
/** False while the questionnaire is busy / ended / disabled; custom controls should follow it. */
|
|
9
|
+
editable: boolean;
|
|
10
|
+
/** Replace this question's answer (reports `onAnswerChange`, like the built-in controls). */
|
|
11
|
+
update: (next: QuestionAnswer) => void;
|
|
12
|
+
/** The built-in body for this question; return or wrap it to keep the default rendering. */
|
|
13
|
+
defaultBody: React.ReactNode;
|
|
14
|
+
}
|
|
3
15
|
/**
|
|
4
16
|
* Agent → user questionnaire (atlas 21, ADR-0011 §6). Collects information only: it never grants
|
|
5
17
|
* tool permissions.
|
|
@@ -53,8 +65,17 @@ export interface QuestionnaireCardProps extends Omit<React.FormHTMLAttributes<HT
|
|
|
53
65
|
onDiscardDraft?: () => void | Promise<unknown>;
|
|
54
66
|
/** Header title override (default: `questionnaire.title` or 「需要你的回答」). */
|
|
55
67
|
title?: React.ReactNode;
|
|
68
|
+
/**
|
|
69
|
+
* Custom question body (ADR-0013 §4). Called for every question; return `null` / `undefined`
|
|
70
|
+
* to keep the built-in body. Required for custom `kind`s beyond single / multiple / text —
|
|
71
|
+
* without it they fall back to a free-text answer.
|
|
72
|
+
*/
|
|
73
|
+
renderQuestion?: (context: QuestionRenderContext) => React.ReactNode;
|
|
56
74
|
/** Start on this page instead of the first unanswered question. */
|
|
57
75
|
initialPage?: number;
|
|
76
|
+
advanceOnSingleChoice?: boolean;
|
|
77
|
+
draftError?: React.ReactNode;
|
|
78
|
+
disabled?: boolean;
|
|
58
79
|
}
|
|
59
80
|
export declare const QuestionnaireCard: React.ForwardRefExoticComponent<QuestionnaireCardProps & React.RefAttributes<QuestionnaireCardHandle>>;
|
|
60
81
|
//# sourceMappingURL=QuestionnaireCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuestionnaireCard.d.ts","sourceRoot":"","sources":["../../../src/components/intervention/QuestionnaireCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"QuestionnaireCard.d.ts","sourceRoot":"","sources":["../../../src/components/intervention/QuestionnaireCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUnI;sDACsD;AACtD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,kGAAkG;IAClG,QAAQ,EAAE,OAAO,CAAC;IAClB,6FAA6F;IAC7F,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACvC,4FAA4F;IAC5F,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,uBAAuB;IACtC,sFAAsF;IACtF,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,mDAAmD;IACnD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAChI,aAAa,EAAE,iBAAiB,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,kBAAkB,CAAC,CAAC,cAAc,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACtE,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,qFAAqF;IACrF,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,0EAA0E;IAC1E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,KAAK,CAAC,SAAS,CAAC;IACrE,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAoHD,eAAO,MAAM,iBAAiB,wGAkf5B,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { AgentIcon } from '../../primitives/icons.js';
|
|
|
9
9
|
import { useAgentMessages } from '../../provider/AgentMessages.js';
|
|
10
10
|
import { cx } from '../../utils/cx.js';
|
|
11
11
|
import { useActionLock } from './action-lock.js';
|
|
12
|
-
import { answerState, answerText, isOverLimit, isQuestionOptional, normalizeAnswers } from './questionnaire-answers.js';
|
|
12
|
+
import { answerState, answerText, isChoiceQuestion, isOverLimit, isQuestionOptional, normalizeAnswers } from './questionnaire-answers.js';
|
|
13
13
|
const CUSTOM = '__rl_agent_custom__';
|
|
14
14
|
const EDITABLE = new Set(['waiting', 'drafting', 'saving']);
|
|
15
15
|
const READ_ONLY = new Set(['completed', 'expired', 'interrupted']);
|
|
@@ -51,7 +51,7 @@ function firstControl(root) {
|
|
|
51
51
|
root.querySelector('[role="radio"]:not([aria-disabled="true"]), [role="checkbox"]:not([aria-disabled="true"]), textarea:not([disabled])') ??
|
|
52
52
|
root.querySelector('button:not([disabled])'));
|
|
53
53
|
}
|
|
54
|
-
export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ questionnaire, onAnswerChange, onSubmit, onRetrySave, onFlush, onCopyAnswers, onDiscardDraft, title, initialPage, className, ...rest }, ref) {
|
|
54
|
+
export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ questionnaire, onAnswerChange, onSubmit, onRetrySave, onFlush, onCopyAnswers, onDiscardDraft, title, renderQuestion, initialPage, advanceOnSingleChoice = false, draftError, disabled = false, className, ...rest }, ref) {
|
|
55
55
|
const m = useAgentMessages().intervention;
|
|
56
56
|
const { reduced, resolve } = useRhineMotion();
|
|
57
57
|
const id = React.useId();
|
|
@@ -100,7 +100,7 @@ export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ q
|
|
|
100
100
|
return (_jsx(Summary, { questionnaire: questionnaire, answers: answers, title: heading, onCopyAnswers: onCopyAnswers, onDiscardDraft: onDiscardDraft, className: className, rest: rest }));
|
|
101
101
|
}
|
|
102
102
|
const busy = status === 'submit-pending' || questionnaire.submitStatus === 'submitting' || lock.locked;
|
|
103
|
-
const editable = EDITABLE.has(status) && !busy && !!onAnswerChange;
|
|
103
|
+
const editable = EDITABLE.has(status) && !busy && !!onAnswerChange && !disabled;
|
|
104
104
|
const unknown = status === 'unknown' || questionnaire.submitStatus === 'unknown';
|
|
105
105
|
const question = questions[index];
|
|
106
106
|
const states = questions.map((q) => answerState(q, answers.get(q.id)));
|
|
@@ -183,13 +183,17 @@ export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ q
|
|
|
183
183
|
// ----- question body -----
|
|
184
184
|
const answer = question ? answers.get(question.id) : undefined;
|
|
185
185
|
const skipped = answer?.skipped === true;
|
|
186
|
-
|
|
186
|
+
// The custom "other" text answer exists only on choice questions.
|
|
187
|
+
const customOn = question !== undefined && isChoiceQuestion(question) && question.allowCustom === true && typeof answer?.text === 'string';
|
|
187
188
|
const options = question?.options ?? [];
|
|
188
189
|
const choose = (optionId) => {
|
|
189
190
|
if (!question)
|
|
190
191
|
return;
|
|
191
|
-
if (question.kind === 'single')
|
|
192
|
+
if (question.kind === 'single') {
|
|
192
193
|
update(question, { questionId: question.id, optionIds: [optionId] });
|
|
194
|
+
if (advanceOnSingleChoice && !last)
|
|
195
|
+
go(index + 1);
|
|
196
|
+
}
|
|
193
197
|
else {
|
|
194
198
|
const ids = answer?.optionIds ?? [];
|
|
195
199
|
const nextIds = ids.includes(optionId) ? ids.filter((x) => x !== optionId) : [...ids, optionId];
|
|
@@ -207,7 +211,7 @@ export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ q
|
|
|
207
211
|
const setText = (text) => {
|
|
208
212
|
if (!question)
|
|
209
213
|
return;
|
|
210
|
-
if (question
|
|
214
|
+
if (!isChoiceQuestion(question))
|
|
211
215
|
update(question, { questionId: question.id, text });
|
|
212
216
|
else
|
|
213
217
|
update(question, { questionId: question.id, optionIds: question.kind === 'single' ? [] : (answer?.optionIds ?? []), text });
|
|
@@ -257,7 +261,7 @@ export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ q
|
|
|
257
261
|
go(index + 1);
|
|
258
262
|
return;
|
|
259
263
|
}
|
|
260
|
-
if (!editable || skipped || question
|
|
264
|
+
if (!editable || skipped || !question || !isChoiceQuestion(question) || !/^[1-9]$/.test(event.key))
|
|
261
265
|
return;
|
|
262
266
|
const digit = Number(event.key);
|
|
263
267
|
if (digit <= options.length) {
|
|
@@ -280,13 +284,14 @@ export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ q
|
|
|
280
284
|
const unansweredCount = states.filter((s) => s === 'unanswered').length;
|
|
281
285
|
const requiredMissing = questions.filter((q, i) => !isQuestionOptional(q) && states[i] === 'unanswered').length;
|
|
282
286
|
const kbd = (n) => (_jsx("kbd", { className: "rl-agent-question__kbd", "aria-hidden": "true", children: n }));
|
|
283
|
-
const textInput = question && (question
|
|
287
|
+
const textInput = question && (!isChoiceQuestion(question) || customOn) && !skipped && (_jsxs("div", { className: "rl-agent-question__text", children: [_jsx(Textarea, { rows: question.kind === 'text' ? 3 : 2, autoResize: true, maxRows: 8, value: answer?.text ?? '', disabled: !editable, placeholder: m.questionPlaceholder, invalid: over, "aria-label": !isChoiceQuestion(question) ? question.title : m.questionOtherInput(question.title), "aria-describedby": [!isChoiceQuestion(question) && question.prompt ? promptId : undefined, question.maxLength != null ? countId : undefined].filter(Boolean).join(' ') || undefined, onValueChange: (value) => setText(value) }), question.maxLength != null && (_jsx("span", { id: countId, className: "rl-agent-question__count", "data-over": over || undefined, children: m.questionCount(count, question.maxLength) }))] }));
|
|
284
288
|
let body = null;
|
|
285
289
|
if (question) {
|
|
286
290
|
if (skipped) {
|
|
287
291
|
body = (_jsxs("fieldset", { className: "rl-agent-question__fieldset", disabled: !editable, children: [_jsx("legend", { className: "rl-agent-question__legend", children: question.title }), question.prompt && _jsx("p", { className: "rl-agent-question__prompt", children: question.prompt }), _jsx("p", { className: "rl-agent-question__skipped", children: m.questionSkipped })] }));
|
|
288
292
|
}
|
|
289
|
-
else if (question
|
|
293
|
+
else if (!isChoiceQuestion(question)) {
|
|
294
|
+
// Text questions and custom kinds without a `renderQuestion` share the free-text body.
|
|
290
295
|
body = (_jsxs("fieldset", { className: "rl-agent-question__fieldset", children: [_jsxs("legend", { className: "rl-agent-question__legend", children: [question.title, !isQuestionOptional(question) && _jsx("span", { className: "rl-agent-question__required", children: m.questionRequired })] }), question.prompt && (_jsx("p", { id: promptId, className: "rl-agent-question__prompt", children: question.prompt })), textInput] }));
|
|
291
296
|
}
|
|
292
297
|
else if (question.kind === 'single') {
|
|
@@ -306,8 +311,14 @@ export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ q
|
|
|
306
311
|
update(question, { questionId: question.id, optionIds: nextIds, ...(nextCustom ? { text: answer?.text ?? '' } : null) });
|
|
307
312
|
}, children: [options.map((option, i) => (_jsx(Checkbox, { value: option.id, label: _jsxs(_Fragment, { children: [kbd(i + 1), option.label] }), description: option.description }, option.id))), question.allowCustom && _jsx(Checkbox, { value: CUSTOM, label: _jsxs(_Fragment, { children: [kbd(options.length + 1), m.questionOther] }), description: m.questionOtherDescription })] }), textInput] }));
|
|
308
313
|
}
|
|
314
|
+
// Custom renderers win over any built-in body; returning null keeps the default (ADR-0013 §4).
|
|
315
|
+
if (renderQuestion) {
|
|
316
|
+
const rendered = renderQuestion({ question, answer, editable, update: (next) => update(question, next), defaultBody: body });
|
|
317
|
+
if (rendered != null)
|
|
318
|
+
body = rendered;
|
|
319
|
+
}
|
|
309
320
|
}
|
|
310
|
-
const draftText = m.questionDraft[questionnaire.draftStatus];
|
|
321
|
+
const draftText = draftError ?? m.questionDraft[questionnaire.draftStatus];
|
|
311
322
|
const statusMeta = busy ? { glyph: 'pending', tone: 'info', active: true } : unknown ? { glyph: 'unknown', tone: 'warning' } : { glyph: 'waiting-user', tone: 'warning' };
|
|
312
323
|
return (_jsxs("form", { ...rest, ref: formRef, className: cx('rl-agent-question', className), "aria-labelledby": titleId, "aria-busy": busy || undefined, "data-status": status, noValidate: true, onSubmit: (event) => {
|
|
313
324
|
event.preventDefault();
|
|
@@ -316,7 +327,7 @@ export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ q
|
|
|
316
327
|
? m.questionConfirm(unansweredCount)
|
|
317
328
|
: confirming === 'required'
|
|
318
329
|
? m.questionRequiredMissing(requiredMissing)
|
|
319
|
-
: m.questionOverLimit(questions.find((q) => isOverLimit(q, answers.get(q.id)))?.title ?? '')] }), _jsxs("div", { className: "rl-agent-question__actions", children: [_jsx(Button, { ref: backRef, size: "sm", variant: "secondary", onClick: backToFirstOpen, children: m.questionBack }), confirming === 'skip' && (_jsx(Button, { size: "sm", variant: "accent", loading: busy, onClick: () => submit(true), children: m.questionSkipAndSubmit }))] })] })) : (_jsxs(_Fragment, { children: [_jsx("span", { id: hintId, className: "rl-agent-question__hint", children: question
|
|
320
|
-
(unknown ? (canRetry && (_jsx(Button, { type: "submit", size: "sm", variant: "primary", loading: busy, iconStart: _jsx(AgentIcon, { name: "retry" }), children: m.questionRetrySubmit }))) : (_jsx(Button, { type: "submit", size: "sm", variant: "accent", loading: busy, disabled: !EDITABLE.has(status)
|
|
330
|
+
: m.questionOverLimit(questions.find((q) => isOverLimit(q, answers.get(q.id)))?.title ?? '')] }), _jsxs("div", { className: "rl-agent-question__actions", children: [_jsx(Button, { ref: backRef, size: "sm", variant: "secondary", onClick: backToFirstOpen, children: m.questionBack }), confirming === 'skip' && (_jsx(Button, { size: "sm", variant: "accent", loading: busy, onClick: () => submit(true), children: m.questionSkipAndSubmit }))] })] })) : (_jsxs(_Fragment, { children: [_jsx("span", { id: hintId, className: "rl-agent-question__hint", children: question && isChoiceQuestion(question) ? m.questionHintChoice(last) : m.questionHintText }), _jsxs("div", { className: "rl-agent-question__actions", children: [question && isQuestionOptional(question) && onAnswerChange && !unknown && (_jsx(Button, { size: "sm", variant: "ghost", disabled: !editable, onClick: toggleSkip, children: skipped ? m.questionUndoSkip : m.questionSkip })), !last && (_jsx(Button, { size: "sm", variant: "secondary", onClick: () => go(index + 1), children: m.questionNext })), onSubmit &&
|
|
331
|
+
(unknown ? (canRetry && (_jsx(Button, { type: "submit", size: "sm", variant: "primary", loading: busy, iconStart: _jsx(AgentIcon, { name: "retry" }), children: m.questionRetrySubmit }))) : (_jsx(Button, { type: "submit", size: "sm", variant: "accent", loading: busy, disabled: disabled || busy || !EDITABLE.has(status), children: m.questionSubmit })))] })] })) })] }));
|
|
321
332
|
});
|
|
322
333
|
//# sourceMappingURL=QuestionnaireCard.js.map
|