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