@hanzo/ui 8.29.22 → 8.29.23

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 (118) hide show
  1. package/dist/chat/Composer.cjs +181 -99
  2. package/dist/chat/Composer.d.ts +110 -81
  3. package/dist/chat/Composer.d.ts.map +1 -1
  4. package/dist/chat/Composer.js +183 -101
  5. package/dist/chat/Composer.js.map +1 -1
  6. package/dist/chat/Dial.cjs +96 -0
  7. package/dist/chat/Dial.d.ts +7 -0
  8. package/dist/chat/Dial.d.ts.map +1 -0
  9. package/dist/chat/Dial.js +94 -0
  10. package/dist/chat/Dial.js.map +1 -0
  11. package/dist/chat/Dictation.cjs +142 -0
  12. package/dist/chat/Dictation.d.ts +13 -0
  13. package/dist/chat/Dictation.d.ts.map +1 -0
  14. package/dist/chat/Dictation.js +140 -0
  15. package/dist/chat/Dictation.js.map +1 -0
  16. package/dist/chat/Families.cjs +41 -0
  17. package/dist/chat/Families.d.ts +3 -0
  18. package/dist/chat/Families.d.ts.map +1 -0
  19. package/dist/chat/Families.js +39 -0
  20. package/dist/chat/Families.js.map +1 -0
  21. package/dist/chat/Mention.cjs +25 -0
  22. package/dist/chat/Mention.d.ts +16 -0
  23. package/dist/chat/Mention.d.ts.map +1 -0
  24. package/dist/chat/Mention.js +22 -0
  25. package/dist/chat/Mention.js.map +1 -0
  26. package/dist/chat/Palette.cjs +22 -0
  27. package/dist/chat/Palette.d.ts +21 -0
  28. package/dist/chat/Palette.d.ts.map +1 -0
  29. package/dist/chat/Palette.js +20 -0
  30. package/dist/chat/Palette.js.map +1 -0
  31. package/dist/chat/Plus.cjs +76 -0
  32. package/dist/chat/Plus.d.ts +49 -0
  33. package/dist/chat/Plus.d.ts.map +1 -0
  34. package/dist/chat/Plus.js +74 -0
  35. package/dist/chat/Plus.js.map +1 -0
  36. package/dist/chat/Tune.cjs +55 -0
  37. package/dist/chat/Tune.d.ts +49 -0
  38. package/dist/chat/Tune.d.ts.map +1 -0
  39. package/dist/chat/Tune.js +51 -0
  40. package/dist/chat/Tune.js.map +1 -0
  41. package/dist/chat/index.cjs +25 -4
  42. package/dist/chat/index.d.ts +11 -3
  43. package/dist/chat/index.d.ts.map +1 -1
  44. package/dist/chat/index.js +10 -2
  45. package/dist/chat/index.js.map +1 -1
  46. package/dist/chat/languages.cjs +17 -0
  47. package/dist/chat/languages.d.ts +11 -0
  48. package/dist/chat/languages.d.ts.map +1 -0
  49. package/dist/chat/languages.js +15 -0
  50. package/dist/chat/languages.js.map +1 -0
  51. package/dist/chat/pure.cjs +7 -1
  52. package/dist/chat/pure.d.ts +3 -1
  53. package/dist/chat/pure.d.ts.map +1 -1
  54. package/dist/chat/pure.js +4 -0
  55. package/dist/chat/pure.js.map +1 -1
  56. package/dist/chat/ring.cjs +9 -0
  57. package/dist/chat/ring.d.ts +11 -0
  58. package/dist/chat/ring.d.ts.map +1 -0
  59. package/dist/chat/ring.js +7 -0
  60. package/dist/chat/ring.js.map +1 -0
  61. package/dist/chat/send.cjs +3 -2
  62. package/dist/chat/send.d.ts +4 -1
  63. package/dist/chat/send.d.ts.map +1 -1
  64. package/dist/chat/send.js +3 -2
  65. package/dist/chat/send.js.map +1 -1
  66. package/dist/chat/ways.cjs +19 -0
  67. package/dist/chat/ways.d.ts +11 -0
  68. package/dist/chat/ways.d.ts.map +1 -0
  69. package/dist/chat/ways.js +17 -0
  70. package/dist/chat/ways.js.map +1 -0
  71. package/dist/gallery.cjs +4 -1
  72. package/dist/gallery.d.ts.map +1 -1
  73. package/dist/gallery.html +41 -15
  74. package/dist/gallery.js +5 -2
  75. package/dist/gallery.js.map +1 -1
  76. package/dist/models/ModelPicker.cjs +3 -3
  77. package/dist/models/ModelPicker.d.ts +6 -1
  78. package/dist/models/ModelPicker.d.ts.map +1 -1
  79. package/dist/models/ModelPicker.js +3 -3
  80. package/dist/models/ModelPicker.js.map +1 -1
  81. package/dist/models/ModelPickerMenu.cjs +19 -13
  82. package/dist/models/ModelPickerMenu.d.ts +4 -0
  83. package/dist/models/ModelPickerMenu.d.ts.map +1 -1
  84. package/dist/models/ModelPickerMenu.js +19 -13
  85. package/dist/models/ModelPickerMenu.js.map +1 -1
  86. package/dist/models/catalog.cjs +7 -0
  87. package/dist/models/catalog.d.ts +2 -0
  88. package/dist/models/catalog.d.ts.map +1 -1
  89. package/dist/models/catalog.js +6 -0
  90. package/dist/models/catalog.js.map +1 -1
  91. package/dist/models/index.cjs +2 -1
  92. package/dist/models/index.d.ts +1 -1
  93. package/dist/models/index.d.ts.map +1 -1
  94. package/dist/models/index.js +1 -1
  95. package/dist/models/index.js.map +1 -1
  96. package/dist/product/BranchSelect.cjs +1 -1
  97. package/dist/product/BranchSelect.js +1 -1
  98. package/dist/product/BranchSelect.js.map +1 -1
  99. package/dist/product/ChipSelect.cjs +60 -11
  100. package/dist/product/ChipSelect.d.ts +13 -2
  101. package/dist/product/ChipSelect.d.ts.map +1 -1
  102. package/dist/product/ChipSelect.js +61 -12
  103. package/dist/product/ChipSelect.js.map +1 -1
  104. package/dist/product/RepoSelect.cjs +11 -5
  105. package/dist/product/RepoSelect.d.ts +6 -2
  106. package/dist/product/RepoSelect.d.ts.map +1 -1
  107. package/dist/product/RepoSelect.js +13 -7
  108. package/dist/product/RepoSelect.js.map +1 -1
  109. package/dist/product/chipSelect.logic.d.ts +4 -1
  110. package/dist/product/chipSelect.logic.d.ts.map +1 -1
  111. package/dist/product/chipSelect.logic.js.map +1 -1
  112. package/dist/product/index.cjs +3 -3
  113. package/dist/product/index.d.ts +1 -1
  114. package/dist/product/index.d.ts.map +1 -1
  115. package/dist/product/index.js +3 -3
  116. package/dist/product/index.js.map +1 -1
  117. package/dist/styles.css +37 -11
  118. package/package.json +8 -2
