@hanzo/ui 8.4.12 → 8.5.0

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 (207) hide show
  1. package/dist/backends/gui/band.cjs +46 -0
  2. package/dist/backends/gui/band.d.ts +43 -0
  3. package/dist/backends/gui/band.d.ts.map +1 -0
  4. package/dist/backends/gui/band.js +44 -0
  5. package/dist/backends/gui/band.js.map +1 -0
  6. package/dist/backends/gui/index.cjs +15 -6
  7. package/dist/backends/gui/index.d.ts +5 -3
  8. package/dist/backends/gui/index.d.ts.map +1 -1
  9. package/dist/backends/gui/index.js +5 -3
  10. package/dist/backends/gui/index.js.map +1 -1
  11. package/dist/backends/gui/layout.cjs +12 -2
  12. package/dist/backends/gui/layout.d.ts +1 -1
  13. package/dist/backends/gui/layout.d.ts.map +1 -1
  14. package/dist/backends/gui/layout.js +11 -2
  15. package/dist/backends/gui/layout.js.map +1 -1
  16. package/dist/backends/gui/link.cjs +126 -0
  17. package/dist/backends/gui/link.d.ts +65 -0
  18. package/dist/backends/gui/link.d.ts.map +1 -0
  19. package/dist/backends/gui/link.js +88 -0
  20. package/dist/backends/gui/link.js.map +1 -0
  21. package/dist/backends/gui/prose.cjs +33 -0
  22. package/dist/backends/gui/prose.d.ts +39 -0
  23. package/dist/backends/gui/prose.d.ts.map +1 -0
  24. package/dist/backends/gui/prose.js +30 -0
  25. package/dist/backends/gui/prose.js.map +1 -0
  26. package/dist/backends/gui/video.cjs +89 -0
  27. package/dist/backends/gui/video.d.ts +33 -0
  28. package/dist/backends/gui/video.d.ts.map +1 -0
  29. package/dist/backends/gui/video.js +53 -0
  30. package/dist/backends/gui/video.js.map +1 -0
  31. package/dist/blocks/accordian.cjs +19 -0
  32. package/dist/blocks/accordian.d.ts +4 -0
  33. package/dist/blocks/accordian.d.ts.map +1 -0
  34. package/dist/blocks/accordian.js +16 -0
  35. package/dist/blocks/accordian.js.map +1 -0
  36. package/dist/blocks/bullet-cards.cjs +40 -0
  37. package/dist/blocks/bullet-cards.d.ts +10 -0
  38. package/dist/blocks/bullet-cards.d.ts.map +1 -0
  39. package/dist/blocks/bullet-cards.js +37 -0
  40. package/dist/blocks/bullet-cards.js.map +1 -0
  41. package/dist/blocks/card.cjs +58 -0
  42. package/dist/blocks/card.d.ts +14 -0
  43. package/dist/blocks/card.d.ts.map +1 -0
  44. package/dist/blocks/card.js +55 -0
  45. package/dist/blocks/card.js.map +1 -0
  46. package/dist/blocks/carte-blanche.cjs +38 -0
  47. package/dist/blocks/carte-blanche.d.ts +13 -0
  48. package/dist/blocks/carte-blanche.d.ts.map +1 -0
  49. package/dist/blocks/carte-blanche.js +35 -0
  50. package/dist/blocks/carte-blanche.js.map +1 -0
  51. package/dist/blocks/content.cjs +65 -0
  52. package/dist/blocks/content.d.ts +11 -0
  53. package/dist/blocks/content.d.ts.map +1 -0
  54. package/dist/blocks/content.js +61 -0
  55. package/dist/blocks/content.js.map +1 -0
  56. package/dist/blocks/cta.cjs +103 -0
  57. package/dist/blocks/cta.d.ts +13 -0
  58. package/dist/blocks/cta.d.ts.map +1 -0
  59. package/dist/blocks/cta.js +67 -0
  60. package/dist/blocks/cta.js.map +1 -0
  61. package/dist/blocks/def.cjs +24 -0
  62. package/dist/blocks/def.d.ts +191 -0
  63. package/dist/blocks/def.d.ts.map +1 -0
  64. package/dist/blocks/def.js +22 -0
  65. package/dist/blocks/def.js.map +1 -0
  66. package/dist/blocks/enh-heading.cjs +86 -0
  67. package/dist/blocks/enh-heading.d.ts +7 -0
  68. package/dist/blocks/enh-heading.d.ts.map +1 -0
  69. package/dist/blocks/enh-heading.js +83 -0
  70. package/dist/blocks/enh-heading.js.map +1 -0
  71. package/dist/blocks/grid.cjs +98 -0
  72. package/dist/blocks/grid.d.ts +18 -0
  73. package/dist/blocks/grid.d.ts.map +1 -0
  74. package/dist/blocks/grid.js +62 -0
  75. package/dist/blocks/grid.js.map +1 -0
  76. package/dist/blocks/group.cjs +43 -0
  77. package/dist/blocks/group.d.ts +4 -0
  78. package/dist/blocks/group.d.ts.map +1 -0
  79. package/dist/blocks/group.js +40 -0
  80. package/dist/blocks/group.js.map +1 -0
  81. package/dist/blocks/heading.cjs +22 -0
  82. package/dist/blocks/heading.d.ts +4 -0
  83. package/dist/blocks/heading.d.ts.map +1 -0
  84. package/dist/blocks/heading.js +19 -0
  85. package/dist/blocks/heading.js.map +1 -0
  86. package/dist/blocks/image.cjs +54 -0
  87. package/dist/blocks/image.d.ts +19 -0
  88. package/dist/blocks/image.d.ts.map +1 -0
  89. package/dist/blocks/image.js +51 -0
  90. package/dist/blocks/image.js.map +1 -0
  91. package/dist/blocks/index.cjs +65 -0
  92. package/dist/blocks/index.d.ts +18 -0
  93. package/dist/blocks/index.d.ts.map +1 -0
  94. package/dist/blocks/index.js +30 -0
  95. package/dist/blocks/index.js.map +1 -0
  96. package/dist/blocks/screenful.cjs +139 -0
  97. package/dist/blocks/screenful.d.ts +18 -0
  98. package/dist/blocks/screenful.d.ts.map +1 -0
  99. package/dist/blocks/screenful.js +103 -0
  100. package/dist/blocks/screenful.js.map +1 -0
  101. package/dist/blocks/space.cjs +38 -0
  102. package/dist/blocks/space.d.ts +4 -0
  103. package/dist/blocks/space.d.ts.map +1 -0
  104. package/dist/blocks/space.js +35 -0
  105. package/dist/blocks/space.js.map +1 -0
  106. package/dist/blocks/spec.cjs +58 -0
  107. package/dist/blocks/spec.d.ts +60 -0
  108. package/dist/blocks/spec.d.ts.map +1 -0
  109. package/dist/blocks/spec.js +52 -0
  110. package/dist/blocks/spec.js.map +1 -0
  111. package/dist/blocks/video.cjs +103 -0
  112. package/dist/blocks/video.d.ts +22 -0
  113. package/dist/blocks/video.d.ts.map +1 -0
  114. package/dist/blocks/video.js +67 -0
  115. package/dist/blocks/video.js.map +1 -0
  116. package/dist/gallery.cjs +1 -1
  117. package/dist/gallery.html +104 -7
  118. package/dist/gallery.js +2 -2
  119. package/dist/gallery.js.map +1 -1
  120. package/dist/index.cjs +12 -5
  121. package/dist/index.d.ts +1 -1
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +2 -2
  124. package/dist/index.js.map +1 -1
  125. package/dist/index.node.js +2 -2
  126. package/dist/primitives/ApplyTypography.cjs +8 -0
  127. package/dist/primitives/ApplyTypography.d.ts +2 -0
  128. package/dist/primitives/ApplyTypography.d.ts.map +1 -0
  129. package/dist/primitives/ApplyTypography.js +5 -0
  130. package/dist/primitives/ApplyTypography.js.map +1 -0
  131. package/dist/primitives/{Section.cjs → Band.cjs} +3 -3
  132. package/dist/primitives/Band.d.ts +2 -0
  133. package/dist/primitives/Band.d.ts.map +1 -0
  134. package/dist/primitives/{Section.js → Band.js} +2 -2
  135. package/dist/primitives/Band.js.map +1 -0
  136. package/dist/primitives/Fill.cjs +8 -0
  137. package/dist/primitives/Fill.d.ts +2 -0
  138. package/dist/primitives/Fill.d.ts.map +1 -0
  139. package/dist/primitives/Fill.js +5 -0
  140. package/dist/primitives/Fill.js.map +1 -0
  141. package/dist/primitives/Link.cjs +8 -0
  142. package/dist/primitives/Link.d.ts +2 -0
  143. package/dist/primitives/Link.d.ts.map +1 -0
  144. package/dist/primitives/Link.js +5 -0
  145. package/dist/primitives/Link.js.map +1 -0
  146. package/dist/primitives/LinkElement.cjs +8 -0
  147. package/dist/primitives/LinkElement.d.ts +2 -0
  148. package/dist/primitives/LinkElement.d.ts.map +1 -0
  149. package/dist/primitives/LinkElement.js +5 -0
  150. package/dist/primitives/LinkElement.js.map +1 -0
  151. package/dist/primitives/MDXLink.cjs +8 -0
  152. package/dist/primitives/MDXLink.d.ts +2 -0
  153. package/dist/primitives/MDXLink.d.ts.map +1 -0
  154. package/dist/primitives/MDXLink.js +5 -0
  155. package/dist/primitives/MDXLink.js.map +1 -0
  156. package/dist/primitives/Screen.cjs +8 -0
  157. package/dist/primitives/Screen.d.ts +2 -0
  158. package/dist/primitives/Screen.d.ts.map +1 -0
  159. package/dist/primitives/Screen.js +5 -0
  160. package/dist/primitives/Screen.js.map +1 -0
  161. package/dist/primitives/Separator.cjs +2 -2
  162. package/dist/primitives/Separator.d.ts +1 -1
  163. package/dist/primitives/Separator.d.ts.map +1 -1
  164. package/dist/primitives/Separator.js +1 -1
  165. package/dist/primitives/Separator.js.map +1 -1
  166. package/dist/primitives/VideoPlayer.cjs +8 -0
  167. package/dist/primitives/VideoPlayer.d.ts +2 -0
  168. package/dist/primitives/VideoPlayer.d.ts.map +1 -0
  169. package/dist/primitives/VideoPlayer.js +5 -0
  170. package/dist/primitives/VideoPlayer.js.map +1 -0
  171. package/dist/primitives/YouTubeEmbed.cjs +8 -0
  172. package/dist/primitives/YouTubeEmbed.d.ts +2 -0
  173. package/dist/primitives/YouTubeEmbed.d.ts.map +1 -0
  174. package/dist/primitives/YouTubeEmbed.js +5 -0
  175. package/dist/primitives/YouTubeEmbed.js.map +1 -0
  176. package/dist/primitives/useLink.cjs +8 -0
  177. package/dist/primitives/useLink.d.ts +2 -0
  178. package/dist/primitives/useLink.d.ts.map +1 -0
  179. package/dist/primitives/useLink.js +5 -0
  180. package/dist/primitives/useLink.js.map +1 -0
  181. package/dist/product/menu/items.d.ts +1 -1
  182. package/dist/product/menu/items.d.ts.map +1 -1
  183. package/dist/styles.css +101 -4
  184. package/dist/theme.css +101 -0
  185. package/dist/tw.cjs +52 -1
  186. package/dist/tw.d.ts.map +1 -1
  187. package/dist/tw.js +52 -1
  188. package/dist/tw.js.map +1 -1
  189. package/dist/types.cjs +32 -0
  190. package/dist/types.d.ts +136 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +30 -0
  193. package/dist/types.js.map +1 -0
  194. package/package.json +29 -17
  195. package/dist/backends/gui/section.cjs +0 -39
  196. package/dist/backends/gui/section.d.ts +0 -29
  197. package/dist/backends/gui/section.d.ts.map +0 -1
  198. package/dist/backends/gui/section.js +0 -37
  199. package/dist/backends/gui/section.js.map +0 -1
  200. package/dist/backends/gui/separator.cjs +0 -10
  201. package/dist/backends/gui/separator.d.ts +0 -11
  202. package/dist/backends/gui/separator.d.ts.map +0 -1
  203. package/dist/backends/gui/separator.js +0 -8
  204. package/dist/backends/gui/separator.js.map +0 -1
  205. package/dist/primitives/Section.d.ts +0 -2
  206. package/dist/primitives/Section.d.ts.map +0 -1
  207. package/dist/primitives/Section.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ import { type BlockComponentProps } from './spec.js';
