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
|
@@ -1,38 +1,95 @@
|
|
|
1
1
|
# Footer Zone Content Types
|
|
2
2
|
|
|
3
|
-
**Zone rule:** These content types can only be placed in the Footer zone. Never use them in Header, Hero, or General zones.
|
|
3
|
+
**Zone rule:** These content types can only be placed in the Footer zone (or the adjacent Anklet zone). Never use them in Header, Hero, or General zones.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
---
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Content Types
|
|
8
8
|
|
|
9
|
-
|
|
|
9
|
+
| Content type | Component | Zone | Order in page |
|
|
10
10
|
|---|---|---|---|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
11
|
+
| Anklet | `Anklet` | Anklet (own zone, above footer) | 1 — above footer |
|
|
12
|
+
| Links & Social | `LinksAndSocial` | Footer | 2 — first in footer |
|
|
13
|
+
| Disclaimers | `Disclaimer` | Footer | 3 |
|
|
14
|
+
| Disclosures | `Disclosure` | Footer | 4 |
|
|
15
|
+
| Disclosure Toggle Open | `DisclosureToggleOpen` | Footer | 4 (alongside Disclosures) |
|
|
16
|
+
| Compliance | `ComplianceBlock` | Footer | 5 |
|
|
17
|
+
| Legal Links | `LegalLinks` | Footer | 6 — last in footer |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Footer Structure
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
<Anklet /> ← own zone; quick-links bar above the footer
|
|
25
|
+
|
|
26
|
+
<Section zone="footer">
|
|
27
|
+
<LinksAndSocial … /> ← nav columns + social icons
|
|
28
|
+
<Disclaimer … /> ← static legal copy (always visible)
|
|
29
|
+
<Disclosure … /> ← legal toggle, starts collapsed
|
|
30
|
+
<DisclosureToggleOpen … /> ← legal toggle, starts expanded
|
|
31
|
+
<ComplianceBlock … /> ← Item Number / Material ID
|
|
32
|
+
<LegalLinks … /> ← Privacy, Terms, Accessibility, Copyright
|
|
33
|
+
</Section>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Key Distinctions
|
|
39
|
+
|
|
40
|
+
| Comparison | Use |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Disclaimers vs Disclosures | Disclaimers are always visible; Disclosures toggle open/closed |
|
|
43
|
+
| Disclosures vs Disclosure Toggle Open | Both toggle; Toggle Open starts expanded (for required-visible disclosures) |
|
|
44
|
+
| Compliance vs Disclaimers | Compliance is for structured IDs (Item #, Material ID); Disclaimers are free-text legal statements |
|
|
45
|
+
| Anklet vs Legal Links | Anklet links are product/service navigation; Legal Links are policy/legal destinations |
|
|
46
|
+
|
|
47
|
+
---
|
|
14
48
|
|
|
15
49
|
## Placement Example
|
|
16
50
|
|
|
17
51
|
```tsx
|
|
18
|
-
import {
|
|
52
|
+
import {
|
|
53
|
+
Anklet,
|
|
54
|
+
Section,
|
|
55
|
+
LinksAndSocial,
|
|
56
|
+
Disclaimer,
|
|
57
|
+
Disclosure,
|
|
58
|
+
ComplianceBlock,
|
|
59
|
+
LegalLinks,
|
|
60
|
+
} from 'lion-make'
|
|
61
|
+
|
|
62
|
+
<Anklet links={ankletLinks} />
|
|
19
63
|
|
|
20
64
|
<Section zone="footer">
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
itemNumber="ICC20-TERM"
|
|
24
|
-
/>
|
|
65
|
+
<LinksAndSocial columns={navColumns} socialLinks={socialLinks} />
|
|
66
|
+
<Disclaimer text="*Rates may vary based on health history and state of residence." />
|
|
25
67
|
<Disclosure
|
|
26
|
-
triggerLabel="
|
|
27
|
-
content="
|
|
28
|
-
materialId="
|
|
68
|
+
triggerLabel="Term Life Insurance Disclosure"
|
|
69
|
+
content="Policy Form ICC22L-TERM. Issued by Mutual of Omaha Insurance Company."
|
|
70
|
+
materialId="L-TERM-0524"
|
|
71
|
+
/>
|
|
72
|
+
<ComplianceBlock itemNumber="M37594_0524" />
|
|
73
|
+
<LegalLinks
|
|
74
|
+
copyrightText="© 2025 Mutual of Omaha Insurance Company"
|
|
75
|
+
links={legalLinks}
|
|
29
76
|
/>
|
|
30
|
-
<ComplianceBlock itemNumber="ICC20-TERM" materialId="M28354" />
|
|
31
77
|
</Section>
|
|
32
78
|
```
|
|
33
79
|
|
|
80
|
+
---
|
|
81
|
+
|
|
34
82
|
## Files in This Section
|
|
35
83
|
|
|
84
|
+
- [anklet.md](./anklet.md)
|
|
85
|
+
- [links-and-social.md](./links-and-social.md)
|
|
86
|
+
- [disclaimers.md](./disclaimers.md)
|
|
87
|
+
- [disclosures.md](./disclosures.md)
|
|
88
|
+
- [disclosure-toggle-open.md](./disclosure-toggle-open.md)
|
|
89
|
+
- [compliance.md](./compliance.md)
|
|
90
|
+
- [legal-links.md](./legal-links.md)
|
|
91
|
+
|
|
92
|
+
Legacy docs (pre-Mondrian naming — kept for reference):
|
|
36
93
|
- [disclaimer.md](./disclaimer.md)
|
|
37
94
|
- [disclosure.md](./disclosure.md)
|
|
38
95
|
- [compliance-block.md](./compliance-block.md)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Accordion Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Collapsible sections for Q&A, FAQs, or nested content. Reduces page length by hiding content until needed. One or multiple sections can be open at a time depending on configuration.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `items` | `AccordionItem[]` | Yes | — | Array of collapsible sections |
|
|
14
|
+
| `allowMultipleOpen` | `boolean` | No | `false` | Allow more than one section open at a time |
|
|
15
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
16
|
+
|
|
17
|
+
### AccordionItem
|
|
18
|
+
|
|
19
|
+
| Prop | Type | Required | Description |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| `heading` | `string` | Yes | The clickable trigger label |
|
|
22
|
+
| `body` | `string` | Yes | Content revealed when expanded |
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
import { AccordionBlock } from 'lion-make'
|
|
28
|
+
|
|
29
|
+
<AccordionBlock
|
|
30
|
+
items={[
|
|
31
|
+
{ heading: 'What is the waiting period?', body: 'Coverage begins on the first of the month after approval.' },
|
|
32
|
+
{ heading: 'Can I cancel anytime?', body: 'Yes. Cancel with 30 days notice and receive a prorated refund.' },
|
|
33
|
+
{ heading: 'Is there a medical exam?', body: 'No medical exam required for plans under $50,000.' },
|
|
34
|
+
]}
|
|
35
|
+
/>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Design Tokens
|
|
39
|
+
|
|
40
|
+
- Trigger: `var(--font-size-base)`, `var(--font-weight-600)`, `var(--color-text)`
|
|
41
|
+
- Divider: `var(--border-width-thin)` solid `var(--color-line)`
|
|
42
|
+
- Body: `var(--font-size-base)`, `var(--line-height-base)`, `var(--color-text)`
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# All Blog Posts Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column only. Not valid in Sideburn or Outro.
|
|
4
|
+
|
|
5
|
+
**Platform restriction:** Blog platform only (`data-platform="blog"`).
|
|
6
|
+
|
|
7
|
+
## Description
|
|
8
|
+
|
|
9
|
+
Renders a paginated or filtered grid of all blog posts. Used as the primary listing view on the blog index page. Not intended for inline use on product pages — use `RecentBlogPostsBlock` for that.
|
|
10
|
+
|
|
11
|
+
This component requires a data integration to the blog CMS to function; the stub accepts a static `posts` prop for Figma Make prototyping.
|
|
12
|
+
|
|
13
|
+
## Props
|
|
14
|
+
|
|
15
|
+
| Prop | Type | Required | Default | Description |
|
|
16
|
+
|---|---|---|---|---|
|
|
17
|
+
| `posts` | `BlogPostItem[]` | Yes | — | Array of blog post data |
|
|
18
|
+
| `postsPerPage` | `number` | No | `12` | Number of posts per page (pagination) |
|
|
19
|
+
| `enableFiltering` | `boolean` | No | `true` | Show category/tag filter UI |
|
|
20
|
+
| `enableSearch` | `boolean` | No | `false` | Show keyword search input |
|
|
21
|
+
| `layout` | `'grid' \| 'list'` | No | `'grid'` | Card display mode |
|
|
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 |
|
|
35
|
+
| `tags` | `string[]` | Optional tags array |
|
|
36
|
+
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { AllBlogsPostBlock } from 'lion-make'
|
|
41
|
+
|
|
42
|
+
<AllBlogsPostBlock
|
|
43
|
+
posts={blogPosts}
|
|
44
|
+
postsPerPage={12}
|
|
45
|
+
enableFiltering
|
|
46
|
+
layout="grid"
|
|
47
|
+
/>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Placement Constraint
|
|
51
|
+
|
|
52
|
+
This content type is only valid on pages where `data-platform="blog"` is set at the page root. Placing it on a non-blog page is invalid.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Background Color Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Wraps child content in a full-width background color band. Used to visually separate page sections or create contrast. Color must come from the design token palette — no custom hex values.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `color` | `BackgroundColorToken` | Yes | Background color token name |
|
|
14
|
+
| `children` | `ReactNode` | Yes | Content to render inside the band |
|
|
15
|
+
| `className` | `string` | No | Additional CSS class |
|
|
16
|
+
|
|
17
|
+
### BackgroundColorToken values
|
|
18
|
+
|
|
19
|
+
| Value | CSS variable | Visual |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| `white` | `--color-white` | White |
|
|
22
|
+
| `gray-lightest` | `--color-gray-lightest` | Near-white gray |
|
|
23
|
+
| `teal-tint` | `--color-teal-tint` | Very light teal |
|
|
24
|
+
| `sand` | `--color-sand` | Warm off-white |
|
|
25
|
+
| `blue-dark` | `--color-blue-dark` | Dark navy (use light text on top) |
|
|
26
|
+
| `teal` | `--color-teal` | Brand teal (use light text on top) |
|
|
27
|
+
| `brand` | `--color-brand` | Brand blue (use light text on top) |
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { BackgroundColorBlock, RTBs } from 'lion-make'
|
|
33
|
+
|
|
34
|
+
<BackgroundColorBlock color="teal-tint">
|
|
35
|
+
<RTBs items={[...]} />
|
|
36
|
+
</BackgroundColorBlock>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Design Tokens
|
|
40
|
+
|
|
41
|
+
- Padding: `var(--padding-edge)`
|
|
42
|
+
- Background: resolved from `BackgroundColorToken`
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Basic Content Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
The most versatile general content type. Combines a heading, body copy, optional image, and optional CTA. Image position controls the layout direction.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `heading` | `string` | Yes | — | Section heading |
|
|
14
|
+
| `body` | `string` | Yes | — | Body copy |
|
|
15
|
+
| `imageSrc` | `string` | No | — | Image URL |
|
|
16
|
+
| `imageAlt` | `string` | No | — | Image alt text |
|
|
17
|
+
| `imagePosition` | `'left' \| 'right' \| 'top' \| 'none'` | No | `'top'` | Where the image appears relative to text |
|
|
18
|
+
| `ctaLabel` | `string` | No | — | CTA link text |
|
|
19
|
+
| `ctaHref` | `string` | No | — | CTA destination |
|
|
20
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { BasicContentBlock } from 'lion-make'
|
|
26
|
+
|
|
27
|
+
<BasicContentBlock
|
|
28
|
+
heading="Why families choose us"
|
|
29
|
+
body="For over 100 years, we've helped families protect what matters most with affordable, straightforward coverage."
|
|
30
|
+
imageSrc="/family-outdoors.jpg"
|
|
31
|
+
imageAlt="Family outdoors"
|
|
32
|
+
imagePosition="right"
|
|
33
|
+
ctaLabel="Learn about our history"
|
|
34
|
+
ctaHref="/about"
|
|
35
|
+
/>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Design Tokens
|
|
39
|
+
|
|
40
|
+
- Heading: `var(--h2-font-size)`, `var(--font-weight-700)`
|
|
41
|
+
- Body: `var(--font-size-base)`, `var(--line-height-base)`, `var(--color-text)`
|
|
42
|
+
- Gap between image and text: `var(--Grid-gutter-size)`
|
|
43
|
+
- CTA: `var(--color-link)`, `var(--font-weight-600)`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Body Text Copy Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Long-form prose rendered from RTE output. Use for article-style body copy, editorial content, or policy explanations. Constrained to a readable max-width (72ch).
|
|
8
|
+
|
|
9
|
+
Distinct from `RichText` in intent: BodyTextCopyBlock is for sustained reading, RichText is for short mixed-content fragments. In practice the rendering is similar — use whichever matches the authoring context.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Description |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| `html` | `string` | Yes | Sanitized HTML from CMS RTE |
|
|
16
|
+
| `className` | `string` | No | Additional CSS class |
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { BodyTextCopyBlock } from 'lion-make'
|
|
22
|
+
|
|
23
|
+
<BodyTextCopyBlock html="<p>Term life insurance provides coverage for a <strong>specific period</strong>...</p>" />
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Content Rules
|
|
27
|
+
|
|
28
|
+
- Only pass sanitized HTML from the CMS RTE. Never pass raw user input.
|
|
29
|
+
- Headings within body copy should start at H2 (H1 belongs to the Hero zone).
|
|
30
|
+
- Links inherit `var(--color-link)` and `var(--color-link-hover)` automatically.
|
|
31
|
+
|
|
32
|
+
## Design Tokens
|
|
33
|
+
|
|
34
|
+
- Font: `var(--font-family-sans-serif)`
|
|
35
|
+
- Size: `var(--font-size-base)`
|
|
36
|
+
- Line height: `var(--line-height-base)`
|
|
37
|
+
- Color: `var(--color-text)`
|
|
38
|
+
- Max width: `72ch`
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Content Image Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A standalone image with optional caption. Use for meaningful content images — not decorative ones. Always provide descriptive alt text.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `src` | `string` | Yes | — | Image URL |
|
|
14
|
+
| `alt` | `string` | Yes | — | Alt text (required for accessibility) |
|
|
15
|
+
| `caption` | `string` | No | — | Visible caption below the image |
|
|
16
|
+
| `width` | `'full' \| 'half' \| 'third'` | No | `'full'` | Rendered width relative to container |
|
|
17
|
+
| `alignment` | `'left' \| 'center' \| 'right'` | No | `'left'` | Alignment when width is less than full |
|
|
18
|
+
| `linkHref` | `string` | No | — | Makes the image a link |
|
|
19
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { ContentImageBlock } from 'lion-make'
|
|
25
|
+
|
|
26
|
+
<ContentImageBlock
|
|
27
|
+
src="/coverage-diagram.png"
|
|
28
|
+
alt="Diagram showing term life coverage periods from 10 to 30 years"
|
|
29
|
+
caption="Coverage periods available for term life policies."
|
|
30
|
+
width="full"
|
|
31
|
+
/>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Design Tokens
|
|
35
|
+
|
|
36
|
+
- Border radius: `var(--border-radius-base)`
|
|
37
|
+
- Caption: `var(--h6-font-size)`, `var(--color-gray-dark)`
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Cross-Sell Card Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A grid of related product or content cards. Used to drive cross-sell between product lines or surface related coverage options. Max 3 cards per row; renders as a responsive grid.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `cards` | `CrossSellCard[]` | Yes | Array of cards (recommended: 2–4) |
|
|
14
|
+
| `className` | `string` | No | Additional CSS class |
|
|
15
|
+
|
|
16
|
+
### CrossSellCard
|
|
17
|
+
|
|
18
|
+
| Prop | Type | Required | Description |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
| `heading` | `string` | Yes | Card title |
|
|
21
|
+
| `body` | `string` | Yes | Short description |
|
|
22
|
+
| `ctaLabel` | `string` | Yes | Link text |
|
|
23
|
+
| `ctaHref` | `string` | Yes | Link destination |
|
|
24
|
+
| `imageSrc` | `string` | No | Card image URL |
|
|
25
|
+
| `imageAlt` | `string` | No | Image alt text |
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import { CrossSellCardBlock } from 'lion-make'
|
|
31
|
+
|
|
32
|
+
<CrossSellCardBlock cards={[
|
|
33
|
+
{ heading: 'Whole Life', body: 'Lifetime coverage with a cash value component.', ctaLabel: 'Explore whole life', ctaHref: '/whole-life', imageSrc: '/img/whole-life.jpg', imageAlt: '' },
|
|
34
|
+
{ heading: 'Medicare Supplement', body: 'Cover gaps in Original Medicare.', ctaLabel: 'Learn more', ctaHref: '/medicare', imageSrc: '/img/medicare.jpg', imageAlt: '' },
|
|
35
|
+
]} />
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Design Tokens
|
|
39
|
+
|
|
40
|
+
- Card border: `var(--border-width-thin)` solid `var(--color-line)`
|
|
41
|
+
- Card border radius: `var(--border-radius-base)`
|
|
42
|
+
- Heading: `var(--h3-font-size)`, `var(--font-weight-600)`
|
|
43
|
+
- Body: `var(--font-size-base)`, `var(--color-text)`
|
|
44
|
+
- CTA: `var(--color-link)`, `var(--font-weight-600)`
|
|
45
|
+
- Grid gap: `var(--Grid-gutter-size)`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Decorative List Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A styled list with decorative markers. Use for feature lists, benefits, or steps. More visually engaging than a plain HTML list.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `items` | `string[]` | Yes | — | List items |
|
|
14
|
+
| `style` | `'checkmark' \| 'bullet' \| 'number' \| 'icon'` | No | `'checkmark'` | Marker style |
|
|
15
|
+
| `heading` | `string` | No | — | Optional section heading above the list |
|
|
16
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { DecorativeListBlock } from 'lion-make'
|
|
22
|
+
|
|
23
|
+
<DecorativeListBlock
|
|
24
|
+
style="checkmark"
|
|
25
|
+
heading="What's included"
|
|
26
|
+
items={[
|
|
27
|
+
'No medical exam required',
|
|
28
|
+
'Coverage starts immediately',
|
|
29
|
+
'Fixed premiums — never increases',
|
|
30
|
+
'Portable — keeps coverage if you change jobs',
|
|
31
|
+
]}
|
|
32
|
+
/>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Design Tokens
|
|
36
|
+
|
|
37
|
+
- Marker color: `var(--color-brand)`
|
|
38
|
+
- Marker weight: `var(--font-weight-700)`
|
|
39
|
+
- Item text: `var(--font-size-base)`, `var(--color-text)`
|
|
40
|
+
- Item gap: `var(--padding-small-vertical)`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Email Call-out Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A compact, highlighted block for capturing a single email address. Lighter-weight than `LeadForm` — use when you only need an email with no other fields. For multi-field capture, use `LeadForm` or `MultiStepLeadForm`.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `heading` | `string` | Yes | — | Block headline |
|
|
14
|
+
| `body` | `string` | No | — | Supporting copy |
|
|
15
|
+
| `placeholder` | `string` | No | `'Enter your email'` | Input placeholder text |
|
|
16
|
+
| `submitLabel` | `string` | No | `'Subscribe'` | Submit button label |
|
|
17
|
+
| `onSubmit` | `(email: string) => void` | No | — | Callback with submitted email |
|
|
18
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { EmailCalloutBlock } from 'lion-make'
|
|
24
|
+
|
|
25
|
+
<EmailCalloutBlock
|
|
26
|
+
heading="Stay informed"
|
|
27
|
+
body="Get tips on protecting your family — delivered monthly."
|
|
28
|
+
placeholder="your@email.com"
|
|
29
|
+
submitLabel="Subscribe"
|
|
30
|
+
onSubmit={(email) => subscribeEmail(email)}
|
|
31
|
+
/>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Design Tokens
|
|
35
|
+
|
|
36
|
+
- Background: `var(--color-teal-tint)`
|
|
37
|
+
- Border radius: `var(--border-radius-base)`
|
|
38
|
+
- Submit: `var(--color-brand)` background, `var(--color-white)` text
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Embedded Video Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Embeds a video (YouTube, Vimeo, or hosted) in a responsive aspect-ratio wrapper. Use for product explainers, testimonials, or educational content.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `src` | `string` | Yes | — | Embed URL (YouTube/Vimeo embed URL, not the watch URL) |
|
|
14
|
+
| `title` | `string` | Yes | — | Accessible title for the iframe |
|
|
15
|
+
| `aspectRatio` | `'16/9' \| '4/3' \| '1/1'` | No | `'16/9'` | Video aspect ratio |
|
|
16
|
+
| `autoplay` | `boolean` | No | `false` | Append autoplay parameter to src |
|
|
17
|
+
| `caption` | `string` | No | — | Optional caption below the video |
|
|
18
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { EmbeddedVideoBlock } from 'lion-make'
|
|
24
|
+
|
|
25
|
+
<EmbeddedVideoBlock
|
|
26
|
+
src="https://www.youtube.com/embed/dQw4w9WgXcQ"
|
|
27
|
+
title="How term life insurance works"
|
|
28
|
+
aspectRatio="16/9"
|
|
29
|
+
caption="A 2-minute overview of term life coverage."
|
|
30
|
+
/>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Design Tokens
|
|
34
|
+
|
|
35
|
+
- Border radius: `var(--border-radius-base)`
|
|
36
|
+
- Caption: `var(--h6-font-size)`, `var(--color-gray-dark)`
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Full Size Image with Highlight Box
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column only. Not valid in Sideburn or Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A full-width image with an overlaid highlight box positioned in one of the four corners. The highlight box contains a heading, body, and optional CTA. Use for visually impactful section openers that combine photography with a key message.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `imageSrc` | `string` | Yes | — | Full-width background image URL |
|
|
14
|
+
| `imageAlt` | `string` | Yes | — | Image alt text |
|
|
15
|
+
| `highlightBox` | `HighlightBox` | Yes | — | The overlay box content |
|
|
16
|
+
| `highlightBoxPosition` | `'bottom-left' \| 'bottom-right' \| 'top-left' \| 'top-right'` | No | `'bottom-left'` | Corner where the box appears |
|
|
17
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
18
|
+
|
|
19
|
+
### HighlightBox
|
|
20
|
+
|
|
21
|
+
| Prop | Type | Required | Description |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| `heading` | `string` | Yes | Overlay heading |
|
|
24
|
+
| `body` | `string` | Yes | Overlay body text |
|
|
25
|
+
| `ctaLabel` | `string` | No | CTA button label |
|
|
26
|
+
| `ctaHref` | `string` | No | CTA destination |
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import { FullSizeImageWithHighlightBox } from 'lion-make'
|
|
32
|
+
|
|
33
|
+
<FullSizeImageWithHighlightBox
|
|
34
|
+
imageSrc="/family-landscape.jpg"
|
|
35
|
+
imageAlt="Family hiking together"
|
|
36
|
+
highlightBoxPosition="bottom-left"
|
|
37
|
+
highlightBox={{
|
|
38
|
+
heading: 'Protect what you love most',
|
|
39
|
+
body: 'Term life coverage from $12/month. No medical exam.',
|
|
40
|
+
ctaLabel: 'Get a quote',
|
|
41
|
+
ctaHref: '/quote',
|
|
42
|
+
}}
|
|
43
|
+
/>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Design Tokens
|
|
47
|
+
|
|
48
|
+
- Highlight box background: `var(--color-white)`
|
|
49
|
+
- Highlight box border radius: `var(--border-radius-base)`
|
|
50
|
+
- Highlight box padding: `var(--padding-edge)`
|
|
51
|
+
- Highlight box max-width: `360px`
|
|
52
|
+
- CTA background: `var(--color-brand)`, text: `var(--color-white)`
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Horizontal Rule
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A horizontal divider line to visually separate content sections. Use sparingly — prefer `SpacingBlock` for vertical rhythm without a visible line.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `style` | `'solid' \| 'dashed' \| 'dotted'` | No | `'solid'` | Line style |
|
|
14
|
+
| `color` | `string` | No | `var(--color-line)` | CSS color value or token |
|
|
15
|
+
| `thickness` | `'thin' \| 'base' \| 'thick'` | No | `'thin'` | Line weight |
|
|
16
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { HorizontalRule } from 'lion-make'
|
|
22
|
+
|
|
23
|
+
<HorizontalRule />
|
|
24
|
+
|
|
25
|
+
// Thick brand-colored divider
|
|
26
|
+
<HorizontalRule thickness="thick" color="var(--color-brand)" />
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Design Tokens
|
|
30
|
+
|
|
31
|
+
- thin: `var(--border-width-thin)` (1px)
|
|
32
|
+
- base: `var(--border-width-base)` (2px)
|
|
33
|
+
- thick: `var(--border-width-thick)` (3px)
|
|
34
|
+
- Default color: `var(--color-line)` → `var(--color-gray-light)`
|
|
35
|
+
- Margin: `var(--padding-edge)` top and bottom
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Hot Jobs Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column only. Not valid in Sideburn or Outro.
|
|
4
|
+
|
|
5
|
+
**Platform restriction:** Careers platform only (`data-platform="careers"`).
|
|
6
|
+
|
|
7
|
+
## Description
|
|
8
|
+
|
|
9
|
+
A curated or dynamically-populated listing of featured open positions. Used on careers landing pages and targeted recruiting pages to surface high-priority roles. Connects to the careers data source at runtime; the stub accepts a static `jobs` prop for prototyping.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `jobs` | `JobItem[]` | Yes | — | Array of job listings |
|
|
16
|
+
| `heading` | `string` | No | `'Featured opportunities'` | Section heading |
|
|
17
|
+
| `subtext` | `string` | No | — | Optional supporting copy |
|
|
18
|
+
| `count` | `number` | No | `6` | Max jobs to display |
|
|
19
|
+
| `ctaLabel` | `string` | No | `'View all jobs'` | Link to full job board |
|
|
20
|
+
| `ctaHref` | `string` | No | — | Full job board URL |
|
|
21
|
+
| `layout` | `'cards' \| 'list'` | No | `'cards'` | Display mode |
|
|
22
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
23
|
+
|
|
24
|
+
### JobItem
|
|
25
|
+
|
|
26
|
+
| Prop | Type | Description |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `title` | `string` | Job title |
|
|
29
|
+
| `location` | `string` | City, State or "Remote" |
|
|
30
|
+
| `department` | `string` | Department or team |
|
|
31
|
+
| `type` | `'full-time' \| 'part-time' \| 'contract' \| 'internship'` | Employment type |
|
|
32
|
+
| `postedAt` | `string` | ISO 8601 date posted |
|
|
33
|
+
| `applyHref` | `string` | Link to application page |
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
import { HotJobsBlock } from 'lion-make'
|
|
39
|
+
|
|
40
|
+
<HotJobsBlock
|
|
41
|
+
heading="We're hiring"
|
|
42
|
+
subtext="Join our team and help families find financial peace of mind."
|
|
43
|
+
jobs={featuredJobs}
|
|
44
|
+
count={6}
|
|
45
|
+
ctaLabel="See all open roles"
|
|
46
|
+
ctaHref="/careers/jobs"
|
|
47
|
+
/>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Placement Constraint
|
|
51
|
+
|
|
52
|
+
Only valid on pages where `data-platform="careers"` is set at the page root. Do not use on product or blog pages.
|