@shohojdhara/atomix 0.2.1 → 0.2.2

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 (132) hide show
  1. package/README.md +1 -28
  2. package/dist/atomix.css +1810 -314
  3. package/dist/atomix.min.css +5 -5
  4. package/dist/index.d.ts +359 -3
  5. package/dist/index.esm.js +831 -124
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +834 -123
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.min.js +1 -1
  10. package/dist/index.min.js.map +1 -1
  11. package/dist/themes/boomdevs.css +1808 -372
  12. package/dist/themes/boomdevs.min.css +60 -8
  13. package/dist/themes/esrar.css +1810 -314
  14. package/dist/themes/esrar.min.css +6 -6
  15. package/dist/themes/mashroom.css +1807 -308
  16. package/dist/themes/mashroom.min.css +8 -8
  17. package/dist/themes/shaj-default.css +1772 -273
  18. package/dist/themes/shaj-default.min.css +6 -6
  19. package/dist/themes/yabai.css +1804 -308
  20. package/dist/themes/yabai.min.css +8 -8
  21. package/package.json +1 -1
  22. package/src/components/Footer/Footer.stories.tsx +388 -0
  23. package/src/components/Footer/Footer.tsx +197 -0
  24. package/src/components/Footer/FooterLink.tsx +72 -0
  25. package/src/components/Footer/FooterSection.tsx +87 -0
  26. package/src/components/Footer/FooterSocialLink.tsx +117 -0
  27. package/src/components/Footer/README.md +261 -0
  28. package/src/components/Footer/index.ts +13 -0
  29. package/src/components/SectionIntro/SectionIntro.tsx +9 -11
  30. package/src/components/Slider/Slider.stories.tsx +634 -50
  31. package/src/components/Slider/Slider.tsx +5 -3
  32. package/src/components/index.ts +13 -0
  33. package/src/layouts/Grid/Grid.stories.tsx +226 -159
  34. package/src/lib/composables/useFooter.ts +85 -0
  35. package/src/lib/composables/useSlider.ts +191 -4
  36. package/src/lib/constants/components.ts +85 -0
  37. package/src/lib/types/components.ts +270 -0
  38. package/src/styles/01-settings/_index.scss +1 -0
  39. package/src/styles/01-settings/_settings.accordion.scss +20 -19
  40. package/src/styles/01-settings/_settings.animations.scss +5 -5
  41. package/src/styles/01-settings/_settings.avatar-group.scss +1 -1
  42. package/src/styles/01-settings/_settings.avatar.scss +17 -18
  43. package/src/styles/01-settings/_settings.background.scss +9 -0
  44. package/src/styles/01-settings/_settings.badge.scss +1 -1
  45. package/src/styles/01-settings/_settings.breadcrumb.scss +8 -2
  46. package/src/styles/01-settings/_settings.card.scss +2 -2
  47. package/src/styles/01-settings/_settings.chart.scss +7 -7
  48. package/src/styles/01-settings/_settings.checkbox-group.scss +5 -2
  49. package/src/styles/01-settings/_settings.checkbox.scss +10 -4
  50. package/src/styles/01-settings/_settings.countdown.scss +6 -4
  51. package/src/styles/01-settings/_settings.dropdown.scss +9 -7
  52. package/src/styles/01-settings/_settings.edge-panel.scss +3 -2
  53. package/src/styles/01-settings/_settings.footer.scss +125 -0
  54. package/src/styles/01-settings/_settings.form-group.scss +3 -1
  55. package/src/styles/01-settings/_settings.form.scss +4 -2
  56. package/src/styles/01-settings/_settings.hero.scss +9 -7
  57. package/src/styles/01-settings/_settings.input.scss +9 -7
  58. package/src/styles/01-settings/_settings.list-group.scss +4 -2
  59. package/src/styles/01-settings/_settings.list.scss +4 -2
  60. package/src/styles/01-settings/_settings.menu.scss +10 -8
  61. package/src/styles/01-settings/_settings.messages.scss +19 -17
  62. package/src/styles/01-settings/_settings.modal.scss +6 -4
  63. package/src/styles/01-settings/_settings.nav.scss +6 -4
  64. package/src/styles/01-settings/_settings.navbar.scss +8 -5
  65. package/src/styles/01-settings/_settings.pagination.scss +5 -3
  66. package/src/styles/01-settings/_settings.popover.scss +6 -4
  67. package/src/styles/01-settings/_settings.rating.scss +5 -3
  68. package/src/styles/01-settings/_settings.river.scss +8 -6
  69. package/src/styles/01-settings/_settings.sectionintro.scss +8 -6
  70. package/src/styles/01-settings/_settings.select.scss +7 -5
  71. package/src/styles/01-settings/_settings.side-menu.scss +15 -13
  72. package/src/styles/01-settings/_settings.spacing.scss +4 -0
  73. package/src/styles/01-settings/_settings.steps.scss +7 -5
  74. package/src/styles/01-settings/_settings.tabs.scss +7 -5
  75. package/src/styles/01-settings/_settings.testimonials.scss +6 -4
  76. package/src/styles/01-settings/_settings.toggle.scss +3 -1
  77. package/src/styles/01-settings/_settings.tooltip.scss +5 -3
  78. package/src/styles/01-settings/_settings.upload.scss +22 -20
  79. package/src/styles/02-tools/_tools.background.scss +85 -0
  80. package/src/styles/02-tools/_tools.rem.scss +18 -5
  81. package/src/styles/02-tools/_tools.utility-api.scss +32 -26
  82. package/src/styles/03-generic/_generic.root.scss +14 -2
  83. package/src/styles/04-elements/_elements.body.scss +24 -0
  84. package/src/styles/06-components/_components.accordion.scss +8 -4
  85. package/src/styles/06-components/_components.avatar-group.scss +2 -1
  86. package/src/styles/06-components/_components.avatar.scss +2 -1
  87. package/src/styles/06-components/_components.badge.scss +2 -1
  88. package/src/styles/06-components/_components.breadcrumb.scss +2 -1
  89. package/src/styles/06-components/_components.button.scss +4 -3
  90. package/src/styles/06-components/_components.callout.scss +3 -2
  91. package/src/styles/06-components/_components.card.scss +4 -2
  92. package/src/styles/06-components/_components.chart.scss +2 -1
  93. package/src/styles/06-components/_components.checkbox.scss +2 -1
  94. package/src/styles/06-components/_components.color-mode-toggle.scss +3 -2
  95. package/src/styles/06-components/_components.countdown.scss +2 -1
  96. package/src/styles/06-components/_components.data-table.scss +7 -6
  97. package/src/styles/06-components/_components.datepicker.scss +2 -1
  98. package/src/styles/06-components/_components.dropdown.scss +4 -3
  99. package/src/styles/06-components/_components.edge-panel.scss +4 -3
  100. package/src/styles/06-components/_components.footer.scss +825 -0
  101. package/src/styles/06-components/_components.form-group.scss +1 -0
  102. package/src/styles/06-components/_components.hero.scss +3 -2
  103. package/src/styles/06-components/_components.image-gallery.scss +1 -0
  104. package/src/styles/06-components/_components.input.scss +2 -1
  105. package/src/styles/06-components/_components.list-group.scss +3 -2
  106. package/src/styles/06-components/_components.list.scss +2 -1
  107. package/src/styles/06-components/_components.menu.scss +5 -4
  108. package/src/styles/06-components/_components.messages.scss +8 -7
  109. package/src/styles/06-components/_components.modal.scss +3 -2
  110. package/src/styles/06-components/_components.nav.scss +6 -5
  111. package/src/styles/06-components/_components.navbar.scss +4 -3
  112. package/src/styles/06-components/_components.pagination.scss +2 -1
  113. package/src/styles/06-components/_components.photoviewer.scss +4 -3
  114. package/src/styles/06-components/_components.popover.scss +3 -2
  115. package/src/styles/06-components/_components.product-review.scss +3 -2
  116. package/src/styles/06-components/_components.progress.scss +3 -2
  117. package/src/styles/06-components/_components.river.scss +3 -2
  118. package/src/styles/06-components/_components.sectionintro.scss +2 -1
  119. package/src/styles/06-components/_components.select.scss +5 -4
  120. package/src/styles/06-components/_components.side-menu.scss +8 -7
  121. package/src/styles/06-components/_components.skeleton.scss +3 -2
  122. package/src/styles/06-components/_components.slider.scss +7 -6
  123. package/src/styles/06-components/_components.spinner.scss +1 -0
  124. package/src/styles/06-components/_components.steps.scss +3 -2
  125. package/src/styles/06-components/_components.tabs.scss +4 -3
  126. package/src/styles/06-components/_components.testimonials.scss +2 -1
  127. package/src/styles/06-components/_components.todo.scss +3 -2
  128. package/src/styles/06-components/_components.toggle.scss +5 -4
  129. package/src/styles/06-components/_components.tooltip.scss +3 -2
  130. package/src/styles/06-components/_components.upload.scss +4 -3
  131. package/src/styles/06-components/_components.video-player.scss +4 -3
  132. package/src/styles/06-components/_index.scss +1 -0
