@hanzo/ui 8.1.0 → 8.1.2

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.
@@ -32,5 +32,5 @@ const MONO = {
32
32
  };
33
33
  function Code({ children, language = 'text', value, actions }) {
34
34
  const text = value ?? (typeof children === 'string' ? children : '');
35
- return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('code'), width: "100%", rounded: "$4", borderWidth: 1, borderColor: "$borderColor", bg: "$color2", overflow: "hidden", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$1", px: "$3", py: "$1.5", borderBottomWidth: 1, borderColor: "$borderColor", children: [(0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", style: MONO, color: "$color11", children: language }), (0, jsx_runtime_1.jsx)(gui_1.XStack, { flex: 1 }), actions, text ? (0, jsx_runtime_1.jsx)(CopyButton_1.CopyButton, { value: text }) : null] }), (0, jsx_runtime_1.jsx)(gui_1.YStack, { px: "$3", py: "$2.5", children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", style: MONO, lineHeight: 20, children: children }) })] }));
35
+ return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('code'), width: "100%", rounded: "$4", borderWidth: 1, borderColor: "$borderColor", bg: "$color2", overflow: "hidden", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$1", px: "$3", py: "$1.5", borderBottomWidth: 1, borderColor: "$borderColor", children: [(0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", style: MONO, color: "$color11", children: language }), (0, jsx_runtime_1.jsx)(gui_1.XStack, { flex: 1 }), actions, text ? (0, jsx_runtime_1.jsx)(CopyButton_1.CopyButton, { value: text }) : null] }), (0, jsx_runtime_1.jsx)(gui_1.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, children: (0, jsx_runtime_1.jsx)(gui_1.YStack, { px: "$3", py: "$2.5", children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", style: MONO, lineHeight: 20, children: children }) }) })] }));
36
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Code.d.ts","sourceRoot":"","sources":["../../src/chat/Code.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAkBtC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,SAAS,2CA0C9E"}
1
+ {"version":3,"file":"Code.d.ts","sourceRoot":"","sources":["../../src/chat/Code.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAkBtC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,SAAS,2CAyD9E"}
package/dist/chat/Code.js CHANGED
@@ -12,7 +12,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
12
  * dependency or be bypassed. `children` is rendered as-is, so a surface can pass
13
13
  * plain text or its own highlighted nodes.
14
14
  */
15
- import { SizableText, XStack, YStack } from '@hanzo/gui';
15
+ import { ScrollView, SizableText, XStack, YStack } from '@hanzo/gui';
16
16
  import { slot } from '../backends/gui/slot.js';
17
17
  import { CopyButton } from '../product/CopyButton.js';
18
18
  /**
@@ -29,6 +29,6 @@ const MONO = {
29
29
  };
30
30
  export function Code({ children, language = 'text', value, actions }) {
31
31
  const text = value ?? (typeof children === 'string' ? children : '');
32
- return (_jsxs(YStack, { ...slot('code'), width: "100%", rounded: "$4", borderWidth: 1, borderColor: "$borderColor", bg: "$color2", overflow: "hidden", children: [_jsxs(XStack, { items: "center", gap: "$1", px: "$3", py: "$1.5", borderBottomWidth: 1, borderColor: "$borderColor", children: [_jsx(SizableText, { size: "$1", style: MONO, color: "$color11", children: language }), _jsx(XStack, { flex: 1 }), actions, text ? _jsx(CopyButton, { value: text }) : null] }), _jsx(YStack, { px: "$3", py: "$2.5", children: _jsx(SizableText, { size: "$1", style: MONO, lineHeight: 20, children: children }) })] }));
32
+ return (_jsxs(YStack, { ...slot('code'), width: "100%", rounded: "$4", borderWidth: 1, borderColor: "$borderColor", bg: "$color2", overflow: "hidden", children: [_jsxs(XStack, { items: "center", gap: "$1", px: "$3", py: "$1.5", borderBottomWidth: 1, borderColor: "$borderColor", children: [_jsx(SizableText, { size: "$1", style: MONO, color: "$color11", children: language }), _jsx(XStack, { flex: 1 }), actions, text ? _jsx(CopyButton, { value: text }) : null] }), _jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, children: _jsx(YStack, { px: "$3", py: "$2.5", children: _jsx(SizableText, { size: "$1", style: MONO, lineHeight: 20, children: children }) }) })] }));
33
33
  }
34
34
  //# sourceMappingURL=Code.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Code.js","sourceRoot":"","sources":["../../src/chat/Code.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGxD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD;;;;;;;;GAQG;AACH,MAAM,IAAI,GAAG;IACX,UAAU,EAAE,wEAAwE;CAC5E,CAAA;AAYV,MAAM,UAAU,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,EAAa;IAC7E,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAEpE,OAAO,CACL,MAAC,MAAM,OACD,IAAI,CAAC,MAAM,CAAC,EAChB,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,IAAI,EACZ,WAAW,EAAE,CAAC,EACd,WAAW,EAAC,cAAc,EAC1B,EAAE,EAAC,SAAS,EACZ,QAAQ,EAAC,QAAQ,aAEjB,MAAC,MAAM,IACL,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,IAAI,EACR,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,iBAAiB,EAAE,CAAC,EACpB,WAAW,EAAC,cAAc,aAQ1B,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC,UAAU,YACjD,QAAQ,GACG,EACd,KAAC,MAAM,IAAC,IAAI,EAAE,CAAC,GAAI,EAClB,OAAO,EACP,IAAI,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,IACnC,EAET,KAAC,MAAM,IAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,MAAM,YACvB,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,YAC/C,QAAQ,GACG,GACP,IACF,CACV,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Code.js","sourceRoot":"","sources":["../../src/chat/Code.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGpE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD;;;;;;;;GAQG;AACH,MAAM,IAAI,GAAG;IACX,UAAU,EAAE,wEAAwE;CAC5E,CAAA;AAYV,MAAM,UAAU,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,EAAa;IAC7E,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAEpE,OAAO,CACL,MAAC,MAAM,OACD,IAAI,CAAC,MAAM,CAAC,EAChB,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,IAAI,EACZ,WAAW,EAAE,CAAC,EACd,WAAW,EAAC,cAAc,EAC1B,EAAE,EAAC,SAAS,EACZ,QAAQ,EAAC,QAAQ,aAEjB,MAAC,MAAM,IACL,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,IAAI,EACR,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,iBAAiB,EAAE,CAAC,EACpB,WAAW,EAAC,cAAc,aAQ1B,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC,UAAU,YACjD,QAAQ,GACG,EACd,KAAC,MAAM,IAAC,IAAI,EAAE,CAAC,GAAI,EAClB,OAAO,EACP,IAAI,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,IACnC,EAeT,KAAC,UAAU,IAAC,UAAU,QAAC,8BAA8B,EAAE,KAAK,YAC1D,KAAC,MAAM,IAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,MAAM,YACvB,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,YAC/C,QAAQ,GACG,GACP,GACE,IACN,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,48 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Failure = Failure;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Failure — the turn did not complete, and what to do about it.
8
+ *
9
+ * Distinct from a `Step` that errored: a step can fail inside an answer that
10
+ * still arrives, this is the answer not arriving. hanzo/chat keeps the same
11
+ * separation — `ToolCall`'s error state, and separately `MessageContent.tsx:153`
12
+ * swapping the whole body for `ErrorMessage`.
13
+ *
14
+ * Four surfaces draw this line and no two draw it the same way: chat's
15
+ * `ErrorBox` (`components/Messages/Content/Error.tsx`), the app builder's
16
+ * `$red8` text with the prose instruction "Something went wrong — please try
17
+ * again" (`ask-ai/chat-thread.tsx:258`), the extension's `.ae-error` div
18
+ * (`AnswerEngine.tsx:336`), and hanzo.app `/chat`, which is the interesting
19
+ * one: it sets `Message.error` at `app/chat/page.tsx:292` and never reads it
20
+ * anywhere in the render, so a stream that dies reports through a detached
21
+ * banner and the turn itself says nothing.
22
+ *
23
+ * Two of the four offer a way to try again. Both put it next to the message
24
+ * rather than in the hover strip, because a hover affordance on the thing that
25
+ * just failed is not reachable on a touch device.
26
+ *
27
+ * `role="alert"` with `aria-live="assertive"` is chat's, and it is right: a
28
+ * turn failing is the one event in a conversation that has to interrupt, since
29
+ * the reader is waiting on prose that is never going to come.
30
+ */
31
+ const gui_1 = require("@hanzo/gui");
32
+ const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
33
+ const gui_2 = require("../backends/gui/index.cjs");
34
+ const ink_1 = require("../backends/gui/ink.cjs");
35
+ const slot_1 = require("../backends/gui/slot.cjs");
36
+ function Failure({ children, onRetry, retryLabel = 'Try again' }) {
37
+ return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('failure'), role: "alert", "aria-live": "assertive", width: "100%", gap: "$2", px: "$3", py: "$2.5", rounded: "$4", borderWidth: 1,
38
+ // The edge again — see `product/tone.ts`. Its `stopped` register is
39
+ // `$color4` behind a `$color9` border for exactly this: with no hue to
40
+ // spend, an outline is what separates "this one" from its neighbours.
41
+ borderColor: "$color9", bg: "$color4", children: [(0, ink_1.ink)(children, undefined, { size: '$2', color: '$color12' }), onRetry ? (
42
+ // The real Button, not a `role="button"` box with an `onPress`. A View
43
+ // wearing the role takes focus and then does nothing on Enter or Space,
44
+ // because the activation behaviour belongs to the element and not to
45
+ // the attribute — and the one control on a failed turn is the last one
46
+ // that should be pointer-only.
47
+ (0, jsx_runtime_1.jsx)(gui_1.XStack, { self: "flex-start", children: (0, jsx_runtime_1.jsxs)(gui_2.Button, { ...(0, slot_1.slot)('failure-retry'), variant: "outline", size: "sm", onPress: onRetry, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.RefreshCw, { size: 13 }), retryLabel] }) })) : null] }));
48
+ }
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface FailureProps {
3
+ /** What went wrong, in the surface's own words. */
4
+ children?: ReactNode;
5
+ /** Offer to run the turn again. Omit and no control renders. */
6
+ onRetry?: () => void;
7
+ retryLabel?: string;
8
+ }
9
+ export declare function Failure({ children, onRetry, retryLabel }: FailureProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=Failure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Failure.d.ts","sourceRoot":"","sources":["../../src/chat/Failure.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMtC,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAwB,EAAE,EAAE,YAAY,2CAkCpF"}
@@ -0,0 +1,46 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Failure — the turn did not complete, and what to do about it.
5
+ *
6
+ * Distinct from a `Step` that errored: a step can fail inside an answer that
7
+ * still arrives, this is the answer not arriving. hanzo/chat keeps the same
8
+ * separation — `ToolCall`'s error state, and separately `MessageContent.tsx:153`
9
+ * swapping the whole body for `ErrorMessage`.
10
+ *
11
+ * Four surfaces draw this line and no two draw it the same way: chat's
12
+ * `ErrorBox` (`components/Messages/Content/Error.tsx`), the app builder's
13
+ * `$red8` text with the prose instruction "Something went wrong — please try
14
+ * again" (`ask-ai/chat-thread.tsx:258`), the extension's `.ae-error` div
15
+ * (`AnswerEngine.tsx:336`), and hanzo.app `/chat`, which is the interesting
16
+ * one: it sets `Message.error` at `app/chat/page.tsx:292` and never reads it
17
+ * anywhere in the render, so a stream that dies reports through a detached
18
+ * banner and the turn itself says nothing.
19
+ *
20
+ * Two of the four offer a way to try again. Both put it next to the message
21
+ * rather than in the hover strip, because a hover affordance on the thing that
22
+ * just failed is not reachable on a touch device.
23
+ *
24
+ * `role="alert"` with `aria-live="assertive"` is chat's, and it is right: a
25
+ * turn failing is the one event in a conversation that has to interrupt, since
26
+ * the reader is waiting on prose that is never going to come.
27
+ */
28
+ import { XStack, YStack } from '@hanzo/gui';
29
+ import { RefreshCw } from '@hanzogui/lucide-icons-2';
30
+ import { Button } from '../backends/gui/index.js';
31
+ import { ink } from '../backends/gui/ink.js';
32
+ import { slot } from '../backends/gui/slot.js';
33
+ export function Failure({ children, onRetry, retryLabel = 'Try again' }) {
34
+ return (_jsxs(YStack, { ...slot('failure'), role: "alert", "aria-live": "assertive", width: "100%", gap: "$2", px: "$3", py: "$2.5", rounded: "$4", borderWidth: 1,
35
+ // The edge again — see `product/tone.ts`. Its `stopped` register is
36
+ // `$color4` behind a `$color9` border for exactly this: with no hue to
37
+ // spend, an outline is what separates "this one" from its neighbours.
38
+ borderColor: "$color9", bg: "$color4", children: [ink(children, undefined, { size: '$2', color: '$color12' }), onRetry ? (
39
+ // The real Button, not a `role="button"` box with an `onPress`. A View
40
+ // wearing the role takes focus and then does nothing on Enter or Space,
41
+ // because the activation behaviour belongs to the element and not to
42
+ // the attribute — and the one control on a failed turn is the last one
43
+ // that should be pointer-only.
44
+ _jsx(XStack, { self: "flex-start", children: _jsxs(Button, { ...slot('failure-retry'), variant: "outline", size: "sm", onPress: onRetry, children: [_jsx(RefreshCw, { size: 13 }), retryLabel] }) })) : null] }));
45
+ }
46
+ //# sourceMappingURL=Failure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Failure.js","sourceRoot":"","sources":["../../src/chat/Failure.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAGpD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAU3C,MAAM,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,WAAW,EAAgB;IACnF,OAAO,CACL,MAAC,MAAM,OACD,IAAI,CAAC,SAAS,CAAC,EACnB,IAAI,EAAC,OAAO,eACF,WAAW,EACrB,KAAK,EAAC,MAAM,EACZ,GAAG,EAAC,IAAI,EACR,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,WAAW,EAAE,CAAC;QACd,oEAAoE;QACpE,uEAAuE;QACvE,sEAAsE;QACtE,WAAW,EAAC,SAAS,EACrB,EAAE,EAAC,SAAS,aAEX,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAC3D,OAAO,CAAC,CAAC,CAAC;YACT,uEAAuE;YACvE,wEAAwE;YACxE,qEAAqE;YACrE,uEAAuE;YACvE,+BAA+B;YAC/B,KAAC,MAAM,IAAC,IAAI,EAAC,YAAY,YACvB,MAAC,MAAM,OAAK,IAAI,CAAC,eAAe,CAAC,EAAE,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,OAAO,aAC7E,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,EACtB,UAAU,IACJ,GACF,CACV,CAAC,CAAC,CAAC,IAAI,IACD,CACV,CAAA;AACH,CAAC"}
@@ -1,6 +1,7 @@
1
1
  'use client';"use strict";
2
2
  'use client';
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Caret = Caret;
4
5
  exports.Message = Message;
5
6
  const jsx_runtime_1 = require("react/jsx-runtime");
6
7
  /**
@@ -11,17 +12,52 @@ const jsx_runtime_1 = require("react/jsx-runtime");
11
12
  * turn is a muted aside. Content is `children`, so the surface keeps its own
12
13
  * markdown pipeline — the surfaces disagree on remark plugins and none of that
13
14
  * belongs in a presentational package.
15
+ *
16
+ * That arrangement is not this package's taste; it is what all six turn
17
+ * renderers across the estate independently arrived at. hanzo/chat states it
18
+ * outright in `client/src/components/Chat/Messages/ui/MessageRender.tsx:131`:
19
+ * "the user's turn is a glass bubble on the right, the reply plain and full
20
+ * width — the contrast is what says who is speaking." No avatar, no sender
21
+ * name, no timestamp — which is why `icon` is opt-in and there is no `name`
22
+ * prop. Only the read-only share view renders a name, and only one surface
23
+ * renders a timestamp.
14
24
  */
15
25
  const gui_1 = require("@hanzo/gui");
26
+ const ink_1 = require("../backends/gui/ink.cjs");
16
27
  const slot_1 = require("../backends/gui/slot.cjs");
28
+ /**
29
+ * The mark that says a turn is still arriving.
30
+ *
31
+ * Placed by whoever knows where the prose ends. A surface rendering markdown
32
+ * owns that node and can append this inside it; `Message busy` puts it at the
33
+ * end of the turn instead, which is all this package can know.
34
+ *
35
+ * It does not blink. Every surface that ships one draws it static — an 8x16
36
+ * block on hanzo.app `/chat`, a 2px caret in the builder, a 12px `⬤` from
37
+ * hanzo/chat's `.result-streaming::after`. A caret is the narrowest of the
38
+ * three and the one that reads as "the sentence continues" rather than as a
39
+ * bullet. Decorative, so it is hidden from assistive tech: the turn's text is
40
+ * already live-announced by the surface, and a cursor announced as content is
41
+ * noise on every token.
42
+ */
43
+ function Caret() {
44
+ return (0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('caret'), width: 2, height: 15, rounded: 1, bg: "$color12", "aria-hidden": true });
45
+ }
17
46
  function Message({ role, children, actions, busy = false, icon }) {
18
47
  if (role === 'system')
19
48
  return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('message'), "data-role": "system", width: "100%", justify: "center", py: "$2", children: (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$color10", text: "center", children: children }) }));
20
49
  const mine = role === 'user';
21
- return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('message'), "data-role": role, width: "100%", justify: mine ? 'flex-end' : 'flex-start', gap: "$2", children: [icon && !mine ? (0, jsx_runtime_1.jsx)(gui_1.YStack, { pt: "$1", children: icon }) : null, (0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('message-body'), "data-bubble": mine ? 'true' : undefined, gap: "$2", maxW: mine ? '80%' : '100%', flex: mine ? undefined : 1, ...(mine && {
50
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('message'), "data-role": role, width: "100%", justify: mine ? 'flex-end' : 'flex-start', gap: "$2", children: [icon && !mine ? (0, jsx_runtime_1.jsx)(gui_1.YStack, { pt: "$1", children: icon }) : null, (0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('message-body'), "data-bubble": mine ? 'true' : undefined, gap: "$2",
51
+ // 85%, because that is the number three independent implementations
52
+ // reached: hanzo/chat's `USER_TURN` (`common/turn.ts:17`,
53
+ // `max-w-[85%]`), hanzo.app `/chat` (`app/chat/page.tsx:521`,
54
+ // `maxWidth="85%"`) and the app builder's `UserBubble`
55
+ // (`ask-ai/chat-thread.tsx:141`). This package said 80% and no one
56
+ // said 80%.
57
+ maxW: mine ? '85%' : '100%', flex: mine ? undefined : 1, ...(mine && {
22
58
  bg: '$color3',
23
59
  rounded: '$5',
24
60
  px: '$3',
25
61
  py: '$2',
26
- }), children: [children, busy ? (0, jsx_runtime_1.jsx)(gui_1.SizableText, { ...(0, slot_1.slot)('message-busy'), size: "$2", color: "$color10", children: "\u2026" }) : null, actions ? (0, jsx_runtime_1.jsx)(gui_1.XStack, { gap: "$1", items: "center", children: actions }) : null] })] }));
62
+ }), children: [(0, ink_1.ink)(children), busy ? (0, jsx_runtime_1.jsx)(Caret, {}) : null, actions ? (0, jsx_runtime_1.jsx)(gui_1.XStack, { gap: "$1", items: "center", children: actions }) : null] })] }));
27
63
  }
