@hanzo/ui 8.27.42 → 8.27.44

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.
@@ -40,6 +40,7 @@ const gui_1 = require("@hanzo/gui");
40
40
  const react_1 = require("react");
41
41
  const ink_1 = require("../backends/gui/ink.cjs");
42
42
  const slot_1 = require("../backends/gui/slot.cjs");
43
+ const useFileDrop_1 = require("../product/useFileDrop.cjs");
43
44
  const Composer_1 = require("./Composer.cjs");
44
45
  const Message_1 = require("./Message.cjs");
45
46
  const Parts_1 = require("./Parts.cjs");
@@ -62,8 +63,12 @@ const words_1 = require("./words.cjs");
62
63
  * in exactly that direction: `Parts` reads `type` before it reads anything else.
63
64
  */
64
65
  const draw = (said) => typeof said === 'string' || said == null ? ((0, ink_1.ink)((0, words_1.words)(said))) : ((0, jsx_runtime_1.jsx)(Parts_1.Parts, { parts: said }));
65
- function Chat({ messages, streaming = false, send: onSend, stop: onStop, body, empty, composer, ...thread }) {
66
+ function Chat({ messages, streaming = false, send: onSend, stop: onStop, body, empty, composer, onFiles, ...thread }) {
66
67
  const [draft, setDraft] = (0, react_1.useState)('');
68
+ // The ONE window-level drop, off the shared primitive. Enabled only when a
69
+ // host passed `onFiles` — a surface that cannot route a file leaves the
70
+ // window alone rather than swallowing the drop.
71
+ const { active: dropping } = (0, useFileDrop_1.useFileDrop)(onFiles ?? (() => { }), !!onFiles);
67
72
  // Clearing here rather than in an effect on `messages` is what keeps a send
68
73
  // from racing the answer: the draft is gone the moment it is sent, and a
69
74
  // surface that rejects the turn does not get a cleared box back.
@@ -85,5 +90,15 @@ function Chat({ messages, streaming = false, send: onSend, stop: onStop, body, e
85
90
  // from the composer lands on a `display: contents` wrapper or on the page,
86
91
  // and then reports a component that is fine as broken, or one that is broken
87
92
  // as fine.
88
- return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, width: "100%", ...(0, slot_1.slot)('chat'), children: [messages.length === 0 && empty ? (empty) : ((0, jsx_runtime_1.jsx)(Thread_1.Thread, { flex: 1, ...thread, children: messages.map((turn, i) => ((0, jsx_runtime_1.jsx)(Message_1.Message, { role: turn.role, busy: streaming && i === last && turn.role === 'assistant', children: body ? body(turn) : draw(turn.content) }, turn.id))) })), (0, jsx_runtime_1.jsx)(Composer_1.Composer, { value: draft, onChange: setDraft, onSend: send, busy: streaming, ...(onStop ? { onStop } : {}), ...composer })] }));
93
+ return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, width: "100%", ...(0, slot_1.slot)('chat'), children: [messages.length === 0 && empty ? (empty) : ((0, jsx_runtime_1.jsx)(Thread_1.Thread, { flex: 1, ...thread, children: messages.map((turn, i) => ((0, jsx_runtime_1.jsx)(Message_1.Message, { role: turn.role, busy: streaming && i === last && turn.role === 'assistant', children: body ? body(turn) : draw(turn.content) }, turn.id))) })), (0, jsx_runtime_1.jsx)(Composer_1.Composer, { value: draft, onChange: setDraft, onSend: send, busy: streaming, ...(onStop ? { onStop } : {}), ...composer }), dropping ? ((0, jsx_runtime_1.jsx)("div", { "aria-hidden": true, style: {
94
+ position: 'fixed',
95
+ inset: 0,
96
+ zIndex: 50,
97
+ display: 'flex',
98
+ alignItems: 'center',
99
+ justifyContent: 'center',
100
+ pointerEvents: 'none',
101
+ background: 'rgba(52, 211, 153, 0.08)',
102
+ border: '2px dashed #34d399',
103
+ }, children: (0, jsx_runtime_1.jsx)("span", { style: { fontSize: 15, fontWeight: 600, color: '#34d399' }, children: "Drop files to attach" }) })) : null] }));
89
104
  }
