@hanzo/ui 8.27.22 → 8.27.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gallery.html +1 -1
- package/dist/masthead/Masthead.cjs +168 -0
- package/dist/masthead/Masthead.d.ts +54 -0
- package/dist/masthead/Masthead.d.ts.map +1 -0
- package/dist/masthead/Masthead.js +162 -0
- package/dist/masthead/Masthead.js.map +1 -0
- package/dist/masthead/index.cjs +31 -0
- package/dist/masthead/index.d.ts +10 -0
- package/dist/masthead/index.d.ts.map +1 -0
- package/dist/masthead/index.js +10 -0
- package/dist/masthead/index.js.map +1 -0
- package/dist/masthead/nav.cjs +305 -0
- package/dist/masthead/nav.d.ts +69 -0
- package/dist/masthead/nav.d.ts.map +1 -0
- package/dist/masthead/nav.js +301 -0
- package/dist/masthead/nav.js.map +1 -0
- package/dist/masthead.css +502 -0
- package/dist/models/ModelSelector.cjs +6 -4
- package/dist/models/ModelSelector.d.ts.map +1 -1
- package/dist/models/ModelSelector.js +6 -4
- package/dist/models/ModelSelector.js.map +1 -1
- package/package.json +20 -2
package/dist/gallery.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!doctype html><html lang="en" class="t_dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@hanzo/ui 8.27.
|
|
1
|
+
<!doctype html><html lang="en" class="t_dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@hanzo/ui 8.27.24</title><style>/* @hanzo/ui — generated by scripts/gen-css.mjs. Do not edit. */
|
|
2
2
|
:root { --hanzo-ui-styles: 1; }
|
|
3
3
|
/* Hanzo Design System — the entry point. Import THIS one file.
|
|
4
4
|
*
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Mark = Mark;
|
|
5
|
+
exports.Chevron = Chevron;
|
|
6
|
+
exports.Out = Out;
|
|
7
|
+
exports.Row = Row;
|
|
8
|
+
exports.Masthead = Masthead;
|
|
9
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
10
|
+
const react_1 = require("react");
|
|
11
|
+
const shell_1 = require("@hanzogui/shell");
|
|
12
|
+
const nav_1 = require("./nav.cjs");
|
|
13
|
+
/** A menu stays open this long after the pointer leaves, so a diagonal path to a row keeps it. */
|
|
14
|
+
const GRACE = 160;
|
|
15
|
+
/** And opens after the pointer rests this long, so crossing the bar opens nothing. */
|
|
16
|
+
const REST = 70;
|
|
17
|
+
function Mark({ name }) {
|
|
18
|
+
const Glyph = shell_1.MARKS[name];
|
|
19
|
+
return ((0, jsx_runtime_1.jsx)("span", { className: "hz-mark", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)(Glyph, { size: 16 }) }));
|
|
20
|
+
}
|
|
21
|
+
function Chevron() {
|
|
22
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "hz-chevron", width: 12, height: 12, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M6 9l6 6 6-6" }) }));
|
|
23
|
+
}
|
|
24
|
+
/** ↗ — the shell's outbound arrow, riding the label's size and ink. */
|
|
25
|
+
function Out() {
|
|
26
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "hz-out", width: "0.75em", height: "0.75em", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M7 17 17 7M9 7h8v8" }) }));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A row: the label, and ↗ with a new tab when it leaves hanzo.ai. Whether it
|
|
30
|
+
* leaves is read from the tree, so a row looks the same on every host.
|
|
31
|
+
*/
|
|
32
|
+
function Row({ link, origin = '', className, onClick }) {
|
|
33
|
+
const out = (0, nav_1.away)(link.href);
|
|
34
|
+
return ((0, jsx_runtime_1.jsxs)("a", { href: (0, nav_1.at)(link.href, origin), className: className, target: out ? '_blank' : undefined, rel: out ? 'noreferrer' : undefined, onClick: onClick, children: [link.label, out ? (0, jsx_runtime_1.jsx)(Out, {}) : null] }));
|
|
35
|
+
}
|
|
36
|
+
/** A menu's columns: the lead column in display type, the rest as lists. */
|
|
37
|
+
function Columns({ menu, origin, onPick }) {
|
|
38
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "hz-columns", children: menu.groups.map((group) => ((0, jsx_runtime_1.jsxs)("div", { className: "hz-column", "data-lead": group.lead ? '' : undefined, children: [(0, jsx_runtime_1.jsx)("p", { className: "hz-column-title", children: group.title }), group.links.map((link) => ((0, jsx_runtime_1.jsx)(Row, { link: link, origin: origin, onClick: onPick }, link.label)))] }, group.title))) }));
|
|
39
|
+
}
|
|
40
|
+
function Masthead({ label = 'Hanzo AI', home = '/', origin = '', person, onSignOut, commands = [], onAsk }) {
|
|
41
|
+
const [open, setOpen] = (0, react_1.useState)(null);
|
|
42
|
+
const [sheet, setSheet] = (0, react_1.useState)(false);
|
|
43
|
+
const [search, setSearch] = (0, react_1.useState)(false);
|
|
44
|
+
const [grounded, setGrounded] = (0, react_1.useState)(false);
|
|
45
|
+
const timer = (0, react_1.useRef)(undefined);
|
|
46
|
+
const pinned = (0, react_1.useRef)(false);
|
|
47
|
+
const bar = (0, react_1.useRef)(null);
|
|
48
|
+
const toggle = (0, react_1.useRef)(null);
|
|
49
|
+
const close = (0, react_1.useCallback)(() => {
|
|
50
|
+
clearTimeout(timer.current);
|
|
51
|
+
pinned.current = false;
|
|
52
|
+
setOpen(null);
|
|
53
|
+
}, []);
|
|
54
|
+
// The bar is clear over the top of the page and takes the glass once the page
|
|
55
|
+
// moves under it.
|
|
56
|
+
(0, react_1.useEffect)(() => {
|
|
57
|
+
const read = () => setGrounded(window.scrollY > 4);
|
|
58
|
+
read();
|
|
59
|
+
window.addEventListener('scroll', read, { passive: true });
|
|
60
|
+
return () => window.removeEventListener('scroll', read);
|
|
61
|
+
}, []);
|
|
62
|
+
// Escape closes whatever is open and hands focus back to what opened it.
|
|
63
|
+
(0, react_1.useEffect)(() => {
|
|
64
|
+
if (!open && !sheet)
|
|
65
|
+
return;
|
|
66
|
+
const key = (e) => {
|
|
67
|
+
if (e.key !== 'Escape')
|
|
68
|
+
return;
|
|
69
|
+
if (open) {
|
|
70
|
+
bar.current?.querySelector(`[aria-controls="menu-${open}"]`)?.focus();
|
|
71
|
+
close();
|
|
72
|
+
}
|
|
73
|
+
if (sheet) {
|
|
74
|
+
setSheet(false);
|
|
75
|
+
toggle.current?.focus();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
document.addEventListener('keydown', key);
|
|
79
|
+
return () => document.removeEventListener('keydown', key);
|
|
80
|
+
}, [open, sheet, close]);
|
|
81
|
+
// A press anywhere outside the bar closes an open menu.
|
|
82
|
+
(0, react_1.useEffect)(() => {
|
|
83
|
+
if (!open)
|
|
84
|
+
return;
|
|
85
|
+
const outside = (e) => {
|
|
86
|
+
if (!bar.current?.contains(e.target))
|
|
87
|
+
close();
|
|
88
|
+
};
|
|
89
|
+
document.addEventListener('pointerdown', outside);
|
|
90
|
+
return () => document.removeEventListener('pointerdown', outside);
|
|
91
|
+
}, [open, close]);
|
|
92
|
+
// The sheet holds the screen: the page under it does not scroll, and it goes
|
|
93
|
+
// away when the window grows into the bar.
|
|
94
|
+
(0, react_1.useEffect)(() => {
|
|
95
|
+
if (!sheet)
|
|
96
|
+
return;
|
|
97
|
+
const root = document.documentElement;
|
|
98
|
+
root.style.overflow = 'hidden';
|
|
99
|
+
const wide = matchMedia('(min-width: 1024px)');
|
|
100
|
+
const grow = () => wide.matches && setSheet(false);
|
|
101
|
+
wide.addEventListener('change', grow);
|
|
102
|
+
return () => {
|
|
103
|
+
root.style.overflow = '';
|
|
104
|
+
wide.removeEventListener('change', grow);
|
|
105
|
+
};
|
|
106
|
+
}, [sheet]);
|
|
107
|
+
const rest = (id) => (e) => {
|
|
108
|
+
if (e.pointerType !== 'mouse')
|
|
109
|
+
return;
|
|
110
|
+
clearTimeout(timer.current);
|
|
111
|
+
if (open === id)
|
|
112
|
+
return;
|
|
113
|
+
if (open) {
|
|
114
|
+
pinned.current = false;
|
|
115
|
+
setOpen(id);
|
|
116
|
+
}
|
|
117
|
+
else
|
|
118
|
+
timer.current = setTimeout(() => setOpen(id), REST);
|
|
119
|
+
};
|
|
120
|
+
const leave = (e) => {
|
|
121
|
+
if (e.pointerType !== 'mouse' || pinned.current)
|
|
122
|
+
return;
|
|
123
|
+
clearTimeout(timer.current);
|
|
124
|
+
timer.current = setTimeout(() => setOpen(null), GRACE);
|
|
125
|
+
};
|
|
126
|
+
const press = (id) => () => {
|
|
127
|
+
clearTimeout(timer.current);
|
|
128
|
+
// A click on a menu the pointer already opened keeps it open; a second one closes it.
|
|
129
|
+
if (open === id && pinned.current)
|
|
130
|
+
return close();
|
|
131
|
+
pinned.current = true;
|
|
132
|
+
setOpen(id);
|
|
133
|
+
};
|
|
134
|
+
const step = (id) => (e) => {
|
|
135
|
+
if (e.key !== 'ArrowDown')
|
|
136
|
+
return;
|
|
137
|
+
e.preventDefault();
|
|
138
|
+
pinned.current = true;
|
|
139
|
+
setOpen(id);
|
|
140
|
+
requestAnimationFrame(() => document.querySelector(`#menu-${id} a`)?.focus());
|
|
141
|
+
};
|
|
142
|
+
// Focus that leaves a menu closes it.
|
|
143
|
+
const blur = (e) => {
|
|
144
|
+
if (!e.currentTarget.contains(e.relatedTarget))
|
|
145
|
+
close();
|
|
146
|
+
};
|
|
147
|
+
const find = () => {
|
|
148
|
+
close();
|
|
149
|
+
setSheet(false);
|
|
150
|
+
setSearch(true);
|
|
151
|
+
};
|
|
152
|
+
const menu = (item, trigger) => ((0, jsx_runtime_1.jsxs)("div", { className: "hz-menu", onPointerEnter: rest(item.id), onPointerLeave: leave, onBlur: blur, children: [trigger, open === item.id ? ((0, jsx_runtime_1.jsx)("div", { id: `menu-${item.id}`, className: "hz-plane", role: "group", "aria-label": item.label, children: (0, jsx_runtime_1.jsx)(Columns, { menu: item, origin: origin, onPick: close }) })) : null] }));
|
|
153
|
+
const trigger = (item) => ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "hz-trigger", "aria-expanded": open === item.id, "aria-controls": `menu-${item.id}`, onClick: press(item.id), onKeyDown: step(item.id), children: [(0, jsx_runtime_1.jsx)(Mark, { name: item.glyph }), item.label, (0, jsx_runtime_1.jsx)(Chevron, {})] }));
|
|
154
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("header", { ref: bar, className: "hz-masthead", "data-grounded": grounded || open || sheet ? '' : undefined, children: [menu(nav_1.COMPANY, (0, jsx_runtime_1.jsxs)("span", { className: "hz-brand", children: [(0, jsx_runtime_1.jsx)("a", { href: home, "aria-label": `${label} home`, className: "hz-wordmark", children: (0, jsx_runtime_1.jsx)(shell_1.HanzoWordmark, { label: label, size: 22 }) }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "hz-company", "aria-label": "Company", "aria-expanded": open === nav_1.COMPANY.id, "aria-controls": `menu-${nav_1.COMPANY.id}`, onClick: press(nav_1.COMPANY.id), onKeyDown: step(nav_1.COMPANY.id), children: (0, jsx_runtime_1.jsx)(Chevron, {}) })] })), (0, jsx_runtime_1.jsx)("nav", { className: "hz-nav", "aria-label": "Main", children: nav_1.MENUS.map((item) => ((0, jsx_runtime_1.jsx)(react_1.Fragment, { children: menu(item, trigger(item)) }, item.id))) }), open && open !== 'login' ? (0, jsx_runtime_1.jsx)("div", { className: "hz-veil", "aria-hidden": "true", onClick: close }) : null, (0, jsx_runtime_1.jsx)("button", { type: "button", className: "hz-find", "aria-label": "Search Hanzo or ask AI", onClick: find, children: (0, jsx_runtime_1.jsx)(shell_1.MARKS.search, { size: 16 }) }), (0, jsx_runtime_1.jsxs)("div", { className: "hz-end", children: [person ? ((0, jsx_runtime_1.jsx)(shell_1.HanzoIdentity, { auth: { user: person, onSignOut, items: [{ id: 'account', label: nav_1.ACCOUNT.label, href: (0, nav_1.at)(nav_1.ACCOUNT.href, origin) }] } })) : ((0, jsx_runtime_1.jsxs)("div", { className: "hz-menu hz-login", onPointerEnter: rest('login'), onPointerLeave: leave, onBlur: blur, children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "hz-trigger", "aria-expanded": open === 'login', "aria-controls": "menu-login", onClick: press('login'), onKeyDown: step('login'), children: ["Log in", (0, jsx_runtime_1.jsx)(Chevron, {})] }), open === 'login' ? ((0, jsx_runtime_1.jsx)("div", { id: "menu-login", className: "hz-card", role: "group", "aria-label": "Log in", children: nav_1.LOGIN.map((link) => ((0, jsx_runtime_1.jsxs)("a", { href: (0, nav_1.at)(link.href, origin), target: "_blank", rel: "noreferrer", onClick: close, children: [(0, jsx_runtime_1.jsx)("span", { children: link.label }), (0, jsx_runtime_1.jsx)("small", { children: link.hint })] }, link.label))) })) : null] })), (0, jsx_runtime_1.jsx)(Row, { link: person ? nav_1.OPEN : nav_1.TRY, origin: origin, className: "hz-try" }), (0, jsx_runtime_1.jsx)("button", { ref: toggle, type: "button", className: "hz-toggle", "aria-label": sheet ? 'Close menu' : 'Open menu', "aria-expanded": sheet, "aria-controls": "sheet", onClick: () => {
|
|
155
|
+
close();
|
|
156
|
+
setSheet((s) => !s);
|
|
157
|
+
}, children: (0, jsx_runtime_1.jsx)("svg", { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: sheet ? 'M6 6l12 12M18 6L6 18' : 'M3 9h18M3 15h18' }) }) })] })] }), sheet ? (0, jsx_runtime_1.jsx)(Sheet, { signedIn: Boolean(person), origin: origin, onClose: () => setSheet(false) }) : null, (0, jsx_runtime_1.jsx)(shell_1.HanzoCommandPalette, { commands: commands, open: search, onOpenChange: setSearch, onAsk: onAsk })] }));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* The phone's menu: the whole tree, one section open at a time, then the two
|
|
161
|
+
* doors. A `<details>` per section, so it opens with no script and a tap never
|
|
162
|
+
* waits on one.
|
|
163
|
+
*/
|
|
164
|
+
function Sheet({ signedIn, origin, onClose }) {
|
|
165
|
+
const first = (0, react_1.useRef)(null);
|
|
166
|
+
(0, react_1.useEffect)(() => first.current?.focus(), []);
|
|
167
|
+
return ((0, jsx_runtime_1.jsxs)("div", { id: "sheet", className: "hz-sheet", role: "dialog", "aria-modal": "true", "aria-label": "Menu", children: [(0, jsx_runtime_1.jsx)("nav", { "aria-label": "Main", children: [nav_1.COMPANY, ...nav_1.MENUS].map((item, i) => ((0, jsx_runtime_1.jsxs)("details", { name: "sheet", children: [(0, jsx_runtime_1.jsxs)("summary", { ref: i === 0 ? first : undefined, children: [(0, jsx_runtime_1.jsx)(Mark, { name: item.glyph }), item.label, (0, jsx_runtime_1.jsx)(Chevron, {})] }), item.groups.map((group) => ((0, jsx_runtime_1.jsxs)("div", { className: "hz-column", "data-lead": group.lead ? '' : undefined, children: [(0, jsx_runtime_1.jsx)("p", { className: "hz-column-title", children: group.title }), group.links.map((link) => ((0, jsx_runtime_1.jsx)(Row, { link: link, origin: origin, onClick: onClose }, link.label)))] }, group.title)))] }, item.id))) }), (0, jsx_runtime_1.jsxs)("div", { className: "hz-doors", children: [signedIn ? ((0, jsx_runtime_1.jsx)("a", { href: (0, nav_1.at)(nav_1.ACCOUNT.href, origin), className: "hz-door", children: nav_1.ACCOUNT.label })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("p", { className: "hz-column-title", children: "Log in" }), nav_1.LOGIN.map((link) => ((0, jsx_runtime_1.jsx)(Row, { link: link, origin: origin, className: "hz-door", onClick: onClose }, link.label)))] })), (0, jsx_runtime_1.jsx)(Row, { link: signedIn ? nav_1.OPEN : nav_1.TRY, origin: origin, className: "hz-try", onClick: onClose })] })] }));
|
|
168
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type GlyphName, type HanzoCommandEntry } from '@hanzogui/shell';
|
|
2
|
+
import { type Link } from './nav.js';
|
|
3
|
+
/**
|
|
4
|
+
* hanzo.ai's header: one nav tree (`./nav`) for the bar and the phone sheet.
|
|
5
|
+
*
|
|
6
|
+
* The bar is `@hanzogui/shell`'s vocabulary — its marks, its wordmark, its ⌘K
|
|
7
|
+
* palette and its account menu — laid out the way hanzo.ai reads: the wordmark
|
|
8
|
+
* opens the company, the five menus follow with a mark before each label,
|
|
9
|
+
* search closes the row, and Log in ▾ and Try Hanzo stand at the far end.
|
|
10
|
+
*
|
|
11
|
+
* Styled by `@hanzo/ui/masthead.css`, which the host imports once.
|
|
12
|
+
*/
|
|
13
|
+
/** Who is signed in, as the account menu draws them. */
|
|
14
|
+
export interface Person {
|
|
15
|
+
name: string;
|
|
16
|
+
email?: string;
|
|
17
|
+
avatar?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface MastheadProps {
|
|
20
|
+
/** The name in the corner: `Hanzo AI` on hanzo.ai, `Hanzo Blog` on the blog. */
|
|
21
|
+
label?: string;
|
|
22
|
+
/** Where the name goes. */
|
|
23
|
+
home?: string;
|
|
24
|
+
/**
|
|
25
|
+
* The host the tree's paths are pages on. Empty on hanzo.ai itself; any other
|
|
26
|
+
* site passes `https://hanzo.ai`, and a row keeps its look while it goes there.
|
|
27
|
+
*/
|
|
28
|
+
origin?: string;
|
|
29
|
+
/** The signed-in reader. Absent, the bar offers Log in ▾ and Try Hanzo. */
|
|
30
|
+
person?: Person | null;
|
|
31
|
+
onSignOut?: () => void;
|
|
32
|
+
/** What ⌘K finds. */
|
|
33
|
+
commands?: HanzoCommandEntry[];
|
|
34
|
+
/** A question typed into ⌘K. */
|
|
35
|
+
onAsk?: (question: string) => void;
|
|
36
|
+
}
|
|
37
|
+
export declare function Mark({ name }: {
|
|
38
|
+
name: GlyphName;
|
|
39
|
+
}): import("react").JSX.Element;
|
|
40
|
+
export declare function Chevron(): import("react").JSX.Element;
|
|
41
|
+
/** ↗ — the shell's outbound arrow, riding the label's size and ink. */
|
|
42
|
+
export declare function Out(): import("react").JSX.Element;
|
|
43
|
+
/**
|
|
44
|
+
* A row: the label, and ↗ with a new tab when it leaves hanzo.ai. Whether it
|
|
45
|
+
* leaves is read from the tree, so a row looks the same on every host.
|
|
46
|
+
*/
|
|
47
|
+
export declare function Row({ link, origin, className, onClick }: {
|
|
48
|
+
link: Link;
|
|
49
|
+
origin?: string;
|
|
50
|
+
className?: string;
|
|
51
|
+
onClick?: () => void;
|
|
52
|
+
}): import("react").JSX.Element;
|
|
53
|
+
export declare function Masthead({ label, home, origin, person, onSignOut, commands, onAsk }: MastheadProps): import("react").JSX.Element;
|
|
54
|
+
//# sourceMappingURL=Masthead.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Masthead.d.ts","sourceRoot":"","sources":["../../src/masthead/Masthead.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA4D,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAClI,OAAO,EAAuD,KAAK,IAAI,EAAa,MAAM,OAAO,CAAA;AAEjG;;;;;;;;;GASG;AAEH,wDAAwD;AACxD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC9B,gCAAgC;IAChC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AAOD,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,+BAOjD;AAED,wBAAgB,OAAO,gCAMtB;AAED,uEAAuE;AACvE,wBAAgB,GAAG,gCAMlB;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,EAAE,IAAI,EAAE,MAAW,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,+BAcvI;AAkBD,wBAAgB,QAAQ,CAAC,EAAE,KAAkB,EAAE,IAAU,EAAE,MAAW,EAAE,MAAM,EAAE,SAAS,EAAE,QAAa,EAAE,KAAK,EAAE,EAAE,aAAa,+BAuN/H"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Fragment, useCallback, useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { HanzoCommandPalette, HanzoIdentity, HanzoWordmark, MARKS } from '@hanzogui/shell';
|
|
5
|
+
import { ACCOUNT, COMPANY, LOGIN, MENUS, OPEN, TRY, at, away } from './nav.js';
|
|
6
|
+
/** A menu stays open this long after the pointer leaves, so a diagonal path to a row keeps it. */
|
|
7
|
+
const GRACE = 160;
|
|
8
|
+
/** And opens after the pointer rests this long, so crossing the bar opens nothing. */
|
|
9
|
+
const REST = 70;
|
|
10
|
+
export function Mark({ name }) {
|
|
11
|
+
const Glyph = MARKS[name];
|
|
12
|
+
return (_jsx("span", { className: "hz-mark", "aria-hidden": "true", children: _jsx(Glyph, { size: 16 }) }));
|
|
13
|
+
}
|
|
14
|
+
export function Chevron() {
|
|
15
|
+
return (_jsx("svg", { className: "hz-chevron", width: 12, height: 12, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "M6 9l6 6 6-6" }) }));
|
|
16
|
+
}
|
|
17
|
+
/** ↗ — the shell's outbound arrow, riding the label's size and ink. */
|
|
18
|
+
export function Out() {
|
|
19
|
+
return (_jsx("svg", { className: "hz-out", width: "0.75em", height: "0.75em", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "M7 17 17 7M9 7h8v8" }) }));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A row: the label, and ↗ with a new tab when it leaves hanzo.ai. Whether it
|
|
23
|
+
* leaves is read from the tree, so a row looks the same on every host.
|
|
24
|
+
*/
|
|
25
|
+
export function Row({ link, origin = '', className, onClick }) {
|
|
26
|
+
const out = away(link.href);
|
|
27
|
+
return (_jsxs("a", { href: at(link.href, origin), className: className, target: out ? '_blank' : undefined, rel: out ? 'noreferrer' : undefined, onClick: onClick, children: [link.label, out ? _jsx(Out, {}) : null] }));
|
|
28
|
+
}
|
|
29
|
+
/** A menu's columns: the lead column in display type, the rest as lists. */
|
|
30
|
+
function Columns({ menu, origin, onPick }) {
|
|
31
|
+
return (_jsx("div", { className: "hz-columns", children: menu.groups.map((group) => (_jsxs("div", { className: "hz-column", "data-lead": group.lead ? '' : undefined, children: [_jsx("p", { className: "hz-column-title", children: group.title }), group.links.map((link) => (_jsx(Row, { link: link, origin: origin, onClick: onPick }, link.label)))] }, group.title))) }));
|
|
32
|
+
}
|
|
33
|
+
export function Masthead({ label = 'Hanzo AI', home = '/', origin = '', person, onSignOut, commands = [], onAsk }) {
|
|
34
|
+
const [open, setOpen] = useState(null);
|
|
35
|
+
const [sheet, setSheet] = useState(false);
|
|
36
|
+
const [search, setSearch] = useState(false);
|
|
37
|
+
const [grounded, setGrounded] = useState(false);
|
|
38
|
+
const timer = useRef(undefined);
|
|
39
|
+
const pinned = useRef(false);
|
|
40
|
+
const bar = useRef(null);
|
|
41
|
+
const toggle = useRef(null);
|
|
42
|
+
const close = useCallback(() => {
|
|
43
|
+
clearTimeout(timer.current);
|
|
44
|
+
pinned.current = false;
|
|
45
|
+
setOpen(null);
|
|
46
|
+
}, []);
|
|
47
|
+
// The bar is clear over the top of the page and takes the glass once the page
|
|
48
|
+
// moves under it.
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
const read = () => setGrounded(window.scrollY > 4);
|
|
51
|
+
read();
|
|
52
|
+
window.addEventListener('scroll', read, { passive: true });
|
|
53
|
+
return () => window.removeEventListener('scroll', read);
|
|
54
|
+
}, []);
|
|
55
|
+
// Escape closes whatever is open and hands focus back to what opened it.
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if (!open && !sheet)
|
|
58
|
+
return;
|
|
59
|
+
const key = (e) => {
|
|
60
|
+
if (e.key !== 'Escape')
|
|
61
|
+
return;
|
|
62
|
+
if (open) {
|
|
63
|
+
bar.current?.querySelector(`[aria-controls="menu-${open}"]`)?.focus();
|
|
64
|
+
close();
|
|
65
|
+
}
|
|
66
|
+
if (sheet) {
|
|
67
|
+
setSheet(false);
|
|
68
|
+
toggle.current?.focus();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
document.addEventListener('keydown', key);
|
|
72
|
+
return () => document.removeEventListener('keydown', key);
|
|
73
|
+
}, [open, sheet, close]);
|
|
74
|
+
// A press anywhere outside the bar closes an open menu.
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
if (!open)
|
|
77
|
+
return;
|
|
78
|
+
const outside = (e) => {
|
|
79
|
+
if (!bar.current?.contains(e.target))
|
|
80
|
+
close();
|
|
81
|
+
};
|
|
82
|
+
document.addEventListener('pointerdown', outside);
|
|
83
|
+
return () => document.removeEventListener('pointerdown', outside);
|
|
84
|
+
}, [open, close]);
|
|
85
|
+
// The sheet holds the screen: the page under it does not scroll, and it goes
|
|
86
|
+
// away when the window grows into the bar.
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
if (!sheet)
|
|
89
|
+
return;
|
|
90
|
+
const root = document.documentElement;
|
|
91
|
+
root.style.overflow = 'hidden';
|
|
92
|
+
const wide = matchMedia('(min-width: 1024px)');
|
|
93
|
+
const grow = () => wide.matches && setSheet(false);
|
|
94
|
+
wide.addEventListener('change', grow);
|
|
95
|
+
return () => {
|
|
96
|
+
root.style.overflow = '';
|
|
97
|
+
wide.removeEventListener('change', grow);
|
|
98
|
+
};
|
|
99
|
+
}, [sheet]);
|
|
100
|
+
const rest = (id) => (e) => {
|
|
101
|
+
if (e.pointerType !== 'mouse')
|
|
102
|
+
return;
|
|
103
|
+
clearTimeout(timer.current);
|
|
104
|
+
if (open === id)
|
|
105
|
+
return;
|
|
106
|
+
if (open) {
|
|
107
|
+
pinned.current = false;
|
|
108
|
+
setOpen(id);
|
|
109
|
+
}
|
|
110
|
+
else
|
|
111
|
+
timer.current = setTimeout(() => setOpen(id), REST);
|
|
112
|
+
};
|
|
113
|
+
const leave = (e) => {
|
|
114
|
+
if (e.pointerType !== 'mouse' || pinned.current)
|
|
115
|
+
return;
|
|
116
|
+
clearTimeout(timer.current);
|
|
117
|
+
timer.current = setTimeout(() => setOpen(null), GRACE);
|
|
118
|
+
};
|
|
119
|
+
const press = (id) => () => {
|
|
120
|
+
clearTimeout(timer.current);
|
|
121
|
+
// A click on a menu the pointer already opened keeps it open; a second one closes it.
|
|
122
|
+
if (open === id && pinned.current)
|
|
123
|
+
return close();
|
|
124
|
+
pinned.current = true;
|
|
125
|
+
setOpen(id);
|
|
126
|
+
};
|
|
127
|
+
const step = (id) => (e) => {
|
|
128
|
+
if (e.key !== 'ArrowDown')
|
|
129
|
+
return;
|
|
130
|
+
e.preventDefault();
|
|
131
|
+
pinned.current = true;
|
|
132
|
+
setOpen(id);
|
|
133
|
+
requestAnimationFrame(() => document.querySelector(`#menu-${id} a`)?.focus());
|
|
134
|
+
};
|
|
135
|
+
// Focus that leaves a menu closes it.
|
|
136
|
+
const blur = (e) => {
|
|
137
|
+
if (!e.currentTarget.contains(e.relatedTarget))
|
|
138
|
+
close();
|
|
139
|
+
};
|
|
140
|
+
const find = () => {
|
|
141
|
+
close();
|
|
142
|
+
setSheet(false);
|
|
143
|
+
setSearch(true);
|
|
144
|
+
};
|
|
145
|
+
const menu = (item, trigger) => (_jsxs("div", { className: "hz-menu", onPointerEnter: rest(item.id), onPointerLeave: leave, onBlur: blur, children: [trigger, open === item.id ? (_jsx("div", { id: `menu-${item.id}`, className: "hz-plane", role: "group", "aria-label": item.label, children: _jsx(Columns, { menu: item, origin: origin, onPick: close }) })) : null] }));
|
|
146
|
+
const trigger = (item) => (_jsxs("button", { type: "button", className: "hz-trigger", "aria-expanded": open === item.id, "aria-controls": `menu-${item.id}`, onClick: press(item.id), onKeyDown: step(item.id), children: [_jsx(Mark, { name: item.glyph }), item.label, _jsx(Chevron, {})] }));
|
|
147
|
+
return (_jsxs(_Fragment, { children: [_jsxs("header", { ref: bar, className: "hz-masthead", "data-grounded": grounded || open || sheet ? '' : undefined, children: [menu(COMPANY, _jsxs("span", { className: "hz-brand", children: [_jsx("a", { href: home, "aria-label": `${label} home`, className: "hz-wordmark", children: _jsx(HanzoWordmark, { label: label, size: 22 }) }), _jsx("button", { type: "button", className: "hz-company", "aria-label": "Company", "aria-expanded": open === COMPANY.id, "aria-controls": `menu-${COMPANY.id}`, onClick: press(COMPANY.id), onKeyDown: step(COMPANY.id), children: _jsx(Chevron, {}) })] })), _jsx("nav", { className: "hz-nav", "aria-label": "Main", children: MENUS.map((item) => (_jsx(Fragment, { children: menu(item, trigger(item)) }, item.id))) }), open && open !== 'login' ? _jsx("div", { className: "hz-veil", "aria-hidden": "true", onClick: close }) : null, _jsx("button", { type: "button", className: "hz-find", "aria-label": "Search Hanzo or ask AI", onClick: find, children: _jsx(MARKS.search, { size: 16 }) }), _jsxs("div", { className: "hz-end", children: [person ? (_jsx(HanzoIdentity, { auth: { user: person, onSignOut, items: [{ id: 'account', label: ACCOUNT.label, href: at(ACCOUNT.href, origin) }] } })) : (_jsxs("div", { className: "hz-menu hz-login", onPointerEnter: rest('login'), onPointerLeave: leave, onBlur: blur, children: [_jsxs("button", { type: "button", className: "hz-trigger", "aria-expanded": open === 'login', "aria-controls": "menu-login", onClick: press('login'), onKeyDown: step('login'), children: ["Log in", _jsx(Chevron, {})] }), open === 'login' ? (_jsx("div", { id: "menu-login", className: "hz-card", role: "group", "aria-label": "Log in", children: LOGIN.map((link) => (_jsxs("a", { href: at(link.href, origin), target: "_blank", rel: "noreferrer", onClick: close, children: [_jsx("span", { children: link.label }), _jsx("small", { children: link.hint })] }, link.label))) })) : null] })), _jsx(Row, { link: person ? OPEN : TRY, origin: origin, className: "hz-try" }), _jsx("button", { ref: toggle, type: "button", className: "hz-toggle", "aria-label": sheet ? 'Close menu' : 'Open menu', "aria-expanded": sheet, "aria-controls": "sheet", onClick: () => {
|
|
148
|
+
close();
|
|
149
|
+
setSheet((s) => !s);
|
|
150
|
+
}, children: _jsx("svg", { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", "aria-hidden": "true", children: _jsx("path", { d: sheet ? 'M6 6l12 12M18 6L6 18' : 'M3 9h18M3 15h18' }) }) })] })] }), sheet ? _jsx(Sheet, { signedIn: Boolean(person), origin: origin, onClose: () => setSheet(false) }) : null, _jsx(HanzoCommandPalette, { commands: commands, open: search, onOpenChange: setSearch, onAsk: onAsk })] }));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* The phone's menu: the whole tree, one section open at a time, then the two
|
|
154
|
+
* doors. A `<details>` per section, so it opens with no script and a tap never
|
|
155
|
+
* waits on one.
|
|
156
|
+
*/
|
|
157
|
+
function Sheet({ signedIn, origin, onClose }) {
|
|
158
|
+
const first = useRef(null);
|
|
159
|
+
useEffect(() => first.current?.focus(), []);
|
|
160
|
+
return (_jsxs("div", { id: "sheet", className: "hz-sheet", role: "dialog", "aria-modal": "true", "aria-label": "Menu", children: [_jsx("nav", { "aria-label": "Main", children: [COMPANY, ...MENUS].map((item, i) => (_jsxs("details", { name: "sheet", children: [_jsxs("summary", { ref: i === 0 ? first : undefined, children: [_jsx(Mark, { name: item.glyph }), item.label, _jsx(Chevron, {})] }), item.groups.map((group) => (_jsxs("div", { className: "hz-column", "data-lead": group.lead ? '' : undefined, children: [_jsx("p", { className: "hz-column-title", children: group.title }), group.links.map((link) => (_jsx(Row, { link: link, origin: origin, onClick: onClose }, link.label)))] }, group.title)))] }, item.id))) }), _jsxs("div", { className: "hz-doors", children: [signedIn ? (_jsx("a", { href: at(ACCOUNT.href, origin), className: "hz-door", children: ACCOUNT.label })) : (_jsxs(_Fragment, { children: [_jsx("p", { className: "hz-column-title", children: "Log in" }), LOGIN.map((link) => (_jsx(Row, { link: link, origin: origin, className: "hz-door", onClick: onClose }, link.label)))] })), _jsx(Row, { link: signedIn ? OPEN : TRY, origin: origin, className: "hz-try", onClick: onClose })] })] }));
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=Masthead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Masthead.js","sourceRoot":"","sources":["../../src/masthead/Masthead.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Row = exports.Out = exports.Masthead = exports.Mark = exports.Chevron = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* hanzo.ai's header, for every Hanzo site that wears it: `Masthead` draws the
|
|
20
|
+
* nav tree in `./nav`, and `@hanzo/ui/masthead.css` styles it.
|
|
21
|
+
*
|
|
22
|
+
* A server component that needs only the tree imports `@hanzo/ui/masthead/nav`,
|
|
23
|
+
* which is data.
|
|
24
|
+
*/
|
|
25
|
+
var Masthead_1 = require("./Masthead.cjs");
|
|
26
|
+
Object.defineProperty(exports, "Chevron", { enumerable: true, get: function () { return Masthead_1.Chevron; } });
|
|
27
|
+
Object.defineProperty(exports, "Mark", { enumerable: true, get: function () { return Masthead_1.Mark; } });
|
|
28
|
+
Object.defineProperty(exports, "Masthead", { enumerable: true, get: function () { return Masthead_1.Masthead; } });
|
|
29
|
+
Object.defineProperty(exports, "Out", { enumerable: true, get: function () { return Masthead_1.Out; } });
|
|
30
|
+
Object.defineProperty(exports, "Row", { enumerable: true, get: function () { return Masthead_1.Row; } });
|
|
31
|
+
__exportStar(require("./nav.cjs"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hanzo.ai's header, for every Hanzo site that wears it: `Masthead` draws the
|
|
3
|
+
* nav tree in `./nav`, and `@hanzo/ui/masthead.css` styles it.
|
|
4
|
+
*
|
|
5
|
+
* A server component that needs only the tree imports `@hanzo/ui/masthead/nav`,
|
|
6
|
+
* which is data.
|
|
7
|
+
*/
|
|
8
|
+
export { Chevron, Mark, Masthead, Out, Row, type MastheadProps, type Person } from './Masthead.js';
|
|
9
|
+
export * from './nav.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/masthead/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAA;AAC/F,cAAc,OAAO,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hanzo.ai's header, for every Hanzo site that wears it: `Masthead` draws the
|
|
3
|
+
* nav tree in `./nav`, and `@hanzo/ui/masthead.css` styles it.
|
|
4
|
+
*
|
|
5
|
+
* A server component that needs only the tree imports `@hanzo/ui/masthead/nav`,
|
|
6
|
+
* which is data.
|
|
7
|
+
*/
|
|
8
|
+
export { Chevron, Mark, Masthead, Out, Row } from './Masthead.js';
|
|
9
|
+
export * from './nav.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/masthead/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAmC,MAAM,YAAY,CAAA;AAC/F,cAAc,OAAO,CAAA"}
|