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.
Files changed (109) hide show
  1. package/dist/components/footer/Disclosure.d.ts +3 -2
  2. package/dist/components/footer/DisclosureToggleOpen.d.ts +13 -0
  3. package/dist/components/footer/LegalLinks.d.ts +16 -0
  4. package/dist/components/footer/LinksAndSocial.d.ts +25 -0
  5. package/dist/components/general/AccordionBlock.d.ts +15 -0
  6. package/dist/components/general/AllBlogsPostBlock.d.ts +21 -0
  7. package/dist/components/general/BackgroundColorBlock.d.ts +12 -0
  8. package/dist/components/general/BasicContentBlock.d.ts +18 -0
  9. package/dist/components/general/BodyTextCopyBlock.d.ts +12 -0
  10. package/dist/components/general/ContentImageBlock.d.ts +15 -0
  11. package/dist/components/general/CrossSellCardBlock.d.ts +18 -0
  12. package/dist/components/general/DecorativeListBlock.d.ts +13 -0
  13. package/dist/components/general/EmailCalloutBlock.d.ts +14 -0
  14. package/dist/components/general/EmbeddedVideoBlock.d.ts +15 -0
  15. package/dist/components/general/FullSizeImageWithHighlightBox.d.ts +21 -0
  16. package/dist/components/general/HorizontalRule.d.ts +13 -0
  17. package/dist/components/general/HotJobsBlock.d.ts +21 -0
  18. package/dist/components/general/InlineMessage.d.ts +14 -0
  19. package/dist/components/general/LastChanceBlock.d.ts +15 -0
  20. package/dist/components/general/MultiStepLeadForm.d.ts +19 -0
  21. package/dist/components/general/MultiTestimonial.d.ts +19 -0
  22. package/dist/components/general/OptIn.d.ts +16 -0
  23. package/dist/components/general/ProductBlock.d.ts +17 -0
  24. package/dist/components/general/PullQuote.d.ts +12 -0
  25. package/dist/components/general/RTBDescriptive.d.ts +18 -0
  26. package/dist/components/general/RTBDynamic.d.ts +21 -0
  27. package/dist/components/general/RTBHighlight.d.ts +18 -0
  28. package/dist/components/general/RecentBlogPostsBlock.d.ts +22 -0
  29. package/dist/components/general/ResourceSpotlight.d.ts +18 -0
  30. package/dist/components/general/SideMenuExplorer.d.ts +16 -0
  31. package/dist/components/general/SimpleCTABlock.d.ts +15 -0
  32. package/dist/components/general/SpacingBlock.d.ts +12 -0
  33. package/dist/components/general/SpeedBump.d.ts +16 -0
  34. package/dist/components/general/TableBlock.d.ts +13 -0
  35. package/dist/components/general/WAHFU.d.ts +15 -0
  36. package/dist/components/header/HeaderCTA.d.ts +9 -0
  37. package/dist/components/header/HeaderLogo.d.ts +10 -0
  38. package/dist/components/header/HeaderProduct.d.ts +10 -0
  39. package/dist/components/header/HeaderSectionNavigation.d.ts +12 -0
  40. package/dist/components/header/HeaderSectionTitle.d.ts +8 -0
  41. package/dist/components/header/HeaderUnderwriter.d.ts +9 -0
  42. package/dist/components/header/TopLevelNavigation.d.ts +13 -0
  43. package/dist/components/hero/CTAHeroBlock.d.ts +24 -0
  44. package/dist/components/hero/HeroBlock.d.ts +18 -0
  45. package/dist/components/hero/MultiHero.d.ts +25 -0
  46. package/dist/components/hero/NotAvailableHeroBlock.d.ts +22 -0
  47. package/dist/index.d.ts +92 -2
  48. package/dist/lion-make.js +1855 -545
  49. package/dist/lion-make.umd.cjs +10 -10
  50. package/guidelines/Guidelines.md +46 -50
  51. package/guidelines/composition/constraints.md +40 -8
  52. package/guidelines/composition/zones.md +49 -11
  53. package/guidelines/content-types/footer/anklet.md +62 -0
  54. package/guidelines/content-types/footer/compliance.md +49 -0
  55. package/guidelines/content-types/footer/disclaimers.md +48 -0
  56. package/guidelines/content-types/footer/disclosure-toggle-open.md +51 -0
  57. package/guidelines/content-types/footer/disclosures.md +50 -0
  58. package/guidelines/content-types/footer/legal-links.md +59 -0
  59. package/guidelines/content-types/footer/links-and-social.md +94 -0
  60. package/guidelines/content-types/footer/overview.md +73 -16
  61. package/guidelines/content-types/general/accordion-block.md +42 -0
  62. package/guidelines/content-types/general/all-blogs-post-block.md +52 -0
  63. package/guidelines/content-types/general/background-color-block.md +42 -0
  64. package/guidelines/content-types/general/basic-content-block.md +43 -0
  65. package/guidelines/content-types/general/body-text-copy-block.md +38 -0
  66. package/guidelines/content-types/general/content-image-block.md +37 -0
  67. package/guidelines/content-types/general/cross-sell-card-block.md +45 -0
  68. package/guidelines/content-types/general/decorative-list-block.md +40 -0
  69. package/guidelines/content-types/general/email-callout-block.md +38 -0
  70. package/guidelines/content-types/general/embedded-video-block.md +36 -0
  71. package/guidelines/content-types/general/full-size-image-with-highlight-box.md +52 -0
  72. package/guidelines/content-types/general/horizontal-rule.md +35 -0
  73. package/guidelines/content-types/general/hot-jobs-block.md +52 -0
  74. package/guidelines/content-types/general/inline-message.md +36 -0
  75. package/guidelines/content-types/general/last-chance-block.md +40 -0
  76. package/guidelines/content-types/general/multi-step-lead-form.md +60 -0
  77. package/guidelines/content-types/general/multi-testimonial.md +49 -0
  78. package/guidelines/content-types/general/opt-in.md +42 -0
  79. package/guidelines/content-types/general/overview.md +134 -24
  80. package/guidelines/content-types/general/product-block.md +43 -0
  81. package/guidelines/content-types/general/pull-quote.md +36 -0
  82. package/guidelines/content-types/general/recent-blog-posts-block.md +48 -0
  83. package/guidelines/content-types/general/resource-spotlight.md +44 -0
  84. package/guidelines/content-types/general/rtb-descriptive.md +53 -0
  85. package/guidelines/content-types/general/rtb-dynamic.md +55 -0
  86. package/guidelines/content-types/general/rtb-highlight.md +50 -0
  87. package/guidelines/content-types/general/side-menu-explorer.md +62 -0
  88. package/guidelines/content-types/general/simple-cta-block.md +44 -0
  89. package/guidelines/content-types/general/spacing-block.md +40 -0
  90. package/guidelines/content-types/general/speed-bump.md +45 -0
  91. package/guidelines/content-types/general/table-block.md +55 -0
  92. package/guidelines/content-types/general/wahfu.md +66 -0
  93. package/guidelines/content-types/header/header-cta.md +41 -0
  94. package/guidelines/content-types/header/header-logo.md +45 -0
  95. package/guidelines/content-types/header/header-product.md +45 -0
  96. package/guidelines/content-types/header/header-section-navigation.md +55 -0
  97. package/guidelines/content-types/header/header-section-title.md +43 -0
  98. package/guidelines/content-types/header/header-underwriter.md +46 -0
  99. package/guidelines/content-types/header/overview.md +61 -15
  100. package/guidelines/content-types/header/top-level-navigation.md +70 -0
  101. package/guidelines/content-types/hero/cta-hero-block.md +70 -0
  102. package/guidelines/content-types/hero/hero-block.md +56 -0
  103. package/guidelines/content-types/hero/multi-hero.md +78 -0
  104. package/guidelines/content-types/hero/not-available-hero-block.md +64 -0
  105. package/guidelines/content-types/hero/overview.md +53 -18
  106. package/guidelines/content-types/overview.md +86 -29
  107. package/guidelines/discovery.md +158 -0
  108. package/guidelines/setup.md +90 -16
  109. 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