lion-make 0.1.0 → 0.3.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.
- package/dist/components/footer/Disclosure.d.ts +3 -2
- package/dist/components/footer/DisclosureToggleOpen.d.ts +13 -0
- package/dist/components/footer/LegalLinks.d.ts +16 -0
- package/dist/components/footer/LinksAndSocial.d.ts +25 -0
- package/dist/components/general/AccordionBlock.d.ts +15 -0
- package/dist/components/general/AllBlogsPostBlock.d.ts +21 -0
- package/dist/components/general/BackgroundColorBlock.d.ts +12 -0
- package/dist/components/general/BasicContentBlock.d.ts +18 -0
- package/dist/components/general/BodyTextCopyBlock.d.ts +12 -0
- package/dist/components/general/ContentImageBlock.d.ts +15 -0
- package/dist/components/general/CrossSellCardBlock.d.ts +18 -0
- package/dist/components/general/DecorativeListBlock.d.ts +13 -0
- package/dist/components/general/EmailCalloutBlock.d.ts +14 -0
- package/dist/components/general/EmbeddedVideoBlock.d.ts +15 -0
- package/dist/components/general/FullSizeImageWithHighlightBox.d.ts +21 -0
- package/dist/components/general/HorizontalRule.d.ts +13 -0
- package/dist/components/general/HotJobsBlock.d.ts +21 -0
- package/dist/components/general/InlineMessage.d.ts +14 -0
- package/dist/components/general/LastChanceBlock.d.ts +15 -0
- package/dist/components/general/MultiStepLeadForm.d.ts +19 -0
- package/dist/components/general/MultiTestimonial.d.ts +19 -0
- package/dist/components/general/OptIn.d.ts +16 -0
- package/dist/components/general/ProductBlock.d.ts +17 -0
- package/dist/components/general/PullQuote.d.ts +12 -0
- package/dist/components/general/RTBDescriptive.d.ts +18 -0
- package/dist/components/general/RTBDynamic.d.ts +21 -0
- package/dist/components/general/RTBHighlight.d.ts +18 -0
- package/dist/components/general/RecentBlogPostsBlock.d.ts +22 -0
- package/dist/components/general/ResourceSpotlight.d.ts +18 -0
- package/dist/components/general/SideMenuExplorer.d.ts +16 -0
- package/dist/components/general/SimpleCTABlock.d.ts +15 -0
- package/dist/components/general/SpacingBlock.d.ts +12 -0
- package/dist/components/general/SpeedBump.d.ts +16 -0
- package/dist/components/general/TableBlock.d.ts +13 -0
- package/dist/components/general/WAHFU.d.ts +15 -0
- package/dist/components/header/HeaderCTA.d.ts +9 -0
- package/dist/components/header/HeaderLogo.d.ts +10 -0
- package/dist/components/header/HeaderProduct.d.ts +10 -0
- package/dist/components/header/HeaderSectionNavigation.d.ts +12 -0
- package/dist/components/header/HeaderSectionTitle.d.ts +8 -0
- package/dist/components/header/HeaderUnderwriter.d.ts +9 -0
- package/dist/components/header/TopLevelNavigation.d.ts +13 -0
- package/dist/components/hero/CTAHeroBlock.d.ts +24 -0
- package/dist/components/hero/HeroBlock.d.ts +18 -0
- package/dist/components/hero/MultiHero.d.ts +25 -0
- package/dist/components/hero/NotAvailableHeroBlock.d.ts +22 -0
- package/dist/index.d.ts +92 -2
- package/dist/lion-make.js +1855 -545
- package/dist/lion-make.umd.cjs +10 -10
- package/guidelines/Guidelines.md +46 -50
- package/guidelines/composition/constraints.md +40 -8
- package/guidelines/composition/zones.md +49 -11
- package/guidelines/content-types/footer/anklet.md +62 -0
- package/guidelines/content-types/footer/compliance.md +49 -0
- package/guidelines/content-types/footer/disclaimers.md +48 -0
- package/guidelines/content-types/footer/disclosure-toggle-open.md +51 -0
- package/guidelines/content-types/footer/disclosures.md +50 -0
- package/guidelines/content-types/footer/legal-links.md +59 -0
- package/guidelines/content-types/footer/links-and-social.md +94 -0
- package/guidelines/content-types/footer/overview.md +73 -16
- package/guidelines/content-types/general/accordion-block.md +42 -0
- package/guidelines/content-types/general/all-blogs-post-block.md +52 -0
- package/guidelines/content-types/general/background-color-block.md +42 -0
- package/guidelines/content-types/general/basic-content-block.md +43 -0
- package/guidelines/content-types/general/body-text-copy-block.md +38 -0
- package/guidelines/content-types/general/content-image-block.md +37 -0
- package/guidelines/content-types/general/cross-sell-card-block.md +45 -0
- package/guidelines/content-types/general/decorative-list-block.md +40 -0
- package/guidelines/content-types/general/email-callout-block.md +38 -0
- package/guidelines/content-types/general/embedded-video-block.md +36 -0
- package/guidelines/content-types/general/full-size-image-with-highlight-box.md +52 -0
- package/guidelines/content-types/general/horizontal-rule.md +35 -0
- package/guidelines/content-types/general/hot-jobs-block.md +52 -0
- package/guidelines/content-types/general/inline-message.md +36 -0
- package/guidelines/content-types/general/last-chance-block.md +40 -0
- package/guidelines/content-types/general/multi-step-lead-form.md +60 -0
- package/guidelines/content-types/general/multi-testimonial.md +49 -0
- package/guidelines/content-types/general/opt-in.md +42 -0
- package/guidelines/content-types/general/overview.md +134 -24
- package/guidelines/content-types/general/product-block.md +43 -0
- package/guidelines/content-types/general/pull-quote.md +36 -0
- package/guidelines/content-types/general/recent-blog-posts-block.md +48 -0
- package/guidelines/content-types/general/resource-spotlight.md +44 -0
- package/guidelines/content-types/general/rtb-descriptive.md +53 -0
- package/guidelines/content-types/general/rtb-dynamic.md +55 -0
- package/guidelines/content-types/general/rtb-highlight.md +50 -0
- package/guidelines/content-types/general/side-menu-explorer.md +62 -0
- package/guidelines/content-types/general/simple-cta-block.md +44 -0
- package/guidelines/content-types/general/spacing-block.md +40 -0
- package/guidelines/content-types/general/speed-bump.md +45 -0
- package/guidelines/content-types/general/table-block.md +55 -0
- package/guidelines/content-types/general/wahfu.md +66 -0
- package/guidelines/content-types/header/header-cta.md +41 -0
- package/guidelines/content-types/header/header-logo.md +45 -0
- package/guidelines/content-types/header/header-product.md +45 -0
- package/guidelines/content-types/header/header-section-navigation.md +55 -0
- package/guidelines/content-types/header/header-section-title.md +43 -0
- package/guidelines/content-types/header/header-underwriter.md +46 -0
- package/guidelines/content-types/header/overview.md +61 -15
- package/guidelines/content-types/header/top-level-navigation.md +70 -0
- package/guidelines/content-types/hero/cta-hero-block.md +70 -0
- package/guidelines/content-types/hero/hero-block.md +56 -0
- package/guidelines/content-types/hero/multi-hero.md +78 -0
- package/guidelines/content-types/hero/not-available-hero-block.md +64 -0
- package/guidelines/content-types/hero/overview.md +53 -18
- package/guidelines/content-types/overview.md +86 -29
- package/guidelines/discovery.md +158 -0
- package/guidelines/setup.md +90 -16
- package/package.json +1 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Multi-Testimonial
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A responsive grid of customer or member testimonials. Supports optional star ratings, author photos, and role attribution. Use to build social proof near conversion points.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `testimonials` | `Testimonial[]` | Yes | Array of testimonials (recommended: 2–6) |
|
|
14
|
+
| `heading` | `string` | No | Optional section heading |
|
|
15
|
+
| `className` | `string` | No | Additional CSS class |
|
|
16
|
+
|
|
17
|
+
### Testimonial
|
|
18
|
+
|
|
19
|
+
| Prop | Type | Required | Description |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| `quote` | `string` | Yes | The testimonial text |
|
|
22
|
+
| `author` | `string` | Yes | Name of the person |
|
|
23
|
+
| `role` | `string` | No | Job title, location, or product context |
|
|
24
|
+
| `imageSrc` | `string` | No | Author photo URL |
|
|
25
|
+
| `imageAlt` | `string` | No | Photo alt text (defaults to author name) |
|
|
26
|
+
| `rating` | `1 \| 2 \| 3 \| 4 \| 5` | No | Star rating |
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import { MultiTestimonial } from 'lion-make'
|
|
32
|
+
|
|
33
|
+
<MultiTestimonial
|
|
34
|
+
heading="What our customers say"
|
|
35
|
+
testimonials={[
|
|
36
|
+
{ quote: 'Getting coverage was easier than I expected.', author: 'Sarah M.', role: 'Term Life customer', rating: 5 },
|
|
37
|
+
{ quote: 'The price was right and the process was simple.', author: 'James T.', role: 'Whole Life customer', rating: 5 },
|
|
38
|
+
{ quote: 'Finally found a plan that fits my budget.', author: 'Linda K.', role: 'Medicare Supplement customer', rating: 4 },
|
|
39
|
+
]}
|
|
40
|
+
/>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Design Tokens
|
|
44
|
+
|
|
45
|
+
- Card background: `var(--color-gray-lightest)`
|
|
46
|
+
- Card border radius: `var(--border-radius-base)`
|
|
47
|
+
- Star color: `var(--color-gold)`
|
|
48
|
+
- Quote: italic, `var(--font-size-base)`
|
|
49
|
+
- Author: `var(--font-weight-600)`
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Opt-In
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Email marketing opt-in block. Captures an email address with explicit consent checkbox. Distinct from `EmailCalloutBlock` (no consent) and `LeadForm` (multi-field, sales intent). Use when CAN-SPAM/TCPA compliance requires a documented opt-in.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `heading` | `string` | Yes | — | Block headline |
|
|
14
|
+
| `body` | `string` | No | — | Supporting copy |
|
|
15
|
+
| `emailLabel` | `string` | No | `'Email address'` | Field label |
|
|
16
|
+
| `submitLabel` | `string` | No | `'Sign me up'` | Submit button label |
|
|
17
|
+
| `onSubmit` | `(email: string, optedIn: boolean) => void` | No | — | Submission callback |
|
|
18
|
+
| `defaultChecked` | `boolean` | No | `false` | Pre-check the consent box |
|
|
19
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { OptIn } from 'lion-make'
|
|
25
|
+
|
|
26
|
+
<OptIn
|
|
27
|
+
heading="Get coverage tips in your inbox"
|
|
28
|
+
body="Monthly guidance on protecting your family — unsubscribe anytime."
|
|
29
|
+
submitLabel="Sign me up"
|
|
30
|
+
onSubmit={(email, optedIn) => { if (optedIn) subscribeToMarketing(email) }}
|
|
31
|
+
/>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Compliance Note
|
|
35
|
+
|
|
36
|
+
The `optedIn` boolean in the callback is the user's explicit consent. Do not add them to marketing lists if `optedIn` is `false`.
|
|
37
|
+
|
|
38
|
+
## Design Tokens
|
|
39
|
+
|
|
40
|
+
- Submit: `var(--color-brand)` background, `var(--color-white)` text
|
|
41
|
+
- Input border: `var(--border-width-base)` solid `var(--color-line)`
|
|
42
|
+
- Consent text: `var(--h6-font-size)`, `var(--color-gray-dark)`
|
|
@@ -8,39 +8,149 @@ General content types make up the bulk of page body content. They are the most v
|
|
|
8
8
|
|
|
9
9
|
| Content Type | Component | Primary Column | Sideburn | Outro |
|
|
10
10
|
|---|---|---|---|---|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
11
|
+
| Accordion Block | `AccordionBlock` | Yes | Yes | Yes |
|
|
12
|
+
| All Blogs Post Block | `AllBlogsPostBlock` | Yes | No | No |
|
|
13
|
+
| Background Color Block | `BackgroundColorBlock` | Yes | Yes | Yes |
|
|
14
|
+
| Basic Content Block | `BasicContentBlock` | Yes | Yes | Yes |
|
|
15
|
+
| Body Text Copy Block | `BodyTextCopyBlock` | Yes | Yes | Yes |
|
|
16
|
+
| Call-Out Block | `CallOut` | Yes | Yes | Yes |
|
|
14
17
|
| Confidence Tags | `ConfidenceTags` | Yes | Yes | Yes |
|
|
18
|
+
| Content Image Block | `ContentImageBlock` | Yes | Yes | Yes |
|
|
19
|
+
| Cross-Sell Card Block | `CrossSellCardBlock` | Yes | No | Yes |
|
|
20
|
+
| CTA | `CTA` | Yes | Yes | Yes |
|
|
21
|
+
| Decorative List Block | `DecorativeListBlock` | Yes | Yes | Yes |
|
|
22
|
+
| Email Call-out Block | `EmailCalloutBlock` | Yes | No | Yes |
|
|
23
|
+
| Embedded Video Block | `EmbeddedVideoBlock` | Yes | No | Yes |
|
|
24
|
+
| Full Size Image with Highlight Box | `FullSizeImageWithHighlightBox` | Yes | No | No |
|
|
25
|
+
| Horizontal Rule | `HorizontalRule` | Yes | Yes | Yes |
|
|
26
|
+
| Hot Jobs Block | `HotJobsBlock` | Yes | No | Yes |
|
|
27
|
+
| Inline Message | `InlineMessage` | Yes | Yes | Yes |
|
|
28
|
+
| Last Chance Block | `LastChanceBlock` | Yes | No | Yes |
|
|
15
29
|
| Lead Form | `LeadForm` | Yes | No | Yes |
|
|
30
|
+
| Multi-Step Lead Form | `MultiStepLeadForm` | Yes | No | Yes |
|
|
31
|
+
| Multi-Testimonial | `MultiTestimonial` | Yes | No | Yes |
|
|
32
|
+
| Opt-In | `OptIn` | Yes | No | Yes |
|
|
33
|
+
| Product Block | `ProductBlock` | Yes | Yes | Yes |
|
|
34
|
+
| Pull Quote | `PullQuote` | Yes | Yes | Yes |
|
|
35
|
+
| Recent Blog Posts Block | `RecentBlogPostsBlock` | Yes | No | Yes |
|
|
36
|
+
| Resource Spotlight | `ResourceSpotlight` | Yes | No | Yes |
|
|
16
37
|
| Rich Text | `RichText` | Yes | Yes | Yes |
|
|
38
|
+
| RTB - Descriptive | `RTBDescriptive` | Yes | Yes | Yes |
|
|
39
|
+
| RTB - Dynamic | `RTBDynamic` | Yes | No | Yes |
|
|
40
|
+
| RTB - Highlight | `RTBHighlight` | Yes | No | Yes |
|
|
41
|
+
| RTBs | `RTBs` | Yes | Yes | Yes |
|
|
42
|
+
| Side Menu Explorer | `SideMenuExplorer` | Yes | No | No |
|
|
43
|
+
| Simple CTA Block | `SimpleCTABlock` | Yes | Yes | Yes |
|
|
44
|
+
| Spacing Block | `SpacingBlock` | Yes | Yes | Yes |
|
|
45
|
+
| Speed Bump | `SpeedBump` | Yes | Yes | Yes |
|
|
46
|
+
| Table Block | `TableBlock` | Yes | No | Yes |
|
|
47
|
+
| WAHFU | `WAHFU` | Yes | No | Yes |
|
|
48
|
+
|
|
49
|
+
**Sideburn column restriction:** Wide, multi-column, or form-heavy content types are not allowed in the narrow 4-col Sideburn column. Use it for compact supporting content only.
|
|
50
|
+
|
|
51
|
+
## Decision Tree: Which general content type?
|
|
17
52
|
|
|
18
|
-
**Note:** Lead Form is not allowed in the Sideburn column — use it in Primary Column or Outro only.
|
|
19
|
-
|
|
20
|
-
## Placement Example
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
import { Section, Container, CTA, RTBs } from 'lion-make'
|
|
24
|
-
|
|
25
|
-
<Section zone="primary-column">
|
|
26
|
-
<Container type="single">
|
|
27
|
-
<RTBs items={[
|
|
28
|
-
{ heading: 'Affordable', body: 'Plans starting at $0.99 per month.' },
|
|
29
|
-
{ heading: 'No pressure', body: 'No sales calls. Cancel anytime.' },
|
|
30
|
-
{ heading: 'Real data', body: 'Actual coach contacts and roster openings.' },
|
|
31
|
-
]} />
|
|
32
|
-
</Container>
|
|
33
|
-
<Container type="single">
|
|
34
|
-
<CTA type="button" label="Start for $0.99" href="/start" variant="primary" />
|
|
35
|
-
</Container>
|
|
36
|
-
</Section>
|
|
37
53
|
```
|
|
54
|
+
Is it a form collecting user data?
|
|
55
|
+
→ Single-field email → EmailCalloutBlock
|
|
56
|
+
→ Multi-field → LeadForm
|
|
57
|
+
→ Multi-step guided → MultiStepLeadForm
|
|
58
|
+
→ Email opt-in consent → OptIn
|
|
59
|
+
|
|
60
|
+
Is it a CTA (button/link/phone)?
|
|
61
|
+
→ Standalone with context → SimpleCTABlock
|
|
62
|
+
→ Pure CTA element → CTA
|
|
63
|
+
→ Highlighted block → CallOut
|
|
64
|
+
|
|
65
|
+
Is it a value proposition list?
|
|
66
|
+
→ Long explanatory copy → RTBDescriptive
|
|
67
|
+
→ Stat/number callouts → RTBHighlight
|
|
68
|
+
→ Data-driven grid → RTBDynamic
|
|
69
|
+
→ Illustration list → RTBs
|
|
70
|
+
|
|
71
|
+
Is it a trust signal?
|
|
72
|
+
→ Badge trio → ConfidenceTags
|
|
73
|
+
→ Customer quotes → MultiTestimonial
|
|
74
|
+
→ Single pull quote → PullQuote
|
|
75
|
+
→ Empathy/support → WAHFU
|
|
76
|
+
|
|
77
|
+
Is it media content?
|
|
78
|
+
→ Image → ContentImageBlock
|
|
79
|
+
→ Full-width image + overlay → FullSizeImageWithHighlightBox
|
|
80
|
+
→ Video → EmbeddedVideoBlock
|
|
81
|
+
|
|
82
|
+
Is it structured or reference content?
|
|
83
|
+
→ Collapsible Q&A → AccordionBlock
|
|
84
|
+
→ Tabbed explorer → SideMenuExplorer
|
|
85
|
+
→ Data table → TableBlock
|
|
86
|
+
→ Styled list → DecorativeListBlock
|
|
87
|
+
|
|
88
|
+
Is it a product or cross-sell?
|
|
89
|
+
→ Single product → ProductBlock
|
|
90
|
+
→ Multiple products → CrossSellCardBlock
|
|
91
|
+
→ Related resource → ResourceSpotlight
|
|
92
|
+
|
|
93
|
+
Is it urgency-driven?
|
|
94
|
+
→ Deadline/enrollment → LastChanceBlock
|
|
95
|
+
|
|
96
|
+
Is it platform-specific?
|
|
97
|
+
→ Blog post list → AllBlogsPostBlock / RecentBlogPostsBlock
|
|
98
|
+
→ Job listings → HotJobsBlock
|
|
99
|
+
|
|
100
|
+
Is it layout/utility?
|
|
101
|
+
→ Vertical whitespace → SpacingBlock
|
|
102
|
+
→ Divider → HorizontalRule
|
|
103
|
+
→ Background color wrapper → BackgroundColorBlock
|
|
104
|
+
→ External link warning → SpeedBump
|
|
105
|
+
→ Body prose → BodyTextCopyBlock / RichText
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Platform-Specific Content Types
|
|
109
|
+
|
|
110
|
+
Some general content types are restricted to specific platforms:
|
|
111
|
+
|
|
112
|
+
| Content Type | Platform restriction |
|
|
113
|
+
|---|---|
|
|
114
|
+
| `AllBlogsPostBlock` | Marketing - Blog only |
|
|
115
|
+
| `RecentBlogPostsBlock` | Marketing - Blog only |
|
|
116
|
+
| `HotJobsBlock` | Marketing - Careers only |
|
|
38
117
|
|
|
39
118
|
## Files in This Section
|
|
40
119
|
|
|
41
|
-
- [
|
|
120
|
+
- [accordion-block.md](./accordion-block.md)
|
|
121
|
+
- [all-blogs-post-block.md](./all-blogs-post-block.md)
|
|
122
|
+
- [background-color-block.md](./background-color-block.md)
|
|
123
|
+
- [basic-content-block.md](./basic-content-block.md)
|
|
124
|
+
- [body-text-copy-block.md](./body-text-copy-block.md)
|
|
42
125
|
- [callout.md](./callout.md)
|
|
43
|
-
- [rtbs.md](./rtbs.md)
|
|
44
126
|
- [confidence-tags.md](./confidence-tags.md)
|
|
127
|
+
- [content-image-block.md](./content-image-block.md)
|
|
128
|
+
- [cross-sell-card-block.md](./cross-sell-card-block.md)
|
|
129
|
+
- [cta.md](./cta.md)
|
|
130
|
+
- [decorative-list-block.md](./decorative-list-block.md)
|
|
131
|
+
- [email-callout-block.md](./email-callout-block.md)
|
|
132
|
+
- [embedded-video-block.md](./embedded-video-block.md)
|
|
133
|
+
- [full-size-image-with-highlight-box.md](./full-size-image-with-highlight-box.md)
|
|
134
|
+
- [horizontal-rule.md](./horizontal-rule.md)
|
|
135
|
+
- [hot-jobs-block.md](./hot-jobs-block.md)
|
|
136
|
+
- [inline-message.md](./inline-message.md)
|
|
137
|
+
- [last-chance-block.md](./last-chance-block.md)
|
|
45
138
|
- [lead-form.md](./lead-form.md)
|
|
139
|
+
- [multi-step-lead-form.md](./multi-step-lead-form.md)
|
|
140
|
+
- [multi-testimonial.md](./multi-testimonial.md)
|
|
141
|
+
- [opt-in.md](./opt-in.md)
|
|
142
|
+
- [product-block.md](./product-block.md)
|
|
143
|
+
- [pull-quote.md](./pull-quote.md)
|
|
144
|
+
- [recent-blog-posts-block.md](./recent-blog-posts-block.md)
|
|
145
|
+
- [resource-spotlight.md](./resource-spotlight.md)
|
|
46
146
|
- [rich-text.md](./rich-text.md)
|
|
147
|
+
- [rtb-descriptive.md](./rtb-descriptive.md)
|
|
148
|
+
- [rtb-dynamic.md](./rtb-dynamic.md)
|
|
149
|
+
- [rtb-highlight.md](./rtb-highlight.md)
|
|
150
|
+
- [rtbs.md](./rtbs.md)
|
|
151
|
+
- [side-menu-explorer.md](./side-menu-explorer.md)
|
|
152
|
+
- [simple-cta-block.md](./simple-cta-block.md)
|
|
153
|
+
- [spacing-block.md](./spacing-block.md)
|
|
154
|
+
- [speed-bump.md](./speed-bump.md)
|
|
155
|
+
- [table-block.md](./table-block.md)
|
|
156
|
+
- [wahfu.md](./wahfu.md)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Product Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A product feature card combining an image, heading, body description, optional badge, and CTA. Use to highlight a single product or coverage option.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `heading` | `string` | Yes | Product name or title |
|
|
14
|
+
| `body` | `string` | Yes | Short product description |
|
|
15
|
+
| `imageSrc` | `string` | No | Product image URL |
|
|
16
|
+
| `imageAlt` | `string` | No | Image alt text |
|
|
17
|
+
| `badgeLabel` | `string` | No | Small badge (e.g., "Most popular", "New") |
|
|
18
|
+
| `ctaLabel` | `string` | No | CTA text |
|
|
19
|
+
| `ctaHref` | `string` | No | CTA destination |
|
|
20
|
+
| `className` | `string` | No | Additional CSS class |
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { ProductBlock } from 'lion-make'
|
|
26
|
+
|
|
27
|
+
<ProductBlock
|
|
28
|
+
imageSrc="/img/term-life.jpg"
|
|
29
|
+
imageAlt=""
|
|
30
|
+
badgeLabel="Most popular"
|
|
31
|
+
heading="Term Life Insurance"
|
|
32
|
+
body="Affordable coverage for 10, 20, or 30 years. Premiums never increase."
|
|
33
|
+
ctaLabel="Get a quote"
|
|
34
|
+
ctaHref="/term-life/quote"
|
|
35
|
+
/>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Design Tokens
|
|
39
|
+
|
|
40
|
+
- Border radius: `var(--border-radius-base)`
|
|
41
|
+
- Badge background: `var(--color-teal-opaque)`, text: `var(--color-brand)`
|
|
42
|
+
- Heading: `var(--h2-font-size)`, `var(--font-weight-700)`
|
|
43
|
+
- CTA: `var(--color-brand)` background, `var(--color-white)` text
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Pull Quote
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A typographically prominent quote extracted from surrounding content. Used to add editorial emphasis or break up long-form copy. Attribution is optional.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `quote` | `string` | Yes | The quoted text (without quotation marks — they are added by the component) |
|
|
14
|
+
| `attribution` | `string` | No | Name of the person being quoted |
|
|
15
|
+
| `role` | `string` | No | Title, role, or context for the attribution |
|
|
16
|
+
| `className` | `string` | No | Additional CSS class |
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { PullQuote } from 'lion-make'
|
|
22
|
+
|
|
23
|
+
<PullQuote
|
|
24
|
+
quote="The claims process was handled with such care and speed. It made a difficult time a little easier."
|
|
25
|
+
attribution="Patricia H."
|
|
26
|
+
role="Term Life policyholder, Nebraska"
|
|
27
|
+
/>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Design Tokens
|
|
31
|
+
|
|
32
|
+
- Left border: `var(--border-width-thick)` solid `var(--color-brand)`
|
|
33
|
+
- Quote font size: `var(--h2-font-size)`, weight `var(--font-weight-300)`, italic
|
|
34
|
+
- Line height: `var(--h2-line-height)`
|
|
35
|
+
- Attribution: `var(--font-weight-600)`, `var(--color-gray-dark)`
|
|
36
|
+
- Role: `var(--font-weight-400)`, `var(--color-gray)`
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Recent Blog Posts Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
**Platform restriction:** Blog platform only (`data-platform="blog"`).
|
|
6
|
+
|
|
7
|
+
## Description
|
|
8
|
+
|
|
9
|
+
Displays a curated or automatically-selected row of recent blog post cards. Use on product and landing pages to surface relevant content without leaving the page. Supports manual post selection or automatic "most recent N posts" mode.
|
|
10
|
+
|
|
11
|
+
Different from `AllBlogsPostBlock`, which is a full paginated listing view for the blog index.
|
|
12
|
+
|
|
13
|
+
## Props
|
|
14
|
+
|
|
15
|
+
| Prop | Type | Required | Default | Description |
|
|
16
|
+
|---|---|---|---|---|
|
|
17
|
+
| `posts` | `BlogPostItem[]` | Yes | — | Posts to display |
|
|
18
|
+
| `heading` | `string` | No | `'Recent articles'` | Section heading |
|
|
19
|
+
| `count` | `number` | No | `3` | Number of posts to display (1–6) |
|
|
20
|
+
| `ctaLabel` | `string` | No | — | "View all" link label |
|
|
21
|
+
| `ctaHref` | `string` | No | — | "View all" link destination |
|
|
22
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
23
|
+
|
|
24
|
+
### BlogPostItem
|
|
25
|
+
|
|
26
|
+
| Prop | Type | Description |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `title` | `string` | Post title |
|
|
29
|
+
| `slug` | `string` | URL slug |
|
|
30
|
+
| `excerpt` | `string` | Short summary |
|
|
31
|
+
| `thumbnailSrc` | `string` | Card thumbnail URL |
|
|
32
|
+
| `thumbnailAlt` | `string` | Thumbnail alt text |
|
|
33
|
+
| `publishedAt` | `string` | ISO 8601 date |
|
|
34
|
+
| `category` | `string` | Primary category label |
|
|
35
|
+
|
|
36
|
+
## Usage
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
import { RecentBlogPostsBlock } from 'lion-make'
|
|
40
|
+
|
|
41
|
+
<RecentBlogPostsBlock
|
|
42
|
+
heading="More on life insurance"
|
|
43
|
+
posts={recentLifePosts}
|
|
44
|
+
count={3}
|
|
45
|
+
ctaLabel="See all articles"
|
|
46
|
+
ctaHref="/blog"
|
|
47
|
+
/>
|
|
48
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Resource Spotlight
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Highlights a featured resource — an article, video, PDF download, calculator, or tool. Used to drive content engagement and surface self-service resources near relevant content.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `title` | `string` | Yes | Resource title |
|
|
14
|
+
| `description` | `string` | Yes | Short summary |
|
|
15
|
+
| `resourceType` | `'article' \| 'video' \| 'pdf' \| 'tool' \| 'calculator'` | Yes | Resource category (shown as a label) |
|
|
16
|
+
| `imageSrc` | `string` | No | Thumbnail image URL |
|
|
17
|
+
| `imageAlt` | `string` | No | Thumbnail alt text |
|
|
18
|
+
| `ctaLabel` | `string` | No | Link text (defaults to "Download" or "View resource") |
|
|
19
|
+
| `ctaHref` | `string` | No | Resource destination URL |
|
|
20
|
+
| `downloadUrl` | `string` | No | Forces a download link when provided (takes priority over ctaHref) |
|
|
21
|
+
| `className` | `string` | No | Additional CSS class |
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { ResourceSpotlight } from 'lion-make'
|
|
27
|
+
|
|
28
|
+
<ResourceSpotlight
|
|
29
|
+
resourceType="pdf"
|
|
30
|
+
title="Understanding Your Life Insurance Options"
|
|
31
|
+
description="A plain-language guide comparing term, whole, and universal life policies."
|
|
32
|
+
imageSrc="/img/guide-cover.jpg"
|
|
33
|
+
imageAlt=""
|
|
34
|
+
downloadUrl="/downloads/life-insurance-guide.pdf"
|
|
35
|
+
ctaLabel="Download guide (PDF)"
|
|
36
|
+
/>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Design Tokens
|
|
40
|
+
|
|
41
|
+
- Border: `var(--border-width-thin)` solid `var(--color-line)`
|
|
42
|
+
- Border radius: `var(--border-radius-base)`
|
|
43
|
+
- Type label: `var(--color-brand)`, uppercase, `var(--h6-font-size)`
|
|
44
|
+
- Title: `var(--h3-font-size)`, `var(--font-weight-600)`
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# RTB - Descriptive
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
RTB (Reasons To Buy) variant with longer explanatory body copy per item. Use when each value proposition needs more context than a headline alone can carry. Renders as a vertical list with optional spot illustrations.
|
|
8
|
+
|
|
9
|
+
Compare with:
|
|
10
|
+
- `RTBHighlight` — large stat/number callouts for visual impact
|
|
11
|
+
- `RTBDynamic` — multi-column grid driven by a data source
|
|
12
|
+
- `RTBs` — original illustration + short text list
|
|
13
|
+
|
|
14
|
+
## Props
|
|
15
|
+
|
|
16
|
+
| Prop | Type | Required | Description |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| `items` | `RTBDescriptiveItem[]` | Yes | Array of reasons (min 2) |
|
|
19
|
+
| `heading` | `string` | No | Optional section heading |
|
|
20
|
+
| `className` | `string` | No | Additional CSS class |
|
|
21
|
+
|
|
22
|
+
### RTBDescriptiveItem
|
|
23
|
+
|
|
24
|
+
| Prop | Type | Required | Description |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| `heading` | `string` | Yes | Value proposition headline |
|
|
27
|
+
| `body` | `string` | Yes | Explanatory paragraph (2–4 sentences) |
|
|
28
|
+
| `illustrationSrc` | `string` | No | Spot illustration URL |
|
|
29
|
+
| `illustrationAlt` | `string` | No | Illustration alt text |
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { RTBDescriptive } from 'lion-make'
|
|
35
|
+
|
|
36
|
+
<RTBDescriptive
|
|
37
|
+
heading="Why families trust us"
|
|
38
|
+
items={[
|
|
39
|
+
{
|
|
40
|
+
heading: 'No hidden fees — ever',
|
|
41
|
+
body: 'Your premium is locked in on day one. It never increases for the life of your policy, regardless of age or health changes.',
|
|
42
|
+
illustrationSrc: '/icons/lock.svg',
|
|
43
|
+
illustrationAlt: '',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
heading: 'Claims paid in days, not weeks',
|
|
47
|
+
body: 'Our claims team processes most straightforward claims within 5 business days. We assign a dedicated rep to every claim.',
|
|
48
|
+
illustrationSrc: '/icons/clock.svg',
|
|
49
|
+
illustrationAlt: '',
|
|
50
|
+
},
|
|
51
|
+
]}
|
|
52
|
+
/>
|
|
53
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# RTB - Dynamic
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
RTB (Reasons To Buy) variant that renders a responsive grid of benefit cards from a structured data source. Use when the number of items is variable or content-managed at runtime. Supports optional icons and horizontal rule separators.
|
|
8
|
+
|
|
9
|
+
Compare with:
|
|
10
|
+
- `RTBDescriptive` — text-heavy, explanatory body per item
|
|
11
|
+
- `RTBHighlight` — large stat/number callouts
|
|
12
|
+
- `RTBs` — illustration + short text list
|
|
13
|
+
|
|
14
|
+
## Props
|
|
15
|
+
|
|
16
|
+
| Prop | Type | Required | Description |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| `items` | `RTBDynamicItem[]` | Yes | Array of benefit cards |
|
|
19
|
+
| `heading` | `string` | No | Section heading |
|
|
20
|
+
| `columns` | `2 \| 3 \| 4` | No | Number of grid columns (default: `3`) |
|
|
21
|
+
| `showDividers` | `boolean` | No | Horizontal rules between rows (default: `false`) |
|
|
22
|
+
| `className` | `string` | No | Additional CSS class |
|
|
23
|
+
|
|
24
|
+
### RTBDynamicItem
|
|
25
|
+
|
|
26
|
+
| Prop | Type | Required | Description |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| `heading` | `string` | Yes | Card title |
|
|
29
|
+
| `body` | `string` | No | Supporting copy (1–2 sentences) |
|
|
30
|
+
| `iconSrc` | `string` | No | Icon URL |
|
|
31
|
+
| `iconAlt` | `string` | No | Icon alt text |
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
```tsx
|
|
36
|
+
import { RTBDynamic } from 'lion-make'
|
|
37
|
+
|
|
38
|
+
<RTBDynamic
|
|
39
|
+
heading="What's included"
|
|
40
|
+
columns={3}
|
|
41
|
+
items={[
|
|
42
|
+
{ iconSrc: '/icons/shield.svg', iconAlt: '', heading: 'Death benefit', body: 'Tax-free lump sum paid to your beneficiary.' },
|
|
43
|
+
{ iconSrc: '/icons/calendar.svg', iconAlt: '', heading: 'Flexible terms', body: '10, 20, or 30-year term options.' },
|
|
44
|
+
{ iconSrc: '/icons/dollar.svg', iconAlt: '', heading: 'Level premiums', body: 'Locked-in rate for the life of your policy.' },
|
|
45
|
+
]}
|
|
46
|
+
/>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Design Tokens
|
|
50
|
+
|
|
51
|
+
- Grid gap: `var(--Grid-gutter-size)`
|
|
52
|
+
- Card border: `var(--border-width-thin)` solid `var(--color-line)`
|
|
53
|
+
- Card border-radius: `var(--border-radius-base)`
|
|
54
|
+
- Heading: `var(--h4-font-size)`, `var(--font-weight-600)`
|
|
55
|
+
- Body: `var(--body-font-size)`, `var(--font-weight-400)`
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# RTB - Highlight
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
RTB (Reasons To Buy) variant using large stat/metric callouts as the primary visual hook. Each item leads with a bold number or short phrase, followed by a brief label. Use when data communicates trust more effectively than prose.
|
|
8
|
+
|
|
9
|
+
Compare with:
|
|
10
|
+
- `RTBDescriptive` — text-heavy, explanatory body per item
|
|
11
|
+
- `RTBDynamic` — multi-column grid driven by a data source
|
|
12
|
+
- `RTBs` — illustration + short text list
|
|
13
|
+
|
|
14
|
+
## Props
|
|
15
|
+
|
|
16
|
+
| Prop | Type | Required | Description |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| `items` | `RTBHighlightItem[]` | Yes | Array of stat items (3–5 recommended) |
|
|
19
|
+
| `heading` | `string` | No | Optional section heading |
|
|
20
|
+
| `layout` | `'row' \| 'column'` | No | Arrangement direction (default: `'row'`) |
|
|
21
|
+
| `className` | `string` | No | Additional CSS class |
|
|
22
|
+
|
|
23
|
+
### RTBHighlightItem
|
|
24
|
+
|
|
25
|
+
| Prop | Type | Required | Description |
|
|
26
|
+
|---|---|---|---|
|
|
27
|
+
| `stat` | `string` | Yes | The headline number or short phrase (e.g., "100+ years", "A+ rating") |
|
|
28
|
+
| `label` | `string` | Yes | Brief description of what the stat represents |
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import { RTBHighlight } from 'lion-make'
|
|
34
|
+
|
|
35
|
+
<RTBHighlight
|
|
36
|
+
heading="Trusted by families since 1909"
|
|
37
|
+
items={[
|
|
38
|
+
{ stat: '100+', label: 'Years in business' },
|
|
39
|
+
{ stat: 'A+', label: 'AM Best financial strength rating' },
|
|
40
|
+
{ stat: '$2.4B', label: 'Claims paid in 2023' },
|
|
41
|
+
{ stat: '4M+', label: 'Customers nationwide' },
|
|
42
|
+
]}
|
|
43
|
+
/>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Design Tokens
|
|
47
|
+
|
|
48
|
+
- Stat text: `var(--h1-font-size)`, `var(--font-weight-700)`, `var(--color-brand)`
|
|
49
|
+
- Label text: `var(--h5-font-size)`, `var(--font-weight-400)`, `var(--color-gray-dark)`
|
|
50
|
+
- Dividers between items: `var(--border-width-thin)` solid `var(--color-line)`
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Side Menu Explorer
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column only. Not valid in Sideburn or Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A vertically-stacked tabbed navigation that controls which content panel is visible. Renders as a left-side menu with a persistent panel to the right. Typically used on product and category pages to let users explore coverage options without navigating away.
|
|
8
|
+
|
|
9
|
+
This component is structural (contains panels), so it must not be nested inside another Container.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Description |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| `items` | `SideMenuExplorerItem[]` | Yes | Tabs and their associated panels |
|
|
16
|
+
| `defaultActiveIndex` | `number` | No | Index of the tab to show on load (default: `0`) |
|
|
17
|
+
| `heading` | `string` | No | Accessible heading above the menu |
|
|
18
|
+
| `className` | `string` | No | Additional CSS class |
|
|
19
|
+
|
|
20
|
+
### SideMenuExplorerItem
|
|
21
|
+
|
|
22
|
+
| Prop | Type | Required | Description |
|
|
23
|
+
|---|---|---|---|
|
|
24
|
+
| `label` | `string` | Yes | Tab button label |
|
|
25
|
+
| `panelContent` | `React.ReactNode` | Yes | Content rendered when this tab is active |
|
|
26
|
+
| `id` | `string` | No | Unique ID (used for `aria-controls`; auto-generated if omitted) |
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import { SideMenuExplorer } from 'lion-make'
|
|
32
|
+
|
|
33
|
+
<SideMenuExplorer
|
|
34
|
+
heading="Explore our life insurance options"
|
|
35
|
+
items={[
|
|
36
|
+
{
|
|
37
|
+
label: 'Term Life',
|
|
38
|
+
panelContent: <TermLifePanel />,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: 'Whole Life',
|
|
42
|
+
panelContent: <WholeLifePanel />,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
label: 'Universal Life',
|
|
46
|
+
panelContent: <UniversalLifePanel />,
|
|
47
|
+
},
|
|
48
|
+
]}
|
|
49
|
+
/>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Accessibility
|
|
53
|
+
|
|
54
|
+
- Menu uses `role="tablist"`, each tab `role="tab"`, each panel `role="tabpanel"`.
|
|
55
|
+
- Active tab has `aria-selected="true"`.
|
|
56
|
+
- Panel linked via `aria-labelledby`.
|
|
57
|
+
|
|
58
|
+
## Design Tokens
|
|
59
|
+
|
|
60
|
+
- Menu background: `var(--color-gray-lightest)`
|
|
61
|
+
- Active tab: left border `var(--border-width-thick)` solid `var(--color-brand)`, text `var(--color-brand)`, `var(--font-weight-600)`
|
|
62
|
+
- Inactive tab: `var(--color-gray-dark)`, `var(--font-weight-400)`
|