lion-make 0.2.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/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 +28 -0
- package/dist/lion-make.js +991 -633
- 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,36 @@
|
|
|
1
|
+
# Inline Message
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A contextual alert or status message placed within the content flow. Used to surface important information, warnings, or errors at the point of relevance — not as a page-wide banner.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `type` | `'info' \| 'warning' \| 'success' \| 'error'` | Yes | — | Message severity |
|
|
14
|
+
| `message` | `string` | Yes | — | Message body |
|
|
15
|
+
| `heading` | `string` | No | — | Optional bold heading |
|
|
16
|
+
| `dismissible` | `boolean` | No | `false` | Show a dismiss (×) button |
|
|
17
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import { InlineMessage } from 'lion-make'
|
|
23
|
+
|
|
24
|
+
<InlineMessage type="warning" heading="Open enrollment closes soon" message="You have 7 days left to make changes to your coverage." dismissible />
|
|
25
|
+
|
|
26
|
+
<InlineMessage type="success" message="Your application has been submitted successfully." />
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Design Token Map
|
|
30
|
+
|
|
31
|
+
| Type | Background | Text/border color |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `info` | `--color-teal-tint` | `--color-teal-dark` / `--color-teal` |
|
|
34
|
+
| `warning` | `--color-yellow-light` | `--color-yellow` |
|
|
35
|
+
| `success` | `--color-green-light` | `--color-green` |
|
|
36
|
+
| `error` | `--color-red-light` | `--color-red` |
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Last Chance Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A high-visual-weight urgency block for enrollment deadlines or limited-time offers. Uses the blue-to-teal gradient. Use once per page maximum — high frequency dilutes impact.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `heading` | `string` | Yes | Main urgency message |
|
|
14
|
+
| `body` | `string` | Yes | Supporting copy |
|
|
15
|
+
| `ctaLabel` | `string` | Yes | CTA button label |
|
|
16
|
+
| `ctaHref` | `string` | Yes | CTA destination |
|
|
17
|
+
| `deadline` | `string` | No | Deadline label (e.g., "December 7") |
|
|
18
|
+
| `className` | `string` | No | Additional CSS class |
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { LastChanceBlock } from 'lion-make'
|
|
24
|
+
|
|
25
|
+
<LastChanceBlock
|
|
26
|
+
deadline="December 7"
|
|
27
|
+
heading="Medicare Open Enrollment ends soon"
|
|
28
|
+
body="Review your plan options and make changes before the deadline."
|
|
29
|
+
ctaLabel="Compare plans now"
|
|
30
|
+
ctaHref="/medicare/compare"
|
|
31
|
+
/>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Design Tokens
|
|
35
|
+
|
|
36
|
+
- Background: `var(--gradient-blue-to-teal)`
|
|
37
|
+
- Text: `var(--color-white)`
|
|
38
|
+
- Heading: `var(--h1-font-size)`, `var(--font-weight-700)`
|
|
39
|
+
- CTA: `var(--color-white)` background, `var(--color-brand)` text
|
|
40
|
+
- Deadline label: uppercase, `var(--font-weight-600)`
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Multi-Step Lead Form
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A guided multi-step form that breaks a long lead capture flow into smaller steps. Each step shows a subset of fields and a progress bar. Use when LeadForm would have more than 5–6 fields.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `steps` | `FormStep[]` | Yes | Array of steps, each with a title and fields |
|
|
14
|
+
| `submitLabel` | `string` | No | Final step submit button label (default: "Submit") |
|
|
15
|
+
| `onSubmit` | `(data: Record<string, string>) => void` | No | Called on final step submission with all collected data |
|
|
16
|
+
| `mediaCode` | `string` | No | Campaign tracking code for attribution |
|
|
17
|
+
| `className` | `string` | No | Additional CSS class |
|
|
18
|
+
|
|
19
|
+
### FormStep
|
|
20
|
+
|
|
21
|
+
| Prop | Type | Required | Description |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| `title` | `string` | Yes | Step label shown above the form |
|
|
24
|
+
| `fields` | `LeadFormField[]` | Yes | Fields to show on this step (same type as `LeadForm`) |
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { MultiStepLeadForm } from 'lion-make'
|
|
30
|
+
|
|
31
|
+
<MultiStepLeadForm
|
|
32
|
+
steps={[
|
|
33
|
+
{
|
|
34
|
+
title: 'About you',
|
|
35
|
+
fields: [
|
|
36
|
+
{ name: 'firstName', label: 'First Name', type: 'text', required: true },
|
|
37
|
+
{ name: 'lastName', label: 'Last Name', type: 'text', required: true },
|
|
38
|
+
{ name: 'dob', label: 'Date of Birth', type: 'text', required: true },
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
title: 'Contact info',
|
|
43
|
+
fields: [
|
|
44
|
+
{ name: 'email', label: 'Email', type: 'email', required: true },
|
|
45
|
+
{ name: 'phone', label: 'Phone', type: 'tel' },
|
|
46
|
+
{ name: 'state', label: 'State', type: 'select', required: true, options: ['NE', 'IA', 'KS'] },
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
]}
|
|
50
|
+
submitLabel="Get my quote"
|
|
51
|
+
mediaCode="CAMP-2024-Q1"
|
|
52
|
+
onSubmit={(data) => submitLead(data)}
|
|
53
|
+
/>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Design Tokens
|
|
57
|
+
|
|
58
|
+
- Progress bar active: `var(--color-brand)`
|
|
59
|
+
- Progress bar inactive: `var(--color-gray-light)`
|
|
60
|
+
- Submit button: `var(--color-brand)` background, `var(--color-white)` text
|
|
@@ -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
|
+
```
|