@@ -1,11 +1,27 @@
1
1
  import type { ReactNode } from 'react';
2
2
  export type Role = 'user' | 'assistant' | 'system';
3
+ /**
4
+ * The mark that says a turn is still arriving.
5
+ *
6
+ * Placed by whoever knows where the prose ends. A surface rendering markdown
7
+ * owns that node and can append this inside it; `Message busy` puts it at the
8
+ * end of the turn instead, which is all this package can know.
9
+ *
10
+ * It does not blink. Every surface that ships one draws it static — an 8x16
11
+ * block on hanzo.app `/chat`, a 2px caret in the builder, a 12px `⬤` from
12
+ * hanzo/chat's `.result-streaming::after`. A caret is the narrowest of the
13
+ * three and the one that reads as "the sentence continues" rather than as a
14
+ * bullet. Decorative, so it is hidden from assistive tech: the turn's text is
15
+ * already live-announced by the surface, and a cursor announced as content is
16
+ * noise on every token.
17
+ */
18
+ export declare function Caret(): import("react/jsx-runtime").JSX.Element;
3
19
  export interface MessageProps {
4
20
  role: Role;
5
21
  children?: ReactNode;
6
22
  /** Row rendered under the turn — copy, retry, feedback. */
7
23
  actions?: ReactNode;
8
- /** The turn is still streaming. */
24
+ /** The turn is still streaming: a `Caret` closes the body. */
9
25
  busy?: boolean;
10
26
  /** Leading affordance for an assistant turn: avatar or model mark. */
11
27
  icon?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../src/chat/Message.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;AAElD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,mCAAmC;IACnC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAY,EAAE,IAAI,EAAE,EAAE,YAAY,2CAuCpF"}
1
+ {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../src/chat/Message.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKtC,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;AAElD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,4CAEpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAY,EAAE,IAAI,EAAE,EAAE,YAAY,2CA6CpF"}
@@ -8,18 +8,53 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
8
  * turn is a muted aside. Content is `children`, so the surface keeps its own
9
9
  * markdown pipeline — the surfaces disagree on remark plugins and none of that
10
10
  * belongs in a presentational package.
11
+ *
12
+ * That arrangement is not this package's taste; it is what all six turn
13
+ * renderers across the estate independently arrived at. hanzo/chat states it
14
+ * outright in `client/src/components/Chat/Messages/ui/MessageRender.tsx:131`:
15
+ * "the user's turn is a glass bubble on the right, the reply plain and full
16
+ * width — the contrast is what says who is speaking." No avatar, no sender
17
+ * name, no timestamp — which is why `icon` is opt-in and there is no `name`
18
+ * prop. Only the read-only share view renders a name, and only one surface
19
+ * renders a timestamp.
11
20
  */
12
- import { SizableText, Text, XStack, YStack } from '@hanzo/gui';
21
+ import { Text, XStack, YStack } from '@hanzo/gui';
22
+ import { ink } from '../backends/gui/ink.js';
13
23
  import { slot } from '../backends/gui/slot.js';
24
+ /**
25
+ * The mark that says a turn is still arriving.
26
+ *
27
+ * Placed by whoever knows where the prose ends. A surface rendering markdown
28
+ * owns that node and can append this inside it; `Message busy` puts it at the
29
+ * end of the turn instead, which is all this package can know.
30
+ *
31
+ * It does not blink. Every surface that ships one draws it static — an 8x16
32
+ * block on hanzo.app `/chat`, a 2px caret in the builder, a 12px `⬤` from
33
+ * hanzo/chat's `.result-streaming::after`. A caret is the narrowest of the
34
+ * three and the one that reads as "the sentence continues" rather than as a
35
+ * bullet. Decorative, so it is hidden from assistive tech: the turn's text is
36
+ * already live-announced by the surface, and a cursor announced as content is
37
+ * noise on every token.
38
+ */
39
+ export function Caret() {
40
+ return _jsx(YStack, { ...slot('caret'), width: 2, height: 15, rounded: 1, bg: "$color12", "aria-hidden": true });
41
+ }
14
42
  export function Message({ role, children, actions, busy = false, icon }) {
15
43
  if (role === 'system')
16
44
  return (_jsx(XStack, { ...slot('message'), "data-role": "system", width: "100%", justify: "center", py: "$2", children: _jsx(Text, { fontSize: "$1", color: "$color10", text: "center", children: children }) }));
17
45
  const mine = role === 'user';
18
- return (_jsxs(XStack, { ...slot('message'), "data-role": role, width: "100%", justify: mine ? 'flex-end' : 'flex-start', gap: "$2", children: [icon && !mine ? _jsx(YStack, { pt: "$1", children: icon }) : null, _jsxs(YStack, { ...slot('message-body'), "data-bubble": mine ? 'true' : undefined, gap: "$2", maxW: mine ? '80%' : '100%', flex: mine ? undefined : 1, ...(mine && {
46
+ return (_jsxs(XStack, { ...slot('message'), "data-role": role, width: "100%", justify: mine ? 'flex-end' : 'flex-start', gap: "$2", children: [icon && !mine ? _jsx(YStack, { pt: "$1", children: icon }) : null, _jsxs(YStack, { ...slot('message-body'), "data-bubble": mine ? 'true' : undefined, gap: "$2",
47
+ // 85%, because that is the number three independent implementations
48
+ // reached: hanzo/chat's `USER_TURN` (`common/turn.ts:17`,
49
+ // `max-w-[85%]`), hanzo.app `/chat` (`app/chat/page.tsx:521`,
50
+ // `maxWidth="85%"`) and the app builder's `UserBubble`
51
+ // (`ask-ai/chat-thread.tsx:141`). This package said 80% and no one
52
+ // said 80%.
53
+ maxW: mine ? '85%' : '100%', flex: mine ? undefined : 1, ...(mine && {
19
54
  bg: '$color3',
20
55
  rounded: '$5',
21
56
  px: '$3',
22
57
  py: '$2',
23
- }), children: [children, busy ? _jsx(SizableText, { ...slot('message-busy'), size: "$2", color: "$color10", children: "\u2026" }) : null, actions ? _jsx(XStack, { gap: "$1", items: "center", children: actions }) : null] })] }));
58
+ }), children: [ink(children), busy ? _jsx(Caret, {}) : null, actions ? _jsx(XStack, { gap: "$1", items: "center", children: actions }) : null] })] }));
24
59
  }
25
60
  //# sourceMappingURL=Message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/chat/Message.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAG9D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAe3C,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,EAAgB;IACnF,IAAI,IAAI,KAAK,QAAQ;QACnB,OAAO,CACL,KAAC,MAAM,OAAK,IAAI,CAAC,SAAS,CAAC,eAAY,QAAQ,EAAC,KAAK,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,EAAE,EAAC,IAAI,YACnF,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,IAAI,EAAC,QAAQ,YAC/C,QAAQ,GACJ,GACA,CACV,CAAA;IAEH,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,CAAA;IAC5B,OAAO,CACL,MAAC,MAAM,OACD,IAAI,CAAC,SAAS,CAAC,eACR,IAAI,EACf,KAAK,EAAC,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EACzC,GAAG,EAAC,IAAI,aAEP,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,EAAE,EAAC,IAAI,YAAE,IAAI,GAAU,CAAC,CAAC,CAAC,IAAI,EACvD,MAAC,MAAM,OACD,IAAI,CAAC,cAAc,CAAC,iBACX,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACtC,GAAG,EAAC,IAAI,EACR,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAC3B,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KACtB,CAAC,IAAI,IAAI;oBACX,EAAE,EAAE,SAAS;oBACb,OAAO,EAAE,IAAI;oBACb,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,IAAI;iBACT,CAAC,aAED,QAAQ,EACR,IAAI,CAAC,CAAC,CAAC,KAAC,WAAW,OAAK,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,uBAAgB,CAAC,CAAC,CAAC,IAAI,EAC/F,OAAO,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,YAAE,OAAO,GAAU,CAAC,CAAC,CAAC,IAAI,IAC7D,IACF,CACV,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/chat/Message.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGjD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAI3C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,KAAK;IACnB,OAAO,KAAC,MAAM,OAAK,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAC,UAAU,wBAAe,CAAA;AAClG,CAAC;AAaD,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,EAAgB;IACnF,IAAI,IAAI,KAAK,QAAQ;QACnB,OAAO,CACL,KAAC,MAAM,OAAK,IAAI,CAAC,SAAS,CAAC,eAAY,QAAQ,EAAC,KAAK,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,EAAE,EAAC,IAAI,YACnF,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,IAAI,EAAC,QAAQ,YAC/C,QAAQ,GACJ,GACA,CACV,CAAA;IAEH,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,CAAA;IAC5B,OAAO,CACL,MAAC,MAAM,OACD,IAAI,CAAC,SAAS,CAAC,eACR,IAAI,EACf,KAAK,EAAC,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EACzC,GAAG,EAAC,IAAI,aAEP,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,EAAE,EAAC,IAAI,YAAE,IAAI,GAAU,CAAC,CAAC,CAAC,IAAI,EACvD,MAAC,MAAM,OACD,IAAI,CAAC,cAAc,CAAC,iBACX,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACtC,GAAG,EAAC,IAAI;gBACR,oEAAoE;gBACpE,0DAA0D;gBAC1D,8DAA8D;gBAC9D,uDAAuD;gBACvD,mEAAmE;gBACnE,YAAY;gBACZ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAC3B,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KACtB,CAAC,IAAI,IAAI;oBACX,EAAE,EAAE,SAAS;oBACb,OAAO,EAAE,IAAI;oBACb,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,IAAI;iBACT,CAAC,aAED,GAAG,CAAC,QAAQ,CAAC,EACb,IAAI,CAAC,CAAC,CAAC,KAAC,KAAK,KAAG,CAAC,CAAC,CAAC,IAAI,EACvB,OAAO,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,YAAE,OAAO,GAAU,CAAC,CAAC,CAAC,IAAI,IAC7D,IACF,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,81 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Step = Step;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Step — something the assistant did on the way to the answer, and how it went.
8
+ *
9
+ * A tool call, a retrieval, a plan, a stretch of reasoning, a progress report:
10
+ * every one of them is a named region that reports a state and opens to show
11
+ * its detail. Two repos had written that arrangement NINE times without ever
12
+ * naming it — hanzo/chat once (`ToolCall.tsx` + `ProgressText.tsx`), hanzo.app
13
+ * eight (`chat-panel/index.tsx` `ToolDisplay`, `SyntheticErrorDisplay`,
14
+ * `ReasoningDisplay`, `PlanDisplay`, `AgentDisplay`, `ProgressDisplay`, the
15
+ * inline `project_context` block, and the builder's own `CollapsibleSection` in
16
+ * `ask-ai/chat-thread.tsx:330`). Nine chances to order the header differently,
17
+ * and they took most of them.
18
+ *
19
+ * What goes INSIDE stays the surface's: chat renders the input as a code block
20
+ * and the result through its own markdown, the app renders
21
+ * `JSON.stringify(parameters, null, 2)`. That is `children`. The header, the
22
+ * state mark, the disclosure and the frame are the same drawing in all nine and
23
+ * they are here.
24
+ *
25
+ * The open/closed behaviour is `Collapsible`, not a hand-rolled height
26
+ * animation. Both existing implementations rolled their own — chat measures
27
+ * `scrollHeight` in a `useLayoutEffect`, keeps a `ResizeObserver` alive and
28
+ * transitions an explicit pixel height — and that is the keyboard handling and
29
+ * the `aria-expanded`/`aria-controls` pair re-derived by hand each time. The
30
+ * primitive already has them.
31
+ *
32
+ * There is no duration and no elapsed time. Neither implementation shows one,
33
+ * and chat's apparent progress is not measured at all: `useProgress.ts:54`
34
+ * ticks a `setInterval` by 0.007 every 200ms and caps at 0.95 until the server
35
+ * says otherwise. A number that is invented should not be given a place to
36
+ * render.
37
+ */
38
+ const gui_1 = require("@hanzo/gui");
39
+ const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
40
+ const gui_2 = require("../backends/gui/index.cjs");
41
+ const slot_1 = require("../backends/gui/slot.cjs");
42
+ /** Edge of the state mark, px. One size, so the header never reflows on a state
43
+ * change — a step that finishes must not move the text beside it. */
44
+ const MARK = 13;
45
+ /**
46
+ * The mark for each state. `running` is the one that moves.
47
+ *
48
+ * Tinted on the glyph, never on the box: `XStack` is a View and has no `color`,
49
+ * so a colour set there type-errors rather than cascading — which is this
50
+ * package's "a prop must actually arrive" rule catching a habit borrowed from
51
+ * the DOM. Written as four call sites rather than a lookup table because the
52
+ * Spinner and the three glyphs do not share a props type: the icons take a
53
+ * themed `GetThemeValueForKey<'color'>` and the Spinner takes a plain string,
54
+ * and the table that unified them only typechecked by widening both to `any`.
55
+ */
56
+ const mark = (status) => {
57
+ switch (status) {
58
+ case 'running':
59
+ return (0, jsx_runtime_1.jsx)(gui_2.Spinner, { size: MARK, color: "$color11" });
60
+ case 'done':
61
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: MARK, color: "$color11" });
62
+ case 'error':
63
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.TriangleAlert, { size: MARK, color: "$color11" });
64
+ case 'cancelled':
65
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Ban, { size: MARK, color: "$color11" });
66
+ }
67
+ };
68
+ function Step({ name, status = 'done', detail, children, defaultOpen, open, onOpenChange, }) {
69
+ // A step with no body is a statement, not a control. Rendering a dead chevron
70
+ // and a focusable trigger over nothing is how a keyboard user is sent to a
71
+ // stop that does not answer.
72
+ const opens = children != null;
73
+ const header = ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$2", px: "$3", py: "$2", width: "100%", children: [(0, jsx_runtime_1.jsx)(gui_1.XStack, { width: MARK + 1, items: "center", justify: "center", shrink: 0, children: mark(status) }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$color12", numberOfLines: 1, children: name }), detail ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$color10", numberOfLines: 1, shrink: 1, children: detail })) : null, (0, jsx_runtime_1.jsx)(gui_1.XStack, { flex: 1 }), opens ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronDown, { size: 13, color: "$color10" }) : null] }));
74
+ return ((0, jsx_runtime_1.jsxs)(gui_2.Collapsible, { ...(0, slot_1.slot)('step'), "data-status": status, open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange, width: "100%", rounded: "$4", borderWidth: 1,
75
+ // The failure edge, not a red one. `product/tone.ts` states the rule this
76
+ // package works under — "this system has no colour to spend" — and marks
77
+ // its `stopped` register with a border rather than a fill. A step that
78
+ // errored is set apart the same way, so it still reads as a failure in a
79
+ // brand that retunes the whole ramp.
80
+ borderColor: status === 'error' ? '$color9' : '$borderColor', bg: "$color2", overflow: "hidden", children: [opens ? (0, jsx_runtime_1.jsx)(gui_2.CollapsibleTrigger, { width: "100%", children: header }) : header, opens ? ((0, jsx_runtime_1.jsx)(gui_2.CollapsibleContent, { children: (0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('step-body'), px: "$3", py: "$2.5", gap: "$2", borderTopWidth: 1, borderColor: "$borderColor", children: children }) })) : null] }));
81
+ }
@@ -0,0 +1,34 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * How a step went.
4
+ *
5
+ * Four, from the union of what the two implementations track. chat reports
6
+ * `error`, `cancelled` and a progress ratio it treats as running-or-done
7
+ * (`ToolCall.tsx:139`); the app reports `pending | executing | completed |
8
+ * failed` (`chat-panel/index.tsx:97`) — and `pending` and `executing` draw the
9
+ * same thing, because from the reader's side a step that has not started and a
10
+ * step that is running are both "not yet".
11
+ */
12
+ export type Ran = 'running' | 'done' | 'error' | 'cancelled';
13
+ export interface StepProps {
14
+ /** What ran — a tool name, "Reasoning", "Plan". */
15
+ name: string;
16
+ status?: Ran;
17
+ /**
18
+ * One line beside the name: the command, the path, the query. Clamped to a
19
+ * single line — the app truncates its own to 50 characters
20
+ * (`chat-panel/index.tsx:1148`) precisely because an untruncated one wraps
21
+ * the header and moves the chevron.
22
+ */
23
+ detail?: string;
24
+ /** Revealed when open. Omit it and the step has nothing to open, so it does
25
+ * not offer to: no chevron, no trigger, no keyboard stop. */
26
+ children?: ReactNode;
27
+ /** Uncontrolled. */
28
+ defaultOpen?: boolean;
29
+ /** Controlled — the app holds every step's state in one `Set` on the panel. */
30
+ open?: boolean;
31
+ onOpenChange?: (open: boolean) => void;
32
+ }
33
+ export declare function Step({ name, status, detail, children, defaultOpen, open, onOpenChange, }: StepProps): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=Step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Step.d.ts","sourceRoot":"","sources":["../../src/chat/Step.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKtC;;;;;;;;;GASG;AACH,MAAM,MAAM,GAAG,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAA;AA8B5D,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;kEAC8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC;AAED,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,MAAe,EACf,MAAM,EACN,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,YAAY,GACb,EAAE,SAAS,2CA4DX"}
@@ -0,0 +1,79 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Step — something the assistant did on the way to the answer, and how it went.
5
+ *
6
+ * A tool call, a retrieval, a plan, a stretch of reasoning, a progress report:
7
+ * every one of them is a named region that reports a state and opens to show
8
+ * its detail. Two repos had written that arrangement NINE times without ever
9
+ * naming it — hanzo/chat once (`ToolCall.tsx` + `ProgressText.tsx`), hanzo.app
10
+ * eight (`chat-panel/index.tsx` `ToolDisplay`, `SyntheticErrorDisplay`,
11
+ * `ReasoningDisplay`, `PlanDisplay`, `AgentDisplay`, `ProgressDisplay`, the
12
+ * inline `project_context` block, and the builder's own `CollapsibleSection` in
13
+ * `ask-ai/chat-thread.tsx:330`). Nine chances to order the header differently,
14
+ * and they took most of them.
15
+ *
16
+ * What goes INSIDE stays the surface's: chat renders the input as a code block
17
+ * and the result through its own markdown, the app renders
18
+ * `JSON.stringify(parameters, null, 2)`. That is `children`. The header, the
19
+ * state mark, the disclosure and the frame are the same drawing in all nine and
20
+ * they are here.
21
+ *
22
+ * The open/closed behaviour is `Collapsible`, not a hand-rolled height
23
+ * animation. Both existing implementations rolled their own — chat measures
24
+ * `scrollHeight` in a `useLayoutEffect`, keeps a `ResizeObserver` alive and
25
+ * transitions an explicit pixel height — and that is the keyboard handling and
26
+ * the `aria-expanded`/`aria-controls` pair re-derived by hand each time. The
27
+ * primitive already has them.
28
+ *
29
+ * There is no duration and no elapsed time. Neither implementation shows one,
30
+ * and chat's apparent progress is not measured at all: `useProgress.ts:54`
31
+ * ticks a `setInterval` by 0.007 every 200ms and caps at 0.95 until the server
32
+ * says otherwise. A number that is invented should not be given a place to
33
+ * render.
34
+ */
35
+ import { SizableText, XStack, YStack } from '@hanzo/gui';
36
+ import { Ban, Check, ChevronDown, TriangleAlert } from '@hanzogui/lucide-icons-2';
37
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger, Spinner } from '../backends/gui/index.js';
38
+ import { slot } from '../backends/gui/slot.js';
39
+ /** Edge of the state mark, px. One size, so the header never reflows on a state
40
+ * change — a step that finishes must not move the text beside it. */
41
+ const MARK = 13;
42
+ /**
43
+ * The mark for each state. `running` is the one that moves.
44
+ *
45
+ * Tinted on the glyph, never on the box: `XStack` is a View and has no `color`,
46
+ * so a colour set there type-errors rather than cascading — which is this
47
+ * package's "a prop must actually arrive" rule catching a habit borrowed from
48
+ * the DOM. Written as four call sites rather than a lookup table because the
49
+ * Spinner and the three glyphs do not share a props type: the icons take a
50
+ * themed `GetThemeValueForKey<'color'>` and the Spinner takes a plain string,
51
+ * and the table that unified them only typechecked by widening both to `any`.
52
+ */
53
+ const mark = (status) => {
54
+ switch (status) {
55
+ case 'running':
56
+ return _jsx(Spinner, { size: MARK, color: "$color11" });
57
+ case 'done':
58
+ return _jsx(Check, { size: MARK, color: "$color11" });
59
+ case 'error':
60
+ return _jsx(TriangleAlert, { size: MARK, color: "$color11" });
61
+ case 'cancelled':
62
+ return _jsx(Ban, { size: MARK, color: "$color11" });
63
+ }
64
+ };
65
+ export function Step({ name, status = 'done', detail, children, defaultOpen, open, onOpenChange, }) {
66
+ // A step with no body is a statement, not a control. Rendering a dead chevron
67
+ // and a focusable trigger over nothing is how a keyboard user is sent to a
68
+ // stop that does not answer.
69
+ const opens = children != null;
70
+ const header = (_jsxs(XStack, { items: "center", gap: "$2", px: "$3", py: "$2", width: "100%", children: [_jsx(XStack, { width: MARK + 1, items: "center", justify: "center", shrink: 0, children: mark(status) }), _jsx(SizableText, { size: "$1", color: "$color12", numberOfLines: 1, children: name }), detail ? (_jsx(SizableText, { size: "$1", color: "$color10", numberOfLines: 1, shrink: 1, children: detail })) : null, _jsx(XStack, { flex: 1 }), opens ? _jsx(ChevronDown, { size: 13, color: "$color10" }) : null] }));
71
+ return (_jsxs(Collapsible, { ...slot('step'), "data-status": status, open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange, width: "100%", rounded: "$4", borderWidth: 1,
72
+ // The failure edge, not a red one. `product/tone.ts` states the rule this
73
+ // package works under — "this system has no colour to spend" — and marks
74
+ // its `stopped` register with a border rather than a fill. A step that
75
+ // errored is set apart the same way, so it still reads as a failure in a
76
+ // brand that retunes the whole ramp.
77
+ borderColor: status === 'error' ? '$color9' : '$borderColor', bg: "$color2", overflow: "hidden", children: [opens ? _jsx(CollapsibleTrigger, { width: "100%", children: header }) : header, opens ? (_jsx(CollapsibleContent, { children: _jsx(YStack, { ...slot('step-body'), px: "$3", py: "$2.5", gap: "$2", borderTopWidth: 1, borderColor: "$borderColor", children: children }) })) : null] }));
78
+ }
79
+ //# sourceMappingURL=Step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Step.js","sourceRoot":"","sources":["../../src/chat/Step.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAGjF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9F,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAc3C;sEACsE;AACtE,MAAM,IAAI,GAAG,EAAE,CAAA;AAEf;;;;;;;;;;GAUG;AACH,MAAM,IAAI,GAAG,CAAC,MAAW,EAAE,EAAE;IAC3B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,UAAU,GAAG,CAAA;QACjD,KAAK,MAAM;YACT,OAAO,KAAC,KAAK,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,UAAU,GAAG,CAAA;QAC/C,KAAK,OAAO;YACV,OAAO,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,UAAU,GAAG,CAAA;QACvD,KAAK,WAAW;YACd,OAAO,KAAC,GAAG,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,UAAU,GAAG,CAAA;IAC/C,CAAC;AACH,CAAC,CAAA;AAuBD,MAAM,UAAU,IAAI,CAAC,EACnB,IAAI,EACJ,MAAM,GAAG,MAAM,EACf,MAAM,EACN,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,YAAY,GACF;IACV,8EAA8E;IAC9E,2EAA2E;IAC3E,6BAA6B;IAC7B,MAAM,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAA;IAE9B,MAAM,MAAM,GAAG,CACb,MAAC,MAAM,IAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,MAAM,aAC1D,KAAC,MAAM,IAAC,KAAK,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,QAAQ,EAAC,MAAM,EAAE,CAAC,YAC/D,IAAI,CAAC,MAAM,CAAC,GACN,EACT,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YACrD,IAAI,GACO,EACb,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,YAChE,MAAM,GACK,CACf,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,MAAM,IAAC,IAAI,EAAE,CAAC,GAAI,EAClB,KAAK,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,IACnD,CACV,CAAA;IAED,OAAO,CACL,MAAC,WAAW,OACN,IAAI,CAAC,MAAM,CAAC,iBACH,MAAM,EACnB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,IAAI,EACZ,WAAW,EAAE,CAAC;QACd,0EAA0E;QAC1E,yEAAyE;QACzE,uEAAuE;QACvE,yEAAyE;QACzE,qCAAqC;QACrC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,EAC5D,EAAE,EAAC,SAAS,EACZ,QAAQ,EAAC,QAAQ,aAEhB,KAAK,CAAC,CAAC,CAAC,KAAC,kBAAkB,IAAC,KAAK,EAAC,MAAM,YAAE,MAAM,GAAsB,CAAC,CAAC,CAAC,MAAM,EAC/E,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,kBAAkB,cACjB,KAAC,MAAM,OACD,IAAI,CAAC,WAAW,CAAC,EACrB,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,GAAG,EAAC,IAAI,EACR,cAAc,EAAE,CAAC,EACjB,WAAW,EAAC,cAAc,YAEzB,QAAQ,GACF,GACU,CACtB,CAAC,CAAC,CAAC,IAAI,IACI,CACf,CAAA;AACH,CAAC"}
@@ -1,14 +1,42 @@
1
1
  'use client';"use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SourceChip = exports.Sources = exports.Code = exports.Aside = exports.AsideToggle = exports.ShareButton = exports.HeaderButton = exports.Header = exports.SidebarUser = exports.SidebarFolder = exports.SidebarItem = exports.SidebarSection = exports.SidebarScroll = exports.SidebarNewChat = exports.SidebarIconButton = exports.SidebarHeader = exports.Sidebar = exports.SLACK = exports.pinned = exports.sends = exports.ready = exports.Thread = exports.Message = exports.ASK = exports.Composer = void 0;