@@ -60,6 +60,17 @@ export interface ChatProps extends Omit<ThreadProps, 'children' | 'ref'> {
60
60
  empty?: ReactNode;
61
61
  /** The composer's own props — placeholder, hint, the send control, the field. */
62
62
  composer?: Partial<ComposerProps>;
63
+ /**
64
+ * Route files dropped ANYWHERE in the window.
65
+ *
66
+ * Present, the surface lights a full-window overlay on a file drag and hands
67
+ * the dropped files here — the same window-level drop `@hanzo/chat` runs, off
68
+ * the one `useFileDrop` primitive, so a host gets "drop on any part of the
69
+ * interface" without writing a listener. Absent, the window is left untouched
70
+ * (the hook is disabled), because a drop with nowhere to go should not
71
+ * swallow the browser's own behaviour.
72
+ */
73
+ onFiles?: (files: File[]) => void;
63
74
  }
64
- export declare function Chat({ messages, streaming, send: onSend, stop: onStop, body, empty, composer, ...thread }: ChatProps): import("react").JSX.Element;
75
+ export declare function Chat({ messages, streaming, send: onSend, stop: onStop, body, empty, composer, onFiles, ...thread }: ChatProps): import("react").JSX.Element;
65
76
  //# sourceMappingURL=Chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../src/chat/Chat.tsx"],"names":[],"mappings":"AAoCA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAI7D,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAW,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAS,KAAK,IAAI,EAAE,MAAM,SAAS,CAAA;AAE1C;;;;;;;GAOG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;IACV;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,IAAI,CAAA;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,KAAK,CAAC;IACtE,sCAAsC;IACtC,QAAQ,EAAE,IAAI,EAAE,CAAA;IAChB,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;;;;;OAUG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;IACjB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,CAAA;IAChC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;CAClC;AAyBD,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,SAAiB,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,GAAG,MAAM,EACV,EAAE,SAAS,+BAoDX"}
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../src/chat/Chat.tsx"],"names":[],"mappings":"AAoCA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAK7D,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAW,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAS,KAAK,IAAI,EAAE,MAAM,SAAS,CAAA;AAE1C;;;;;;;GAOG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;IACV;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,IAAI,CAAA;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,KAAK,CAAC;IACtE,sCAAsC;IACtC,QAAQ,EAAE,IAAI,EAAE,CAAA;IAChB,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;;;;;OAUG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;IACjB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,CAAA;IAChC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IACjC;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAA;CAClC;AAyBD,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,SAAiB,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,OAAO,EACP,GAAG,MAAM,EACV,EAAE,SAAS,+BA6EX"}
package/dist/chat/Chat.js CHANGED
@@ -37,6 +37,7 @@ import { YStack } from '@hanzo/gui';
37
37
  import { useCallback, useState } from 'react';
38
38
  import { ink } from '../backends/gui/ink.js';
39
39
  import { slot } from '../backends/gui/slot.js';
40
+ import { useFileDrop } from '../product/useFileDrop.js';
40
41
  import { Composer } from './Composer.js';
41
42
  import { Message } from './Message.js';
42
43
  import { Parts } from './Parts.js';
@@ -59,8 +60,12 @@ import { words } from './words.js';
59
60
  * in exactly that direction: `Parts` reads `type` before it reads anything else.
60
61
  */
61
62
  const draw = (said) => typeof said === 'string' || said == null ? (ink(words(said))) : (_jsx(Parts, { parts: said }));
