@hraness/design-kit 0.41.0 → 0.41.1
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/README.md +6 -2
- package/dist/{chunk-9sjaav5t.js → chunk-kgrbekna.js} +43 -8
- package/dist/react/index.js +11 -3
- package/dist/react/server.js +1 -1
- package/dist/stylex-manifest.json +1 -1
- package/dist/stylex.css +44 -6
- package/package.json +1 -1
- package/portfolio-inventory.json +1 -1
- package/src/product-marketing-foundation.css +5 -1
- package/src/product-marketing.css +55 -5
- package/src/react/design-gallery.tsx +2 -2
- package/src/react/product-marketing.stylex.ts +36 -4
- package/src/react/product-marketing.tsx +16 -4
package/dist/stylex.css
CHANGED
|
@@ -85,6 +85,10 @@
|
|
|
85
85
|
padding: .5rem 1rem 4rem;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
.xrqs5gp {
|
|
89
|
+
padding: .5rem 1rem;
|
|
90
|
+
}
|
|
91
|
+
|
|
88
92
|
.x1i4hug3 {
|
|
89
93
|
padding: .65rem .8rem;
|
|
90
94
|
}
|
|
@@ -101,10 +105,6 @@
|
|
|
101
105
|
padding: .75rem .95rem;
|
|
102
106
|
}
|
|
103
107
|
|
|
104
|
-
.x86o7ao {
|
|
105
|
-
padding: .8rem 1rem;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
108
|
.x1717udv {
|
|
109
109
|
padding: 0;
|
|
110
110
|
}
|
|
@@ -864,6 +864,10 @@
|
|
|
864
864
|
padding-inline: var(--hraness-marketing-gutter);
|
|
865
865
|
}
|
|
866
866
|
|
|
867
|
+
.x18wjirm {
|
|
868
|
+
padding-inline: var(--hraness-marketing-question-inline-inset, 1.25rem);
|
|
869
|
+
}
|
|
870
|
+
|
|
867
871
|
.xfmotut {
|
|
868
872
|
padding-inline: var(--layout-chrome-inset);
|
|
869
873
|
}
|
|
@@ -2939,6 +2943,10 @@
|
|
|
2939
2943
|
margin-block-start: 1rem;
|
|
2940
2944
|
}
|
|
2941
2945
|
|
|
2946
|
+
.x1n5yk0f {
|
|
2947
|
+
margin-block-start: auto;
|
|
2948
|
+
}
|
|
2949
|
+
|
|
2942
2950
|
.xvc5jky {
|
|
2943
2951
|
margin-inline-start: auto;
|
|
2944
2952
|
}
|
|
@@ -3386,6 +3394,10 @@
|
|
|
3386
3394
|
text-align: center;
|
|
3387
3395
|
}
|
|
3388
3396
|
|
|
3397
|
+
.xp4054r {
|
|
3398
|
+
text-align: end;
|
|
3399
|
+
}
|
|
3400
|
+
|
|
3389
3401
|
.x1yc453h {
|
|
3390
3402
|
text-align: start;
|
|
3391
3403
|
}
|
|
@@ -3424,6 +3436,10 @@
|
|
|
3424
3436
|
text-transform: uppercase;
|
|
3425
3437
|
}
|
|
3426
3438
|
|
|
3439
|
+
.x5hzr90 {
|
|
3440
|
+
text-underline-offset: .18em;
|
|
3441
|
+
}
|
|
3442
|
+
|
|
3427
3443
|
.xdsgf93 {
|
|
3428
3444
|
text-underline-offset: .22em;
|
|
3429
3445
|
}
|
|
@@ -3709,6 +3725,10 @@
|
|
|
3709
3725
|
color: var(--hraness-appearance-accent-foreground, var(--hraness-material-ink, var(--ui-accent-foreground, ButtonText)));
|
|
3710
3726
|
}
|
|
3711
3727
|
|
|
3728
|
+
.x1eyr600:focus-visible {
|
|
3729
|
+
color: var(--hraness-marketing-ink);
|
|
3730
|
+
}
|
|
3731
|
+
|
|
3712
3732
|
.x89zja:is([data-hovered], :hover) {
|
|
3713
3733
|
color: var(--secondary-foreground);
|
|
3714
3734
|
}
|
|
@@ -4943,8 +4963,26 @@
|
|
|
4943
4963
|
transform: translate3d(0, -4vh, 0);
|
|
4944
4964
|
}
|
|
4945
4965
|
|
|
4946
|
-
.
|
|
4947
|
-
|
|
4966
|
+
.x78hkw1:after {
|
|
4967
|
+
transition-duration: .24s;
|
|
4968
|
+
}
|
|
4969
|
+
|
|
4970
|
+
.xjocvvi:after {
|
|
4971
|
+
transition-property: transform;
|
|
4972
|
+
}
|
|
4973
|
+
|
|
4974
|
+
.x15fj410:after {
|
|
4975
|
+
transition-timing-function: cubic-bezier(.16, 1, .3, 1);
|
|
4976
|
+
}
|
|
4977
|
+
|
|
4978
|
+
.xba5a1s.xba5a1s:where(.x1mw0dh9[open] *):after {
|
|
4979
|
+
transform: rotate(135deg);
|
|
4980
|
+
}
|
|
4981
|
+
|
|
4982
|
+
@media (prefers-reduced-motion: reduce) {
|
|
4983
|
+
.x4oqjru.x4oqjru:after {
|
|
4984
|
+
transition-duration: 0s;
|
|
4985
|
+
}
|
|
4948
4986
|
}
|
|
4949
4987
|
}
|
|
4950
4988
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hraness/design-kit",
|
|
3
|
-
"version": "0.41.
|
|
3
|
+
"version": "0.41.1",
|
|
4
4
|
"description": "React components and CSS for Hraness apps and product sites: application shells, marketing sections, charts, themes, effects, and syntax highlighting. Built on @hraness/ui.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
package/portfolio-inventory.json
CHANGED
|
@@ -304,10 +304,14 @@
|
|
|
304
304
|
line-height: 1.5;
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
.hraness-marketing-interface pre {
|
|
307
|
+
.hraness-marketing-interface > :where(pre) {
|
|
308
308
|
margin-block-start: 0.5rem;
|
|
309
309
|
}
|
|
310
310
|
|
|
311
|
+
.hraness-marketing-interface :where(pre) {
|
|
312
|
+
font-size: 0.78rem;
|
|
313
|
+
}
|
|
314
|
+
|
|
311
315
|
.hraness-marketing-question__answer > :first-child {
|
|
312
316
|
margin-block-start: 0;
|
|
313
317
|
}
|
|
@@ -1081,7 +1081,7 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
1081
1081
|
display: flex;
|
|
1082
1082
|
align-items: center;
|
|
1083
1083
|
gap: 0.75rem;
|
|
1084
|
-
padding: 0.
|
|
1084
|
+
padding: 0.5rem 1rem;
|
|
1085
1085
|
background-image: var(--hraness-marketing-frame-chrome, none);
|
|
1086
1086
|
box-shadow: var(--hraness-marketing-chrome-shadow);
|
|
1087
1087
|
border-block-end: var(--hraness-marketing-chrome-rule);
|
|
@@ -1641,10 +1641,8 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
1641
1641
|
|
|
1642
1642
|
.hraness-marketing-interface,
|
|
1643
1643
|
.hraness-marketing-trust-item {
|
|
1644
|
-
display: grid;
|
|
1645
1644
|
min-inline-size: 0;
|
|
1646
1645
|
min-block-size: 100%;
|
|
1647
|
-
align-content: start;
|
|
1648
1646
|
gap: 0.5rem;
|
|
1649
1647
|
padding: clamp(1.25rem, 2.5vw, 1.75rem);
|
|
1650
1648
|
border: var(--hraness-marketing-surface-rule);
|
|
@@ -1653,6 +1651,17 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
1653
1651
|
box-shadow: var(--hraness-marketing-surface-shadow);
|
|
1654
1652
|
}
|
|
1655
1653
|
|
|
1654
|
+
/* A vertical column lets the optional action pin to the foot of the card. */
|
|
1655
|
+
.hraness-marketing-interface {
|
|
1656
|
+
display: flex;
|
|
1657
|
+
flex-direction: column;
|
|
1658
|
+
}
|
|
1659
|
+
|
|
1660
|
+
.hraness-marketing-trust-item {
|
|
1661
|
+
display: grid;
|
|
1662
|
+
align-content: start;
|
|
1663
|
+
}
|
|
1664
|
+
|
|
1656
1665
|
.hraness-marketing-interface :where(.hraness-marketing-interface__heading, p),
|
|
1657
1666
|
.hraness-marketing-trust-item :where(dt, dd) {
|
|
1658
1667
|
margin: 0;
|
|
@@ -1672,10 +1681,42 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
1672
1681
|
line-height: 1.5;
|
|
1673
1682
|
}
|
|
1674
1683
|
|
|
1675
|
-
.
|
|
1684
|
+
/* The card's reference link sits at the foot, quiet and end-aligned. */
|
|
1685
|
+
.hraness-marketing-interface .hraness-marketing-interface__action {
|
|
1686
|
+
margin-block-start: auto;
|
|
1687
|
+
font-size: 0.85rem;
|
|
1688
|
+
text-align: end;
|
|
1689
|
+
}
|
|
1690
|
+
|
|
1691
|
+
.hraness-marketing-interface__link {
|
|
1692
|
+
color: var(--hraness-marketing-muted);
|
|
1693
|
+
text-decoration-line: underline;
|
|
1694
|
+
text-decoration-style: dotted;
|
|
1695
|
+
text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
|
|
1696
|
+
text-decoration-thickness: 1px;
|
|
1697
|
+
text-underline-offset: 0.18em;
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1700
|
+
.hraness-marketing-interface__link:hover,
|
|
1701
|
+
.hraness-marketing-interface__link:focus-visible {
|
|
1702
|
+
color: var(--hraness-marketing-ink);
|
|
1703
|
+
text-decoration-color: currentColor;
|
|
1704
|
+
}
|
|
1705
|
+
|
|
1706
|
+
@media (forced-colors: active) {
|
|
1707
|
+
.hraness-marketing-interface__link {
|
|
1708
|
+
color: LinkText;
|
|
1709
|
+
}
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1712
|
+
.hraness-marketing-interface > :where(pre) {
|
|
1676
1713
|
margin-block-start: 0.5rem;
|
|
1677
1714
|
}
|
|
1678
1715
|
|
|
1716
|
+
.hraness-marketing-interface :where(pre) {
|
|
1717
|
+
font-size: 0.78rem;
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1679
1720
|
/* Equal-height product card rows. Direct children stretch to the tallest
|
|
1680
1721
|
* item. Meta occupies a reserved two-line block so one long blurb does not
|
|
1681
1722
|
* stagger the row. Titles wrap without clamping. Each card is a containing
|
|
@@ -2009,6 +2050,7 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
2009
2050
|
justify-content: space-between;
|
|
2010
2051
|
gap: 1rem;
|
|
2011
2052
|
padding-block: 1rem;
|
|
2053
|
+
padding-inline: var(--hraness-marketing-question-inline-inset, 1.25rem);
|
|
2012
2054
|
color: var(--hraness-marketing-ink);
|
|
2013
2055
|
cursor: pointer;
|
|
2014
2056
|
font-size: 1.05rem;
|
|
@@ -2027,10 +2069,11 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
2027
2069
|
font-size: 1.25rem;
|
|
2028
2070
|
font-weight: 400;
|
|
2029
2071
|
line-height: 1;
|
|
2072
|
+
transition: transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2030
2073
|
}
|
|
2031
2074
|
|
|
2032
2075
|
.hraness-marketing-question[open] summary::after {
|
|
2033
|
-
transform: rotate(
|
|
2076
|
+
transform: rotate(135deg);
|
|
2034
2077
|
}
|
|
2035
2078
|
|
|
2036
2079
|
.hraness-marketing-question summary:focus-visible {
|
|
@@ -2042,6 +2085,7 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
2042
2085
|
.hraness-marketing-question__answer {
|
|
2043
2086
|
max-inline-size: var(--hraness-marketing-prose-measure);
|
|
2044
2087
|
padding-block: 0 1.5rem;
|
|
2088
|
+
padding-inline: var(--hraness-marketing-question-inline-inset, 1.25rem);
|
|
2045
2089
|
color: var(--hraness-marketing-muted);
|
|
2046
2090
|
line-height: 1.6;
|
|
2047
2091
|
}
|
|
@@ -2259,6 +2303,12 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
2259
2303
|
}
|
|
2260
2304
|
}
|
|
2261
2305
|
|
|
2306
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2307
|
+
.hraness-marketing-question summary::after {
|
|
2308
|
+
transition: none;
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2311
|
+
|
|
2262
2312
|
@media (forced-colors: active) {
|
|
2263
2313
|
.hraness-marketing-plan[data-emphasis="primary"] {
|
|
2264
2314
|
border-color: CanvasText;
|
|
@@ -512,8 +512,8 @@ export function DesignSystemGallery({
|
|
|
512
512
|
<p>Consumer-owned content can include <a href="#gallery-install">links</a> and <code>inline code</code>.</p>
|
|
513
513
|
</MarketingSection>
|
|
514
514
|
<MarketingInterfaceGrid columns={2} heading="Choose your interface." headingId="gallery-marketing-interfaces" headingLevel={3} label="Interfaces" interfaces={[
|
|
515
|
-
{ label: "CLI", summary: "Run a named job.", example: <MarketingCodeBlock code="relay run job-01"
|
|
516
|
-
{ label: "SDK", summary: "Use typed application code." },
|
|
515
|
+
{ label: "CLI", summary: "Run a named job.", example: <MarketingCodeBlock code="relay run job-01" />, link: { href: "#gallery-install", label: "Read the CLI guide" } },
|
|
516
|
+
{ label: "SDK", summary: "Use typed application code.", link: { href: "#gallery-install", label: "Read the SDK guide" } },
|
|
517
517
|
]} />
|
|
518
518
|
<MarketingCardRow ariaLabel="Release radar" columns={2} cards={[
|
|
519
519
|
{ art: <svg aria-hidden="true" viewBox="0 0 24 24" width="24" height="24"><circle cx="12" cy="12" r="8" /></svg>, href: "#marketing", title: "Grok 4.7", meta: "First observed 21 September 2026." },
|
|
@@ -1195,7 +1195,7 @@ export const marketingStyles = stylex.create({
|
|
|
1195
1195
|
"display": "flex",
|
|
1196
1196
|
"align-items": "center",
|
|
1197
1197
|
"gap": "0.75rem",
|
|
1198
|
-
"padding": "0.
|
|
1198
|
+
"padding": "0.5rem 1rem",
|
|
1199
1199
|
"background-image": { default: "var(--hraness-marketing-frame-chrome, none)", "@media (forced-colors: active)": "none" },
|
|
1200
1200
|
"box-shadow": { default: "var(--hraness-marketing-chrome-shadow)", "@media (forced-colors: active)": "none" },
|
|
1201
1201
|
"border-block-end": { "default": "var(--hraness-marketing-chrome-rule)", "@media (forced-colors: active)": "1px solid CanvasText" },
|
|
@@ -2216,10 +2216,10 @@ export const marketingStyles = stylex.create({
|
|
|
2216
2216
|
"grid-template-columns": "repeat(auto-fit, minmax(min(100%, var(--_hraness-marketing-grid-track, 16rem)), 1fr))"
|
|
2217
2217
|
},
|
|
2218
2218
|
"interface": {
|
|
2219
|
-
"display": "
|
|
2219
|
+
"display": "flex",
|
|
2220
|
+
"flex-direction": "column",
|
|
2220
2221
|
"min-inline-size": "0",
|
|
2221
2222
|
"min-block-size": "100%",
|
|
2222
|
-
"align-content": "start",
|
|
2223
2223
|
"gap": "0.5rem",
|
|
2224
2224
|
"padding": "clamp(1.25rem, 2.5vw, 1.75rem)",
|
|
2225
2225
|
"border-top": {
|
|
@@ -2395,6 +2395,28 @@ export const marketingStyles = stylex.create({
|
|
|
2395
2395
|
"font-size": "0.95rem",
|
|
2396
2396
|
"line-height": "1.5"
|
|
2397
2397
|
},
|
|
2398
|
+
"interface__action": {
|
|
2399
|
+
"margin-block-start": "auto",
|
|
2400
|
+
"font-size": "0.85rem",
|
|
2401
|
+
"text-align": "end"
|
|
2402
|
+
},
|
|
2403
|
+
"interface__link": {
|
|
2404
|
+
"color": {
|
|
2405
|
+
"default": "var(--hraness-marketing-muted)",
|
|
2406
|
+
":hover": "var(--hraness-marketing-ink)",
|
|
2407
|
+
":focus-visible": "var(--hraness-marketing-ink)",
|
|
2408
|
+
"@media (forced-colors: active)": "LinkText"
|
|
2409
|
+
},
|
|
2410
|
+
"text-decoration-line": "underline",
|
|
2411
|
+
"text-decoration-style": "dotted",
|
|
2412
|
+
"text-decoration-color": {
|
|
2413
|
+
"default": "color-mix(in srgb, currentColor 40%, transparent)",
|
|
2414
|
+
":hover": "currentColor",
|
|
2415
|
+
":focus-visible": "currentColor"
|
|
2416
|
+
},
|
|
2417
|
+
"text-decoration-thickness": "1px",
|
|
2418
|
+
"text-underline-offset": "0.18em"
|
|
2419
|
+
},
|
|
2398
2420
|
"trust_item__label": {
|
|
2399
2421
|
"margin": "0",
|
|
2400
2422
|
"font-size": "1.05rem",
|
|
@@ -3026,6 +3048,7 @@ export const marketingStyles = stylex.create({
|
|
|
3026
3048
|
"justify-content": "space-between",
|
|
3027
3049
|
"gap": "1rem",
|
|
3028
3050
|
"padding-block": "1rem",
|
|
3051
|
+
"padding-inline": "var(--hraness-marketing-question-inline-inset, 1.25rem)",
|
|
3029
3052
|
"color": "var(--hraness-marketing-ink)",
|
|
3030
3053
|
"cursor": "pointer",
|
|
3031
3054
|
"font-size": "1.05rem",
|
|
@@ -3041,15 +3064,22 @@ export const marketingStyles = stylex.create({
|
|
|
3041
3064
|
"font-size": "1.25rem",
|
|
3042
3065
|
"font-weight": "400",
|
|
3043
3066
|
"line-height": "1",
|
|
3067
|
+
"transition-duration": {
|
|
3068
|
+
"default": "240ms",
|
|
3069
|
+
"@media (prefers-reduced-motion: reduce)": "0ms"
|
|
3070
|
+
},
|
|
3071
|
+
"transition-property": "transform",
|
|
3072
|
+
"transition-timing-function": "cubic-bezier(0.16, 1, 0.3, 1)",
|
|
3044
3073
|
"transform": {
|
|
3045
3074
|
"default": null,
|
|
3046
|
-
[stylex.when.ancestor("[open]", questionMarker)]: "rotate(
|
|
3075
|
+
[stylex.when.ancestor("[open]", questionMarker)]: "rotate(135deg)"
|
|
3047
3076
|
}
|
|
3048
3077
|
}
|
|
3049
3078
|
},
|
|
3050
3079
|
"question__answer": {
|
|
3051
3080
|
"max-inline-size": "var(--hraness-marketing-prose-measure)",
|
|
3052
3081
|
"padding-block": "0 1.5rem",
|
|
3082
|
+
"padding-inline": "var(--hraness-marketing-question-inline-inset, 1.25rem)",
|
|
3053
3083
|
"color": "var(--hraness-marketing-muted)",
|
|
3054
3084
|
"line-height": "1.6"
|
|
3055
3085
|
},
|
|
@@ -4475,6 +4505,8 @@ const recipes = {
|
|
|
4475
4505
|
"hraness-marketing-trust-item": { "default": marketingStyles.trust_item },
|
|
4476
4506
|
"hraness-marketing-interface__heading": { "default": marketingStyles.interface__heading },
|
|
4477
4507
|
"hraness-marketing-interface__summary": { "default": marketingStyles.interface__summary },
|
|
4508
|
+
"hraness-marketing-interface__action": { "default": marketingStyles.interface__action },
|
|
4509
|
+
"hraness-marketing-interface__link": { "default": marketingStyles.interface__link },
|
|
4478
4510
|
"hraness-marketing-trust-item__label": { "default": marketingStyles.trust_item__label },
|
|
4479
4511
|
"hraness-marketing-trust-item__detail": { "default": marketingStyles.trust_item__detail },
|
|
4480
4512
|
"hraness-marketing-card-row": { "default": marketingStyles.card_row },
|
|
@@ -745,7 +745,8 @@ export function marketingProofFrameAddress(url: string): string {
|
|
|
745
745
|
* A captioned frame around a screenshot, recording, or code-built mockup.
|
|
746
746
|
* `chrome` draws a window title bar, a browser address bar, or a terminal
|
|
747
747
|
* title bar above the content. A `title` without `chrome` keeps the window
|
|
748
|
-
* bar. The browser bar shows `url` as host and path.
|
|
748
|
+
* bar. The browser bar shows `url` as host and path. A window or terminal
|
|
749
|
+
* bar without a title draws only the window lights.
|
|
749
750
|
*/
|
|
750
751
|
export function MarketingProofFrame({
|
|
751
752
|
caption,
|
|
@@ -773,8 +774,8 @@ export function MarketingProofFrame({
|
|
|
773
774
|
if (url !== undefined && chrome !== "browser") throw new RangeError("Proof frame url needs chrome=\"browser\".");
|
|
774
775
|
const bar = chrome ?? (title === undefined ? undefined : "window");
|
|
775
776
|
const label = bar === "browser" ? (url === undefined ? title : marketingProofFrameAddress(url)) : title;
|
|
776
|
-
if (bar
|
|
777
|
-
throw new RangeError(
|
|
777
|
+
if (bar === "browser" && (label === undefined || label.trim() === "")) {
|
|
778
|
+
throw new RangeError("Proof frame chrome=browser needs a url or title.");
|
|
778
779
|
}
|
|
779
780
|
return (
|
|
780
781
|
<figure
|
|
@@ -793,7 +794,9 @@ export function MarketingProofFrame({
|
|
|
793
794
|
</span>
|
|
794
795
|
{bar === "browser"
|
|
795
796
|
? <span className={classNames("hraness-marketing-proof-frame__address")}>{label}</span>
|
|
796
|
-
:
|
|
797
|
+
: label === undefined || label.trim() === ""
|
|
798
|
+
? null
|
|
799
|
+
: <span className={classNames("hraness-marketing-proof-frame__title", undefined, bar === "terminal" ? "terminal" : "default")}>{label}</span>}
|
|
797
800
|
</div>
|
|
798
801
|
)}
|
|
799
802
|
<div className={classNames("hraness-marketing-proof-frame__content")}>{children}</div>
|
|
@@ -1168,6 +1171,8 @@ export function MarketingStatStrip({
|
|
|
1168
1171
|
export interface MarketingInterface {
|
|
1169
1172
|
readonly example?: ReactNode;
|
|
1170
1173
|
readonly label: string;
|
|
1174
|
+
/** A reference link pinned to the foot of the card, aligned to the end. */
|
|
1175
|
+
readonly link?: MarketingLink;
|
|
1171
1176
|
readonly summary: string;
|
|
1172
1177
|
}
|
|
1173
1178
|
|
|
@@ -1212,6 +1217,13 @@ export function MarketingInterfaceGrid({
|
|
|
1212
1217
|
</Heading>
|
|
1213
1218
|
<p className={classNames("hraness-marketing-interface__summary")}>{entry.summary}</p>
|
|
1214
1219
|
{entry.example}
|
|
1220
|
+
{entry.link === undefined
|
|
1221
|
+
? null
|
|
1222
|
+
: (
|
|
1223
|
+
<p className={classNames("hraness-marketing-interface__action")}>
|
|
1224
|
+
<a className={classNames("hraness-marketing-interface__link")} data-hraness-marketing="interfaces" href={entry.link.href}>{entry.link.label}</a>
|
|
1225
|
+
</p>
|
|
1226
|
+
)}
|
|
1215
1227
|
</article>
|
|
1216
1228
|
))}
|
|
1217
1229
|
</div>
|