@hanzo/ui 8.29.0 → 8.29.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,44 +1,65 @@
1
1
  "use strict";
2
2
  /**
3
3
  * hanzo.ai's nav tree: the company menu under the wordmark, the five menus in
4
- * the bar, Log in ▾, and the one filled control. `Masthead` draws it on every
5
- * Hanzo site that wears hanzo.ai's header, so the menus are the same rows
6
- * everywhere.
4
+ * the bar, Log in ▾, the one filled control, and the footer's six doors under
5
+ * the same names. `Masthead` draws the bar and the phone sheet from it, and
6
+ * `@hanzo/ui/marketing`'s `Footer` draws `FOOT` (see `footer()`), so a site that
7
+ * wears hanzo.ai's chrome shows the same rows hanzo.ai does.
7
8
  *
8
- * A path (`/about`) is a page on hanzo.ai. A site on another host passes
9
- * `origin="https://hanzo.ai"` to `Masthead`, which prefixes the path with it; an
10
- * address that names a host already is used as written.
9
+ * hanzo.ai computes its own copy from its pages (its solutions, layers and
10
+ * posts); this is that tree as published with this release. A path (`/about`)
11
+ * is a page on hanzo.ai. A site on another host passes `origin="https://hanzo.ai"`
12
+ * and every path is prefixed with it; an address that names a host is used as
13
+ * written.
11
14
  *
12
15
  * Data only, so a server component can import it: `@hanzo/ui/masthead/nav`.
13
16
  */
14
17
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ACCOUNT = exports.OPEN = exports.TRY = exports.LOGIN = exports.MENUS = exports.COMPANY = exports.at = exports.away = exports.SOLUTIONS = exports.SIGNUP = exports.SIGNIN = exports.DISCORD = exports.MODELS = exports.HIPS = exports.AGENCY = exports.DOCS = exports.GITHUB = exports.STATUS = exports.APP = exports.KEYS = exports.CONSOLE = void 0;
18
+ exports.FOOT_LINE = exports.FOOT = exports.ACCOUNT = exports.OPEN = exports.TRY = exports.LOGIN = exports.MENUS = exports.COMPANY = exports.leaves = exports.at = exports.away = exports.SOLUTIONS = exports.ONBOARDING = exports.SIGNIN = exports.MODELS = exports.HIPS = exports.UNIVERSITY = exports.AGENCY = exports.BLOG = exports.DOCS = exports.GITHUB = exports.STATUS = exports.WORKSPACE = exports.APP = exports.CODING = exports.KEYS = exports.CONSOLE = exports.HANZO = void 0;
19
+ exports.footer = footer;
16
20
  // ── The hosts the tree links out to ─────────────────────────────────────────
21
+ /** hanzo.ai itself: the origin a site on another host passes. */
22
+ exports.HANZO = 'https://hanzo.ai';
17
23
  /** The one API console: keys, usage and billing. */
18
24
  exports.CONSOLE = 'https://platform.hanzo.ai';
19
25
  /** Where a reader gets the one key everything is billed against. */
20
26
  exports.KEYS = `${exports.CONSOLE}/api-keys`;
27
+ /** Where a reader sets up Claude Code, Codex or Cursor to run through Hanzo. */
28
+ exports.CODING = `${exports.CONSOLE}/accelerate`;
21
29
  /** The page the Hanzo App is got from: the download, the CLI, the app in the browser. */
22
30
  exports.APP = 'https://hanzo.app';
31
+ /** The team workspace. */
32
+ exports.WORKSPACE = 'https://hanzo.team';
23
33
  exports.STATUS = 'https://status.hanzo.ai';
24
34
  exports.GITHUB = 'https://github.com/hanzoai';
25
35
  exports.DOCS = 'https://docs.hanzo.ai';
36
+ exports.BLOG = 'https://blog.hanzo.ai';
26
37
  exports.AGENCY = 'https://hanzo.agency';
38
+ exports.UNIVERSITY = 'https://hanzo.university';
27
39
  exports.HIPS = 'https://hips.hanzo.ai';
