@hanzo/ui 8.1.2 → 8.1.3
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/chat/Composer.cjs
CHANGED
|
@@ -15,6 +15,26 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
15
15
|
* The send control is the same button in both states: it submits, and while a
|
|
16
16
|
* turn is in flight it stops. Two buttons in one place was the thing every
|
|
17
17
|
* surface got subtly different.
|
|
18
|
+
*
|
|
19
|
+
* Two keys are deliberately absent, because the surfaces do not agree that they
|
|
20
|
+
* exist. ESCAPE is bound in none of the three main composers — only in chat's
|
|
21
|
+
* two SUB-composers, where it dismisses the thing they float over
|
|
22
|
+
* (`SelectionAsk.tsx:85`, `EditMessage.tsx:124`), which is the host's concern
|
|
23
|
+
* and not the field's. ARROWUP recalls the last turn in exactly one composer,
|
|
24
|
+
* chat's (`useHandleKeyUp.ts:117`), and it does it by finding
|
|
25
|
+
* `document.getElementById('edit-' + parentMessageId)` and clicking it — it is
|
|
26
|
+
* a binding to their edit-in-place, not a general history recall, and there is
|
|
27
|
+
* nothing here for it to reach. Adding either would be inventing an interaction
|
|
28
|
+
* and then asking three surfaces to adopt it.
|
|
29
|
+
*
|
|
30
|
+
* Growth is `Textarea`'s and it is LINE-DRIVEN, not DOM-measured: the row count
|
|
31
|
+
* follows the newlines in the value, which is what lets web, native and desktop
|
|
32
|
+
* grow identically. The tradeoff is real and worth knowing before you adopt —
|
|
33
|
+
* a draft that soft-wraps without ever containing a `\n` does not raise the row
|
|
34
|
+
* count, so a long unbroken paragraph scrolls inside the floor instead of
|
|
35
|
+
* growing the field. Fixing that means measuring `scrollHeight`, which is the
|
|
36
|
+
* DOM-only path the five hand-rolled composers each took and the reason none of
|
|
37
|
+
* them runs on native. It is a `Textarea` decision, not a chat one.
|
|
18
38
|
*/
|
|
19
39
|
const gui_1 = require("@hanzo/gui");
|
|
20
40
|
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
@@ -23,6 +43,35 @@ const slot_1 = require("../backends/gui/slot.cjs");
|
|
|
23
43
|
const send_1 = require("./send.cjs");
|
|
24
44
|
const PAD = 8;
|
|
25
45
|
const MIN_ROWS = 1;
|
|
46
|
+
/**
|
|
47
|
+
* How tall the field may grow before it scrolls, px.
|
|
48
|
+
*
|
|
49
|
+
* 200 is the number three independent composers reached — hanzo.app `/chat`
|
|
50
|
+
* (`page.tsx:184`, `Math.min(el.scrollHeight, 200)`), hanzo/chat's
|
|
51
|
+
* `AnswerComposer.tsx:134`, and the extension's `answer/Composer.tsx:81`
|
|
52
|
+
* (`maxH={200}`). The two that differ are both fitting a NARROWER frame — the
|
|
53
|
+
* extension's in-page overlay caps at 110 (`content-script.ts:1340`) and its
|
|
54
|
+
* sidebar at 120 — and the one that differs upward, chat's main composer at
|
|
55
|
+
* `max-h-[45vh]`, is the full-page surface. So 200 is the default and the
|
|
56
|
+
* ceiling is a prop.
|
|
57
|
+
*
|
|
58
|
+
* Uncapped is not an option: the field would grow with the draft until a long
|
|
59
|
+
* paste owned the viewport and pushed the thread it belongs to off screen.
|
|
60
|
+
* Nothing capped it here before.
|
|
61
|
+
*/
|
|
62
|
+
const CEILING = 200;
|
|
63
|
+
/**
|
|
64
|
+
* Floor for the field, px.
|
|
65
|
+
*
|
|
66
|
+
* `Textarea` is a form control and stands 64px tall by default, which is right
|
|
67
|
+
* for a message body in a form and wrong for a composer: it is three lines of
|
|
68
|
+
* chrome before anything is typed. Every surface sets its own — 44 in chat
|
|
69
|
+
* (`ChatForm.tsx:334`) and in the app builder (`COMPOSER_MIN_H`), 48 in the app
|
|
70
|
+
* `/chat`. 44 is both the mode and this package's touch-target floor, so the
|
|
71
|
+
* one-line composer is exactly as tall as the smallest thing you are allowed to
|
|
72
|
+
* tap.
|
|
73
|
+
*/
|
|
74
|
+
const FLOOR = 44;
|
|
26
75
|
/**
|
|
27
76
|
* The resting placeholder.
|
|
28
77
|
*
|
|
@@ -32,7 +81,7 @@ const MIN_ROWS = 1;
|
|
|
32
81
|
* changes — which is what a model-named placeholder forces a surface to do.
|
|
33
82
|
*/
|
|
34
83
|
exports.ASK = 'Ask anything';
|
|
35
|
-
function Composer({ value, onChange, onSend, onStop, busy = false, disabled = false, placeholder = exports.ASK, rows = MIN_ROWS, children, hint, }) {
|
|
84
|
+
function Composer({ value, onChange, onSend, onStop, busy = false, disabled = false, placeholder = exports.ASK, rows = MIN_ROWS, maxHeight = CEILING, children, hint, }) {
|
|
36
85
|
const sendable = (0, send_1.ready)(value, busy, disabled);
|
|
37
86
|
const keyed = (e) => {
|
|
38
87
|
const key = e.key ?? e.nativeEvent?.key ?? '';
|
|
@@ -52,5 +101,5 @@ function Composer({ value, onChange, onSend, onStop, busy = false, disabled = fa
|
|
|
52
101
|
if (sendable)
|
|
53
102
|
onSend();
|
|
54
103
|
};
|
|
55
|
-
return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('composer'), width: "100%", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", p: PAD, gap: PAD, children: [(0, jsx_runtime_1.jsx)(gui_2.Textarea, { ...(0, slot_1.slot)('composer-field'), rows: rows, value: value, placeholder: placeholder, disabled: disabled, onChangeText: onChange, onKeyDown: keyed, borderWidth: 0, "aria-label": placeholder }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: PAD, children: [children, (0, jsx_runtime_1.jsx)(gui_1.XStack, { flex: 1 }), hint ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$color10", children: hint })) : null, (0, jsx_runtime_1.jsx)(gui_2.Button, { ...(0, slot_1.slot)('composer-send'), size: "sm", disabled: busy ? !onStop : !sendable, onPress: busy ? onStop : onSend, "aria-label": busy ? 'Stop' : 'Send', children: busy ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Square, { size: 14 }) : (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ArrowUp, { size: 16 }) })] })] }));
|
|
104
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('composer'), width: "100%", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", p: PAD, gap: PAD, children: [(0, jsx_runtime_1.jsx)(gui_2.Textarea, { ...(0, slot_1.slot)('composer-field'), rows: rows, value: value, placeholder: placeholder, disabled: disabled, onChangeText: onChange, onKeyDown: keyed, borderWidth: 0, minH: FLOOR, maxH: maxHeight, "aria-label": placeholder }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: PAD, children: [children, (0, jsx_runtime_1.jsx)(gui_1.XStack, { flex: 1 }), hint ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$color10", children: hint })) : null, (0, jsx_runtime_1.jsx)(gui_2.Button, { ...(0, slot_1.slot)('composer-send'), size: "sm", disabled: busy ? !onStop : !sendable, onPress: busy ? onStop : onSend, "aria-label": busy ? 'Stop' : 'Send', children: busy ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Square, { size: 14 }) : (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ArrowUp, { size: 16 }) })] })] }));
|
|
56
105
|
}
|
package/dist/chat/Composer.d.ts
CHANGED
|
@@ -21,10 +21,12 @@ export interface ComposerProps {
|
|
|
21
21
|
placeholder?: string;
|
|
22
22
|
/** Row floor for the field. It grows with the draft from here. */
|
|
23
23
|
rows?: number;
|
|
24
|
+
/** Ceiling for that growth, px. Past it the field scrolls instead. */
|
|
25
|
+
maxHeight?: number;
|
|
24
26
|
/** Toolbar slot, rendered at the start of the footer row. */
|
|
25
27
|
children?: ReactNode;
|
|
26
28
|
/** Hint shown at the end of the footer row. */
|
|
27
29
|
hint?: string;
|
|
28
30
|
}
|
|
29
|
-
export declare function Composer({ value, onChange, onSend, onStop, busy, disabled, placeholder, rows, children, hint, }: ComposerProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare function Composer({ value, onChange, onSend, onStop, busy, disabled, placeholder, rows, maxHeight, children, hint, }: ComposerProps): import("react/jsx-runtime").JSX.Element;
|
|
30
32
|
//# sourceMappingURL=Composer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../src/chat/Composer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../src/chat/Composer.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAwCtC;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,iBAAiB,CAAA;AAEjC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,8EAA8E;IAC9E,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,IAAY,EACZ,QAAgB,EAChB,WAAiB,EACjB,IAAe,EACf,SAAmB,EACnB,QAAQ,EACR,IAAI,GACL,EAAE,aAAa,2CAgEf"}
|
package/dist/chat/Composer.js
CHANGED
|
@@ -11,6 +11,26 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
11
11
|
* The send control is the same button in both states: it submits, and while a
|
|
12
12
|
* turn is in flight it stops. Two buttons in one place was the thing every
|
|
13
13
|
* surface got subtly different.
|
|
14
|
+
*
|
|
15
|
+
* Two keys are deliberately absent, because the surfaces do not agree that they
|
|
16
|
+
* exist. ESCAPE is bound in none of the three main composers — only in chat's
|
|
17
|
+
* two SUB-composers, where it dismisses the thing they float over
|
|
18
|
+
* (`SelectionAsk.tsx:85`, `EditMessage.tsx:124`), which is the host's concern
|
|
19
|
+
* and not the field's. ARROWUP recalls the last turn in exactly one composer,
|
|
20
|
+
* chat's (`useHandleKeyUp.ts:117`), and it does it by finding
|
|
21
|
+
* `document.getElementById('edit-' + parentMessageId)` and clicking it — it is
|
|
22
|
+
* a binding to their edit-in-place, not a general history recall, and there is
|
|
23
|
+
* nothing here for it to reach. Adding either would be inventing an interaction
|
|
24
|
+
* and then asking three surfaces to adopt it.
|
|
25
|
+
*
|
|
26
|
+
* Growth is `Textarea`'s and it is LINE-DRIVEN, not DOM-measured: the row count
|
|
27
|
+
* follows the newlines in the value, which is what lets web, native and desktop
|
|
28
|
+
* grow identically. The tradeoff is real and worth knowing before you adopt —
|
|
29
|
+
* a draft that soft-wraps without ever containing a `\n` does not raise the row
|
|
30
|
+
* count, so a long unbroken paragraph scrolls inside the floor instead of
|
|
31
|
+
* growing the field. Fixing that means measuring `scrollHeight`, which is the
|
|
32
|
+
* DOM-only path the five hand-rolled composers each took and the reason none of
|
|
33
|
+
* them runs on native. It is a `Textarea` decision, not a chat one.
|
|
14
34
|
*/
|
|
15
35
|
import { SizableText, XStack, YStack } from '@hanzo/gui';
|
|
16
36
|
import { ArrowUp, Square } from '@hanzogui/lucide-icons-2';
|
|
@@ -19,6 +39,35 @@ import { slot } from '../backends/gui/slot.js';
|
|
|
19
39
|
import { ready, sends } from './send.js';
|
|
20
40
|
const PAD = 8;
|
|
21
41
|
const MIN_ROWS = 1;
|
|
42
|
+
/**
|
|
43
|
+
* How tall the field may grow before it scrolls, px.
|
|
44
|
+
*
|
|
45
|
+
* 200 is the number three independent composers reached — hanzo.app `/chat`
|
|
46
|
+
* (`page.tsx:184`, `Math.min(el.scrollHeight, 200)`), hanzo/chat's
|
|
47
|
+
* `AnswerComposer.tsx:134`, and the extension's `answer/Composer.tsx:81`
|
|
48
|
+
* (`maxH={200}`). The two that differ are both fitting a NARROWER frame — the
|
|
49
|
+
* extension's in-page overlay caps at 110 (`content-script.ts:1340`) and its
|
|
50
|
+
* sidebar at 120 — and the one that differs upward, chat's main composer at
|
|
51
|
+
* `max-h-[45vh]`, is the full-page surface. So 200 is the default and the
|
|
52
|
+
* ceiling is a prop.
|
|
53
|
+
*
|
|
54
|
+
* Uncapped is not an option: the field would grow with the draft until a long
|
|
55
|
+
* paste owned the viewport and pushed the thread it belongs to off screen.
|
|
56
|
+
* Nothing capped it here before.
|
|
57
|
+
*/
|
|
58
|
+
const CEILING = 200;
|
|
59
|
+
/**
|
|
60
|
+
* Floor for the field, px.
|
|
61
|
+
*
|
|
62
|
+
* `Textarea` is a form control and stands 64px tall by default, which is right
|
|
63
|
+
* for a message body in a form and wrong for a composer: it is three lines of
|
|
64
|
+
* chrome before anything is typed. Every surface sets its own — 44 in chat
|
|
65
|
+
* (`ChatForm.tsx:334`) and in the app builder (`COMPOSER_MIN_H`), 48 in the app
|
|
66
|
+
* `/chat`. 44 is both the mode and this package's touch-target floor, so the
|
|
67
|
+
* one-line composer is exactly as tall as the smallest thing you are allowed to
|
|
68
|
+
* tap.
|
|
69
|
+
*/
|
|
70
|
+
const FLOOR = 44;
|
|
22
71
|
/**
|
|
23
72
|
* The resting placeholder.
|
|
24
73
|
*
|
|
@@ -28,7 +77,7 @@ const MIN_ROWS = 1;
|
|
|
28
77
|
* changes — which is what a model-named placeholder forces a surface to do.
|
|
29
78
|
*/
|
|
30
79
|
export const ASK = 'Ask anything';
|
|
31
|
-
export function Composer({ value, onChange, onSend, onStop, busy = false, disabled = false, placeholder = ASK, rows = MIN_ROWS, children, hint, }) {
|
|
80
|
+
export function Composer({ value, onChange, onSend, onStop, busy = false, disabled = false, placeholder = ASK, rows = MIN_ROWS, maxHeight = CEILING, children, hint, }) {
|
|
32
81
|
const sendable = ready(value, busy, disabled);
|
|
33
82
|
const keyed = (e) => {
|
|
34
83
|
const key = e.key ?? e.nativeEvent?.key ?? '';
|
|
@@ -48,6 +97,6 @@ export function Composer({ value, onChange, onSend, onStop, busy = false, disabl
|
|
|
48
97
|
if (sendable)
|
|
49
98
|
onSend();
|
|
50
99
|
};
|
|
51
|
-
return (_jsxs(YStack, { ...slot('composer'), width: "100%", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", p: PAD, gap: PAD, children: [_jsx(Textarea, { ...slot('composer-field'), rows: rows, value: value, placeholder: placeholder, disabled: disabled, onChangeText: onChange, onKeyDown: keyed, borderWidth: 0, "aria-label": placeholder }), _jsxs(XStack, { items: "center", gap: PAD, children: [children, _jsx(XStack, { flex: 1 }), hint ? (_jsx(SizableText, { size: "$1", color: "$color10", children: hint })) : null, _jsx(Button, { ...slot('composer-send'), size: "sm", disabled: busy ? !onStop : !sendable, onPress: busy ? onStop : onSend, "aria-label": busy ? 'Stop' : 'Send', children: busy ? _jsx(Square, { size: 14 }) : _jsx(ArrowUp, { size: 16 }) })] })] }));
|
|
100
|
+
return (_jsxs(YStack, { ...slot('composer'), width: "100%", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", p: PAD, gap: PAD, children: [_jsx(Textarea, { ...slot('composer-field'), rows: rows, value: value, placeholder: placeholder, disabled: disabled, onChangeText: onChange, onKeyDown: keyed, borderWidth: 0, minH: FLOOR, maxH: maxHeight, "aria-label": placeholder }), _jsxs(XStack, { items: "center", gap: PAD, children: [children, _jsx(XStack, { flex: 1 }), hint ? (_jsx(SizableText, { size: "$1", color: "$color10", children: hint })) : null, _jsx(Button, { ...slot('composer-send'), size: "sm", disabled: busy ? !onStop : !sendable, onPress: busy ? onStop : onSend, "aria-label": busy ? 'Stop' : 'Send', children: busy ? _jsx(Square, { size: 14 }) : _jsx(ArrowUp, { size: 16 }) })] })] }));
|
|
52
101
|
}
|
|
53
102
|
//# sourceMappingURL=Composer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../src/chat/Composer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ
|
|
1
|
+
{"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../src/chat/Composer.tsx"],"names":[],"mappings":"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"}
|
package/dist/styles.css
CHANGED
|
@@ -2439,6 +2439,7 @@
|
|
|
2439
2439
|
:root ._ls-f-letterSpa1360334205{letter-spacing:var(--f-letterSpacing-1);}
|
|
2440
2440
|
:root ._maxH-0px{max-height:0px;}
|
|
2441
2441
|
:root ._maxH-16px{max-height:16px;}
|
|
2442
|
+
:root ._maxH-200px{max-height:200px;}
|
|
2442
2443
|
:root ._maxH-300px{max-height:300px;}
|
|
2443
2444
|
:root ._maxH-32px{max-height:32px;}
|
|
2444
2445
|
:root ._maxH-c-size-1{max-height:var(--c-size-1);}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hanzo/ui",
|
|
3
|
-
"version": "8.1.
|
|
3
|
+
"version": "8.1.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Hanzo UI — the one canonical Hanzo component library, on @hanzo/gui + @hanzo/design. ONE substrate: every component renders through @hanzo/gui primitives, so the same import works on web, native (expo) and desktop (Tauri). Self-contained (theme.css), presentational, host-agnostic, clean-room.",
|
|
6
6
|
"exports": {
|