62
- export function Chat({ messages, streaming = false, send: onSend, stop: onStop, body, empty, composer, ...thread }) {
63
+ export function Chat({ messages, streaming = false, send: onSend, stop: onStop, body, empty, composer, onFiles, ...thread }) {
63
64
  const [draft, setDraft] = useState('');
65
+ // The ONE window-level drop, off the shared primitive. Enabled only when a
66
+ // host passed `onFiles` — a surface that cannot route a file leaves the
67
+ // window alone rather than swallowing the drop.
68
+ const { active: dropping } = useFileDrop(onFiles ?? (() => { }), !!onFiles);
64
69
  // Clearing here rather than in an effect on `messages` is what keeps a send
65
70
  // from racing the answer: the draft is gone the moment it is sent, and a
66
71
  // surface that rejects the turn does not get a cleared box back.
@@ -82,6 +87,16 @@ export function Chat({ messages, streaming = false, send: onSend, stop: onStop,
82
87
  // from the composer lands on a `display: contents` wrapper or on the page,
83
88
  // and then reports a component that is fine as broken, or one that is broken
84
89
  // as fine.
85
- return (_jsxs(YStack, { flex: 1, width: "100%", ...slot('chat'), children: [messages.length === 0 && empty ? (empty) : (_jsx(Thread, { flex: 1, ...thread, children: messages.map((turn, i) => (_jsx(Message, { role: turn.role, busy: streaming && i === last && turn.role === 'assistant', children: body ? body(turn) : draw(turn.content) }, turn.id))) })), _jsx(Composer, { value: draft, onChange: setDraft, onSend: send, busy: streaming, ...(onStop ? { onStop } : {}), ...composer })] }));
90
+ return (_jsxs(YStack, { flex: 1, width: "100%", ...slot('chat'), children: [messages.length === 0 && empty ? (empty) : (_jsx(Thread, { flex: 1, ...thread, children: messages.map((turn, i) => (_jsx(Message, { role: turn.role, busy: streaming && i === last && turn.role === 'assistant', children: body ? body(turn) : draw(turn.content) }, turn.id))) })), _jsx(Composer, { value: draft, onChange: setDraft, onSend: send, busy: streaming, ...(onStop ? { onStop } : {}), ...composer }), dropping ? (_jsx("div", { "aria-hidden": true, style: {
91
+ position: 'fixed',
92
+ inset: 0,
93
+ zIndex: 50,
94
+ display: 'flex',
95
+ alignItems: 'center',
96
+ justifyContent: 'center',
97
+ pointerEvents: 'none',
98
+ background: 'rgba(52, 211, 153, 0.08)',
99
+ border: '2px dashed #34d399',
100
+ }, children: _jsx("span", { style: { fontSize: 15, fontWeight: 600, color: '#34d399' }, children: "Drop files to attach" }) })) : null] }));
86
101
  }
87
102
  //# sourceMappingURL=Chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.js","sourceRoot":"","sources":["../../src/chat/Chat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Chat.js","sourceRoot":"","sources":["../../src/chat/Chat.tsx"],"names":[],"mappings":"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"}
@@ -43,6 +43,31 @@ const KINDS = [
43
43
  { key: 'marketing', title: 'Marketing', body: 'Lets ad platforms measure the sign-ups and orders their ads led to.' },
44
44
  { key: 'ads', title: 'Personalized ads', body: 'Lets those platforms use your visit to show you ads elsewhere.' },
45
45
  ];
46
+ /** Where the banner sits: fixed to the foot of the window, inset 12px, centred. */
47
+ const frame = {
48
+ ...(0, slot_1.slot)('consent'),
49
+ role: 'dialog',
50
+ 'aria-label': 'Cookie preferences',
51
+ position: 'fixed',
52
+ b: 12,
53
+ l: 12,
54
+ r: 12,
55
+ mx: 'auto',
56
+ z: 2147483000,
57
+ py: '$2.5',
58
+ px: '$3.5',
59
+ rounded: '$5',
60
+ borderWidth: 1,
61
+ borderColor: '$borderColor',
62
+ bg: '$background',
63
+ shadowColor: 'rgba(0,0,0,0.25)',
64
+ shadowRadius: 24,
65
+ shadowOffset: { width: 0, height: 8 },
66
+ };
67
+ /** The bar is as wide as its line and buttons, up to the window less its inset. */
68
+ const FIT = { width: 'fit-content' };
69
+ /** A link in the banner's line: the line's own ink, underlined, never broken across lines. */
70
+ const INLINE = { color: 'inherit', textDecoration: 'underline', whiteSpace: 'nowrap' };
46
71
  const Consent = ({ privacy = 'https://hanzo.ai/privacy' }) => {
47
72
  const [shown, setShown] = (0, react_1.useState)(false);
48
73
  const [notice, setNotice] = (0, react_1.useState)(false);
@@ -82,14 +107,24 @@ const Consent = ({ privacy = 'https://hanzo.ai/privacy' }) => {
82
107
  };
83
108
  const link = (0, event_1.consentPolicy)()?.notice ?? 'Do not sell or share my personal information';
84
109
  const small = notice && !shown;
85
- return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('consent'), role: "dialog", "aria-label": "Cookie preferences", position: "fixed", b: 16, l: 16, r: 16, z: 2147483000, maxW: 560, gap: "$3", p: "$4", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", shadowColor: "rgba(0,0,0,0.25)", shadowRadius: 24, shadowOffset: { width: 0, height: 8 }, children: [(0, jsx_runtime_1.jsxs)(gui_1.Paragraph, { size: "$3", color: "$ink", m: 0, children: [choosing
86
- ? 'Choose what Hanzo may measure and share. You can change this at any time.'
87
- : small
88
- ? 'Hanzo uses cookies to count visits and to measure its ads. You can turn any of it off.'
89
- : 'Hanzo uses cookies to count visits and to measure its ads. Nothing from an advertiser loads until you accept.', ' ', (0, jsx_runtime_1.jsx)("a", { href: privacy, style: { color: 'inherit', textDecoration: 'underline' }, children: "Privacy policy" })] }), choosing ? ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$3", children: [locked ? ((0, jsx_runtime_1.jsx)(gui_1.Paragraph, { size: "$2", color: "$soft", m: 0, children: "Your browser sends Global Privacy Control, so marketing and personalized ads stay off." })) : null, KINDS.map((k) => {
90
- const off = locked && k.key !== 'analytics';
91
- return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$3", items: "center", justify: "space-between", children: [(0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, children: [(0, jsx_runtime_1.jsx)(gui_1.Paragraph, { size: "$3", color: "$ink", fontWeight: "500", m: 0, children: k.title }), (0, jsx_runtime_1.jsx)(gui_1.Paragraph, { size: "$2", color: "$soft", m: 0, children: k.body })] }), (0, jsx_runtime_1.jsx)(switch_1.Switch, { "aria-label": k.title, disabled: off, checked: off ? false : draft[k.key], onCheckedChange: (v) => setDraft({ ...draft, [k.key]: v === true }) })] }, k.key));
92
- }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$3", justify: "flex-end", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "secondary", onClick: done(event_1.rejectAll), children: "Reject all" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", onClick: done(() => (0, event_1.saveConsent)(draft)), children: "Save choices" })] })] })) : small ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$3", flexWrap: "wrap", justify: "flex-end", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "link", onClick: done(() => (0, event_1.saveConsent)({ ...(0, event_1.readConsent)(), marketing: false, ads: false })), children: link }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "secondary", onClick: choose, children: "Manage" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", onClick: done(() => (0, event_1.saveConsent)((0, event_1.readConsent)())), children: "OK" })] })) : ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$3", flexWrap: "wrap", justify: "flex-end", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "link", onClick: choose, children: "Choose" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "secondary", onClick: done(event_1.rejectAll), children: "Reject all" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", onClick: done(event_1.acceptAll), children: "Accept all" })] }))] }));
110
+ const optOut = done(() => (0, event_1.saveConsent)({ ...(0, event_1.readConsent)(), marketing: false, ads: false }));
111
+ if (choosing)
112
+ return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...frame, maxW: 440, gap: "$3", children: [(0, jsx_runtime_1.jsxs)(gui_1.Paragraph, { size: "$2", color: "$ink", m: 0, children: ['Choose what Hanzo may measure and share. You can change this at any time. ', (0, jsx_runtime_1.jsx)("a", { href: privacy, style: INLINE, children: "Privacy policy" })] }), locked ? ((0, jsx_runtime_1.jsx)(gui_1.Paragraph, { size: "$2", color: "$soft", m: 0, children: "Your browser sends Global Privacy Control, so marketing and personalized ads stay off." })) : null, KINDS.map((k) => {
113
+ const off = locked && k.key !== 'analytics';
114
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$3", items: "center", justify: "space-between", children: [(0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, children: [(0, jsx_runtime_1.jsx)(gui_1.Paragraph, { size: "$2", color: "$ink", fontWeight: "500", m: 0, children: k.title }), (0, jsx_runtime_1.jsx)(gui_1.Paragraph, { size: "$1", color: "$soft", m: 0, children: k.body })] }), (0, jsx_runtime_1.jsx)(switch_1.Switch, { "aria-label": k.title, disabled: off, checked: off ? false : draft[k.key], onCheckedChange: (v) => setDraft({ ...draft, [k.key]: v === true }) })] }, k.key));
115
+ }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$2", justify: "flex-end", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", size: "sm", variant: "secondary", onClick: done(event_1.rejectAll), children: "Reject all" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", size: "sm", onClick: done(() => (0, event_1.saveConsent)(draft)), children: "Save choices" })] })] }));
116
+ // One bar: the line and its links, then the buttons. They share a row where
117
+ // the line fits beside them and the buttons drop under it where it does not,
118
+ // so a phone shows the line over one row of buttons and nothing breaks mid-control.
119
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...frame, style: FIT, maxW: 960, flexWrap: "wrap", items: "center", columnGap: "$4", rowGap: "$2", children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { shrink: 1, minW: 0, children: (0, jsx_runtime_1.jsxs)(gui_1.Paragraph, { size: "$2", color: "$ink", m: 0, children: [small ? 'Cookies measure visits and ads. ' : 'Cookies measure visits and ads once you accept. ', (0, jsx_runtime_1.jsx)("a", { href: privacy, style: INLINE, children: "Privacy policy" }), small ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(gui_1.Span, { display: "none", $sm: { display: 'inline' }, children: ' · ' }), (0, jsx_runtime_1.jsx)(gui_1.Span, { render: "br", display: "block", $sm: { display: 'none' } }), (0, jsx_runtime_1.jsx)("a", { href: "#", role: "button", style: INLINE, onClick: (e) => {
120
+ e.preventDefault();
121
+ optOut();
122
+ }, onKeyDown: (e) => {
123
+ if (e.key !== ' ')
124
+ return;
125
+ e.preventDefault();
126
+ optOut();
127
+ }, children: link })] })) : null] }) }), (0, jsx_runtime_1.jsx)(gui_1.XStack, { gap: "$2", ml: "auto", items: "center", children: small ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", size: "sm", variant: "secondary", onClick: choose, children: "Manage" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", size: "sm", onClick: done(() => (0, event_1.saveConsent)((0, event_1.readConsent)())), children: "OK" })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", size: "sm", variant: "link", onClick: choose, children: "Choose" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", size: "sm", variant: "secondary", onClick: done(event_1.rejectAll), children: "Reject all" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", size: "sm", onClick: done(event_1.acceptAll), children: "Accept all" })] })) })] }));
93
128
  };
