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,55 @@
|
|
|
1
|
+
# RTB - Dynamic
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
RTB (Reasons To Buy) variant that renders a responsive grid of benefit cards from a structured data source. Use when the number of items is variable or content-managed at runtime. Supports optional icons and horizontal rule separators.
|
|
8
|
+
|
|
9
|
+
Compare with:
|
|
10
|
+
- `RTBDescriptive` — text-heavy, explanatory body per item
|
|
11
|
+
- `RTBHighlight` — large stat/number callouts
|
|
12
|
+
- `RTBs` — illustration + short text list
|
|
13
|
+
|
|
14
|
+
## Props
|
|
15
|
+
|
|
16
|
+
| Prop | Type | Required | Description |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| `items` | `RTBDynamicItem[]` | Yes | Array of benefit cards |
|
|
19
|
+
| `heading` | `string` | No | Section heading |
|
|
20
|
+
| `columns` | `2 \| 3 \| 4` | No | Number of grid columns (default: `3`) |
|
|
21
|
+
| `showDividers` | `boolean` | No | Horizontal rules between rows (default: `false`) |
|
|
22
|
+
| `className` | `string` | No | Additional CSS class |
|
|
23
|
+
|
|
24
|
+
### RTBDynamicItem
|
|
25
|
+
|
|
26
|
+
| Prop | Type | Required | Description |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| `heading` | `string` | Yes | Card title |
|
|
29
|
+
| `body` | `string` | No | Supporting copy (1–2 sentences) |
|
|
30
|
+
| `iconSrc` | `string` | No | Icon URL |
|
|
31
|
+
| `iconAlt` | `string` | No | Icon alt text |
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
```tsx
|
|
36
|
+
import { RTBDynamic } from 'lion-make'
|
|
37
|
+
|
|
38
|
+
<RTBDynamic
|
|
39
|
+
heading="What's included"
|
|
40
|
+
columns={3}
|
|
41
|
+
items={[
|
|
42
|
+
{ iconSrc: '/icons/shield.svg', iconAlt: '', heading: 'Death benefit', body: 'Tax-free lump sum paid to your beneficiary.' },
|
|
43
|
+
{ iconSrc: '/icons/calendar.svg', iconAlt: '', heading: 'Flexible terms', body: '10, 20, or 30-year term options.' },
|
|
44
|
+
{ iconSrc: '/icons/dollar.svg', iconAlt: '', heading: 'Level premiums', body: 'Locked-in rate for the life of your policy.' },
|
|
45
|
+
]}
|
|
46
|
+
/>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Design Tokens
|
|
50
|
+
|
|
51
|
+
- Grid gap: `var(--Grid-gutter-size)`
|
|
52
|
+
- Card border: `var(--border-width-thin)` solid `var(--color-line)`
|
|
53
|
+
- Card border-radius: `var(--border-radius-base)`
|
|
54
|
+
- Heading: `var(--h4-font-size)`, `var(--font-weight-600)`
|
|
55
|
+
- Body: `var(--body-font-size)`, `var(--font-weight-400)`
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# RTB - Highlight
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
RTB (Reasons To Buy) variant using large stat/metric callouts as the primary visual hook. Each item leads with a bold number or short phrase, followed by a brief label. Use when data communicates trust more effectively than prose.
|
|
8
|
+
|
|
9
|
+
Compare with:
|
|
10
|
+
- `RTBDescriptive` — text-heavy, explanatory body per item
|
|
11
|
+
- `RTBDynamic` — multi-column grid driven by a data source
|
|
12
|
+
- `RTBs` — illustration + short text list
|
|
13
|
+
|
|
14
|
+
## Props
|
|
15
|
+
|
|
16
|
+
| Prop | Type | Required | Description |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| `items` | `RTBHighlightItem[]` | Yes | Array of stat items (3–5 recommended) |
|
|
19
|
+
| `heading` | `string` | No | Optional section heading |
|
|
20
|
+
| `layout` | `'row' \| 'column'` | No | Arrangement direction (default: `'row'`) |
|
|
21
|
+
| `className` | `string` | No | Additional CSS class |
|
|
22
|
+
|
|
23
|
+
### RTBHighlightItem
|
|
24
|
+
|
|
25
|
+
| Prop | Type | Required | Description |
|
|
26
|
+
|---|---|---|---|
|
|
27
|
+
| `stat` | `string` | Yes | The headline number or short phrase (e.g., "100+ years", "A+ rating") |
|
|
28
|
+
| `label` | `string` | Yes | Brief description of what the stat represents |
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import { RTBHighlight } from 'lion-make'
|
|
34
|
+
|
|
35
|
+
<RTBHighlight
|
|
36
|
+
heading="Trusted by families since 1909"
|
|
37
|
+
items={[
|
|
38
|
+
{ stat: '100+', label: 'Years in business' },
|
|
39
|
+
{ stat: 'A+', label: 'AM Best financial strength rating' },
|
|
40
|
+
{ stat: '$2.4B', label: 'Claims paid in 2023' },
|
|
41
|
+
{ stat: '4M+', label: 'Customers nationwide' },
|
|
42
|
+
]}
|
|
43
|
+
/>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Design Tokens
|
|
47
|
+
|
|
48
|
+
- Stat text: `var(--h1-font-size)`, `var(--font-weight-700)`, `var(--color-brand)`
|
|
49
|
+
- Label text: `var(--h5-font-size)`, `var(--font-weight-400)`, `var(--color-gray-dark)`
|
|
50
|
+
- Dividers between items: `var(--border-width-thin)` solid `var(--color-line)`
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Side Menu Explorer
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column only. Not valid in Sideburn or Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A vertically-stacked tabbed navigation that controls which content panel is visible. Renders as a left-side menu with a persistent panel to the right. Typically used on product and category pages to let users explore coverage options without navigating away.
|
|
8
|
+
|
|
9
|
+
This component is structural (contains panels), so it must not be nested inside another Container.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Description |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| `items` | `SideMenuExplorerItem[]` | Yes | Tabs and their associated panels |
|
|
16
|
+
| `defaultActiveIndex` | `number` | No | Index of the tab to show on load (default: `0`) |
|
|
17
|
+
| `heading` | `string` | No | Accessible heading above the menu |
|
|
18
|
+
| `className` | `string` | No | Additional CSS class |
|
|
19
|
+
|
|
20
|
+
### SideMenuExplorerItem
|
|
21
|
+
|
|
22
|
+
| Prop | Type | Required | Description |
|
|
23
|
+
|---|---|---|---|
|
|
24
|
+
| `label` | `string` | Yes | Tab button label |
|
|
25
|
+
| `panelContent` | `React.ReactNode` | Yes | Content rendered when this tab is active |
|
|
26
|
+
| `id` | `string` | No | Unique ID (used for `aria-controls`; auto-generated if omitted) |
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import { SideMenuExplorer } from 'lion-make'
|
|
32
|
+
|
|
33
|
+
<SideMenuExplorer
|
|
34
|
+
heading="Explore our life insurance options"
|
|
35
|
+
items={[
|
|
36
|
+
{
|
|
37
|
+
label: 'Term Life',
|
|
38
|
+
panelContent: <TermLifePanel />,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: 'Whole Life',
|
|
42
|
+
panelContent: <WholeLifePanel />,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
label: 'Universal Life',
|
|
46
|
+
panelContent: <UniversalLifePanel />,
|
|
47
|
+
},
|
|
48
|
+
]}
|
|
49
|
+
/>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Accessibility
|
|
53
|
+
|
|
54
|
+
- Menu uses `role="tablist"`, each tab `role="tab"`, each panel `role="tabpanel"`.
|
|
55
|
+
- Active tab has `aria-selected="true"`.
|
|
56
|
+
- Panel linked via `aria-labelledby`.
|
|
57
|
+
|
|
58
|
+
## Design Tokens
|
|
59
|
+
|
|
60
|
+
- Menu background: `var(--color-gray-lightest)`
|
|
61
|
+
- Active tab: left border `var(--border-width-thick)` solid `var(--color-brand)`, text `var(--color-brand)`, `var(--font-weight-600)`
|
|
62
|
+
- Inactive tab: `var(--color-gray-dark)`, `var(--font-weight-400)`
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Simple CTA Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A lightweight call-to-action block with a headline, optional subtext, and a single primary button. Distinct from `CTA` (the inline CTA element) — `SimpleCTABlock` is a standalone section block with its own container and background treatment.
|
|
8
|
+
|
|
9
|
+
Use for mid-page conversion nudges that don't need the full weight of a Hero.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `heading` | `string` | Yes | — | Block headline |
|
|
16
|
+
| `subtext` | `string` | No | — | Supporting copy, displayed below the heading |
|
|
17
|
+
| `ctaLabel` | `string` | Yes | — | Button text |
|
|
18
|
+
| `ctaHref` | `string` | Yes | — | Button destination |
|
|
19
|
+
| `ctaVariant` | `'primary' \| 'secondary'` | No | `'primary'` | Button style |
|
|
20
|
+
| `background` | `'white' \| 'gray' \| 'brand'` | No | `'white'` | Block background color |
|
|
21
|
+
| `alignment` | `'left' \| 'center'` | No | `'center'` | Text alignment |
|
|
22
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
import { SimpleCTABlock } from 'lion-make'
|
|
28
|
+
|
|
29
|
+
<SimpleCTABlock
|
|
30
|
+
heading="Ready to protect your family?"
|
|
31
|
+
subtext="Takes less than 5 minutes. No medical exam required."
|
|
32
|
+
ctaLabel="Get a free quote"
|
|
33
|
+
ctaHref="/quote"
|
|
34
|
+
background="gray"
|
|
35
|
+
/>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Design Tokens
|
|
39
|
+
|
|
40
|
+
- Background `gray`: `var(--color-gray-lightest)`
|
|
41
|
+
- Background `brand`: `var(--color-brand)`, text `var(--color-white)`
|
|
42
|
+
- Heading: `var(--h2-font-size)`, `var(--font-weight-700)`
|
|
43
|
+
- Subtext: `var(--body-font-size)`, `var(--font-weight-400)`
|
|
44
|
+
- Padding: `var(--padding-large-v)` vertical
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Spacing Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
An invisible structural block that inserts vertical whitespace between other content types. Use to control rhythm and breathing room without wrapping content in a full Container.
|
|
8
|
+
|
|
9
|
+
Renders as an empty `<div>` with a configurable height — no visible output.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | No | `'md'` | Vertical height of the space |
|
|
16
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
17
|
+
|
|
18
|
+
## Size Reference
|
|
19
|
+
|
|
20
|
+
| Size | Rendered height |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `xs` | `var(--spacing-xs)` — 0.8rem |
|
|
23
|
+
| `sm` | `var(--spacing-sm)` — 1.6rem |
|
|
24
|
+
| `md` | `var(--spacing-md)` — 3.2rem |
|
|
25
|
+
| `lg` | `var(--spacing-lg)` — 6.4rem |
|
|
26
|
+
| `xl` | `var(--spacing-xl)` — 9.6rem |
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import { SpacingBlock } from 'lion-make'
|
|
32
|
+
|
|
33
|
+
<SpacingBlock size="lg" />
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## When to use vs Container padding
|
|
37
|
+
|
|
38
|
+
- Use `SpacingBlock` between two sibling content types that each render in their own Container.
|
|
39
|
+
- Use Container `padding` props when you need to control space inside a single Container's top/bottom.
|
|
40
|
+
- Do not use `SpacingBlock` inside a Container — that creates double-spacing artifacts.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Speed Bump
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A full-width interstitial block used to interrupt content flow and redirect user attention before they continue scrolling. Typically presents a single focused question or confirmation step — "Before you go, are you sure you're covered?" — with one or two action paths.
|
|
8
|
+
|
|
9
|
+
Use sparingly: no more than one Speed Bump per page, and only when the user decision is significant.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `heading` | `string` | Yes | — | Primary question or statement |
|
|
16
|
+
| `subtext` | `string` | No | — | Supporting copy |
|
|
17
|
+
| `primaryCtaLabel` | `string` | Yes | — | Primary action label |
|
|
18
|
+
| `primaryCtaHref` | `string` | Yes | — | Primary action destination |
|
|
19
|
+
| `secondaryCtaLabel` | `string` | No | — | Secondary/dismiss action label |
|
|
20
|
+
| `secondaryCtaHref` | `string` | No | — | Secondary action destination (if omitted, acts as dismiss) |
|
|
21
|
+
| `background` | `'brand' \| 'dark' \| 'light'` | No | `'brand'` | Block background treatment |
|
|
22
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
import { SpeedBump } from 'lion-make'
|
|
28
|
+
|
|
29
|
+
<SpeedBump
|
|
30
|
+
heading="Not sure which plan is right for you?"
|
|
31
|
+
subtext="Talk to an agent — no sales pressure, just answers."
|
|
32
|
+
primaryCtaLabel="Chat with an agent"
|
|
33
|
+
primaryCtaHref="/contact/chat"
|
|
34
|
+
secondaryCtaLabel="Continue browsing"
|
|
35
|
+
background="brand"
|
|
36
|
+
/>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Design Tokens
|
|
40
|
+
|
|
41
|
+
- Background `brand`: `var(--color-brand)`, all text `var(--color-white)`
|
|
42
|
+
- Background `dark`: `var(--color-gray-darkest)`, all text `var(--color-white)`
|
|
43
|
+
- Background `light`: `var(--color-gray-lightest)`, text `var(--color-text)`
|
|
44
|
+
- Heading: `var(--h2-font-size)`, `var(--font-weight-700)`
|
|
45
|
+
- Padding: `var(--padding-large-v)` vertical, `var(--edge-padding)` horizontal
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Table Block
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn (column too narrow).
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A structured data table for comparing products, coverage levels, or feature matrices. Supports column highlighting, sticky header, and optional footnote row. Renders as a semantic `<table>` with accessible markup.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `headers` | `string[]` | Yes | — | Column header labels |
|
|
14
|
+
| `rows` | `TableRow[]` | Yes | — | Data rows |
|
|
15
|
+
| `caption` | `string` | No | — | Accessible `<caption>` (also used as visible heading if `showCaption` is true) |
|
|
16
|
+
| `showCaption` | `boolean` | No | `false` | Render caption visibly above the table |
|
|
17
|
+
| `highlightColumn` | `number` | No | — | Zero-based index of a column to visually highlight |
|
|
18
|
+
| `stickyHeader` | `boolean` | No | `false` | Fix the header row on scroll |
|
|
19
|
+
| `footnote` | `string` | No | — | Legal or explanatory note below the table |
|
|
20
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
21
|
+
|
|
22
|
+
### TableRow
|
|
23
|
+
|
|
24
|
+
| Prop | Type | Description |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| `label` | `string` | Row header (first column) |
|
|
27
|
+
| `cells` | `(string \| React.ReactNode)[]` | Values for remaining columns |
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { TableBlock } from 'lion-make'
|
|
33
|
+
|
|
34
|
+
<TableBlock
|
|
35
|
+
caption="Term life coverage comparison"
|
|
36
|
+
showCaption
|
|
37
|
+
headers={['Feature', '10-Year Term', '20-Year Term', '30-Year Term']}
|
|
38
|
+
highlightColumn={2}
|
|
39
|
+
rows={[
|
|
40
|
+
{ label: 'Starting premium', cells: ['$12/mo', '$18/mo', '$26/mo'] },
|
|
41
|
+
{ label: 'Coverage amount', cells: ['$250k–$1M', '$250k–$1M', '$250k–$1M'] },
|
|
42
|
+
{ label: 'Premium changes', cells: ['Never', 'Never', 'Never'] },
|
|
43
|
+
{ label: 'Medical exam required', cells: ['No', 'No', 'Varies'] },
|
|
44
|
+
]}
|
|
45
|
+
footnote="Premiums shown are illustrative. Actual rates depend on age, health, and coverage selected."
|
|
46
|
+
/>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Design Tokens
|
|
50
|
+
|
|
51
|
+
- Header row: `var(--color-brand)` background, `var(--color-white)` text, `var(--font-weight-600)`
|
|
52
|
+
- Highlighted column header: `var(--color-teal)` background
|
|
53
|
+
- Row border: `var(--border-width-thin)` solid `var(--color-line)`
|
|
54
|
+
- Alternating rows: `var(--color-gray-lightest)` on odd rows
|
|
55
|
+
- Footnote: `var(--h6-font-size)`, `var(--color-gray)`
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# WAHFU (We Are Here For You)
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. Not valid in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
An empathy and support block for sensitive pages (claims, bereavement, illness). Acknowledges the user's situation and surfaces human support options (phone, chat, agent finder). The tone is warm and non-transactional.
|
|
8
|
+
|
|
9
|
+
"WAHFU" is the internal shorthand — do not expose this acronym in UI copy.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `heading` | `string` | No | `'We're here for you'` | Block headline |
|
|
16
|
+
| `body` | `string` | No | — | Empathy statement (1–2 sentences) |
|
|
17
|
+
| `channels` | `WAHFUChannel[]` | Yes | — | List of support contact options |
|
|
18
|
+
| `background` | `'white' \| 'teal' \| 'brand'` | No | `'teal'` | Block background |
|
|
19
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
20
|
+
|
|
21
|
+
### WAHFUChannel
|
|
22
|
+
|
|
23
|
+
| Prop | Type | Required | Description |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| `type` | `'phone' \| 'chat' \| 'agent' \| 'email'` | Yes | Channel category (controls icon) |
|
|
26
|
+
| `label` | `string` | Yes | Display label |
|
|
27
|
+
| `href` | `string` | Yes | Link destination |
|
|
28
|
+
| `detail` | `string` | No | Hours of availability or context (e.g., "Mon–Fri 8am–8pm CT") |
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import { WAHFU } from 'lion-make'
|
|
34
|
+
|
|
35
|
+
<WAHFU
|
|
36
|
+
heading="We're here when you need us most"
|
|
37
|
+
body="Filing a claim during a difficult time shouldn't add stress. Our team is ready to help."
|
|
38
|
+
background="teal"
|
|
39
|
+
channels={[
|
|
40
|
+
{
|
|
41
|
+
type: 'phone',
|
|
42
|
+
label: 'Call us',
|
|
43
|
+
href: 'tel:18006952654',
|
|
44
|
+
detail: 'Mon–Fri 7am–7pm CT',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
type: 'chat',
|
|
48
|
+
label: 'Chat with us',
|
|
49
|
+
href: '/chat',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: 'agent',
|
|
53
|
+
label: 'Find a local agent',
|
|
54
|
+
href: '/agent-finder',
|
|
55
|
+
},
|
|
56
|
+
]}
|
|
57
|
+
/>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Design Tokens
|
|
61
|
+
|
|
62
|
+
- Background `teal`: `var(--color-teal)`, text `var(--color-white)`
|
|
63
|
+
- Background `brand`: `var(--color-brand)`, text `var(--color-white)`
|
|
64
|
+
- Heading: `var(--h2-font-size)`, `var(--font-weight-700)`
|
|
65
|
+
- Channel label: `var(--h5-font-size)`, `var(--font-weight-600)`
|
|
66
|
+
- Detail: `var(--h6-font-size)`, `var(--font-weight-400)`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Header — Call to Action
|
|
2
|
+
|
|
3
|
+
**Zone:** Header only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A CTA element placed within the header bar — typically "Get a Quote", "Log In", or "Chat with us". Distinct from the general zone `CTA` and `SimpleCTABlock` components, which live in the page body.
|
|
8
|
+
|
|
9
|
+
The header CTA renders as a styled anchor. Use `variant="button"` for primary conversion actions and `variant="link"` for secondary utility links (e.g., log in).
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `label` | `string` | Yes | — | Button or link text |
|
|
16
|
+
| `href` | `string` | Yes | — | Destination URL |
|
|
17
|
+
| `variant` | `'button' \| 'link' \| 'phone'` | No | `'button'` | Visual treatment |
|
|
18
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { Section, HeaderCTA } from 'lion-make'
|
|
24
|
+
|
|
25
|
+
<Section zone="header">
|
|
26
|
+
<HeaderCTA label="Get a quote" href="/quote" variant="button" />
|
|
27
|
+
<HeaderCTA label="Log in" href="/login" variant="link" />
|
|
28
|
+
</Section>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Placement Rules
|
|
32
|
+
|
|
33
|
+
- Header zone only. Never place in Hero, General, or Footer zones.
|
|
34
|
+
- Typically placed inside a `GlobalHeaderBar` alongside `TopLevelNavigation`.
|
|
35
|
+
- Limit to 1–2 CTAs per header to avoid visual clutter.
|
|
36
|
+
|
|
37
|
+
## Design Tokens
|
|
38
|
+
|
|
39
|
+
- Button variant: `var(--color-brand)` background, `var(--color-white)` text
|
|
40
|
+
- Link variant: `var(--color-white)` text, underline on hover
|
|
41
|
+
- Font: `var(--h5-font-size)`, `var(--font-weight-600)`
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Header — Logo
|
|
2
|
+
|
|
3
|
+
**Zone:** Header only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
The brand or product logo displayed in the header bar. Renders as a linked image that navigates to the homepage (or a specified destination). Every page must have exactly one `HeaderLogo`.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `src` | `string` | Yes | — | Image URL |
|
|
14
|
+
| `alt` | `string` | Yes | — | Alt text (use the brand name, e.g., "Mutual of Omaha") |
|
|
15
|
+
| `href` | `string` | No | `'/'` | Link destination |
|
|
16
|
+
| `width` | `number` | No | — | Explicit image width (px) |
|
|
17
|
+
| `height` | `number` | No | — | Explicit image height (px) |
|
|
18
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { Section, HeaderLogo } from 'lion-make'
|
|
24
|
+
|
|
25
|
+
<Section zone="header">
|
|
26
|
+
<HeaderLogo
|
|
27
|
+
src="/img/logo-mutual.svg"
|
|
28
|
+
alt="Mutual of Omaha"
|
|
29
|
+
href="/"
|
|
30
|
+
width={180}
|
|
31
|
+
height={40}
|
|
32
|
+
/>
|
|
33
|
+
</Section>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Placement Rules
|
|
37
|
+
|
|
38
|
+
- Header zone only.
|
|
39
|
+
- One per page — do not render multiple `HeaderLogo` instances.
|
|
40
|
+
- Typically the leftmost element inside `CorporateUniversalHeader` or `GlobalHeaderBar`.
|
|
41
|
+
|
|
42
|
+
## Design Tokens
|
|
43
|
+
|
|
44
|
+
- No background — logo file must include sufficient padding or transparent background.
|
|
45
|
+
- Wrapper link outline: `var(--color-brand)` on focus (keyboard navigation).
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Header — Product
|
|
2
|
+
|
|
3
|
+
**Zone:** Header only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Displays the name (and optionally the logo and tagline) of the specific product line being featured on the page. Used on product DLPs (detail landing pages) where the header needs to identify which product the user is exploring.
|
|
8
|
+
|
|
9
|
+
Distinct from `HeaderLogo` (which is always the master brand) — `HeaderProduct` is the product-level identity layer within the same header.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `name` | `string` | Yes | — | Product name (e.g., "Term Life Insurance") |
|
|
16
|
+
| `logoSrc` | `string` | No | — | Product-specific logo or lockup |
|
|
17
|
+
| `logoAlt` | `string` | No | `''` | Logo alt text |
|
|
18
|
+
| `href` | `string` | No | — | Link destination (e.g., product overview page) |
|
|
19
|
+
| `tagline` | `string` | No | — | Short descriptor below the product name |
|
|
20
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { Section, HeaderProduct } from 'lion-make'
|
|
26
|
+
|
|
27
|
+
<Section zone="header">
|
|
28
|
+
<HeaderProduct
|
|
29
|
+
name="Term Life Insurance"
|
|
30
|
+
tagline="Affordable coverage, guaranteed premiums"
|
|
31
|
+
href="/term-life"
|
|
32
|
+
/>
|
|
33
|
+
</Section>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Placement Rules
|
|
37
|
+
|
|
38
|
+
- Header zone only.
|
|
39
|
+
- Use on product DLPs. Not required on general marketing or homepage.
|
|
40
|
+
- Appears inside `GlobalHeaderBar`, typically between `HeaderLogo` and `TopLevelNavigation`.
|
|
41
|
+
|
|
42
|
+
## Design Tokens
|
|
43
|
+
|
|
44
|
+
- Name: `var(--h4-font-size)`, `var(--font-weight-700)`, `var(--color-white)`
|
|
45
|
+
- Tagline: `var(--h6-font-size)`, `var(--font-weight-400)`, `var(--color-white-opaque)`
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Header — Section Navigation
|
|
2
|
+
|
|
3
|
+
**Zone:** Header only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A secondary navigation bar that lists the sub-sections of the current page or product area. Renders as a horizontal link list with an active state indicator for the current page. Used on section hubs and multi-page product areas to give users a persistent orientation layer.
|
|
8
|
+
|
|
9
|
+
Distinct from `TopLevelNavigation` (global, across all products) — Section Navigation is scoped to the current section or product.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `items` | `SectionNavItem[]` | Yes | — | Navigation links |
|
|
16
|
+
| `ariaLabel` | `string` | No | `'Section navigation'` | Accessible label for the `<nav>` element |
|
|
17
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
18
|
+
|
|
19
|
+
### SectionNavItem
|
|
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 current page link |
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import { Section, HeaderSectionNavigation } from 'lion-make'
|
|
31
|
+
|
|
32
|
+
<Section zone="header">
|
|
33
|
+
<HeaderSectionNavigation
|
|
34
|
+
ariaLabel="Life insurance navigation"
|
|
35
|
+
items={[
|
|
36
|
+
{ label: 'Term Life', href: '/life/term', isActive: true },
|
|
37
|
+
{ label: 'Whole Life', href: '/life/whole' },
|
|
38
|
+
{ label: 'Universal Life', href: '/life/universal' },
|
|
39
|
+
{ label: 'Compare plans', href: '/life/compare' },
|
|
40
|
+
]}
|
|
41
|
+
/>
|
|
42
|
+
</Section>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Placement Rules
|
|
46
|
+
|
|
47
|
+
- Header zone only. Renders below `GlobalHeaderBar` when used.
|
|
48
|
+
- Optional — only include when the page belongs to a multi-page section.
|
|
49
|
+
- Active link should match the current page URL exactly.
|
|
50
|
+
|
|
51
|
+
## Design Tokens
|
|
52
|
+
|
|
53
|
+
- Background: `var(--color-gray-lightest)` or transparent over header background
|
|
54
|
+
- Link: `var(--h5-font-size)`, `var(--font-weight-400)`, `var(--color-text)`
|
|
55
|
+
- Active link: `var(--font-weight-600)`, bottom border `var(--border-width-thick)` solid `var(--color-brand)`
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Header — Section Title
|
|
2
|
+
|
|
3
|
+
**Zone:** Header only.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Displays the title of the current section or page within the header area. Used on section index pages or campaign pages where the header itself needs to carry a clear identity heading (separate from the Hero).
|
|
8
|
+
|
|
9
|
+
Not a substitute for a `Hero` — `HeaderSectionTitle` is a compact, inline header element; the Hero is the full-width content zone below the header.
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Required | Default | Description |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| `title` | `string` | Yes | — | Section or page title |
|
|
16
|
+
| `subtitle` | `string` | No | — | Short supporting line |
|
|
17
|
+
| `as` | `'h1' \| 'h2' \| 'p'` | No | `'h1'` | Semantic heading level |
|
|
18
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { Section, HeaderSectionTitle } from 'lion-make'
|
|
24
|
+
|
|
25
|
+
<Section zone="header">
|
|
26
|
+
<HeaderSectionTitle
|
|
27
|
+
title="Life Insurance"
|
|
28
|
+
subtitle="Coverage that protects what matters most"
|
|
29
|
+
as="h1"
|
|
30
|
+
/>
|
|
31
|
+
</Section>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Placement Rules
|
|
35
|
+
|
|
36
|
+
- Header zone only.
|
|
37
|
+
- Use `as="h1"` when no other `<h1>` exists on the page (no Hero with an `<h1>`).
|
|
38
|
+
- If a Hero is present and carries the `<h1>`, use `as="h2"` or `as="p"` here.
|
|
39
|
+
|
|
40
|
+
## Design Tokens
|
|
41
|
+
|
|
42
|
+
- Title: `var(--h3-font-size)`, `var(--font-weight-700)`, `var(--color-white)`
|
|
43
|
+
- Subtitle: `var(--h5-font-size)`, `var(--font-weight-400)`, `var(--color-white-opaque)`
|