@@ -1,127 +1,209 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
- * Composer — the one chat input for every Hanzo surface.
4
+ * Composer — the one composer every Hanzo surface draws: Chat, Dev, Studio, a
5
+ * room, a reply, a run being steered. A surface hands it slots and defaults and
6
+ * nothing else; the field, the keys, the controls and their look are here once.
5
7
  *
6
- * Presentational and controlled: it owns no draft, no transport and no model
7
- * state. `children` is the toolbar slot, which is where a surface puts its
8
- * `ModelPicker`, attachment control or mode chips — that keeps the shell the
9
- * same everywhere while the affordances stay per-surface.
8
+ * ┌ pills ───────────────────────────────┐ where a run goes, which repository
9
+ * │ the field │
10
+ * │ + carried… children ✦ 🎙 ⬆ │ + menu, what the draft carries,
11
+ * └──────────────────────────────────────┘ commands, dictation, send / stop
12
+ * chips… model effort mode
10
13
  *
11
- * The send control is the same button in both states: it submits, and while a
12
- * turn is in flight it stops. Two buttons in one place was the thing every
13
- * surface got subtly different.
14
+ * Above the frame: the surface's `head`, the `/` or `@` list, and the `note`.
15
+ * Under it, one row: the surface's chips, then the model, the effort and the mode.
14
16
  *
15
- * Escape and ArrowUp are not bound. Dismissal belongs to whatever the composer
16
- * floats inside, and history recall needs a turn store this has no view of.
17
+ * THE PERSON'S SETTING (@hanzo/appearance `useComposing`, Settings →
18
+ * Appearance) decides which key sends and whether the chips, the model
19
+ * selector and the mode are drawn, everywhere at once. An axis they left on
20
+ * Auto takes the surface's `defaults`, and the model selector is off until
21
+ * they turn it on.
17
22
  *
