@hanzo/ui 8.27.46 → 8.27.47

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 (61) hide show
  1. package/dist/gallery.html +105 -5
  2. package/dist/marketing/Cta.cjs +9 -3
  3. package/dist/marketing/Cta.d.ts +7 -5
  4. package/dist/marketing/Cta.d.ts.map +1 -1
  5. package/dist/marketing/Cta.js +10 -4
  6. package/dist/marketing/Cta.js.map +1 -1
  7. package/dist/marketing/controls.cjs +112 -0
  8. package/dist/marketing/controls.d.ts +42 -0
  9. package/dist/marketing/controls.d.ts.map +1 -0
  10. package/dist/marketing/controls.js +108 -0
  11. package/dist/marketing/controls.js.map +1 -0
  12. package/dist/marketing/document.cjs +7 -0
  13. package/dist/marketing/document.d.ts +22 -0
  14. package/dist/marketing/document.d.ts.map +1 -0
  15. package/dist/marketing/document.js +5 -0
  16. package/dist/marketing/document.js.map +1 -0
  17. package/dist/marketing/host.cjs +39 -0
  18. package/dist/marketing/host.d.ts +21 -0
  19. package/dist/marketing/host.d.ts.map +1 -0
  20. package/dist/marketing/host.js +35 -0
  21. package/dist/marketing/host.js.map +1 -0
  22. package/dist/marketing/index.cjs +24 -1
  23. package/dist/marketing/index.d.ts +8 -2
  24. package/dist/marketing/index.d.ts.map +1 -1
  25. package/dist/marketing/index.js +7 -1
  26. package/dist/marketing/index.js.map +1 -1
  27. package/dist/marketing/loose.cjs +2 -0
  28. package/dist/marketing/loose.d.ts +41 -0
  29. package/dist/marketing/loose.d.ts.map +1 -0
  30. package/dist/marketing/loose.js +2 -0
  31. package/dist/marketing/loose.js.map +1 -0
  32. package/dist/marketing/pager.cjs +22 -0
  33. package/dist/marketing/pager.d.ts +22 -0
  34. package/dist/marketing/pager.d.ts.map +1 -0
  35. package/dist/marketing/pager.js +20 -0
  36. package/dist/marketing/pager.js.map +1 -0
  37. package/dist/marketing/pair.cjs +21 -0
  38. package/dist/marketing/pair.d.ts +22 -0
  39. package/dist/marketing/pair.d.ts.map +1 -0
  40. package/dist/marketing/pair.js +19 -0
  41. package/dist/marketing/pair.js.map +1 -0
  42. package/dist/marketing/run.cjs +28 -0
  43. package/dist/marketing/run.d.ts +33 -0
  44. package/dist/marketing/run.d.ts.map +1 -0
  45. package/dist/marketing/run.js +26 -0
  46. package/dist/marketing/run.js.map +1 -0
  47. package/dist/marketing/surface.cjs +76 -0
  48. package/dist/marketing/surface.d.ts +59 -0
  49. package/dist/marketing/surface.d.ts.map +1 -0
  50. package/dist/marketing/surface.js +70 -0
  51. package/dist/marketing/surface.js.map +1 -0
  52. package/dist/marketing/type.cjs +29 -2
  53. package/dist/marketing/type.d.ts +43 -4
  54. package/dist/marketing/type.d.ts.map +1 -1
  55. package/dist/marketing/type.js +24 -1
  56. package/dist/marketing/type.js.map +1 -1
  57. package/dist/styles/document.css +93 -0
  58. package/dist/styles/motion.css +52 -2
  59. package/dist/styles.css +104 -4
  60. package/dist/theme.css +52 -2
  61. package/package.json +3 -2
