@corenel/web-ui 0.1.0 → 0.3.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/dist/AskUser.d.ts.map +1 -1
- package/dist/AskUser.js +49 -13
- package/dist/AskUser.js.map +1 -1
- package/dist/CommandTray.d.ts +21 -0
- package/dist/CommandTray.d.ts.map +1 -0
- package/dist/CommandTray.js +102 -0
- package/dist/CommandTray.js.map +1 -0
- package/dist/Composer.d.ts +17 -1
- package/dist/Composer.d.ts.map +1 -1
- package/dist/Composer.js +93 -6
- package/dist/Composer.js.map +1 -1
- package/dist/ContextBar.d.ts +9 -1
- package/dist/ContextBar.d.ts.map +1 -1
- package/dist/ContextBar.js +9 -3
- package/dist/ContextBar.js.map +1 -1
- package/dist/ContextManager.d.ts +78 -2
- package/dist/ContextManager.d.ts.map +1 -1
- package/dist/ContextManager.js +175 -51
- package/dist/ContextManager.js.map +1 -1
- package/dist/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox.js +2 -10
- package/dist/Lightbox.js.map +1 -1
- package/dist/ProcessDock.d.ts +45 -0
- package/dist/ProcessDock.d.ts.map +1 -0
- package/dist/ProcessDock.js +150 -0
- package/dist/ProcessDock.js.map +1 -0
- package/dist/RichContent.d.ts +4 -2
- package/dist/RichContent.d.ts.map +1 -1
- package/dist/RichContent.js +12 -7
- package/dist/RichContent.js.map +1 -1
- package/dist/TodoBar.d.ts +3 -0
- package/dist/TodoBar.d.ts.map +1 -0
- package/dist/TodoBar.js +163 -0
- package/dist/TodoBar.js.map +1 -0
- package/dist/Transcript.d.ts +2 -1
- package/dist/Transcript.d.ts.map +1 -1
- package/dist/Transcript.js +7 -7
- package/dist/Transcript.js.map +1 -1
- package/dist/agentChat/AgentChat.d.ts +132 -0
- package/dist/agentChat/AgentChat.d.ts.map +1 -0
- package/dist/agentChat/AgentChat.js +588 -0
- package/dist/agentChat/AgentChat.js.map +1 -0
- package/dist/agentChat/OptionsDrawer.d.ts +81 -0
- package/dist/agentChat/OptionsDrawer.d.ts.map +1 -0
- package/dist/agentChat/OptionsDrawer.js +321 -0
- package/dist/agentChat/OptionsDrawer.js.map +1 -0
- package/dist/agentChat/SkillsSection.d.ts +3 -0
- package/dist/agentChat/SkillsSection.d.ts.map +1 -0
- package/dist/agentChat/SkillsSection.js +86 -0
- package/dist/agentChat/SkillsSection.js.map +1 -0
- package/dist/agentChat/controller.d.ts +116 -0
- package/dist/agentChat/controller.d.ts.map +1 -0
- package/dist/agentChat/controller.js +25 -0
- package/dist/agentChat/controller.js.map +1 -0
- package/dist/agentChat/skillRunner.d.ts +14 -0
- package/dist/agentChat/skillRunner.d.ts.map +1 -0
- package/dist/agentChat/skillRunner.js +4 -0
- package/dist/agentChat/skillRunner.js.map +1 -0
- package/dist/commandTurn.d.ts +47 -0
- package/dist/commandTurn.d.ts.map +1 -0
- package/dist/commandTurn.js +64 -0
- package/dist/commandTurn.js.map +1 -0
- package/dist/composerHistory.d.ts +10 -0
- package/dist/composerHistory.d.ts.map +1 -0
- package/dist/composerHistory.js +44 -0
- package/dist/composerHistory.js.map +1 -0
- package/dist/sendLater/SendLater.d.ts +31 -0
- package/dist/sendLater/SendLater.d.ts.map +1 -0
- package/dist/sendLater/SendLater.js +145 -0
- package/dist/sendLater/SendLater.js.map +1 -0
- package/dist/sendLater/queue.d.ts +69 -0
- package/dist/sendLater/queue.d.ts.map +1 -0
- package/dist/sendLater/queue.js +216 -0
- package/dist/sendLater/queue.js.map +1 -0
- package/dist/toolRender.d.ts +8 -0
- package/dist/toolRender.d.ts.map +1 -1
- package/dist/toolRender.js +7 -1
- package/dist/toolRender.js.map +1 -1
- package/package.json +16 -21
package/dist/AskUser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AskUser.d.ts","sourceRoot":"","sources":["../AskUser.tsx"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"AskUser.d.ts","sourceRoot":"","sources":["../AskUser.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAsBjE,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IACzD,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,qBA0HA"}
|
package/dist/AskUser.js
CHANGED
|
@@ -4,20 +4,40 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
4
4
|
* options + an optional custom answer. Single- or multi-select per question; Submit
|
|
5
5
|
* is enabled once every question has an answer. On-brand: 1px borders, accent for
|
|
6
6
|
* selection, the cyan→blue spine on Submit, Lucide icons, transform/opacity motion. */
|
|
7
|
-
import { useMemo, useState } from 'react';
|
|
8
|
-
import { IcCheck, IcUser, IcX } from '@corenel/ui-kit/icons';
|
|
7
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
8
|
+
import { IcCheck, IcUser, IcX, IcChevron } from '@corenel/ui-kit/icons';
|
|
9
|
+
const drafts = new Map();
|
|
10
|
+
// The key covers the FULL question shape — options and multiSelect included — so a
|
|
11
|
+
// later ask with the same wording but different options never restores selections
|
|
12
|
+
// whose labels the current UI doesn't offer (invisible, yet submit-enabled).
|
|
13
|
+
const draftKey = (qs) => JSON.stringify(qs.map((q) => [q.header, q.question, q.multiSelect === true, q.options.map((o) => o.label)]));
|
|
14
|
+
function saveDraft(key, d) {
|
|
15
|
+
drafts.delete(key); // re-insert so insertion order tracks recency
|
|
16
|
+
drafts.set(key, d);
|
|
17
|
+
while (drafts.size > 8) {
|
|
18
|
+
const oldest = drafts.keys().next().value;
|
|
19
|
+
if (oldest === undefined)
|
|
20
|
+
break;
|
|
21
|
+
drafts.delete(oldest);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
9
24
|
export function AskUser({ questions, onSubmit, onCancel }) {
|
|
10
|
-
const
|
|
25
|
+
const key = useMemo(() => draftKey(questions), [questions]);
|
|
26
|
+
const draft = drafts.get(key);
|
|
27
|
+
const [active, setActive] = useState(draft?.active ?? 0);
|
|
11
28
|
// State is keyed by question INDEX (not header) so two questions that happen to
|
|
12
29
|
// share a header don't share selection. Answers are emitted keyed by header.
|
|
13
|
-
const [selected, setSelected] = useState({});
|
|
14
|
-
const [other, setOther] = useState({});
|
|
30
|
+
const [selected, setSelected] = useState(draft?.selected ?? {});
|
|
31
|
+
const [other, setOther] = useState(draft?.other ?? {});
|
|
32
|
+
useEffect(() => { saveDraft(key, { active, selected, other }); }, [key, active, selected, other]);
|
|
15
33
|
const answered = (i) => (selected[i]?.length ?? 0) > 0 || (other[i] ?? '').trim() !== '';
|
|
16
34
|
const answeredCount = useMemo(() => questions.filter((_, i) => answered(i)).length, [questions, selected, other]);
|
|
17
35
|
const canSubmit = answeredCount === questions.length;
|
|
18
36
|
const q = questions[active] ?? questions[0];
|
|
19
37
|
const sel = selected[active] ?? [];
|
|
20
38
|
const otherActive = (other[active] ?? '').trim() !== '';
|
|
39
|
+
const isLast = active >= questions.length - 1;
|
|
40
|
+
const goNext = () => setActive((a) => Math.min(a + 1, questions.length - 1));
|
|
21
41
|
const pick = (label) => {
|
|
22
42
|
setSelected((s) => {
|
|
23
43
|
const cur = s[active] ?? [];
|
|
@@ -27,8 +47,15 @@ export function AskUser({ questions, onSubmit, onCancel }) {
|
|
|
27
47
|
}
|
|
28
48
|
return { ...s, [active]: [label] };
|
|
29
49
|
});
|
|
30
|
-
if (!q.multiSelect)
|
|
50
|
+
if (!q.multiSelect) {
|
|
31
51
|
setOther((o) => ({ ...o, [active]: '' }));
|
|
52
|
+
// Single-select: once the choice registers, reveal the next question. (Multi-select
|
|
53
|
+
// and free text have no "done" signal, so those advance via the Next button.)
|
|
54
|
+
if (!isLast) {
|
|
55
|
+
const cur = active;
|
|
56
|
+
setTimeout(() => setActive((a) => (a === cur ? cur + 1 : a)), 220);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
32
59
|
};
|
|
33
60
|
const typeOther = (text) => {
|
|
34
61
|
setOther((o) => ({ ...o, [active]: text }));
|
|
@@ -46,21 +73,29 @@ export function AskUser({ questions, onSubmit, onCancel }) {
|
|
|
46
73
|
vals.push(o);
|
|
47
74
|
answers[qq.header] = vals;
|
|
48
75
|
});
|
|
76
|
+
drafts.delete(key);
|
|
49
77
|
onSubmit(answers);
|
|
50
78
|
};
|
|
51
|
-
|
|
79
|
+
const cancel = () => {
|
|
80
|
+
drafts.delete(key);
|
|
81
|
+
onCancel();
|
|
82
|
+
};
|
|
83
|
+
return (_jsxs("div", { style: S.card, className: "ask-card", role: "group", "aria-label": "Questions from the assistant", children: [_jsxs("div", { style: S.head, children: [_jsx("span", { style: S.headIcon, children: _jsx(IcUser, { size: 14 }) }), _jsx("span", { style: S.headTitle, children: questions.length > 1 ? `${questions.length} quick questions` : 'A quick question' }), _jsx("button", { style: S.dismiss, onClick: cancel, title: "Dismiss", "aria-label": "Dismiss", children: "Skip" })] }), _jsx("div", { style: S.tabs, role: "tablist", children: questions.map((qq, i) => {
|
|
52
84
|
const ok = answered(i);
|
|
53
85
|
return (_jsxs("button", { role: "tab", "aria-selected": i === active, style: S.tab(i === active), onClick: () => setActive(i), children: [_jsx("span", { style: S.tabLabel, children: qq.header }), _jsx("span", { style: { ...S.tabDot, ...(ok ? S.tabDotOk : null) } })] }, i));
|
|
54
86
|
}) }), _jsx("div", { style: S.body, children: _jsxs("div", { className: "ask-q", style: S.q, children: [_jsx("div", { style: S.question, children: q.question }), q.multiSelect && _jsx("div", { style: S.multiHint, children: "select all that apply" }), _jsxs("div", { style: S.opts, children: [q.options.map((opt) => {
|
|
55
87
|
const on = sel.includes(opt.label);
|
|
56
88
|
return (_jsxs("button", { className: "ask-opt", style: { ...S.opt, ...(on ? S.optOn : null) }, onClick: () => pick(opt.label), "aria-pressed": on, children: [_jsx("span", { style: { ...S.mark, ...(q.multiSelect ? S.markBox : S.markDot), ...(on ? S.markOn : null) }, children: on && _jsx(IcCheck, { size: 12 }) }), _jsxs("span", { style: S.optBody, children: [_jsx("span", { style: S.optLabel, children: opt.label }), opt.description && _jsx("span", { style: S.optDesc, children: opt.description })] })] }, opt.label));
|
|
57
|
-
}), _jsxs("div", { style: { ...S.opt, ...S.otherRow, ...(otherActive ? S.optOn : null) }, className: "ask-opt", children: [_jsx("span", { style: { ...S.mark, ...(q.multiSelect ? S.markBox : S.markDot), ...(otherActive ? S.markOn : null) }, children: otherActive && _jsx(IcCheck, { size: 12 }) }), _jsx("input", { style: S.otherInput, placeholder: "Other\u2026", value: other[active] ?? '', onChange: (e) => typeOther(e.target.value) })] })] })] }, active) }), _jsxs("div", { style: S.foot, children: [_jsxs("button", { style: S.cancel, onClick:
|
|
89
|
+
}), _jsxs("div", { style: { ...S.opt, ...S.otherRow, ...(otherActive ? S.optOn : null) }, className: "ask-opt", children: [_jsx("span", { style: { ...S.mark, ...(q.multiSelect ? S.markBox : S.markDot), ...(otherActive ? S.markOn : null) }, children: otherActive && _jsx(IcCheck, { size: 12 }) }), _jsx("input", { style: S.otherInput, placeholder: "Other\u2026", value: other[active] ?? '', onChange: (e) => typeOther(e.target.value) })] })] })] }, active) }), _jsxs("div", { style: S.foot, children: [_jsxs("button", { style: S.cancel, onClick: cancel, children: [_jsx(IcX, { size: 13 }), " Dismiss"] }), _jsx("div", { style: { flex: 1 } }), questions.length > 1 && _jsxs("span", { style: S.progress, children: [answeredCount, "/", questions.length, " answered"] }), isLast ? (_jsxs("button", { style: { ...S.submit, ...(canSubmit ? null : S.submitOff) }, onClick: submit, disabled: !canSubmit, children: [_jsx(IcCheck, { size: 14 }), " ", questions.length > 1 ? 'Submit answers' : 'Submit answer'] })) : (_jsxs("button", { style: { ...S.submit, ...(answered(active) ? null : S.submitOff) }, onClick: goNext, disabled: !answered(active), children: ["Next ", _jsx("span", { style: S.nextChevron, children: _jsx(IcChevron, { size: 14 }) })] }))] })] }));
|
|
58
90
|
}
|
|
59
91
|
const S = {
|
|
60
92
|
// Drawer attached to the top of the chatbox: edge-to-edge, top border + rounded
|
|
61
93
|
// top, lifted with an upward shadow. Slides up via the .ask-card animation.
|
|
62
|
-
|
|
63
|
-
|
|
94
|
+
// The card may SHRINK (options scroll inside body) so the foot with Next/Submit
|
|
95
|
+
// never gets pushed off a short viewport (landscape phone) — head/tabs/foot are
|
|
96
|
+
// fixed, body is the flexible region.
|
|
97
|
+
card: { display: 'flex', flexDirection: 'column', flexShrink: 1, minHeight: 0, borderTop: '1px solid var(--border-default)', borderRadius: 'var(--radius-lg) var(--radius-lg) 0 0', background: 'var(--surface-1)', boxShadow: '0 -10px 28px -14px rgba(0,0,0,0.45)', overflow: 'hidden' },
|
|
98
|
+
head: { display: 'flex', alignItems: 'center', gap: 8, padding: '10px 12px', borderBottom: '1px solid var(--border-subtle)', flexShrink: 0 },
|
|
64
99
|
headIcon: { display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: 24, height: 24, borderRadius: 'var(--radius-sm)', background: 'var(--accent-soft)', color: 'var(--accent)', flexShrink: 0 },
|
|
65
100
|
headTitle: { fontSize: 14, fontWeight: 600, color: 'var(--text-primary)' },
|
|
66
101
|
dismiss: { marginLeft: 'auto', height: 26, padding: '0 8px', border: 0, borderRadius: 'var(--radius-sm)', background: 'transparent', color: 'var(--text-tertiary)', fontSize: 12, fontWeight: 600, fontFamily: 'inherit', cursor: 'pointer' },
|
|
@@ -69,7 +104,7 @@ const S = {
|
|
|
69
104
|
tabLabel: { textTransform: 'uppercase', letterSpacing: '0.04em' },
|
|
70
105
|
tabDot: { width: 6, height: 6, borderRadius: 999, background: 'var(--border-default)', flexShrink: 0 },
|
|
71
106
|
tabDotOk: { background: 'var(--accent)' },
|
|
72
|
-
body: { display: 'flex', flexDirection: 'column', padding: 14, maxHeight: 'min(52vh, 420px)', overflowY: 'auto' },
|
|
107
|
+
body: { display: 'flex', flexDirection: 'column', padding: 14, flex: '0 1 auto', minHeight: 0, maxHeight: 'min(52vh, 420px)', overflowY: 'auto' },
|
|
73
108
|
q: { display: 'flex', flexDirection: 'column', gap: 10 },
|
|
74
109
|
multiHint: { fontSize: 11, color: 'var(--text-tertiary)', marginTop: -4 },
|
|
75
110
|
question: { fontSize: 15, fontWeight: 500, lineHeight: 1.45, color: 'var(--text-primary)' },
|
|
@@ -85,10 +120,11 @@ const S = {
|
|
|
85
120
|
markOn: { background: 'var(--accent)', border: '1px solid var(--accent)' },
|
|
86
121
|
otherRow: { alignItems: 'center', cursor: 'text' },
|
|
87
122
|
otherInput: { flex: 1, minWidth: 0, border: 0, outline: 'none', background: 'transparent', color: 'var(--text-primary)', fontSize: 14, fontFamily: 'inherit' },
|
|
88
|
-
foot: { display: 'flex', alignItems: 'center', gap: 10, padding: '10px 12px', borderTop: '1px solid var(--border-subtle)', background: 'var(--surface-1)' },
|
|
123
|
+
foot: { display: 'flex', alignItems: 'center', gap: 10, padding: '10px 12px', borderTop: '1px solid var(--border-subtle)', background: 'var(--surface-1)', flexShrink: 0 },
|
|
89
124
|
progress: { marginLeft: 'auto', fontSize: 11.5, color: 'var(--text-tertiary)', fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums' },
|
|
90
125
|
cancel: { display: 'inline-flex', alignItems: 'center', gap: 6, height: 34, padding: '0 12px', border: '1px solid var(--border-subtle)', borderRadius: 'var(--radius-sm)', background: 'transparent', color: 'var(--text-tertiary)', fontSize: 13, fontWeight: 600, fontFamily: 'inherit', cursor: 'pointer' },
|
|
91
|
-
submit: { display: 'inline-flex', alignItems: 'center', gap: 6, height: 34, padding: '0 16px', border: 0, borderRadius: 'var(--radius-sm)', background: 'var(--grad-brand)', color: '#fff', fontSize: 13, fontWeight: 600, fontFamily: 'inherit', cursor: 'pointer', boxShadow: 'var(--shadow-1)' },
|
|
126
|
+
submit: { display: 'inline-flex', alignItems: 'center', gap: 6, height: 34, padding: '0 16px', border: 0, borderRadius: 'var(--radius-sm)', background: 'var(--grad-brand)', color: 'var(--text-on-accent, #fff)', fontSize: 13, fontWeight: 600, fontFamily: 'inherit', cursor: 'pointer', boxShadow: 'var(--shadow-1)' },
|
|
92
127
|
submitOff: { opacity: 0.5, cursor: 'not-allowed', boxShadow: 'none' },
|
|
128
|
+
nextChevron: { display: 'inline-flex', transform: 'rotate(180deg)' },
|
|
93
129
|
};
|
|
94
130
|
//# sourceMappingURL=AskUser.js.map
|
package/dist/AskUser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AskUser.js","sourceRoot":"","sources":["../AskUser.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AskUser.js","sourceRoot":"","sources":["../AskUser.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ReactElement } from 'react';
|
|
2
|
+
import type { CommandTurnInfo } from './commandTurn';
|
|
3
|
+
/** A command that is still running.
|
|
4
|
+
*
|
|
5
|
+
* The elapsed counter is the load-bearing part. "Running" alone cannot
|
|
6
|
+
* distinguish a command that is working from one that is stuck, and the
|
|
7
|
+
* difference is exactly what you want to know at four seconds. A number that
|
|
8
|
+
* keeps climbing says "still waiting" in a way a spinner cannot. */
|
|
9
|
+
export declare function RunningCommand({ command, startedAt }: {
|
|
10
|
+
command: string;
|
|
11
|
+
startedAt: number;
|
|
12
|
+
}): ReactElement;
|
|
13
|
+
export interface CommandTrayProps {
|
|
14
|
+
command: CommandTurnInfo | null;
|
|
15
|
+
/** Promote it into the transcript and the context window. */
|
|
16
|
+
onKeep: (turnId: string) => void;
|
|
17
|
+
/** Drop the card. The turn stays on disk, out of context. */
|
|
18
|
+
onDismiss: (turnId: string) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function CommandTray({ command, onKeep, onDismiss }: CommandTrayProps): ReactElement | null;
|
|
21
|
+
//# sourceMappingURL=CommandTray.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandTray.d.ts","sourceRoot":"","sources":["../CommandTray.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD;;;;;oEAKoE;AACpE,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAiB3G;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,6DAA6D;IAC7D,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,6DAA6D;IAC7D,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,gBAAgB,GAAG,YAAY,GAAG,IAAI,CA+BjG"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* Console output above the composer, until you decide to keep it.
|
|
3
|
+
*
|
|
4
|
+
* A `>pd` command in the chat is written to the session log immediately, but out
|
|
5
|
+
* of context (AgentRuntime.recordCommand). This is where it surfaces: a tray
|
|
6
|
+
* card holding the LAST command's output, which the next command replaces.
|
|
7
|
+
*
|
|
8
|
+
* WHY IT IS NOT A TRANSCRIPT TURN BY DEFAULT. The transcript is the record of a
|
|
9
|
+
* conversation, and its messages are re-sent to the model on every subsequent
|
|
10
|
+
* turn for the rest of the session. Twenty exploratory verbs in a row would turn
|
|
11
|
+
* that record into a terminal log AND charge for it forever. So a command lands
|
|
12
|
+
* here first, and Keep is the one act that promotes it into both the transcript
|
|
13
|
+
* and the model's context - the same decision, which is why it is one button.
|
|
14
|
+
*
|
|
15
|
+
* DISMISS DOES NOT DESTROY ANYTHING. The turn is already on disk and stays
|
|
16
|
+
* listed in the context drawer's excluded turns. The mockup called this variant
|
|
17
|
+
* "ephemeral" on the assumption that dropping it lost the output; it does not,
|
|
18
|
+
* which is what makes defaulting to out-of-context a safe trade rather than a
|
|
19
|
+
* decision you have to get right before the next keystroke.
|
|
20
|
+
*
|
|
21
|
+
* Output is CLAMPED to a short scroller. A directory listing is hundreds of
|
|
22
|
+
* lines, and a tray that grows with its content pushes the composer down - the
|
|
23
|
+
* one control that must never move under your hands.
|
|
24
|
+
*/
|
|
25
|
+
import { useEffect, useState } from 'react';
|
|
26
|
+
import { IcCheck, IcX, IcAlert } from '@corenel/ui-kit/icons';
|
|
27
|
+
/** A command that is still running.
|
|
28
|
+
*
|
|
29
|
+
* The elapsed counter is the load-bearing part. "Running" alone cannot
|
|
30
|
+
* distinguish a command that is working from one that is stuck, and the
|
|
31
|
+
* difference is exactly what you want to know at four seconds. A number that
|
|
32
|
+
* keeps climbing says "still waiting" in a way a spinner cannot. */
|
|
33
|
+
export function RunningCommand({ command, startedAt }) {
|
|
34
|
+
const [now, setNow] = useState(() => Date.now());
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
const t = setInterval(() => setNow(Date.now()), 500);
|
|
37
|
+
return () => clearInterval(t);
|
|
38
|
+
}, []);
|
|
39
|
+
const secs = Math.max(0, Math.round((now - startedAt) / 100) / 10);
|
|
40
|
+
return (_jsxs("div", { style: S.running, role: "status", "aria-live": "polite", "data-testid": "command-running", children: [_jsx("span", { style: S.spinner, "aria-hidden": true }), _jsx("span", { style: S.prompt, "aria-hidden": true, children: ">" }), _jsx("code", { style: S.cmd, children: command }), _jsx("div", { style: S.spacer }), _jsxs("span", { style: S.elapsed, children: [secs.toFixed(1), "s"] })] }));
|
|
41
|
+
}
|
|
42
|
+
export function CommandTray({ command, onKeep, onDismiss }) {
|
|
43
|
+
const [copied, setCopied] = useState(false);
|
|
44
|
+
if (!command)
|
|
45
|
+
return null;
|
|
46
|
+
const copy = () => {
|
|
47
|
+
void navigator.clipboard?.writeText(command.output).then(() => setCopied(true)).catch(() => { });
|
|
48
|
+
};
|
|
49
|
+
return (_jsxs("div", { style: S.tray, role: "status", "aria-label": "Command output", "data-testid": "command-tray", children: [_jsxs("div", { style: S.head, children: [_jsx("span", { style: S.prompt, "aria-hidden": true, children: ">" }), _jsx("code", { style: S.cmd, children: command.command }), !command.ok && (_jsxs("span", { style: S.failed, children: [_jsx(IcAlert, { size: 12 }), " failed"] })), _jsx("div", { style: S.spacer }), _jsxs("button", { style: { ...S.btn, ...S.keep }, onClick: () => onKeep(command.turnId), title: "Add this output to the transcript and the agent's context", children: [_jsx(IcCheck, { size: 12 }), " Keep in context"] }), _jsx("button", { style: S.btn, onClick: copy, title: "Copy output", children: copied ? 'Copied' : 'Copy' }), _jsx("button", { style: S.icon, onClick: () => onDismiss(command.turnId), "aria-label": "dismiss", title: "Dismiss (stays in the session log, out of context)", children: _jsx(IcX, { size: 13 }) })] }), _jsx("pre", { style: S.out, children: command.output || (command.ok ? '(no output)' : '(failed, no output)') })] }));
|
|
50
|
+
}
|
|
51
|
+
const S = {
|
|
52
|
+
running: {
|
|
53
|
+
display: 'flex', alignItems: 'center', gap: 8, minWidth: 0,
|
|
54
|
+
margin: '0 10px 8px', padding: '6px 10px', flexShrink: 0,
|
|
55
|
+
border: '1px solid var(--border-subtle)', borderRadius: 10,
|
|
56
|
+
background: 'var(--surface-2)', color: 'var(--text-secondary)', fontSize: 11.5,
|
|
57
|
+
},
|
|
58
|
+
spinner: {
|
|
59
|
+
width: 9, height: 9, flex: 'none', borderRadius: '50%',
|
|
60
|
+
border: '1.5px solid var(--accent)', borderTopColor: 'transparent',
|
|
61
|
+
// The app's existing keyframe. Reduced-motion is safe to ignore here only
|
|
62
|
+
// because the elapsed counter carries the same information without moving.
|
|
63
|
+
animation: 'spin 700ms linear infinite',
|
|
64
|
+
},
|
|
65
|
+
elapsed: { flex: 'none', fontVariantNumeric: 'tabular-nums', color: 'var(--text-tertiary)' },
|
|
66
|
+
tray: {
|
|
67
|
+
display: 'flex', flexDirection: 'column', minWidth: 0,
|
|
68
|
+
border: '1px solid var(--border-subtle)', borderRadius: 10,
|
|
69
|
+
background: 'var(--surface-2)', overflow: 'hidden',
|
|
70
|
+
// Matches the other above-composer notices' gutter, and never shrinks: a
|
|
71
|
+
// squeezed tray would clip the output it exists to show.
|
|
72
|
+
margin: '0 10px 8px', flexShrink: 0,
|
|
73
|
+
},
|
|
74
|
+
head: {
|
|
75
|
+
display: 'flex', alignItems: 'center', gap: 8, padding: '6px 8px 6px 10px',
|
|
76
|
+
borderBottom: '1px solid var(--border-subtle)', minWidth: 0,
|
|
77
|
+
},
|
|
78
|
+
prompt: { color: 'var(--accent)', fontFamily: 'var(--font-mono, monospace)', fontSize: 12, flex: 'none' },
|
|
79
|
+
cmd: {
|
|
80
|
+
fontFamily: 'var(--font-mono, monospace)', fontSize: 12, color: 'var(--text-primary)',
|
|
81
|
+
minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',
|
|
82
|
+
},
|
|
83
|
+
failed: { display: 'inline-flex', alignItems: 'center', gap: 4, fontSize: 11, color: 'var(--warning)', flex: 'none' },
|
|
84
|
+
spacer: { marginLeft: 'auto' },
|
|
85
|
+
btn: {
|
|
86
|
+
display: 'inline-flex', alignItems: 'center', gap: 4, flex: 'none',
|
|
87
|
+
padding: '3px 8px', borderRadius: 999, border: '1px solid var(--border-subtle)',
|
|
88
|
+
background: 'transparent', color: 'var(--text-secondary)', font: 'inherit', fontSize: 11.5, cursor: 'pointer',
|
|
89
|
+
},
|
|
90
|
+
keep: { color: 'var(--text-primary)', borderColor: 'var(--border-default)' },
|
|
91
|
+
icon: {
|
|
92
|
+
display: 'inline-flex', flex: 'none', padding: 3, borderRadius: 6, border: '1px solid transparent',
|
|
93
|
+
background: 'transparent', color: 'var(--text-tertiary)', cursor: 'pointer',
|
|
94
|
+
},
|
|
95
|
+
// Capped: the tray must not grow with its output and shove the composer down.
|
|
96
|
+
out: {
|
|
97
|
+
margin: 0, padding: '8px 10px', maxHeight: 160, overflow: 'auto',
|
|
98
|
+
fontFamily: 'var(--font-mono, monospace)', fontSize: 11.5, lineHeight: 1.5,
|
|
99
|
+
color: 'var(--text-secondary)', whiteSpace: 'pre-wrap', wordBreak: 'break-word',
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=CommandTray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandTray.js","sourceRoot":"","sources":["../CommandTray.tsx"],"names":[],"mappings":"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"}
|
package/dist/Composer.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export interface SlashCommand {
|
|
|
25
25
|
section?: string;
|
|
26
26
|
icon?: React.ReactNode;
|
|
27
27
|
}
|
|
28
|
-
export declare function Composer({ value, onChange, onSend, onStop, running, mode, onModeChange, modes, chips, onRemoveChip, onAddContext, slashCommands, onPickSlash, attachments, onAttach, onRemoveAttachment, onImageClick, inPrice, }: {
|
|
28
|
+
export declare function Composer({ value, onChange, onSend, onStop, running, mode, onModeChange, modes, chips, onRemoveChip, onAddContext, slashCommands, onPickSlash, attachments, onAttach, onRemoveAttachment, onImageClick, inPrice, showContext, onDropFiles, rightSlot, history, sendLater, }: {
|
|
29
29
|
value: string;
|
|
30
30
|
onChange: (v: string) => void;
|
|
31
31
|
onSend: () => void;
|
|
@@ -36,6 +36,9 @@ export declare function Composer({ value, onChange, onSend, onStop, running, mod
|
|
|
36
36
|
/** The selectable modes (folder-driven). Defaults to the built-ins. */
|
|
37
37
|
modes?: ModeEntry[];
|
|
38
38
|
chips: ContextChip[];
|
|
39
|
+
/** Rendered at the right end of the chip row. Injected rather than imported so
|
|
40
|
+
* this component stays presentational and a host can leave it out. */
|
|
41
|
+
rightSlot?: React.ReactNode;
|
|
39
42
|
onRemoveChip: (id: string) => void;
|
|
40
43
|
onAddContext: () => void;
|
|
41
44
|
slashCommands: SlashCommand[];
|
|
@@ -47,5 +50,18 @@ export declare function Composer({ value, onChange, onSend, onStop, running, mod
|
|
|
47
50
|
onImageClick: (src: string) => void;
|
|
48
51
|
/** Selected model's input price (USD per 1M tokens) for the live cost estimate. */
|
|
49
52
|
inPrice?: number;
|
|
53
|
+
/** Show the context chips + "+ context" affordance. Off for surfaces with no context
|
|
54
|
+
* concept (e.g. Craft), so the row doesn't render a dead button. Default on. */
|
|
55
|
+
showContext?: boolean;
|
|
56
|
+
/** Files dropped onto the composer (the host routes text->context docs,
|
|
57
|
+
* images->attachments). Omitted = drops are ignored as before. */
|
|
58
|
+
onDropFiles?: (files: File[]) => void;
|
|
59
|
+
/** Everything Up/Down recall, oldest first. Omitted = no recall, so a surface
|
|
60
|
+
* without a transcript is unaffected. */
|
|
61
|
+
history?: string[];
|
|
62
|
+
/** Rendered immediately before Send -- the send-later control. Injected rather
|
|
63
|
+
* than imported so this component stays presentational and a surface with no
|
|
64
|
+
* queue (Craft) simply omits it. */
|
|
65
|
+
sendLater?: React.ReactNode;
|
|
50
66
|
}): React.JSX.Element;
|
|
51
67
|
//# sourceMappingURL=Composer.d.ts.map
|
package/dist/Composer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../Composer.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../Composer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgE,MAAM,OAAO,CAAC;AAOrF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B;+EAC+E;AAC/E,MAAM,WAAW,SAAS;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAY9F,iFAAiF;AACjF,eAAO,MAAM,aAAa,EAAE,SAAS,EAKpC,CAAC;AACF,6EAA6E;AAC7E,eAAO,MAAM,KAAK,EAAE,MAAM,EAAmC,CAAC;AAE9D,oGAAoG;AACpG,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAA2E;AAU3H,MAAM,WAAW,WAAW;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE;AAC9E,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE;AActG,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EACxC,IAAI,EAAE,YAAY,EAAE,KAAqB,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAC5E,aAAa,EAAE,WAAW,EAC1B,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EACvD,OAAO,EAAE,WAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GACxE,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,uEAAuE;IACvE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB;0EACsE;IACtE,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,8DAA8D;IAC9D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACvC,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;oFACgF;IAChF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;sEACkE;IAClE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACtC;6CACyC;IACzC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;wCAEoC;IACpC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,qBA4QA"}
|
package/dist/Composer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useRef, useEffect, useLayoutEffect } from 'react';
|
|
2
|
+
import { useState, useRef, useEffect, useLayoutEffect, useMemo } from 'react';
|
|
3
3
|
import { IcPlay, IcStop, IcX, IcFile, IcCode, IcPlus, IcChevron } from '@corenel/ui-kit/icons';
|
|
4
4
|
import { estimateTokens } from '@corenel/ui-kit/ui-helpers';
|
|
5
5
|
import { fmtCost, fmtTok } from '@corenel/ui-kit/usage';
|
|
@@ -25,6 +25,10 @@ export const MODES = DEFAULT_MODES.map((m) => m.id);
|
|
|
25
25
|
export function modeAccent(m) { return m.accent || BUILTIN_MODE_GRAD[m.id] || 'var(--grad-mode-auto)'; }
|
|
26
26
|
// Auto-grow cap for the composer textarea: it grows with content up to here, then scrolls.
|
|
27
27
|
const TEXTAREA_MAX_H = 220;
|
|
28
|
+
// Touch devices get a placeholder without the keyboard-shortcut hints (⏎/⇧⏎/⌘⏎).
|
|
29
|
+
// Primary-pointer coarseness doesn't change at runtime, so a module const is enough
|
|
30
|
+
// (same pattern as editor/inlineAssist).
|
|
31
|
+
const COARSE_POINTER = typeof matchMedia !== 'undefined' && matchMedia('(pointer: coarse)').matches;
|
|
28
32
|
/** Group commands by section, preserving first-seen order; '' sections render unlabeled. */
|
|
29
33
|
function groupBySection(cmds) {
|
|
30
34
|
const order = [];
|
|
@@ -39,8 +43,19 @@ function groupBySection(cmds) {
|
|
|
39
43
|
}
|
|
40
44
|
return order.map((s) => [s, map.get(s)]);
|
|
41
45
|
}
|
|
42
|
-
export function Composer({ value, onChange, onSend, onStop, running, mode, onModeChange, modes = DEFAULT_MODES, chips, onRemoveChip, onAddContext, slashCommands, onPickSlash, attachments, onAttach, onRemoveAttachment, onImageClick, inPrice, }) {
|
|
46
|
+
export function Composer({ value, onChange, onSend, onStop, running, mode, onModeChange, modes = DEFAULT_MODES, chips, onRemoveChip, onAddContext, slashCommands, onPickSlash, attachments, onAttach, onRemoveAttachment, onImageClick, inPrice, showContext = true, onDropFiles, rightSlot, history, sendLater, }) {
|
|
47
|
+
// Named because it is used to decide which LINE the caret sits on, which is
|
|
48
|
+
// the whole of the Up/Down rule below.
|
|
49
|
+
const NEWLINE = '\n';
|
|
43
50
|
const [slashHidden, setSlashHidden] = useState(false);
|
|
51
|
+
/* Where we are in the recalled history. -1 is "not recalling" - the live
|
|
52
|
+
* draft. Held in a ref rather than state because it is read inside the key
|
|
53
|
+
* handler and must reflect the last keystroke, not the last render. */
|
|
54
|
+
const histIdx = useRef(-1);
|
|
55
|
+
/* The draft stashed when recall started, restored on the way back past the
|
|
56
|
+
* newest entry. Losing a half-typed message to a stray Up is the failure that
|
|
57
|
+
* would make people stop trusting the key. */
|
|
58
|
+
const histDraft = useRef('');
|
|
44
59
|
const [slashActive, setSlashActive] = useState(0);
|
|
45
60
|
// Auto-grow the textarea with its content: from a 3-line resting height up to a
|
|
46
61
|
// cap, after which it scrolls. Runs before paint (no flicker) on every value
|
|
@@ -66,7 +81,9 @@ export function Composer({ value, onChange, onSend, onStop, running, mode, onMod
|
|
|
66
81
|
const curMode = modeList.find((mm) => mm.id === mode) ?? { id: mode, label: mode || 'auto', description: '' };
|
|
67
82
|
// Live, rough estimate of THIS message's input cost (text only): est tokens x the
|
|
68
83
|
// selected model's input price. A pre-send sanity check, not a billed figure.
|
|
69
|
-
|
|
84
|
+
// Memoized on the draft: with BPE counts enabled a count is a real encode, and
|
|
85
|
+
// the composer re-renders for plenty of non-text reasons (mode, run state).
|
|
86
|
+
const estTok = useMemo(() => (value.trim() ? estimateTokens(value) : 0), [value]);
|
|
70
87
|
const estCost = inPrice && estTok ? (estTok / 1e6) * inPrice : null;
|
|
71
88
|
// Paste images straight into the composer → data-URL previews (before upload).
|
|
72
89
|
const readAsDataUrl = (f) => new Promise((res) => {
|
|
@@ -101,10 +118,23 @@ export function Composer({ value, onChange, onSend, onStop, running, mode, onMod
|
|
|
101
118
|
document.addEventListener('mousedown', onDoc);
|
|
102
119
|
return () => document.removeEventListener('mousedown', onDoc);
|
|
103
120
|
}, [modeOpen]);
|
|
104
|
-
return (_jsxs("div", { style: S.wrap,
|
|
121
|
+
return (_jsxs("div", { style: S.wrap, "data-testid": "composer-wrap", onDragOver: onDropFiles ? (e) => { e.preventDefault(); } : undefined, onDrop: onDropFiles ? (e) => {
|
|
122
|
+
const files = Array.from(e.dataTransfer?.files ?? []);
|
|
123
|
+
if (files.length) {
|
|
124
|
+
e.preventDefault();
|
|
125
|
+
onDropFiles(files);
|
|
126
|
+
}
|
|
127
|
+
} : undefined, children: [showSlash && filtered.length > 0 && (_jsxs("div", { style: S.slash, children: [groupBySection(filtered).map(([section, items]) => (_jsxs("div", { children: [section && _jsx("div", { style: S.slashSection, children: section }), items.map((c) => {
|
|
105
128
|
const idx = filtered.indexOf(c);
|
|
106
129
|
return (_jsxs("button", { style: S.slashItem(idx === slashActive), onMouseEnter: () => setSlashActive(idx), onClick: () => onPickSlash(c.name), children: [_jsx("span", { style: S.slashIcon, children: c.icon }), _jsxs("span", { style: S.slashName, children: ["/", c.name] }), _jsx("span", { style: S.slashHint, children: c.hint })] }, c.name));
|
|
107
|
-
})] }, section || '_'))), _jsxs("div", { style: S.slashFoot, children: [_jsx("span", { children: "\u2191\u2193 navigate" }), _jsx("span", { children: "\u21B5 select" }), _jsx("span", { children: "esc dismiss" })] })] })), _jsxs("div", { style: S.chips, children: [chips.map((c) => (_jsxs("span", { style: S.chip, title: c.label, children: [c.id === 'selection' ? _jsx(IcCode, { size: 11 }) : _jsx(IcFile, { size: 11 }), _jsx("span", { style: S.chipLabel, children: c.label }), c.removable && _jsx("button", { style: S.chipX, onClick: () => onRemoveChip(c.id), "aria-label": "Remove context", children: _jsx(IcX, { size: 10 }) })] }, c.id))), _jsxs("button", { style: S.addCtx, onClick: onAddContext, title: "Add context", children: [_jsx(IcPlus, { size: 11 }), " context"] })] }), attachments.length > 0 && (_jsx("div", { style: S.thumbs, children: attachments.map((src, i) => (_jsxs("div", { style: S.thumbWrap, children: [_jsx("img", { src: src, alt: `Attachment ${i + 1}`, style: S.thumb, className: "ask-thumb", onClick: () => onImageClick(src), title: "Click to expand" }), _jsx("button", { style: S.thumbX, onClick: () => onRemoveAttachment(i), "aria-label": "Remove image", children: _jsx(IcX, { size: 11 }) })] }, i))) })), _jsx("textarea", { ref: textareaRef, style: S.textarea, value: value, onChange: (e) => {
|
|
130
|
+
})] }, section || '_'))), _jsxs("div", { style: S.slashFoot, children: [_jsx("span", { children: "\u2191\u2193 navigate" }), _jsx("span", { children: "\u21B5 select" }), _jsx("span", { children: "esc dismiss" })] })] })), (showContext || chips.length > 0 || rightSlot) && (_jsxs("div", { style: S.chips, children: [chips.map((c) => (_jsxs("span", { style: S.chip, title: c.label, children: [c.id === 'selection' ? _jsx(IcCode, { size: 11 }) : _jsx(IcFile, { size: 11 }), _jsx("span", { style: S.chipLabel, children: c.label }), c.removable && _jsx("button", { style: S.chipX, onClick: () => onRemoveChip(c.id), "aria-label": "Remove context", children: _jsx(IcX, { size: 10 }) })] }, c.id))), showContext && _jsxs("button", { style: S.addCtx, onClick: onAddContext, title: "Add context", children: [_jsx(IcPlus, { size: 11 }), " context"] }), rightSlot && _jsx("span", { style: S.chipsRight, children: rightSlot })] })), attachments.length > 0 && (_jsx("div", { style: S.thumbs, children: attachments.map((src, i) => (_jsxs("div", { style: S.thumbWrap, children: [_jsx("img", { src: src, alt: `Attachment ${i + 1}`, style: S.thumb, className: "ask-thumb", onClick: () => onImageClick(src), title: "Click to expand" }), _jsx("button", { style: S.thumbX, onClick: () => onRemoveAttachment(i), "aria-label": "Remove image", children: _jsx(IcX, { size: 11 }) })] }, i))) })), _jsx("textarea", { ref: textareaRef, style: S.textarea, value: value, onChange: (e) => {
|
|
131
|
+
setSlashHidden(false);
|
|
132
|
+
// Typing leaves the history: what is in the box is now a draft, and a
|
|
133
|
+
// later Down should not jump to an entry the user has since edited
|
|
134
|
+
// away from.
|
|
135
|
+
histIdx.current = -1;
|
|
136
|
+
onChange(e.target.value);
|
|
137
|
+
}, onPaste: onPaste, onKeyDown: (e) => {
|
|
108
138
|
// While the "/" menu is open it owns the arrows + Enter/Tab/Escape, so a
|
|
109
139
|
// command can be navigated and picked without leaving the keyboard.
|
|
110
140
|
if (showSlash && filtered.length > 0) {
|
|
@@ -129,6 +159,51 @@ export function Composer({ value, onChange, onSend, onStop, running, mode, onMod
|
|
|
129
159
|
return;
|
|
130
160
|
}
|
|
131
161
|
}
|
|
162
|
+
/* Up/Down recall previous messages, the way a shell does.
|
|
163
|
+
*
|
|
164
|
+
* ONLY FROM THE EDGES OF THE DRAFT. Up recalls when the caret is on
|
|
165
|
+
* the first line and Down when it is on the last, because otherwise
|
|
166
|
+
* the arrows could not move through a multi-line message you are
|
|
167
|
+
* still writing - and a composer that will not let you navigate your
|
|
168
|
+
* own text is a worse trade than no history at all. A selection is
|
|
169
|
+
* left alone for the same reason.
|
|
170
|
+
*
|
|
171
|
+
* The slash menu above claims the arrows first while it is open, so
|
|
172
|
+
* this cannot steal them from command navigation.
|
|
173
|
+
*/
|
|
174
|
+
if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && history && history.length > 0
|
|
175
|
+
&& !e.metaKey && !e.ctrlKey && !e.altKey && !e.shiftKey) {
|
|
176
|
+
const el = e.currentTarget;
|
|
177
|
+
const at = el.selectionStart;
|
|
178
|
+
const noSelection = at === el.selectionEnd;
|
|
179
|
+
const onFirstLine = !value.slice(0, at).includes(NEWLINE);
|
|
180
|
+
const onLastLine = !value.slice(at).includes(NEWLINE);
|
|
181
|
+
const stepBack = e.key === 'ArrowUp' && noSelection && onFirstLine;
|
|
182
|
+
const stepForward = e.key === 'ArrowDown' && noSelection && onLastLine && histIdx.current >= 0;
|
|
183
|
+
if (stepBack || stepForward) {
|
|
184
|
+
e.preventDefault();
|
|
185
|
+
// Stash the live draft on the way in, so stepping back past the
|
|
186
|
+
// newest entry returns what you were writing.
|
|
187
|
+
if (histIdx.current < 0)
|
|
188
|
+
histDraft.current = value;
|
|
189
|
+
const next = stepBack
|
|
190
|
+
? Math.min(histIdx.current + 1, history.length - 1)
|
|
191
|
+
: histIdx.current - 1;
|
|
192
|
+
histIdx.current = next;
|
|
193
|
+
const text = next < 0 ? histDraft.current : history[history.length - 1 - next];
|
|
194
|
+
onChange(text);
|
|
195
|
+
setSlashHidden(true);
|
|
196
|
+
// Caret to the end, as a shell does: the common case is a
|
|
197
|
+
// single-line entry you want to edit or resend immediately, and
|
|
198
|
+
// end-of-text leaves the next Up still on the first line.
|
|
199
|
+
requestAnimationFrame(() => {
|
|
200
|
+
const t = textareaRef.current;
|
|
201
|
+
if (t)
|
|
202
|
+
t.setSelectionRange(text.length, text.length);
|
|
203
|
+
});
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
132
207
|
if (e.key !== 'Enter')
|
|
133
208
|
return;
|
|
134
209
|
// ⌘/Ctrl+Enter: don't send — let it bubble to the editor's global handler
|
|
@@ -138,8 +213,17 @@ export function Composer({ value, onChange, onSend, onStop, running, mode, onMod
|
|
|
138
213
|
if (!canSend)
|
|
139
214
|
return;
|
|
140
215
|
e.preventDefault();
|
|
216
|
+
histIdx.current = -1;
|
|
217
|
+
histDraft.current = '';
|
|
141
218
|
onSend();
|
|
142
|
-
}, placeholder:
|
|
219
|
+
}, placeholder: COARSE_POINTER
|
|
220
|
+
? 'Ask the agent… · paste a screenshot'
|
|
221
|
+
: 'Ask the agent… · paste a screenshot · ↵ send · ⇧↵ newline · ⌘↵ run', rows: 3 }), _jsxs("div", { style: S.bottom, children: [!running && sendLater, estTok > 0 && (_jsxs("span", { style: S.est, title: "Rough estimate of this message's input tokens and cost (text only)", children: ["~", fmtTok(estTok), " tok", estCost != null ? ` · est ${fmtCost(estCost)}` : ''] })), _jsxs("div", { ref: stanceRef, style: S.stance, children: [modeOpen ? (modeList.map((mm) => (_jsxs("button", { style: S.stanceOpt(mm.id === mode), title: mm.description || mm.label, onClick: () => { onModeChange(mm.id); setModeOpen(false); }, children: [_jsx("span", { style: { ...S.modeDot, background: modeAccent(mm) } }), mm.label] }, mm.id)))) : (_jsxs("button", { style: S.stanceCurrent, onClick: () => setModeOpen(true), title: curMode.description || curMode.label, children: [_jsx("span", { style: { ...S.modeDot, background: modeAccent(curMode) } }), _jsx("span", { style: S.stanceName, children: curMode.label }), _jsx(IcChevron, { size: 12 })] })), _jsx("span", { style: S.stanceDivider }), running ? (_jsxs("button", { style: { ...S.sendBtn, background: 'var(--grad-stop)' }, onClick: onStop, children: [_jsx(IcStop, { size: 12 }), " Stop"] })) : (
|
|
222
|
+
// One primary per app: a host that declares --grad-send (corenel.ai)
|
|
223
|
+
// paints Send like every other primary button, and mode colour stays
|
|
224
|
+
// on the dot. Without it (prompd.app) this falls back to the mode
|
|
225
|
+
// gradient, which is the historical behaviour.
|
|
226
|
+
_jsxs("button", { style: { ...S.sendBtn, background: `var(--grad-send, ${modeAccent(curMode)})`, color: 'var(--text-on-accent, #fff)' }, onClick: onSend, disabled: !canSend, children: [_jsx(IcPlay, { size: 12 }), " Send"] }))] })] })] }));
|
|
143
227
|
}
|
|
144
228
|
const S = {
|
|
145
229
|
wrap: { position: 'relative', borderTop: '1px solid var(--border-subtle)', background: 'var(--surface-1)', padding: 10, display: 'flex', flexDirection: 'column', gap: 8 },
|
|
@@ -151,6 +235,9 @@ const S = {
|
|
|
151
235
|
slashSection: { padding: '6px 9px 3px', fontSize: 10.5, fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.07em', color: 'var(--text-tertiary)' },
|
|
152
236
|
slashFoot: { display: 'flex', gap: 14, padding: '7px 10px 4px', marginTop: 4, borderTop: '1px solid var(--border-subtle)', fontSize: 11, color: 'var(--text-disabled)', fontFamily: 'var(--font-mono)' },
|
|
153
237
|
chips: { display: 'flex', flexWrap: 'wrap', gap: 6, alignItems: 'center' },
|
|
238
|
+
// marginLeft:auto pushes it to the right edge; minWidth:0 lets its own contents
|
|
239
|
+
// truncate rather than shoving the context chips off the row.
|
|
240
|
+
chipsRight: { marginLeft: 'auto', minWidth: 0, maxWidth: '60%', display: 'flex', justifyContent: 'flex-end' },
|
|
154
241
|
chip: { display: 'inline-flex', alignItems: 'center', gap: 5, height: 22, padding: '0 6px 0 8px', borderRadius: 'var(--radius-pill)', background: 'var(--surface-3)', border: '1px solid var(--border-subtle)', color: 'var(--text-secondary)', fontSize: 11.5, fontFamily: 'var(--font-mono)', maxWidth: 200 },
|
|
155
242
|
chipLabel: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' },
|
|
156
243
|
chipX: { display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: 14, height: 14, border: 0, borderRadius: 999, background: 'transparent', color: 'var(--text-tertiary)', cursor: 'pointer', padding: 0 },
|