@@ -0,0 +1,87 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { FooterSectionProps } from '../../lib/types/components';
3
+
4
+ /**
5
+ * FooterSection component provides a section within the footer for organizing links and content.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <FooterSection title="Products" icon={<ProductIcon />}>
10
+ * <FooterLink href="/product1">Product 1</FooterLink>
11
+ * <FooterLink href="/product2">Product 2</FooterLink>
12
+ * </FooterSection>
13
+ * ```
14
+ */
15
+ export const FooterSection = forwardRef<HTMLDivElement, FooterSectionProps>(
16
+ (
17
+ {
18
+ title,
19
+ icon,
20
+ collapsible = false,
21
+ defaultCollapsed = false,
22
+ children,
23
+ className = '',
24
+ ...props
25
+ },
26
+ ref
27
+ ) => {
28
+ const [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed);
29
+
30
+ const handleToggle = () => {
31
+ if (collapsible) {
32
+ setIsCollapsed(!isCollapsed);
33
+ }
34
+ };
35
+
36
+ const sectionClass = [
37
+ 'c-footer__section',
38
+ collapsible && 'c-footer__section--collapsible',
39
+ isCollapsed && 'c-footer__section--collapsed',
40
+ className,
41
+ ]
42
+ .filter(Boolean)
43
+ .join(' ');
44
+
45
+ return (
46
+ <div ref={ref} className={sectionClass} {...props}>
47
+ {title && (
48
+ <div className="c-footer__section-header">
49
+ {collapsible ? (
50
+ <button
51
+ type="button"
52
+ className="c-footer__section-toggle"
53
+ onClick={handleToggle}
54
+ aria-expanded={!isCollapsed}
55
+ aria-controls={`footer-section-${title.toString().toLowerCase().replace(/\s+/g, '-')}`}
56
+ >
57
+ {icon && <span className="c-footer__section-icon">{icon}</span>}
58
+ <h4 className="c-footer__section-title">{title}</h4>
59
+ <span className="c-footer__section-chevron">
60
+ {isCollapsed ? '▼' : '▲'}
61
+ </span>
62
+ </button>
63
+ ) : (
64
+ <div className="c-footer__section-header-content">
65
+ {icon && <span className="c-footer__section-icon">{icon}</span>}
66
+ <h4 className="c-footer__section-title">{title}</h4>
67
+ </div>
68
+ )}
69
+ </div>
70
+ )}
71
+ <div
72
+ className="c-footer__section-content"
73
+ id={title ? `footer-section-${title.toString().toLowerCase().replace(/\s+/g, '-')}` : undefined}
74
+ style={{
75
+ display: collapsible && isCollapsed ? 'none' : 'block',
76
+ }}
77
+ >
78
+ {children}
79
+ </div>
80
+ </div>
81
+ );
82
+ }
83
+ );
84
+
85
+ FooterSection.displayName = 'FooterSection';
86
+
87
+ export default FooterSection;
@@ -0,0 +1,117 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { FooterSocialLinkProps } from '../../lib/types/components';
3
+
4
+ /**
5
+ * FooterSocialLink component provides styled social media links with platform-specific icons.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <FooterSocialLink platform="twitter" url="https://twitter.com/company" />
10
+ * <FooterSocialLink platform="custom" url="https://example.com" icon={<CustomIcon />} label="Custom Platform" />
11
+ * ```
12
+ */
13
+ export const FooterSocialLink = forwardRef<HTMLAnchorElement, FooterSocialLinkProps>(
14
+ (
15
+ {
16
+ platform,
17
+ url,
18
+ icon,
19
+ label,
20
+ size = 'md',
21
+ variant = 'default',
22
+ disabled = false,
23
+ className = '',
24
+ ...props
25
+ },
26
+ ref
27
+ ) => {
28
+ const getPlatformIcon = (platform: string) => {
29
+ const icons: Record<string, string> = {
30
+ facebook: '📘',
31
+ twitter: '🐦',
32
+ instagram: '📷',
33
+ linkedin: '💼',
34
+ youtube: '📺',
35
+ github: '🐙',
36
+ discord: '🎮',
37
+ tiktok: '🎵',
38
+ pinterest: '📌',
39
+ snapchat: '👻',
40
+ whatsapp: '💬',
41
+ telegram: '✈️',
42
+ reddit: '🤖',
43
+ twitch: '🎮',
44
+ spotify: '🎵',
45
+ dribbble: '🏀',
46
+ behance: '🎨',
47
+ medium: '📝',
48
+ dev: '👨‍💻',
49
+ codepen: '✏️',
50
+ };
51
+ return icons[platform] || '🔗';
52
+ };
53
+
54
+ const getPlatformLabel = (platform: string) => {
55
+ const labels: Record<string, string> = {
56
+ facebook: 'Facebook',
57
+ twitter: 'Twitter',
58
+ instagram: 'Instagram',
59
+ linkedin: 'LinkedIn',
60
+ youtube: 'YouTube',
61
+ github: 'GitHub',
62
+ discord: 'Discord',
63
+ tiktok: 'TikTok',
64
+ pinterest: 'Pinterest',
65
+ snapchat: 'Snapchat',
66
+ whatsapp: 'WhatsApp',
67
+ telegram: 'Telegram',
68
+ reddit: 'Reddit',
69
+ twitch: 'Twitch',
70
+ spotify: 'Spotify',
71
+ dribbble: 'Dribbble',
72
+ behance: 'Behance',
73
+ medium: 'Medium',
74
+ dev: 'Dev.to',
75
+ codepen: 'CodePen',
76
+ };
77
+ return labels[platform] || platform;
78
+ };
79
+
80
+ const linkClass = [
81
+ 'c-footer__social-link',
82
+ `c-footer__social-link--${platform}`,
83
+ `c-footer__social-link--${size}`,
84
+ `c-footer__social-link--${variant}`,
85
+ disabled && 'c-footer__social-link--disabled',
86
+ className,
87
+ ]
88
+ .filter(Boolean)
89
+ .join(' ');
90
+
91
+ const ariaLabel = label || `Follow us on ${getPlatformLabel(platform)}`;
92
+
93
+ return (
94
+ <a
95
+ ref={ref}
96
+ href={disabled ? undefined : url}
97
+ className={linkClass}
98
+ target="_blank"
99
+ rel="noopener noreferrer"
100
+ aria-label={ariaLabel}
101
+ aria-disabled={disabled}
102
+ {...props}
103
+ >
104
+ <span className="c-footer__social-link-icon">
105
+ {icon || getPlatformIcon(platform)}
106
+ </span>
107
+ <span className="c-footer__social-link-label u-visually-hidden">
108
+ {ariaLabel}
109
+ </span>
110
+ </a>
111
+ );
112
+ }
113
+ );
114
+
115
+ FooterSocialLink.displayName = 'FooterSocialLink';
116
+
117
+ export default FooterSocialLink;
@@ -0,0 +1,261 @@
1
+ # Footer Component
2
+
3
+ A comprehensive footer component with multiple layout options, social links, newsletter signup, and responsive design.
4
+
5
+ ## Features
6
+
7
+ - **Multiple Layouts**: Columns, centered, minimal, and stacked layouts
8
+ - **Social Media Integration**: Built-in support for 20+ social platforms
9
+ - **Newsletter Signup**: Optional newsletter subscription form
10
+ - **Responsive Design**: Mobile-first with collapsible sections
11
+ - **Back to Top**: Optional smooth scroll to top functionality
12
+ - **Accessibility**: WCAG 2.1 AA compliant with proper ARIA attributes
13
+ - **Theme Support**: Multiple color variants and dark mode
14
+ - **Sticky Footer**: Optional sticky positioning
15
+
16
+ ## Usage
17
+
18
+ ### Basic Footer
19
+
20
+ ```tsx
21
+ import { Footer, FooterSection, FooterLink } from '@shohojdhara/atomix';
22
+
23
+ <Footer
24
+ brand="My Company"
25
+ copyright="© 2024 My Company. All rights reserved."
26
+ socialLinks={[
27
+ { platform: 'twitter', url: 'https://twitter.com/company' },
28
+ { platform: 'facebook', url: 'https://facebook.com/company' }
29
+ ]}
30
+ >
31
+ <FooterSection title="Products">
32
+ <FooterLink href="/product1">Product 1</FooterLink>
33
+ <FooterLink href="/product2">Product 2</FooterLink>
34
+ </FooterSection>
35
+
36
+ <FooterSection title="Company">
37
+ <FooterLink href="/about">About Us</FooterLink>
38
+ <FooterLink href="/contact">Contact</FooterLink>
39
+ </FooterSection>
40
+ </Footer>
41
+ ```
42
+
43
+ ### With Newsletter
44
+
45
+ ```tsx
46
+ <Footer
47
+ brand="My Company"
48
+ copyright="© 2024 My Company. All rights reserved."
49
+ showNewsletter
50
+ newsletterTitle="Stay Updated"
51
+ newsletterDescription="Get the latest updates delivered to your inbox."
52
+ onNewsletterSubmit={(email) => console.log('Newsletter signup:', email)}
53
+ >
54
+ {/* Footer sections */}
55
+ </Footer>
56
+ ```
57
+
58
+ ### Collapsible Sections (Mobile)
59
+
60
+ ```tsx
61
+ <FooterSection title="Products" collapsible defaultCollapsed>
62
+ <FooterLink href="/product1">Product 1</FooterLink>
63
+ <FooterLink href="/product2">Product 2</FooterLink>
64
+ </FooterSection>
65
+ ```
66
+
67
+ ## Props
68
+
69
+ ### Footer Props
70
+
71
+ | Prop | Type | Default | Description |
72
+ |------|------|---------|-------------|
73
+ | `brand` | `ReactNode` | - | Brand name or logo |
74
+ | `brandLogo` | `string \| ReactNode` | - | Brand logo (image URL or React element) |
75
+ | `brandDescription` | `ReactNode` | - | Brand description text |
76
+ | `copyright` | `ReactNode` | - | Copyright text |
77
+ | `layout` | `'columns' \| 'centered' \| 'minimal' \| 'stacked'` | `'columns'` | Footer layout variant |
78
+ | `variant` | `ThemeColor` | `'primary'` | Color variant |
79
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Size variant |
80
+ | `showNewsletter` | `boolean` | `false` | Whether to show newsletter signup |
81
+ | `newsletterTitle` | `string` | `'Stay Updated'` | Newsletter section title |
82
+ | `newsletterDescription` | `string` | - | Newsletter section description |
83
+ | `newsletterPlaceholder` | `string` | `'Enter your email'` | Newsletter input placeholder |
84
+ | `newsletterButtonText` | `string` | `'Subscribe'` | Newsletter submit button text |
85
+ | `onNewsletterSubmit` | `(email: string) => void` | - | Newsletter submit handler |
86
+ | `socialLinks` | `SocialLink[]` | `[]` | Social media links |
87
+ | `showBackToTop` | `boolean` | `false` | Whether to show back to top button |
88
+ | `backToTopText` | `string` | `'Back to Top'` | Back to top button text |
89
+ | `onBackToTop` | `() => void` | - | Back to top click handler |
90
+ | `showDivider` | `boolean` | `true` | Whether to show divider above bottom section |
91
+ | `sticky` | `boolean` | `false` | Whether footer should be sticky |
92
+
93
+ ### FooterSection Props
94
+
95
+ | Prop | Type | Default | Description |
96
+ |------|------|---------|-------------|
97
+ | `title` | `ReactNode` | - | Section title |
98
+ | `icon` | `ReactNode` | - | Section icon |
99
+ | `collapsible` | `boolean` | `false` | Whether section is collapsible on mobile |
100
+ | `defaultCollapsed` | `boolean` | `false` | Whether section is collapsed by default |
101
+ | `children` | `ReactNode` | - | Section content |
102
+
103
+ ### FooterLink Props
104
+
105
+ | Prop | Type | Default | Description |
106
+ |------|------|---------|-------------|
107
+ | `href` | `string` | - | Link URL |
108
+ | `icon` | `ReactNode` | - | Link icon |
109
+ | `external` | `boolean` | `false` | Whether link opens in new tab |
110
+ | `active` | `boolean` | `false` | Whether link is active |
111
+ | `disabled` | `boolean` | `false` | Whether link is disabled |
112
+ | `onClick` | `(event: MouseEvent) => void` | - | Link click handler |
113
+ | `LinkComponent` | `React.ElementType` | - | Custom link component (e.g., React Router Link) |
114
+
115
+ ### Social Link Configuration
116
+
117
+ ```tsx
118
+ interface SocialLink {
119
+ platform: SocialPlatform;
120
+ url: string;
121
+ icon?: ReactNode; // Custom icon override
122
+ label?: string; // Custom accessibility label
123
+ }
124
+ ```
125
+
126
+ ### Supported Social Platforms
127
+
128
+ - `facebook`, `twitter`, `instagram`, `linkedin`
129
+ - `youtube`, `github`, `discord`, `tiktok`
130
+ - `pinterest`, `snapchat`, `whatsapp`, `telegram`
131
+ - `reddit`, `twitch`, `spotify`, `dribbble`
132
+ - `behance`, `medium`, `dev`, `codepen`
133
+ - `custom` (for custom platforms with custom icons)
134
+
135
+ ## Layout Variants
136
+
137
+ ### Columns (Default)
138
+ ```tsx
139
+ <Footer layout="columns">
140
+ {/* Sections arranged in responsive columns */}
141
+ </Footer>
142
+ ```
143
+
144
+ ### Centered
145
+ ```tsx
146
+ <Footer layout="centered">
147
+ {/* All content centered */}
148
+ </Footer>
149
+ ```
150
+
151
+ ### Minimal
152
+ ```tsx
153
+ <Footer layout="minimal" size="sm">
154
+ {/* Compact footer with minimal spacing */}
155
+ </Footer>
156
+ ```
157
+
158
+ ### Stacked
159
+ ```tsx
160
+ <Footer layout="stacked">
161
+ {/* Sections stacked vertically */}
162
+ </Footer>
163
+ ```
164
+
165
+ ## Styling
166
+
167
+ The Footer component uses CSS custom properties for theming:
168
+
169
+ ```css
170
+ .c-footer {
171
+ --atomix-footer-bg: var(--atomix-surface);
172
+ --atomix-footer-color: var(--atomix-text);
173
+ --atomix-footer-padding-y: 3rem;
174
+ --atomix-footer-container-max-width: 1200px;
175
+ }
176
+ ```
177
+
178
+ ### Custom Styling
179
+
180
+ ```scss
181
+ .c-footer {
182
+ &--custom {
183
+ --atomix-footer-bg: #1a1a1a;
184
+ --atomix-footer-color: #ffffff;
185
+
186
+ .c-footer__brand-name h3 {
187
+ color: #00ff88;
188
+ }
189
+ }
190
+ }
191
+ ```
192
+
193
+ ## Accessibility
194
+
195
+ - Semantic HTML structure with proper `<footer>` element
196
+ - ARIA attributes for collapsible sections
197
+ - Keyboard navigation support
198
+ - Screen reader friendly
199
+ - Focus management
200
+ - High contrast support
201
+
202
+ ## Responsive Behavior
203
+
204
+ - **Mobile**: Sections stack vertically, optional collapsible sections
205
+ - **Tablet**: Responsive grid layout
206
+ - **Desktop**: Multi-column layout with proper spacing
207
+
208
+ ## Examples
209
+
210
+ ### Complete Footer with All Features
211
+
212
+ ```tsx
213
+ <Footer
214
+ brand="Atomix"
215
+ brandLogo="/logo.png"
216
+ brandDescription="A modern design system for building beautiful interfaces."
217
+ copyright="© 2024 Atomix. All rights reserved."
218
+ layout="columns"
219
+ variant="primary"
220
+ size="md"
221
+ showNewsletter
222
+ newsletterTitle="Stay in the Loop"
223
+ newsletterDescription="Get updates on new components and features."
224
+ onNewsletterSubmit={handleNewsletterSubmit}
225
+ socialLinks={[
226
+ { platform: 'github', url: 'https://github.com/company' },
227
+ { platform: 'twitter', url: 'https://twitter.com/company' },
228
+ { platform: 'discord', url: 'https://discord.gg/company' }
229
+ ]}
230
+ showBackToTop
231
+ showDivider
232
+ >
233
+ <FooterSection title="Products" icon="🚀">
234
+ <FooterLink href="/components">Components</FooterLink>
235
+ <FooterLink href="/templates">Templates</FooterLink>
236
+ <FooterLink href="/themes">Themes</FooterLink>
237
+ </FooterSection>
238
+
239
+ <FooterSection title="Resources" collapsible>
240
+ <FooterLink href="/docs">Documentation</FooterLink>
241
+ <FooterLink href="/guides">Guides</FooterLink>
242
+ <FooterLink href="/examples">Examples</FooterLink>
243
+ <FooterLink href="/blog" external>Blog</FooterLink>
244
+ </FooterSection>
245
+
246
+ <FooterSection title="Support">
247
+ <FooterLink href="/help">Help Center</FooterLink>
248
+ <FooterLink href="/community">Community</FooterLink>
249
+ <FooterLink href="/contact">Contact Us</FooterLink>
250
+ </FooterSection>
251
+ </Footer>
252
+ ```
253
+
254
+ ## Best Practices
255
+
256
+ 1. **Keep it organized**: Group related links in logical sections
257
+ 2. **Limit sections**: 3-5 sections work best for readability
258
+ 3. **Use meaningful labels**: Clear, descriptive link text
259
+ 4. **Consider mobile**: Test collapsible sections on mobile devices
260
+ 5. **Accessibility first**: Always provide proper ARIA labels
261
+ 6. **Performance**: Optimize social media icons and brand logos
@@ -0,0 +1,13 @@
1
+ export { Footer, default } from './Footer';
2
+ export { FooterSection } from './FooterSection';
3
+ export { FooterLink } from './FooterLink';
4
+ export { FooterSocialLink } from './FooterSocialLink';
5
+ export type {
6
+ FooterProps,
7
+ FooterSectionProps,
8
+ FooterLinkProps,
9
+ FooterSocialLinkProps,
10
+ FooterLayout,
11
+ SocialPlatform,
12
+ SocialLink,
13
+ } from '../../lib/types/components';
@@ -164,17 +164,15 @@ export const SectionIntro: React.FC<SectionIntroProps> = ({
164
164
  return (
165
165
  <div className={sectionIntroClasses} ref={sectionIntroRef}>
166
166
  {renderBackground()}
167
- <div className="c-sectionintro__container o-container">
168
- {label && <div className="c-sectionintro__label">{label}</div>}
169
- <h2 className="c-sectionintro__title">{title}</h2>
170
- {text && <div className="c-sectionintro__text">{text}</div>}
171
- {actions && <div className="c-sectionintro__actions">{actions}</div>}
172
- {imageSrc && (
173
- <div className="c-sectionintro__image-wrapper">
174
- <img src={imageSrc} alt={imageAlt} className="c-sectionintro__image" />
175
- </div>
176
- )}
177
- </div>
167
+ {label && <div className="c-sectionintro__label">{label}</div>}
168
+ <h2 className="c-sectionintro__title">{title}</h2>
169
+ {text && <div className="c-sectionintro__text">{text}</div>}
170
+ {actions && <div className="c-sectionintro__actions">{actions}</div>}
171
+ {imageSrc && (
172
+ <div className="c-sectionintro__image-wrapper">
173
+ <img src={imageSrc} alt={imageAlt} className="c-sectionintro__image" />
174
+ </div>
175
+ )}
178
176
  </div>
179
177
  );
180
178
  };