3
+ exports.SourceChip = exports.Sources = exports.Failure = exports.Step = exports.Code = exports.Aside = exports.AsideToggle = exports.ShareButton = exports.HeaderButton = exports.Header = exports.SidebarUser = exports.SidebarFolder = exports.SidebarItem = exports.SidebarSection = exports.SidebarScroll = exports.SidebarNewChat = exports.SidebarIconButton = exports.SidebarHeader = exports.Sidebar = exports.SLACK = exports.pinned = exports.sends = exports.ready = exports.Thread = exports.Message = exports.Caret = exports.ASK = exports.Composer = void 0;
4
4
  /**
5
5
  * @hanzo/ui/chat — the one chat shell, on @hanzo/gui primitives.
6
6
  *
7
7
  * Shell only: Thread scrolls, Message presents a turn, Composer takes a draft,
8
- * Sidebar navigates between conversations, Header names the current one, Code
9
- * and Sources present the two pieces of a turn every surface renders the same
10
- * way. Content rendering (markdown, tool calls) stays with the surface — they
11
- * disagree on the pipeline, and none of it is presentational.
8
+ * Sidebar navigates between conversations, Header names the current one, and
9
+ * Code, Step, Failure and Sources present the pieces of a turn every surface
10
+ * renders the same way.
11
+ *
12
+ * This file used to end that sentence with "Content rendering (markdown, tool
13
+ * calls) stays with the surface — they disagree on the pipeline, and none of it
14
+ * is presentational." Half of that was right and the half that was wrong cost
15
+ * nine hand-drawn copies. Re-decided by reading what the three surfaces
16
+ * actually render:
17
+ *
18
+ * MARKDOWN STAYS OUT, and not as a preference. hanzo/chat runs seven remark
19
+ * plugins and two rehype plugins (`Content/Markdown.tsx:42-65`, including
20
+ * katex and highlight.js over a 35-language subset); hanzo.app runs
21
+ * remark-gfm and nothing else (`markdown-renderer/index.tsx:107`); the
22
+ * extension parses markdown with eighty lines of regex and no dependency at
23
+ * all (`answer/markdown.ts`) because `newtab.js` measures 485.9 KB against a
24
+ * 500 KB ceiling that fails the build (`scripts/check-bundle-budgets.mjs:29`)
25
+ * and its MV3 policy is `script-src 'self'`. Fourteen kilobytes of headroom
26
+ * is not a pipeline disagreement to be reconciled; it is a surface that
27
+ * cannot afford a parser. So the pipeline is the surface's, and `children` is
28
+ * how it arrives — which is also why there is no `renderPart` prop: the part
29
+ * UNION is per-surface too (twelve item types in the app's
30
+ * `chat-panel/index.tsx` `TurnDisplay`, eight in chat's `Content/Part.tsx`,
31
+ * none in the extension), so a callback here would need a Part type that
32
+ * matches nobody's. The surface maps its own parts and passes nodes.
33
+ *
34
+ * THE REST OF IT WAS ALWAYS PRESENTATIONAL. A code block with a language
35
+ * label and a copy control, a collapsible step with a state mark, a failure
36
+ * with a retry, a streaming caret — every surface draws these and no two draw
37
+ * them alike. `Step` alone replaces nine copies across two repos. What is
38
+ * inside each of them is still `children`; the frame, the header, the mark
39
+ * and the disclosure are here.
12
40
  *
13
41
  * Everything is props-in, callbacks-out: no transport, no store, no routing, no
14
42
  * active-id resolution. The same components serve a live conversation, a shared
@@ -31,6 +59,7 @@ var Composer_1 = require("./Composer.cjs");
31
59
  Object.defineProperty(exports, "Composer", { enumerable: true, get: function () { return Composer_1.Composer; } });
32
60
  Object.defineProperty(exports, "ASK", { enumerable: true, get: function () { return Composer_1.ASK; } });
33
61
  var Message_1 = require("./Message.cjs");
62
+ Object.defineProperty(exports, "Caret", { enumerable: true, get: function () { return Message_1.Caret; } });
34
63
  Object.defineProperty(exports, "Message", { enumerable: true, get: function () { return Message_1.Message; } });
35
64
  var Thread_1 = require("./Thread.cjs");
36
65
  Object.defineProperty(exports, "Thread", { enumerable: true, get: function () { return Thread_1.Thread; } });
@@ -58,6 +87,10 @@ Object.defineProperty(exports, "AsideToggle", { enumerable: true, get: function
58
87
  Object.defineProperty(exports, "Aside", { enumerable: true, get: function () { return Header_1.Aside; } });
59
88
  var Code_1 = require("./Code.cjs");
60
89
  Object.defineProperty(exports, "Code", { enumerable: true, get: function () { return Code_1.Code; } });
90
+ var Step_1 = require("./Step.cjs");
91
+ Object.defineProperty(exports, "Step", { enumerable: true, get: function () { return Step_1.Step; } });
92
+ var Failure_1 = require("./Failure.cjs");
93
+ Object.defineProperty(exports, "Failure", { enumerable: true, get: function () { return Failure_1.Failure; } });
61
94
  var Sources_1 = require("./Sources.cjs");
62
95
  Object.defineProperty(exports, "Sources", { enumerable: true, get: function () { return Sources_1.Sources; } });
63
96
  Object.defineProperty(exports, "SourceChip", { enumerable: true, get: function () { return Sources_1.SourceChip; } });
@@ -2,10 +2,38 @@
2
2
  * @hanzo/ui/chat — the one chat shell, on @hanzo/gui primitives.
3
3
  *
4
4
  * Shell only: Thread scrolls, Message presents a turn, Composer takes a draft,
5
- * Sidebar navigates between conversations, Header names the current one, Code
6
- * and Sources present the two pieces of a turn every surface renders the same
7
- * way. Content rendering (markdown, tool calls) stays with the surface — they
8
- * disagree on the pipeline, and none of it is presentational.
5
+ * Sidebar navigates between conversations, Header names the current one, and
6
+ * Code, Step, Failure and Sources present the pieces of a turn every surface
7
+ * renders the same way.
8
+ *
9
+ * This file used to end that sentence with "Content rendering (markdown, tool
10
+ * calls) stays with the surface — they disagree on the pipeline, and none of it
11
+ * is presentational." Half of that was right and the half that was wrong cost
12
+ * nine hand-drawn copies. Re-decided by reading what the three surfaces
13
+ * actually render:
14
+ *
15
+ * MARKDOWN STAYS OUT, and not as a preference. hanzo/chat runs seven remark
16
+ * plugins and two rehype plugins (`Content/Markdown.tsx:42-65`, including
17
+ * katex and highlight.js over a 35-language subset); hanzo.app runs
18
+ * remark-gfm and nothing else (`markdown-renderer/index.tsx:107`); the
19
+ * extension parses markdown with eighty lines of regex and no dependency at
20
+ * all (`answer/markdown.ts`) because `newtab.js` measures 485.9 KB against a
21
+ * 500 KB ceiling that fails the build (`scripts/check-bundle-budgets.mjs:29`)
22
+ * and its MV3 policy is `script-src 'self'`. Fourteen kilobytes of headroom
23
+ * is not a pipeline disagreement to be reconciled; it is a surface that
24
+ * cannot afford a parser. So the pipeline is the surface's, and `children` is
25
+ * how it arrives — which is also why there is no `renderPart` prop: the part
26
+ * UNION is per-surface too (twelve item types in the app's
27
+ * `chat-panel/index.tsx` `TurnDisplay`, eight in chat's `Content/Part.tsx`,
28
+ * none in the extension), so a callback here would need a Part type that
29
+ * matches nobody's. The surface maps its own parts and passes nodes.
30
+ *
31
+ * THE REST OF IT WAS ALWAYS PRESENTATIONAL. A code block with a language
32
+ * label and a copy control, a collapsible step with a state mark, a failure
33
+ * with a retry, a streaming caret — every surface draws these and no two draw
34
+ * them alike. `Step` alone replaces nine copies across two repos. What is
35
+ * inside each of them is still `children`; the frame, the header, the mark
36
+ * and the disclosure are here.
9
37
  *
10
38
  * Everything is props-in, callbacks-out: no transport, no store, no routing, no
11
39
  * active-id resolution. The same components serve a live conversation, a shared
@@ -25,12 +53,14 @@
25
53
  * `Code` imports it from there.
26
54
  */
