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,32 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface PricingSpreadCardFeature {
4
+ text?: string;
5
+ }
6
+ export interface PricingSpreadCardCta {
7
+ title?: string;
8
+ href?: string;
9
+ }
10
+ export interface PricingSpreadCardProps {
11
+ badge_left_text?: string;
12
+ heading?: string;
13
+ description?: string;
14
+ features_heading?: string;
15
+ features?: PricingSpreadCardFeature[];
16
+ badge_right_text?: string;
17
+ currency?: string;
18
+ price?: string;
19
+ price_suffix?: string;
20
+ cta?: PricingSpreadCardCta;
21
+ caption?: string;
22
+ /** Asset URL, or a Contentstack asset object. Falls back to a built-in decorative illustration when unset. */
23
+ illustration?: string | {
24
+ url?: string;
25
+ };
26
+ background_color?: StackableColorValue;
27
+ text_color?: StackableColorValue;
28
+ accent_color?: StackableColorValue;
29
+ className?: string;
30
+ }
31
+ export declare function PricingSpreadCard({ badge_left_text, heading, description, features_heading, features, badge_right_text, currency, price, price_suffix, cta, caption, illustration, background_color, text_color, accent_color, className, }: PricingSpreadCardProps): React.JSX.Element;
32
+ export default PricingSpreadCard;
@@ -0,0 +1,4 @@
1
+ export { Pricing } from './Pricing';
2
+ export type { PricingProps, PricingTier, PricingFeature, PricingLogo } from './Pricing';
3
+ export { PricingSpreadCard } from './PricingSpreadCard';
4
+ export type { PricingSpreadCardProps, PricingSpreadCardFeature, PricingSpreadCardCta } from './PricingSpreadCard';
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ /** Native Contentstack link field: `{ title, href }`. */
4
+ export interface ProcessStepLink {
5
+ title?: string;
6
+ href?: string;
7
+ }
8
+ export interface ProcessStepItem {
9
+ /**
10
+ * The oversized glyph. Free text straight from the CMS — `01`, `A`, `IV`,
11
+ * `§` all render. Never parsed as a number and never used for ordering, so
12
+ * editors are free to label steps however the content calls for.
13
+ */
14
+ label?: string;
15
+ /**
16
+ * Named `step_title` rather than `title`: a group subfield with the uid
17
+ * `title` collides with the content type's mandatory Title field on import.
18
+ * Props map 1:1 onto field uids, so the prop carries the same name.
19
+ */
20
+ step_title?: string;
21
+ description?: string;
22
+ /**
23
+ * Clipped inside the glyph rather than shown as a picture. Asset URL or a
24
+ * Contentstack asset object — both are accepted.
25
+ */
26
+ image?: string | {
27
+ url?: string;
28
+ };
29
+ image_alt?: string;
30
+ link?: ProcessStepLink;
31
+ }
32
+ export interface ProcessStepProps {
33
+ heading?: string;
34
+ subheading?: string;
35
+ heading_alignment?: 'left' | 'center' | 'right' | string;
36
+ steps?: ProcessStepItem[];
37
+ /** `Alternating` mirrors every second row, as in a zig-zag. */
38
+ layout?: 'Alternating' | 'Text Left' | 'Text Right' | string;
39
+ /** Hairline rule between rows. */
40
+ show_dividers?: boolean;
41
+ /** Short accent bar under each step title. */
42
+ show_accent_rule?: boolean;
43
+ glyph_scale?: 'Small' | 'Medium' | 'Large' | string;
44
+ background_color?: StackableColorValue;
45
+ text_color?: StackableColorValue;
46
+ /** Accent bar, and the glyph itself when a step has no image. */
47
+ accent_color?: StackableColorValue;
48
+ className?: string;
49
+ }
50
+ export declare function ProcessStep({ heading, subheading, heading_alignment, steps, layout, show_dividers, show_accent_rule, glyph_scale, background_color, text_color, accent_color, className, }: ProcessStepProps): React.JSX.Element;
51
+ export default ProcessStep;
@@ -0,0 +1,2 @@
1
+ export { ProcessStep } from './ProcessStep';
2
+ export type { ProcessStepProps, ProcessStepItem, ProcessStepLink } from './ProcessStep';
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ /** Internal — reached through `ProductCard` with `card_style: 'Dark'`. */
4
+ export interface ProductCardDarkProps {
5
+ product_name?: string;
6
+ brand?: string;
7
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
8
+ product_image?: string | {
9
+ url?: string;
10
+ };
11
+ image_alt?: string;
12
+ price?: number;
13
+ currency?: string;
14
+ /** `59$` (suffix, as in the reference) vs `$59` (prefix). */
15
+ currency_position?: 'prefix' | 'suffix' | string;
16
+ href?: string;
17
+ /** Accessible label for the add-to-cart button. */
18
+ cta_label?: string;
19
+ image_aspect_ratio?: 'Square' | 'Landscape' | 'Portrait' | string;
20
+ /** `Contain` suits cut-out product shots; `Cover` suits lifestyle photography. */
21
+ image_fit?: 'Contain' | 'Cover' | string;
22
+ show_wishlist?: boolean;
23
+ show_cart_button?: boolean;
24
+ background_color?: StackableColorValue;
25
+ text_color?: StackableColorValue;
26
+ /** Heart fill once wishlisted. */
27
+ accent_color?: StackableColorValue;
28
+ className?: string;
29
+ }
30
+ export declare function ProductCardDark({ product_name, brand, product_image, image_alt, price, currency, currency_position, href, cta_label, image_aspect_ratio, image_fit, show_wishlist, show_cart_button, background_color, text_color, accent_color, className, }: ProductCardDarkProps): React.JSX.Element;
31
+ export default ProductCardDark;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface ProductCardLargeProps {
3
+ product_name?: string;
4
+ product_image?: string;
5
+ price?: number;
6
+ href?: string;
7
+ cta_label?: string;
8
+ className?: string;
9
+ }
10
+ export declare function ProductCardLarge({ product_name: productName, product_image: productImage, price, href, cta_label, className, }: ProductCardLargeProps): React.JSX.Element;
11
+ export default ProductCardLarge;
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ export interface ProductBannerItem {
3
+ image?: string;
4
+ name?: string;
5
+ subtext?: string;
6
+ price?: number | string;
7
+ original_price?: number | string;
8
+ discount_label?: string;
9
+ price_note?: string;
10
+ unit_price?: string;
11
+ unit_note?: string;
12
+ href?: string;
13
+ }
14
+ export interface ProductBannerProps {
15
+ badge_label?: string;
16
+ heading?: string;
17
+ description?: string;
18
+ banner_image?: string;
19
+ banner_link?: string;
20
+ shop_all_label?: string;
21
+ shop_all_link?: string;
22
+ products?: ProductBannerItem[];
23
+ /** Which side the banner image sits on relative to the product row */
24
+ banner_position?: 'left' | 'right' | string;
25
+ className?: string;
26
+ }
27
+ export declare function ProductBanner({ badge_label, heading, description, banner_image, banner_link, shop_all_label, shop_all_link, products, banner_position, className, }: ProductBannerProps): React.JSX.Element;
28
+ export default ProductBanner;
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface ProductColorOption {
4
+ label?: string;
5
+ hex?: string;
6
+ }
7
+ export interface ProductSizeOption {
8
+ label?: string;
9
+ }
10
+ export interface ProductCardProps {
11
+ /**
12
+ * Which layout to render. `Regular` is the original light card with colour and
13
+ * size pickers; `Dark` is the rounded dark card with a wishlist heart and a
14
+ * circular cart button. Fields belonging to the other style are ignored.
15
+ */
16
+ card_style?: 'Regular' | 'Dark' | string;
17
+ product_name?: string;
18
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
19
+ product_image?: string | {
20
+ url?: string;
21
+ };
22
+ /** Falls back to the product name when empty. */
23
+ image_alt?: string;
24
+ price?: number;
25
+ href?: string;
26
+ cta_label?: string;
27
+ /** Regular only — `Large` widens the card. */
28
+ card_size?: string;
29
+ /** Regular only. */
30
+ colors?: ProductColorOption[];
31
+ /** Regular only. */
32
+ sizes?: ProductSizeOption[];
33
+ /** Dark only. */
34
+ brand?: string;
35
+ /** Dark only. */
36
+ currency?: string;
37
+ /** Dark only. */
38
+ currency_position?: 'prefix' | 'suffix' | string;
39
+ /** Dark only. */
40
+ image_aspect_ratio?: 'Square' | 'Landscape' | 'Portrait' | string;
41
+ /** Dark only. */
42
+ image_fit?: 'Contain' | 'Cover' | string;
43
+ /** Dark only. */
44
+ show_wishlist?: boolean;
45
+ /** Dark only. */
46
+ show_cart_button?: boolean;
47
+ /** Dark only. */
48
+ background_color?: StackableColorValue;
49
+ /** Dark only. */
50
+ text_color?: StackableColorValue;
51
+ /** Dark only. */
52
+ accent_color?: StackableColorValue;
53
+ className?: string;
54
+ }
55
+ export { ProductCardLarge } from './LargeCard';
56
+ export type { ProductCardLargeProps } from './LargeCard';
57
+ export { ProductBanner } from './ProductBanner';
58
+ export type { ProductBannerProps, ProductBannerItem } from './ProductBanner';
59
+ export declare function ProductCard({ card_style, product_name: productName, product_image: productImage, image_alt, card_size: cardSize, price, colors, sizes, href, cta_label, className, ...darkOnly }: ProductCardProps): React.JSX.Element;
60
+ export { ProductCard as ProductCardRegular };
61
+ export default ProductCard;
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface SectionIntroductionCtaButton {
4
+ title?: string;
5
+ url?: string;
6
+ open_in_new_tab?: boolean;
7
+ apply_border?: boolean;
8
+ background_color?: StackableColorValue;
9
+ text_color?: StackableColorValue;
10
+ }
11
+ export interface SectionIntroductionColorValue {
12
+ hex?: string;
13
+ }
14
+ export interface SectionIntroductionProps {
15
+ className?: string;
16
+ eyebrow_text?: string;
17
+ heading?: string;
18
+ subheading?: string;
19
+ description?: string;
20
+ cta_button?: SectionIntroductionCtaButton;
21
+ secondary_cta_button?: SectionIntroductionCtaButton;
22
+ alignment?: 'Left' | 'Center' | 'Right' | string;
23
+ background_color?: SectionIntroductionColorValue;
24
+ text_color?: SectionIntroductionColorValue;
25
+ }
26
+ export declare function SectionIntroduction({ className, eyebrow_text: eyebrowText, heading, subheading, description, cta_button: ctaButton, secondary_cta_button: secondaryCtaButton, alignment, background_color: backgroundColor, text_color: textColor, }: SectionIntroductionProps): React.JSX.Element;
27
+ export default SectionIntroduction;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ export interface SectionIntroductionTwoColumnColorValue {
3
+ hex?: string;
4
+ }
5
+ export interface SectionIntroductionTwoColumnProps {
6
+ className?: string;
7
+ step_number?: string;
8
+ eyebrow_text?: string;
9
+ heading?: string;
10
+ left_description?: string;
11
+ right_description?: string;
12
+ left_background_image?: string;
13
+ right_background_image?: string;
14
+ background_color?: SectionIntroductionTwoColumnColorValue;
15
+ text_color?: SectionIntroductionTwoColumnColorValue;
16
+ }
17
+ export declare function SectionIntroductionTwoColumn({ className, step_number, eyebrow_text: eyebrowText, heading, left_description: leftDescription, right_description: rightDescription, left_background_image: leftBgImage, right_background_image: rightBgImage, background_color: backgroundColor, text_color: textColor, }: SectionIntroductionTwoColumnProps): React.JSX.Element;
18
+ export default SectionIntroductionTwoColumn;
@@ -0,0 +1,4 @@
1
+ export { SectionIntroduction } from './SectionIntroduction';
2
+ export type { SectionIntroductionProps, SectionIntroductionCtaButton, SectionIntroductionColorValue } from './SectionIntroduction';
3
+ export { SectionIntroductionTwoColumn } from './SectionIntroductionTwoColumn';
4
+ export type { SectionIntroductionTwoColumnProps, SectionIntroductionTwoColumnColorValue } from './SectionIntroductionTwoColumn';
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface SidebarLink {
4
+ text?: string;
5
+ link?: string;
6
+ }
7
+ export interface SidebarItem {
8
+ link?: SidebarLink;
9
+ icon?: string;
10
+ }
11
+ export interface SidebarProps {
12
+ title?: string;
13
+ subtitle?: string;
14
+ logo?: string;
15
+ items?: SidebarItem[];
16
+ cta_button?: SidebarLink;
17
+ collapsible?: boolean;
18
+ default_open?: boolean;
19
+ position?: 'left' | 'right' | string;
20
+ width?: 'narrow' | 'medium' | 'wide' | string;
21
+ background_color?: StackableColorValue;
22
+ text_color?: StackableColorValue;
23
+ className?: string;
24
+ }
25
+ export declare function Sidebar({ title, subtitle, logo, items, cta_button, collapsible, default_open, position, width, background_color, text_color, className, }: SidebarProps): React.JSX.Element;
26
+ export default Sidebar;
@@ -0,0 +1,2 @@
1
+ export { Sidebar } from './Sidebar';
2
+ export type { SidebarProps, SidebarItem, SidebarLink } from './Sidebar';
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface ProductSliderCtaButton {
4
+ text?: string;
5
+ link?: string;
6
+ }
7
+ export interface ProductSliderSlide {
8
+ background_image?: string;
9
+ eyebrow_text?: string;
10
+ heading?: string;
11
+ subheading?: string;
12
+ content_position?: 'left' | 'right' | string;
13
+ cta_button?: ProductSliderCtaButton;
14
+ text_color?: StackableColorValue;
15
+ button_color?: StackableColorValue;
16
+ button_text_color?: StackableColorValue;
17
+ }
18
+ export interface ProductSliderProps {
19
+ slides?: ProductSliderSlide[];
20
+ className?: string;
21
+ }
22
+ export declare function ProductSlider({ slides, className }: ProductSliderProps): React.JSX.Element;
23
+ export default ProductSlider;
@@ -0,0 +1,2 @@
1
+ export { ProductSlider } from './ProductSlider';
2
+ export type { ProductSliderProps, ProductSliderSlide, ProductSliderCtaButton } from './ProductSlider';
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface SocialLinksItem {
4
+ /** One of the curated platforms; decides the brand mark and its default colour. */
5
+ platform?: string;
6
+ /** Account name. Falls back to the section-level handle, so it's set once by default. */
7
+ handle?: string;
8
+ /** Line under the handle. Falls back to the platform's own wording. */
9
+ label?: string;
10
+ url?: string;
11
+ /** Overrides the platform's official colour for this card only. */
12
+ brand_color?: StackableColorValue;
13
+ }
14
+ export interface SocialLinksProps {
15
+ heading?: string;
16
+ /** Small group glyph beside the heading. */
17
+ show_heading_icon?: boolean;
18
+ /** Used by every card that doesn't set its own handle. */
19
+ handle?: string;
20
+ /** Cards per row. They stay equal width, so the grid keeps square edges. */
21
+ columns?: number;
22
+ /**
23
+ * `Brand tint` washes each card in its platform colour. `Neutral` makes every
24
+ * card identical and leaves only the mark coloured. `Outline` is a hairline
25
+ * border with no fill.
26
+ */
27
+ card_style?: 'Brand tint' | 'Neutral' | 'Outline' | string;
28
+ /** Colours the mark with its brand colour. Off renders every mark in the text colour. */
29
+ colour_icons?: boolean;
30
+ links?: SocialLinksItem[];
31
+ background_color?: StackableColorValue;
32
+ text_color?: StackableColorValue;
33
+ className?: string;
34
+ }
35
+ export declare function SocialLinks({ heading, show_heading_icon, handle, columns, card_style, colour_icons, links, background_color, text_color, className, }: SocialLinksProps): React.JSX.Element;
36
+ export default SocialLinks;
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export type SocialPostPlatform = 'x' | 'instagram' | 'tiktok';
4
+ export interface SocialPostEmbedProps {
5
+ /** Public post URL — platform is detected from the domain (x.com/twitter.com,
6
+ * instagram.com, or tiktok.com), so there's no separate platform field to keep in
7
+ * sync. LinkedIn/Facebook aren't supported — they don't offer a "just paste a
8
+ * public post URL" embed without extra setup (LinkedIn requires their own generated
9
+ * embed HTML, Facebook now requires an App ID). Works for any post type a platform's
10
+ * own widget renders — image, video, GIF, poll — since that's the platform's embed
11
+ * script rendering whatever the post actually contains, not something this component
12
+ * special-cases. */
13
+ post_url?: string;
14
+ /** Optional supplementary caption shown below the embed. */
15
+ caption?: string;
16
+ /** Position of the embed within its container. */
17
+ alignment?: 'left' | 'center' | 'right' | string;
18
+ /** X only — when the linked post is itself a reply, hides the parent tweet X
19
+ * would otherwise show above it, so the embed focuses on just this one post
20
+ * (maps to X's own `data-conversation="none"` embed attribute). Has no visible
21
+ * effect on a post that isn't a reply. */
22
+ hide_parent_context?: boolean;
23
+ /** Instagram only — shows the post's own caption text under the embed, distinct
24
+ * from the custom `caption` field above (maps to Instagram's own
25
+ * `data-instgrm-captioned` embed attribute). Ignored for a profile link, since
26
+ * that attribute is documented for posts only and breaks Instagram's embed
27
+ * widget when applied to a profile URL. */
28
+ show_native_caption?: boolean;
29
+ background_color?: StackableColorValue;
30
+ text_color?: StackableColorValue;
31
+ className?: string;
32
+ }
33
+ export declare function SocialPostEmbed({ post_url, caption, alignment, hide_parent_context, show_native_caption, background_color, text_color, className, }: SocialPostEmbedProps): React.JSX.Element;
34
+ export default SocialPostEmbed;
@@ -0,0 +1,4 @@
1
+ export { SocialPostEmbed } from './SocialPostEmbed';
2
+ export type { SocialPostEmbedProps, SocialPostPlatform } from './SocialPostEmbed';
3
+ export { SocialLinks } from './SocialLinks';
4
+ export type { SocialLinksProps, SocialLinksItem } from './SocialLinks';
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ /** Curated preset — editors pick one of these, or override with `icon_image`. */
4
+ declare const STAT_ICONS: Record<string, React.ComponentType<{
5
+ className?: string;
6
+ style?: React.CSSProperties;
7
+ }>>;
8
+ export interface StatCounterItem {
9
+ /** Preset icon key from STAT_ICONS. Ignored when `icon_image` is set. */
10
+ icon?: keyof typeof STAT_ICONS | string;
11
+ /** Uploaded asset URL, or a Contentstack asset object — takes precedence over `icon`. */
12
+ icon_image?: string | {
13
+ url?: string;
14
+ };
15
+ icon_alt?: string;
16
+ value?: string;
17
+ label?: string;
18
+ }
19
+ export interface StatCounterRowProps {
20
+ eyebrow_text?: string;
21
+ heading?: string;
22
+ subheading?: string;
23
+ stats?: StatCounterItem[];
24
+ show_dividers?: boolean;
25
+ /** Counts each stat's numeric value up from 0 when it scrolls into view. */
26
+ animate_numbers?: boolean;
27
+ /** Tints the preset icon set. Uploaded `icon_image`s render as-is and ignore this. */
28
+ icon_color?: StackableColorValue;
29
+ background_color?: StackableColorValue;
30
+ text_color?: StackableColorValue;
31
+ className?: string;
32
+ }
33
+ export declare function StatCounterRow({ eyebrow_text, heading, subheading, stats, show_dividers, animate_numbers, icon_color, background_color, text_color, className, }: StatCounterRowProps): React.JSX.Element;
34
+ export default StatCounterRow;
@@ -0,0 +1,2 @@
1
+ export { StatCounterRow } from './StatCounterRow';
2
+ export type { StatCounterRowProps, StatCounterItem } from './StatCounterRow';
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface TabItem {
4
+ label?: string;
5
+ /** Emoji/glyph, an icon URL, or a Contentstack asset object. */
6
+ icon?: string | {
7
+ url?: string;
8
+ };
9
+ heading?: string;
10
+ body?: string;
11
+ image?: string;
12
+ cta_label?: string;
13
+ cta_url?: string;
14
+ }
15
+ export interface TabsProps {
16
+ tabs?: TabItem[];
17
+ layout?: 'editorial' | 'icon-underline' | 'pill' | 'vertical' | 'card-carousel' | 'underline-split' | 'dark' | string;
18
+ default_tab?: number;
19
+ className?: string;
20
+ section_heading?: string;
21
+ section_sub_heading?: string;
22
+ text_color?: StackableColorValue;
23
+ heading_alignment?: 'left' | 'center' | 'right';
24
+ label_position?: 'top' | 'bottom';
25
+ image_position?: 'left' | 'right';
26
+ pill_style?: 'plain' | 'pill';
27
+ pill_bg_color?: StackableColorValue;
28
+ dark_header_enabled?: boolean;
29
+ header_bg_color?: StackableColorValue;
30
+ carousel_enabled?: boolean;
31
+ tab_label_position?: 'left' | 'right';
32
+ tab_bg_color?: StackableColorValue;
33
+ }
34
+ export declare function Tabs({ tabs, layout, default_tab, className, section_heading, section_sub_heading, text_color, heading_alignment, label_position, image_position, pill_style, pill_bg_color, dark_header_enabled, header_bg_color, carousel_enabled, tab_label_position, tab_bg_color, }: TabsProps): React.JSX.Element;
35
+ export default Tabs;
@@ -0,0 +1,2 @@
1
+ export { Tabs } from './Tabs';
2
+ export type { TabsProps, TabItem } from './Tabs';
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface TeamBannerMember {
4
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
5
+ image?: string | {
6
+ url?: string;
7
+ };
8
+ image_alt?: string;
9
+ name?: string;
10
+ designation?: string;
11
+ /** Draws the accent-coloured border, like the featured centre card. */
12
+ highlight?: boolean;
13
+ }
14
+ export interface TeamBannerProps {
15
+ eyebrow_text?: string;
16
+ heading?: string;
17
+ subheading?: string;
18
+ heading_alignment?: 'left' | 'center' | 'right' | string;
19
+ /** Cards per row on wide screens; wraps naturally below that. */
20
+ columns?: number;
21
+ /** Zig-zag the cards vertically (odd cards pushed down). */
22
+ staggered?: boolean;
23
+ card_aspect?: 'Portrait Tall' | 'Portrait' | 'Square' | string;
24
+ members?: TeamBannerMember[];
25
+ background_color?: StackableColorValue;
26
+ text_color?: StackableColorValue;
27
+ /** Eyebrow, designation and the featured card's border. */
28
+ accent_color?: StackableColorValue;
29
+ className?: string;
30
+ }
31
+ export declare function TeamBanner({ eyebrow_text, heading, subheading, heading_alignment, columns, staggered, card_aspect, members, background_color, text_color, accent_color, className, }: TeamBannerProps): React.JSX.Element;
32
+ export default TeamBanner;
@@ -0,0 +1,2 @@
1
+ export { TeamBanner } from './TeamBanner';
2
+ export type { TeamBannerProps, TeamBannerMember } from './TeamBanner';
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface CardStackItem {
4
+ content?: string;
5
+ /** Exact substring of `content` to highlight in the accent colour. */
6
+ highlight_text?: string;
7
+ name?: string;
8
+ designation?: string;
9
+ /** Uploaded asset URL, or a Contentstack asset object. Optional. */
10
+ avatar?: string | {
11
+ url?: string;
12
+ };
13
+ }
14
+ export interface CardStackProps {
15
+ eyebrow_text?: string;
16
+ heading?: string;
17
+ items?: CardStackItem[];
18
+ /** `auto` cycles on a timer (pausing while hovered); `drag` waits for the
19
+ * visitor to throw the front card aside. Either way the front card goes to
20
+ * the back of the stack and the one behind it takes its place. */
21
+ interaction_mode?: 'auto' | 'drag' | string;
22
+ /** Seconds between cycles in `auto` mode. */
23
+ auto_interval?: number;
24
+ background_color?: StackableColorValue;
25
+ card_color?: StackableColorValue;
26
+ text_color?: StackableColorValue;
27
+ accent_color?: StackableColorValue;
28
+ className?: string;
29
+ }
30
+ export declare function CardStack({ eyebrow_text, heading, items, interaction_mode, auto_interval, background_color, card_color, text_color, accent_color, className, }: CardStackProps): React.JSX.Element | null;
31
+ export default CardStack;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface RatingSummaryLink {
4
+ title?: string;
5
+ href?: string;
6
+ }
7
+ export interface RatingSummaryProps {
8
+ rating?: number;
9
+ max_rating?: number;
10
+ review_count?: number;
11
+ source_name?: string;
12
+ link?: RatingSummaryLink;
13
+ alignment?: 'left' | 'center' | 'right' | string;
14
+ background_color?: StackableColorValue;
15
+ text_color?: StackableColorValue;
16
+ star_color?: StackableColorValue;
17
+ className?: string;
18
+ }
19
+ export declare function RatingSummary({ rating, max_rating, review_count, source_name, link, alignment, background_color, text_color, star_color, className, }: RatingSummaryProps): React.JSX.Element;
20
+ export default RatingSummary;
@@ -0,0 +1,55 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ /** Native Contentstack link field: `{ title, href }`. */
4
+ export interface ReviewsLink {
5
+ title?: string;
6
+ href?: string;
7
+ }
8
+ export interface ReviewsItem {
9
+ /** The testimonial itself. Line breaks are kept. */
10
+ quote?: string;
11
+ author_name?: string;
12
+ /** Role and company, e.g. `VP of Finance — Billy`. */
13
+ author_role?: string;
14
+ /**
15
+ * Asset URL or a Contentstack asset object — both are accepted, since a file
16
+ * field arrives as a URL from the catalog but as `{ url, … }` from the
17
+ * Delivery API.
18
+ */
19
+ avatar?: string | {
20
+ url?: string;
21
+ };
22
+ avatar_alt?: string;
23
+ }
24
+ export interface ReviewsProps {
25
+ eyebrow_text?: string;
26
+ heading?: string;
27
+ heading_alignment?: 'left' | 'center' | 'right' | string;
28
+ testimonials?: ReviewsItem[];
29
+ /** Columns of cards. Reduced automatically when they would get too narrow. */
30
+ columns?: number;
31
+ /** Height of the scrolling area. */
32
+ wall_height?: 'Short' | 'Medium' | 'Tall' | string;
33
+ /** Seconds for one full loop. Higher is slower. */
34
+ scroll_seconds?: number;
35
+ /** Neighbouring columns travel in opposite directions. */
36
+ alternate_direction?: boolean;
37
+ pause_on_hover?: boolean;
38
+ /** The rounded outer container. */
39
+ show_frame?: boolean;
40
+ /** Fades the cards out at the top and bottom edges. */
41
+ show_fade?: boolean;
42
+ /** Small line inside the floating footer pill. */
43
+ footer_note?: string;
44
+ /** Button inside the footer pill. The pill is hidden when both are empty. */
45
+ footer_cta?: ReviewsLink;
46
+ background_color?: StackableColorValue;
47
+ /** The cards themselves. */
48
+ card_color?: StackableColorValue;
49
+ text_color?: StackableColorValue;
50
+ button_color?: StackableColorValue;
51
+ button_text_color?: StackableColorValue;
52
+ className?: string;
53
+ }
54
+ export declare function Reviews({ eyebrow_text, heading, heading_alignment, testimonials, columns, wall_height, scroll_seconds, alternate_direction, pause_on_hover, show_frame, show_fade, footer_note, footer_cta, background_color, card_color, text_color, button_color, button_text_color, className, }: ReviewsProps): React.JSX.Element;
55
+ export default Reviews;