@hanzo/ui 8.27.43 → 8.27.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/backends/gui/animated-testimonials.cjs +2 -2
  2. package/dist/backends/gui/animated-testimonials.js +2 -2
  3. package/dist/backends/gui/animated-testimonials.js.map +1 -1
  4. package/dist/backends/gui/animated-tooltip.cjs +2 -2
  5. package/dist/backends/gui/animated-tooltip.js +2 -2
  6. package/dist/backends/gui/animated-tooltip.js.map +1 -1
  7. package/dist/backends/gui/carousel.cjs +2 -2
  8. package/dist/backends/gui/carousel.d.ts.map +1 -1
  9. package/dist/backends/gui/carousel.js +2 -2
  10. package/dist/backends/gui/carousel.js.map +1 -1
  11. package/dist/backends/gui/index.cjs +4 -5
  12. package/dist/backends/gui/index.d.ts +1 -1
  13. package/dist/backends/gui/index.d.ts.map +1 -1
  14. package/dist/backends/gui/index.js +1 -1
  15. package/dist/backends/gui/index.js.map +1 -1
  16. package/dist/backends/gui/input-otp.cjs +2 -1
  17. package/dist/backends/gui/input-otp.d.ts.map +1 -1
  18. package/dist/backends/gui/input-otp.js +2 -1
  19. package/dist/backends/gui/input-otp.js.map +1 -1
  20. package/dist/backends/gui/navigation-menu.cjs +24 -6
  21. package/dist/backends/gui/navigation-menu.d.ts +0 -6
  22. package/dist/backends/gui/navigation-menu.d.ts.map +1 -1
  23. package/dist/backends/gui/navigation-menu.js +23 -5
  24. package/dist/backends/gui/navigation-menu.js.map +1 -1
  25. package/dist/backends/gui/prose.cjs +4 -18
  26. package/dist/backends/gui/prose.d.ts +8 -5
  27. package/dist/backends/gui/prose.d.ts.map +1 -1
  28. package/dist/backends/gui/prose.js +4 -18
  29. package/dist/backends/gui/prose.js.map +1 -1
  30. package/dist/backends/gui/skeleton.cjs +1 -1
  31. package/dist/backends/gui/skeleton.d.ts.map +1 -1
  32. package/dist/backends/gui/skeleton.js +1 -1
  33. package/dist/backends/gui/skeleton.js.map +1 -1
  34. package/dist/backends/gui/timeline.cjs +2 -2
  35. package/dist/backends/gui/timeline.d.ts +1 -1
  36. package/dist/backends/gui/timeline.js +2 -2
  37. package/dist/backends/gui/timeline.js.map +1 -1
  38. package/dist/backends/gui/video.cjs +1 -1
  39. package/dist/backends/gui/video.js +1 -1
  40. package/dist/backends/gui/video.js.map +1 -1
  41. package/dist/chat/Composer.cjs +6 -1
  42. package/dist/chat/Composer.d.ts.map +1 -1
  43. package/dist/chat/Composer.js +6 -1
  44. package/dist/chat/Composer.js.map +1 -1
  45. package/dist/chat/SessionRail.cjs +1 -4
  46. package/dist/chat/SessionRail.js +1 -4
  47. package/dist/chat/SessionRail.js.map +1 -1
  48. package/dist/consent/Consent.cjs +43 -8
  49. package/dist/consent/Consent.d.ts.map +1 -1
  50. package/dist/consent/Consent.js +45 -10
  51. package/dist/consent/Consent.js.map +1 -1
  52. package/dist/core/cn.cjs +1 -1
  53. package/dist/core/cn.d.ts +1 -1
  54. package/dist/core/cn.js +1 -1
  55. package/dist/gallery.html +481 -600
  56. package/dist/glass.cjs +2 -24
  57. package/dist/glass.css +0 -196
  58. package/dist/glass.d.ts +2 -26
  59. package/dist/glass.d.ts.map +1 -1
  60. package/dist/glass.js +1 -22
  61. package/dist/glass.js.map +1 -1
  62. package/dist/grid.cjs +60 -10
  63. package/dist/grid.d.ts +20 -24
  64. package/dist/grid.d.ts.map +1 -1
  65. package/dist/grid.js +60 -10
  66. package/dist/grid.js.map +1 -1
  67. package/dist/index.cjs +6 -2
  68. package/dist/index.d.ts +2 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +4 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/index.node.cjs +6 -2
  73. package/dist/index.node.js +4 -1
  74. package/dist/masthead/index.cjs +3 -12
  75. package/dist/masthead/index.d.ts +3 -6
  76. package/dist/masthead/index.d.ts.map +1 -1
  77. package/dist/masthead/index.js +3 -6
  78. package/dist/masthead/index.js.map +1 -1
  79. package/dist/motion.cjs +20 -0
  80. package/dist/motion.d.ts +17 -0
  81. package/dist/motion.d.ts.map +1 -0
  82. package/dist/motion.js +16 -0
  83. package/dist/motion.js.map +1 -0
  84. package/dist/onboarding/account.cjs +1 -1
  85. package/dist/onboarding/account.d.ts +3 -3
  86. package/dist/onboarding/account.d.ts.map +1 -1
  87. package/dist/onboarding/account.js +1 -1
  88. package/dist/onboarding/account.js.map +1 -1
  89. package/dist/onboarding/frame.cjs +1 -1
  90. package/dist/onboarding/frame.d.ts +1 -1
  91. package/dist/onboarding/frame.d.ts.map +1 -1
  92. package/dist/onboarding/frame.js +1 -1
  93. package/dist/onboarding/frame.js.map +1 -1
  94. package/dist/product/DataTable.cjs +24 -4
  95. package/dist/product/DataTable.d.ts +0 -16
  96. package/dist/product/DataTable.d.ts.map +1 -1
  97. package/dist/product/DataTable.js +24 -4
  98. package/dist/product/DataTable.js.map +1 -1
  99. package/dist/product/FadeIn.cjs +1 -1
  100. package/dist/product/FadeIn.js +1 -1
  101. package/dist/product/FadeIn.js.map +1 -1
  102. package/dist/product/Metric.cjs +19 -2
  103. package/dist/product/Metric.d.ts +0 -16
  104. package/dist/product/Metric.d.ts.map +1 -1
  105. package/dist/product/Metric.js +19 -2
  106. package/dist/product/Metric.js.map +1 -1
  107. package/dist/product/Reorder.cjs +1 -1
  108. package/dist/product/Reorder.js +1 -1
  109. package/dist/product/Reorder.js.map +1 -1
  110. package/dist/product/Skeleton.cjs +5 -5
  111. package/dist/product/Skeleton.d.ts +4 -4
  112. package/dist/product/Skeleton.d.ts.map +1 -1
  113. package/dist/product/Skeleton.js +5 -5
  114. package/dist/product/Skeleton.js.map +1 -1
  115. package/dist/product/SlideOver.cjs +2 -10
  116. package/dist/product/SlideOver.d.ts.map +1 -1
  117. package/dist/product/SlideOver.js +2 -10
  118. package/dist/product/SlideOver.js.map +1 -1
  119. package/dist/product/figures.cjs +16 -0
  120. package/dist/product/figures.d.ts +16 -0
  121. package/dist/product/figures.d.ts.map +1 -0
  122. package/dist/product/figures.js +14 -0
  123. package/dist/product/figures.js.map +1 -0
  124. package/dist/product/social/SocialResource.cjs +2 -1
  125. package/dist/product/social/SocialResource.d.ts.map +1 -1
  126. package/dist/product/social/SocialResource.js +2 -1
  127. package/dist/product/social/SocialResource.js.map +1 -1
  128. package/dist/product/social/SocialSummaryBar.cjs +2 -1
  129. package/dist/product/social/SocialSummaryBar.d.ts.map +1 -1
  130. package/dist/product/social/SocialSummaryBar.js +2 -1
  131. package/dist/product/social/SocialSummaryBar.js.map +1 -1
  132. package/dist/style.cjs +1 -4
  133. package/dist/style.d.ts +0 -2
  134. package/dist/style.d.ts.map +1 -1
  135. package/dist/style.js +0 -2
  136. package/dist/style.js.map +1 -1
  137. package/dist/styles/motion.css +61 -283
  138. package/dist/styles.css +478 -597
  139. package/dist/sx.cjs +1 -1
  140. package/dist/sx.js +1 -1
  141. package/dist/theme.css +369 -292
  142. package/package.json +3 -4
  143. package/dist/masthead/Masthead.cjs +0 -168
  144. package/dist/masthead/Masthead.d.ts +0 -54
  145. package/dist/masthead/Masthead.d.ts.map +0 -1
  146. package/dist/masthead/Masthead.js +0 -162
  147. package/dist/masthead/Masthead.js.map +0 -1
  148. package/dist/masthead.css +0 -502
  149. package/dist/primitives/navigationMenuTriggerStyle.cjs +0 -8
  150. package/dist/primitives/navigationMenuTriggerStyle.d.ts +0 -2
  151. package/dist/primitives/navigationMenuTriggerStyle.d.ts.map +0 -1
  152. package/dist/primitives/navigationMenuTriggerStyle.js +0 -5
  153. package/dist/primitives/navigationMenuTriggerStyle.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzo/ui",