27
55
  export { Composer, ASK, type ComposerProps } from './Composer.js';
28
- export { Message, type MessageProps, type Role } from './Message.js';
56
+ export { Caret, Message, type MessageProps, type Role } from './Message.js';
29
57
  export { Thread, type ThreadProps } from './Thread.js';
30
58
  export { ready, sends, type Mods } from './send.js';
31
59
  export { pinned, SLACK, type Track } from './stick.js';
32
60
  export { Sidebar, SidebarHeader, SidebarIconButton, SidebarNewChat, SidebarScroll, SidebarSection, SidebarItem, SidebarFolder, SidebarUser, type SidebarProps, type SidebarHeaderProps, type SidebarIconButtonProps, type SidebarNewChatProps, type SidebarSectionProps, type SidebarItemProps, type SidebarFolderProps, type SidebarUserProps, } from './Sidebar.js';
33
61
  export { Header, HeaderButton, ShareButton, AsideToggle, Aside, type HeaderProps, type HeaderButtonProps, type ShareButtonProps, type AsideToggleProps, type AsideProps, } from './Header.js';
34
62
  export { Code, type CodeProps } from './Code.js';
63
+ export { Step, type StepProps, type Ran } from './Step.js';
64
+ export { Failure, type FailureProps } from './Failure.js';
35
65
  export { Sources, SourceChip, type Source, type SourcesProps, type SourceChipProps, } from './Sources.js';