18
- * Growth is `Textarea`'s and follows the content, so a wrapped paragraph raises
19
- * the field. `rows` is the floor, `maxHeight` the ceiling.
23
+ * Its paint is @hanzo/design's: `$` tokens and `--primary`, sized through
24
+ * `--density` (the round controls are @hanzo/composer's `Control`), so text
25
+ * size, density and accent change it with the rest of the product.
26
+ *
27
+ * Its own words are the reader's language (@hanzo/i18n `t`). A host's words —
28
+ * its placeholder, a shelf's rows, a chip's label — are drawn as given.
20
29
  */
21
- import { SizableText, XStack, YStack } from '@hanzo/gui';
22
- import { ArrowUp, ChevronDown, CornerDownLeft, Square } from '@hanzogui/lucide-icons-2';
23
- import { Button, Textarea } from '../backends/gui/index.js';
24
- import { slot, tip } from '../backends/gui/slot.js';
30
+ import { SizableText, useMedia, XStack, YStack } from '@hanzo/gui';
31
+ import { useComposing } from '@hanzo/appearance';
32
+ import { Control } from '@hanzo/composer';
33
+ import { phrase } from '@hanzo/i18n';
34
+ import { useI18n } from '@hanzo/i18n/react';
35
+ import { ArrowUp, AudioLines, Square, X } from '@hanzogui/lucide-icons-2';
36
+ import { Voice } from '@hanzo/voice';
37
+ import { useEffect, useRef, useState } from 'react';
38
+ import { Textarea } from '../backends/gui/index.js';
39
+ import { slot } from '../backends/gui/slot.js';
40
+ import { Dial } from './Dial.js';
41
+ import { Dictation } from './Dictation.js';
42
+ import { Mention, trigger } from './Mention.js';
43
+ import { Palette } from './Palette.js';
44
+ import { Plus } from './Plus.js';
25
45
  import { ready, sends } from './send.js';
26
- const PAD = 8;
27
- const MIN_ROWS = 1;
28
- /** How tall the field may grow before it scrolls, px. Uncapped, a long paste
29
- * pushes the thread off screen; narrower frames pass their own. */
30
- const CEILING = 200;
31
- /** Floor for the field, px. `Textarea` defaults to 64, which is three lines of
32
- * chrome before anything is typed. 44 is the touch-target floor. */
33
- const FLOOR = 44;
46
+ import { RING } from './ring.js';
47
+ import { Chips, Tune } from './Tune.js';
34
48
  /**
35
- * The one-line frame: 40px outside, so the field inside is 38 — a 20px line
36
- * with 9px above and below it. The frame is the target, not the glyph, which
37
- * is why the send control can be a 28px mark inside a row a thumb already hits.
49
+ * The resting placeholder. It addresses the person rather than the mechanism,
50
+ * and as one constant it never re-announces when the model changes.
38
51
  */
39
- const LINE = 40;
40
- const LINE_FIELD = LINE - 2;
41
- const LINE_PAD = (LINE_FIELD - 20) / 2;
42
- /** The inline send mark: a glyph in the field's own row, never a filled slab. */
43
- const MARK = 28;
52
+ export const ASK = phrase('Ask anything');
53
+ /** The reading measure: @hanzo/design's prose width, which Width (appearance) retunes. */
54
+ export const MEASURE = 'var(--container-prose, 48rem)';
55
+ /** The space between turns, px: one rhythm for every thread. */
56
+ export const GAP = 20;
57
+ /** The composer's width under a thread: the measure less its 0.75rem gutters, centred, so its edges are the text's. */
58
+ export const measure = { width: 'calc(100% - 1.5rem)', maxW: `calc(${MEASURE} - 1.5rem)`, mx: 'auto' };
59
+ /** The round controls' box, px, and a phone's, a finger's width: `+`, the effort, the mic, its chevron and send all take it, so they share one centreline. */
60
+ export const ROUND = 36;
61
+ const TAP = 44;
62
+ /** The frame's corner, px: 12 on a laptop, 22 on a phone. */
63
+ const CORNER = 12;
64
+ const CORNER_PHONE = 22;
65
+ /** How tall the field grows before it scrolls, px. */
66
+ const CEILING = 200;
67
+ /** The ink on a filled round: the accent's own foreground. */
68
+ const ON = 'var(--primary-foreground)';
69
+ /** A round control with no ground of its own until it is pointed at. */
70
+ const QUIET = { bg: 'transparent', color: 'var(--foreground)', hoverStyle: { bg: '$hover' } };
71
+ /** Ctrl+U (⌘U) uploads, while a composer with an upload is on the page. */
72
+ export function useUpload(upload) {
73
+ const now = useRef(upload);
74
+ now.current = upload;
75
+ useEffect(() => {
76
+ if (!upload)
77
+ return;
78
+ const key = (e) => {
79
+ if ((e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey && e.key.toLowerCase() === 'u') {
80
+ e.preventDefault();
81
+ now.current?.();
82
+ }
83
+ };
84
+ window.addEventListener('keydown', key);
85
+ return () => window.removeEventListener('keydown', key);
86
+ }, [Boolean(upload)]); // eslint-disable-line react-hooks/exhaustive-deps
87
+ }
88
+ /** The modifier state off a keydown, web or native. */
89
+ const modsOf = (e) => ({
90
+ shiftKey: e.shiftKey ?? e.nativeEvent?.shiftKey,
91
+ altKey: e.altKey ?? e.nativeEvent?.altKey,
92
+ metaKey: e.metaKey ?? e.nativeEvent?.metaKey,
93
+ ctrlKey: e.ctrlKey ?? e.nativeEvent?.ctrlKey,
94
+ isComposing: e.isComposing ?? e.nativeEvent?.isComposing,
95
+ // Safari's only honest IME signal on this keydown.
96
+ keyCode: e.keyCode ?? e.nativeEvent?.keyCode,
97
+ });
44
98
  /**
45
- * The resting placeholder.
46
- *
47
- * "Ask anything", not "Send a message" and not "Message <model>". It addresses
48
- * the person rather than describing the mechanism, and being one constant string
49
- * it never has to be recomputed or re-announced when the model or endpoint
50
- * changes — which is what a model-named placeholder forces a surface to do.
99
+ * How far the software keyboard covers the page, px: the layout viewport less the
100
+ * visual one. A phone keyboard that does not shrink the layout leaves a fixed
101
+ * composer under it; this is how far to lift it. Zero where the layout follows the
102
+ * keyboard (the browser resized it) and wherever there is no keyboard.
51
103
  */
52
- export const ASK = 'Ask anything';
53
- export function Composer({ value, onChange, onSend, onStop, busy = false, disabled = false, placeholder = ASK, rows = MIN_ROWS, maxHeight = CEILING, children, hint, label, field, send, head, foot, inline = false, ...props }) {
54
- const sendable = ready(value, busy, disabled);
55
- const keyed = (e) => {
56
- const key = e.key ?? e.nativeEvent?.key ?? '';
57
- const mods = {
58
- shiftKey: e.shiftKey ?? e.nativeEvent?.shiftKey,
59
- altKey: e.altKey ?? e.nativeEvent?.altKey,
60
- metaKey: e.metaKey ?? e.nativeEvent?.metaKey,
61
- ctrlKey: e.ctrlKey ?? e.nativeEvent?.ctrlKey,
62
- isComposing: e.isComposing ?? e.nativeEvent?.isComposing,
63
- // Safari's only honest IME signal on this keydown. Dropping it here would
64
- // put the mid-candidate submit straight back, whatever `sends` checks.
65
- keyCode: e.keyCode ?? e.nativeEvent?.keyCode,
104
+ function useLift() {
105
+ const [lift, setLift] = useState(0);
106
+ useEffect(() => {
107
+ const vv = typeof window === 'undefined' ? null : window.visualViewport;
108
+ if (!vv)
109
+ return;
110
+ const read = () => {
111
+ const covered = Math.round(window.innerHeight - vv.height - vv.offsetTop);
112
+ // A bar of the browser's own coming and going is not a keyboard.
113
+ setLift(covered > 100 ? covered : 0);
66
114
  };
67
- if (!sends(key, mods))
115
+ read();
116
+ vv.addEventListener('resize', read);
117
+ vv.addEventListener('scroll', read);
118
+ return () => {
119
+ vv.removeEventListener('resize', read);
120
+ vv.removeEventListener('scroll', read);
121
+ };
122
+ }, []);
123
+ return lift;
124
+ }
125
+ export function Composer({ value, onChange, onSend, onStop, busy = false, disabled = false, ready: readyProp, placeholder, label, rows = 1, maxHeight = CEILING, field, hint, children, head, pills, carried, plus, slash, at, commands, chips, mind, effort, limits, onUpgrade, mode, voice, language = null, onLanguage, talk, starters, note, column = false, framed = false, narrow: narrowProp, defaults, ...props }) {
126
+ const { t } = useI18n();
127
+ const media = useMedia();
128
+ const narrow = narrowProp ?? !media.sm;
129
+ const hit = narrow ? TAP : ROUND;
130
+ const lift = useLift();
131
+ const chosen = useComposing();
132
+ const rule = chosen.send ?? defaults?.send ?? 'enter';
133
+ const showChips = chosen.chips ?? defaults?.chips ?? true;
134
+ const showModel = chosen.model ?? defaults?.model ?? false;
135
+ const showMode = chosen.mode ?? defaults?.mode ?? true;
136
+ const lit = readyProp ?? ready(value);
137
+ const live = busy ? Boolean(onStop) : lit && !disabled;
138
+ useUpload(plus?.upload);
139
+ // `/` and `@`: the shelf the caret's word opens, filtered by what follows it.
140
+ const [index, setIndex] = useState(0);
141
+ const [closed, setClosed] = useState(null);
142
+ const typed = trigger(value);
143
+ const shelf = typed ? (typed.char === '/' ? slash : at) : undefined;
144
+ const listed = shelf && typed && closed !== value ? shelf.rows.filter((r) => r.label.toLowerCase().includes(typed.query)).slice(0, 8) : null;
145
+ const row = Math.min(index, Math.max(0, (listed?.length ?? 1) - 1));
146
+ useEffect(() => setIndex(0), [typed?.char, typed?.query]);
147
+ const pick = (id) => {
148
+ if (!typed || !shelf)
68
149
  return;
69
- e.preventDefault?.();
70
- if (sendable)
150
+ onChange(value.slice(0, typed.at).trimEnd() + (typed.at > 0 ? ' ' : ''));
151
+ shelf.pick(id);
152
+ };
153
+ const [palette, setPalette] = useState(false);
154
+ const submit = () => {
155
+ if (listed?.length)
156
+ return pick(listed[row].id);
157
+ if (live && !busy)
71
158
  onSend();
72
159
  };
73
- const input = (_jsx(Textarea, { ...slot('composer-field'), rows: rows, placeholder: placeholder, disabled: disabled, borderWidth: 0, ...(inline
74
- ? {
75
- flex: 1,
76
- minW: 0,
77
- minH: LINE_FIELD,
78
- px: 0,
79
- pt: LINE_PAD,
80
- pb: LINE_PAD,
81
- bg: 'transparent',
160
+ const keyed = (e) => {
161
+ const key = e?.key ?? e?.nativeEvent?.key ?? '';
162
+ const mods = modsOf(e ?? {});
163
+ if (listed) {
164
+ if (key === 'ArrowDown') {
165
+ e.preventDefault?.();
166
+ return setIndex((i) => Math.min(i + 1, listed.length - 1));
167
+ }
168
+ if (key === 'ArrowUp') {
169
+ e.preventDefault?.();
170
+ return setIndex((i) => Math.max(0, i - 1));
82
171
  }
83
- : { minH: FLOOR }), maxH: maxHeight, "aria-label": label ?? placeholder, ...field,
84
- // After `field`: spread over, a caller's `onKeyDown` would replace the
85
- // Enter rule and the IME guard. Theirs runs first and can claim the key.
172
+ if (key === 'Escape') {
173
+ e.preventDefault?.();
174
+ return setClosed(value);
175
+ }
176
+ }
177
+ if (commands?.length && (mods.metaKey || mods.ctrlKey) && key.toLowerCase() === 'k') {
178
+ e.preventDefault?.();
179
+ return setPalette(true);
180
+ }
181
+ if (!sends(key, mods, rule))
182
+ return;
183
+ e.preventDefault?.();
184
+ submit();
185
+ };
186
+ const input = (_jsx(Textarea, { ...slot('composer-field'), rows: rows, placeholder: placeholder ?? t(ASK), disabled: disabled, borderWidth: 0, fontSize: 16, lineHeight: 24, px: 8, pt: 2, pb: 0, minH: 26, maxH: maxHeight, bg: "transparent", "aria-label": label ?? placeholder ?? t(ASK), ...field,
187
+ // After `field`: a caller's `onKeyDown` runs first and can claim the key,
188
+ // but cannot replace the send rule and the IME guard.
86
189
  value: value, onChangeText: onChange, onKeyDown: (e) => {
87
190
  field?.onKeyDown?.(e);
88
191
  if (!e?.defaultPrevented)
89
192
  keyed(e);
90
193
  } }));
91
- const said = hint ? (_jsx(SizableText, { size: "$1", color: "$soft", children: hint })) : null;
92
- const frame = inline ? (_jsxs(XStack, { ...slot('composer'), "data-variant": "inline", width: "100%", items: "center", rounded: "$3", borderWidth: 1, borderColor: "$rim", bg: "$hover", paddingInlineStart: "$3", paddingInlineEnd: "$1.5", gap: "$1.5", ...props, children: [input, children, said, send ?? (_jsx(XStack, { ...slot('composer-send'), ...tip(busy ? 'Stop' : 'Send'), role: "button", tabIndex: busy ? (onStop ? 0 : -1) : sendable ? 0 : -1, "aria-label": busy ? 'Stop' : 'Send', "aria-disabled": busy ? !onStop : !sendable, width: MARK, height: MARK, shrink: 0, rounded: "$2", items: "center", justify: "center", cursor: (busy ? onStop : sendable) ? 'pointer' : 'default', opacity: (busy ? onStop : sendable) ? 1 : 0.6, hoverStyle: { bg: '$raised' }, onPress: () => (busy ? onStop?.() : sendable ? onSend() : undefined), onKeyDown: (e) => {
93
- if (e?.key !== 'Enter' && e?.key !== ' ')
94
- return;
95
- e.preventDefault?.();
96
- if (busy)
97
- onStop?.();
98
- else if (sendable)
99
- onSend();
100
- }, children: busy ? _jsx(Square, { size: 12, color: "$soft" }) : _jsx(CornerDownLeft, { size: 14, color: "$soft" }) }))] })) : (_jsxs(YStack, { ...slot('composer'), width: "100%", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", p: PAD, gap: PAD, ...props, children: [input, _jsxs(XStack, { items: "center", gap: PAD, children: [children, _jsx(XStack, { flex: 1 }), said, send ?? (_jsx(Button, { ...slot('composer-send'), size: "sm", disabled: busy ? !onStop : !sendable, onPress: busy ? onStop : onSend, "aria-label": busy ? 'Stop' : 'Send',
101
- // A circle, and the room's one primary control. The height is the
102
- // size's; `aspectRatio` takes the width from it, so no second number
103
- // is written down. `--primary` is the accent a reader picks, and at
104
- // rest it is the ink pair Send already paints in both themes.
105
- px: 0, aspectRatio: 1, rounded: 'var(--radius-full, 9999px)', bg: "var(--primary)", borderWidth: 0, hoverStyle: { bg: 'var(--primary)', opacity: 0.9 }, pressStyle: { bg: 'var(--primary)', opacity: 0.85 }, children: busy ? (_jsx(Square, { size: 14, color: 'var(--primary-foreground)' })) : (_jsx(ArrowUp, { size: 16, color: 'var(--primary-foreground)' })) }))] })] }));
106
- // With nothing above or below it the composer IS the frame, exactly as it
107
- // was before either existed — no wrapper, so every caller's tree is unchanged.
108
- if (!head && !foot)
109
- return frame;
110
- return (_jsxs(YStack, { ...slot('composer-shell'), width: "100%", gap: "$2.5", children: [head ? (_jsx(XStack, { ...slot('composer-head'), items: "center", gap: "$1.5", flexWrap: "wrap", children: head })) : null, frame, foot ? (_jsx(XStack, { ...slot('composer-foot'), items: "center", gap: "$2", px: "$1.5", mt: -4, children: foot })) : null] }));
111
- }
112
- /**
113
- * ComposerTool — one quiet control in a composer's `foot` or `head`: attach,
114
- * voice, a mode, the model. 24px tall, muted until pointed at, and a real
115
- * button to the keyboard. Its name is `label` whether or not it shows words,
116
- * because an icon-only control is the whole navigation for someone who cannot
117
- * see the icon.
118
- */
119
- export function ComposerTool({ label, icon, text, caret = false, onPress, disabled = false, ...rest }) {
120
- return (_jsxs(XStack, { ...slot('composer-tool'), ...tip(label), role: "button", tabIndex: disabled ? -1 : 0, "aria-label": label, "aria-disabled": disabled || undefined, "aria-haspopup": caret ? 'menu' : undefined, height: 24, px: text ? '$1.5' : '$1', gap: "$1", items: "center", rounded: "$2", shrink: 0, cursor: disabled ? 'default' : 'pointer', opacity: disabled ? 0.5 : 1, hoverStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: { outlineColor: '$outlineColor', outlineWidth: 2, outlineStyle: 'solid' }, hitSlop: { top: 10, bottom: 10, left: 2, right: 2 }, onPress: disabled ? undefined : onPress, onKeyDown: (e) => {
121
- if (disabled || (e?.key !== 'Enter' && e?.key !== ' '))
194
+ const round = (_jsx(Control, { type: "button", size: hit, fill: true, rounded: 999, ...slot('composer-send'), "aria-label": t(busy ? 'Stop' : 'Send'), "aria-disabled": !live || undefined, opacity: live ? 1 : 0.4, focusVisibleStyle: RING, onClick: () => {
195
+ if (!live)
122
196
  return;
123
- e.preventDefault?.();
124
- onPress?.();
125
- }, ...rest, children: [icon ? (_jsx(XStack, { "aria-hidden": true, items: "center", children: icon })) : null, text ? (_jsx(SizableText, { size: "$2", color: "$quiet", numberOfLines: 1, children: text })) : null, caret ? _jsx(ChevronDown, { size: 12, color: "$soft", "aria-hidden": true }) : null] }));
197
+ if (busy)
198
+ onStop?.();
199
+ else
200
+ onSend();
201
+ }, children: busy ? _jsx(Square, { size: 13, color: ON, fill: ON }) : _jsx(ArrowUp, { size: 16, strokeWidth: 2.5, color: ON }) }));
202
+ const mention = listed && shelf && typed ? _jsx(Mention, { shelf: shelf, rows: listed, index: row, onPick: pick, skills: typed.char === '/' }) : null;
203
+ const above = starters || head || note || mention ? (_jsxs(YStack, { ...slot('composer-head'), gap: "$1.5", children: [starters, head, mention, note ? (_jsx(SizableText, { ...slot('composer-note'), fontSize: 12, color: "$soft", text: "center", self: "center", children: note })) : null] })) : null;
204
+ const shown = showChips && chips?.length ? chips : null;
205
+ const tuned = (showModel && mind) || (showMode && mode);
206
+ const under = shown || tuned ? (_jsxs(XStack, { ...slot('composer-foot'), items: "center", gap: 6, flexWrap: "wrap", rowGap: 4, width: "100%", children: [shown ? _jsx(Chips, { chips: shown }) : null, tuned ? _jsx(Tune, { mind: showModel ? mind : null, mode: showMode ? mode : null, onUpgrade: onUpgrade, limits: limits }) : null] })) : null;
207
+ return (_jsxs(YStack, { ...slot('composer-shell'), ...(column ? measure : { width: '100%' }), gap: 6, ...(lift ? { mb: lift } : null), ...props, children: [above, _jsxs(YStack, { ...slot('composer'), width: "100%", rounded: CORNER, borderWidth: 1, borderColor: "$borderColor", bg: "$edge", p: 8, pt: pills ? 8 : 12, gap: 6, "$max-sm": { rounded: CORNER_PHONE }, ...(framed ? { boxShadow: 'var(--shadow-sheet-1)' } : null), children: [pills ? (_jsx(XStack, { ...slot('composer-pills'), items: "center", gap: 4, flexWrap: "wrap", rowGap: 4, px: 2, children: pills })) : null, input, _jsxs(XStack, { items: "center", gap: 4, children: [_jsxs(XStack, { ...slot('composer-start'), items: "center", gap: 4, flex: 1, minW: 0, flexWrap: "wrap", children: [plus ? _jsx(Plus, { ...plus, size: hit, disabled: disabled || plus.disabled }) : null, (carried ?? []).map((c) => (_jsxs(XStack, { ...slot('composer-carried'), items: "center", gap: 6, paddingInlineStart: 8, paddingInlineEnd: 4, height: 28, rounded: 8, bg: "$hover", maxW: 180, children: [c.icon ? _jsx(XStack, { "aria-hidden": true, children: c.icon }) : null, _jsx(SizableText, { fontSize: 13, color: "$ink", numberOfLines: 1, shrink: 1, children: c.label }), _jsx(XStack, { render: "button", "aria-label": t('Remove {name}', { name: c.label }), onPress: c.onRemove, width: 20, height: 20, rounded: 6, items: "center", justify: "center", hoverStyle: { bg: '$raised' }, cursor: "pointer", children: _jsx(X, { size: 12, color: "$hint" }) })] }, c.id))), children] }), _jsxs(XStack, { ...slot('composer-end'), items: "center", gap: 4, shrink: 0, children: [hint ? (_jsx(SizableText, { size: "$1", color: "$soft", numberOfLines: 1, children: hint })) : null, effort ? _jsx(Dial, { effort: effort, size: hit, disabled: disabled }) : null, commands?.length ? _jsx(Palette, { commands: commands, open: palette, onOpenChange: setPalette, size: hit, disabled: disabled }) : null, voice ? _jsx(Dictation, { voice: voice, disabled: disabled, size: hit, language: language, ...(onLanguage ? { onLanguage } : {}) }) : null, !busy && !lit && talk ? (_jsx(Control, { asChild: true, size: hit, fill: narrow, rounded: 999, ...(narrow ? null : QUIET), focusVisibleStyle: RING, children: _jsx(Voice, { voice: talk, disabled: disabled, "data-slot": "composer-talk", says: { idle: t('Voice mode'), listening: t('In conversation — click to hang up'), speaking: t('Hanzo is speaking — talk to interrupt') }, children: () => _jsx(AudioLines, { size: 16, color: narrow ? ON : 'var(--foreground)' }) }) })) : (round)] })] })] }), under] }));
126
208
  }
127
209
  //# sourceMappingURL=Composer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../src/chat/Composer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../src/chat/Composer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Dial = Dial;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * The effort, as ONE small icon button — a gauge with the level in a tiny pip —
8
+ * the same in Chat and Dev, in the composer's end row beside the mic.
9
+ *
10
+ * press opens a compact list of the levels, the one in force checked
11
+ * drag press the icon and move along the row: each step of the finger
12
+ * is a level (`STEP` px), snapped to the surface's own list, with a
13
+ * small label above the icon naming the level while it is held
14
+ * ← ↓ / → ↑ the arrows move one level, in the reading direction
15
+ * Enter, Space opens the list
16
+ *
17
+ * The list is the surface's (`Modes`): a chat offers six levels, a coding run four.
18
+ * The pointer events are the page's own — nothing is captured past the press.
19
+ */
20
+ const gui_1 = require("@hanzo/gui");
21
+ const react_1 = require("@hanzo/i18n/react");
22
+ const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
23
+ const react_2 = require("react");
24
+ const gui_2 = require("../backends/gui/index.cjs");
25
+ const ring_1 = require("./ring.cjs");
26
+ const Tune_1 = require("./Tune.cjs");
27
+ /** How far the finger travels for one level, px. */
28
+ const STEP = 22;
29
+ /** The pip: the level in a letter or two, so the icon says where it stands without a word. */
30
+ const PIP = { auto: 'A', low: 'L', medium: 'M', high: 'H', xhigh: 'XH', max: 'MAX' };
31
+ const pip = (id, label) => PIP[id] ?? label.slice(0, 1).toUpperCase();
32
+ function Dial({ effort, size = 36, disabled = false }) {
33
+ const { t, dir } = (0, react_1.useI18n)();
34
+ const [open, setOpen] = (0, react_2.useState)(false);
35
+ // The level under the finger while it is held, as a place in the list.
36
+ const [held, setHeld] = (0, react_2.useState)(null);
37
+ const press = (0, react_2.useRef)(null);
38
+ const index = Math.max(0, effort.items.findIndex((e) => e.id === effort.value));
39
+ const now = effort.items[index] ?? effort.items[0];
40
+ const shown = held === null ? now : (effort.items[held] ?? now);
41
+ const flip = dir === 'rtl' ? -1 : 1;
42
+ const clamp = (i) => Math.max(0, Math.min(effort.items.length - 1, i));
43
+ const go = (i) => {
44
+ const next = effort.items[clamp(i)];
45
+ if (next && next.id !== effort.value)
46
+ effort.set(next.id);
47
+ };
48
+ return ((0, jsx_runtime_1.jsxs)(gui_2.Popover, { open: open, onOpenChange: setOpen, allowFlip: true, placement: "top-end", children: [(0, jsx_runtime_1.jsx)(gui_2.PopoverAnchor, { asChild: true, children: (0, jsx_runtime_1.jsxs)(gui_1.XStack, { position: "relative", shrink: 0, "data-slot": "dial", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { render: "button", "data-slot": "dial-button", "aria-label": t('Effort: {level}', { level: t(now.label) }), "aria-haspopup": "listbox", "aria-expanded": open, "aria-disabled": disabled || undefined, tabIndex: disabled ? -1 : 0, width: size, height: size, rounded: 999, items: "center", justify: "center", shrink: 0, position: "relative", cursor: disabled ? 'default' : 'ew-resize', opacity: disabled ? 0.5 : 1, bg: open || held !== null ? '$hover' : 'transparent', hoverStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: ring_1.RING,
49
+ // inline-style: the page must not scroll or select under a drag along the icon.
50
+ style: { touchAction: 'none', userSelect: 'none' }, onPointerDown: (e) => {
51
+ if (disabled)
52
+ return;
53
+ press.current = { x: e.clientX, at: index, moved: false };
54
+ e.currentTarget?.setPointerCapture?.(e.pointerId);
55
+ }, onPointerMove: (e) => {
56
+ const p = press.current;
57
+ if (!p)
58
+ return;
59
+ const dx = (e.clientX - p.x) * flip;
60
+ if (Math.abs(dx) > 4)
61
+ p.moved = true;
62
+ if (p.moved)
63
+ setHeld(clamp(p.at + Math.round(dx / STEP)));
64
+ }, onPointerUp: (e) => {
65
+ const p = press.current;
66
+ press.current = null;
67
+ e.currentTarget?.releasePointerCapture?.(e.pointerId);
68
+ if (!p)
69
+ return;
70
+ if (p.moved) {
71
+ go(held ?? p.at);
72
+ setHeld(null);
73
+ }
74
+ else
75
+ setOpen((o) => !o);
76
+ }, onPointerCancel: () => {
77
+ press.current = null;
78
+ setHeld(null);
79
+ }, onKeyDown: (e) => {
80
+ if (disabled)
81
+ return;
82
+ const key = e?.key;
83
+ const step = key === 'ArrowRight' || key === 'ArrowUp' ? flip : key === 'ArrowLeft' || key === 'ArrowDown' ? -flip : 0;
84
+ if (step) {
85
+ e.preventDefault?.();
86
+ go(index + step);
87
+ }
88
+ else if (key === 'Enter' || key === ' ') {
89
+ e.preventDefault?.();
90
+ setOpen((o) => !o);
91
+ }
92
+ }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Gauge, { size: 18, color: "var(--foreground)", "aria-hidden": true }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { "data-slot": "dial-pip", "aria-hidden": true, position: "absolute", b: 3, insetInlineEnd: 2, fontSize: 9, lineHeight: 10, fontWeight: "700", color: "$ink", px: 2, rounded: 4, bg: "$background", children: pip(shown.id, t(shown.label)) })] }), held !== null ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": "dial-tip", role: "status", position: "absolute", b: size + 6, self: "center", px: 8, py: 3, rounded: 6, bg: "$ink", pointerEvents: "none", style: { whiteSpace: 'nowrap' }, children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { fontSize: 12, color: "$background", children: t(shown.label) }) })) : null] }) }), (0, jsx_runtime_1.jsx)(gui_2.PopoverContent, { solid: true, p: 6, width: 288, maxW: "calc(100vw - 24px)", children: (0, jsx_runtime_1.jsx)(Tune_1.Choices, { title: t('Effort'), items: effort.items, value: effort.value, onPick: (id) => {
93
+ effort.set(id);
94
+ setOpen(false);
95
+ } }) })] }));
96
+ }
@@ -0,0 +1,7 @@
1
+ import { type Modes } from './Tune.js';
2
+ export declare function Dial({ effort, size, disabled }: {
3
+ effort: Modes;
4
+ size?: number;
5
+ disabled?: boolean;
6
+ }): import("react").JSX.Element;
7
+ //# sourceMappingURL=Dial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dial.d.ts","sourceRoot":"","sources":["../../src/chat/Dial.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAA;AAU5C,wBAAgB,IAAI,CAAC,EAAE,MAAM,EAAE,IAAS,EAAE,QAAgB,EAAE,EAAE;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,+BAsIjH"}
@@ -0,0 +1,94 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * The effort, as ONE small icon button — a gauge with the level in a tiny pip —
5
+ * the same in Chat and Dev, in the composer's end row beside the mic.
6
+ *
7
+ * press opens a compact list of the levels, the one in force checked
8
+ * drag press the icon and move along the row: each step of the finger
9
+ * is a level (`STEP` px), snapped to the surface's own list, with a
10
+ * small label above the icon naming the level while it is held
11
+ * ← ↓ / → ↑ the arrows move one level, in the reading direction
12
+ * Enter, Space opens the list
13
+ *
14
+ * The list is the surface's (`Modes`): a chat offers six levels, a coding run four.
15
+ * The pointer events are the page's own — nothing is captured past the press.
16
+ */
17
+ import { SizableText, XStack } from '@hanzo/gui';
18
+ import { useI18n } from '@hanzo/i18n/react';
19
+ import { Gauge } from '@hanzogui/lucide-icons-2';
20
+ import { useRef, useState } from 'react';
21
+ import { Popover, PopoverAnchor, PopoverContent } from '../backends/gui/index.js';
22
+ import { RING } from './ring.js';
23
+ import { Choices } from './Tune.js';
24
+ /** How far the finger travels for one level, px. */
25
+ const STEP = 22;
26
+ /** The pip: the level in a letter or two, so the icon says where it stands without a word. */
27
+ const PIP = { auto: 'A', low: 'L', medium: 'M', high: 'H', xhigh: 'XH', max: 'MAX' };
28
+ const pip = (id, label) => PIP[id] ?? label.slice(0, 1).toUpperCase();
29
+ export function Dial({ effort, size = 36, disabled = false }) {
30
+ const { t, dir } = useI18n();
31
+ const [open, setOpen] = useState(false);
32
+ // The level under the finger while it is held, as a place in the list.
33
+ const [held, setHeld] = useState(null);
34
+ const press = useRef(null);
35
+ const index = Math.max(0, effort.items.findIndex((e) => e.id === effort.value));
36
+ const now = effort.items[index] ?? effort.items[0];
37
+ const shown = held === null ? now : (effort.items[held] ?? now);
38
+ const flip = dir === 'rtl' ? -1 : 1;
39
+ const clamp = (i) => Math.max(0, Math.min(effort.items.length - 1, i));
40
+ const go = (i) => {
41
+ const next = effort.items[clamp(i)];
42
+ if (next && next.id !== effort.value)
43
+ effort.set(next.id);
44
+ };
45
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, allowFlip: true, placement: "top-end", children: [_jsx(PopoverAnchor, { asChild: true, children: _jsxs(XStack, { position: "relative", shrink: 0, "data-slot": "dial", children: [_jsxs(XStack, { render: "button", "data-slot": "dial-button", "aria-label": t('Effort: {level}', { level: t(now.label) }), "aria-haspopup": "listbox", "aria-expanded": open, "aria-disabled": disabled || undefined, tabIndex: disabled ? -1 : 0, width: size, height: size, rounded: 999, items: "center", justify: "center", shrink: 0, position: "relative", cursor: disabled ? 'default' : 'ew-resize', opacity: disabled ? 0.5 : 1, bg: open || held !== null ? '$hover' : 'transparent', hoverStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: RING,
46
+ // inline-style: the page must not scroll or select under a drag along the icon.
47
+ style: { touchAction: 'none', userSelect: 'none' }, onPointerDown: (e) => {
48
+ if (disabled)
49
+ return;
50
+ press.current = { x: e.clientX, at: index, moved: false };
51
+ e.currentTarget?.setPointerCapture?.(e.pointerId);
52
+ }, onPointerMove: (e) => {
53
+ const p = press.current;
54
+ if (!p)
55
+ return;
56
+ const dx = (e.clientX - p.x) * flip;
57
+ if (Math.abs(dx) > 4)
58
+ p.moved = true;
59
+ if (p.moved)
60
+ setHeld(clamp(p.at + Math.round(dx / STEP)));
61
+ }, onPointerUp: (e) => {
62
+ const p = press.current;
63
+ press.current = null;
64
+ e.currentTarget?.releasePointerCapture?.(e.pointerId);
65
+ if (!p)
66
+ return;
67
+ if (p.moved) {
68
+ go(held ?? p.at);
69
+ setHeld(null);
70
+ }
71
+ else
72
+ setOpen((o) => !o);
73
+ }, onPointerCancel: () => {
74
+ press.current = null;
75
+ setHeld(null);
76
+ }, onKeyDown: (e) => {
77
+ if (disabled)
78
+ return;
79
+ const key = e?.key;
80
+ const step = key === 'ArrowRight' || key === 'ArrowUp' ? flip : key === 'ArrowLeft' || key === 'ArrowDown' ? -flip : 0;
81
+ if (step) {
82
+ e.preventDefault?.();
83
+ go(index + step);
84
+ }
85
+ else if (key === 'Enter' || key === ' ') {
86
+ e.preventDefault?.();
87
+ setOpen((o) => !o);
88
+ }
89
+ }, children: [_jsx(Gauge, { size: 18, color: "var(--foreground)", "aria-hidden": true }), _jsx(SizableText, { "data-slot": "dial-pip", "aria-hidden": true, position: "absolute", b: 3, insetInlineEnd: 2, fontSize: 9, lineHeight: 10, fontWeight: "700", color: "$ink", px: 2, rounded: 4, bg: "$background", children: pip(shown.id, t(shown.label)) })] }), held !== null ? (_jsx(XStack, { "data-slot": "dial-tip", role: "status", position: "absolute", b: size + 6, self: "center", px: 8, py: 3, rounded: 6, bg: "$ink", pointerEvents: "none", style: { whiteSpace: 'nowrap' }, children: _jsx(SizableText, { fontSize: 12, color: "$background", children: t(shown.label) }) })) : null] }) }), _jsx(PopoverContent, { solid: true, p: 6, width: 288, maxW: "calc(100vw - 24px)", children: _jsx(Choices, { title: t('Effort'), items: effort.items, value: effort.value, onPick: (id) => {
90
+ effort.set(id);
91
+ setOpen(false);
92
+ } }) })] }));
93
+ }
94
+ //# sourceMappingURL=Dial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dial.js","sourceRoot":"","sources":["../../src/chat/Dial.tsx"],"names":[],"mappings":"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"}