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