94
129
  exports.Consent = Consent;
95
130
  /** The footer link that reopens the choices, in every footer and every region. */
@@ -1 +1 @@
1
- {"version":3,"file":"Consent.d.ts","sourceRoot":"","sources":["../../src/consent/Consent.tsx"],"names":[],"mappings":"AAkCA,uCAAuC;AACvC,eAAO,MAAM,WAAW,QAAO,IAE9B,CAAA;AAQD,MAAM,MAAM,YAAY,GAAG;IACzB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,QAAA,MAAM,OAAO,gBAA8C,YAAY,uCA6ItE,CAAA;AAED,kFAAkF;AAClF,QAAA,MAAM,WAAW,cAAmC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,gCAIrE,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"Consent.d.ts","sourceRoot":"","sources":["../../src/consent/Consent.tsx"],"names":[],"mappings":"AAkCA,uCAAuC;AACvC,eAAO,MAAM,WAAW,QAAO,IAE9B,CAAA;AAoCD,MAAM,MAAM,YAAY,GAAG;IACzB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,QAAA,MAAM,OAAO,gBAA8C,YAAY,uCA0JtE,CAAA;AAED,kFAAkF;AAClF,QAAA,MAAM,WAAW,cAAmC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,gCAIrE,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
4
  * Consent — the one cookie banner every Hanzo, Lux and Zoo site mounts.
5
5
  *
@@ -22,7 +22,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
22
  * `Consent` mounts once near the root; `ConsentLink` goes wherever a footer
23
23
  * link goes and opens the panel from anywhere.
24
24
  */
25
- import { Paragraph, XStack, YStack } from '@hanzo/gui';
25
+ import { Paragraph, Span, XStack, YStack } from '@hanzo/gui';
26
26
  import { acceptAll, asks, consentPolicy, gpc, notices, POLICY_EVENT, readConsent, rejectAll, saveConsent } from '@hanzo/event';
27
27
  import { useEffect, useState } from 'react';
28
28
  import { Button } from '../backends/gui/button.js';
@@ -39,6 +39,31 @@ const KINDS = [
39
39
  { key: 'marketing', title: 'Marketing', body: 'Lets ad platforms measure the sign-ups and orders their ads led to.' },
40
40
  { key: 'ads', title: 'Personalized ads', body: 'Lets those platforms use your visit to show you ads elsewhere.' },
41
41
  ];
42
+ /** Where the banner sits: fixed to the foot of the window, inset 12px, centred. */
43
+ const frame = {
44
+ ...slot('consent'),
45
+ role: 'dialog',
46
+ 'aria-label': 'Cookie preferences',
47
+ position: 'fixed',
48
+ b: 12,
49
+ l: 12,
50
+ r: 12,
51
+ mx: 'auto',
52
+ z: 2147483000,
53
+ py: '$2.5',
54
+ px: '$3.5',
55
+ rounded: '$5',
56
+ borderWidth: 1,
57
+ borderColor: '$borderColor',
58
+ bg: '$background',
59
+ shadowColor: 'rgba(0,0,0,0.25)',
60
+ shadowRadius: 24,
61
+ shadowOffset: { width: 0, height: 8 },
62
+ };
63
+ /** The bar is as wide as its line and buttons, up to the window less its inset. */
64
+ const FIT = { width: 'fit-content' };
65
+ /** A link in the banner's line: the line's own ink, underlined, never broken across lines. */
66
+ const INLINE = { color: 'inherit', textDecoration: 'underline', whiteSpace: 'nowrap' };
42
67
  const Consent = ({ privacy = 'https://hanzo.ai/privacy' }) => {
43
68
  const [shown, setShown] = useState(false);
44
69
  const [notice, setNotice] = useState(false);
@@ -78,14 +103,24 @@ const Consent = ({ privacy = 'https://hanzo.ai/privacy' }) => {
78
103
  };
79
104
  const link = consentPolicy()?.notice ?? 'Do not sell or share my personal information';
80
105
  const small = notice && !shown;
81
- return (_jsxs(YStack, { ...slot('consent'), role: "dialog", "aria-label": "Cookie preferences", position: "fixed", b: 16, l: 16, r: 16, z: 2147483000, maxW: 560, gap: "$3", p: "$4", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", shadowColor: "rgba(0,0,0,0.25)", shadowRadius: 24, shadowOffset: { width: 0, height: 8 }, children: [_jsxs(Paragraph, { size: "$3", color: "$ink", m: 0, children: [choosing
82
- ? 'Choose what Hanzo may measure and share. You can change this at any time.'
83
- : small
84
- ? 'Hanzo uses cookies to count visits and to measure its ads. You can turn any of it off.'
85
- : 'Hanzo uses cookies to count visits and to measure its ads. Nothing from an advertiser loads until you accept.', ' ', _jsx("a", { href: privacy, style: { color: 'inherit', textDecoration: 'underline' }, children: "Privacy policy" })] }), choosing ? (_jsxs(YStack, { gap: "$3", children: [locked ? (_jsx(Paragraph, { size: "$2", color: "$soft", m: 0, children: "Your browser sends Global Privacy Control, so marketing and personalized ads stay off." })) : null, KINDS.map((k) => {
86
- const off = locked && k.key !== 'analytics';
87
- return (_jsxs(XStack, { gap: "$3", items: "center", justify: "space-between", children: [_jsxs(YStack, { flex: 1, children: [_jsx(Paragraph, { size: "$3", color: "$ink", fontWeight: "500", m: 0, children: k.title }), _jsx(Paragraph, { size: "$2", color: "$soft", m: 0, children: k.body })] }), _jsx(Switch, { "aria-label": k.title, disabled: off, checked: off ? false : draft[k.key], onCheckedChange: (v) => setDraft({ ...draft, [k.key]: v === true }) })] }, k.key));
88
- }), _jsxs(XStack, { gap: "$3", justify: "flex-end", children: [_jsx(Button, { type: "button", variant: "secondary", onClick: done(rejectAll), children: "Reject all" }), _jsx(Button, { type: "button", onClick: done(() => saveConsent(draft)), children: "Save choices" })] })] })) : small ? (_jsxs(XStack, { gap: "$3", flexWrap: "wrap", justify: "flex-end", children: [_jsx(Button, { type: "button", variant: "link", onClick: done(() => saveConsent({ ...readConsent(), marketing: false, ads: false })), children: link }), _jsx(Button, { type: "button", variant: "secondary", onClick: choose, children: "Manage" }), _jsx(Button, { type: "button", onClick: done(() => saveConsent(readConsent())), children: "OK" })] })) : (_jsxs(XStack, { gap: "$3", flexWrap: "wrap", justify: "flex-end", children: [_jsx(Button, { type: "button", variant: "link", onClick: choose, children: "Choose" }), _jsx(Button, { type: "button", variant: "secondary", onClick: done(rejectAll), children: "Reject all" }), _jsx(Button, { type: "button", onClick: done(acceptAll), children: "Accept all" })] }))] }));
106
+ const optOut = done(() => saveConsent({ ...readConsent(), marketing: false, ads: false }));
107
+ if (choosing)
108
+ return (_jsxs(YStack, { ...frame, maxW: 440, gap: "$3", children: [_jsxs(Paragraph, { size: "$2", color: "$ink", m: 0, children: ['Choose what Hanzo may measure and share. You can change this at any time. ', _jsx("a", { href: privacy, style: INLINE, children: "Privacy policy" })] }), locked ? (_jsx(Paragraph, { size: "$2", color: "$soft", m: 0, children: "Your browser sends Global Privacy Control, so marketing and personalized ads stay off." })) : null, KINDS.map((k) => {
109
+ const off = locked && k.key !== 'analytics';
110
+ return (_jsxs(XStack, { gap: "$3", items: "center", justify: "space-between", children: [_jsxs(YStack, { flex: 1, children: [_jsx(Paragraph, { size: "$2", color: "$ink", fontWeight: "500", m: 0, children: k.title }), _jsx(Paragraph, { size: "$1", color: "$soft", m: 0, children: k.body })] }), _jsx(Switch, { "aria-label": k.title, disabled: off, checked: off ? false : draft[k.key], onCheckedChange: (v) => setDraft({ ...draft, [k.key]: v === true }) })] }, k.key));
111
+ }), _jsxs(XStack, { gap: "$2", justify: "flex-end", children: [_jsx(Button, { type: "button", size: "sm", variant: "secondary", onClick: done(rejectAll), children: "Reject all" }), _jsx(Button, { type: "button", size: "sm", onClick: done(() => saveConsent(draft)), children: "Save choices" })] })] }));
112
+ // One bar: the line and its links, then the buttons. They share a row where
113
+ // the line fits beside them and the buttons drop under it where it does not,
114
+ // so a phone shows the line over one row of buttons and nothing breaks mid-control.
115
+ return (_jsxs(XStack, { ...frame, style: FIT, maxW: 960, flexWrap: "wrap", items: "center", columnGap: "$4", rowGap: "$2", children: [_jsx(YStack, { shrink: 1, minW: 0, children: _jsxs(Paragraph, { size: "$2", color: "$ink", m: 0, children: [small ? 'Cookies measure visits and ads. ' : 'Cookies measure visits and ads once you accept. ', _jsx("a", { href: privacy, style: INLINE, children: "Privacy policy" }), small ? (_jsxs(_Fragment, { children: [_jsx(Span, { display: "none", $sm: { display: 'inline' }, children: ' · ' }), _jsx(Span, { render: "br", display: "block", $sm: { display: 'none' } }), _jsx("a", { href: "#", role: "button", style: INLINE, onClick: (e) => {
116
+ e.preventDefault();
117
+ optOut();
118
+ }, onKeyDown: (e) => {
119
+ if (e.key !== ' ')
120
+ return;
121
+ e.preventDefault();
122
+ optOut();
123
+ }, children: link })] })) : null] }) }), _jsx(XStack, { gap: "$2", ml: "auto", items: "center", children: small ? (_jsxs(_Fragment, { children: [_jsx(Button, { type: "button", size: "sm", variant: "secondary", onClick: choose, children: "Manage" }), _jsx(Button, { type: "button", size: "sm", onClick: done(() => saveConsent(readConsent())), children: "OK" })] })) : (_jsxs(_Fragment, { children: [_jsx(Button, { type: "button", size: "sm", variant: "link", onClick: choose, children: "Choose" }), _jsx(Button, { type: "button", size: "sm", variant: "secondary", onClick: done(rejectAll), children: "Reject all" }), _jsx(Button, { type: "button", size: "sm", onClick: done(acceptAll), children: "Accept all" })] })) })] }));
89
124
  };
90
125
  /** The footer link that reopens the choices, in every footer and every region. */
91
126
  const ConsentLink = ({ label = 'Cookie settings' }) => (_jsx(Button, { ...slot('consent-link'), type: "button", variant: "link", size: "sm", px: 0, minH: 0, onClick: openConsent, children: label }));
@@ -1 +1 @@
1
- {"version":3,"file":"Consent.js","sourceRoot":"","sources":["../../src/consent/Consent.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Consent.js","sourceRoot":"","sources":["../../src/consent/Consent.tsx"],"names":[],"mappings":"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"}