3
- "version": "8.27.43",
3
+ "version": "8.27.45",
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": {
@@ -103,7 +103,6 @@
103
103
  "require": "./dist/masthead/nav.cjs",
104
104
  "default": "./dist/masthead/nav.js"
105
105
  },
106
- "./masthead.css": "./dist/masthead.css",
107
106
  "./auth": {
108
107
  "types": "./dist/auth/index.d.ts",
109
108
  "import": "./dist/auth/index.js",
@@ -377,7 +376,7 @@
377
376
  },
378
377
  "devDependencies": {
379
378
  "@hanzo/cd": "0.1.2",
380
- "@hanzo/event": "0.3.55",
379
+ "@hanzo/event": "0.3.56",
381
380
  "@hanzo/dashboard": "0.2.0",
382
381
  "@hanzo/data": "1.2.4",
383
382
  "@hanzo/gui": "8.3.5",
@@ -413,7 +412,7 @@
413
412
  "license": "Apache-2.0 OR MIT",
414
413
  "author": "Hanzo AI <dev@hanzo.ai>",
415
414
  "scripts": {
416
- "build": "rm -rf dist dist-cjs && tsc -p tsconfig.build.json && tsc -p tsconfig.cjs.json --noCheck && mkdir -p dist/styles && node scripts/compose-theme.mjs && cp src/styles/motion.css dist/styles/motion.css && cp src/masthead/masthead.css dist/masthead.css && cp src/next.cjs dist/next.cjs && node scripts/postbuild.mjs && node scripts/gen-css.mjs",
415
+ "build": "rm -rf dist dist-cjs && tsc -p tsconfig.build.json && tsc -p tsconfig.cjs.json --noCheck && mkdir -p dist/styles && node scripts/compose-theme.mjs && cp src/styles/motion.css dist/styles/motion.css && cp src/next.cjs dist/next.cjs && node scripts/postbuild.mjs && node scripts/gen-css.mjs",
417
416
  "clean": "rm -rf dist dist-cjs types",
418
417
  "gen:primitives": "node scripts/gen-primitives.mjs",
419
418
  "tc": "tsc --noEmit",
@@ -1,168 +0,0 @@
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
- }
@@ -1,54 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,162 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"Masthead.js","sourceRoot":"","sources":["../../src/masthead/Masthead.tsx"],"names":[],"mappings":"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"}