@@ -0,0 +1,21 @@
1
+ import { type ReactElement } from 'react';
2
+ /**
3
+ * Where a marketing control's element comes from.
4
+ *
5
+ * An explicit `render` wins. Otherwise an internal `href` to a page goes
6
+ * through the app's router link — @hanzo/ui's link context, `<Link value={NextLink}>` once
7
+ * at the root — so navigation stays client-side; any other address is a plain
8
+ * anchor, and no address is the role's own element.
9
+ *
10
+ * The router link is made HERE, in the client component, and never handed in
11
+ * from a page. A server page that passes `render={<NextLink …/>}` sends an
12
+ * element through the RSC payload, which may arrive as a lazy reference
13
+ * rather than an element; gui then renders that reference as a component and
14
+ * the prerender dies on "Element type is invalid … got: object".
15
+ */
16
+ export declare const useHost: <R>(render: R | undefined, href: string | undefined, own: string) => R | string | ReactElement;
17
+ /** Whether a host is an address: an `href`, an anchor, or an element carrying
18
+ * one. A control that is a link answers the pointer; a card that is a link
19
+ * rests in the link ink the document gives every `<a>`. */
20
+ export declare const address: (host: unknown, href: string | undefined) => boolean;
21
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/marketing/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AAIxE;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,UAAU,CAAC,GAAG,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAO,MAAM,KAAG,CAAC,GAAG,MAAM,GAAG,YAKtG,CAAA;AAQD;;4DAE4D;AAC5D,eAAO,MAAM,OAAO,SAAU,OAAO,QAAQ,MAAM,GAAG,SAAS,YACwD,CAAA"}
@@ -0,0 +1,35 @@
1
+ 'use client';
2
+ import { createElement, isValidElement } from 'react';
3
+ import { useLink } from '../backends/gui/link.js';
4
+ /**
5
+ * Where a marketing control's element comes from.
6
+ *
7
+ * An explicit `render` wins. Otherwise an internal `href` to a page goes
8
+ * through the app's router link — @hanzo/ui's link context, `<Link value={NextLink}>` once
9
+ * at the root — so navigation stays client-side; any other address is a plain
10
+ * anchor, and no address is the role's own element.
11
+ *
12
+ * The router link is made HERE, in the client component, and never handed in
13
+ * from a page. A server page that passes `render={<NextLink …/>}` sends an
14
+ * element through the RSC payload, which may arrive as a lazy reference
15
+ * rather than an element; gui then renders that reference as a component and
16
+ * the prerender dies on "Element type is invalid … got: object".
17
+ */
18
+ export const useHost = (render, href, own) => {
19
+ const Link = useLink();
20
+ if (render !== undefined)
21
+ return render;
22
+ if (href === undefined)
23
+ return own;
24
+ return Link !== 'a' && route(href) ? createElement(Link, { href }) : 'a';
25
+ };
26
+ /** An address the app's router can open: a path on this site that names a
27
+ * page. A path that ends in a file extension — `/skill.md`, `/feed.xml` — is a
28
+ * file the server hands back as it is, so it stays an anchor; a version in a
29
+ * page's name (`/models/…/claude-opus-5.5`) is not an extension. */
30
+ const route = (href) => href.startsWith('/') && !href.startsWith('//') && !/\.[a-z][a-z0-9]{1,4}$/i.test(href.split(/[?#]/)[0]);
31
+ /** Whether a host is an address: an `href`, an anchor, or an element carrying
32
+ * one. A control that is a link answers the pointer; a card that is a link
33
+ * rests in the link ink the document gives every `<a>`. */
34
+ export const address = (host, href) => href !== undefined || host === 'a' || (isValidElement(host) && host.props.href !== undefined);
35
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/marketing/host.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,aAAa,EAAE,cAAc,EAAqB,MAAM,OAAO,CAAA;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,MAAqB,EAAE,IAAwB,EAAE,GAAW,EAA6B,EAAE;IACpH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACvC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,CAAA;IAClC,OAAO,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AAC1E,CAAC,CAAA;AAED;;;qEAGqE;AACrE,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEvI;;4DAE4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,IAAwB,EAAE,EAAE,CACjE,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAK,IAAI,CAAC,KAA4B,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LogoRow = exports.Quote = exports.Steps = exports.FeatureGrid = exports.Feature = exports.Section = exports.PageHeader = exports.Line = exports.TextLink = exports.Cta = exports.ClosingCta = exports.Faq = exports.Footer = exports.way = exports.termOf = exports.seats = exports.saving = exports.money = exports.merged = exports.charge = exports.audience = exports.Plans = exports.Media = exports.Hero = exports.PageLoading = void 0;
3
+ exports.LogoRow = exports.Quote = exports.Steps = exports.FeatureGrid = exports.Feature = exports.Section = exports.PageHeader = exports.Run = exports.Document = exports.Pager = exports.Pair = exports.Lattice = exports.Reveal = exports.Lift = exports.Cell = exports.Leaf = exports.More = exports.Chip = exports.Action = exports.Claim = exports.Lede = exports.Eyebrow = exports.Title = exports.Display = exports.Line = exports.TextLink = exports.Cta = exports.ClosingCta = exports.Faq = exports.Footer = exports.way = exports.termOf = exports.seats = exports.saving = exports.money = exports.merged = exports.charge = exports.audience = exports.Plans = exports.Media = exports.Hero = exports.PageLoading = void 0;
4
4
  /**
5
5
  * The marketing surface every Hanzo, Lux and Zoo site shares: the first screen,
6
6
  * the plans, the questions, the closing call and the blocks a feature page is
@@ -34,6 +34,29 @@ Object.defineProperty(exports, "Cta", { enumerable: true, get: function () { ret
34
34
  Object.defineProperty(exports, "TextLink", { enumerable: true, get: function () { return Cta_1.TextLink; } });
35
35
  var type_1 = require("./type.cjs");
36
36
  Object.defineProperty(exports, "Line", { enumerable: true, get: function () { return type_1.Line; } });
37
+ Object.defineProperty(exports, "Display", { enumerable: true, get: function () { return type_1.Display; } });
38
+ Object.defineProperty(exports, "Title", { enumerable: true, get: function () { return type_1.Title; } });
39
+ Object.defineProperty(exports, "Eyebrow", { enumerable: true, get: function () { return type_1.Eyebrow; } });
40
+ Object.defineProperty(exports, "Lede", { enumerable: true, get: function () { return type_1.Lede; } });
41
+ Object.defineProperty(exports, "Claim", { enumerable: true, get: function () { return type_1.Claim; } });
42
+ var controls_1 = require("./controls.cjs");
43
+ Object.defineProperty(exports, "Action", { enumerable: true, get: function () { return controls_1.Action; } });
44
+ Object.defineProperty(exports, "Chip", { enumerable: true, get: function () { return controls_1.Chip; } });
45
+ Object.defineProperty(exports, "More", { enumerable: true, get: function () { return controls_1.More; } });
46
+ var surface_1 = require("./surface.cjs");
47
+ Object.defineProperty(exports, "Leaf", { enumerable: true, get: function () { return surface_1.Leaf; } });
48
+ Object.defineProperty(exports, "Cell", { enumerable: true, get: function () { return surface_1.Cell; } });
49
+ Object.defineProperty(exports, "Lift", { enumerable: true, get: function () { return surface_1.Lift; } });
50
+ Object.defineProperty(exports, "Reveal", { enumerable: true, get: function () { return surface_1.Reveal; } });
51
+ Object.defineProperty(exports, "Lattice", { enumerable: true, get: function () { return surface_1.Lattice; } });
52
+ var pair_1 = require("./pair.cjs");
53
+ Object.defineProperty(exports, "Pair", { enumerable: true, get: function () { return pair_1.Pair; } });
54
+ var pager_1 = require("./pager.cjs");
55
+ Object.defineProperty(exports, "Pager", { enumerable: true, get: function () { return pager_1.Pager; } });
56
+ var document_1 = require("./document.cjs");
57
+ Object.defineProperty(exports, "Document", { enumerable: true, get: function () { return document_1.Document; } });
58
+ var run_1 = require("./run.cjs");
59
+ Object.defineProperty(exports, "Run", { enumerable: true, get: function () { return run_1.Run; } });
37
60
  var blocks_1 = require("./blocks.cjs");
38
61
  Object.defineProperty(exports, "PageHeader", { enumerable: true, get: function () { return blocks_1.PageHeader; } });
39
62
  Object.defineProperty(exports, "Section", { enumerable: true, get: function () { return blocks_1.Section; } });
@@ -11,7 +11,13 @@ export { audience, charge, merged, money, saving, seats, termOf, way, type Audie
11
11
  export { Footer, type FooterColumn, type FooterLink, type FooterProps } from './Footer.js';
12
12
  export { Faq, type FaqItem, type FaqProps } from './Faq.js';
13
13
  export { ClosingCta, type ClosingCtaProps } from './ClosingCta.js';
14
- export { Cta, TextLink, type CtaProps } from './Cta.js';
15
- export { Line, type LineProps, type LineSize, type LineTone } from './type.js';
14
+ export { Cta, TextLink, type CtaProps, type TextLinkProps } from './Cta.js';
15
+ export { Line, Display, Title, Eyebrow, Lede, Claim, type LineProps, type LineSize, type LineTone, type RoleProps } from './type.js';
16
+ export { Action, Chip, More, type ControlProps } from './controls.js';
17
+ export { Leaf, Cell, Lift, Reveal, Lattice, type SurfaceProps, type LatticeProps } from './surface.js';
18
+ export { Pair, type PairProps } from './pair.js';
19
+ export { Pager, type PagerProps } from './pager.js';
20
+ export { Document, type DocumentProps } from './document.js';
21
+ export { Run, type RunProps } from './run.js';
16
22
  export { PageHeader, Section, Feature, FeatureGrid, Steps, Quote, LogoRow, type Step, type Logo, type PageHeaderProps, type SectionProps, type FeatureProps, type QuoteProps, } from './blocks.js';
17
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/marketing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,QAAQ,CAAA;AAC1I,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACvF,OAAO,EAAE,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,EACL,UAAU,EACV,OAAO,EACP,OAAO,EACP,WAAW,EACX,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,IAAI,EACT,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/marketing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,QAAQ,CAAA;AAC1I,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACvF,OAAO,EAAE,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AACxE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AACjI,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AACnG,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EACL,UAAU,EACV,OAAO,EACP,OAAO,EACP,WAAW,EACX,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,IAAI,EACT,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,UAAU,CAAA"}
@@ -12,6 +12,12 @@ export { Footer } from './Footer.js';
12
12
  export { Faq } from './Faq.js';
13
13
  export { ClosingCta } from './ClosingCta.js';
14
14
  export { Cta, TextLink } from './Cta.js';
15
- export { Line } from './type.js';
15
+ export { Line, Display, Title, Eyebrow, Lede, Claim } from './type.js';
16
+ export { Action, Chip, More } from './controls.js';
17
+ export { Leaf, Cell, Lift, Reveal, Lattice } from './surface.js';
18
+ export { Pair } from './pair.js';
19
+ export { Pager } from './pager.js';
20
+ export { Document } from './document.js';
21
+ export { Run } from './run.js';
16
22
  export { PageHeader, Section, Feature, FeatureGrid, Steps, Quote, LogoRow, } from './blocks.js';
17
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/marketing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAyB,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,IAAI,EAAkB,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAmB,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAoC,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAwD,MAAM,QAAQ,CAAA;AAC1I,OAAO,EAAE,MAAM,EAAwD,MAAM,UAAU,CAAA;AACvF,OAAO,EAAE,GAAG,EAA+B,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAiB,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,IAAI,EAAgD,MAAM,QAAQ,CAAA;AAC3E,OAAO,EACL,UAAU,EACV,OAAO,EACP,OAAO,EACP,WAAW,EACX,KAAK,EACL,KAAK,EACL,OAAO,GAOR,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/marketing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAyB,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,IAAI,EAAkB,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAmB,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAoC,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAwD,MAAM,QAAQ,CAAA;AAC1I,OAAO,EAAE,MAAM,EAAwD,MAAM,UAAU,CAAA;AACvF,OAAO,EAAE,GAAG,EAA+B,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAqC,MAAM,OAAO,CAAA;AACxE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAgE,MAAM,QAAQ,CAAA;AACjI,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAqB,MAAM,YAAY,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAwC,MAAM,WAAW,CAAA;AACnG,OAAO,EAAE,IAAI,EAAkB,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAmB,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAsB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,GAAG,EAAiB,MAAM,OAAO,CAAA;AAC1C,OAAO,EACL,UAAU,EACV,OAAO,EACP,OAAO,EACP,WAAW,EACX,KAAK,EACL,KAAK,EACL,OAAO,GAOR,MAAM,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,41 @@
1
+ import type { MouseEventHandler, ReactNode, Ref } from 'react';
2
+ /**
3
+ * The props a marketing component takes from a page.
4
+ *
5
+ * gui types a style value against its token table, and a page's own values are
6
+ * CSS: `var(--text-xs)`, `color-mix(in srgb, var(--primary) 15%, transparent)`,
7
+ * a unitless leading. gui emits each of them exactly as written, so refusing
8
+ * them at the type only pushed callers back to `style={{…}}`, which is the
9
+ * thing these components exist to retire. A value prop also takes a string or a
10
+ * number, and a state or a breakpoint (`hoverStyle`, `$sm`, `$theme-light`)
11
+ * takes the same values inside it.
12
+ *
13
+ * `Host` is what the element underneath answers to on the web: a button's
14
+ * `type`, a link's `download`, a tooltip's `title`. gui forwards every prop it
15
+ * does not style to the DOM node, so these already arrive; they are declared
16
+ * so a call site does not have to re-declare the component to pass one.
17
+ */
18
+ export type Loose<P> = {
19
+ [K in keyof P]?: K extends 'children' | 'render' ? P[K] : K extends `$${string}` | 'hoverStyle' | 'pressStyle' | 'focusStyle' | 'focusVisibleStyle' | 'focusWithinStyle' | 'disabledStyle' | 'enterStyle' | 'exitStyle' ? {
20
+ [key: string]: unknown;
21
+ } : NonNullable<P[K]> extends object ? P[K] : P[K] | (string & {}) | number;
22
+ };
23
+ export type Host = {
24
+ children?: ReactNode;
25
+ href?: string;
26
+ target?: string;
27
+ rel?: string;
28
+ download?: boolean | string;
29
+ type?: 'button' | 'submit' | 'reset';
30
+ title?: string;
31
+ name?: string;
32
+ value?: string;
33
+ disabled?: boolean;
34
+ tabIndex?: number;
35
+ onClick?: MouseEventHandler<HTMLElement>;
36
+ /** The node is whatever `render` names, so the ref takes any element. */
37
+ ref?: Ref<any>;
38
+ textWrap?: 'wrap' | 'nowrap' | 'balance' | 'pretty' | 'stable';
39
+ WebkitBackdropFilter?: string;
40
+ };
41
+ //# sourceMappingURL=loose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loose.d.ts","sourceRoot":"","sources":["../../src/marketing/loose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;KACpB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,UAAU,GAAG,QAAQ,GAC5C,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,IAAI,MAAM,EAAE,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,eAAe,GAAG,YAAY,GAAG,WAAW,GAC3J;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAC1B,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAC9B,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM;CACtC,CAAA;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC3B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;IACxC,yEAAyE;IAEzE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAC9D,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loose.js","sourceRoot":"","sources":["../../src/marketing/loose.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Pager = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Pager — which of a run of slides is showing, and the way to any other.
8
+ *
9
+ * Each page is a pill: six pixels high, a dot at rest and a 24px bar for the
10
+ * one showing, drawn in the ink of the ground it sits on so it reads on both
11
+ * themes. The mark is drawn INSIDE a target rather than being one: a 6px mark
12
+ * sized as the control would be a target nobody can hit, so each button is 24px
13
+ * square around it (44px tall under a coarse pointer) and the row stays the
14
+ * width of its marks plus their floors — ten pages fit a 360px phone.
15
+ */
16
+ const gui_1 = require("@hanzo/gui");
17
+ const slot_1 = require("../backends/gui/slot.cjs");
18
+ const Pager = ({ count, index, onSelect, label = (i) => `Go to slide ${i + 1}`, ...p }) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('pager'), items: "center", ...p, children: Array.from({ length: count }, (_, i) => {
19
+ const on = i === index;
20
+ return ((0, jsx_runtime_1.jsx)(gui_1.View, { render: (0, jsx_runtime_1.jsx)("button", { type: "button" }), "aria-label": label(i), "aria-current": on ? 'true' : undefined, onPress: () => onSelect(i), group: true, containerType: "normal", display: "flex", items: "center", justify: "center", minW: 24, height: 24, px: 9, py: 0, borderWidth: 0, bg: "transparent", cursor: "pointer", $touchable: { height: 44 }, children: (0, jsx_runtime_1.jsx)(gui_1.View, { width: on ? 24 : 6, height: 6, rounded: 9999, bg: on ? 'var(--foreground)' : 'var(--muted-foreground)', opacity: on ? 1 : 0.35, ...(on ? null : { '$group-hover': { opacity: 0.7 } }) }) }, i));
21
+ }) }));
22
+ exports.Pager = Pager;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Pager — which of a run of slides is showing, and the way to any other.
3
+ *
4
+ * Each page is a pill: six pixels high, a dot at rest and a 24px bar for the
5
+ * one showing, drawn in the ink of the ground it sits on so it reads on both
6
+ * themes. The mark is drawn INSIDE a target rather than being one: a 6px mark
7
+ * sized as the control would be a target nobody can hit, so each button is 24px
8
+ * square around it (44px tall under a coarse pointer) and the row stays the
9
+ * width of its marks plus their floors — ten pages fit a 360px phone.
10
+ */
11
+ import { type XStackProps } from '@hanzo/gui';
12
+ export type PagerProps = Omit<XStackProps, 'children'> & {
13
+ count: number;
14
+ /** The page showing. */
15
+ index: number;
16
+ onSelect: (index: number) => void;
17
+ /** What a page is called, for its button's label. */
18
+ label?: (index: number) => string;
19
+ };
20
+ declare const Pager: ({ count, index, onSelect, label, ...p }: PagerProps) => import("react").JSX.Element;
21
+ export { Pager };
22
+ //# sourceMappingURL=pager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pager.d.ts","sourceRoot":"","sources":["../../src/marketing/pager.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAI3D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG;IACvD,KAAK,EAAE,MAAM,CAAA;IACb,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,qDAAqD;IACrD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CAClC,CAAA;AAED,QAAA,MAAM,KAAK,4CAA6E,UAAU,gCAqCjG,CAAA;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * Pager — which of a run of slides is showing, and the way to any other.
5
+ *
6
+ * Each page is a pill: six pixels high, a dot at rest and a 24px bar for the
7
+ * one showing, drawn in the ink of the ground it sits on so it reads on both
8
+ * themes. The mark is drawn INSIDE a target rather than being one: a 6px mark
9
+ * sized as the control would be a target nobody can hit, so each button is 24px
10
+ * square around it (44px tall under a coarse pointer) and the row stays the
11
+ * width of its marks plus their floors — ten pages fit a 360px phone.
12
+ */
13
+ import { View, XStack } from '@hanzo/gui';
14
+ import { slot } from '../backends/gui/slot.js';
15
+ const Pager = ({ count, index, onSelect, label = (i) => `Go to slide ${i + 1}`, ...p }) => (_jsx(XStack, { ...slot('pager'), items: "center", ...p, children: Array.from({ length: count }, (_, i) => {
16
+ const on = i === index;
17
+ return (_jsx(View, { render: _jsx("button", { type: "button" }), "aria-label": label(i), "aria-current": on ? 'true' : undefined, onPress: () => onSelect(i), group: true, containerType: "normal", display: "flex", items: "center", justify: "center", minW: 24, height: 24, px: 9, py: 0, borderWidth: 0, bg: "transparent", cursor: "pointer", $touchable: { height: 44 }, children: _jsx(View, { width: on ? 24 : 6, height: 6, rounded: 9999, bg: on ? 'var(--foreground)' : 'var(--muted-foreground)', opacity: on ? 1 : 0.35, ...(on ? null : { '$group-hover': { opacity: 0.7 } }) }) }, i));
18
+ }) }));
19
+ export { Pager };
20
+ //# sourceMappingURL=pager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pager.js","sourceRoot":"","sources":["../../src/marketing/pager.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;GASG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAoB,MAAM,YAAY,CAAA;AAE3D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAW3C,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAc,EAAE,EAAE,CAAC,CACrG,KAAC,MAAM,OAAK,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAC,QAAQ,KAAM,CAAY,YACxD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,CAAA;QACtB,OAAO,CACL,KAAC,IAAI,IAEH,MAAM,EAAE,iBAAQ,IAAI,EAAC,QAAQ,GAAG,gBACpB,KAAK,CAAC,CAAC,CAAC,kBACN,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACrC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAC1B,KAAK,QACL,aAAa,EAAC,QAAQ,EACtB,OAAO,EAAC,MAAM,EACd,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,QAAQ,EAChB,IAAI,EAAE,EAAE,EACR,MAAM,EAAE,EAAE,EACV,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,CAAC,EACL,WAAW,EAAE,CAAC,EACd,EAAE,EAAC,aAAa,EAChB,MAAM,EAAC,SAAS,EAChB,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAE1B,KAAC,IAAI,IACH,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAClB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,IAAI,EACb,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,yBAAyB,EACxD,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAClB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,GACtD,IA1BG,CAAC,CA2BD,CACR,CAAA;IACH,CAAC,CAAC,GACK,CACV,CAAA;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,21 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Pair = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Pair — the two controls that close a section: stacked on a phone, side by
8
+ * side from 640.
9
+ *
10
+ * A grid, not a row of flex items. A row of two is a track list, and
11
+ * `gridAutoFlow="column"` says the direction once; the stacked case needs
12
+ * nothing said at all, because a grid is already one column. Each control keeps
13
+ * its own width and the pair centres as a whole.
14
+ *
15
+ * `render` accepts an element, so an entrance can be the pair rather than wrap
16
+ * it: `render={<motion.div {...reveal} />}`.
17
+ */
18
+ const gui_1 = require("@hanzo/gui");
19
+ const slot_1 = require("../backends/gui/slot.cjs");
20
+ const Pair = ({ render, ...p }) => ((0, jsx_runtime_1.jsx)(gui_1.View, { ...(0, slot_1.slot)('pair'), ...(render === undefined ? null : { render }), display: "grid", gap: "$4", justifyItems: "center", justify: "center", items: "center", $sm: { gridAutoFlow: 'column' }, ...p }));
21
+ exports.Pair = Pair;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Pair — the two controls that close a section: stacked on a phone, side by
3
+ * side from 640.
4
+ *
5
+ * A grid, not a row of flex items. A row of two is a track list, and
6
+ * `gridAutoFlow="column"` says the direction once; the stacked case needs
7
+ * nothing said at all, because a grid is already one column. Each control keeps
8
+ * its own width and the pair centres as a whole.
9
+ *
10
+ * `render` accepts an element, so an entrance can be the pair rather than wrap
11
+ * it: `render={<motion.div {...reveal} />}`.
12
+ */
13
+ import { type ViewProps } from '@hanzo/gui';
14
+ import type { ReactNode } from 'react';
15
+ import type { Loose } from './loose.js';
16
+ export type PairProps = Loose<Omit<ViewProps, 'render' | 'children'>> & {
17
+ render?: ViewProps['render'];
18
+ children?: ReactNode;
19
+ };
20
+ declare const Pair: ({ render, ...p }: PairProps) => import("react").JSX.Element;
21
+ export { Pair };
22
+ //# sourceMappingURL=pair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/marketing/pair.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC,GAAG;IACtE,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,QAAA,MAAM,IAAI,qBAAsB,SAAS,gCAYxC,CAAA;AAED,OAAO,EAAE,IAAI,EAAE,CAAA"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * Pair — the two controls that close a section: stacked on a phone, side by
5
+ * side from 640.
6
+ *
7
+ * A grid, not a row of flex items. A row of two is a track list, and
8
+ * `gridAutoFlow="column"` says the direction once; the stacked case needs
9
+ * nothing said at all, because a grid is already one column. Each control keeps
10
+ * its own width and the pair centres as a whole.
11
+ *
12
+ * `render` accepts an element, so an entrance can be the pair rather than wrap
13
+ * it: `render={<motion.div {...reveal} />}`.
14
+ */
15
+ import { View } from '@hanzo/gui';
16
+ import { slot } from '../backends/gui/slot.js';
17
+ const Pair = ({ render, ...p }) => (_jsx(View, { ...slot('pair'), ...(render === undefined ? null : { render }), display: "grid", gap: "$4", justifyItems: "center", justify: "center", items: "center", $sm: { gridAutoFlow: 'column' }, ...p }));
18
+ export { Pair };
19
+ //# sourceMappingURL=pair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/marketing/pair.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,IAAI,EAAkB,MAAM,YAAY,CAAA;AAGjD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAQ3C,MAAM,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAa,EAAE,EAAE,CAAC,CAC5C,KAAC,IAAI,OACC,IAAI,CAAC,MAAM,CAAC,KACZ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAC9C,OAAO,EAAC,MAAM,EACd,GAAG,EAAC,IAAI,EACR,YAAY,EAAC,QAAQ,EACrB,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,KAC1B,CAAY,GACjB,CACH,CAAA;AAED,OAAO,EAAE,IAAI,EAAE,CAAA"}
@@ -0,0 +1,28 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Run = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Run — a light crosses a set of things that are all true at once.
8
+ *
9
+ * Prose states invariants one at a time, and a reader has finished the first
10
+ * before the fourth exists; a run lays the set out and sweeps it, so several
11
+ * are lit together and none is ever "next". Each DIRECT child says where it
12
+ * stands with `data-beat={n}`, and is lit `n` steps after the first:
13
+ *
14
+ * <Run step={0.31}>{steps.map((s, i) => <Chip key={s} data-beat={i}>{s}</Chip>)}</Run>
15
+ *
16
+ * `step` is the delay per beat, short against the 5.4s cycle so several are lit
17
+ * at once; an ORDERED set takes a step near cycle/n, and the order is the
18
+ * content's to say, so the caller says it. `rest` is the ink the sweep returns
19
+ * to, because the animation owns `color` for the whole cycle.
20
+ *
21
+ * The keyframe is `@hanzo/ui/styles/motion.css`, keyed on `data-motion`, and
22
+ * reduced motion stills it. The two knobs ride this element's own custom
23
+ * properties, which no gui prop names. Colour and edge only, so it composes
24
+ * with an entrance that owns transform and opacity.
25
+ */
26
+ const gui_1 = require("@hanzo/gui");
27
+ const Run = ({ step = 0.22, rest, ...p }) => ((0, jsx_runtime_1.jsx)(gui_1.View, { "data-motion": "run", ...p, style: { '--run-step': `${step}s`, ...(rest ? { '--run-rest': rest } : null) } }));
28
+ exports.Run = Run;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Run — a light crosses a set of things that are all true at once.
3
+ *
4
+ * Prose states invariants one at a time, and a reader has finished the first
5
+ * before the fourth exists; a run lays the set out and sweeps it, so several
6
+ * are lit together and none is ever "next". Each DIRECT child says where it
7
+ * stands with `data-beat={n}`, and is lit `n` steps after the first:
8
+ *
9
+ * <Run step={0.31}>{steps.map((s, i) => <Chip key={s} data-beat={i}>{s}</Chip>)}</Run>
10
+ *
11
+ * `step` is the delay per beat, short against the 5.4s cycle so several are lit
12
+ * at once; an ORDERED set takes a step near cycle/n, and the order is the
13
+ * content's to say, so the caller says it. `rest` is the ink the sweep returns
14
+ * to, because the animation owns `color` for the whole cycle.
15
+ *
16
+ * The keyframe is `@hanzo/ui/styles/motion.css`, keyed on `data-motion`, and
17
+ * reduced motion stills it. The two knobs ride this element's own custom
18
+ * properties, which no gui prop names. Colour and edge only, so it composes
19
+ * with an entrance that owns transform and opacity.
20
+ */
21
+ import { type ViewProps } from '@hanzo/gui';
22
+ import type { ReactNode } from 'react';
23
+ import type { Loose } from './loose.js';
24
+ export type RunProps = Loose<Omit<ViewProps, 'children'>> & {
25
+ children?: ReactNode;
26
+ /** Seconds between one beat and the next. */
27
+ step?: number;
28
+ /** The ink a lit child returns to. */
29
+ rest?: string;
30
+ };
31
+ declare const Run: ({ step, rest, ...p }: RunProps) => import("react").JSX.Element;
32
+ export { Run };
33
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/marketing/run.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,GAAG;IAC1D,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,QAAA,MAAM,GAAG,yBAAiC,QAAQ,gCAMjD,CAAA;AAED,OAAO,EAAE,GAAG,EAAE,CAAA"}
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * Run — a light crosses a set of things that are all true at once.
5
+ *
6
+ * Prose states invariants one at a time, and a reader has finished the first
7
+ * before the fourth exists; a run lays the set out and sweeps it, so several
8
+ * are lit together and none is ever "next". Each DIRECT child says where it
9
+ * stands with `data-beat={n}`, and is lit `n` steps after the first:
10
+ *
11
+ * <Run step={0.31}>{steps.map((s, i) => <Chip key={s} data-beat={i}>{s}</Chip>)}</Run>
12
+ *
13
+ * `step` is the delay per beat, short against the 5.4s cycle so several are lit
14
+ * at once; an ORDERED set takes a step near cycle/n, and the order is the
15
+ * content's to say, so the caller says it. `rest` is the ink the sweep returns
16
+ * to, because the animation owns `color` for the whole cycle.
17
+ *
18
+ * The keyframe is `@hanzo/ui/styles/motion.css`, keyed on `data-motion`, and
19
+ * reduced motion stills it. The two knobs ride this element's own custom
20
+ * properties, which no gui prop names. Colour and edge only, so it composes
21
+ * with an entrance that owns transform and opacity.
22
+ */
23
+ import { View } from '@hanzo/gui';
24
+ const Run = ({ step = 0.22, rest, ...p }) => (_jsx(View, { "data-motion": "run", ...p, style: { '--run-step': `${step}s`, ...(rest ? { '--run-rest': rest } : null) } }));
25
+ export { Run };
26
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/marketing/run.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,IAAI,EAAkB,MAAM,YAAY,CAAA;AAajD,MAAM,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAY,EAAE,EAAE,CAAC,CACrD,KAAC,IAAI,mBACS,KAAK,KACZ,CAAY,EACjB,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAmB,GAC/F,CACH,CAAA;AAED,OAAO,EAAE,GAAG,EAAE,CAAA"}
@@ -0,0 +1,76 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Lattice = exports.Reveal = exports.Lift = exports.Cell = exports.Leaf = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Surfaces that answer approach, and the marks inside them that answer with
8
+ * them.
9
+ *
10
+ * Leaf a card: a corner, an edge that brightens on hover, no ground
11
+ * Cell a tile of a ruled grid: no corner and no edge, a ground that brightens
12
+ * Lift ink that brightens when its card is hovered; `step` also moves it
13
+ * 2px toward where it goes
14
+ * Reveal a line offered only on approach — hover, or a keyboard's focus
15
+ * Lattice a ruled backdrop: a decorative grid behind a hero
16
+ *
17
+ * A Leaf or a Cell is a gui `group`, and the marks read it with `$group-hover`,
18
+ * so the card decides when and the mark decides how. It is a group and NOT a
19
+ * size container: gui's default `container-type: inline-size` sizes the box as
20
+ * if it were empty, so a card a row sizes by its content — a filter chip —
21
+ * collapsed to its own padding. No mark asks the group its size. An ink written on a mark
22
+ * is a prop beside the hover, so nothing has to out-rank anything: the lift a
23
+ * stylesheet used to apply lost to every atomic `color` a mark carried, and
24
+ * those cards never lifted.
25
+ *
26
+ * Every default is a prop a caller replaces: `p` for the padding, `borderColor`
27
+ * for the resting edge, `hoverStyle` for the approach, `bg` for a ground.
28
+ */
29
+ const gui_1 = require("@hanzo/gui");
30
+ const slot_1 = require("../backends/gui/slot.cjs");
31
+ const host_1 = require("./host.cjs");
32
+ /** The element's own display — what @hanzo/design's base or the browser gives
33
+ * it — under gui Text's `inline`. */
34
+ const OWN = 'revert-layer';
35
+ /** The element's own ink, the same way: @hanzo/design's base gives every `<a>`
36
+ * and every heading `--text-primary`, and anything else takes its parent's. */
37
+ const INK = 'revert-layer';
38
+ /** The lifted ink: white on the dark ground, ink on the light one. */
39
+ const LIFT = 'var(--text-primary)';
40
+ /** A card. The defaults change nothing but the corner and the hover edge: no
41
+ * ground, a transparent resting edge, so a card that names only a ground gets
42
+ * a ground and no lift. */
43
+ const Leaf = ({ render, ...p }) => {
44
+ const host = (0, host_1.useHost)(render, p.href, 'div');
45
+ return ((0, jsx_runtime_1.jsx)(gui_1.Text, { ...(0, slot_1.slot)('leaf'), group: true, containerType: "normal", render: host, display: "block", height: "100%", whiteSpace: "inherit", textDecorationLine: "none", color: INK, p: "$4", borderWidth: 1, borderStyle: "solid", borderColor: "transparent", rounded: "var(--radius-xl)", hoverStyle: { borderColor: 'var(--white-15)' }, ...p }));
46
+ };
47
+ exports.Leaf = Leaf;
48
+ /** A tile of a ruled grid, which rules its own lines with a 1px gap over a
49
+ * neutral ground — so a Cell adds no edge and no corner, which would break the
50
+ * flush rule the grid is made of, and no box: the element keeps the display the
51
+ * document gives it, so a row stays a row and an icon button stays centred. */
52
+ const Cell = ({ render, ...p }) => {
53
+ const host = (0, host_1.useHost)(render, p.href, 'div');
54
+ return ((0, jsx_runtime_1.jsx)(gui_1.Text, { ...(0, slot_1.slot)('cell'), group: true, containerType: "normal", render: host, display: OWN, whiteSpace: "inherit", textDecorationLine: "none", bg: "var(--pure-black)", color: "inherit", hoverStyle: { bg: 'var(--neutral-950)' }, ...p }));
55
+ };
56
+ exports.Cell = Cell;
57
+ /** Ink that brightens with its card. Inline, like the word or icon it wraps;
58
+ * a mark that steps is a box (`display="inline-flex"`), because an inline box
59
+ * does not move. */
60
+ const Lift = ({ render = 'span', step = false, ...p }) => ((0, jsx_runtime_1.jsx)(gui_1.Text, { ...(0, slot_1.slot)('lift'), render: render, display: OWN, whiteSpace: "inherit", color: INK, transition: (step
61
+ ? 'color var(--duration-fast) var(--ease-in-out), transform var(--duration-fast) var(--ease-in-out)'
62
+ : 'color var(--duration-fast) var(--ease-in-out)'), "$group-hover": step ? { color: LIFT, x: 2 } : { color: LIFT }, ...p }));
63
+ exports.Lift = Lift;
64
+ /** A line only offered on approach: hidden at rest, shown while its group is
65
+ * hovered or holds a keyboard's focus — a reveal a keyboard cannot reach is
66
+ * one half of the people never see. */
67
+ const Reveal = ({ render = 'span', ...p }) => ((0, jsx_runtime_1.jsx)(gui_1.Text, { ...(0, slot_1.slot)('reveal'), render: render, display: OWN, whiteSpace: "inherit", color: INK, opacity: 0, transition: 'opacity var(--duration-fast) var(--ease-in-out)', "$group-hover": { opacity: 1 }, "$group-focusVisible": { opacity: 1 }, "$group-focusWithin": { opacity: 1 }, ...p }));
68
+ exports.Reveal = Reveal;
69
+ /** A ruled backdrop, in the foreground ink so it reads on either ground. Two
70
+ * knobs, the pitch and the strength; everything else — where it sits, what
71
+ * masks it — is the caller's props. */
72
+ const Lattice = ({ size = 30, opacity = 0.05, ...p }) => {
73
+ const ink = `color-mix(in srgb, var(--foreground) ${opacity * 100}%, transparent)`;
74
+ return ((0, jsx_runtime_1.jsx)(gui_1.View, { ...(0, slot_1.slot)('lattice'), "aria-hidden": true, backgroundImage: `linear-gradient(to right, ${ink} 1px, transparent 1px), linear-gradient(to bottom, ${ink} 1px, transparent 1px)`, backgroundSize: `${size}px ${size}px`, ...p }));
75
+ };
76
+ exports.Lattice = Lattice;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Surfaces that answer approach, and the marks inside them that answer with
3
+ * them.
4
+ *
5
+ * Leaf a card: a corner, an edge that brightens on hover, no ground
6
+ * Cell a tile of a ruled grid: no corner and no edge, a ground that brightens
7
+ * Lift ink that brightens when its card is hovered; `step` also moves it
8
+ * 2px toward where it goes
9
+ * Reveal a line offered only on approach — hover, or a keyboard's focus
10
+ * Lattice a ruled backdrop: a decorative grid behind a hero
11
+ *
12
+ * A Leaf or a Cell is a gui `group`, and the marks read it with `$group-hover`,
13
+ * so the card decides when and the mark decides how. It is a group and NOT a
14
+ * size container: gui's default `container-type: inline-size` sizes the box as
15
+ * if it were empty, so a card a row sizes by its content — a filter chip —
16
+ * collapsed to its own padding. No mark asks the group its size. An ink written on a mark
17
+ * is a prop beside the hover, so nothing has to out-rank anything: the lift a
18
+ * stylesheet used to apply lost to every atomic `color` a mark carried, and
19
+ * those cards never lifted.
20
+ *
21
+ * Every default is a prop a caller replaces: `p` for the padding, `borderColor`
22
+ * for the resting edge, `hoverStyle` for the approach, `bg` for a ground.
23
+ */
24
+ import { type TextProps, type ViewProps } from '@hanzo/gui';
25
+ import type { Host, Loose } from './loose.js';
26
+ export type SurfaceProps = Loose<Omit<TextProps, 'render' | 'children'>> & Host & {
27
+ render?: TextProps['render'];
28
+ };
29
+ /** A card. The defaults change nothing but the corner and the hover edge: no
30
+ * ground, a transparent resting edge, so a card that names only a ground gets
31
+ * a ground and no lift. */
32
+ declare const Leaf: ({ render, ...p }: SurfaceProps) => import("react").JSX.Element;
33
+ /** A tile of a ruled grid, which rules its own lines with a 1px gap over a
34
+ * neutral ground — so a Cell adds no edge and no corner, which would break the
35
+ * flush rule the grid is made of, and no box: the element keeps the display the
36
+ * document gives it, so a row stays a row and an icon button stays centred. */
37
+ declare const Cell: ({ render, ...p }: SurfaceProps) => import("react").JSX.Element;
38
+ /** Ink that brightens with its card. Inline, like the word or icon it wraps;
39
+ * a mark that steps is a box (`display="inline-flex"`), because an inline box
40
+ * does not move. */
41
+ declare const Lift: ({ render, step, ...p }: SurfaceProps & {
42
+ step?: boolean;
43
+ }) => import("react").JSX.Element;
44
+ /** A line only offered on approach: hidden at rest, shown while its group is
45
+ * hovered or holds a keyboard's focus — a reveal a keyboard cannot reach is
46
+ * one half of the people never see. */
47
+ declare const Reveal: ({ render, ...p }: SurfaceProps) => import("react").JSX.Element;
48
+ export type LatticeProps = Loose<Omit<ViewProps, 'children'>> & {
49
+ /** The pitch of the rule, in px. */
50
+ size?: number;
51
+ /** How much of the foreground ink each line takes, 0..1. */
52
+ opacity?: number;
53
+ };
54
+ /** A ruled backdrop, in the foreground ink so it reads on either ground. Two
55
+ * knobs, the pitch and the strength; everything else — where it sits, what
56
+ * masks it — is the caller's props. */
57
+ declare const Lattice: ({ size, opacity, ...p }: LatticeProps) => import("react").JSX.Element;
58
+ export { Leaf, Cell, Lift, Reveal, Lattice };
59
+ //# sourceMappingURL=surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/marketing/surface.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAGvE,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1C,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC,GACtE,IAAI,GAAG;IACL,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;CAC7B,CAAA;AAaH;;4BAE4B;AAC5B,QAAA,MAAM,IAAI,qBAAsB,YAAY,gCAsB3C,CAAA;AAED;;;gFAGgF;AAChF,QAAA,MAAM,IAAI,qBAAsB,YAAY,gCAiB3C,CAAA;AAED;;qBAEqB;AACrB,QAAA,MAAM,IAAI,2BAA6C,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,gCAavF,CAAA;AAED;;wCAEwC;AACxC,QAAA,MAAM,MAAM,qBAA+B,YAAY,gCActD,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,GAAG;IAC9D,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;wCAEwC;AACxC,QAAA,MAAM,OAAO,4BAAyC,YAAY,gCAWjE,CAAA;AAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA"}