28
40
  exports.MODELS = 'https://huggingface.co/zenlm';
29
- /** Where the community talks. */
30
- exports.DISCORD = 'https://discord.gg/CJCyAsm9Vr';
31
- /** hanzo.ai's own sign-in and sign-up. The app signs in on hanzo.ai, never on another host. */
41
+ /** hanzo.ai's own sign-in, and the onboarding Try Hanzo opens. The app signs in on hanzo.ai, never on another host. */
32
42
  exports.SIGNIN = '/login';
33
- exports.SIGNUP = '/signup';
43
+ exports.ONBOARDING = '/onboarding';
34
44
  /** The solutions index. */
35
45
  exports.SOLUTIONS = '/solutions';
36
46
  /** A link leaves hanzo.ai when it names a host. It says so with ↗ and a new tab. */
37
47
  const away = (href) => /^https?:\/\//.test(href);
38
48
  exports.away = away;
39
- /** Where a row goes from a page on `origin`: a path is prefixed with it, a host is kept. */
40
- const at = (href, origin = '') => ((0, exports.away)(href) || href.startsWith('#') ? href : `${origin}${href}`);
49
+ /**
50
+ * Where a row goes from a page on `origin`: a path is prefixed with it, a host
51
+ * is kept. A row that names `here` — the host the page itself is on — becomes
52
+ * that site's own path, so a site's row in the tree is a page of it.
53
+ */
54
+ const at = (href, origin = '', here = '') => {
55
+ if (here && (href === here || href.startsWith(`${here}/`)))
56
+ return href.slice(here.length) || '/';
57
+ return (0, exports.away)(href) || href.startsWith('#') ? href : `${origin}${href}`;
58
+ };
41
59
  exports.at = at;
60
+ /** Whether a row leaves the page it is on: it names a host, and not `here`. */
61
+ const leaves = (href, here = '') => (0, exports.away)(href) && !(here && (href === here || href.startsWith(`${here}/`)));
62
+ exports.leaves = leaves;
42
63
  /** The company, opened from the wordmark. */
