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,46 @@
|
|
|
1
|
+
# Header — Underwriter
|
|
2
|
+
|
|
3
|
+
**Zone:** Header only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Displays the underwriting company attribution — e.g., "Underwritten by United of Omaha Life Insurance Company." Required on product pages where insurance regulatory compliance mandates that the underwriter is disclosed at the page level.
|
|
8
|
+
|
|
9
|
+
Renders as a small text strip (optionally linked and optionally with a logo). Not the same as the `ComplianceBlock` in the footer — the footer compliance block handles Item Numbers and Material IDs; this is the brand-level underwriter identity.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `text` | `string` | Yes | — | Underwriter attribution text |
|
|
16
|
+
| `logoSrc` | `string` | No | — | Underwriter logo URL |
|
|
17
|
+
| `logoAlt` | `string` | No | `''` | Logo alt text |
|
|
18
|
+
| `href` | `string` | No | — | Optional link (e.g., to underwriter's About page) |
|
|
19
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { Section, HeaderUnderwriter } from 'lion-make'
|
|
25
|
+
|
|
26
|
+
<Section zone="header">
|
|
27
|
+
<HeaderUnderwriter
|
|
28
|
+
text="Underwritten by United of Omaha Life Insurance Company"
|
|
29
|
+
logoSrc="/img/logo-united-of-omaha.svg"
|
|
30
|
+
logoAlt="United of Omaha Life Insurance Company"
|
|
31
|
+
/>
|
|
32
|
+
</Section>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Placement Rules
|
|
36
|
+
|
|
37
|
+
- Header zone only.
|
|
38
|
+
- Typically placed inside `CorporateUniversalHeader` (the top thin bar).
|
|
39
|
+
- Required on all product DLPs where a specific underwriting entity applies.
|
|
40
|
+
- Consult legal/compliance for exact required phrasing per product line.
|
|
41
|
+
|
|
42
|
+
## Design Tokens
|
|
43
|
+
|
|
44
|
+
- Text: `var(--h6-font-size)`, `var(--font-weight-400)`, `var(--color-white)`
|
|
45
|
+
- Logo height: 24px max within the bar
|
|
46
|
+
- Background inherits from `CorporateUniversalHeader`: `var(--color-blue-dark)`
|
|
@@ -2,33 +2,79 @@
|
|
|
2
2
|
|
|
3
3
|
**Zone rule:** These content types can only be placed in the Header zone. Never use them in Hero, General, or Footer zones.
|
|
4
4
|
|
|
5
|
-
The Header zone is
|
|
5
|
+
The Header zone is composed of two structural bars (`CorporateUniversalHeader` and `GlobalHeaderBar`) that act as containers. The 7 header content types are the individual elements placed inside those bars.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
---
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
|
12
|
-
|
|
13
|
-
|
|
|
9
|
+
## Content Types
|
|
10
|
+
|
|
11
|
+
| Content type | Component | Required | Typical bar |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| Call to Action | `HeaderCTA` | No | GlobalHeaderBar |
|
|
14
|
+
| Logo | `HeaderLogo` | Yes — one per page | CorporateUniversalHeader or GlobalHeaderBar |
|
|
15
|
+
| Product | `HeaderProduct` | No — product DLPs only | GlobalHeaderBar |
|
|
16
|
+
| Section Navigation | `HeaderSectionNavigation` | No | Below GlobalHeaderBar |
|
|
17
|
+
| Section Title | `HeaderSectionTitle` | No | GlobalHeaderBar |
|
|
18
|
+
| Top Level Navigation | `TopLevelNavigation` | Yes — one per page | GlobalHeaderBar |
|
|
19
|
+
| Underwriter | `HeaderUnderwriter` | Varies — required by compliance on product pages | CorporateUniversalHeader |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Header Structure
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Header zone
|
|
27
|
+
├── CorporateUniversalHeader ← thin top bar
|
|
28
|
+
│ ├── HeaderLogo (brand logo)
|
|
29
|
+
│ └── HeaderUnderwriter (underwriter attribution, if required)
|
|
30
|
+
└── GlobalHeaderBar ← main nav bar
|
|
31
|
+
├── HeaderLogo (or HeaderProduct on product DLPs)
|
|
32
|
+
├── TopLevelNavigation (global nav with optional dropdowns)
|
|
33
|
+
├── HeaderSectionTitle (if applicable)
|
|
34
|
+
├── HeaderCTA (1–2 CTAs, e.g. "Get a quote", "Log in")
|
|
35
|
+
└── HeaderSectionNavigation (below the bar, on section hubs)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
14
39
|
|
|
15
40
|
## Placement Example
|
|
16
41
|
|
|
17
42
|
```tsx
|
|
18
|
-
import {
|
|
43
|
+
import {
|
|
44
|
+
Section,
|
|
45
|
+
CorporateUniversalHeader,
|
|
46
|
+
GlobalHeaderBar,
|
|
47
|
+
HeaderLogo,
|
|
48
|
+
HeaderUnderwriter,
|
|
49
|
+
TopLevelNavigation,
|
|
50
|
+
HeaderCTA,
|
|
51
|
+
} from 'lion-make'
|
|
19
52
|
|
|
20
53
|
<Section zone="header">
|
|
21
|
-
<CorporateUniversalHeader
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
54
|
+
<CorporateUniversalHeader>
|
|
55
|
+
<HeaderLogo src="/img/logo.svg" alt="Mutual of Omaha" href="/" />
|
|
56
|
+
<HeaderUnderwriter text="Underwritten by United of Omaha Life Insurance Company" />
|
|
57
|
+
</CorporateUniversalHeader>
|
|
58
|
+
<GlobalHeaderBar>
|
|
59
|
+
<TopLevelNavigation items={navItems} />
|
|
60
|
+
<HeaderCTA label="Get a quote" href="/quote" variant="button" />
|
|
61
|
+
<HeaderCTA label="Log in" href="/login" variant="link" />
|
|
62
|
+
</GlobalHeaderBar>
|
|
28
63
|
</Section>
|
|
29
64
|
```
|
|
30
65
|
|
|
66
|
+
---
|
|
67
|
+
|
|
31
68
|
## Files in This Section
|
|
32
69
|
|
|
70
|
+
- [header-cta.md](./header-cta.md)
|
|
71
|
+
- [header-logo.md](./header-logo.md)
|
|
72
|
+
- [header-product.md](./header-product.md)
|
|
73
|
+
- [header-section-navigation.md](./header-section-navigation.md)
|
|
74
|
+
- [header-section-title.md](./header-section-title.md)
|
|
75
|
+
- [top-level-navigation.md](./top-level-navigation.md)
|
|
76
|
+
- [header-underwriter.md](./header-underwriter.md)
|
|
77
|
+
|
|
78
|
+
Legacy structural components (bars, not content types):
|
|
33
79
|
- [corporate-universal-header.md](./corporate-universal-header.md)
|
|
34
80
|
- [global-header-bar.md](./global-header-bar.md)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Header — Top Level Navigation
|
|
2
|
+
|
|
3
|
+
**Zone:** Header only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
The global navigation menu — the primary wayfinding element across all pages. Renders as a horizontal link bar with optional dropdown sub-menus. Every page must include exactly one `TopLevelNavigation`.
|
|
8
|
+
|
|
9
|
+
Supports one level of dropdown children. Deeper nesting is not supported in Mondrian.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `items` | `TopLevelNavItem[]` | Yes | — | Top-level navigation links |
|
|
16
|
+
| `ariaLabel` | `string` | No | `'Main navigation'` | Accessible label for the `<nav>` element |
|
|
17
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
18
|
+
|
|
19
|
+
### TopLevelNavItem
|
|
20
|
+
|
|
21
|
+
| Prop | Type | Required | Description |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| `label` | `string` | Yes | Link text |
|
|
24
|
+
| `href` | `string` | Yes | Destination URL |
|
|
25
|
+
| `isActive` | `boolean` | No | Marks the currently active section |
|
|
26
|
+
| `children` | `TopLevelNavItem[]` | No | Dropdown sub-items (max 8 recommended) |
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import { Section, TopLevelNavigation } from 'lion-make'
|
|
32
|
+
|
|
33
|
+
<Section zone="header">
|
|
34
|
+
<TopLevelNavigation
|
|
35
|
+
items={[
|
|
36
|
+
{
|
|
37
|
+
label: 'Life Insurance',
|
|
38
|
+
href: '/life',
|
|
39
|
+
isActive: true,
|
|
40
|
+
children: [
|
|
41
|
+
{ label: 'Term Life', href: '/life/term' },
|
|
42
|
+
{ label: 'Whole Life', href: '/life/whole' },
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
{ label: 'Medicare', href: '/medicare' },
|
|
46
|
+
{ label: 'Supplemental Health', href: '/supplemental' },
|
|
47
|
+
{ label: 'About us', href: '/about' },
|
|
48
|
+
]}
|
|
49
|
+
/>
|
|
50
|
+
</Section>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Placement Rules
|
|
54
|
+
|
|
55
|
+
- Header zone only. One per page.
|
|
56
|
+
- Sits inside `GlobalHeaderBar`, typically after `HeaderLogo` and before `HeaderCTA`.
|
|
57
|
+
- Dropdown children are shown on hover (desktop) or tap (mobile).
|
|
58
|
+
|
|
59
|
+
## Accessibility
|
|
60
|
+
|
|
61
|
+
- `<nav aria-label="Main navigation">` wrapper.
|
|
62
|
+
- Active item gets `aria-current="page"`.
|
|
63
|
+
- Items with children get `aria-haspopup="true"`.
|
|
64
|
+
|
|
65
|
+
## Design Tokens
|
|
66
|
+
|
|
67
|
+
- Link: `var(--h5-font-size)`, `var(--font-weight-400)`, `var(--color-white)`
|
|
68
|
+
- Active / hover link: `var(--font-weight-600)`, bottom border `var(--border-width-thick)` solid `var(--color-white)`
|
|
69
|
+
- Dropdown background: `var(--color-white)`
|
|
70
|
+
- Dropdown link: `var(--color-text)`, `var(--font-weight-400)`
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# CTA Hero Block
|
|
2
|
+
|
|
3
|
+
**Zone:** Hero only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
The primary conversion hero. Full-width with a prominent heading, optional subheading and body copy, up to two CTAs, and an optional image or background. This is the default hero for product DLPs and campaign landing pages where driving a conversion action (quote, apply, call) is the primary goal.
|
|
8
|
+
|
|
9
|
+
Use this when the hero needs to drive a user action. If the hero is purely informational (no CTA), use `HeroBlock` instead.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `heading` | `string` | Yes | — | Page `<h1>` — primary message |
|
|
16
|
+
| `subheading` | `string` | No | — | Secondary message line, lighter weight |
|
|
17
|
+
| `body` | `string` | No | — | Supporting copy (1–2 sentences max) |
|
|
18
|
+
| `ctas` | `CTAHeroBlockCTA[]` | No | `[]` | 1–2 CTAs; first is primary, second is secondary |
|
|
19
|
+
| `imageSrc` | `string` | No | — | Hero image URL |
|
|
20
|
+
| `imageAlt` | `string` | No | `''` | Image alt text |
|
|
21
|
+
| `layout` | `'full-bleed' \| 'split-right' \| 'split-left'` | No | `'split-right'` | Layout treatment |
|
|
22
|
+
| `backgroundSrc` | `string` | No | — | Background image URL (full-bleed only) |
|
|
23
|
+
| `legalText` | `string` | No | — | Small legal/disclaimer line below CTAs |
|
|
24
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
25
|
+
|
|
26
|
+
### CTAHeroBlockCTA
|
|
27
|
+
|
|
28
|
+
| Prop | Type | Required | Description |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| `label` | `string` | Yes | Button text |
|
|
31
|
+
| `href` | `string` | Yes | Destination URL |
|
|
32
|
+
| `variant` | `'primary' \| 'secondary'` | No | Button style (default: `'primary'`) |
|
|
33
|
+
|
|
34
|
+
## Layouts
|
|
35
|
+
|
|
36
|
+
| Layout | Description |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `split-right` | Content left, image right (8+4 col on desktop) |
|
|
39
|
+
| `split-left` | Image left, content right (4+8 col on desktop) |
|
|
40
|
+
| `full-bleed` | Background image behind content, centered or left-aligned |
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
import { Section, CTAHeroBlock } from 'lion-make'
|
|
46
|
+
|
|
47
|
+
<Section zone="hero">
|
|
48
|
+
<CTAHeroBlock
|
|
49
|
+
heading="Protect your family for less than a coffee a day"
|
|
50
|
+
subheading="Term life insurance that fits your budget and never raises your rate."
|
|
51
|
+
ctas={[
|
|
52
|
+
{ label: 'Get a free quote', href: '/quote', variant: 'primary' },
|
|
53
|
+
{ label: 'Learn how it works', href: '/term-life', variant: 'secondary' },
|
|
54
|
+
]}
|
|
55
|
+
imageSrc="/img/hero-family.jpg"
|
|
56
|
+
imageAlt="Family at home"
|
|
57
|
+
layout="split-right"
|
|
58
|
+
legalText="Rates based on a 35-year-old non-smoker in good health."
|
|
59
|
+
/>
|
|
60
|
+
</Section>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Design Tokens
|
|
64
|
+
|
|
65
|
+
- Background: `var(--color-brand)` or image
|
|
66
|
+
- Heading: `var(--h1-font-size)`, `var(--font-weight-700)`, `var(--color-white)`
|
|
67
|
+
- Subheading: `var(--h3-font-size)`, `var(--font-weight-300)`, `var(--color-white)`
|
|
68
|
+
- Primary CTA: `var(--color-white)` background, `var(--color-brand)` text
|
|
69
|
+
- Secondary CTA: transparent background, `var(--color-white)` border + text
|
|
70
|
+
- Legal text: `var(--h6-font-size)`, `var(--color-white-opaque)`
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Hero Block
|
|
2
|
+
|
|
3
|
+
**Zone:** Hero only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
The standard informational hero. Used when the hero zone carries context and orientation rather than a direct conversion action. Supports an eyebrow label, heading, subheading, body copy, and an optional image — but no CTA slots. If a CTA is needed, use `CTAHeroBlock` instead.
|
|
8
|
+
|
|
9
|
+
Typical use cases: section index pages, About pages, content hub headers, educational/resource pages.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `heading` | `string` | Yes | — | Page `<h1>` |
|
|
16
|
+
| `subheading` | `string` | No | — | Supporting headline, lighter weight |
|
|
17
|
+
| `body` | `string` | No | — | Introductory paragraph |
|
|
18
|
+
| `eyebrow` | `string` | No | — | Small uppercase label above the heading (e.g., product category) |
|
|
19
|
+
| `imageSrc` | `string` | No | — | Hero image URL |
|
|
20
|
+
| `imageAlt` | `string` | No | `''` | Image alt text |
|
|
21
|
+
| `layout` | `'full-bleed' \| 'split-right' \| 'split-left' \| 'minimal'` | No | `'full-bleed'` | Layout treatment |
|
|
22
|
+
| `backgroundSrc` | `string` | No | — | Background image URL (full-bleed only) |
|
|
23
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
24
|
+
|
|
25
|
+
## Layouts
|
|
26
|
+
|
|
27
|
+
| Layout | Description |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `full-bleed` | Background image or color fills the full hero width |
|
|
30
|
+
| `split-right` | Content left, image right |
|
|
31
|
+
| `split-left` | Image left, content right |
|
|
32
|
+
| `minimal` | Text only, no image; centered or left-aligned; typically shorter |
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
import { Section, HeroBlock } from 'lion-make'
|
|
38
|
+
|
|
39
|
+
<Section zone="hero">
|
|
40
|
+
<HeroBlock
|
|
41
|
+
eyebrow="Life Insurance"
|
|
42
|
+
heading="Coverage built around your life"
|
|
43
|
+
subheading="Explore options for every stage — from starting a family to planning for retirement."
|
|
44
|
+
imageSrc="/img/hero-life.jpg"
|
|
45
|
+
imageAlt="Person reviewing documents"
|
|
46
|
+
layout="split-right"
|
|
47
|
+
/>
|
|
48
|
+
</Section>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Design Tokens
|
|
52
|
+
|
|
53
|
+
- Heading: `var(--h1-font-size)`, `var(--font-weight-700)`, `var(--color-white)` (or `var(--color-text)` on light backgrounds)
|
|
54
|
+
- Eyebrow: `var(--h6-font-size)`, `var(--font-weight-600)`, uppercase, `var(--color-teal)`
|
|
55
|
+
- Subheading: `var(--h3-font-size)`, `var(--font-weight-300)`
|
|
56
|
+
- Body: `var(--body-font-size)`, `var(--font-weight-400)`
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Multi Hero
|
|
2
|
+
|
|
3
|
+
**Zone:** Hero only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A multi-panel hero that rotates or tabs between 2–5 content slides. Each panel is independently authored with its own heading, image, and optional CTA. Use when multiple products or campaigns need to share the hero zone on a hub page (e.g., a home page or insurance category index).
|
|
8
|
+
|
|
9
|
+
Auto-rotation is optional and disabled by default for accessibility. When enabled, panels must include sufficient contrast and the rotation must be user-pausable.
|
|
10
|
+
|
|
11
|
+
**Limit to hub/home pages.** On product DLPs, use `CTAHeroBlock` — a single focused message always outperforms a rotating hero for conversion.
|
|
12
|
+
|
|
13
|
+
## Props
|
|
14
|
+
|
|
15
|
+
| Prop | Type | Required | Default | Description |
|
|
16
|
+
|---|---|---|---|---|
|
|
17
|
+
| `panels` | `MultiHeroPanel[]` | Yes | — | Slide content (min 2, max 5 recommended) |
|
|
18
|
+
| `autoRotate` | `boolean` | No | `false` | Whether panels advance automatically |
|
|
19
|
+
| `rotateIntervalMs` | `number` | No | `5000` | Auto-rotation interval in milliseconds |
|
|
20
|
+
| `defaultActiveIndex` | `number` | No | `0` | Index of the panel shown on load |
|
|
21
|
+
| `showIndicators` | `boolean` | No | `true` | Dot indicators below the hero |
|
|
22
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
23
|
+
|
|
24
|
+
### MultiHeroPanel
|
|
25
|
+
|
|
26
|
+
| Prop | Type | Required | Description |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| `heading` | `string` | Yes | Panel `<h1>` |
|
|
29
|
+
| `subheading` | `string` | No | Supporting headline |
|
|
30
|
+
| `body` | `string` | No | Short paragraph |
|
|
31
|
+
| `imageSrc` | `string` | No | Panel image URL |
|
|
32
|
+
| `imageAlt` | `string` | No | Image alt text |
|
|
33
|
+
| `ctaLabel` | `string` | No | CTA button text |
|
|
34
|
+
| `ctaHref` | `string` | No | CTA destination |
|
|
35
|
+
| `id` | `string` | No | Unique ID for `aria-controls` |
|
|
36
|
+
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { Section, MultiHero } from 'lion-make'
|
|
41
|
+
|
|
42
|
+
<Section zone="hero">
|
|
43
|
+
<MultiHero
|
|
44
|
+
autoRotate={false}
|
|
45
|
+
panels={[
|
|
46
|
+
{
|
|
47
|
+
heading: 'Life insurance made simple',
|
|
48
|
+
subheading: 'Affordable coverage, guaranteed rates.',
|
|
49
|
+
imageSrc: '/img/hero-life.jpg',
|
|
50
|
+
imageAlt: '',
|
|
51
|
+
ctaLabel: 'Get a quote',
|
|
52
|
+
ctaHref: '/life/quote',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
heading: 'Medicare coverage you can count on',
|
|
56
|
+
subheading: 'Supplement plans to fill the gaps.',
|
|
57
|
+
imageSrc: '/img/hero-medicare.jpg',
|
|
58
|
+
imageAlt: '',
|
|
59
|
+
ctaLabel: 'Explore plans',
|
|
60
|
+
ctaHref: '/medicare',
|
|
61
|
+
},
|
|
62
|
+
]}
|
|
63
|
+
/>
|
|
64
|
+
</Section>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Accessibility
|
|
68
|
+
|
|
69
|
+
- Each panel has `aria-hidden` when not active.
|
|
70
|
+
- Indicators use `role="tab"` + `aria-selected`.
|
|
71
|
+
- If `autoRotate` is `true`, a pause button must be provided (implement in the consuming app).
|
|
72
|
+
|
|
73
|
+
## Design Tokens
|
|
74
|
+
|
|
75
|
+
- Active indicator: `var(--color-brand)`
|
|
76
|
+
- Inactive indicator: `var(--color-line)`
|
|
77
|
+
- Panel heading: `var(--h1-font-size)`, `var(--font-weight-700)`, `var(--color-white)`
|
|
78
|
+
- Panel CTA: `var(--color-white)` background, `var(--color-brand)` text
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Not Available Hero Block
|
|
2
|
+
|
|
3
|
+
**Zone:** Hero only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A dedicated hero for pages or products that are not available in the user's state or region. Replaces the standard hero entirely when the product cannot be offered — do not render another hero type alongside this one.
|
|
8
|
+
|
|
9
|
+
The block communicates clearly that the product is unavailable, names the state if known, offers alternative products or paths, and provides a contact option.
|
|
10
|
+
|
|
11
|
+
This component should be rendered conditionally based on state-availability data from the product catalog or facet system. Never hardcode unavailability — derive it from the facet targeting layer.
|
|
12
|
+
|
|
13
|
+
## Props
|
|
14
|
+
|
|
15
|
+
| Prop | Type | Required | Default | Description |
|
|
16
|
+
|---|---|---|---|---|
|
|
17
|
+
| `stateName` | `string` | No | — | Name of the unavailable state (e.g., `'New York'`). Used in the default heading if `heading` is not provided. |
|
|
18
|
+
| `heading` | `string` | No | `'Not available in [stateName]'` | Override the default heading |
|
|
19
|
+
| `body` | `string` | No | Default message | Override the default body copy |
|
|
20
|
+
| `alternatives` | `NotAvailableAlternative[]` | No | `[]` | Links to related available products |
|
|
21
|
+
| `contactCtaLabel` | `string` | No | — | Contact CTA label (e.g., "Talk to an agent") |
|
|
22
|
+
| `contactCtaHref` | `string` | No | — | Contact CTA destination |
|
|
23
|
+
| `imageSrc` | `string` | No | — | Optional supporting image |
|
|
24
|
+
| `imageAlt` | `string` | No | `''` | Image alt text |
|
|
25
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
26
|
+
|
|
27
|
+
### NotAvailableAlternative
|
|
28
|
+
|
|
29
|
+
| Prop | Type | Description |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| `label` | `string` | Link text (e.g., "Explore Medicare Supplement plans") |
|
|
32
|
+
| `href` | `string` | Destination URL |
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
import { Section, NotAvailableHeroBlock } from 'lion-make'
|
|
38
|
+
|
|
39
|
+
// Rendered when facet targeting determines the product is unavailable in the user's state
|
|
40
|
+
<Section zone="hero">
|
|
41
|
+
<NotAvailableHeroBlock
|
|
42
|
+
stateName="New York"
|
|
43
|
+
alternatives={[
|
|
44
|
+
{ label: 'Medicare Supplement plans', href: '/medicare' },
|
|
45
|
+
{ label: 'Supplemental health coverage', href: '/supplemental' },
|
|
46
|
+
]}
|
|
47
|
+
contactCtaLabel="Talk to an agent"
|
|
48
|
+
contactCtaHref="/contact"
|
|
49
|
+
/>
|
|
50
|
+
</Section>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Default copy (when props are omitted)
|
|
54
|
+
|
|
55
|
+
- **Heading:** "Not available in [stateName]" or "Not available in your state"
|
|
56
|
+
- **Body:** "This product is not currently offered in your area. Explore available options below or contact us for help finding coverage."
|
|
57
|
+
|
|
58
|
+
## Design Tokens
|
|
59
|
+
|
|
60
|
+
- Background: `var(--color-gray-lightest)`
|
|
61
|
+
- Heading: `var(--h2-font-size)`, `var(--font-weight-700)`, `var(--color-text)`
|
|
62
|
+
- Body: `var(--body-font-size)`, `var(--color-gray-dark)`
|
|
63
|
+
- Alternative links: `var(--color-brand)`, underline
|
|
64
|
+
- Contact CTA: `var(--color-brand)` background, `var(--color-white)` text
|
|
@@ -1,41 +1,76 @@
|
|
|
1
1
|
# Hero Zone Content Types
|
|
2
2
|
|
|
3
|
-
**Zone rule:** These content types can only be placed in the Hero zone. Never use them in Header, General, or Footer zones.
|
|
3
|
+
**Zone rule:** These content types can only be placed in the Hero zone. Never use them in Header, General, Anklet, or Footer zones.
|
|
4
4
|
|
|
5
|
-
The Hero zone
|
|
5
|
+
The Hero zone sits immediately below the Header and spans full page width regardless of template (Forehead or Sideburn). Every page should have one hero — the type chosen depends on the page's goal.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
---
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Content Types
|
|
10
|
+
|
|
11
|
+
| Content type | Component | When to use |
|
|
10
12
|
|---|---|---|
|
|
11
|
-
| Hero | `
|
|
13
|
+
| CTA Hero Block | `CTAHeroBlock` | Primary conversion goal — product DLPs, campaign pages |
|
|
14
|
+
| Hero Block | `HeroBlock` | Informational — section hubs, About, resource pages |
|
|
15
|
+
| Multi Hero | `MultiHero` | Multiple products/messages — home page, category hubs |
|
|
16
|
+
| Not Available Hero Block | `NotAvailableHeroBlock` | Product unavailable in user's state (facet-triggered) |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Decision Tree
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
Does the hero need a CTA?
|
|
24
|
+
├── Yes → Does the page feature a single product/campaign?
|
|
25
|
+
│ ├── Yes → CTAHeroBlock
|
|
26
|
+
│ └── No (hub page, multiple products) → MultiHero
|
|
27
|
+
└── No → Is the product unavailable in the user's state?
|
|
28
|
+
├── Yes → NotAvailableHeroBlock
|
|
29
|
+
└── No → HeroBlock
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
12
33
|
|
|
13
|
-
##
|
|
34
|
+
## Layout Options
|
|
14
35
|
|
|
15
|
-
|
|
|
36
|
+
| Layout | Supported by |
|
|
16
37
|
|---|---|
|
|
17
|
-
| `full-bleed` |
|
|
18
|
-
| `split` |
|
|
19
|
-
| `
|
|
38
|
+
| `full-bleed` | CTAHeroBlock, HeroBlock |
|
|
39
|
+
| `split-right` | CTAHeroBlock, HeroBlock |
|
|
40
|
+
| `split-left` | CTAHeroBlock, HeroBlock |
|
|
41
|
+
| `minimal` | HeroBlock only |
|
|
42
|
+
| Multi-panel | MultiHero (unique — panels, not a layout prop) |
|
|
43
|
+
|
|
44
|
+
---
|
|
20
45
|
|
|
21
46
|
## Placement Example
|
|
22
47
|
|
|
23
48
|
```tsx
|
|
24
|
-
import { Section,
|
|
49
|
+
import { Section, CTAHeroBlock } from 'lion-make'
|
|
25
50
|
|
|
26
51
|
<Section zone="hero">
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
52
|
+
<CTAHeroBlock
|
|
53
|
+
heading="Protect your family for less than a coffee a day"
|
|
54
|
+
subheading="Term life insurance that fits your budget."
|
|
55
|
+
ctas={[
|
|
56
|
+
{ label: 'Get a free quote', href: '/quote', variant: 'primary' },
|
|
57
|
+
{ label: 'Learn how it works', href: '/term-life', variant: 'secondary' },
|
|
58
|
+
]}
|
|
59
|
+
imageSrc="/img/hero-family.jpg"
|
|
32
60
|
imageAlt="Family at home"
|
|
33
|
-
|
|
34
|
-
ctaHref="/quote"
|
|
61
|
+
layout="split-right"
|
|
35
62
|
/>
|
|
36
63
|
</Section>
|
|
37
64
|
```
|
|
38
65
|
|
|
66
|
+
---
|
|
67
|
+
|
|
39
68
|
## Files in This Section
|
|
40
69
|
|
|
70
|
+
- [cta-hero-block.md](./cta-hero-block.md)
|
|
71
|
+
- [hero-block.md](./hero-block.md)
|
|
72
|
+
- [multi-hero.md](./multi-hero.md)
|
|
73
|
+
- [not-available-hero-block.md](./not-available-hero-block.md)
|
|
74
|
+
|
|
75
|
+
Legacy (pre-Mondrian generic stub — kept for backward compatibility):
|
|
41
76
|
- [hero-variants.md](./hero-variants.md)
|