2
+ /**
3
+ * A card: a heading, some media, some content, and a call to action — any of
4
+ * which may be absent.
5
+ *
6
+ * `ghost` is the variant with everything taken away: no border, no padding, a
7
+ * larger left-aligned title. It reads as content on the page rather than as a
8
+ * card, which is what a card in a grid of prose usually wants to be.
9
+ */
10
+ export declare const CardBlockComponent: ({ block, className, contentClassName, agent, }: BlockComponentProps & {
11
+ contentClassName?: string;
12
+ }) => import("react/jsx-runtime").JSX.Element;
13
+ export default CardBlockComponent;
14
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/blocks/card.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,mBAAmB,EAAW,MAAM,QAAQ,CAAA;AAgC1D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,mDAK5B,mBAAmB,GAAG;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,4CA4IrD,CAAA;eAEc,kBAAkB"}
@@ -0,0 +1,55 @@
1
+ 'use client';import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Card } from '../backends/gui/card.js';
3
+ import { CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '../backends/gui/card.js';
4
+ import { LinkElement } from '../backends/gui/link.js';
5
+ import { ApplyTypography } from '../backends/gui/prose.js';
6
+ import { Box } from '../box.js';
7
+ import { cn } from '../core/cn.js';
8
+ import { CTABlockComponent } from './cta.js';
9
+ import { ImageBlockComponent } from './image.js';
10
+ import { VideoBlockComponent } from './video.js';
11
+ import { has, sx } from './spec.js';
12
+ const SIZES = ['responsive', 'sm', 'base', 'lg', 'xl'];
13
+ /** `typography-lg` in the specifier bag picks the prose rung. */
14
+ const rung = (specifiers) => {
15
+ const hint = specifiers?.split(/\s+/).find((t) => t.startsWith('typography-'));
16
+ const last = hint?.split('-').pop();
17
+ return last && SIZES.includes(last) ? last : 'responsive';
18
+ };
19
+ /** A link that reads as a row: label left, an arrow out on the right. */
20
+ const LinkOut = ({ def }) => (_jsx(LinkElement, { def: def, style: { justifyContent: 'space-between' }, variant: "link", iconAfter: true, icon: _jsx("svg", { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", "aria-hidden": true, children: _jsx("path", { d: "M7 17 17 7M7 7h10v10", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round" }) }) }));
21
+ /**
22
+ * A card: a heading, some media, some content, and a call to action — any of
23
+ * which may be absent.
24
+ *
25
+ * `ghost` is the variant with everything taken away: no border, no padding, a
26
+ * larger left-aligned title. It reads as content on the page rather than as a
27
+ * card, which is what a card in a grid of prose usually wants to be.
28
+ */
29
+ export const CardBlockComponent = ({ block, className, contentClassName, agent, }) => {
30
+ if (block.blockType !== 'card')
31
+ return _jsx(_Fragment, { children: "card block required" });
32
+ const card = block;
33
+ const spec = (s) => has(card.specifiers, s);
34
+ const ghost = spec('ghost');
35
+ const dim = spec('appear-disabled');
36
+ const hover = spec('reveal-content-on-hover');
37
+ const inline = spec('icon-inline');
38
+ const pad = ghost ? 'px-0 py-0' : 'px-6 py-3';
39
+ const border = dim ? 'border-muted-4' : 'border-muted-3';
40
+ const bg = spec('bg-card') ? 'bg-level-1' : '';
41
+ const place = cn(spec('content-left') ? 'items-start' : 'items-center', spec('content-top') && 'justify-start', contentClassName);
42
+ const Header = ({ inContent = false, className: cls }) => card.title || card.byline || card.icon ? (_jsxs(CardHeader, { ...sx(cn('text-accent', dim && 'text-muted-2', pad, ghost && 'border-0', cls)), children: [_jsxs(Box, { className: inline || inContent ? 'flex flex-row justify-start items-end my-3' : '', children: [card.icon && !card.iconAfter && (_jsx(Box, { className: inline ? 'mr-1' : 'mb-2', children: card.icon })), card.title && (_jsx(CardTitle, { ...sx(cn('text-center text-lg font-medium', spec('heading-style-title') && 'font-heading text-base leading-tight', ghost && 'text-left md:text-xl', inline && 'md:text-xl')), children: card.title })), card.icon && card.iconAfter && (_jsx(Box, { className: inline ? 'ml-1' : 'my-1', children: card.icon }))] }), card.byline && _jsx(CardDescription, { children: card.byline })] })) : null;
43
+ const prose = (content) => typeof content === 'string' ? _jsx(Box, { tag: "p", children: content }) : content;
44
+ const Body = ({ className: cls }) => spec('media-left') ? (_jsxs(CardContent, { ...sx(cn('flex flex-row justify-start items-stretch p-0 grow', border, bg, place, cls)), children: [card.media && (_jsx(Box, { className: cn('box-content grow-0', pad),
45
+ // This layout assumes the media is a video with an `sm` size — it
46
+ // is the width that decides the split, so it has to be known here.
47
+ style: { width: card.media.dim?.sm?.w }, children: _jsx(VideoBlockComponent, { block: card.media, usePoster: spec('video-use-poster'), size: "sm", agent: agent, className: dim ? 'opacity-60' : '' }) })), card.content && (_jsx(ApplyTypography, { className: cn('grow border-l flex flex-col justify-center', pad, border, place), size: rung(card.specifiers), children: prose(card.content) }))] })) : (_jsxs(CardContent, { ...sx(cn('grow flex flex-col justify-center', bg, pad, place, spec('full-width') && 'p-0', cls)), children: [hover && _jsx(Header, { inContent: true }), card.content && spec('content-before') && prose(card.content), card.media &&
48
+ (card.media.blockType === 'image' ? (_jsx(ImageBlockComponent, { block: card.media, agent: agent })) : (_jsx(VideoBlockComponent, { block: card.media, agent: agent }))), card.content && !spec('content-before') && prose(card.content)] }));
49
+ const Foot = () => !card.cta ? null : spec('links-w-arrow') ? (_jsx(CardFooter, { ...sx(cn('flex flex-col justify-start items-stretch', pad)), children: _jsx(CTABlockComponent, { block: card.cta, agent: agent, renderLink: (def, key) => _jsx(LinkOut, { def: def }, key) }) })) : (_jsx(CardFooter, { ...sx(cn('grid grid-cols-1 gap-2 md:flex md:flex-row md:justify-center', pad)), children: _jsx(CTABlockComponent, { block: card.cta, agent: agent }) }));
50
+ return (_jsxs(Card, { ...sx(cn('flex flex-col self-stretch', hover && 'group relative', border, (spec('no-outer-border') || ghost) && 'border-0', bg, ghost && 'gap-2', className)), children: [_jsx(Header, { className: hover ? 'absolute top-0 left-0 w-full hidden' : '' }), _jsx(Body, { className: hover
51
+ ? 'items-start justify-start rounded-lg p-4 transition-opacity duration-500 ease-out opacity-100'
52
+ : '' }), _jsx(Foot, {})] }));
53
+ };
54
+ export default CardBlockComponent;
55
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/blocks/card.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ 'use client';"use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CarteBlancheBlockComponent = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const card_1 = require("../backends/gui/card.cjs");
6
+ const box_1 = require("../box.cjs");
7
+ const cn_1 = require("../core/cn.cjs");
8
+ const content_1 = require("./content.cjs");
9
+ const cta_1 = require("./cta.cjs");
10
+ const enh_heading_1 = require("./enh-heading.cjs");
11
+ const spec_1 = require("./spec.cjs");
12
+ /** The roomy padding `big-padding` asks for. Default is the card's own. */
13
+ const ROOMY = 'md:p-8 lg:p-12 xl:p-16';
14
+ /**
15
+ * A panel with a free hand: anything above the heading, anything below it, and
16
+ * a call to action at the foot.
17
+ *
18
+ * `variant-content-left` turns the stack on its side — the top content moves
19
+ * beside the heading and body rather than above them — and
20
+ * `variant-mobile-content-left` asks for that on a phone only, which is why the
21
+ * choice is made here rather than in css.
22
+ */
23
+ const CarteBlancheBlockComponent = ({ block, className, agent, }) => {
24
+ if (block.blockType !== 'carte-blanche')
25
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "carte-blanche block required" });
26
+ const b = block;
27
+ const spec = (s) => (0, spec_1.has)(b.specifiers, s);
28
+ const head = (0, cn_1.cn)(spec('big-padding') && ROOMY, spec('no-inner-borders') && 'border-none');
29
+ const body = (0, cn_1.cn)(spec('big-padding-content') && ROOMY);
30
+ const foot = (0, cn_1.cn)(spec('no-inner-borders') && 'border-t-0');
31
+ const Heading = () => b.heading ? ((0, jsx_runtime_1.jsx)(card_1.CardHeader, { ...(0, spec_1.sx)(head), children: (0, jsx_runtime_1.jsx)(enh_heading_1.EnhHeadingBlockComponent, { block: b.heading, className: "text-accent", agent: agent }) })) : null;
32
+ const Body = () => b.content ? ((0, jsx_runtime_1.jsx)(card_1.CardContent, { ...(0, spec_1.sx)((0, cn_1.cn)('flex flex-col justify-center', body, className)), children: (0, jsx_runtime_1.jsx)(content_1.Content, { blocks: b.content, agent: agent }) })) : null;
33
+ const Foot = ({ className: cls }) => b.cta ? ((0, jsx_runtime_1.jsx)(card_1.CardFooter, { ...(0, spec_1.sx)((0, cn_1.cn)('grid grid-cols-1 gap-2 md:flex md:flex-row md:justify-center', foot, cls)), children: (0, jsx_runtime_1.jsx)(cta_1.CTABlockComponent, { block: b.cta, agent: agent }) })) : null;
34
+ const sideways = spec('variant-content-left') || (spec('variant-mobile-content-left') && agent === 'phone');
35
+ return ((0, jsx_runtime_1.jsx)(card_1.Card, { ...(0, spec_1.sx)((0, cn_1.cn)('flex flex-col', className, spec('no-outer-borders') && 'border-none')), children: sideways ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(box_1.Box, { className: "flex gap-2", children: [b.topContent && ((0, jsx_runtime_1.jsx)(content_1.Content, { blocks: b.topContent, agent: agent, className: "self-center ml-6 mt-6" })), (0, jsx_runtime_1.jsxs)(box_1.Box, { className: "flex flex-col", children: [(0, jsx_runtime_1.jsx)(Heading, {}), b.content && ((0, jsx_runtime_1.jsx)(card_1.CardContent, { ...(0, spec_1.sx)((0, cn_1.cn)('flex flex-col justify-start', body, className)), children: (0, jsx_runtime_1.jsx)(content_1.Content, { blocks: b.content, agent: agent }) }))] })] }), (0, jsx_runtime_1.jsx)(Foot, { className: "mx-auto" })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(b.heading || b.topContent) && ((0, jsx_runtime_1.jsxs)(card_1.CardHeader, { ...(0, spec_1.sx)(head), children: [b.topContent && (0, jsx_runtime_1.jsx)(content_1.Content, { blocks: b.topContent, agent: agent }), b.heading && ((0, jsx_runtime_1.jsx)(enh_heading_1.EnhHeadingBlockComponent, { block: b.heading, className: "text-accent", agent: agent }))] })), (0, jsx_runtime_1.jsx)(Body, {}), (0, jsx_runtime_1.jsx)(Foot, {})] })) }));
36
+ };
37
+ exports.CarteBlancheBlockComponent = CarteBlancheBlockComponent;
38
+ exports.default = exports.CarteBlancheBlockComponent;
@@ -0,0 +1,13 @@
1
+ import { type BlockComponentProps } from './spec.js';
2
+ /**
3
+ * A panel with a free hand: anything above the heading, anything below it, and
4
+ * a call to action at the foot.
5
+ *
6
+ * `variant-content-left` turns the stack on its side — the top content moves
7
+ * beside the heading and body rather than above them — and
8
+ * `variant-mobile-content-left` asks for that on a phone only, which is why the
9
+ * choice is made here rather than in css.
10
+ */
11
+ export declare const CarteBlancheBlockComponent: ({ block, className, agent, }: BlockComponentProps) => import("react/jsx-runtime").JSX.Element;
12
+ export default CarteBlancheBlockComponent;
13
+ //# sourceMappingURL=carte-blanche.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carte-blanche.d.ts","sourceRoot":"","sources":["../../src/blocks/carte-blanche.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,mBAAmB,EAAW,MAAM,QAAQ,CAAA;AAK1D;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,iCAIpC,mBAAmB,4CAqErB,CAAA;eAEc,0BAA0B"}
@@ -0,0 +1,35 @@
1
+ 'use client';import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Card, CardContent, CardFooter, CardHeader } from '../backends/gui/card.js';
3
+ import { Box } from '../box.js';
4
+ import { cn } from '../core/cn.js';
5
+ import { Content } from './content.js';
6
+ import { CTABlockComponent } from './cta.js';
7
+ import { EnhHeadingBlockComponent } from './enh-heading.js';
8
+ import { has, sx } from './spec.js';
9
+ /** The roomy padding `big-padding` asks for. Default is the card's own. */
10
+ const ROOMY = 'md:p-8 lg:p-12 xl:p-16';
11
+ /**
12
+ * A panel with a free hand: anything above the heading, anything below it, and
13
+ * a call to action at the foot.
14
+ *
15
+ * `variant-content-left` turns the stack on its side — the top content moves
16
+ * beside the heading and body rather than above them — and
17
+ * `variant-mobile-content-left` asks for that on a phone only, which is why the
18
+ * choice is made here rather than in css.
19
+ */
20
+ export const CarteBlancheBlockComponent = ({ block, className, agent, }) => {
21
+ if (block.blockType !== 'carte-blanche')
22
+ return _jsx(_Fragment, { children: "carte-blanche block required" });
23
+ const b = block;
24
+ const spec = (s) => has(b.specifiers, s);
25
+ const head = cn(spec('big-padding') && ROOMY, spec('no-inner-borders') && 'border-none');
26
+ const body = cn(spec('big-padding-content') && ROOMY);
27
+ const foot = cn(spec('no-inner-borders') && 'border-t-0');
28
+ const Heading = () => b.heading ? (_jsx(CardHeader, { ...sx(head), children: _jsx(EnhHeadingBlockComponent, { block: b.heading, className: "text-accent", agent: agent }) })) : null;
29
+ const Body = () => b.content ? (_jsx(CardContent, { ...sx(cn('flex flex-col justify-center', body, className)), children: _jsx(Content, { blocks: b.content, agent: agent }) })) : null;
30
+ const Foot = ({ className: cls }) => b.cta ? (_jsx(CardFooter, { ...sx(cn('grid grid-cols-1 gap-2 md:flex md:flex-row md:justify-center', foot, cls)), children: _jsx(CTABlockComponent, { block: b.cta, agent: agent }) })) : null;
31
+ const sideways = spec('variant-content-left') || (spec('variant-mobile-content-left') && agent === 'phone');
32
+ return (_jsx(Card, { ...sx(cn('flex flex-col', className, spec('no-outer-borders') && 'border-none')), children: sideways ? (_jsxs(_Fragment, { children: [_jsxs(Box, { className: "flex gap-2", children: [b.topContent && (_jsx(Content, { blocks: b.topContent, agent: agent, className: "self-center ml-6 mt-6" })), _jsxs(Box, { className: "flex flex-col", children: [_jsx(Heading, {}), b.content && (_jsx(CardContent, { ...sx(cn('flex flex-col justify-start', body, className)), children: _jsx(Content, { blocks: b.content, agent: agent }) }))] })] }), _jsx(Foot, { className: "mx-auto" })] })) : (_jsxs(_Fragment, { children: [(b.heading || b.topContent) && (_jsxs(CardHeader, { ...sx(head), children: [b.topContent && _jsx(Content, { blocks: b.topContent, agent: agent }), b.heading && (_jsx(EnhHeadingBlockComponent, { block: b.heading, className: "text-accent", agent: agent }))] })), _jsx(Body, {}), _jsx(Foot, {})] })) }));
33
+ };
34
+ export default CarteBlancheBlockComponent;
35
+ //# sourceMappingURL=carte-blanche.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carte-blanche.js","sourceRoot":"","sources":["../../src/blocks/carte-blanche.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAE/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAA4B,GAAG,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE1D,2EAA2E;AAC3E,MAAM,KAAK,GAAG,wBAAwB,CAAA;AAEtC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EACzC,KAAK,EACL,SAAS,EACT,KAAK,GACe,EAAE,EAAE;IACxB,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe;QAAE,OAAO,6DAAiC,CAAA;IACjF,MAAM,CAAC,GAAG,KAA0B,CAAA;IACpC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IAEhD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,aAAa,CAAC,CAAA;IACxF,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,CAAA;IACrD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,YAAY,CAAC,CAAA;IAEzD,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACV,KAAC,UAAU,OAAK,EAAE,CAAC,IAAI,CAAC,YACtB,KAAC,wBAAwB,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,KAAK,GAAI,GACzE,CACd,CAAC,CAAC,CAAC,IAAI,CAAA;IAEV,MAAM,IAAI,GAAG,GAAG,EAAE,CAChB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACV,KAAC,WAAW,OAAK,EAAE,CAAC,EAAE,CAAC,8BAA8B,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,YACtE,KAAC,OAAO,IAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,GAAI,GAChC,CACf,CAAC,CAAC,CAAC,IAAI,CAAA;IAEV,MAAM,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAA0B,EAAE,EAAE,CAC1D,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CACN,KAAC,UAAU,OACL,EAAE,CAAC,EAAE,CAAC,8DAA8D,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,YAErF,KAAC,iBAAiB,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,GAAI,GACtC,CACd,CAAC,CAAC,CAAC,IAAI,CAAA;IAEV,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,KAAK,KAAK,OAAO,CAAC,CAAA;IAE3G,OAAO,CACL,KAAC,IAAI,OAAK,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,aAAa,CAAC,CAAC,YACpF,QAAQ,CAAC,CAAC,CAAC,CACV,8BACE,MAAC,GAAG,IAAC,SAAS,EAAC,YAAY,aACxB,CAAC,CAAC,UAAU,IAAI,CACf,KAAC,OAAO,IAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAC,uBAAuB,GAAG,CAClF,EACD,MAAC,GAAG,IAAC,SAAS,EAAC,eAAe,aAC5B,KAAC,OAAO,KAAG,EACV,CAAC,CAAC,OAAO,IAAI,CACZ,KAAC,WAAW,OAAK,EAAE,CAAC,EAAE,CAAC,6BAA6B,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,YACrE,KAAC,OAAO,IAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,GAAI,GAChC,CACf,IACG,IACF,EACN,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,IAC3B,CACJ,CAAC,CAAC,CAAC,CACF,8BACG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAC9B,MAAC,UAAU,OAAK,EAAE,CAAC,IAAI,CAAC,aACrB,CAAC,CAAC,UAAU,IAAI,KAAC,OAAO,IAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,GAAI,EAC/D,CAAC,CAAC,OAAO,IAAI,CACZ,KAAC,wBAAwB,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,KAAK,GAAI,CACrF,IACU,CACd,EACD,KAAC,IAAI,KAAG,EACR,KAAC,IAAI,KAAG,IACP,CACJ,GACI,CACR,CAAA;AACH,CAAC,CAAA;AAED,eAAe,0BAA0B,CAAA"}
@@ -0,0 +1,65 @@
1
+ 'use client';"use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Content = exports.registerBlockType = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const accordian_1 = require("./accordian.cjs");
6
+ const bullet_cards_1 = require("./bullet-cards.cjs");
7
+ const card_1 = require("./card.cjs");
8
+ const carte_blanche_1 = require("./carte-blanche.cjs");
9
+ const cta_1 = require("./cta.cjs");
10
+ const enh_heading_1 = require("./enh-heading.cjs");
11
+ const grid_1 = require("./grid.cjs");
12
+ const group_1 = require("./group.cjs");
13
+ const heading_1 = require("./heading.cjs");
14
+ const image_1 = require("./image.cjs");
15
+ const space_1 = require("./space.cjs");
16
+ const video_1 = require("./video.cjs");
17
+ /**
18
+ * `blockType` → renderer.
19
+ *
20
+ * A Map rather than a switch because it is also the extension point: a host
21
+ * calls `registerBlockType` to add a type of its own, or to replace one of
22
+ * these — which is how a Next app substitutes its optimizing image, and how
23
+ * anything the library does not ship reaches the page.
24
+ */
25
+ const map = new Map([
26
+ ['accordian', accordian_1.AccordianBlockComponent],
27
+ ['bullet-cards', bullet_cards_1.BulletCardsBlockComponent],
28
+ ['card', card_1.CardBlockComponent],
29
+ ['carte-blanche', carte_blanche_1.CarteBlancheBlockComponent],
30
+ ['cta', cta_1.CTABlockComponent],
31
+ ['enh-heading', enh_heading_1.EnhHeadingBlockComponent],
32
+ ['grid', grid_1.GridBlockComponent],
33
+ ['group', group_1.GroupBlockComponent],
34
+ ['heading', heading_1.HeadingBlockComponent],
35
+ ['image', image_1.ImageBlockComponent],
36
+ ['space', space_1.SpaceBlockComponent],
37
+ ['video', video_1.VideoBlockComponent],
38
+ ]);
39
+ const registerBlockType = (key, type) => {
40
+ map.set(key, type);
41
+ };
42
+ exports.registerBlockType = registerBlockType;
43
+ /**
44
+ * `element` is the one type with no renderer, by design: it carries a node the
45
+ * author already built, so rendering it means handing it back. That is what
46
+ * makes a page of blocks able to hold anything at all.
47
+ */
48
+ const one = (block, className, agent, key) => {
49
+ if (block.blockType === 'element')
50
+ return block.element;
51
+ const Comp = map.get(block.blockType);
52
+ if (!Comp)
53
+ return null;
54
+ return (0, jsx_runtime_1.jsx)(Comp, { block: block, className: className, agent: agent }, key);
55
+ };
56
+ const Content = ({ blocks, className, agent, }) => {
57
+ if (!blocks)
58
+ return null;
59
+ if (Array.isArray(blocks)) {
60
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: blocks.map((b, i) => one(b, className, agent, `${b.blockType}-${i}`)) }));
61
+ }
62
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: one(blocks, className, agent) });
63
+ };
64
+ exports.Content = Content;
65
+ exports.default = exports.Content;
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import type { Block } from './def.js';
3
+ import type { BlockComponentProps } from './spec.js';
4
+ export declare const registerBlockType: (key: string, type: React.ComponentType<BlockComponentProps>) => void;
5
+ export declare const Content: ({ blocks, className, agent, }: {
6
+ blocks: Block | Block[] | undefined;
7
+ className?: string;
8
+ agent?: string;
9
+ }) => import("react/jsx-runtime").JSX.Element | null;
10
+ export default Content;
11
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/blocks/content.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,OAAO,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AAsCjD,eAAO,MAAM,iBAAiB,QACvB,MAAM,QACL,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAC7C,IAEF,CAAA;AAcD,eAAO,MAAM,OAAO,kCAIjB;IACD,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,SAAS,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,mDAUA,CAAA;eAEc,OAAO"}
@@ -0,0 +1,61 @@
1
+ 'use client';import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { AccordianBlockComponent } from './accordian.js';
3
+ import { BulletCardsBlockComponent } from './bullet-cards.js';
4
+ import { CardBlockComponent } from './card.js';
5
+ import { CarteBlancheBlockComponent } from './carte-blanche.js';
6
+ import { CTABlockComponent } from './cta.js';
7
+ import { EnhHeadingBlockComponent } from './enh-heading.js';
8
+ import { GridBlockComponent } from './grid.js';
9
+ import { GroupBlockComponent } from './group.js';
10
+ import { HeadingBlockComponent } from './heading.js';
11
+ import { ImageBlockComponent } from './image.js';
12
+ import { SpaceBlockComponent } from './space.js';
13
+ import { VideoBlockComponent } from './video.js';
14
+ /**
15
+ * `blockType` → renderer.
16
+ *
17
+ * A Map rather than a switch because it is also the extension point: a host
18
+ * calls `registerBlockType` to add a type of its own, or to replace one of
19
+ * these — which is how a Next app substitutes its optimizing image, and how
20
+ * anything the library does not ship reaches the page.
21
+ */
22
+ const map = new Map([
23
+ ['accordian', AccordianBlockComponent],
24
+ ['bullet-cards', BulletCardsBlockComponent],
25
+ ['card', CardBlockComponent],
26
+ ['carte-blanche', CarteBlancheBlockComponent],
27
+ ['cta', CTABlockComponent],
28
+ ['enh-heading', EnhHeadingBlockComponent],
29
+ ['grid', GridBlockComponent],
30
+ ['group', GroupBlockComponent],
31
+ ['heading', HeadingBlockComponent],
32
+ ['image', ImageBlockComponent],
33
+ ['space', SpaceBlockComponent],
34
+ ['video', VideoBlockComponent],
35
+ ]);
36
+ export const registerBlockType = (key, type) => {
37
+ map.set(key, type);
38
+ };
39
+ /**
40
+ * `element` is the one type with no renderer, by design: it carries a node the
41
+ * author already built, so rendering it means handing it back. That is what
42
+ * makes a page of blocks able to hold anything at all.
43
+ */
44
+ const one = (block, className, agent, key) => {
45
+ if (block.blockType === 'element')
46
+ return block.element;
47
+ const Comp = map.get(block.blockType);
48
+ if (!Comp)
49
+ return null;
50
+ return _jsx(Comp, { block: block, className: className, agent: agent }, key);
51
+ };
52
+ export const Content = ({ blocks, className, agent, }) => {
53
+ if (!blocks)
54
+ return null;
55
+ if (Array.isArray(blocks)) {
56
+ return (_jsx(_Fragment, { children: blocks.map((b, i) => one(b, className, agent, `${b.blockType}-${i}`)) }));
57
+ }
58
+ return _jsx(_Fragment, { children: one(blocks, className, agent) });
59
+ };
60
+ export default Content;
61
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/blocks/content.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAE7C;;;;;;;GAOG;AACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAmD;IACpE,CAAC,WAAW,EAAE,uBAAuB,CAAC;IACtC,CAAC,cAAc,EAAE,yBAAyB,CAAC;IAC3C,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAC5B,CAAC,eAAe,EAAE,0BAA0B,CAAC;IAC7C,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAC1B,CAAC,aAAa,EAAE,wBAAwB,CAAC;IACzC,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAC5B,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAC9B,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAClC,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAC9B,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAC9B,CAAC,OAAO,EAAE,mBAAmB,CAAC;CAC/B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,GAAW,EACX,IAA8C,EACxC,EAAE;IACR,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACpB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,GAAG,GAAG,CAAC,KAAY,EAAE,SAAkB,EAAE,KAAc,EAAE,GAAY,EAAmB,EAAE;IAC9F,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,OAAQ,KAAsB,CAAC,OAAO,CAAA;IACzE,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,IAAO,GAAG,CAAI,CAAA;AAC7E,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EACtB,MAAM,EACN,SAAS,EACT,KAAK,GAKN,EAAE,EAAE;IACH,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,CACL,4BACG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC,GACrE,CACJ,CAAA;IACH,CAAC;IACD,OAAO,4BAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,GAAI,CAAA;AAC7C,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1,103 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.CTABlockComponent = void 0;
38
+ const jsx_runtime_1 = require("react/jsx-runtime");
39
+ const React = __importStar(require("react"));
40
+ const link_1 = require("../backends/gui/link.cjs");
41
+ const box_1 = require("../box.cjs");
42
+ const cn_1 = require("../core/cn.cjs");
43
+ const spec_1 = require("./spec.cjs");
44
+ /**
45
+ * A button whose action is a modal.
46
+ *
47
+ * `ButtonDef` carries the modal COMPONENT rather than a modal, so the library
48
+ * never has to know what the app's dialog is: this opens it, closes it, and
49
+ * hands it the action to run. The 5.x line shipped this file empty, so every
50
+ * `ButtonDef` in a cta rendered nothing at all.
51
+ */
52
+ const ActionButton = ({ def, size, className, }) => {
53
+ const [open, setOpen] = React.useState(false);
54
+ const modal = def.action.def;
55
+ const { Comp } = modal;
56
+ return ((0, jsx_runtime_1.jsx)(Comp, { open: open, onOpenChange: setOpen, buttonText: def.text, buttonProps: { ...def.props, ...(size ? { size } : {}), className }, title: modal.title, byline: modal.byline, action: modal.action ?? (async () => undefined), actionEnclosure: modal.actionEnclosure }));
57
+ };
58
+ /** A def with a `title` is a link; anything else is a button. */
59
+ const isLink = (e) => 'title' in e || 'href' in e;
60
+ const CTABlockComponent = ({ block, className, itemClasses, itemSize, renderLink, renderButton, agent, }) => {
61
+ if (block.blockType !== 'cta')
62
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "cta block required" });
63
+ const { elements, specifiers } = block;
64
+ const spec = (s) => (0, spec_1.has)(specifiers, s);
65
+ const justify = spec('fill')
66
+ ? 'w-full'
67
+ : spec('left')
68
+ ? 'md:justify-start'
69
+ : spec('right')
70
+ ? 'md:justify-end'
71
+ : 'md:justify-center';
72
+ const twoUp = spec('mobile-2-columns');
73
+ const fillEvenly = !spec('desktop-dont-fill');
74
+ const centerFirst = spec('mobile-center-first-if-odd');
75
+ const oddFullWidth = spec('mobile-odd-full-width');
76
+ let layout = 'flex flex-col items-stretch gap-2 self-stretch md:flex-row sm:justify-center';
77
+ let item = spec('fill') ? 'grow shrink min-w-0' : '';
78
+ if (elements.length > 1) {
79
+ if (twoUp || fillEvenly) {
80
+ layout = 'grid grid-cols-2 gap-2 self-stretch';
81
+ item += ' min-w-0';
82
+ }
83
+ else {
84
+ layout = 'flex flex-row justify-center';
85
+ }
86
+ }
87
+ /** With an odd count in two columns, one element spans both. */
88
+ const span = (i, total) => {
89
+ if (!(agent === 'phone' && twoUp))
90
+ return '';
91
+ const centred = total % 2 === 0 ? -1 : centerFirst ? 0 : total - 1;
92
+ return i === centred ? `col-span-2 ${oddFullWidth ? 'w-full' : 'w-3/5 mx-auto'}` : '';
93
+ };
94
+ return ((0, jsx_runtime_1.jsx)(box_1.Box, { className: (0, cn_1.cn)(layout, justify, className), children: elements.map((element, i) => {
95
+ const extra = (0, cn_1.cn)(item, itemClasses, span(i, elements.length));
96
+ if (isLink(element)) {
97
+ return renderLink ? (renderLink(element, i)) : ((0, jsx_runtime_1.jsx)(link_1.LinkElement, { def: element, size: itemSize, className: extra }, i));
98
+ }
99
+ return renderButton ? (renderButton(element, i)) : ((0, jsx_runtime_1.jsx)(ActionButton, { def: element, size: itemSize, className: extra }, i));
100
+ }) }));
101
+ };
102
+ exports.CTABlockComponent = CTABlockComponent;
103
+ exports.default = exports.CTABlockComponent;
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import type { ButtonSize } from '../backends/gui/button.js';
3
+ import type { ButtonDef, LinkDef } from '../types.js';
4
+ import { type BlockComponentProps } from './spec.js';
5
+ export declare const CTABlockComponent: ({ block, className, itemClasses, itemSize, renderLink, renderButton, agent, }: BlockComponentProps & {
6
+ itemClasses?: string;
7
+ /** Overrides the size in each def. */
8
+ itemSize?: ButtonSize | null;
9
+ renderLink?: (def: LinkDef, key: number) => React.ReactElement;
10
+ renderButton?: (def: ButtonDef, key: number) => React.ReactElement;
11
+ }) => import("react/jsx-runtime").JSX.Element;
12
+ export default CTABlockComponent;
13
+ //# sourceMappingURL=cta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cta.d.ts","sourceRoot":"","sources":["../../src/blocks/cta.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,KAAK,mBAAmB,EAAO,MAAM,QAAQ,CAAA;AAuCtD,eAAO,MAAM,iBAAiB,kFAQ3B,mBAAmB,GAAG;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAC5B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAA;IAC9D,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAA;CACnE,4CAyDA,CAAA;eAEc,iBAAiB"}
@@ -0,0 +1,67 @@
1
+ 'use client';
2
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { LinkElement } from '../backends/gui/link.js';
5
+ import { Box } from '../box.js';
6
+ import { cn } from '../core/cn.js';
7
+ import { has } from './spec.js';
8
+ /**
9
+ * A button whose action is a modal.
10
+ *
11
+ * `ButtonDef` carries the modal COMPONENT rather than a modal, so the library
12
+ * never has to know what the app's dialog is: this opens it, closes it, and
13
+ * hands it the action to run. The 5.x line shipped this file empty, so every
14
+ * `ButtonDef` in a cta rendered nothing at all.
15
+ */
16
+ const ActionButton = ({ def, size, className, }) => {
17
+ const [open, setOpen] = React.useState(false);
18
+ const modal = def.action.def;
19
+ const { Comp } = modal;
20
+ return (_jsx(Comp, { open: open, onOpenChange: setOpen, buttonText: def.text, buttonProps: { ...def.props, ...(size ? { size } : {}), className }, title: modal.title, byline: modal.byline, action: modal.action ?? (async () => undefined), actionEnclosure: modal.actionEnclosure }));
21
+ };
22
+ /** A def with a `title` is a link; anything else is a button. */
23
+ const isLink = (e) => 'title' in e || 'href' in e;
24
+ export const CTABlockComponent = ({ block, className, itemClasses, itemSize, renderLink, renderButton, agent, }) => {
25
+ if (block.blockType !== 'cta')
26
+ return _jsx(_Fragment, { children: "cta block required" });
27
+ const { elements, specifiers } = block;
28
+ const spec = (s) => has(specifiers, s);
29
+ const justify = spec('fill')
30
+ ? 'w-full'
31
+ : spec('left')
32
+ ? 'md:justify-start'
33
+ : spec('right')
34
+ ? 'md:justify-end'
35
+ : 'md:justify-center';
36
+ const twoUp = spec('mobile-2-columns');
37
+ const fillEvenly = !spec('desktop-dont-fill');
38
+ const centerFirst = spec('mobile-center-first-if-odd');
39
+ const oddFullWidth = spec('mobile-odd-full-width');
40
+ let layout = 'flex flex-col items-stretch gap-2 self-stretch md:flex-row sm:justify-center';
41
+ let item = spec('fill') ? 'grow shrink min-w-0' : '';
42
+ if (elements.length > 1) {
43
+ if (twoUp || fillEvenly) {
44
+ layout = 'grid grid-cols-2 gap-2 self-stretch';
45
+ item += ' min-w-0';
46
+ }
47
+ else {
48
+ layout = 'flex flex-row justify-center';
49
+ }
50
+ }
51
+ /** With an odd count in two columns, one element spans both. */
52
+ const span = (i, total) => {
53
+ if (!(agent === 'phone' && twoUp))
54
+ return '';
55
+ const centred = total % 2 === 0 ? -1 : centerFirst ? 0 : total - 1;
56
+ return i === centred ? `col-span-2 ${oddFullWidth ? 'w-full' : 'w-3/5 mx-auto'}` : '';
57
+ };
58
+ return (_jsx(Box, { className: cn(layout, justify, className), children: elements.map((element, i) => {
59
+ const extra = cn(item, itemClasses, span(i, elements.length));
60
+ if (isLink(element)) {
61
+ return renderLink ? (renderLink(element, i)) : (_jsx(LinkElement, { def: element, size: itemSize, className: extra }, i));
62
+ }
63
+ return renderButton ? (renderButton(element, i)) : (_jsx(ActionButton, { def: element, size: itemSize, className: extra }, i));
64
+ }) }));
65
+ };
66
+ export default CTABlockComponent;
67
+ //# sourceMappingURL=cta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cta.js","sourceRoot":"","sources":["../../src/blocks/cta.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ 'use client';"use strict";
2
+ // The block vocabulary — what a site AUTHORS, with no renderer attached.
3
+ //
4
+ // A block is data: `blockType` picks the renderer, and the rest of the fields
5
+ // are that renderer's input. So a page is a `Block[]` that can be written in a
6
+ // CMS, checked into a repo, or produced by a server, and typed either way.
7
+ //
8
+ // Every `specifiers` field is a space-separated bag of layout hints read by the
9
+ // matching component. It is deliberately a string rather than a union: a site
10
+ // adds a hint by typing one, and an unrecognised hint is ignored rather than
11
+ // failing the build.
12
+ //
13
+ // Flat, for the reason given in ../types: the 5.x line spread these over
14
+ // sixteen files exporting `default`, so the imported name was never the name the
15
+ // file declared.
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.SPACE_DEFAULTS = void 0;
18
+ exports.SPACE_DEFAULTS = {
19
+ xs: 2,
20
+ sm: 4,
21
+ md: 5,
22
+ lg: 6,
23
+ xl: 8,
24
+ };