43
64
  exports.COMPANY = {
44
65
  id: 'company',
@@ -51,10 +72,8 @@ exports.COMPANY = {
51
72
  lead: true,
52
73
  links: [
53
74
  { label: 'About Us', href: '/about' },
54
- { label: 'Agency', href: exports.AGENCY },
55
75
  { label: 'Careers', href: '/careers' },
56
76
  { label: 'News', href: '/press' },
57
- { label: 'Stories', href: '/customers' },
58
77
  ],
59
78
  },
60
79
  {
@@ -77,13 +96,25 @@ exports.MENUS = [
77
96
  glyph: 'pulse',
78
97
  groups: [
79
98
  {
80
- title: 'Agentic harness',
99
+ title: 'Releases',
81
100
  lead: true,
82
101
  links: [
83
- { label: 'Performance', href: '/benchmarks' },
84
102
  { label: 'Enso 1', href: '/enso' },
85
103
  { label: 'Kai 1', href: '/kai' },
86
- { label: 'Zen 6', href: '/models/zen' },
104
+ { label: 'Zen 6', href: '/zen' },
105
+ { label: 'Kata 1', href: '/kata' },
106
+ { label: 'Gen 1', href: '/gen' },
107
+ ],
108
+ },
109
+ {
110
+ title: 'Creative AI',
111
+ links: [
112
+ { label: 'Koma', href: '/koma' },
113
+ { label: 'Iro', href: '/iro' },
114
+ { label: 'Mori', href: '/mori' },
115
+ { label: 'Oto', href: '/oto' },
116
+ { label: 'Koe', href: '/koe' },
117
+ { label: 'Uta', href: '/uta' },
87
118
  ],
88
119
  },
89
120
  {
@@ -91,6 +122,7 @@ exports.MENUS = [
91
122
  links: [
92
123
  { label: 'Overview', href: '/research' },
93
124
  { label: 'Benchmarks', href: '/benchmarks' },
125
+ { label: 'Compare', href: '/compare' },
94
126
  { label: 'Open source', href: '/open-source' },
95
127
  { label: 'Specifications', href: exports.HIPS },
96
128
  ],
@@ -114,10 +146,21 @@ exports.MENUS = [
114
146
  title: 'AI Models',
115
147
  lead: true,
116
148
  links: [
117
- { label: 'Models', href: '/models' },
118
- { label: 'Enso', href: '/enso' },
119
- { label: 'Zen', href: '/models/zen' },
120
- { label: 'Kai', href: '/kai' },
149
+ { label: 'All models', href: '/models' },
150
+ { label: 'LLMs', href: '/zen' },
151
+ { label: 'Decisions', href: '/kai' },
152
+ { label: 'Routing', href: '/enso' },
153
+ ],
154
+ },
155
+ {
156
+ title: 'Creative AI',
157
+ links: [
158
+ { label: 'Video', href: '/koma' },
159
+ { label: 'Images', href: '/iro' },
160
+ { label: '3D', href: '/mori' },
161
+ { label: 'Sound effects', href: '/oto' },
162
+ { label: 'Voice', href: '/koe' },
163
+ { label: 'Music', href: '/uta' },
121
164
  ],
122
165
  },
123
166
  {
@@ -125,21 +168,24 @@ exports.MENUS = [
125
168
  links: [
126
169
  { label: 'Overview', href: '/platform' },
127
170
  { label: 'API', href: '/api' },
171
+ { label: 'Playground', href: '/playground' },
128
172
  { label: 'Gateway', href: '/gateway' },
129
173
  { label: 'Agents', href: '/agents' },
130
174
  { label: 'Base', href: '/base' },
131
175
  { label: 'Machines', href: '/machines' },
132
- { label: 'API log in', href: exports.CONSOLE },
133
176
  ],
134
177
  },
135
178
  {
136
- title: 'DX Tools',
179
+ title: 'Apps and tools',
137
180
  links: [
138
181
  { label: 'Hanzo App', href: exports.APP },
139
- { label: 'Hanzo Team', href: '/team' },
140
182
  { label: 'Hanzo Bot', href: '/bot' },
183
+ { label: 'Hanzo CLI', href: '/cli' },
184
+ { label: 'Hanzo Dev', href: '/dev' },
185
+ { label: 'Hanzo Gen', href: '/gen' },
186
+ { label: 'Hanzo Kata', href: '/kata' },
187
+ { label: 'Hanzo Team', href: exports.WORKSPACE },
141
188
  { label: 'MCP', href: '/mcp' },
142
- { label: 'SDKs', href: '/sdks' },
143
189
  { label: 'Skills', href: '/skills' },
144
190
  ],
145
191
  },
@@ -168,6 +214,15 @@ exports.MENUS = [
168
214
  { label: 'Record', href: '/products/record' },
169
215
  ],
170
216
  },
217
+ {
218
+ title: 'More from Hanzo',
219
+ links: [
220
+ { label: 'Start from a template', href: '/templates' },
221
+ { label: 'Agents at work', href: '/agents/crew' },
222
+ { label: 'Cloud on your laptop', href: '/cloud/local' },
223
+ { label: 'Start a company', href: '/start' },
224
+ ],
225
+ },
171
226
  ],
172
227
  },
173
228
  {
@@ -182,6 +237,7 @@ exports.MENUS = [
182
237
  links: [
183
238
  { label: 'All solutions', href: exports.SOLUTIONS },
184
239
  { label: 'Enterprise', href: '/enterprise' },
240
+ { label: 'Agency', href: exports.AGENCY },
185
241
  { label: 'Customer stories', href: '/customers' },
186
242
  { label: 'Pricing', href: '/pricing' },
187
243
  { label: 'Contact sales', href: '/contact-sales' },
@@ -251,7 +307,7 @@ exports.MENUS = [
251
307
  title: 'Resources',
252
308
  links: [
253
309
  { label: 'API keys', href: exports.KEYS },
254
- { label: 'AI Studio', href: '/ai-studio' },
310
+ { label: 'Claude Code, Codex, Cursor', href: exports.CODING, hint: 'Use Hanzo with your coding tools' },
255
311
  { label: 'Integrations', href: '/integrations' },
256
312
  { label: 'Examples', href: '/gallery' },
257
313
  ],
@@ -260,7 +316,6 @@ exports.MENUS = [
260
316
  title: 'Community',
261
317
  links: [
262
318
  { label: 'GitHub', href: exports.GITHUB },
263
- { label: 'Discord', href: exports.DISCORD },
264
319
  { label: 'Status', href: exports.STATUS },
265
320
  ],
266
321
  },
@@ -273,33 +328,214 @@ exports.MENUS = [
273
328
  glyph: 'book',
274
329
  groups: [
275
330
  {
276
- title: 'Explore Learn',
277
- lead: true,
331
+ title: 'Blog',
332
+ links: [
333
+ { label: 'Your AI is Planning To Kill You', href: 'https://hanzo.blog/blog/2026-10-16-your-ai-is-planning-to-kill-you/', hint: 'KAI' },
334
+ { label: 'Kai 1: Decisions, Not Completions', href: 'https://hanzo.blog/blog/2026-10-07-introducing-kai/', hint: 'KAI' },
335
+ { label: 'What Is a Decision Model?', href: 'https://hanzo.blog/blog/2026-09-30-what-is-a-decision-model/', hint: 'DECISION MODELS' },
336
+ { label: 'All articles', href: '/blog' },
337
+ ],
338
+ },
339
+ {
340
+ title: 'Research & Guides',
278
341
  links: [
279
342
  { label: 'Overview', href: '/learn' },
343
+ { label: 'Technical Blog', href: exports.BLOG },
344
+ { label: 'Kai & Decision Models', href: '/blog/kai-decision-models' },
345
+ { label: 'Coding agents', href: `${exports.DOCS}/docs/coding` },
280
346
  { label: 'Guides', href: `${exports.DOCS}/docs/guides/` },
281
347
  { label: 'Cookbook', href: `${exports.DOCS}/docs/guides/cookbook/` },
282
- { label: 'Blog', href: '/blog' },
283
348
  ],
284
349
  },
285
350
  {
286
351
  title: 'Support',
287
352
  links: [
288
- { label: 'Where to start', href: '/playground' },
353
+ { label: 'Documentation', href: exports.DOCS },
289
354
  { label: 'Help center', href: '/support' },
290
355
  ],
291
356
  },
357
+ {
358
+ title: 'Hanzo University',
359
+ links: [
360
+ { label: 'Hanzo University', href: exports.UNIVERSITY, hint: 'Courses and certifications' },
361
+ { label: 'Agentic coding', href: '/university/agentic-coding' },
362
+ { label: 'Reinforcement learning', href: '/university/reinforcement-learning' },
363
+ { label: 'Systems engineering', href: '/university/systems-engineering' },
364
+ { label: 'AI practitioner', href: '/university/ai-practitioner' },
365
+ { label: 'AI architect', href: '/university/ai-architect' },
366
+ { label: 'Agentic marketing', href: '/university/agentic-marketing' },
367
+ ],
368
+ },
292
369
  ],
293
370
  },
294
371
  ];
295
372
  /** Log in ▾: the two products a person signs in to. The app signs in on hanzo.ai. */
296
373
  exports.LOGIN = [
297
374
  { label: 'Hanzo App', href: exports.SIGNIN, hint: 'Build, chat and ship' },
298
- { label: 'API Platform', href: exports.CONSOLE, hint: 'Keys, usage and billing' },
375
+ { label: 'API Platform', href: exports.KEYS, hint: 'Keys, usage and billing' },
299
376
  ];
300
- /** The one filled control in the bar: hanzo.ai's sign-up. */
301
- exports.TRY = { label: 'Try Hanzo', href: exports.SIGNUP };
377
+ /** The one filled control in the bar: onboarding, which drops into the personal or business plans first. */
378
+ exports.TRY = { label: 'Try Hanzo', href: exports.ONBOARDING };
302
379
  /** What the same control says to a reader who is signed in: the app, at `/`. */
303
380
  exports.OPEN = { label: 'Open Hanzo', href: '/' };
304
381
  /** The signed-in reader's own page. */
305
- exports.ACCOUNT = { label: 'Account', href: '/account' };
382
+ exports.ACCOUNT = { label: 'Settings', href: '/settings' };
383
+ /**
384
+ * The footer: the header's menus in the header's order and under the same
385
+ * names, then Company — a few of each menu's rows under its title, the title
386
+ * opening the page where the rest of that subject lives.
387
+ */
388
+ exports.FOOT = [
389
+ {
390
+ id: 'research-foot',
391
+ label: 'Research',
392
+ href: '/research',
393
+ glyph: 'pulse',
394
+ groups: [
395
+ {
396
+ title: 'Research',
397
+ lead: true,
398
+ links: [
399
+ { label: 'Enso 1', href: '/enso' },
400
+ { label: 'Kai 1', href: '/kai' },
401
+ { label: 'Zen 6', href: '/zen' },
402
+ { label: 'Creative AI', href: '/models#creative' },
403
+ { label: 'Benchmarks', href: '/benchmarks' },
404
+ { label: 'Compare', href: '/compare' },
405
+ { label: 'Open source', href: '/open-source' },
406
+ { label: 'Security', href: '/security' },
407
+ ],
408
+ },
409
+ ],
410
+ },
411
+ {
412
+ id: 'products-foot',
413
+ label: 'Products',
414
+ href: '/products',
415
+ glyph: 'blocks',
416
+ groups: [
417
+ {
418
+ title: 'Products',
419
+ lead: true,
420
+ links: [
421
+ { label: 'All models', href: '/models' },
422
+ { label: 'LLMs', href: '/zen' },
423
+ { label: 'Decisions', href: '/kai' },
424
+ { label: 'Routing', href: '/enso' },
425
+ { label: 'Video', href: '/koma' },
426
+ { label: 'Images', href: '/iro' },
427
+ { label: 'API Platform', href: '/platform' },
428
+ { label: 'Hanzo App', href: exports.APP },
429
+ { label: 'Hanzo Dev', href: '/dev' },
430
+ { label: 'Download', href: '/download' },
431
+ ],
432
+ },
433
+ ],
434
+ },
435
+ {
436
+ id: 'solutions-foot',
437
+ label: 'Solutions',
438
+ href: exports.SOLUTIONS,
439
+ glyph: 'puzzle',
440
+ groups: [
441
+ {
442
+ title: 'Solutions',
443
+ lead: true,
444
+ links: [
445
+ { label: 'All solutions', href: exports.SOLUTIONS },
446
+ { label: 'Enterprise', href: '/enterprise' },
447
+ { label: 'Agency', href: exports.AGENCY },
448
+ { label: 'Customer stories', href: '/customers' },
449
+ { label: 'Pricing', href: '/pricing' },
450
+ { label: 'Startups', href: '/startups' },
451
+ { label: 'Contact sales', href: '/contact-sales' },
452
+ ],
453
+ },
454
+ ],
455
+ },
456
+ {
457
+ id: 'developers-foot',
458
+ label: 'Developers',
459
+ href: exports.DOCS,
460
+ glyph: 'code',
461
+ groups: [
462
+ {
463
+ title: 'Developers',
464
+ lead: true,
465
+ links: [
466
+ { label: 'Documentation', href: exports.DOCS },
467
+ { label: 'API reference', href: `${exports.DOCS}/docs/openapi/` },
468
+ { label: 'Quickstart', href: `${exports.DOCS}/docs/quickstart/` },
469
+ { label: 'SDKs', href: '/sdks' },
470
+ { label: 'API keys', href: exports.KEYS },
471
+ { label: 'GitHub', href: exports.GITHUB },
472
+ { label: 'Status', href: exports.STATUS },
473
+ ],
474
+ },
475
+ ],
476
+ },
477
+ {
478
+ id: 'learn-foot',
479
+ label: 'Learn',
480
+ href: '/learn',
481
+ glyph: 'book',
482
+ groups: [
483
+ {
484
+ title: 'Learn',
485
+ lead: true,
486
+ links: [
487
+ { label: 'Blog', href: '/blog' },
488
+ { label: 'Guides', href: `${exports.DOCS}/docs/guides/` },
489
+ { label: 'Cookbook', href: `${exports.DOCS}/docs/guides/cookbook/` },
490
+ { label: 'Help center', href: '/support' },
491
+ { label: 'Hanzo University', href: exports.UNIVERSITY },
492
+ ],
493
+ },
494
+ ],
495
+ },
496
+ {
497
+ id: 'company-foot',
498
+ label: 'Company',
499
+ href: '/about',
500
+ glyph: 'user',
501
+ groups: [
502
+ {
503
+ title: 'Company',
504
+ lead: true,
505
+ links: [
506
+ { label: 'About', href: '/about' },
507
+ { label: 'Careers', href: '/careers' },
508
+ { label: 'News', href: '/press' },
509
+ { label: 'Investors', href: '/investors' },
510
+ { label: 'Brand', href: '/brand' },
511
+ { label: 'Contact', href: '/contact' },
512
+ ],
513
+ },
514
+ ],
515
+ },
516
+ ];
517
+ /** The line under the columns. hanzo.ai/legal holds the policies not named here. */
518
+ exports.FOOT_LINE = [
519
+ { label: 'Terms', href: '/terms' },
520
+ { label: 'Privacy', href: '/privacy' },
521
+ { label: 'Usage policy', href: '/aup' },
522
+ { label: 'Privacy choices', href: '#choices' },
523
+ ];
524
+ /**
525
+ * `FOOT` and `FOOT_LINE` as `Footer` draws them, from a page on `origin` (and
526
+ * `here`, as `at` reads it): each column a title that opens its subject, then
527
+ * its rows. Whether a row is marked ↗ is read from the tree, as the bar reads it.
528
+ */
529
+ function footer(origin = '', here = '', foot = exports.FOOT, line = exports.FOOT_LINE) {
530
+ const door = (l) => ({ label: l.label, href: (0, exports.at)(l.href, origin, here), out: (0, exports.leaves)(l.href, here) });
531
+ return {
532
+ columns: foot.map((m) => ({
533
+ id: m.id,
534
+ title: m.label,
535
+ href: (0, exports.at)(m.href, origin, here),
536
+ out: (0, exports.leaves)(m.href, here),
537
+ links: m.groups.flatMap((g) => g.links).map(door),
538
+ })),
539
+ legal: line.map(door),
540
+ };
541
+ }
@@ -1,33 +1,42 @@
1
1
  /**
2
2
  * hanzo.ai's nav tree: the company menu under the wordmark, the five menus in
3
- * the bar, Log in ▾, and the one filled control. `Masthead` draws it on every
4
- * Hanzo site that wears hanzo.ai's header, so the menus are the same rows
5
- * everywhere.
3
+ * the bar, Log in ▾, the one filled control, and the footer's six doors under
4
+ * the same names. `Masthead` draws the bar and the phone sheet from it, and
5
+ * `@hanzo/ui/marketing`'s `Footer` draws `FOOT` (see `footer()`), so a site that
6
+ * wears hanzo.ai's chrome shows the same rows hanzo.ai does.
6
7
  *
7
- * A path (`/about`) is a page on hanzo.ai. A site on another host passes
8
- * `origin="https://hanzo.ai"` to `Masthead`, which prefixes the path with it; an
9
- * address that names a host already is used as written.
8
+ * hanzo.ai computes its own copy from its pages (its solutions, layers and
9
+ * posts); this is that tree as published with this release. A path (`/about`)
10
+ * is a page on hanzo.ai. A site on another host passes `origin="https://hanzo.ai"`
11
+ * and every path is prefixed with it; an address that names a host is used as
12
+ * written.
10
13
  *
11
14
  * Data only, so a server component can import it: `@hanzo/ui/masthead/nav`.
12
15
  */
13
16
  import type { GlyphName } from '@hanzogui/shell';
17
+ /** hanzo.ai itself: the origin a site on another host passes. */
18
+ export declare const HANZO = "https://hanzo.ai";
14
19
  /** The one API console: keys, usage and billing. */
15
20
  export declare const CONSOLE = "https://platform.hanzo.ai";
16
21
  /** Where a reader gets the one key everything is billed against. */
17
22
  export declare const KEYS = "https://platform.hanzo.ai/api-keys";
23
+ /** Where a reader sets up Claude Code, Codex or Cursor to run through Hanzo. */
24
+ export declare const CODING = "https://platform.hanzo.ai/accelerate";
18
25
  /** The page the Hanzo App is got from: the download, the CLI, the app in the browser. */
19
26
  export declare const APP = "https://hanzo.app";
27
+ /** The team workspace. */
28
+ export declare const WORKSPACE = "https://hanzo.team";
20
29
  export declare const STATUS = "https://status.hanzo.ai";
21
30
  export declare const GITHUB = "https://github.com/hanzoai";
22
31
  export declare const DOCS = "https://docs.hanzo.ai";
32
+ export declare const BLOG = "https://blog.hanzo.ai";
23
33
  export declare const AGENCY = "https://hanzo.agency";
34
+ export declare const UNIVERSITY = "https://hanzo.university";
24
35
  export declare const HIPS = "https://hips.hanzo.ai";
25
36
  export declare const MODELS = "https://huggingface.co/zenlm";
26
- /** Where the community talks. */
27
- export declare const DISCORD = "https://discord.gg/CJCyAsm9Vr";
28
- /** hanzo.ai's own sign-in and sign-up. The app signs in on hanzo.ai, never on another host. */
37
+ /** hanzo.ai's own sign-in, and the onboarding Try Hanzo opens. The app signs in on hanzo.ai, never on another host. */
29
38
  export declare const SIGNIN = "/login";
30
- export declare const SIGNUP = "/signup";
39
+ export declare const ONBOARDING = "/onboarding";
31
40
  /** The solutions index. */
32
41
  export declare const SOLUTIONS = "/solutions";
33
42
  /** A destination. `hint` is a short second line, used only where a row needs one. */
@@ -52,18 +61,55 @@ export interface Menu {
52
61
  }
53
62
  /** A link leaves hanzo.ai when it names a host. It says so with ↗ and a new tab. */
54
63
  export declare const away: (href: string) => boolean;
55
- /** Where a row goes from a page on `origin`: a path is prefixed with it, a host is kept. */
56
- export declare const at: (href: string, origin?: string) => string;
64
+ /**
65
+ * Where a row goes from a page on `origin`: a path is prefixed with it, a host
66
+ * is kept. A row that names `here` — the host the page itself is on — becomes
67
+ * that site's own path, so a site's row in the tree is a page of it.
68
+ */
69
+ export declare const at: (href: string, origin?: string, here?: string) => string;
70
+ /** Whether a row leaves the page it is on: it names a host, and not `here`. */
71
+ export declare const leaves: (href: string, here?: string) => boolean;
57
72
  /** The company, opened from the wordmark. */
58
73
  export declare const COMPANY: Menu;
59
74
  /** The bar, left to right after the wordmark. */
60
75
  export declare const MENUS: Menu[];
61
76
  /** Log in ▾: the two products a person signs in to. The app signs in on hanzo.ai. */
62
77
  export declare const LOGIN: Link[];
63
- /** The one filled control in the bar: hanzo.ai's sign-up. */
78
+ /** The one filled control in the bar: onboarding, which drops into the personal or business plans first. */
64
79
  export declare const TRY: Link;
65
80
  /** What the same control says to a reader who is signed in: the app, at `/`. */
66
81
  export declare const OPEN: Link;
67
82
  /** The signed-in reader's own page. */
68
83
  export declare const ACCOUNT: Link;
84
+ /**
85
+ * The footer: the header's menus in the header's order and under the same
86
+ * names, then Company — a few of each menu's rows under its title, the title
87
+ * opening the page where the rest of that subject lives.
88
+ */
89
+ export declare const FOOT: Menu[];
90
+ /** The line under the columns. hanzo.ai/legal holds the policies not named here. */
91
+ export declare const FOOT_LINE: Link[];
92
+ /** A footer door, as `@hanzo/ui/marketing`'s `Footer` takes it. */
93
+ export interface Door {
94
+ label: string;
95
+ href: string;
96
+ out?: boolean;
97
+ }
98
+ /** A footer column, as `Footer` takes it. */
99
+ export interface Column {
100
+ id: string;
101
+ title: string;
102
+ href?: string;
103
+ out?: boolean;
104
+ links: Door[];
105
+ }
106
+ /**
107
+ * `FOOT` and `FOOT_LINE` as `Footer` draws them, from a page on `origin` (and
108
+ * `here`, as `at` reads it): each column a title that opens its subject, then
109
+ * its rows. Whether a row is marked ↗ is read from the tree, as the bar reads it.
110
+ */
111
+ export declare function footer(origin?: string, here?: string, foot?: readonly Menu[], line?: readonly Link[]): {
112
+ columns: Column[];
113
+ legal: Door[];
114
+ };
69
115
  //# sourceMappingURL=nav.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../src/masthead/nav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAIhD,oDAAoD;AACpD,eAAO,MAAM,OAAO,8BAA8B,CAAA;AAClD,oEAAoE;AACpE,eAAO,MAAM,IAAI,uCAAwB,CAAA;AACzC,yFAAyF;AACzF,eAAO,MAAM,GAAG,sBAAsB,CAAA;AACtC,eAAO,MAAM,MAAM,4BAA4B,CAAA;AAC/C,eAAO,MAAM,MAAM,+BAA+B,CAAA;AAClD,eAAO,MAAM,IAAI,0BAA0B,CAAA;AAC3C,eAAO,MAAM,MAAM,yBAAyB,CAAA;AAC5C,eAAO,MAAM,IAAI,0BAA0B,CAAA;AAC3C,eAAO,MAAM,MAAM,iCAAiC,CAAA;AACpD,iCAAiC;AACjC,eAAO,MAAM,OAAO,kCAAkC,CAAA;AAEtD,+FAA+F;AAC/F,eAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,eAAO,MAAM,MAAM,YAAY,CAAA;AAC/B,2BAA2B;AAC3B,eAAO,MAAM,SAAS,eAAe,CAAA;AAIrC,qFAAqF;AACrF,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,8EAA8E;AAC9E,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,+FAA+F;AAC/F,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;IAChB,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB;AAED,oFAAoF;AACpF,eAAO,MAAM,IAAI,SAAU,MAAM,KAAG,OAAoC,CAAA;AAExE,4FAA4F;AAC5F,eAAO,MAAM,EAAE,SAAU,MAAM,sBAAgB,MAA0E,CAAA;AAEzH,6CAA6C;AAC7C,eAAO,MAAM,OAAO,EAAE,IA2BrB,CAAA;AAED,iDAAiD;AACjD,eAAO,MAAM,KAAK,EAAE,IAAI,EA8NvB,CAAA;AAED,qFAAqF;AACrF,eAAO,MAAM,KAAK,EAAE,IAAI,EAGvB,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,GAAG,EAAE,IAA2C,CAAA;AAE7D,gFAAgF;AAChF,eAAO,MAAM,IAAI,EAAE,IAAyC,CAAA;AAE5D,uCAAuC;AACvC,eAAO,MAAM,OAAO,EAAE,IAA6C,CAAA"}
1
+ {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../src/masthead/nav.ts"],"names":[],"mappings":"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"}