36
66
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAEnD,OAAO,EACL,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,WAAW,EACX,WAAW,EACX,KAAK,EACL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EACL,OAAO,EACP,UAAU,EACV,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAEnD,OAAO,EACL,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,WAAW,EACX,WAAW,EACX,KAAK,EACL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AAEtD,OAAO,EACL,OAAO,EACP,UAAU,EACV,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA"}
@@ -2,10 +2,38 @@
2
2
  * @hanzo/ui/chat — the one chat shell, on @hanzo/gui primitives.
3
3
  *
4
4
  * Shell only: Thread scrolls, Message presents a turn, Composer takes a draft,
5
- * Sidebar navigates between conversations, Header names the current one, Code
6
- * and Sources present the two pieces of a turn every surface renders the same
7
- * way. Content rendering (markdown, tool calls) stays with the surface — they
8
- * disagree on the pipeline, and none of it is presentational.
5
+ * Sidebar navigates between conversations, Header names the current one, and
6
+ * Code, Step, Failure and Sources present the pieces of a turn every surface
7
+ * renders the same way.
8
+ *
9
+ * This file used to end that sentence with "Content rendering (markdown, tool
10
+ * calls) stays with the surface — they disagree on the pipeline, and none of it
11
+ * is presentational." Half of that was right and the half that was wrong cost
12
+ * nine hand-drawn copies. Re-decided by reading what the three surfaces
13
+ * actually render:
14
+ *
15
+ * MARKDOWN STAYS OUT, and not as a preference. hanzo/chat runs seven remark
16
+ * plugins and two rehype plugins (`Content/Markdown.tsx:42-65`, including
17
+ * katex and highlight.js over a 35-language subset); hanzo.app runs
18
+ * remark-gfm and nothing else (`markdown-renderer/index.tsx:107`); the
19
+ * extension parses markdown with eighty lines of regex and no dependency at
20
+ * all (`answer/markdown.ts`) because `newtab.js` measures 485.9 KB against a
21
+ * 500 KB ceiling that fails the build (`scripts/check-bundle-budgets.mjs:29`)
22
+ * and its MV3 policy is `script-src 'self'`. Fourteen kilobytes of headroom
23
+ * is not a pipeline disagreement to be reconciled; it is a surface that
24
+ * cannot afford a parser. So the pipeline is the surface's, and `children` is
25
+ * how it arrives — which is also why there is no `renderPart` prop: the part
26
+ * UNION is per-surface too (twelve item types in the app's
27
+ * `chat-panel/index.tsx` `TurnDisplay`, eight in chat's `Content/Part.tsx`,
28
+ * none in the extension), so a callback here would need a Part type that
29
+ * matches nobody's. The surface maps its own parts and passes nodes.
30
+ *
31
+ * THE REST OF IT WAS ALWAYS PRESENTATIONAL. A code block with a language
32
+ * label and a copy control, a collapsible step with a state mark, a failure
33
+ * with a retry, a streaming caret — every surface draws these and no two draw
34
+ * them alike. `Step` alone replaces nine copies across two repos. What is
35
+ * inside each of them is still `children`; the frame, the header, the mark
36
+ * and the disclosure are here.
9
37
  *
10
38
  * Everything is props-in, callbacks-out: no transport, no store, no routing, no
11
39
  * active-id resolution. The same components serve a live conversation, a shared
@@ -25,12 +53,14 @@
25
53
  * `Code` imports it from there.
26
54
  */
27
55
  export { Composer, ASK } from './Composer.js';
28
- export { Message } from './Message.js';
56
+ export { Caret, Message } from './Message.js';
29
57
  export { Thread } from './Thread.js';
30
58
  export { ready, sends } from './send.js';
31
59
  export { pinned, SLACK } from './stick.js';
32
60
  export { Sidebar, SidebarHeader, SidebarIconButton, SidebarNewChat, SidebarScroll, SidebarSection, SidebarItem, SidebarFolder, SidebarUser, } from './Sidebar.js';
33
61
  export { Header, HeaderButton, ShareButton, AsideToggle, Aside, } from './Header.js';
34
62
  export { Code } from './Code.js';
63
+ export { Step } from './Step.js';
64
+ export { Failure } from './Failure.js';
35
65
  export { Sources, SourceChip, } from './Sources.js';
36
66
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAsB,MAAM,YAAY,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAgC,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,MAAM,EAAoB,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAa,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAc,MAAM,SAAS,CAAA;AAEnD,OAAO,EACL,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,GASZ,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,WAAW,EACX,WAAW,EACX,KAAK,GAMN,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,IAAI,EAAkB,MAAM,QAAQ,CAAA;AAE7C,OAAO,EACL,OAAO,EACP,UAAU,GAIX,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAsB,MAAM,YAAY,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAgC,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,MAAM,EAAoB,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAa,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAc,MAAM,SAAS,CAAA;AAEnD,OAAO,EACL,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,GASZ,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,WAAW,EACX,WAAW,EACX,KAAK,GAMN,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,IAAI,EAAkB,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,IAAI,EAA4B,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,OAAO,EAAqB,MAAM,WAAW,CAAA;AAEtD,OAAO,EACL,OAAO,EACP,UAAU,GAIX,MAAM,WAAW,CAAA"}
package/dist/gallery.cjs CHANGED
@@ -8,6 +8,7 @@ const Workbench_1 = require("./product/Workbench.cjs");
8
8
  const Skeleton_1 = require("./product/Skeleton.cjs");
9
9
  const TooltipAnchor_1 = require("./product/TooltipAnchor.cjs");
10
10
  const DialogTemplate_1 = require("./product/DialogTemplate.cjs");
11
+ const chat_1 = require("./chat/index.cjs");
11
12
  const gui_1 = require("./backends/gui/index.cjs");
