stackable-components 1.0.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 (139) hide show
  1. package/README.md +295 -0
  2. package/dist/components/ArticleDetailsPage/ArticleDetails.d.ts +10 -0
  3. package/dist/components/ArticleDetailsPage/index.d.ts +1 -0
  4. package/dist/components/ArticleListingPage/ArticleListing.d.ts +26 -0
  5. package/dist/components/ArticleListingPage/index.d.ts +1 -0
  6. package/dist/components/Auth/AuthSplitScreen.d.ts +73 -0
  7. package/dist/components/Auth/index.d.ts +2 -0
  8. package/dist/components/Awards/AwardsSection.d.ts +53 -0
  9. package/dist/components/Awards/index.d.ts +2 -0
  10. package/dist/components/Banner/Banner.d.ts +32 -0
  11. package/dist/components/Banner/BannerCallout.d.ts +19 -0
  12. package/dist/components/Banner/BannerFullWidth.d.ts +22 -0
  13. package/dist/components/Banner/BannerLight.d.ts +31 -0
  14. package/dist/components/Banner/CommunityBanner.d.ts +33 -0
  15. package/dist/components/Banner/CookieConsentBanner.d.ts +40 -0
  16. package/dist/components/Banner/CountdownBanner.d.ts +27 -0
  17. package/dist/components/Banner/PromoBanner.d.ts +50 -0
  18. package/dist/components/Banner/index.d.ts +14 -0
  19. package/dist/components/Button/PrimaryButton.d.ts +32 -0
  20. package/dist/components/Button/ToggleSwitch.d.ts +24 -0
  21. package/dist/components/Button/index.d.ts +3 -0
  22. package/dist/components/Cards/CardAccordion.d.ts +38 -0
  23. package/dist/components/Cards/FeatureCard.d.ts +11 -0
  24. package/dist/components/Cards/FlipCard.d.ts +37 -0
  25. package/dist/components/Cards/ProfileCard.d.ts +39 -0
  26. package/dist/components/Cards/ResourceCard.d.ts +29 -0
  27. package/dist/components/Cards/index.d.ts +9 -0
  28. package/dist/components/Carousels/CircleImageCarousel.d.ts +19 -0
  29. package/dist/components/Carousels/GalleryCarousel.d.ts +75 -0
  30. package/dist/components/Carousels/ImageVideoCarousel.d.ts +24 -0
  31. package/dist/components/Carousels/VerticalProductCarousel.d.ts +40 -0
  32. package/dist/components/Carousels/index.d.ts +7 -0
  33. package/dist/components/EmptyState/EmptyState.d.ts +21 -0
  34. package/dist/components/EmptyState/index.d.ts +2 -0
  35. package/dist/components/FAQ/FAQ.d.ts +23 -0
  36. package/dist/components/FAQ/FaqCategorized.d.ts +35 -0
  37. package/dist/components/FAQ/index.d.ts +4 -0
  38. package/dist/components/FeatureBenefit/FeatureBenefit.d.ts +20 -0
  39. package/dist/components/FeatureBenefit/FeatureBenefitDark.d.ts +18 -0
  40. package/dist/components/FeatureBenefit/FeatureBenefitRenderer.d.ts +26 -0
  41. package/dist/components/FeatureBenefit/FeatureBenefitStrip.d.ts +15 -0
  42. package/dist/components/FeatureBenefit/FeatureBenefitWithImage.d.ts +27 -0
  43. package/dist/components/FeatureBenefit/StandardBenefit.d.ts +29 -0
  44. package/dist/components/FeatureBenefit/index.d.ts +12 -0
  45. package/dist/components/FeatureComparison/FeatureComparisonCards.d.ts +27 -0
  46. package/dist/components/FeatureComparison/FeatureComparisonTable.d.ts +35 -0
  47. package/dist/components/FeatureComparison/FeatureComparisonVs.d.ts +35 -0
  48. package/dist/components/FeatureComparison/index.d.ts +6 -0
  49. package/dist/components/FeatureShowcase/StickyCardStack.d.ts +36 -0
  50. package/dist/components/FeatureShowcase/StickyScrollFeature.d.ts +27 -0
  51. package/dist/components/FeatureShowcase/index.d.ts +2 -0
  52. package/dist/components/Footers/FooterMultiColumn.d.ts +23 -0
  53. package/dist/components/Footers/FooterSimple.d.ts +18 -0
  54. package/dist/components/Footers/index.d.ts +2 -0
  55. package/dist/components/Forms/ContactForm.d.ts +8 -0
  56. package/dist/components/Forms/ContactFormSplit.d.ts +53 -0
  57. package/dist/components/Forms/NewsletterSignup.d.ts +35 -0
  58. package/dist/components/Forms/index.d.ts +4 -0
  59. package/dist/components/Grids/BentoGrid.d.ts +34 -0
  60. package/dist/components/Grids/CategoryGrid.d.ts +53 -0
  61. package/dist/components/Grids/FlipCardGrid.d.ts +64 -0
  62. package/dist/components/Grids/HexTileGrid.d.ts +39 -0
  63. package/dist/components/Grids/IndexSection.d.ts +37 -0
  64. package/dist/components/Grids/index.d.ts +10 -0
  65. package/dist/components/HeroBanners/HeroBanner.d.ts +35 -0
  66. package/dist/components/HeroBanners/HeroBannerClassic.d.ts +79 -0
  67. package/dist/components/HeroBanners/SplitHeroBanner.d.ts +29 -0
  68. package/dist/components/HeroBanners/SpotlightHero.d.ts +30 -0
  69. package/dist/components/HeroBanners/VideoDemoHero.d.ts +33 -0
  70. package/dist/components/HeroBanners/index.d.ts +8 -0
  71. package/dist/components/ImageGrid/ImageGrid.d.ts +25 -0
  72. package/dist/components/ImageGrid/ImageGridDynamic.d.ts +18 -0
  73. package/dist/components/ImageGrid/index.d.ts +2 -0
  74. package/dist/components/LogoCloud/LogoCloud.d.ts +33 -0
  75. package/dist/components/LogoCloud/index.d.ts +2 -0
  76. package/dist/components/Navigation/BreadcrumbNavigation.d.ts +34 -0
  77. package/dist/components/Navigation/ExtendedNavigation.d.ts +31 -0
  78. package/dist/components/Navigation/FloatingDock.d.ts +45 -0
  79. package/dist/components/Navigation/NavigationBar.d.ts +13 -0
  80. package/dist/components/Navigation/Sidebar.d.ts +29 -0
  81. package/dist/components/Navigation/index.d.ts +8 -0
  82. package/dist/components/PDP/ProductDetails.d.ts +43 -0
  83. package/dist/components/PDP/index.d.ts +1 -0
  84. package/dist/components/PLP/ProductListing.d.ts +15 -0
  85. package/dist/components/PLP/index.d.ts +1 -0
  86. package/dist/components/Pricing/Pricing.d.ts +48 -0
  87. package/dist/components/Pricing/PricingSpreadCard.d.ts +32 -0
  88. package/dist/components/Pricing/index.d.ts +4 -0
  89. package/dist/components/Process/ProcessStep.d.ts +51 -0
  90. package/dist/components/Process/index.d.ts +2 -0
  91. package/dist/components/ProductCard/DarkCard.d.ts +31 -0
  92. package/dist/components/ProductCard/LargeCard.d.ts +11 -0
  93. package/dist/components/ProductCard/ProductBanner.d.ts +28 -0
  94. package/dist/components/ProductCard/index.d.ts +61 -0
  95. package/dist/components/SectionIntroduction/SectionIntroduction.d.ts +27 -0
  96. package/dist/components/SectionIntroduction/SectionIntroductionTwoColumn.d.ts +18 -0
  97. package/dist/components/SectionIntroduction/index.d.ts +4 -0
  98. package/dist/components/Sidebar/Sidebar.d.ts +26 -0
  99. package/dist/components/Sidebar/index.d.ts +2 -0
  100. package/dist/components/Sliders/ProductSlider.d.ts +23 -0
  101. package/dist/components/Sliders/index.d.ts +2 -0
  102. package/dist/components/Social/SocialLinks.d.ts +36 -0
  103. package/dist/components/Social/SocialPostEmbed.d.ts +34 -0
  104. package/dist/components/Social/index.d.ts +4 -0
  105. package/dist/components/Statistics/StatCounterRow.d.ts +34 -0
  106. package/dist/components/Statistics/index.d.ts +2 -0
  107. package/dist/components/Tabs/Tabs.d.ts +35 -0
  108. package/dist/components/Tabs/index.d.ts +2 -0
  109. package/dist/components/Team/TeamBanner.d.ts +32 -0
  110. package/dist/components/Team/index.d.ts +2 -0
  111. package/dist/components/Testimonial/CardStack.d.ts +31 -0
  112. package/dist/components/Testimonial/RatingSummary.d.ts +20 -0
  113. package/dist/components/Testimonial/Reviews.d.ts +55 -0
  114. package/dist/components/Testimonial/Testimonial.d.ts +29 -0
  115. package/dist/components/Testimonial/index.d.ts +8 -0
  116. package/dist/components/TextCTASection/JustifiedTextCTA.d.ts +11 -0
  117. package/dist/components/TextCTASection/TextCTA.d.ts +25 -0
  118. package/dist/components/TextCTASection/index.d.ts +1 -0
  119. package/dist/components/Timeline/TimelineColumn.d.ts +23 -0
  120. package/dist/components/Timeline/TimelineHorizontal.d.ts +28 -0
  121. package/dist/components/Timeline/TimelineYearBlocks.d.ts +55 -0
  122. package/dist/components/Timeline/VerticalTimeline.d.ts +21 -0
  123. package/dist/components/Timeline/index.d.ts +8 -0
  124. package/dist/components/Typography/Typography.d.ts +14 -0
  125. package/dist/components/Typography/index.d.ts +2 -0
  126. package/dist/components/VideoSection/VideoSection.d.ts +38 -0
  127. package/dist/components/VideoSection/index.d.ts +2 -0
  128. package/dist/index.d.ts +153 -0
  129. package/dist/index.esm.js +14074 -0
  130. package/dist/index.esm.js.map +1 -0
  131. package/dist/index.js +14168 -0
  132. package/dist/index.js.map +1 -0
  133. package/dist/styles.css +5901 -0
  134. package/dist/theme/ThemeProvider.d.ts +13 -0
  135. package/dist/theme/index.d.ts +2 -0
  136. package/dist/theme/themeConfig.d.ts +8 -0
  137. package/dist/types.d.ts +60 -0
  138. package/dist/utils/index.d.ts +10 -0
  139. package/package.json +62 -0
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ export type FeatureBenefitVariant = 'strip' | 'cards' | 'grid' | 'dark' | 'circle' | 'image' | 'outline' | 'colored';
3
+ export interface FeatureBenefitFeature {
4
+ title?: string;
5
+ description?: string;
6
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
7
+ icon?: string | {
8
+ url?: string;
9
+ };
10
+ }
11
+ export interface FeatureBenefitRendererProps {
12
+ variant?: FeatureBenefitVariant | string;
13
+ eyebrow?: string;
14
+ heading?: string;
15
+ subheading?: string;
16
+ features?: FeatureBenefitFeature[];
17
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
18
+ image?: string | {
19
+ url?: string;
20
+ };
21
+ icon_color?: string;
22
+ background?: string;
23
+ className?: string;
24
+ }
25
+ export declare function FeatureBenefitRenderer({ variant, className, ...props }: FeatureBenefitRendererProps): React.JSX.Element;
26
+ export default FeatureBenefitRenderer;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export interface FeatureBenefitStripItem {
3
+ title?: string;
4
+ description?: string;
5
+ icon?: string;
6
+ }
7
+ export interface FeatureBenefitStripProps {
8
+ items?: FeatureBenefitStripItem[];
9
+ icon_color?: string;
10
+ divider_color?: string;
11
+ background_color?: string;
12
+ className?: string;
13
+ }
14
+ export declare function FeatureBenefitStrip({ items, icon_color, divider_color, background_color, className, }: FeatureBenefitStripProps): React.JSX.Element;
15
+ export default FeatureBenefitStrip;
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export type BenefitWithImageIconPos = 'left' | 'top' | 'center' | 'right';
4
+ export type BenefitWithImageAlign = 'left' | 'center' | 'right';
5
+ export interface FeatureBenefitWithImageItem {
6
+ title?: string;
7
+ description?: string;
8
+ icon?: string;
9
+ }
10
+ export interface FeatureBenefitWithImageProps {
11
+ eyebrow?: string;
12
+ heading?: string;
13
+ subheading?: string;
14
+ heading_alignment?: BenefitWithImageAlign | string;
15
+ image?: string;
16
+ /** left: [img|heading|grid] right: [heading|grid|img] center: [heading|img|grid] */
17
+ image_position?: 'left' | 'right' | 'center' | string;
18
+ /** Icon position within each benefit item */
19
+ item_icon_position?: BenefitWithImageIconPos | string;
20
+ items?: FeatureBenefitWithImageItem[];
21
+ icon_color?: StackableColorValue | string;
22
+ background_color?: StackableColorValue | string;
23
+ text_color?: StackableColorValue;
24
+ className?: string;
25
+ }
26
+ export declare function FeatureBenefitWithImage({ eyebrow, heading, subheading, heading_alignment, image, image_position, item_icon_position, items, icon_color, background_color, text_color, className, }: FeatureBenefitWithImageProps): React.JSX.Element;
27
+ export default FeatureBenefitWithImage;
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export type StandardBenefitIconPos = 'left' | 'right' | 'top' | 'center';
4
+ export type StandardBenefitLayout = 'plain' | 'card';
5
+ export type StandardBenefitAlign = 'left' | 'center' | 'right';
6
+ export interface StandardBenefitItem {
7
+ title?: string;
8
+ description?: string;
9
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
10
+ icon?: string | {
11
+ url?: string;
12
+ };
13
+ }
14
+ export interface StandardBenefitProps {
15
+ heading?: string;
16
+ subheading?: string;
17
+ heading_alignment?: StandardBenefitAlign | string;
18
+ icon_position?: StandardBenefitIconPos | string;
19
+ /** Alignment of icon + text within each item column (applies when icon_position is top or center) */
20
+ item_alignment?: StandardBenefitAlign | string;
21
+ layout?: StandardBenefitLayout | string;
22
+ background_color?: StackableColorValue;
23
+ icon_color?: StackableColorValue;
24
+ text_color?: StackableColorValue;
25
+ items?: StandardBenefitItem[];
26
+ className?: string;
27
+ }
28
+ export declare function StandardBenefit({ heading, subheading, heading_alignment, icon_position, item_alignment, layout, background_color, icon_color, text_color, items: itemsProp, className, }: StandardBenefitProps): React.JSX.Element;
29
+ export default StandardBenefit;
@@ -0,0 +1,12 @@
1
+ export { FeatureBenefitStrip } from './FeatureBenefitStrip';
2
+ export type { FeatureBenefitStripProps, FeatureBenefitStripItem } from './FeatureBenefitStrip';
3
+ export { FeatureBenefit } from './FeatureBenefit';
4
+ export type { FeatureBenefitProps, FeatureBenefitItem } from './FeatureBenefit';
5
+ export { FeatureBenefitDark } from './FeatureBenefitDark';
6
+ export type { FeatureBenefitDarkProps, FeatureBenefitDarkItem } from './FeatureBenefitDark';
7
+ export { FeatureBenefitWithImage } from './FeatureBenefitWithImage';
8
+ export type { FeatureBenefitWithImageProps, FeatureBenefitWithImageItem, BenefitWithImageIconPos, BenefitWithImageAlign } from './FeatureBenefitWithImage';
9
+ export { FeatureBenefitRenderer } from './FeatureBenefitRenderer';
10
+ export type { FeatureBenefitRendererProps, FeatureBenefitFeature, FeatureBenefitVariant } from './FeatureBenefitRenderer';
11
+ export { StandardBenefit } from './StandardBenefit';
12
+ export type { StandardBenefitProps, StandardBenefitItem, StandardBenefitIconPos, StandardBenefitLayout, StandardBenefitAlign } from './StandardBenefit';
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface FeatureComparisonProduct {
4
+ name?: string;
5
+ price?: string;
6
+ image?: string;
7
+ tag?: string;
8
+ badge?: string;
9
+ specs?: string[];
10
+ score?: number;
11
+ }
12
+ export interface FeatureComparisonCategory {
13
+ label?: string;
14
+ /** One value per product, in product order. */
15
+ values?: string[];
16
+ }
17
+ export interface FeatureComparisonCardsProps {
18
+ heading?: string;
19
+ description?: string;
20
+ products?: FeatureComparisonProduct[];
21
+ categories?: FeatureComparisonCategory[];
22
+ background_color?: StackableColorValue;
23
+ accent_color?: StackableColorValue;
24
+ className?: string;
25
+ }
26
+ export declare function FeatureComparisonCards({ heading, description, products: productsProp, categories: categoriesProp, background_color, accent_color, className, }: FeatureComparisonCardsProps): React.JSX.Element;
27
+ export default FeatureComparisonCards;
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface FeatureComparisonPlan {
4
+ name?: string;
5
+ price_monthly?: string;
6
+ price_annually?: string;
7
+ price_suffix?: string;
8
+ cta_label?: string;
9
+ cta_url?: string;
10
+ is_featured?: boolean;
11
+ featured_label?: string;
12
+ }
13
+ export interface FeatureComparisonRow {
14
+ label?: string;
15
+ tooltip?: string;
16
+ /** One value per plan, in plan order. "yes"/"true" and "no"/"false" render as check/cross icons; anything else renders as text (e.g. "100 uses", "Unlimited"). */
17
+ values?: string[];
18
+ }
19
+ export interface FeatureComparisonGroup {
20
+ group_name?: string;
21
+ rows?: FeatureComparisonRow[];
22
+ }
23
+ export interface FeatureComparisonTableProps {
24
+ eyebrow?: string;
25
+ heading?: string;
26
+ description?: string;
27
+ show_billing_toggle?: boolean;
28
+ background_color?: StackableColorValue;
29
+ accent_color?: StackableColorValue;
30
+ plans?: FeatureComparisonPlan[];
31
+ groups?: FeatureComparisonGroup[];
32
+ className?: string;
33
+ }
34
+ export declare function FeatureComparisonTable({ eyebrow, heading, description, show_billing_toggle, background_color, accent_color, plans: plansProp, groups: groupsProp, className, }: FeatureComparisonTableProps): React.JSX.Element;
35
+ export default FeatureComparisonTable;
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface FeatureComparisonVsColumn {
4
+ name?: string;
5
+ tagline?: string;
6
+ logo?: string;
7
+ highlighted?: boolean;
8
+ }
9
+ export interface FeatureComparisonVsCell {
10
+ /** "yes" | "no" — anything else falls back to "yes" when text is present, "no" otherwise. */
11
+ status?: string;
12
+ text?: string;
13
+ }
14
+ export interface FeatureComparisonVsRow {
15
+ label?: string;
16
+ icon?: string;
17
+ badge?: string;
18
+ ours?: FeatureComparisonVsCell;
19
+ competitor?: FeatureComparisonVsCell;
20
+ }
21
+ export interface FeatureComparisonVsProps {
22
+ eyebrow?: string;
23
+ heading?: string;
24
+ description?: string;
25
+ ours?: FeatureComparisonVsColumn;
26
+ competitor?: FeatureComparisonVsColumn;
27
+ rows?: FeatureComparisonVsRow[];
28
+ cta_label?: string;
29
+ cta_url?: string;
30
+ background_color?: StackableColorValue;
31
+ accent_color?: StackableColorValue;
32
+ className?: string;
33
+ }
34
+ export declare function FeatureComparisonVs({ eyebrow, heading, description, ours: oursProp, competitor: competitorProp, rows: rowsProp, cta_label, cta_url, background_color, accent_color, className, }: FeatureComparisonVsProps): React.JSX.Element;
35
+ export default FeatureComparisonVs;
@@ -0,0 +1,6 @@
1
+ export { FeatureComparisonTable } from './FeatureComparisonTable';
2
+ export type { FeatureComparisonTableProps, FeatureComparisonPlan, FeatureComparisonRow, FeatureComparisonGroup } from './FeatureComparisonTable';
3
+ export { FeatureComparisonVs } from './FeatureComparisonVs';
4
+ export type { FeatureComparisonVsProps, FeatureComparisonVsColumn, FeatureComparisonVsCell, FeatureComparisonVsRow } from './FeatureComparisonVs';
5
+ export { FeatureComparisonCards } from './FeatureComparisonCards';
6
+ export type { FeatureComparisonCardsProps, FeatureComparisonProduct, FeatureComparisonCategory } from './FeatureComparisonCards';
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface StickyCardStackLink {
4
+ title?: string;
5
+ url?: string;
6
+ }
7
+ export interface StickyCardStackCard {
8
+ badge_text?: string;
9
+ card_title?: string;
10
+ description?: string;
11
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
12
+ image?: string | {
13
+ url?: string;
14
+ };
15
+ image_alt?: string;
16
+ link?: StickyCardStackLink;
17
+ /** Per-card surface colour. Falls back to the section's card colour. */
18
+ background_color?: StackableColorValue;
19
+ }
20
+ export interface StickyCardStackProps {
21
+ eyebrow_text?: string;
22
+ heading?: string;
23
+ subheading?: string;
24
+ cards?: StickyCardStackCard[];
25
+ /** Shrinks each card slightly as the next one covers it, for a stacked-paper
26
+ * sense of depth. Off for anyone with `prefers-reduced-motion`. */
27
+ animate_scale?: boolean;
28
+ background_color?: StackableColorValue;
29
+ /** Default surface for cards that don't set their own `background_color`. */
30
+ card_color?: StackableColorValue;
31
+ text_color?: StackableColorValue;
32
+ accent_color?: StackableColorValue;
33
+ className?: string;
34
+ }
35
+ export declare function StickyCardStack({ eyebrow_text, heading, subheading, cards, animate_scale, background_color, card_color, text_color, accent_color, className, }: StickyCardStackProps): React.JSX.Element | null;
36
+ export default StickyCardStack;
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface StickyScrollFeatureItem {
4
+ title?: string;
5
+ description?: string;
6
+ badge_text?: string;
7
+ /** Asset URL, or a Contentstack asset object — both are accepted. Image or video; detected from the file itself. */
8
+ media?: string | {
9
+ url?: string;
10
+ content_type?: string;
11
+ };
12
+ media_alt?: string;
13
+ }
14
+ export interface StickyScrollFeatureProps {
15
+ eyebrow_text?: string;
16
+ heading?: string;
17
+ subheading?: string;
18
+ /** Which side the pinned media panel sits on; text sections always sit opposite it. */
19
+ media_position?: 'left' | 'right' | string;
20
+ items?: StickyScrollFeatureItem[];
21
+ background_color?: StackableColorValue;
22
+ text_color?: StackableColorValue;
23
+ accent_color?: StackableColorValue;
24
+ className?: string;
25
+ }
26
+ export declare function StickyScrollFeature({ eyebrow_text, heading, subheading, media_position, items, background_color, text_color, accent_color, className, }: StickyScrollFeatureProps): React.JSX.Element;
27
+ export default StickyScrollFeature;
@@ -0,0 +1,2 @@
1
+ export { StickyScrollFeature } from './StickyScrollFeature';
2
+ export type { StickyScrollFeatureProps, StickyScrollFeatureItem } from './StickyScrollFeature';
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ export interface FooterColumnLink {
3
+ label: string;
4
+ url?: string;
5
+ }
6
+ export interface FooterColumn {
7
+ title: string;
8
+ links: FooterColumnLink[];
9
+ }
10
+ export interface FooterMultiColumnSocialLink {
11
+ name: string;
12
+ url?: string;
13
+ }
14
+ export interface FooterMultiColumnProps {
15
+ logo?: string | null;
16
+ columns?: FooterColumn[];
17
+ social_links?: FooterMultiColumnSocialLink[];
18
+ copyright_text?: string;
19
+ bottom_section_alignment?: 'left' | 'center' | 'right' | string;
20
+ className?: string;
21
+ }
22
+ export declare function FooterMultiColumn({ logo, columns, social_links, copyright_text, bottom_section_alignment, className, }: FooterMultiColumnProps): React.JSX.Element;
23
+ export default FooterMultiColumn;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ export interface FooterLink {
3
+ label?: string;
4
+ url?: string;
5
+ }
6
+ export interface FooterSocialLink {
7
+ platform: string;
8
+ url?: string;
9
+ icon?: string;
10
+ }
11
+ export interface FooterSimpleProps {
12
+ className?: string;
13
+ links?: FooterLink[];
14
+ social_links?: FooterSocialLink[];
15
+ copyright_text?: string;
16
+ }
17
+ export declare function FooterSimple({ className, links, social_links, copyright_text, }: FooterSimpleProps): React.JSX.Element;
18
+ export default FooterSimple;
@@ -0,0 +1,2 @@
1
+ export { FooterSimple } from './FooterSimple';
2
+ export { FooterMultiColumn } from './FooterMultiColumn';
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface ContactFormProps {
3
+ form_title?: string;
4
+ submit_button_text?: string;
5
+ className?: string;
6
+ }
7
+ export declare function ContactForm({ form_title, submit_button_text, className, }: ContactFormProps): React.JSX.Element;
8
+ export default ContactForm;
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ /** Native Contentstack link field: `{ title, href }`. */
4
+ export interface ContactFormSplitLink {
5
+ title?: string;
6
+ href?: string;
7
+ }
8
+ export interface ContactFormSplitField {
9
+ label?: string;
10
+ /** Used as the input's `name`/`id`; falls back to a slug of the label. */
11
+ field_name?: string;
12
+ type?: 'text' | 'email' | 'tel' | 'textarea' | string;
13
+ /** `Half` sits two-per-row on wide panels; `Full` always spans. */
14
+ width?: 'Half' | 'Full' | string;
15
+ placeholder?: string;
16
+ required?: boolean;
17
+ }
18
+ export interface ContactFormSplitProps {
19
+ logo?: string | {
20
+ url?: string;
21
+ };
22
+ logo_text?: string;
23
+ panel_heading?: string;
24
+ panel_subheading?: string;
25
+ panel_description?: string;
26
+ panel_cta?: ContactFormSplitLink;
27
+ panel_image?: string | {
28
+ url?: string;
29
+ };
30
+ panel_image_alt?: string;
31
+ /** Decorative chevron under the panel heading, as in the reference. */
32
+ show_scroll_indicator?: boolean;
33
+ form_heading?: string;
34
+ form_description?: string;
35
+ fields?: ContactFormSplitField[];
36
+ submit_label?: string;
37
+ /** Shown in place of the form once submitted. */
38
+ success_message?: string;
39
+ /** Which side the form sits on. */
40
+ form_position?: 'left' | 'right' | string;
41
+ /** Shows a ✕ in the form panel's top corner. */
42
+ dismissible?: boolean;
43
+ /** Promo panel background. */
44
+ background_color?: StackableColorValue;
45
+ /** Form panel flood, and the promo CTA fill. */
46
+ accent_color?: StackableColorValue;
47
+ text_color?: StackableColorValue;
48
+ button_color?: StackableColorValue;
49
+ button_text_color?: StackableColorValue;
50
+ className?: string;
51
+ }
52
+ export declare function ContactFormSplit({ logo, logo_text, panel_heading, panel_subheading, panel_description, panel_cta, panel_image, panel_image_alt, show_scroll_indicator, form_heading, form_description, fields, submit_label, success_message, form_position, dismissible, background_color, accent_color, text_color, button_color, button_text_color, className, }: ContactFormSplitProps): React.JSX.Element | null;
53
+ export default ContactFormSplit;
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface NewsletterSignupLink {
4
+ title?: string;
5
+ href?: string;
6
+ }
7
+ export interface NewsletterSignupProps {
8
+ logo?: string | {
9
+ url?: string;
10
+ };
11
+ logo_text?: string;
12
+ heading?: string;
13
+ description?: string;
14
+ /** Substring of `description` rendered bold + underlined, e.g. "25% Off". */
15
+ highlight_text?: string;
16
+ email_placeholder?: string;
17
+ button_text?: string;
18
+ disclaimer_prefix?: string;
19
+ privacy_policy_link?: NewsletterSignupLink;
20
+ terms_link?: NewsletterSignupLink;
21
+ image?: string | {
22
+ url?: string;
23
+ };
24
+ image_alt?: string;
25
+ image_caption?: string;
26
+ image_position?: 'left' | 'right' | string;
27
+ dismissible?: boolean;
28
+ background_color?: StackableColorValue;
29
+ text_color?: StackableColorValue;
30
+ button_color?: StackableColorValue;
31
+ button_text_color?: StackableColorValue;
32
+ className?: string;
33
+ }
34
+ export declare function NewsletterSignup({ logo, logo_text, heading, description, highlight_text, email_placeholder, button_text, disclaimer_prefix, privacy_policy_link, terms_link, image, image_alt, image_caption, image_position, dismissible, background_color, text_color, button_color, button_text_color, className, }: NewsletterSignupProps): React.JSX.Element | null;
35
+ export default NewsletterSignup;
@@ -0,0 +1,4 @@
1
+ export { ContactForm } from './ContactForm';
2
+ export { NewsletterSignup } from './NewsletterSignup';
3
+ export { ContactFormSplit } from './ContactFormSplit';
4
+ export type { ContactFormSplitProps, ContactFormSplitField, ContactFormSplitLink } from './ContactFormSplit';
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface BentoCellLink {
4
+ title?: string;
5
+ href?: string;
6
+ }
7
+ export interface BentoCell {
8
+ type?: 'text' | 'image' | 'stat' | string;
9
+ size?: 'small' | 'medium' | 'wide' | 'tall' | 'large' | string;
10
+ heading?: string;
11
+ description?: string;
12
+ /** Recognized icon keyword (see ICON_MAP), an image URL, or a Contentstack asset object. */
13
+ image?: string | {
14
+ url?: string;
15
+ };
16
+ badge_text?: string;
17
+ stat_value?: string;
18
+ stat_label?: string;
19
+ content_align?: 'left' | 'center' | string;
20
+ background_color?: StackableColorValue;
21
+ links?: BentoCellLink[];
22
+ }
23
+ export interface BentoGridProps {
24
+ eyebrow_text?: string;
25
+ heading?: string;
26
+ subheading?: string;
27
+ cells?: BentoCell[];
28
+ background_color?: StackableColorValue;
29
+ text_color?: StackableColorValue;
30
+ accent_color?: StackableColorValue;
31
+ className?: string;
32
+ }
33
+ export declare function BentoGrid({ eyebrow_text, heading, subheading, cells, background_color, text_color, accent_color, className, }: BentoGridProps): React.JSX.Element;
34
+ export default BentoGrid;
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ /** Native Contentstack link field: `{ title, href }`. */
4
+ export interface CategoryGridLink {
5
+ title?: string;
6
+ href?: string;
7
+ }
8
+ export interface CategoryGridItem {
9
+ title?: string;
10
+ /** Supporting copy under the title. Line breaks are kept. */
11
+ description?: string;
12
+ /** Text for the arrow link. Falls back to the section's shared label. */
13
+ link_label?: string;
14
+ link?: CategoryGridLink;
15
+ /**
16
+ * The product cut-out. Asset URL or a Contentstack asset object — both are
17
+ * accepted, since a file field arrives as a URL from the catalog but as
18
+ * `{ url, … }` from the Delivery API. Artwork on a transparent or matching
19
+ * background sits best against the card.
20
+ */
21
+ image?: string | {
22
+ url?: string;
23
+ };
24
+ image_alt?: string;
25
+ /** Card colour for this entry. Empty falls back to the shared card colour. */
26
+ background_color?: StackableColorValue;
27
+ }
28
+ export interface CategoryGridProps {
29
+ heading?: string;
30
+ subheading?: string;
31
+ heading_alignment?: 'left' | 'center' | 'right' | string;
32
+ categories?: CategoryGridItem[];
33
+ /**
34
+ * How each pair of cards divides the row. `Alternating` puts the wide card on
35
+ * the left, then the right, and so on.
36
+ */
37
+ layout?: 'Alternating' | 'Wide Left' | 'Wide Right' | 'Equal' | string;
38
+ /** How lopsided the wide/narrow split is. Ignored when layout is `Equal`. */
39
+ emphasis?: 'Subtle' | 'Medium' | 'Strong' | string;
40
+ card_height?: 'Short' | 'Medium' | 'Tall' | string;
41
+ /** Which top corner the artwork sits in. */
42
+ image_position?: 'Right' | 'Left' | string;
43
+ image_size?: 'Small' | 'Medium' | 'Large' | string;
44
+ corner_style?: 'Rounded' | 'Square' | string;
45
+ /** Used by any entry that sets no label of its own. */
46
+ link_label?: string;
47
+ background_color?: StackableColorValue;
48
+ card_color?: StackableColorValue;
49
+ text_color?: StackableColorValue;
50
+ className?: string;
51
+ }
52
+ export declare function CategoryGrid({ heading, subheading, heading_alignment, categories, layout, emphasis, card_height, image_position, image_size, corner_style, link_label, background_color, card_color, text_color, className, }: CategoryGridProps): React.JSX.Element;
53
+ export default CategoryGrid;
@@ -0,0 +1,64 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface FlipCardGridLink {
4
+ title?: string;
5
+ href?: string;
6
+ }
7
+ export interface FlipCardGridItem {
8
+ /** Top-left pill, on both faces. */
9
+ tag?: string;
10
+ /** Shown centered on the front instead of the card's position in the list —
11
+ * leave blank to fall back to that position (1, 2, 3, ...). Ignored once
12
+ * `front_image` is set. */
13
+ number_label?: string;
14
+ /** Optional logo/artwork shown centered on the front instead of the number —
15
+ * upload a high-quality PNG, ideally with a transparent background. */
16
+ front_image?: string | {
17
+ url?: string;
18
+ };
19
+ front_image_alt?: string;
20
+ /** Body copy, shown only on the back once flipped. Clamped to three lines. */
21
+ description?: string;
22
+ /** Exact substring of `description` to underline. */
23
+ underline_text?: string;
24
+ /** Shown only on the back, in the lower 70% of the card. */
25
+ image?: string | {
26
+ url?: string;
27
+ };
28
+ image_alt?: string;
29
+ /** Bottom-left label — shown on both faces. */
30
+ caption?: string;
31
+ /** The arrow button's destination; `title` becomes its accessible label. */
32
+ link?: FlipCardGridLink;
33
+ /** The front face's surface colour — falls back to FRONT_PALETTE, cycled by
34
+ * the item's position, when not set. */
35
+ front_color?: StackableColorValue;
36
+ /** The back face's surface colour. */
37
+ card_color?: StackableColorValue;
38
+ text_color?: StackableColorValue;
39
+ }
40
+ export interface FlipCardGridProps {
41
+ heading?: string;
42
+ description?: string;
43
+ /** Exact substring of `description` to underline. */
44
+ description_underline_text?: string;
45
+ /** Each card flips independently — unlike `CardAccordion`, hovering one never
46
+ * affects the others' size or position. On touch (no real hover), opening one
47
+ * card automatically closes whichever was already open. */
48
+ items?: FlipCardGridItem[];
49
+ /** `hover` flips on mouse-over on devices that actually support hover (click/
50
+ * keyboard/touch always work too); `click` only flips on click/Enter/Space. */
51
+ flip_trigger?: 'hover' | 'click' | string;
52
+ background_color?: StackableColorValue;
53
+ /** The front face's number and tag outline. */
54
+ text_color?: StackableColorValue;
55
+ /** Decorative background grid — columns 1-4. */
56
+ grid_left_color?: StackableColorValue;
57
+ /** Decorative background grid — columns 5-8. */
58
+ grid_right_color?: StackableColorValue;
59
+ /** Decorative background grid — the line colour, shared by every cell. */
60
+ grid_line_color?: StackableColorValue;
61
+ className?: string;
62
+ }
63
+ export declare function FlipCardGrid({ heading, description, description_underline_text, items, flip_trigger, background_color, text_color, grid_left_color, grid_right_color, grid_line_color, className, }: FlipCardGridProps): React.JSX.Element | null;
64
+ export default FlipCardGrid;
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ /** Native Contentstack link field: `{ title, href }`. */
4
+ export interface HexTileGridLink {
5
+ title?: string;
6
+ href?: string;
7
+ }
8
+ export interface HexTileGridTile {
9
+ /** Caption over the image, e.g. `ATHLETES`. */
10
+ label?: string;
11
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
12
+ image?: string | {
13
+ url?: string;
14
+ };
15
+ image_alt?: string;
16
+ /** `title` becomes the button text; falls back to the section's CTA label. */
17
+ link?: HexTileGridLink;
18
+ }
19
+ export interface HexTileGridProps {
20
+ heading?: string;
21
+ subheading?: string;
22
+ heading_alignment?: 'left' | 'center' | 'right' | string;
23
+ tiles?: HexTileGridTile[];
24
+ /** Tiles in a full row. Short rows hold one fewer, which is what interlocks them. */
25
+ columns?: number;
26
+ tile_size?: 'Small' | 'Medium' | 'Large' | string;
27
+ /** The reference art is heavily desaturated; `Muted` reproduces that. */
28
+ image_treatment?: 'None' | 'Muted' | 'Grayscale' | string;
29
+ show_cta?: boolean;
30
+ /** Used when a tile's link has no title of its own. */
31
+ cta_label?: string;
32
+ background_color?: StackableColorValue;
33
+ text_color?: StackableColorValue;
34
+ /** Tile label and the CTA outline. */
35
+ accent_color?: StackableColorValue;
36
+ className?: string;
37
+ }
38
+ export declare function HexTileGrid({ heading, subheading, heading_alignment, tiles, columns, tile_size, image_treatment, show_cta, cta_label, background_color, text_color, accent_color, className, }: HexTileGridProps): React.JSX.Element;
39
+ export default HexTileGrid;