@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.
- package/dist/gallery.html +105 -5
- package/dist/marketing/Cta.cjs +9 -3
- package/dist/marketing/Cta.d.ts +7 -5
- package/dist/marketing/Cta.d.ts.map +1 -1
- package/dist/marketing/Cta.js +10 -4
- package/dist/marketing/Cta.js.map +1 -1
- package/dist/marketing/controls.cjs +112 -0
- package/dist/marketing/controls.d.ts +42 -0
- package/dist/marketing/controls.d.ts.map +1 -0
- package/dist/marketing/controls.js +108 -0
- package/dist/marketing/controls.js.map +1 -0
- package/dist/marketing/document.cjs +7 -0
- package/dist/marketing/document.d.ts +22 -0
- package/dist/marketing/document.d.ts.map +1 -0
- package/dist/marketing/document.js +5 -0
- package/dist/marketing/document.js.map +1 -0
- package/dist/marketing/host.cjs +39 -0
- package/dist/marketing/host.d.ts +21 -0
- package/dist/marketing/host.d.ts.map +1 -0
- package/dist/marketing/host.js +35 -0
- package/dist/marketing/host.js.map +1 -0
- package/dist/marketing/index.cjs +24 -1
- package/dist/marketing/index.d.ts +8 -2
- package/dist/marketing/index.d.ts.map +1 -1
- package/dist/marketing/index.js +7 -1
- package/dist/marketing/index.js.map +1 -1
- package/dist/marketing/loose.cjs +2 -0
- package/dist/marketing/loose.d.ts +41 -0
- package/dist/marketing/loose.d.ts.map +1 -0
- package/dist/marketing/loose.js +2 -0
- package/dist/marketing/loose.js.map +1 -0
- package/dist/marketing/pager.cjs +22 -0
- package/dist/marketing/pager.d.ts +22 -0
- package/dist/marketing/pager.d.ts.map +1 -0
- package/dist/marketing/pager.js +20 -0
- package/dist/marketing/pager.js.map +1 -0
- package/dist/marketing/pair.cjs +21 -0
- package/dist/marketing/pair.d.ts +22 -0
- package/dist/marketing/pair.d.ts.map +1 -0
- package/dist/marketing/pair.js +19 -0
- package/dist/marketing/pair.js.map +1 -0
- package/dist/marketing/run.cjs +28 -0
- package/dist/marketing/run.d.ts +33 -0
- package/dist/marketing/run.d.ts.map +1 -0
- package/dist/marketing/run.js +26 -0
- package/dist/marketing/run.js.map +1 -0
- package/dist/marketing/surface.cjs +76 -0
- package/dist/marketing/surface.d.ts +59 -0
- package/dist/marketing/surface.d.ts.map +1 -0
- package/dist/marketing/surface.js +70 -0
- package/dist/marketing/surface.js.map +1 -0
- package/dist/marketing/type.cjs +29 -2
- package/dist/marketing/type.d.ts +43 -4
- package/dist/marketing/type.d.ts.map +1 -1
- package/dist/marketing/type.js +24 -1
- package/dist/marketing/type.js.map +1 -1
- package/dist/styles/document.css +93 -0
- package/dist/styles/motion.css +52 -2
- package/dist/styles.css +104 -4
- package/dist/theme.css +52 -2
- 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"}
|
package/dist/marketing/index.cjs
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/marketing/index.js
CHANGED
|
@@ -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,
|
|
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,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 @@
|
|
|
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"}
|