@corenel/web-ui 0.1.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.
Files changed (61) hide show
  1. package/dist/AskUser.d.ts +8 -0
  2. package/dist/AskUser.d.ts.map +1 -0
  3. package/dist/AskUser.js +94 -0
  4. package/dist/AskUser.js.map +1 -0
  5. package/dist/CommandPalette.d.ts +13 -0
  6. package/dist/CommandPalette.d.ts.map +1 -0
  7. package/dist/CommandPalette.js +54 -0
  8. package/dist/CommandPalette.js.map +1 -0
  9. package/dist/Composer.d.ts +51 -0
  10. package/dist/Composer.d.ts.map +1 -0
  11. package/dist/Composer.js +174 -0
  12. package/dist/Composer.js.map +1 -0
  13. package/dist/ContextBar.d.ts +9 -0
  14. package/dist/ContextBar.d.ts.map +1 -0
  15. package/dist/ContextBar.js +45 -0
  16. package/dist/ContextBar.js.map +1 -0
  17. package/dist/ContextManager.d.ts +33 -0
  18. package/dist/ContextManager.d.ts.map +1 -0
  19. package/dist/ContextManager.js +145 -0
  20. package/dist/ContextManager.js.map +1 -0
  21. package/dist/Lightbox.d.ts +6 -0
  22. package/dist/Lightbox.d.ts.map +1 -0
  23. package/dist/Lightbox.js +22 -0
  24. package/dist/Lightbox.js.map +1 -0
  25. package/dist/RichContent.d.ts +27 -0
  26. package/dist/RichContent.d.ts.map +1 -0
  27. package/dist/RichContent.js +267 -0
  28. package/dist/RichContent.js.map +1 -0
  29. package/dist/SummaryTranscript.d.ts +17 -0
  30. package/dist/SummaryTranscript.d.ts.map +1 -0
  31. package/dist/SummaryTranscript.js +23 -0
  32. package/dist/SummaryTranscript.js.map +1 -0
  33. package/dist/TodoPanel.d.ts +2 -0
  34. package/dist/TodoPanel.d.ts.map +1 -0
  35. package/dist/TodoPanel.js +173 -0
  36. package/dist/TodoPanel.js.map +1 -0
  37. package/dist/Transcript.d.ts +27 -0
  38. package/dist/Transcript.d.ts.map +1 -0
  39. package/dist/Transcript.js +179 -0
  40. package/dist/Transcript.js.map +1 -0
  41. package/dist/diff.d.ts +10 -0
  42. package/dist/diff.d.ts.map +1 -0
  43. package/dist/diff.js +52 -0
  44. package/dist/diff.js.map +1 -0
  45. package/dist/editDecisions.d.ts +14 -0
  46. package/dist/editDecisions.d.ts.map +1 -0
  47. package/dist/editDecisions.js +77 -0
  48. package/dist/editDecisions.js.map +1 -0
  49. package/dist/liveEdit.d.ts +18 -0
  50. package/dist/liveEdit.d.ts.map +1 -0
  51. package/dist/liveEdit.js +71 -0
  52. package/dist/liveEdit.js.map +1 -0
  53. package/dist/toolRender.d.ts +31 -0
  54. package/dist/toolRender.d.ts.map +1 -0
  55. package/dist/toolRender.js +163 -0
  56. package/dist/toolRender.js.map +1 -0
  57. package/dist/transcriptView.d.ts +16 -0
  58. package/dist/transcriptView.d.ts.map +1 -0
  59. package/dist/transcriptView.js +69 -0
  60. package/dist/transcriptView.js.map +1 -0
  61. package/package.json +42 -0
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { AskQuestion, AskAnswers } from '@corenel/protocol';
3
+ export declare function AskUser({ questions, onSubmit, onCancel }: {
4
+ questions: AskQuestion[];
5
+ onSubmit: (answers: AskAnswers) => void;
6
+ onCancel: () => void;
7
+ }): React.JSX.Element;
8
+ //# sourceMappingURL=AskUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskUser.d.ts","sourceRoot":"","sources":["../AskUser.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEjE,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,qBAkGA"}
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* The agent's ask_user surface: a drawer attached to the chatbox. Each question is
3
+ * a TAB (header = tab label, with an answered dot); the active question shows its
4
+ * options + an optional custom answer. Single- or multi-select per question; Submit
5
+ * is enabled once every question has an answer. On-brand: 1px borders, accent for
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';
9
+ export function AskUser({ questions, onSubmit, onCancel }) {
10
+ const [active, setActive] = useState(0);
11
+ // State is keyed by question INDEX (not header) so two questions that happen to
12
+ // share a header don't share selection. Answers are emitted keyed by header.
13
+ const [selected, setSelected] = useState({});
14
+ const [other, setOther] = useState({});
15
+ const answered = (i) => (selected[i]?.length ?? 0) > 0 || (other[i] ?? '').trim() !== '';
16
+ const answeredCount = useMemo(() => questions.filter((_, i) => answered(i)).length, [questions, selected, other]);
17
+ const canSubmit = answeredCount === questions.length;
18
+ const q = questions[active] ?? questions[0];
19
+ const sel = selected[active] ?? [];
20
+ const otherActive = (other[active] ?? '').trim() !== '';
21
+ const pick = (label) => {
22
+ setSelected((s) => {
23
+ const cur = s[active] ?? [];
24
+ if (q.multiSelect) {
25
+ const next = cur.includes(label) ? cur.filter((l) => l !== label) : [...cur, label];
26
+ return { ...s, [active]: next };
27
+ }
28
+ return { ...s, [active]: [label] };
29
+ });
30
+ if (!q.multiSelect)
31
+ setOther((o) => ({ ...o, [active]: '' }));
32
+ };
33
+ const typeOther = (text) => {
34
+ setOther((o) => ({ ...o, [active]: text }));
35
+ if (!q.multiSelect && text.trim())
36
+ setSelected((s) => ({ ...s, [active]: [] }));
37
+ };
38
+ const submit = () => {
39
+ if (!canSubmit)
40
+ return;
41
+ const answers = {};
42
+ questions.forEach((qq, i) => {
43
+ const vals = [...(selected[i] ?? [])];
44
+ const o = (other[i] ?? '').trim();
45
+ if (o)
46
+ vals.push(o);
47
+ answers[qq.header] = vals;
48
+ });
49
+ onSubmit(answers);
50
+ };
51
+ 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: onCancel, title: "Dismiss", "aria-label": "Dismiss", children: "Skip" })] }), _jsx("div", { style: S.tabs, role: "tablist", children: questions.map((qq, i) => {
52
+ const ok = answered(i);
53
+ 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
+ }) }), _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
+ const on = sel.includes(opt.label);
56
+ 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: onCancel, children: [_jsx(IcX, { size: 13 }), " Dismiss"] }), _jsx("div", { style: { flex: 1 } }), questions.length > 1 && _jsxs("span", { style: S.progress, children: [answeredCount, "/", questions.length, " answered"] }), _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'] })] })] }));
58
+ }
59
+ const S = {
60
+ // Drawer attached to the top of the chatbox: edge-to-edge, top border + rounded
61
+ // top, lifted with an upward shadow. Slides up via the .ask-card animation.
62
+ card: { display: 'flex', flexDirection: 'column', flexShrink: 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' },
63
+ head: { display: 'flex', alignItems: 'center', gap: 8, padding: '10px 12px', borderBottom: '1px solid var(--border-subtle)' },
64
+ 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
+ headTitle: { fontSize: 14, fontWeight: 600, color: 'var(--text-primary)' },
66
+ 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' },
67
+ tabs: { display: 'flex', alignItems: 'stretch', gap: 2, height: 38, flexShrink: 0, padding: '0 8px', borderBottom: '1px solid var(--border-subtle)', overflowX: 'auto' },
68
+ tab: (on) => ({ display: 'inline-flex', alignItems: 'center', gap: 7, padding: '0 12px', border: 0, borderBottom: `2px solid ${on ? 'var(--accent)' : 'transparent'}`, background: 'transparent', color: on ? 'var(--text-primary)' : 'var(--text-tertiary)', fontSize: 12.5, fontWeight: 600, fontFamily: 'inherit', whiteSpace: 'nowrap', cursor: 'pointer' }),
69
+ tabLabel: { textTransform: 'uppercase', letterSpacing: '0.04em' },
70
+ tabDot: { width: 6, height: 6, borderRadius: 999, background: 'var(--border-default)', flexShrink: 0 },
71
+ tabDotOk: { background: 'var(--accent)' },
72
+ body: { display: 'flex', flexDirection: 'column', padding: 14, maxHeight: 'min(52vh, 420px)', overflowY: 'auto' },
73
+ q: { display: 'flex', flexDirection: 'column', gap: 10 },
74
+ multiHint: { fontSize: 11, color: 'var(--text-tertiary)', marginTop: -4 },
75
+ question: { fontSize: 15, fontWeight: 500, lineHeight: 1.45, color: 'var(--text-primary)' },
76
+ opts: { display: 'flex', flexDirection: 'column', gap: 8 },
77
+ opt: { display: 'flex', alignItems: 'flex-start', gap: 10, width: '100%', padding: '11px 12px', border: '1px solid var(--border-subtle)', borderRadius: 'var(--radius-md)', background: 'var(--surface-1)', color: 'var(--text-primary)', cursor: 'pointer', textAlign: 'left', transition: 'border-color var(--motion-fast), background var(--motion-fast)' },
78
+ optOn: { border: '1px solid var(--border-accent)', background: 'var(--accent-soft)' },
79
+ optBody: { display: 'flex', flexDirection: 'column', gap: 2, minWidth: 0, flex: 1 },
80
+ optLabel: { fontSize: 14, fontWeight: 600 },
81
+ optDesc: { fontSize: 12.5, lineHeight: 1.45, color: 'var(--text-tertiary)' },
82
+ mark: { display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: 18, height: 18, flexShrink: 0, marginTop: 1, color: '#fff', border: '1px solid var(--border-default)', background: 'var(--surface-2)' },
83
+ markDot: { borderRadius: 999 },
84
+ markBox: { borderRadius: 'var(--radius-xs)' },
85
+ markOn: { background: 'var(--accent)', border: '1px solid var(--accent)' },
86
+ otherRow: { alignItems: 'center', cursor: 'text' },
87
+ 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)' },
89
+ progress: { marginLeft: 'auto', fontSize: 11.5, color: 'var(--text-tertiary)', fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums' },
90
+ 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)' },
92
+ submitOff: { opacity: 0.5, cursor: 'not-allowed', boxShadow: 'none' },
93
+ };
94
+ //# sourceMappingURL=AskUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskUser.js","sourceRoot":"","sources":["../AskUser.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export interface PaletteCommand {
3
+ id: string;
4
+ label: string;
5
+ hint?: string;
6
+ section?: string;
7
+ run: () => void;
8
+ }
9
+ export declare function CommandPalette({ commands, onClose }: {
10
+ commands: PaletteCommand[];
11
+ onClose: () => void;
12
+ }): React.JSX.Element;
13
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../CommandPalette.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAGpE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,qBA0DxG"}
@@ -0,0 +1,54 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState } from 'react';
3
+ import { IcSearch, IcArrow } from '@corenel/ui-kit/icons';
4
+ export function CommandPalette({ commands, onClose }) {
5
+ const [q, setQ] = useState('');
6
+ const [active, setActive] = useState(0);
7
+ const inputRef = useRef(null);
8
+ useEffect(() => { inputRef.current?.focus(); }, []);
9
+ const filtered = useMemo(() => {
10
+ const needle = q.trim().toLowerCase();
11
+ if (!needle)
12
+ return commands;
13
+ return commands.filter((c) => `${c.label} ${c.hint || ''} ${c.section || ''}`.toLowerCase().includes(needle));
14
+ }, [q, commands]);
15
+ useEffect(() => { setActive(0); }, [q]);
16
+ const choose = (cmd) => {
17
+ if (!cmd)
18
+ return;
19
+ onClose();
20
+ cmd.run();
21
+ };
22
+ return (_jsx("div", { style: S.backdrop, onClick: onClose, children: _jsxs("div", { style: S.modal, onClick: (e) => e.stopPropagation(), role: "dialog", "aria-label": "Command palette", children: [_jsxs("div", { style: S.inputRow, children: [_jsx(IcSearch, { size: 16 }), _jsx("input", { ref: inputRef, style: S.input, value: q, onChange: (e) => setQ(e.target.value), placeholder: "Type a command\u2026", onKeyDown: (e) => {
23
+ if (e.key === 'ArrowDown') {
24
+ e.preventDefault();
25
+ setActive((a) => Math.min(a + 1, filtered.length - 1));
26
+ }
27
+ else if (e.key === 'ArrowUp') {
28
+ e.preventDefault();
29
+ setActive((a) => Math.max(a - 1, 0));
30
+ }
31
+ else if (e.key === 'Enter') {
32
+ e.preventDefault();
33
+ choose(filtered[active]);
34
+ }
35
+ else if (e.key === 'Escape') {
36
+ e.preventDefault();
37
+ onClose();
38
+ }
39
+ } }), _jsx("span", { style: S.kbd, children: "esc" })] }), _jsxs("div", { style: S.list, children: [filtered.length === 0 && _jsx("div", { style: S.empty, children: "No commands" }), filtered.map((c, i) => (_jsxs("button", { style: S.item(i === active), onMouseEnter: () => setActive(i), onClick: () => choose(c), children: [_jsx("span", { style: S.itemLabel, children: c.label }), c.hint && _jsx("span", { style: S.itemHint, children: c.hint }), i === active && _jsx("span", { style: S.enter, children: _jsx(IcArrow, { size: 12 }) })] }, c.id)))] })] }) }));
40
+ }
41
+ const S = {
42
+ backdrop: { position: 'fixed', inset: 0, background: 'var(--surface-overlay)', backdropFilter: 'blur(4px)', display: 'flex', alignItems: 'flex-start', justifyContent: 'center', paddingTop: '14vh', zIndex: 1100 },
43
+ modal: { width: 'min(560px, 92vw)', background: 'var(--surface-1)', border: '1px solid var(--border-default)', borderRadius: 'var(--radius-lg)', boxShadow: 'var(--shadow-5)', overflow: 'hidden' },
44
+ inputRow: { display: 'flex', alignItems: 'center', gap: 10, padding: '12px 14px', borderBottom: '1px solid var(--border-subtle)', color: 'var(--text-tertiary)' },
45
+ input: { flex: 1, border: 0, outline: 'none', background: 'transparent', color: 'var(--text-primary)', fontSize: 15, fontFamily: 'inherit' },
46
+ kbd: { fontFamily: 'var(--font-mono)', fontSize: 11, color: 'var(--text-disabled)', border: '1px solid var(--border-subtle)', borderRadius: 'var(--radius-xs)', padding: '1px 5px' },
47
+ list: { maxHeight: '50vh', overflowY: 'auto', padding: 6 },
48
+ empty: { padding: '16px', color: 'var(--text-tertiary)', fontSize: 13, textAlign: 'center' },
49
+ item: (active) => ({ position: 'relative', display: 'flex', alignItems: 'baseline', gap: 10, width: '100%', padding: '9px 11px', border: 0, borderRadius: 'var(--radius-sm)', background: active ? 'var(--accent-soft)' : 'transparent', color: 'var(--text-primary)', cursor: 'pointer', textAlign: 'left' }),
50
+ itemLabel: { fontSize: 13.5, fontWeight: 500 },
51
+ itemHint: { fontSize: 12, color: 'var(--text-tertiary)', fontFamily: 'var(--font-mono)' },
52
+ enter: { marginLeft: 'auto', color: 'var(--accent)' },
53
+ };
54
+ //# sourceMappingURL=CommandPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../CommandPalette.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+ export type AgentMode = string;
3
+ /** A selectable agent mode. label/description come from the mode file's
4
+ * frontmatter; accent is the composer gradient (else resolved by id below). */
5
+ export interface ModeEntry {
6
+ id: string;
7
+ label: string;
8
+ description: string;
9
+ accent?: string;
10
+ }
11
+ /** The built-in modes — the fallback list when a host doesn't supply its own. */
12
+ export declare const DEFAULT_MODES: ModeEntry[];
13
+ /** Built-in mode ids, in canonical order (back-compat for older imports). */
14
+ export declare const MODES: string[];
15
+ /** The composer gradient for a mode — its own accent, else the built-in by id, else the default. */
16
+ export declare function modeAccent(m: ModeEntry): string;
17
+ export interface ContextChip {
18
+ id: string;
19
+ label: string;
20
+ removable: boolean;
21
+ }
22
+ export interface SlashCommand {
23
+ name: string;
24
+ hint: string;
25
+ section?: string;
26
+ icon?: React.ReactNode;
27
+ }
28
+ export declare function Composer({ value, onChange, onSend, onStop, running, mode, onModeChange, modes, chips, onRemoveChip, onAddContext, slashCommands, onPickSlash, attachments, onAttach, onRemoveAttachment, onImageClick, inPrice, }: {
29
+ value: string;
30
+ onChange: (v: string) => void;
31
+ onSend: () => void;
32
+ onStop: () => void;
33
+ running: boolean;
34
+ mode: AgentMode;
35
+ onModeChange: (m: AgentMode) => void;
36
+ /** The selectable modes (folder-driven). Defaults to the built-ins. */
37
+ modes?: ModeEntry[];
38
+ chips: ContextChip[];
39
+ onRemoveChip: (id: string) => void;
40
+ onAddContext: () => void;
41
+ slashCommands: SlashCommand[];
42
+ onPickSlash: (name: string) => void;
43
+ /** Pasted image previews (data URLs) shown before sending. */
44
+ attachments: string[];
45
+ onAttach: (dataUrls: string[]) => void;
46
+ onRemoveAttachment: (index: number) => void;
47
+ onImageClick: (src: string) => void;
48
+ /** Selected model's input price (USD per 1M tokens) for the live cost estimate. */
49
+ inPrice?: number;
50
+ }): React.JSX.Element;
51
+ //# sourceMappingURL=Composer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../Composer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAO5E,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;AAK3H,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,GACR,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,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;CAClB,qBAgLA"}
@@ -0,0 +1,174 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect, useLayoutEffect } from 'react';
3
+ import { IcPlay, IcStop, IcX, IcFile, IcCode, IcPlus, IcChevron } from '@corenel/ui-kit/icons';
4
+ import { estimateTokens } from '@corenel/ui-kit/ui-helpers';
5
+ import { fmtCost, fmtTok } from '@corenel/ui-kit/usage';
6
+ // Mode gradients are reserved for the chat composer (per the brand system). These
7
+ // back the built-in ids; a custom mode falls back to the auto gradient (or its own
8
+ // frontmatter `accent`).
9
+ const BUILTIN_MODE_GRAD = {
10
+ auto: 'var(--grad-mode-auto)',
11
+ edit: 'var(--grad-mode-edit)',
12
+ plan: 'var(--grad-mode-plan)',
13
+ brainstorm: 'var(--grad-mode-brainstorm)',
14
+ };
15
+ /** The built-in modes — the fallback list when a host doesn't supply its own. */
16
+ export const DEFAULT_MODES = [
17
+ { id: 'auto', label: 'Auto', description: 'No extra steering; the agent picks its own approach.' },
18
+ { id: 'edit', label: 'Edit', description: 'Focus on concrete file changes (prefers propose_edit).' },
19
+ { id: 'plan', label: 'Plan', description: 'Think and outline before acting; avoids mutating tools.' },
20
+ { id: 'brainstorm', label: 'Brainstorm', description: 'Explore options; generative, makes no edits.' },
21
+ ];
22
+ /** Built-in mode ids, in canonical order (back-compat for older imports). */
23
+ export const MODES = DEFAULT_MODES.map((m) => m.id);
24
+ /** The composer gradient for a mode — its own accent, else the built-in by id, else the default. */
25
+ export function modeAccent(m) { return m.accent || BUILTIN_MODE_GRAD[m.id] || 'var(--grad-mode-auto)'; }
26
+ // Auto-grow cap for the composer textarea: it grows with content up to here, then scrolls.
27
+ const TEXTAREA_MAX_H = 220;
28
+ /** Group commands by section, preserving first-seen order; '' sections render unlabeled. */
29
+ function groupBySection(cmds) {
30
+ const order = [];
31
+ const map = new Map();
32
+ for (const c of cmds) {
33
+ const s = c.section || '';
34
+ if (!map.has(s)) {
35
+ map.set(s, []);
36
+ order.push(s);
37
+ }
38
+ map.get(s).push(c);
39
+ }
40
+ return order.map((s) => [s, map.get(s)]);
41
+ }
42
+ export function Composer({ value, onChange, onSend, onStop, running, mode, onModeChange, modes = DEFAULT_MODES, chips, onRemoveChip, onAddContext, slashCommands, onPickSlash, attachments, onAttach, onRemoveAttachment, onImageClick, inPrice, }) {
43
+ const [slashHidden, setSlashHidden] = useState(false);
44
+ const [slashActive, setSlashActive] = useState(0);
45
+ // Auto-grow the textarea with its content: from a 3-line resting height up to a
46
+ // cap, after which it scrolls. Runs before paint (no flicker) on every value
47
+ // change, so clearing after send snaps back to the resting height.
48
+ const textareaRef = useRef(null);
49
+ useLayoutEffect(() => {
50
+ const el = textareaRef.current;
51
+ if (!el)
52
+ return;
53
+ el.style.height = 'auto';
54
+ el.style.height = `${Math.min(el.scrollHeight, TEXTAREA_MAX_H)}px`;
55
+ }, [value]);
56
+ const showSlash = value.startsWith('/') && !value.includes(' ') && !slashHidden;
57
+ const filtered = showSlash
58
+ ? slashCommands.filter((c) => c.name.startsWith(value.slice(1).toLowerCase()))
59
+ : [];
60
+ useEffect(() => { setSlashActive(0); }, [value]);
61
+ const canSend = value.trim().length > 0 || attachments.length > 0;
62
+ // Resolve the mode list + the active entry. If the active id isn't in the list
63
+ // (e.g. a deleted custom mode), synthesize a minimal entry so the control still
64
+ // renders rather than crashing on an undefined accent/label.
65
+ const modeList = modes.length ? modes : DEFAULT_MODES;
66
+ const curMode = modeList.find((mm) => mm.id === mode) ?? { id: mode, label: mode || 'auto', description: '' };
67
+ // Live, rough estimate of THIS message's input cost (text only): est tokens x the
68
+ // selected model's input price. A pre-send sanity check, not a billed figure.
69
+ const estTok = value.trim() ? estimateTokens(value) : 0;
70
+ const estCost = inPrice && estTok ? (estTok / 1e6) * inPrice : null;
71
+ // Paste images straight into the composer → data-URL previews (before upload).
72
+ const readAsDataUrl = (f) => new Promise((res) => {
73
+ const r = new FileReader();
74
+ r.onload = () => res(typeof r.result === 'string' ? r.result : '');
75
+ r.onerror = () => res('');
76
+ r.readAsDataURL(f);
77
+ });
78
+ const onPaste = (e) => {
79
+ const files = Array.from(e.clipboardData?.items || [])
80
+ .filter((it) => it.kind === 'file' && it.type.startsWith('image/'))
81
+ .map((it) => it.getAsFile())
82
+ .filter((f) => !!f);
83
+ if (!files.length)
84
+ return;
85
+ e.preventDefault();
86
+ Promise.all(files.map(readAsDataUrl)).then((urls) => {
87
+ const ok = urls.filter(Boolean);
88
+ if (ok.length)
89
+ onAttach(ok);
90
+ });
91
+ };
92
+ // The mode (stance) is fused to Send: collapsed it shows the current mode; click
93
+ // expands the four options inline (no popup); pick one, it collapses.
94
+ const [modeOpen, setModeOpen] = useState(false);
95
+ const stanceRef = useRef(null);
96
+ useEffect(() => {
97
+ if (!modeOpen)
98
+ return;
99
+ const onDoc = (e) => { if (stanceRef.current && !stanceRef.current.contains(e.target))
100
+ setModeOpen(false); };
101
+ document.addEventListener('mousedown', onDoc);
102
+ return () => document.removeEventListener('mousedown', onDoc);
103
+ }, [modeOpen]);
104
+ return (_jsxs("div", { style: S.wrap, 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
+ const idx = filtered.indexOf(c);
106
+ 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) => { setSlashHidden(false); onChange(e.target.value); }, onPaste: onPaste, onKeyDown: (e) => {
108
+ // While the "/" menu is open it owns the arrows + Enter/Tab/Escape, so a
109
+ // command can be navigated and picked without leaving the keyboard.
110
+ if (showSlash && filtered.length > 0) {
111
+ if (e.key === 'ArrowDown') {
112
+ e.preventDefault();
113
+ setSlashActive((a) => Math.min(a + 1, filtered.length - 1));
114
+ return;
115
+ }
116
+ if (e.key === 'ArrowUp') {
117
+ e.preventDefault();
118
+ setSlashActive((a) => Math.max(a - 1, 0));
119
+ return;
120
+ }
121
+ if (e.key === 'Escape') {
122
+ e.preventDefault();
123
+ setSlashHidden(true);
124
+ return;
125
+ }
126
+ if ((e.key === 'Enter' || e.key === 'Tab') && !e.metaKey && !e.ctrlKey && !e.shiftKey) {
127
+ e.preventDefault();
128
+ onPickSlash(filtered[Math.min(slashActive, filtered.length - 1)].name);
129
+ return;
130
+ }
131
+ }
132
+ if (e.key !== 'Enter')
133
+ return;
134
+ // ⌘/Ctrl+Enter: don't send — let it bubble to the editor's global handler
135
+ // so it runs the prompt. Shift+Enter: newline (default). Enter: send.
136
+ if (e.metaKey || e.ctrlKey || e.shiftKey)
137
+ return;
138
+ if (!canSend)
139
+ return;
140
+ e.preventDefault();
141
+ onSend();
142
+ }, placeholder: "Ask the agent\u2026 \u00B7 paste a screenshot \u00B7 \u21B5 send \u00B7 \u21E7\u21B5 newline \u00B7 \u2318\u21B5 run", rows: 3 }), _jsxs("div", { style: S.bottom, children: [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"] })) : (_jsxs("button", { style: { ...S.sendBtn, background: modeAccent(curMode) }, onClick: onSend, disabled: !canSend, children: [_jsx(IcPlay, { size: 12 }), " Send"] }))] })] })] }));
143
+ }
144
+ const S = {
145
+ wrap: { position: 'relative', borderTop: '1px solid var(--border-subtle)', background: 'var(--surface-1)', padding: 10, display: 'flex', flexDirection: 'column', gap: 8 },
146
+ slash: { position: 'absolute', bottom: 'calc(100% + 6px)', left: 10, right: 10, background: 'var(--surface-1)', border: '1px solid var(--border-default)', borderRadius: 'var(--radius-md)', boxShadow: 'var(--shadow-3)', padding: 4, zIndex: 200, maxHeight: 360, overflow: 'auto' },
147
+ slashItem: (active) => ({ display: 'flex', alignItems: 'center', gap: 9, width: '100%', padding: '7px 9px', border: 0, borderRadius: 'var(--radius-sm)', background: active ? 'var(--accent-soft)' : 'transparent', color: 'var(--text-primary)', cursor: 'pointer', textAlign: 'left' }),
148
+ slashIcon: { display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: 16, color: 'var(--text-tertiary)', flexShrink: 0 },
149
+ slashName: { fontFamily: 'var(--font-mono)', fontSize: 12.5, fontWeight: 600, color: 'var(--accent)', minWidth: 62, flexShrink: 0 },
150
+ slashHint: { fontSize: 12, color: 'var(--text-tertiary)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' },
151
+ slashSection: { padding: '6px 9px 3px', fontSize: 10.5, fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.07em', color: 'var(--text-tertiary)' },
152
+ 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
+ chips: { display: 'flex', flexWrap: 'wrap', gap: 6, alignItems: 'center' },
154
+ 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
+ chipLabel: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' },
156
+ 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 },
157
+ addCtx: { display: 'inline-flex', alignItems: 'center', gap: 4, height: 22, padding: '0 8px', borderRadius: 'var(--radius-pill)', background: 'transparent', border: '1px dashed var(--border-default)', color: 'var(--text-tertiary)', fontSize: 11.5, cursor: 'pointer' },
158
+ thumbs: { display: 'flex', flexWrap: 'wrap', gap: 8 },
159
+ thumbWrap: { position: 'relative', width: 60, height: 60 },
160
+ thumb: { width: 60, height: 60, objectFit: 'cover', borderRadius: 'var(--radius-md)', border: '1px solid var(--border-subtle)', cursor: 'zoom-in', display: 'block' },
161
+ thumbX: { position: 'absolute', top: -6, right: -6, display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: 18, height: 18, borderRadius: 999, border: '1px solid var(--border-default)', background: 'var(--surface-1)', color: 'var(--text-secondary)', cursor: 'pointer', padding: 0, boxShadow: 'var(--shadow-1)' },
162
+ textarea: { width: '100%', boxSizing: 'border-box', resize: 'none', padding: 10, border: '1px solid var(--border-default)', borderRadius: 'var(--radius-md)', background: 'var(--surface-2)', color: 'var(--text-primary)', fontSize: 14, fontFamily: 'inherit', lineHeight: 1.5, outline: 'none', minHeight: 84, maxHeight: TEXTAREA_MAX_H, overflowY: 'auto' },
163
+ bottom: { display: 'flex', alignItems: 'center', gap: 8 },
164
+ est: { fontSize: 11.5, color: 'var(--text-tertiary)', fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums' },
165
+ modeDot: { width: 8, height: 8, borderRadius: 999, flexShrink: 0 },
166
+ // Fused stance + Send: one segmented control on the right of the bar.
167
+ stance: { marginLeft: 'auto', display: 'inline-flex', alignItems: 'stretch', height: 34, border: '1px solid var(--border-default)', borderRadius: 'var(--radius-sm)', overflow: 'hidden', background: 'var(--surface-2)', boxShadow: 'var(--shadow-1)' },
168
+ stanceCurrent: { display: 'inline-flex', alignItems: 'center', gap: 6, padding: '0 10px', border: 0, background: 'transparent', color: 'var(--text-primary)', fontSize: 12.5, fontWeight: 600, fontFamily: 'inherit', textTransform: 'capitalize', cursor: 'pointer' },
169
+ stanceName: { textTransform: 'capitalize' },
170
+ stanceOpt: (active) => ({ display: 'inline-flex', alignItems: 'center', gap: 5, padding: '0 9px', border: 0, background: active ? 'var(--surface-1)' : 'transparent', color: active ? 'var(--text-primary)' : 'var(--text-tertiary)', fontSize: 12, fontWeight: 600, fontFamily: 'inherit', textTransform: 'capitalize', cursor: 'pointer' }),
171
+ stanceDivider: { width: 1, alignSelf: 'stretch', background: 'var(--border-subtle)' },
172
+ sendBtn: { display: 'inline-flex', alignItems: 'center', gap: 6, padding: '0 14px', border: 0, color: '#fff', fontSize: 13, fontWeight: 600, fontFamily: 'inherit', cursor: 'pointer' },
173
+ };
174
+ //# sourceMappingURL=Composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../Composer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { SystemParts } from '@corenel/harness/systemParts';
2
+ export declare function ContextBar({ contextWindow, parts, onToggle, systemSource }: {
3
+ contextWindow: number;
4
+ parts: SystemParts;
5
+ onToggle: (k: keyof SystemParts) => void;
6
+ /** Active system prompt filename, shown in the expanded panel. */
7
+ systemSource?: string;
8
+ }): import("react").JSX.Element;
9
+ //# sourceMappingURL=ContextBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextBar.d.ts","sourceRoot":"","sources":["../ContextBar.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,wBAAgB,UAAU,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;IAC3E,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,WAAW,KAAK,IAAI,CAAC;IACzC,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,+BA8BA"}
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* A slim context-window bar under the Assistant header: the last run's fill vs
3
+ * the model window + percent. Click to expand into the full Context Manager
4
+ * (composition, system-prompt toggles, warm turns, compression). */
5
+ import { useState } from 'react';
6
+ import { fmtTok } from '@corenel/ui-kit/usage';
7
+ import { ContextManagerBody, useContextProjection } from './ContextManager';
8
+ import { IcChevron } from '@corenel/ui-kit/icons';
9
+ export function ContextBar({ contextWindow, parts, onToggle, systemSource }) {
10
+ const [open, setOpen] = useState(false);
11
+ // Live projection (system prompt + included warm turns), the SAME number the
12
+ // expanded drawer shows — so the bar updates as you chat and toggle context,
13
+ // not just after a completed run.
14
+ const { projected, pct, over } = useContextProjection(contextWindow, parts);
15
+ const color = over ? 'var(--danger)' : pct > 70 ? 'var(--warning)' : 'var(--accent)';
16
+ return (
17
+ // Closed, the bar casts a deep shadow off its bottom edge so it reads as a lid
18
+ // over the chat. Open, the drawer below carries its own shadow, so the bar's is
19
+ // dropped to avoid doubling.
20
+ _jsxs("div", { style: { ...S.wrap, ...(open ? null : { boxShadow: 'var(--shadow-4)' }) }, children: [_jsxs("button", { style: S.bar, onClick: () => setOpen((o) => !o), title: "Context window \u2014 click for details", "aria-expanded": open, children: [_jsx("span", { style: S.track, children: _jsx("span", { style: { ...S.fill, width: `${pct}%`, background: color } }) }), _jsx("span", { style: S.meta, children: `${fmtTok(projected)} / ${fmtTok(contextWindow)} · ${pct}%` }), _jsx("span", { style: { ...S.chev, transform: open ? 'rotate(180deg)' : 'none' }, children: _jsx(IcChevron, { size: 13 }) })] }), open && (_jsxs("div", { style: S.panel, children: [_jsx("div", { style: S.stats, children: _jsx(ContextManagerBody, { contextWindow: contextWindow, parts: parts, onToggle: onToggle, systemSource: systemSource }) }), _jsxs("button", { style: S.collapse, onClick: () => setOpen(false), title: "Collapse", "aria-label": "Collapse context details", children: [_jsx("span", { style: { ...S.chev, transform: 'rotate(180deg)' }, children: _jsx(IcChevron, { size: 13 }) }), "Collapse"] })] }))] }));
21
+ }
22
+ const S = {
23
+ wrap: { position: 'relative', zIndex: 6, display: 'flex', flexDirection: 'column', flexShrink: 0, borderBottom: '1px solid var(--border-subtle)', background: 'var(--surface-1)' },
24
+ bar: { display: 'flex', alignItems: 'center', gap: 10, height: 30, padding: '0 11px', border: 0, background: 'transparent', cursor: 'pointer', width: '100%' },
25
+ track: { flex: 1, height: 6, borderRadius: 999, background: 'var(--surface-3)', overflow: 'hidden' },
26
+ fill: { display: 'block', height: '100%', borderRadius: 999, transition: 'width var(--motion-fast)' },
27
+ meta: { fontSize: 11.5, color: 'var(--text-tertiary)', fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums', flexShrink: 0 },
28
+ chev: { display: 'inline-flex', color: 'var(--text-tertiary)', transition: 'transform var(--motion-fast)', flexShrink: 0 },
29
+ // The expanded drawer OVERLAYS the chat — it floats below the bar (absolute) so
30
+ // it doesn't push the transcript down, keeping its original drop-shadow lid.
31
+ panel: { position: 'absolute', top: '100%', left: 0, right: 0, zIndex: 5, display: 'flex', flexDirection: 'column', maxHeight: '60vh', overflow: 'hidden', background: 'var(--surface-2)', borderTop: '1px solid var(--border-default)', borderBottom: '1px solid var(--border-default)', boxShadow: 'var(--shadow-3)' },
32
+ parts: { display: 'flex', flexDirection: 'column', gap: 8, padding: '12px 14px', borderBottom: '1px solid var(--border-subtle)', flexShrink: 0 },
33
+ partsHead: { fontSize: 'var(--fs-eyebrow)', fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.08em', color: 'var(--text-tertiary)' },
34
+ partsRow: { display: 'flex', flexWrap: 'wrap', gap: 8 },
35
+ part: (on) => ({
36
+ display: 'inline-flex', alignItems: 'center', gap: 6, padding: '5px 10px', borderRadius: 'var(--radius-sm)',
37
+ border: `1px solid ${on ? 'var(--border-accent, var(--accent))' : 'var(--border-subtle)'}`,
38
+ background: on ? 'var(--accent-soft)' : 'transparent', color: on ? 'var(--text-primary)' : 'var(--text-tertiary)',
39
+ fontSize: 12.5, fontWeight: 600, cursor: 'pointer',
40
+ }),
41
+ partsHint: { fontSize: 11.5, color: 'var(--text-tertiary)', lineHeight: 1.45 },
42
+ stats: { flex: 1, minHeight: 0, display: 'flex' },
43
+ collapse: { display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 6, height: 34, width: '100%', flexShrink: 0, border: 0, borderTop: '1px solid var(--border-subtle)', background: 'transparent', color: 'var(--text-tertiary)', fontSize: 12, fontWeight: 600, fontFamily: 'inherit', cursor: 'pointer' },
44
+ };
45
+ //# sourceMappingURL=ContextBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextBar.js","sourceRoot":"","sources":["../ContextBar.tsx"],"names":[],"mappings":"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"}