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,37 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ /** Native Contentstack link field: `{ title, href }`. */
4
+ export interface IndexSectionLink {
5
+ title?: string;
6
+ href?: string;
7
+ }
8
+ export interface IndexSectionItem {
9
+ /** Shown large behind/above the image. Falls back to the row's position, zero-padded. */
10
+ number?: string;
11
+ title?: string;
12
+ /** Small line under the title — a page range, date, or category. */
13
+ caption?: string;
14
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
15
+ image?: string | {
16
+ url?: string;
17
+ };
18
+ image_alt?: string;
19
+ link?: IndexSectionLink;
20
+ }
21
+ export interface IndexSectionProps {
22
+ heading?: string;
23
+ heading_alignment?: 'left' | 'center' | 'right' | string;
24
+ items?: IndexSectionItem[];
25
+ /** Panels per row at wide widths; wraps below that. */
26
+ columns?: number;
27
+ image_aspect_ratio?: 'Portrait' | 'Square' | 'Landscape' | string;
28
+ /** Small centred credit line under the row. */
29
+ footer_text?: string;
30
+ background_color?: StackableColorValue;
31
+ text_color?: StackableColorValue;
32
+ /** Colour of the large index numerals. */
33
+ accent_color?: StackableColorValue;
34
+ className?: string;
35
+ }
36
+ export declare function IndexSection({ heading, heading_alignment, items, columns, image_aspect_ratio, footer_text, background_color, text_color, accent_color, className, }: IndexSectionProps): React.JSX.Element;
37
+ export default IndexSection;
@@ -0,0 +1,10 @@
1
+ export { BentoGrid } from './BentoGrid';
2
+ export type { BentoGridProps, BentoCell, BentoCellLink } from './BentoGrid';
3
+ export { IndexSection } from './IndexSection';
4
+ export type { IndexSectionProps, IndexSectionItem, IndexSectionLink } from './IndexSection';
5
+ export { HexTileGrid } from './HexTileGrid';
6
+ export type { HexTileGridProps, HexTileGridTile, HexTileGridLink } from './HexTileGrid';
7
+ export { CategoryGrid } from './CategoryGrid';
8
+ export type { CategoryGridProps, CategoryGridItem, CategoryGridLink } from './CategoryGrid';
9
+ export { FlipCardGrid } from './FlipCardGrid';
10
+ export type { FlipCardGridProps, FlipCardGridItem, FlipCardGridLink } from './FlipCardGrid';
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface HeroBannerCtaButton {
4
+ text?: string;
5
+ link?: string;
6
+ }
7
+ export interface HeroBannerCarouselImage {
8
+ image?: string | {
9
+ url?: string;
10
+ };
11
+ }
12
+ export interface HeroBannerProps {
13
+ heading?: string;
14
+ subheading?: string;
15
+ cta_button?: HeroBannerCtaButton;
16
+ background_video?: string | {
17
+ url?: string;
18
+ };
19
+ background_image?: string | {
20
+ url?: string;
21
+ };
22
+ enable_carousel?: boolean;
23
+ carousel_images?: HeroBannerCarouselImage[];
24
+ text_alignment?: 'left' | 'center' | 'right' | string;
25
+ banner_height?: 'Screen' | 'Auto' | string;
26
+ banner_width?: 'Screen' | string;
27
+ gradient?: 'Black' | string;
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 HeroBanner({ heading, subheading, cta_button, background_video, background_image, enable_carousel, carousel_images, text_alignment, banner_height, banner_width, gradient, background_color, text_color, button_color, button_text_color, className, }: HeroBannerProps): React.JSX.Element;
35
+ export default HeroBanner;
@@ -0,0 +1,79 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ /** Native Contentstack link field: `{ title, href }`. */
4
+ export interface HeroBannerClassicLink {
5
+ title?: string;
6
+ href?: string;
7
+ }
8
+ /**
9
+ * One line of the headline. `text` renders in the body colour, `accent_text`
10
+ * follows it in the accent colour — which is what lets a single repeater cover
11
+ * a fully accented second line, a trailing accented full stop, or neither.
12
+ */
13
+ export interface HeroBannerClassicHeadingLine {
14
+ text?: string;
15
+ accent_text?: string;
16
+ }
17
+ export interface HeroBannerClassicAvatar {
18
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
19
+ image?: string | {
20
+ url?: string;
21
+ };
22
+ image_alt?: string;
23
+ }
24
+ /** One rotation of a `Statement` footer item. */
25
+ export interface HeroBannerClassicStatementEntry {
26
+ text?: string;
27
+ /** Small line under the statement — a route, a date, an attribution. */
28
+ meta?: string;
29
+ }
30
+ /**
31
+ * Heterogeneous footer cell, discriminated by `type`. Fields not relevant to a
32
+ * type are simply ignored, the same arrangement `BentoGrid`'s cells use.
33
+ */
34
+ export interface HeroBannerClassicFooterItem {
35
+ type?: 'Stat' | 'Social Proof' | 'Statement' | 'Promo' | string;
36
+ /** `Stat` figure, or the `Social Proof` count. */
37
+ value?: string;
38
+ label?: string;
39
+ description?: string;
40
+ /** Asset URL, or a Contentstack asset object. */
41
+ icon?: string | {
42
+ url?: string;
43
+ };
44
+ link?: HeroBannerClassicLink;
45
+ /** Floods the card in the accent colour — the highlighted promo cell. */
46
+ emphasis?: boolean;
47
+ /** `Statement` only. More than one adds prev/next controls. */
48
+ entries?: HeroBannerClassicStatementEntry[];
49
+ }
50
+ export interface HeroBannerClassicProps {
51
+ eyebrow_text?: string;
52
+ heading_lines?: HeroBannerClassicHeadingLine[];
53
+ heading_font?: 'Sans' | 'Serif' | string;
54
+ description?: string;
55
+ primary_cta?: HeroBannerClassicLink;
56
+ primary_cta_icon?: 'None' | 'Arrow' | 'Play' | string;
57
+ secondary_cta?: HeroBannerClassicLink;
58
+ secondary_cta_icon?: 'None' | 'Arrow' | 'Play' | string;
59
+ image?: string | {
60
+ url?: string;
61
+ };
62
+ image_alt?: string;
63
+ media_position?: 'left' | 'right' | string;
64
+ /** Overlay on the media. Rendered only when `badge_value` is filled. */
65
+ badge_label?: string;
66
+ badge_value?: string;
67
+ badge_caption?: string;
68
+ /** Shared by the inline social proof and by a `Social Proof` footer cell. */
69
+ avatars?: HeroBannerClassicAvatar[];
70
+ /** `Inline` sits under the CTAs; `Cards` spans the full width below. */
71
+ footer_layout?: 'None' | 'Inline' | 'Cards' | string;
72
+ footer_items?: HeroBannerClassicFooterItem[];
73
+ background_color?: StackableColorValue;
74
+ text_color?: StackableColorValue;
75
+ accent_color?: StackableColorValue;
76
+ className?: string;
77
+ }
78
+ export declare function HeroBannerClassic({ eyebrow_text, heading_lines, heading_font, description, primary_cta, primary_cta_icon, secondary_cta, secondary_cta_icon, image, image_alt, media_position, badge_label, badge_value, badge_caption, avatars, footer_layout, footer_items, background_color, text_color, accent_color, className, }: HeroBannerClassicProps): React.JSX.Element;
79
+ export default HeroBannerClassic;
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface SplitHeroBannerCtaButton {
4
+ text?: string;
5
+ link?: string;
6
+ }
7
+ export interface SplitHeroBannerVideoOptions {
8
+ video?: string | {
9
+ url?: string;
10
+ };
11
+ video_controls?: string;
12
+ style?: string;
13
+ in_loop?: boolean;
14
+ }
15
+ export interface SplitHeroBannerProps {
16
+ heading?: string;
17
+ description?: string;
18
+ cta_button?: SplitHeroBannerCtaButton;
19
+ video_options?: SplitHeroBannerVideoOptions;
20
+ image?: string | {
21
+ url?: string;
22
+ };
23
+ media_position?: 'left' | 'right' | string;
24
+ background_color?: StackableColorValue;
25
+ text_color?: StackableColorValue;
26
+ className?: string;
27
+ }
28
+ export declare function SplitHeroBanner({ heading, description, cta_button, video_options: videoOptions, image, media_position: mediaPosition, background_color, text_color, className, }: SplitHeroBannerProps): React.JSX.Element;
29
+ export default SplitHeroBanner;
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface SpotlightHeroCtaLink {
4
+ title?: string;
5
+ href?: string;
6
+ }
7
+ export interface SpotlightHeroCtaItem {
8
+ link?: SpotlightHeroCtaLink;
9
+ type?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | string;
10
+ }
11
+ /** Deliberately one look, always dark — a spotlight only reads as a spotlight
12
+ * against near-black. There's no light-mode version of this design, so unlike
13
+ * most components in this library there's no `theme` prop here. */
14
+ export interface SpotlightHeroProps {
15
+ heading?: string;
16
+ subheading?: string;
17
+ description?: string;
18
+ /** Repeatable — each entry picks its own visual weight via `type`. */
19
+ cta?: SpotlightHeroCtaItem[];
20
+ /** Where the light fixture sits — the beam always angles down toward the
21
+ * content, which never moves. Only the source (and its angle) changes. */
22
+ spotlight_position?: 'left-top' | 'center-top' | 'right-top' | string;
23
+ background_color?: StackableColorValue;
24
+ text_color?: StackableColorValue;
25
+ /** The spotlight's own color — also tints the CTA outline and the heading's glow. */
26
+ accent_color?: StackableColorValue;
27
+ className?: string;
28
+ }
29
+ export declare function SpotlightHero({ heading, subheading, description, cta, spotlight_position, background_color, text_color, accent_color, className, }: SpotlightHeroProps): React.JSX.Element;
30
+ export default SpotlightHero;
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export type VideoDemoHeroAnimationStyle = 'from-center' | 'from-bottom' | 'from-top' | 'from-left' | 'from-right' | string;
4
+ export interface VideoDemoHeroLink {
5
+ title?: string;
6
+ href?: string;
7
+ }
8
+ export interface VideoDemoHeroThumbnail {
9
+ image?: string | {
10
+ url?: string;
11
+ };
12
+ alt_text?: string;
13
+ }
14
+ export interface VideoDemoHeroProps {
15
+ eyebrow_text?: string;
16
+ heading?: string;
17
+ subheading?: string;
18
+ /** A YouTube, Vimeo or Loom link (a normal watch/share link is fine, it's rewritten to
19
+ * the embeddable form automatically), any other embeddable player URL, or a direct
20
+ * .mp4/.webm/.ogg file — detected by extension and played in a native `<video>` tag
21
+ * instead of an iframe. Only `.href` is used; the link's own title isn't rendered. */
22
+ video_url?: VideoDemoHeroLink;
23
+ thumbnail?: VideoDemoHeroThumbnail;
24
+ /** How the player enters — and leaves back out the same way. */
25
+ animation_style?: VideoDemoHeroAnimationStyle;
26
+ background_color?: StackableColorValue;
27
+ text_color?: StackableColorValue;
28
+ /** The play button's glow and gradient. */
29
+ accent_color?: StackableColorValue;
30
+ className?: string;
31
+ }
32
+ export declare function VideoDemoHero({ eyebrow_text, heading, subheading, video_url, thumbnail, animation_style, background_color, text_color, accent_color, className, }: VideoDemoHeroProps): React.JSX.Element;
33
+ export default VideoDemoHero;
@@ -0,0 +1,8 @@
1
+ export { HeroBanner } from './HeroBanner';
2
+ export { SplitHeroBanner } from './SplitHeroBanner';
3
+ export { HeroBannerClassic } from './HeroBannerClassic';
4
+ export type { HeroBannerClassicProps, HeroBannerClassicLink, HeroBannerClassicHeadingLine, HeroBannerClassicAvatar, HeroBannerClassicStatementEntry, HeroBannerClassicFooterItem, } from './HeroBannerClassic';
5
+ export { SpotlightHero } from './SpotlightHero';
6
+ export type { SpotlightHeroProps, SpotlightHeroCtaLink, SpotlightHeroCtaItem } from './SpotlightHero';
7
+ export { VideoDemoHero } from './VideoDemoHero';
8
+ export type { VideoDemoHeroProps, VideoDemoHeroAnimationStyle, VideoDemoHeroLink, VideoDemoHeroThumbnail } from './VideoDemoHero';
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ export interface ImageGridItem {
3
+ image?: string;
4
+ alt?: string;
5
+ title?: string;
6
+ caption?: string;
7
+ href?: string;
8
+ colSpan?: number;
9
+ rowSpan?: number;
10
+ }
11
+ export interface ImageGridProps {
12
+ heading?: string;
13
+ subheading?: string;
14
+ theme?: 'light' | 'dark' | string;
15
+ text_alignment?: 'left' | 'center' | 'right' | string;
16
+ columns?: number;
17
+ gap?: 'sm' | 'md' | 'lg' | string;
18
+ aspect_ratio?: 'square' | '4:3' | '16:9' | 'auto' | string;
19
+ hover_effect?: 'none' | 'zoom' | 'overlay' | string;
20
+ lightbox?: boolean;
21
+ images?: ImageGridItem[];
22
+ className?: string;
23
+ }
24
+ export declare function ImageGrid({ heading, subheading, theme, text_alignment, columns, gap, aspect_ratio, hover_effect, lightbox, images, className, }: ImageGridProps): React.JSX.Element;
25
+ export default ImageGrid;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface DynamicGridImage {
4
+ image?: string;
5
+ alt?: string;
6
+ title?: string;
7
+ }
8
+ export interface ImageGridDynamicProps {
9
+ heading?: string;
10
+ subheading?: string;
11
+ heading_alignment?: 'left' | 'center' | 'right' | string;
12
+ background_color?: StackableColorValue;
13
+ gap?: 'none' | 'sm' | 'md' | 'lg' | string;
14
+ images?: DynamicGridImage[];
15
+ className?: string;
16
+ }
17
+ export declare function ImageGridDynamic({ heading, subheading, heading_alignment, background_color, gap, images, className, }: ImageGridDynamicProps): React.JSX.Element;
18
+ export default ImageGridDynamic;
@@ -0,0 +1,2 @@
1
+ export { ImageGrid } from './ImageGrid';
2
+ export { ImageGridDynamic } from './ImageGridDynamic';
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export type LogoCloudScrollMode = 'static' | 'auto';
4
+ export type LogoCloudDirection = 'horizontal' | 'grid';
5
+ export type LogoCloudLogoStyle = 'plain' | 'card';
6
+ export interface LogoCloudLogo {
7
+ /** Asset URL, or a Contentstack asset object — both are accepted. */
8
+ image?: string | {
9
+ url?: string;
10
+ };
11
+ name?: string;
12
+ url?: string;
13
+ }
14
+ export interface LogoCloudProps {
15
+ className?: string;
16
+ eyebrow_text?: string;
17
+ heading?: string;
18
+ subheading?: string;
19
+ logos?: LogoCloudLogo[];
20
+ /** 'static' renders a plain list, 'auto' scrolls continuously on a timer */
21
+ scroll_mode?: LogoCloudScrollMode | string;
22
+ /** Layout: 'horizontal' is a single row (can auto-scroll), 'grid' wraps logos into a fixed-column grid */
23
+ direction?: LogoCloudDirection | string;
24
+ logo_style?: LogoCloudLogoStyle | string;
25
+ /** Seconds for one full auto-scroll loop (only used when scroll_mode is 'auto') */
26
+ scroll_speed?: number;
27
+ /** Number of columns per row when direction is 'grid' */
28
+ grid_columns?: number;
29
+ background_color?: StackableColorValue;
30
+ text_color?: StackableColorValue;
31
+ }
32
+ export declare function LogoCloud({ className, eyebrow_text: eyebrowText, heading, subheading, logos: logosProp, scroll_mode, direction, logo_style, scroll_speed, grid_columns, background_color, text_color, }: LogoCloudProps): React.JSX.Element;
33
+ export default LogoCloud;
@@ -0,0 +1,2 @@
1
+ export { LogoCloud } from './LogoCloud';
2
+ export type { LogoCloudProps, LogoCloudLogo, LogoCloudScrollMode, LogoCloudDirection, LogoCloudLogoStyle, } from './LogoCloud';
@@ -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 CRUMB_ICONS: Record<string, React.ComponentType<{
5
+ className?: string;
6
+ }>>;
7
+ export interface BreadcrumbItem {
8
+ title?: string;
9
+ url?: string;
10
+ /** Preset icon key from the curated set, or `"None"` — the default — for no icon.
11
+ * Ignored when `icon_image` is set. */
12
+ icon?: keyof typeof CRUMB_ICONS | 'None' | string;
13
+ /** Uploaded asset URL, or a Contentstack asset object — takes precedence over `icon`. */
14
+ icon_image?: string | {
15
+ url?: string;
16
+ };
17
+ }
18
+ export interface BreadcrumbNavigationProps {
19
+ items?: BreadcrumbItem[];
20
+ separator_style?: 'slash' | 'chevron' | 'arrow' | string;
21
+ /** Collapses a trail longer than this into first item → "…" → last two items,
22
+ * clicking "…" reveals the full trail. 0 disables collapsing entirely. On narrow
23
+ * screens this collapses further regardless (down to 3), unless set to 0. */
24
+ max_items?: number;
25
+ /** Shows a pill-shaped prev/next pair to the left of the trail, stepping through
26
+ * the browser's own session history — the same back/forward the browser chrome
27
+ * already offers, just skinned to match the component. No CMS link config needed. */
28
+ show_prev_next?: boolean;
29
+ background_color?: StackableColorValue;
30
+ text_color?: StackableColorValue;
31
+ className?: string;
32
+ }
33
+ export declare function BreadcrumbNavigation({ items, separator_style, max_items, show_prev_next, background_color, text_color, className, }: BreadcrumbNavigationProps): React.JSX.Element | null;
34
+ export default BreadcrumbNavigation;
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ export interface ExtendedNavLink {
3
+ title?: string;
4
+ href?: string;
5
+ }
6
+ export interface ExtendedNavColumn {
7
+ column_heading?: string;
8
+ link?: ExtendedNavLink[];
9
+ }
10
+ export interface MenuBanner {
11
+ heading?: string;
12
+ description?: string;
13
+ image?: string | {
14
+ url?: string;
15
+ };
16
+ link?: string;
17
+ }
18
+ export interface ExtendedNavMenuItem {
19
+ label?: string;
20
+ link?: string;
21
+ extended_nav?: ExtendedNavColumn[];
22
+ menu_banner?: MenuBanner;
23
+ }
24
+ export interface ExtendedNavigationProps {
25
+ logo?: string;
26
+ className?: string;
27
+ menu_items?: ExtendedNavMenuItem[];
28
+ nav_alignment?: 'left' | 'right' | 'centered-logo' | string;
29
+ }
30
+ export declare function ExtendedNavigation({ logo, className, menu_items, nav_alignment, }: ExtendedNavigationProps): React.JSX.Element;
31
+ export default ExtendedNavigation;
@@ -0,0 +1,45 @@
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 DOCK_ICONS: Record<string, React.ComponentType<{
5
+ className?: string;
6
+ style?: React.CSSProperties;
7
+ }>>;
8
+ export interface FloatingDockLink {
9
+ title?: string;
10
+ href?: string;
11
+ }
12
+ export interface FloatingDockItem {
13
+ link?: FloatingDockLink;
14
+ /** Preset icon key from the curated set. Ignored when `icon_image` is set;
15
+ * falls back to the link title's first letter when neither is provided. */
16
+ icon?: keyof typeof DOCK_ICONS | string;
17
+ /** Uploaded asset URL, or a Contentstack asset object — takes precedence over `icon`. */
18
+ icon_image?: string | {
19
+ url?: string;
20
+ };
21
+ }
22
+ export interface FloatingDockProps {
23
+ items?: FloatingDockItem[];
24
+ /** Which edge of the bottom the dock hugs. Empty falls back to centered. */
25
+ position?: 'left' | 'center' | 'right' | string;
26
+ /** Pins the dock to the bottom of the viewport, which is what an editor dropping
27
+ * it onto a page expects. Set false to emit no positioning or z-index at all —
28
+ * the dock then renders in normal flow and the host decides placement, stacking,
29
+ * offsets and any overflow handling by wrapping it (shrink-to-fit sizing is also
30
+ * skipped, see below). Code-only (like `className`); not a CMS field, since
31
+ * `position` is the only placement choice editors make. */
32
+ fixed_position?: boolean;
33
+ /** Magnifies icons near the cursor, macOS-dock style. Off for anyone with
34
+ * `prefers-reduced-motion` regardless. Tooltips show either way. */
35
+ animate_magnify?: boolean;
36
+ /** The dock pill's own background. */
37
+ background_color?: StackableColorValue;
38
+ /** Each icon's resting chip background, sitting one shade lifted off `background_color`. */
39
+ accent_color?: StackableColorValue;
40
+ /** Icon glyph color. */
41
+ icon_color?: StackableColorValue;
42
+ className?: string;
43
+ }
44
+ export declare function FloatingDock({ items, position, fixed_position, animate_magnify, background_color, icon_color, accent_color, className, }: FloatingDockProps): React.JSX.Element | null;
45
+ export default FloatingDock;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export interface NavMenuItem {
3
+ label?: string;
4
+ link?: string;
5
+ }
6
+ export interface NavigationBarProps {
7
+ logo?: string;
8
+ className?: string;
9
+ menu_items?: NavMenuItem[];
10
+ nav_alignment?: 'left' | 'right' | 'centered-logo' | string;
11
+ }
12
+ export declare function NavigationBar({ logo, className, menu_items, nav_alignment, }: NavigationBarProps): React.JSX.Element;
13
+ export default NavigationBar;
@@ -0,0 +1,29 @@
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
+ /** Recognized icon keyword (see ICON_MAP), an image URL, or a Contentstack asset object. */
10
+ icon?: string | {
11
+ url?: string;
12
+ };
13
+ }
14
+ export interface SidebarProps {
15
+ title?: string;
16
+ subtitle?: string;
17
+ logo?: string;
18
+ items?: SidebarItem[];
19
+ cta_button?: SidebarLink;
20
+ collapsible?: boolean;
21
+ default_open?: boolean;
22
+ position?: 'left' | 'right' | string;
23
+ width?: 'narrow' | 'medium' | 'wide' | string;
24
+ background_color?: StackableColorValue;
25
+ text_color?: StackableColorValue;
26
+ className?: string;
27
+ }
28
+ export declare function Sidebar({ title, subtitle, logo, items, cta_button, collapsible, default_open, position, width, background_color, text_color, className, }: SidebarProps): React.JSX.Element;
29
+ export default Sidebar;
@@ -0,0 +1,8 @@
1
+ export { NavigationBar } from './NavigationBar';
2
+ export { ExtendedNavigation } from './ExtendedNavigation';
3
+ export { BreadcrumbNavigation } from './BreadcrumbNavigation';
4
+ export type { BreadcrumbNavigationProps, BreadcrumbItem } from './BreadcrumbNavigation';
5
+ export { Sidebar } from './Sidebar';
6
+ export type { SidebarProps, SidebarItem, SidebarLink } from './Sidebar';
7
+ export { FloatingDock } from './FloatingDock';
8
+ export type { FloatingDockProps, FloatingDockItem, FloatingDockLink } from './FloatingDock';
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ type ImageSource = string | {
4
+ url?: string;
5
+ asset?: {
6
+ url?: string;
7
+ };
8
+ file?: {
9
+ url?: string;
10
+ };
11
+ } | null | undefined;
12
+ export interface ProductColorOption {
13
+ label?: string;
14
+ hex?: string;
15
+ }
16
+ export interface AdditionalDetail {
17
+ title?: string;
18
+ list?: string[];
19
+ _metadata?: {
20
+ uid?: string;
21
+ };
22
+ }
23
+ export interface ProductCtaButton {
24
+ title?: string;
25
+ url?: string;
26
+ background_color?: StackableColorValue;
27
+ text_color?: StackableColorValue;
28
+ open_in_new_tab?: boolean;
29
+ }
30
+ export interface ProductDetailsProps {
31
+ product_name?: string;
32
+ price?: number | string;
33
+ description?: string;
34
+ rating?: number;
35
+ review_count?: number;
36
+ color?: ProductColorOption | ProductColorOption[];
37
+ product_images?: ImageSource | ImageSource[];
38
+ product_image?: ImageSource;
39
+ additional_details?: AdditionalDetail[];
40
+ cta?: ProductCtaButton;
41
+ }
42
+ export declare function ProductDetails({ product_name: productName, price, description, rating, review_count: reviewCount, color, product_images: productImages, product_image: productImage, additional_details: additionalDetails, cta, }: ProductDetailsProps): React.JSX.Element;
43
+ export default ProductDetails;
@@ -0,0 +1 @@
1
+ export { ProductDetails } from './ProductDetails';
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export interface ProductGridItem {
3
+ id?: string | number;
4
+ uid?: string;
5
+ [key: string]: unknown;
6
+ }
7
+ export interface ProductGridProps {
8
+ products?: ProductGridItem[];
9
+ image_size?: string;
10
+ list_type?: 'Grid' | 'Carousel' | string;
11
+ columns?: number;
12
+ className?: string;
13
+ }
14
+ export declare function ProductListing({ products, image_size, list_type, columns, className, }: ProductGridProps): React.JSX.Element;
15
+ export default ProductListing;
@@ -0,0 +1 @@
1
+ export { ProductListing } from './ProductListing';
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import type { StackableColorValue } from '../../types';
3
+ export interface PricingFeature {
4
+ text?: string;
5
+ }
6
+ export interface PricingLogo {
7
+ image?: string;
8
+ alt?: string;
9
+ }
10
+ export interface PricingTier {
11
+ name?: string;
12
+ description?: string;
13
+ price_monthly?: string;
14
+ price_annually?: string;
15
+ price_suffix?: string;
16
+ price_annual_note?: string;
17
+ currency?: string;
18
+ custom_price_text?: string;
19
+ feature_section_label?: string;
20
+ features?: PricingFeature[];
21
+ cta_label?: string;
22
+ cta_url?: string;
23
+ is_featured?: boolean;
24
+ featured_label?: string;
25
+ display_as_row?: boolean;
26
+ }
27
+ export interface PricingProps {
28
+ eyebrow?: string;
29
+ heading?: string;
30
+ description?: string;
31
+ theme?: 'light' | 'dark' | string;
32
+ background_color?: StackableColorValue;
33
+ text_color?: StackableColorValue;
34
+ button_color?: StackableColorValue;
35
+ button_text_color?: StackableColorValue;
36
+ heading_alignment?: 'left' | 'center' | string;
37
+ emphasized_tier?: number;
38
+ emphasis_style?: 'dark-card' | 'outline' | 'none' | string;
39
+ feature_icon?: 'check' | 'plus' | 'circle-check' | string;
40
+ cta_position?: 'above_features' | 'below_features' | string;
41
+ show_billing_toggle?: boolean;
42
+ show_logo_bar?: boolean;
43
+ logos?: PricingLogo[];
44
+ tiers?: PricingTier[];
45
+ className?: string;
46
+ }
47
+ export declare function Pricing({ eyebrow, heading, description, theme, background_color, text_color, button_color, button_text_color, heading_alignment, emphasized_tier, emphasis_style, feature_icon, cta_position, show_billing_toggle, show_logo_bar, logos, tiers, className, }: PricingProps): React.JSX.Element;
48
+ export default Pricing;