12
13
  /** A real <img> with real intrinsic pixels, inline so nothing hits the network.
13
14
  * 120x40 on purpose: the wrong ratio for every box it goes in, so a frame that
@@ -23,6 +24,13 @@ const BUTTON_VARIANTS = [
23
24
  ];
24
25
  const BUTTON_SIZES = ['default', 'sm', 'lg', 'icon', 'icon-sm', 'icon-lg'];
25
26
  const BADGE_VARIANTS = ['default', 'secondary', 'destructive', 'outline'];
27
+ /** The chat shell is callbacks-out, and this list only needs them to exist. */
28
+ const NOOP = () => { };
29
+ /** Two, so the grid's wrap rule and the letter fallback both render. */
30
+ const SOURCES = [
31
+ { id: 'a', title: 'hanzo.ai', href: 'https://hanzo.ai' },
32
+ { id: 'b', title: 'Reference' },
33
+ ];
26
34
  /** One section. Plain CSS on a plain div — the gallery is a harness, and laying
27
35
  * it out with the components under test would make a layout bug read as a
28
36
  * styling bug. Rows wrap so the same tree is legible at 390px and at 1280px,
@@ -45,6 +53,6 @@ const Gallery = () => ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex'
45
53
  tabs: [
46
54
  { id: 'console', title: 'Console', closable: false, content: (0, jsx_runtime_1.jsx)(gui_1.CardTitle, { children: "console" }) },
47
55
  ],
48
- }, children: (0, jsx_runtime_1.jsx)(gui_1.CardTitle, { children: "center" }) }) }) }), (0, jsx_runtime_1.jsxs)(Section, { name: "product-arrangements", children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: 12, width: 320 }, children: [(0, jsx_runtime_1.jsx)(Skeleton_1.Skeleton, { width: 120 }), (0, jsx_runtime_1.jsx)(Skeleton_1.Skeleton, { width: "100%", height: 72, rounded: "$4" }), (0, jsx_runtime_1.jsx)(Skeleton_1.Skeleton.Text, { lines: 3 })] }), (0, jsx_runtime_1.jsx)(TooltipAnchor_1.TooltipAnchor, { description: "Delete this agent", children: (0, jsx_runtime_1.jsx)(gui_1.Button, { children: "hinted" }) }), (0, jsx_runtime_1.jsx)(gui_1.Dialog, { open: true, children: (0, jsx_runtime_1.jsx)(DialogTemplate_1.DialogTemplate, { title: "Delete agent", description: "This removes every run recorded against it.", confirm: { label: 'Delete', tone: 'danger' }, children: (0, jsx_runtime_1.jsx)(gui_1.CardTitle, { children: "body" }) }) })] }), (0, jsx_runtime_1.jsxs)(Section, { name: "box", children: [(0, jsx_runtime_1.jsx)(box_1.Box, { className: "flex items-center gap-4 px-6 py-3 rounded-lg border", children: (0, jsx_runtime_1.jsx)(gui_1.CardTitle, { children: "utility classes" }) }), (0, jsx_runtime_1.jsx)(box_1.Box, { className: "flex-col gap-2 max-w-3xl mx-auto overflow-hidden", children: (0, jsx_runtime_1.jsx)(gui_1.CardTitle, { children: "column" }) })] })] }));
56
+ }, children: (0, jsx_runtime_1.jsx)(gui_1.CardTitle, { children: "center" }) }) }) }), (0, jsx_runtime_1.jsxs)(Section, { name: "product-arrangements", children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: 12, width: 320 }, children: [(0, jsx_runtime_1.jsx)(Skeleton_1.Skeleton, { width: 120 }), (0, jsx_runtime_1.jsx)(Skeleton_1.Skeleton, { width: "100%", height: 72, rounded: "$4" }), (0, jsx_runtime_1.jsx)(Skeleton_1.Skeleton.Text, { lines: 3 })] }), (0, jsx_runtime_1.jsx)(TooltipAnchor_1.TooltipAnchor, { description: "Delete this agent", children: (0, jsx_runtime_1.jsx)(gui_1.Button, { children: "hinted" }) }), (0, jsx_runtime_1.jsx)(gui_1.Dialog, { open: true, children: (0, jsx_runtime_1.jsx)(DialogTemplate_1.DialogTemplate, { title: "Delete agent", description: "This removes every run recorded against it.", confirm: { label: 'Delete', tone: 'danger' }, children: (0, jsx_runtime_1.jsx)(gui_1.CardTitle, { children: "body" }) }) })] }), (0, jsx_runtime_1.jsxs)(Section, { name: "chat", children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: 12, width: 520, height: 320 }, children: [(0, jsx_runtime_1.jsxs)(chat_1.Header, { title: "A conversation with a long enough name to clamp", children: [(0, jsx_runtime_1.jsx)(chat_1.ShareButton, {}), (0, jsx_runtime_1.jsx)(chat_1.AsideToggle, {})] }), (0, jsx_runtime_1.jsxs)(chat_1.Thread, { children: [(0, jsx_runtime_1.jsx)(chat_1.Message, { role: "user", children: "ask" }), (0, jsx_runtime_1.jsxs)(chat_1.Message, { role: "assistant", icon: (0, jsx_runtime_1.jsx)(gui_1.Spinner, {}), actions: (0, jsx_runtime_1.jsx)(gui_1.Badge, { children: "copy" }), children: [(0, jsx_runtime_1.jsx)(chat_1.Step, { name: "shell", status: "running", detail: "git status --porcelain" }), (0, jsx_runtime_1.jsx)(chat_1.Step, { name: "write", status: "done", detail: "src/index.ts", defaultOpen: true, children: (0, jsx_runtime_1.jsx)(chat_1.Code, { language: "json", value: "{}", children: '{}' }) }), (0, jsx_runtime_1.jsx)(chat_1.Step, { name: "fetch", status: "error", detail: "timed out", children: "plain body" }), (0, jsx_runtime_1.jsx)(chat_1.Step, { name: "plan", status: "cancelled" }), (0, jsx_runtime_1.jsx)(chat_1.Code, { language: "typescript", value: "const x = 1", children: "const x = 1" }), (0, jsx_runtime_1.jsx)(chat_1.Sources, { sources: SOURCES })] }), (0, jsx_runtime_1.jsx)(chat_1.Message, { role: "assistant", busy: true, children: "answering" }), (0, jsx_runtime_1.jsx)(chat_1.Message, { role: "assistant", children: (0, jsx_runtime_1.jsx)(chat_1.Failure, { onRetry: NOOP, children: "The model stopped before finishing." }) }), (0, jsx_runtime_1.jsx)(chat_1.Message, { role: "assistant", children: (0, jsx_runtime_1.jsx)(chat_1.Failure, { children: "Rate limited." }) }), (0, jsx_runtime_1.jsx)(chat_1.Message, { role: "system", children: "note" })] }), (0, jsx_runtime_1.jsx)(chat_1.Composer, { value: "a draft", onChange: NOOP, onSend: NOOP, hint: "Enter to send", children: (0, jsx_runtime_1.jsx)(gui_1.Badge, { children: "tool" }) }), (0, jsx_runtime_1.jsx)(chat_1.Composer, { value: "", onChange: NOOP, onSend: NOOP, onStop: NOOP, busy: true })] }), (0, jsx_runtime_1.jsx)(chat_1.Aside, { children: (0, jsx_runtime_1.jsx)(chat_1.Sources, { sources: SOURCES }) }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', width: 260, height: 320 }, children: (0, jsx_runtime_1.jsxs)(chat_1.Sidebar, { children: [(0, jsx_runtime_1.jsx)(chat_1.SidebarHeader, { title: "Hanzo", onOpenSwitcher: NOOP, onSearch: NOOP, onCollapse: NOOP }), (0, jsx_runtime_1.jsx)(chat_1.SidebarNewChat, { onPress: NOOP }), (0, jsx_runtime_1.jsxs)(chat_1.SidebarScroll, { children: [(0, jsx_runtime_1.jsxs)(chat_1.SidebarSection, { label: "Today", children: [(0, jsx_runtime_1.jsx)(chat_1.SidebarItem, { active: true, onPress: NOOP, children: "Selected thread" }), (0, jsx_runtime_1.jsx)(chat_1.SidebarItem, { onPress: NOOP, children: "Another thread" })] }), (0, jsx_runtime_1.jsx)(chat_1.SidebarFolder, { name: "Archive", defaultOpen: true, children: (0, jsx_runtime_1.jsx)(chat_1.SidebarItem, { onPress: NOOP, children: "Nested thread" }) })] }), (0, jsx_runtime_1.jsx)(chat_1.SidebarUser, { name: "z", secondary: "z@hanzo.ai", onPress: NOOP, onHelp: NOOP })] }) })] }), (0, jsx_runtime_1.jsxs)(Section, { name: "box", children: [(0, jsx_runtime_1.jsx)(box_1.Box, { className: "flex items-center gap-4 px-6 py-3 rounded-lg border", children: (0, jsx_runtime_1.jsx)(gui_1.CardTitle, { children: "utility classes" }) }), (0, jsx_runtime_1.jsx)(box_1.Box, { className: "flex-col gap-2 max-w-3xl mx-auto overflow-hidden", children: (0, jsx_runtime_1.jsx)(gui_1.CardTitle, { children: "column" }) })] })] }));
49
57
  exports.Gallery = Gallery;
50
58
  exports.default = exports.Gallery;
@@ -1 +1 @@
1
- {"version":3,"file":"gallery.d.ts","sourceRoot":"","sources":["../src/gallery.tsx"],"names":[],"mappings":"AAiFA;;;GAGG;AACH,eAAO,MAAM,OAAO,+CA+anB,CAAA;AAED,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"gallery.d.ts","sourceRoot":"","sources":["../src/gallery.tsx"],"names":[],"mappings":"AAgHA;;;GAGG;AACH,eAAO,MAAM,OAAO,+CAkgBnB,CAAA;AAED,eAAe,OAAO,CAAA"}
package/dist/gallery.js CHANGED
@@ -5,6 +5,7 @@ import { Workbench } from './product/Workbench.js';
5
5
  import { Skeleton } from './product/Skeleton.js';
6
6
  import { TooltipAnchor } from './product/TooltipAnchor.js';
7
7
  import { DialogTemplate } from './product/DialogTemplate.js';
8
+ import { Aside, AsideToggle, Code, Composer, Failure, Header as ChatHeader, Message, ShareButton, Step, Sidebar, SidebarFolder, SidebarHeader, SidebarItem, SidebarNewChat, SidebarScroll, SidebarSection, SidebarUser, Sources, Thread, } from './chat/index.js';
8
9
  import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuTrigger, HoverCard, HoverCardContent, HoverCardTrigger, RadioGroup, RadioGroupItem, ToggleGroup, ToggleGroupItem, AspectRatio, Avatar, AvatarFallback, Badge, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Input, Label, Popover, PopoverContent, PopoverTrigger, Progress, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Separator, Slider, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Grid, Section as PageSection, CardMedia, CommandDialog, Spinner, } from './backends/gui/index.js';
9
10
  /** A real <img> with real intrinsic pixels, inline so nothing hits the network.
10
11
  * 120x40 on purpose: the wrong ratio for every box it goes in, so a frame that
@@ -20,6 +21,13 @@ const BUTTON_VARIANTS = [
20
21
  ];
21
22
  const BUTTON_SIZES = ['default', 'sm', 'lg', 'icon', 'icon-sm', 'icon-lg'];
22
23
  const BADGE_VARIANTS = ['default', 'secondary', 'destructive', 'outline'];
24
+ /** The chat shell is callbacks-out, and this list only needs them to exist. */
25
+ const NOOP = () => { };
26
+ /** Two, so the grid's wrap rule and the letter fallback both render. */
27
+ const SOURCES = [
28
+ { id: 'a', title: 'hanzo.ai', href: 'https://hanzo.ai' },
29
+ { id: 'b', title: 'Reference' },
30
+ ];
23
31
  /** One section. Plain CSS on a plain div — the gallery is a harness, and laying
24
32
  * it out with the components under test would make a layout bug read as a
25
33
  * styling bug. Rows wrap so the same tree is legible at 390px and at 1280px,
@@ -42,6 +50,6 @@ export const Gallery = () => (_jsxs("div", { style: { display: 'flex', flexDirec
42
50
  tabs: [
43
51
  { id: 'console', title: 'Console', closable: false, content: _jsx(CardTitle, { children: "console" }) },
44
52
  ],
45
- }, children: _jsx(CardTitle, { children: "center" }) }) }) }), _jsxs(Section, { name: "product-arrangements", children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 12, width: 320 }, children: [_jsx(Skeleton, { width: 120 }), _jsx(Skeleton, { width: "100%", height: 72, rounded: "$4" }), _jsx(Skeleton.Text, { lines: 3 })] }), _jsx(TooltipAnchor, { description: "Delete this agent", children: _jsx(Button, { children: "hinted" }) }), _jsx(Dialog, { open: true, children: _jsx(DialogTemplate, { title: "Delete agent", description: "This removes every run recorded against it.", confirm: { label: 'Delete', tone: 'danger' }, children: _jsx(CardTitle, { children: "body" }) }) })] }), _jsxs(Section, { name: "box", children: [_jsx(Box, { className: "flex items-center gap-4 px-6 py-3 rounded-lg border", children: _jsx(CardTitle, { children: "utility classes" }) }), _jsx(Box, { className: "flex-col gap-2 max-w-3xl mx-auto overflow-hidden", children: _jsx(CardTitle, { children: "column" }) })] })] }));
53
+ }, children: _jsx(CardTitle, { children: "center" }) }) }) }), _jsxs(Section, { name: "product-arrangements", children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 12, width: 320 }, children: [_jsx(Skeleton, { width: 120 }), _jsx(Skeleton, { width: "100%", height: 72, rounded: "$4" }), _jsx(Skeleton.Text, { lines: 3 })] }), _jsx(TooltipAnchor, { description: "Delete this agent", children: _jsx(Button, { children: "hinted" }) }), _jsx(Dialog, { open: true, children: _jsx(DialogTemplate, { title: "Delete agent", description: "This removes every run recorded against it.", confirm: { label: 'Delete', tone: 'danger' }, children: _jsx(CardTitle, { children: "body" }) }) })] }), _jsxs(Section, { name: "chat", children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 12, width: 520, height: 320 }, children: [_jsxs(ChatHeader, { title: "A conversation with a long enough name to clamp", children: [_jsx(ShareButton, {}), _jsx(AsideToggle, {})] }), _jsxs(Thread, { children: [_jsx(Message, { role: "user", children: "ask" }), _jsxs(Message, { role: "assistant", icon: _jsx(Spinner, {}), actions: _jsx(Badge, { children: "copy" }), children: [_jsx(Step, { name: "shell", status: "running", detail: "git status --porcelain" }), _jsx(Step, { name: "write", status: "done", detail: "src/index.ts", defaultOpen: true, children: _jsx(Code, { language: "json", value: "{}", children: '{}' }) }), _jsx(Step, { name: "fetch", status: "error", detail: "timed out", children: "plain body" }), _jsx(Step, { name: "plan", status: "cancelled" }), _jsx(Code, { language: "typescript", value: "const x = 1", children: "const x = 1" }), _jsx(Sources, { sources: SOURCES })] }), _jsx(Message, { role: "assistant", busy: true, children: "answering" }), _jsx(Message, { role: "assistant", children: _jsx(Failure, { onRetry: NOOP, children: "The model stopped before finishing." }) }), _jsx(Message, { role: "assistant", children: _jsx(Failure, { children: "Rate limited." }) }), _jsx(Message, { role: "system", children: "note" })] }), _jsx(Composer, { value: "a draft", onChange: NOOP, onSend: NOOP, hint: "Enter to send", children: _jsx(Badge, { children: "tool" }) }), _jsx(Composer, { value: "", onChange: NOOP, onSend: NOOP, onStop: NOOP, busy: true })] }), _jsx(Aside, { children: _jsx(Sources, { sources: SOURCES }) }), _jsx("div", { style: { display: 'flex', width: 260, height: 320 }, children: _jsxs(Sidebar, { children: [_jsx(SidebarHeader, { title: "Hanzo", onOpenSwitcher: NOOP, onSearch: NOOP, onCollapse: NOOP }), _jsx(SidebarNewChat, { onPress: NOOP }), _jsxs(SidebarScroll, { children: [_jsxs(SidebarSection, { label: "Today", children: [_jsx(SidebarItem, { active: true, onPress: NOOP, children: "Selected thread" }), _jsx(SidebarItem, { onPress: NOOP, children: "Another thread" })] }), _jsx(SidebarFolder, { name: "Archive", defaultOpen: true, children: _jsx(SidebarItem, { onPress: NOOP, children: "Nested thread" }) })] }), _jsx(SidebarUser, { name: "z", secondary: "z@hanzo.ai", onPress: NOOP, onHelp: NOOP })] }) })] }), _jsxs(Section, { name: "box", children: [_jsx(Box, { className: "flex items-center gap-4 px-6 py-3 rounded-lg border", children: _jsx(CardTitle, { children: "utility classes" }) }), _jsx(Box, { className: "flex-col gap-2 max-w-3xl mx-auto overflow-hidden", children: _jsx(CardTitle, { children: "column" }) })] })] }));
46
54
  export default Gallery;
47
55
  //# sourceMappingURL=gallery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gallery.js","sourceRoot":"","sources":["../src/gallery.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gallery.js","sourceRoot":"","sources":["../src/gallery.tsx"],"names":[],"mappings":"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"}
package/dist/styles.css CHANGED
@@ -2166,21 +2166,27 @@
2166
2166
  :root ._bblr-100000px{border-bottom-left-radius:100000px;}
2167
2167
  :root ._bblr-1000px{border-bottom-left-radius:1000px;}
2168
2168
  :root ._bblr-10px{border-bottom-left-radius:10px;}
2169
+ :root ._bblr-1px{border-bottom-left-radius:1px;}
2169
2170
  :root ._bblr-7px{border-bottom-left-radius:7px;}
2171
+ :root ._bblr-9999px{border-bottom-left-radius:9999px;}
2170
2172
  :root ._bblr-c-radius-10{border-bottom-left-radius:var(--c-radius-10);}
2171
2173
  :root ._bblr-c-radius-2{border-bottom-left-radius:var(--c-radius-2);}
2172
2174
  :root ._bblr-c-radius-3{border-bottom-left-radius:var(--c-radius-3);}
2173
2175
  :root ._bblr-c-radius-4{border-bottom-left-radius:var(--c-radius-4);}
2176
+ :root ._bblr-c-radius-5{border-bottom-left-radius:var(--c-radius-5);}
2174
2177
  :root ._bblr-c-radius-6{border-bottom-left-radius:var(--c-radius-6);}
2175
2178
  :root ._bblr-radius-lg0--71290927033{border-bottom-left-radius:var(--radius-lg, 0.75rem);}
2176
2179
  :root ._bbrr-100000px{border-bottom-right-radius:100000px;}
2177
2180
  :root ._bbrr-1000px{border-bottom-right-radius:1000px;}
2178
2181
  :root ._bbrr-10px{border-bottom-right-radius:10px;}
2182
+ :root ._bbrr-1px{border-bottom-right-radius:1px;}
2179
2183
  :root ._bbrr-7px{border-bottom-right-radius:7px;}
2184
+ :root ._bbrr-9999px{border-bottom-right-radius:9999px;}
2180
2185
  :root ._bbrr-c-radius-10{border-bottom-right-radius:var(--c-radius-10);}
2181
2186
  :root ._bbrr-c-radius-2{border-bottom-right-radius:var(--c-radius-2);}
2182
2187
  :root ._bbrr-c-radius-3{border-bottom-right-radius:var(--c-radius-3);}
2183
2188
  :root ._bbrr-c-radius-4{border-bottom-right-radius:var(--c-radius-4);}
2189
+ :root ._bbrr-c-radius-5{border-bottom-right-radius:var(--c-radius-5);}
2184
2190
  :root ._bbrr-c-radius-6{border-bottom-right-radius:var(--c-radius-6);}
2185
2191
  :root ._bbrr-radius-lg0--71290927033{border-bottom-right-radius:var(--radius-lg, 0.75rem);}
2186
2192
  :root ._bbs-solid._bbs-solid{border-bottom-style:solid;}
@@ -2188,6 +2194,7 @@
2188
2194
  :root:root:root ._bg-0active-backgroundF3405682:active{background-color:var(--backgroundFocus) !important;}
2189
2195
  :root:root:root ._bg-0active-backgroundP3496915:active{background-color:var(--backgroundPress) !important;}
2190
2196
  :root:root:root ._bg-0active-color3:active{background-color:var(--color3) !important;}
2197
+ :root:root:root ._bg-0active-color5:active{background-color:var(--color5) !important;}
2191
2198
  :root:root:root:root ._bg-0focus-backgroundH3423444:focus{background-color:var(--backgroundHover) !important;}
2192
2199
  :root:root:root:root ._bg-0focus-color3:focus{background-color:var(--color3) !important;}
2193
2200
  :root:root:root:root ._bg-0focus-color4:focus{background-color:var(--color4) !important;}
@@ -2234,6 +2241,7 @@
2234
2241
  :root ._borderBottomColor-color12._borderBottomColor-color12{border-bottom-color:var(--color12);}
2235
2242
  :root ._borderBottomColor-color6._borderBottomColor-color6{border-bottom-color:var(--color6);}
2236
2243
  :root ._borderBottomColor-color7._borderBottomColor-color7{border-bottom-color:var(--color7);}
2244
+ :root ._borderBottomColor-color9._borderBottomColor-color9{border-bottom-color:var(--color9);}
2237
2245
  :root ._borderBottomColor-transparent._borderBottomColor-transparent{border-bottom-color:transparent;}
2238
2246
  :root ._borderBottomWidth-0px._borderBottomWidth-0px{border-bottom-width:0px;}
2239
2247
  :root ._borderBottomWidth-1px._borderBottomWidth-1px{border-bottom-width:1px;}
@@ -2256,6 +2264,7 @@
2256
2264
  :root ._borderLeftColor-color12._borderLeftColor-color12{border-left-color:var(--color12);}
2257
2265
  :root ._borderLeftColor-color6._borderLeftColor-color6{border-left-color:var(--color6);}
2258
2266
  :root ._borderLeftColor-color7._borderLeftColor-color7{border-left-color:var(--color7);}
2267
+ :root ._borderLeftColor-color9._borderLeftColor-color9{border-left-color:var(--color9);}
2259
2268
  :root ._borderLeftColor-transparent._borderLeftColor-transparent{border-left-color:transparent;}
2260
2269
  :root ._borderLeftWidth-0px._borderLeftWidth-0px{border-left-width:0px;}
2261
2270
  :root ._borderLeftWidth-1px._borderLeftWidth-1px{border-left-width:1px;}
@@ -2278,6 +2287,7 @@
2278
2287
  :root ._brc-color12._brc-color12{border-right-color:var(--color12);}
2279
2288
  :root ._brc-color6._brc-color6{border-right-color:var(--color6);}
2280
2289
  :root ._brc-color7._brc-color7{border-right-color:var(--color7);}
2290
+ :root ._brc-color9._brc-color9{border-right-color:var(--color9);}
2281
2291
  :root ._brc-transparent._brc-transparent{border-right-color:transparent;}
2282
2292
  :root ._brs-solid._brs-solid{border-right-style:solid;}
2283
2293
  :root ._brw-0px._brw-0px{border-right-width:0px;}
@@ -2301,25 +2311,32 @@
2301
2311
  :root ._btc-color12._btc-color12{border-top-color:var(--color12);}
2302
2312
  :root ._btc-color6._btc-color6{border-top-color:var(--color6);}
2303
2313
  :root ._btc-color7._btc-color7{border-top-color:var(--color7);}
2314
+ :root ._btc-color9._btc-color9{border-top-color:var(--color9);}
2304
2315
  :root ._btc-transparent._btc-transparent{border-top-color:transparent;}
2305
2316
  :root ._btlr-100000px{border-top-left-radius:100000px;}
2306
2317
  :root ._btlr-1000px{border-top-left-radius:1000px;}
2307
2318
  :root ._btlr-10px{border-top-left-radius:10px;}
2319
+ :root ._btlr-1px{border-top-left-radius:1px;}
2308
2320
  :root ._btlr-7px{border-top-left-radius:7px;}
2321
+ :root ._btlr-9999px{border-top-left-radius:9999px;}
2309
2322
  :root ._btlr-c-radius-10{border-top-left-radius:var(--c-radius-10);}
2310
2323
  :root ._btlr-c-radius-2{border-top-left-radius:var(--c-radius-2);}
2311
2324
  :root ._btlr-c-radius-3{border-top-left-radius:var(--c-radius-3);}
2312
2325
  :root ._btlr-c-radius-4{border-top-left-radius:var(--c-radius-4);}
2326
+ :root ._btlr-c-radius-5{border-top-left-radius:var(--c-radius-5);}
2313
2327
  :root ._btlr-c-radius-6{border-top-left-radius:var(--c-radius-6);}
2314
2328
  :root ._btlr-radius-lg0--71290927033{border-top-left-radius:var(--radius-lg, 0.75rem);}
2315
2329
  :root ._btrr-100000px{border-top-right-radius:100000px;}
2316
2330
  :root ._btrr-1000px{border-top-right-radius:1000px;}
2317
2331
  :root ._btrr-10px{border-top-right-radius:10px;}
2332
+ :root ._btrr-1px{border-top-right-radius:1px;}
2318
2333
  :root ._btrr-7px{border-top-right-radius:7px;}
2334
+ :root ._btrr-9999px{border-top-right-radius:9999px;}
2319
2335
  :root ._btrr-c-radius-10{border-top-right-radius:var(--c-radius-10);}
2320
2336
  :root ._btrr-c-radius-2{border-top-right-radius:var(--c-radius-2);}
2321
2337
  :root ._btrr-c-radius-3{border-top-right-radius:var(--c-radius-3);}
2322
2338
  :root ._btrr-c-radius-4{border-top-right-radius:var(--c-radius-4);}
2339
+ :root ._btrr-c-radius-5{border-top-right-radius:var(--c-radius-5);}
2323
2340
  :root ._btrr-c-radius-6{border-top-right-radius:var(--c-radius-6);}
2324
2341
  :root ._btrr-radius-lg0--71290927033{border-top-right-radius:var(--radius-lg, 0.75rem);}
2325
2342
  :root ._bts-solid._bts-solid{border-top-style:solid;}
@@ -2330,8 +2347,10 @@
2330
2347
  @media (hover) {:root:root ._col-0hover-color12:hover{color:var(--color12) !important;}}
2331
2348
  :root ._col-color{color:var(--color);}
2332
2349
  :root ._col-color1{color:var(--color1);}
2350
+ :root ._col-color10{color:var(--color10);}
2333
2351
  :root ._col-color11{color:var(--color11);}
2334
2352
  :root ._col-color12{color:var(--color12);}
2353
+ :root ._col-color9{color:var(--color9);}
2335
2354
  :root ._col-white1{color:var(--white1);}
2336
2355
  :root:root ._cur-_platformweb_pointer{cursor:pointer;}
2337
2356
  :root ._cur-col-resize{cursor:col-resize;}
@@ -2360,26 +2379,33 @@
2360
2379
  :root ._fw-f-weight-3{font-weight:var(--f-weight-3);}
2361
2380
  :root ._fw-f-weight-4{font-weight:var(--f-weight-4);}
2362
2381
  :root ._fwr-nowrap{flex-wrap:nowrap;}
2382
+ :root ._fwr-wrap{flex-wrap:wrap;}
2363
2383
  :root ._gap-16px{gap:16px;}
2364
2384
  :root ._gap-24px{gap:24px;}
2365
2385
  :root ._gap-2px{gap:2px;}
2366
2386
  :root ._gap-6px{gap:6px;}
2367
2387
  :root ._gap-8px{gap:8px;}
2388
+ :root ._gap-c-space-0--53{gap:var(--c-space-0--5);}
2368
2389
  :root ._gap-c-space-1{gap:var(--c-space-1);}
2369
2390
  :root ._gap-c-space-1--53{gap:var(--c-space-1--5);}
2370
2391
  :root ._gap-c-space-2{gap:var(--c-space-2);}
2392
+ :root ._gap-c-space-3{gap:var(--c-space-3);}
2371
2393
  :root ._grow-0{flex-grow:0;}
2372
2394
  :root ._grow-1{flex-grow:1;}
2373
2395
  :root ._grow-50{flex-grow:50;}
2374
2396
  :root ._height-0px{height:0px;}
2375
2397
  :root ._height-10037{height:100%;}
2398
+ :root ._height-15px{height:15px;}
2376
2399
  :root ._height-16px{height:16px;}
2377
2400
  :root ._height-20px{height:20px;}
2378
2401
  :root ._height-220px{height:220px;}
2402
+ :root ._height-24px{height:24px;}
2403
+ :root ._height-28px{height:28px;}
2379
2404
  :root ._height-32px{height:32px;}
2380
2405
  :root ._height-36px{height:36px;}
2381
2406
  :root ._height-40px{height:40px;}
2382
2407
  :root ._height-44px{height:44px;}
2408
+ :root ._height-48px{height:48px;}
2383
2409
  :root ._height-5px{height:5px;}
2384
2410
  :root ._height-6px{height:6px;}
2385
2411
  :root ._height-72px{height:72px;}
@@ -2393,10 +2419,13 @@
2393
2419
  :root ._items-center{align-items:center;}
2394
2420
  :root ._items-flex-start{align-items:flex-start;}
2395
2421
  :root ._justify-center{justify-content:center;}
2422
+ :root ._justify-flex-end{justify-content:flex-end;}
2423
+ :root ._justify-flex-start{justify-content:flex-start;}
2396
2424
  :root ._justify-space-betwe3241{justify-content:space-between;}
2397
2425
  :root ._l-037{left:0%;}
2398
2426
  :root ._l-0px{left:0px;}
2399
2427
  :root ._l-4037{left:40%;}
2428
+ :root ._lh-20px{line-height:20px;}
2400
2429
  :root ._lh-c-size-true{line-height:var(--c-size-true);}
2401
2430
  :root ._lh-f-lineHeigh112920{line-height:var(--f-lineHeight-1);}
2402
2431
  :root ._lh-f-lineHeigh112921{line-height:var(--f-lineHeight-2);}
@@ -2420,6 +2449,7 @@
2420
2449
  :root ._maxW-32px{max-width:32px;}
2421
2450
  :root ._maxW-600px{max-width:600px;}
2422
2451
  :root ._maxW-768px{max-width:768px;}
2452
+ :root ._maxW-8537{max-width:85%;}
2423
2453
  :root ._maxW-c-size-1{max-width:var(--c-size-1);}
2424
2454
  :root ._mb-0px{margin-bottom:0px;}
2425
2455
  :root ._minH-16px{min-height:16px;}
@@ -2445,13 +2475,17 @@
2445
2475
  :root ._mr-auto{margin-right:auto;}
2446
2476
  :root ._mt--24px{margin-top:-24px;}
2447
2477
  :root ._mt-0px{margin-top:0px;}
2478
+ :root ._mt-c-space-1{margin-top:var(--c-space-1);}
2479
+ :root ._mt-c-space-3{margin-top:var(--c-space-3);}
2448
2480
  :root ._o-0{opacity:0;}
2449
2481
  :root ._o-0--4{opacity:0.4;}
2450
2482
  :root ._o-0--5{opacity:0.5;}
2451
2483
  :root ._o-0--6{opacity:0.6;}
2452
2484
  :root ._o-0--7{opacity:0.7;}
2485
+ :root ._o-0--8{opacity:0.8;}
2453
2486
  @media (hover) {:root:root ._o-0hover-0--8:hover{opacity:0.8 !important;}}
2454
2487
  @media (hover) {:root:root ._o-0hover-0--9:hover{opacity:0.9 !important;}}
2488
+ @media (hover) {:root:root ._o-0hover-1:hover{opacity:1 !important;}}
2455
2489
  :root ._o-1{opacity:1;}
2456
2490
  :root:root:root:root ._outlineColor-0focus-color8._outlineColor-0focus-color8:focus{outline-color:var(--color8) !important;}
2457
2491
  :root:root:root:root ._outlineColor-0focus-visible-outlineColo114._outlineColor-0focus-visible-outlineColo114:focus-visible{outline-color:var(--outlineColor) !important;}
@@ -2470,12 +2504,14 @@
2470
2504
  :root ._pb-24px{padding-bottom:24px;}
2471
2505
  :root ._pb-2px{padding-bottom:2px;}
2472
2506
  :root ._pb-3px{padding-bottom:3px;}
2507
+ :root ._pb-8px{padding-bottom:8px;}
2473
2508
  @media (min-width: 768px){:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root ._pb-_md_c-space-8{padding-bottom:var(--c-space-8);}}
2474
2509
  :root ._pb-c-space--3-1448{padding-bottom:var(--c-space--3--5);}
2475
2510
  :root ._pb-c-space-1{padding-bottom:var(--c-space-1);}
2476
2511
  :root ._pb-c-space-1--53{padding-bottom:var(--c-space-1--5);}
2477
2512
  :root ._pb-c-space-11{padding-bottom:var(--c-space-11);}
2478
2513
  :root ._pb-c-space-2{padding-bottom:var(--c-space-2);}
2514
+ :root ._pb-c-space-2--53{padding-bottom:var(--c-space-2--5);}
2479
2515
  :root ._pb-c-space-3{padding-bottom:var(--c-space-3);}
2480
2516
  :root ._pb-c-space-3--53{padding-bottom:var(--c-space-3--5);}
2481
2517
  :root ._pb-c-space-4{padding-bottom:var(--c-space-4);}
@@ -2487,6 +2523,7 @@
2487
2523
  :root ._pl-24px{padding-left:24px;}
2488
2524
  :root ._pl-2px{padding-left:2px;}
2489
2525
  :root ._pl-3px{padding-left:3px;}
2526
+ :root ._pl-8px{padding-left:8px;}
2490
2527
  @media (min-width: 768px){:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root ._pl-_md_c-space-4{padding-left:var(--c-space-4);}}
2491
2528
  :root ._pl-c-space-1{padding-left:var(--c-space-1);}
2492
2529
  :root ._pl-c-space-2{padding-left:var(--c-space-2);}
@@ -2504,6 +2541,7 @@
2504
2541
  :root ._pr-2px{padding-right:2px;}
2505
2542
  :root ._pr-36px{padding-right:36px;}
2506
2543
  :root ._pr-3px{padding-right:3px;}
2544
+ :root ._pr-8px{padding-right:8px;}
2507
2545
  @media (min-width: 768px){:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root ._pr-_md_c-space-4{padding-right:var(--c-space-4);}}
2508
2546
  :root ._pr-c-space-1{padding-right:var(--c-space-1);}
2509
2547
  :root ._pr-c-space-2{padding-right:var(--c-space-2);}
@@ -2518,12 +2556,15 @@
2518
2556
  :root ._pt-24px{padding-top:24px;}
2519
2557
  :root ._pt-2px{padding-top:2px;}
2520
2558
  :root ._pt-3px{padding-top:3px;}
2559
+ :root ._pt-8px{padding-top:8px;}
2521
2560
  @media (min-width: 768px){:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root:root ._pt-_md_c-space-8{padding-top:var(--c-space-8);}}
2522
2561
  :root ._pt-c-space--3-1448{padding-top:var(--c-space--3--5);}
2523
2562
  :root ._pt-c-space-1{padding-top:var(--c-space-1);}
2524
2563
  :root ._pt-c-space-1--53{padding-top:var(--c-space-1--5);}
2525
2564
  :root ._pt-c-space-11{padding-top:var(--c-space-11);}
2526
2565
  :root ._pt-c-space-2{padding-top:var(--c-space-2);}
2566
+ :root ._pt-c-space-2--53{padding-top:var(--c-space-2--5);}
2567
+ :root ._pt-c-space-3{padding-top:var(--c-space-3);}
2527
2568
  :root ._pt-c-space-3--53{padding-top:var(--c-space-3--5);}
2528
2569
  :root ._pt-c-space-4{padding-top:var(--c-space-4);}
2529
2570
  :root ._r-0px{right:0px;}
@@ -2540,6 +2581,7 @@
2540
2581
  :root ._t-0px{top:0px;}
2541
2582
  :root ._t-5037{top:50%;}
2542
2583
  @media (hover) {:root:root ._td-0hover-underline:hover{text-decoration-line:underline !important;}}
2584
+ :root ._text-center{text-align:center;}
2543
2585
  :root ._textOverflow-ellipsis{text-overflow:ellipsis;}
2544
2586
  :root ._tr-rotate0deg1281{transform:rotate(0deg);}
2545
2587
  :root ._tr-rotate180de41674{transform:rotate(180deg);}
@@ -2554,9 +2596,15 @@
2554
2596
  :root ._width-10037{width:100%;}
2555
2597
  :root ._width-10px{width:10px;}
2556
2598
  :root ._width-120px{width:120px;}
2599
+ :root ._width-14px{width:14px;}
2557
2600
  :root ._width-16px{width:16px;}
2558
2601
  :root ._width-20037{width:200%;}
2602
+ :root ._width-24px{width:24px;}
2559
2603
  :root ._width-260px{width:260px;}
2604
+ :root ._width-264px{width:264px;}
2605
+ :root ._width-28px{width:28px;}
2606
+ :root ._width-2px{width:2px;}
2607
+ :root ._width-320px{width:320px;}
2560
2608
  :root ._width-32px{width:32px;}
2561
2609
  :root ._width-36px{width:36px;}
2562
2610
  :root ._width-380px{width:380px;}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzo/ui",
3
- "version": "8.1.0",
3
+ "version": "8.1.2",
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": {