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.
Files changed (109) hide show
  1. package/dist/components/footer/Disclosure.d.ts +3 -2
  2. package/dist/components/footer/DisclosureToggleOpen.d.ts +13 -0
  3. package/dist/components/footer/LegalLinks.d.ts +16 -0
  4. package/dist/components/footer/LinksAndSocial.d.ts +25 -0
  5. package/dist/components/general/AccordionBlock.d.ts +15 -0
  6. package/dist/components/general/AllBlogsPostBlock.d.ts +21 -0
  7. package/dist/components/general/BackgroundColorBlock.d.ts +12 -0
  8. package/dist/components/general/BasicContentBlock.d.ts +18 -0
  9. package/dist/components/general/BodyTextCopyBlock.d.ts +12 -0
  10. package/dist/components/general/ContentImageBlock.d.ts +15 -0
  11. package/dist/components/general/CrossSellCardBlock.d.ts +18 -0
  12. package/dist/components/general/DecorativeListBlock.d.ts +13 -0
  13. package/dist/components/general/EmailCalloutBlock.d.ts +14 -0
  14. package/dist/components/general/EmbeddedVideoBlock.d.ts +15 -0
  15. package/dist/components/general/FullSizeImageWithHighlightBox.d.ts +21 -0
  16. package/dist/components/general/HorizontalRule.d.ts +13 -0
  17. package/dist/components/general/HotJobsBlock.d.ts +21 -0
  18. package/dist/components/general/InlineMessage.d.ts +14 -0
  19. package/dist/components/general/LastChanceBlock.d.ts +15 -0
  20. package/dist/components/general/MultiStepLeadForm.d.ts +19 -0
  21. package/dist/components/general/MultiTestimonial.d.ts +19 -0
  22. package/dist/components/general/OptIn.d.ts +16 -0
  23. package/dist/components/general/ProductBlock.d.ts +17 -0
  24. package/dist/components/general/PullQuote.d.ts +12 -0
  25. package/dist/components/general/RTBDescriptive.d.ts +18 -0
  26. package/dist/components/general/RTBDynamic.d.ts +21 -0
  27. package/dist/components/general/RTBHighlight.d.ts +18 -0
  28. package/dist/components/general/RecentBlogPostsBlock.d.ts +22 -0
  29. package/dist/components/general/ResourceSpotlight.d.ts +18 -0
  30. package/dist/components/general/SideMenuExplorer.d.ts +16 -0
  31. package/dist/components/general/SimpleCTABlock.d.ts +15 -0
  32. package/dist/components/general/SpacingBlock.d.ts +12 -0
  33. package/dist/components/general/SpeedBump.d.ts +16 -0
  34. package/dist/components/general/TableBlock.d.ts +13 -0
  35. package/dist/components/general/WAHFU.d.ts +15 -0
  36. package/dist/components/header/HeaderCTA.d.ts +9 -0
  37. package/dist/components/header/HeaderLogo.d.ts +10 -0
  38. package/dist/components/header/HeaderProduct.d.ts +10 -0
  39. package/dist/components/header/HeaderSectionNavigation.d.ts +12 -0
  40. package/dist/components/header/HeaderSectionTitle.d.ts +8 -0
  41. package/dist/components/header/HeaderUnderwriter.d.ts +9 -0
  42. package/dist/components/header/TopLevelNavigation.d.ts +13 -0
  43. package/dist/components/hero/CTAHeroBlock.d.ts +24 -0
  44. package/dist/components/hero/HeroBlock.d.ts +18 -0
  45. package/dist/components/hero/MultiHero.d.ts +25 -0
  46. package/dist/components/hero/NotAvailableHeroBlock.d.ts +22 -0
  47. package/dist/index.d.ts +92 -2
  48. package/dist/lion-make.js +1855 -545
  49. package/dist/lion-make.umd.cjs +10 -10
  50. package/guidelines/Guidelines.md +46 -50
  51. package/guidelines/composition/constraints.md +40 -8
  52. package/guidelines/composition/zones.md +49 -11
  53. package/guidelines/content-types/footer/anklet.md +62 -0
  54. package/guidelines/content-types/footer/compliance.md +49 -0
  55. package/guidelines/content-types/footer/disclaimers.md +48 -0
  56. package/guidelines/content-types/footer/disclosure-toggle-open.md +51 -0
  57. package/guidelines/content-types/footer/disclosures.md +50 -0
  58. package/guidelines/content-types/footer/legal-links.md +59 -0
  59. package/guidelines/content-types/footer/links-and-social.md +94 -0
  60. package/guidelines/content-types/footer/overview.md +73 -16
  61. package/guidelines/content-types/general/accordion-block.md +42 -0
  62. package/guidelines/content-types/general/all-blogs-post-block.md +52 -0
  63. package/guidelines/content-types/general/background-color-block.md +42 -0
  64. package/guidelines/content-types/general/basic-content-block.md +43 -0
  65. package/guidelines/content-types/general/body-text-copy-block.md +38 -0
  66. package/guidelines/content-types/general/content-image-block.md +37 -0
  67. package/guidelines/content-types/general/cross-sell-card-block.md +45 -0
  68. package/guidelines/content-types/general/decorative-list-block.md +40 -0
  69. package/guidelines/content-types/general/email-callout-block.md +38 -0
  70. package/guidelines/content-types/general/embedded-video-block.md +36 -0
  71. package/guidelines/content-types/general/full-size-image-with-highlight-box.md +52 -0
  72. package/guidelines/content-types/general/horizontal-rule.md +35 -0
  73. package/guidelines/content-types/general/hot-jobs-block.md +52 -0
  74. package/guidelines/content-types/general/inline-message.md +36 -0
  75. package/guidelines/content-types/general/last-chance-block.md +40 -0
  76. package/guidelines/content-types/general/multi-step-lead-form.md +60 -0
  77. package/guidelines/content-types/general/multi-testimonial.md +49 -0
  78. package/guidelines/content-types/general/opt-in.md +42 -0
  79. package/guidelines/content-types/general/overview.md +134 -24
  80. package/guidelines/content-types/general/product-block.md +43 -0
  81. package/guidelines/content-types/general/pull-quote.md +36 -0
  82. package/guidelines/content-types/general/recent-blog-posts-block.md +48 -0
  83. package/guidelines/content-types/general/resource-spotlight.md +44 -0
  84. package/guidelines/content-types/general/rtb-descriptive.md +53 -0
  85. package/guidelines/content-types/general/rtb-dynamic.md +55 -0
  86. package/guidelines/content-types/general/rtb-highlight.md +50 -0
  87. package/guidelines/content-types/general/side-menu-explorer.md +62 -0
  88. package/guidelines/content-types/general/simple-cta-block.md +44 -0
  89. package/guidelines/content-types/general/spacing-block.md +40 -0
  90. package/guidelines/content-types/general/speed-bump.md +45 -0
  91. package/guidelines/content-types/general/table-block.md +55 -0
  92. package/guidelines/content-types/general/wahfu.md +66 -0
  93. package/guidelines/content-types/header/header-cta.md +41 -0
  94. package/guidelines/content-types/header/header-logo.md +45 -0
  95. package/guidelines/content-types/header/header-product.md +45 -0
  96. package/guidelines/content-types/header/header-section-navigation.md +55 -0
  97. package/guidelines/content-types/header/header-section-title.md +43 -0
  98. package/guidelines/content-types/header/header-underwriter.md +46 -0
  99. package/guidelines/content-types/header/overview.md +61 -15
  100. package/guidelines/content-types/header/top-level-navigation.md +70 -0
  101. package/guidelines/content-types/hero/cta-hero-block.md +70 -0
  102. package/guidelines/content-types/hero/hero-block.md +56 -0
  103. package/guidelines/content-types/hero/multi-hero.md +78 -0
  104. package/guidelines/content-types/hero/not-available-hero-block.md +64 -0
  105. package/guidelines/content-types/hero/overview.md +53 -18
  106. package/guidelines/content-types/overview.md +86 -29
  107. package/guidelines/discovery.md +158 -0
  108. package/guidelines/setup.md +90 -16
  109. 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
- | CTA | `CTA` | Yes | Yes | Yes |
12
- | Call-Out | `CallOut` | Yes | Yes | Yes |
13
- | RTBs | `RTBs` | Yes | Yes | Yes |
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
- - [cta.md](./cta.md)
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)`