@shohojdhara/atomix 0.3.5 → 0.3.6

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 (173) hide show
  1. package/README.md +101 -199
  2. package/atomix.config.ts +241 -0
  3. package/dist/atomix.css +260 -179
  4. package/dist/atomix.css.map +1 -1
  5. package/dist/atomix.min.css +250 -179
  6. package/dist/atomix.min.css.map +1 -1
  7. package/dist/charts.js +61 -66
  8. package/dist/charts.js.map +1 -1
  9. package/dist/core.js +47 -31
  10. package/dist/core.js.map +1 -1
  11. package/dist/forms.js +47 -31
  12. package/dist/forms.js.map +1 -1
  13. package/dist/heavy.js +47 -31
  14. package/dist/heavy.js.map +1 -1
  15. package/dist/index.d.ts +1841 -1633
  16. package/dist/index.esm.js +4975 -4113
  17. package/dist/index.esm.js.map +1 -1
  18. package/dist/index.js +5151 -4290
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.min.js +1 -1
  21. package/dist/index.min.js.map +1 -1
  22. package/dist/theme.d.ts +1572 -1442
  23. package/dist/theme.js +4816 -4080
  24. package/dist/theme.js.map +1 -1
  25. package/package.json +6 -20
  26. package/src/components/Accordion/Accordion.stories.tsx +50 -17
  27. package/src/components/AtomixGlass/AtomixGlass.tsx +65 -31
  28. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +11 -4
  29. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1 -32
  30. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2 -2
  31. package/src/components/AtomixGlass/stories/shared-components.tsx +0 -31
  32. package/src/components/Avatar/Avatar.stories.tsx +7 -0
  33. package/src/components/Badge/Badge.stories.tsx +91 -13
  34. package/src/components/Block/Block.stories.tsx +7 -23
  35. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +7 -0
  36. package/src/components/Button/Button.stories.tsx +141 -22
  37. package/src/components/Button/ButtonGroup.stories.tsx +315 -0
  38. package/src/components/Button/ButtonGroup.tsx +67 -0
  39. package/src/components/Button/index.ts +2 -0
  40. package/src/components/Callout/Callout.stories.tsx +8 -6
  41. package/src/components/Card/Card.stories.tsx +82 -28
  42. package/src/components/Chart/AnimatedChart.tsx +0 -1
  43. package/src/components/Chart/AreaChart.tsx +0 -1
  44. package/src/components/Chart/BarChart.tsx +0 -1
  45. package/src/components/Chart/BubbleChart.tsx +0 -1
  46. package/src/components/Chart/CandlestickChart.tsx +0 -1
  47. package/src/components/Chart/Chart.stories.tsx +5 -7
  48. package/src/components/Chart/Chart.tsx +0 -16
  49. package/src/components/Chart/ChartRenderer.tsx +1 -1
  50. package/src/components/Chart/DonutChart.tsx +0 -1
  51. package/src/components/Chart/FunnelChart.tsx +0 -1
  52. package/src/components/Chart/GaugeChart.tsx +0 -1
  53. package/src/components/Chart/HeatmapChart.tsx +0 -1
  54. package/src/components/Chart/LineChart.tsx +0 -1
  55. package/src/components/Chart/MultiAxisChart.tsx +0 -1
  56. package/src/components/Chart/PieChart.tsx +0 -1
  57. package/src/components/Chart/RadarChart.tsx +0 -1
  58. package/src/components/Chart/ScatterChart.tsx +0 -1
  59. package/src/components/Chart/WaterfallChart.tsx +0 -1
  60. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +7 -0
  61. package/src/components/DataTable/DataTable.stories.tsx +23 -16
  62. package/src/components/DatePicker/DatePicker.stories.tsx +27 -19
  63. package/src/components/Dropdown/Dropdown.stories.tsx +11 -19
  64. package/src/components/EdgePanel/EdgePanel.stories.tsx +1 -0
  65. package/src/components/Footer/Footer.stories.tsx +8 -6
  66. package/src/components/Footer/FooterLink.tsx +9 -2
  67. package/src/components/Form/Checkbox.stories.tsx +7 -0
  68. package/src/components/Form/Form.stories.tsx +7 -0
  69. package/src/components/Form/FormGroup.stories.tsx +9 -1
  70. package/src/components/Form/Input.stories.tsx +69 -16
  71. package/src/components/Form/Radio.stories.tsx +9 -1
  72. package/src/components/Form/Select.stories.tsx +9 -1
  73. package/src/components/Form/Textarea.stories.tsx +10 -2
  74. package/src/components/Hero/Hero.stories.tsx +7 -0
  75. package/src/components/List/List.stories.tsx +7 -0
  76. package/src/components/Messages/Messages.stories.tsx +8 -7
  77. package/src/components/Modal/Modal.stories.tsx +17 -6
  78. package/src/components/Navigation/Menu/Menu.stories.tsx +7 -0
  79. package/src/components/Navigation/Nav/Nav.stories.tsx +7 -0
  80. package/src/components/Navigation/Navbar/Navbar.stories.tsx +1 -0
  81. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +1 -1
  82. package/src/components/Pagination/Pagination.stories.tsx +188 -111
  83. package/src/components/Pagination/Pagination.tsx +83 -3
  84. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -5
  85. package/src/components/Popover/Popover.stories.tsx +191 -115
  86. package/src/components/ProductReview/ProductReview.stories.tsx +80 -58
  87. package/src/components/Progress/Progress.stories.tsx +79 -49
  88. package/src/components/Rating/Rating.stories.tsx +109 -84
  89. package/src/components/River/River.stories.tsx +194 -114
  90. package/src/components/SectionIntro/SectionIntro.stories.tsx +19 -9
  91. package/src/components/Slider/Slider.stories.tsx +7 -0
  92. package/src/components/Spinner/Spinner.stories.tsx +15 -11
  93. package/src/components/Steps/Steps.stories.tsx +132 -98
  94. package/src/components/Tabs/Tabs.stories.tsx +163 -112
  95. package/src/components/Testimonial/Testimonial.stories.tsx +114 -68
  96. package/src/components/Todo/Todo.stories.tsx +38 -12
  97. package/src/components/Toggle/Toggle.stories.tsx +61 -28
  98. package/src/components/Tooltip/Tooltip.stories.tsx +318 -200
  99. package/src/components/Upload/Upload.stories.tsx +122 -84
  100. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +7 -24
  101. package/src/components/index.ts +1 -0
  102. package/src/lib/composables/useAtomixGlass.ts +2 -3
  103. package/src/lib/composables/useNavbar.ts +0 -10
  104. package/src/lib/config/loader.ts +2 -1
  105. package/src/lib/constants/components.ts +10 -0
  106. package/src/lib/hooks/useComponentCustomization.ts +1 -1
  107. package/src/lib/theme/README.md +174 -0
  108. package/src/lib/theme/adapters/index.ts +31 -0
  109. package/src/lib/theme/adapters/themeAdapter.ts +287 -0
  110. package/src/lib/theme/config/__tests__/configLoader.test.ts +207 -0
  111. package/src/lib/theme/config/configLoader.ts +254 -0
  112. package/src/lib/theme/config/loader.ts +37 -48
  113. package/src/lib/theme/config/types.ts +2 -2
  114. package/src/lib/theme/config/validator.ts +15 -91
  115. package/src/lib/theme/{constants.ts → constants/constants.ts} +0 -18
  116. package/src/lib/theme/constants/index.ts +8 -0
  117. package/src/lib/theme/core/ThemeRegistry.ts +19 -6
  118. package/src/lib/theme/core/__tests__/createTheme.test.ts +132 -0
  119. package/src/lib/theme/core/composeTheme.ts +155 -0
  120. package/src/lib/theme/core/createTheme.ts +94 -0
  121. package/src/lib/theme/{createTheme.ts → core/createThemeObject.ts} +10 -6
  122. package/src/lib/theme/core/index.ts +5 -19
  123. package/src/lib/theme/devtools/Comparator.tsx +346 -22
  124. package/src/lib/theme/devtools/IMPROVEMENTS.md +139 -38
  125. package/src/lib/theme/devtools/Inspector.tsx +335 -51
  126. package/src/lib/theme/devtools/LiveEditor.tsx +478 -107
  127. package/src/lib/theme/devtools/Preview.tsx +471 -221
  128. package/src/lib/theme/{core → devtools}/ThemeValidator.ts +1 -1
  129. package/src/lib/theme/devtools/index.ts +14 -4
  130. package/src/lib/theme/devtools/useHistory.ts +130 -0
  131. package/src/lib/theme/errors/index.ts +12 -0
  132. package/src/lib/theme/generators/cssFile.ts +79 -0
  133. package/src/lib/theme/generators/generateCSS.ts +89 -0
  134. package/src/lib/theme/{generateCSSVariables.ts → generators/generateCSSVariables.ts} +3 -13
  135. package/src/lib/theme/generators/index.ts +19 -0
  136. package/src/lib/theme/i18n/rtl.ts +5 -6
  137. package/src/lib/theme/index.ts +120 -15
  138. package/src/lib/theme/runtime/ThemeApplicator.ts +52 -111
  139. package/src/lib/theme/{ThemeContext.tsx → runtime/ThemeContext.tsx} +1 -1
  140. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +1 -1
  141. package/src/lib/theme/runtime/ThemeProvider.tsx +456 -179
  142. package/src/lib/theme/runtime/index.ts +1 -2
  143. package/src/lib/theme/runtime/useTheme.ts +1 -2
  144. package/src/lib/theme/test/testTheme.ts +385 -0
  145. package/src/lib/theme/tokens/index.ts +12 -0
  146. package/src/lib/theme/tokens/tokens.ts +721 -0
  147. package/src/lib/theme/types.ts +6 -42
  148. package/src/lib/theme/{utils.ts → utils/domUtils.ts} +2 -2
  149. package/src/lib/theme/utils/index.ts +11 -0
  150. package/src/lib/theme/utils/injectCSS.ts +90 -0
  151. package/src/lib/theme/utils/themeHelpers.ts +78 -0
  152. package/src/lib/theme/{themeUtils.ts → utils/themeUtils.ts} +1 -1
  153. package/src/lib/theme-tools.ts +7 -8
  154. package/src/lib/types/components.ts +40 -130
  155. package/src/lib/utils/componentUtils.ts +1 -1
  156. package/src/styles/01-settings/_settings.design-tokens.scss +4 -1
  157. package/src/styles/02-tools/_tools.button.scss +66 -79
  158. package/src/styles/06-components/_components.atomix-glass.scss +13 -3
  159. package/src/styles/06-components/_components.pagination.scss +88 -0
  160. package/scripts/sync-theme-config.js +0 -309
  161. package/src/lib/theme/composeTheme.ts +0 -370
  162. package/src/lib/theme/core/ThemeCache.ts +0 -283
  163. package/src/lib/theme/core/ThemeEngine.test.ts +0 -146
  164. package/src/lib/theme/core/ThemeEngine.ts +0 -665
  165. package/src/lib/theme/createThemeFromConfig.ts +0 -132
  166. package/src/lib/theme/devtools/CLI.ts +0 -364
  167. package/src/lib/theme/runtime/ThemeManager.test.ts +0 -192
  168. package/src/lib/theme/runtime/ThemeManager.ts +0 -446
  169. package/src/styles/03-generic/_generated-root.css +0 -26
  170. package/src/themes/README.md +0 -442
  171. package/src/themes/themes.config.js +0 -68
  172. /package/src/lib/theme/{cssVariableMapper.ts → adapters/cssVariableMapper.ts} +0 -0
  173. /package/src/lib/theme/{errors.ts → errors/errors.ts} +0 -0
@@ -1,118 +1,143 @@
1
1
  import React, { useState } from 'react';
2
- import { StoryFn, Meta } from '@storybook/react';
3
- import { fn } from '@storybook/test';
2
+ import type { Meta, StoryObj } from '@storybook/react';
4
3
  import { Rating } from './Rating';
5
- import type { RatingProps } from '../../lib/types/components';
4
+ import { THEME_COLORS, SIZES } from '../../lib/constants/components';
6
5
 
7
- export default {
6
+ const meta = {
8
7
  title: 'Components/Rating',
9
8
  component: Rating,
9
+ parameters: {
10
+ layout: 'centered',
11
+ docs: {
12
+ description: {
13
+ component:
14
+ 'The Rating component allows users to display and interact with star-based ratings. It supports whole and half-star ratings, customizable maximum values, and can be used in both interactive and read-only modes. Ratings are ideal for product reviews, user feedback, or any scenario requiring visual rating input.',
15
+ },
16
+ },
17
+ },
18
+ tags: ['autodocs'],
10
19
  argTypes: {
11
- value: { control: { type: 'number', min: 0, max: 5, step: 0.5 } },
12
- maxValue: { control: { type: 'number', min: 1, max: 10 } },
13
- allowHalf: { control: 'boolean' },
14
- readOnly: { control: 'boolean' },
20
+ value: {
21
+ control: { type: 'number', min: 0, max: 5, step: 0.5 },
22
+ description: 'The current rating value',
23
+ },
24
+ maxValue: {
25
+ control: { type: 'number', min: 1, max: 10 },
26
+ description: 'The maximum rating value',
27
+ },
28
+ allowHalf: {
29
+ control: 'boolean',
30
+ description: 'Whether to allow half-star ratings',
31
+ },
32
+ readOnly: {
33
+ control: 'boolean',
34
+ description: 'Whether the rating is read-only',
35
+ },
15
36
  size: {
16
- control: { type: 'select', options: ['sm', 'md', 'lg'] },
37
+ control: { type: 'select' },
38
+ options: SIZES,
39
+ description: 'The size of the rating stars',
17
40
  },
18
41
  color: {
19
- control: {
20
- type: 'select',
21
- options: ['primary', 'secondary', 'success', 'info', 'warning', 'error', 'light', 'dark'],
22
- },
42
+ control: { type: 'select' },
43
+ options: THEME_COLORS,
44
+ description: 'The color variant of the rating',
23
45
  },
24
46
  glass: {
25
47
  control: 'boolean',
26
48
  description: 'Enable glass morphism effect',
27
49
  },
28
50
  },
29
- parameters: {
30
- docs: {
31
- description: {
32
- component: 'Rating component for displaying and collecting star ratings',
33
- },
34
- },
35
- },
36
- } as Meta;
51
+ } satisfies Meta<typeof Rating>;
37
52
 
38
- const Template: StoryFn<RatingProps> = (args: RatingProps) => <Rating {...args} />;
53
+ export default meta;
54
+ type Story = StoryObj<typeof meta>;
39
55
 
40
- export const Default = Template.bind({});
41
- Default.args = {
42
- value: 3,
43
- maxValue: 5,
44
- allowHalf: false,
45
- readOnly: false,
46
- size: 'md',
56
+ // Default Rating
57
+ export const Default: Story = {
58
+ args: {
59
+ value: 3,
60
+ maxValue: 5,
61
+ allowHalf: false,
62
+ readOnly: false,
63
+ size: 'md',
64
+ },
47
65
  };
48
66
 
49
- export const ReadOnly = Template.bind({});
50
- ReadOnly.args = {
51
- value: 4,
52
- maxValue: 5,
53
- allowHalf: false,
54
- readOnly: true,
55
- size: 'md',
67
+ export const ReadOnly: Story = {
68
+ args: {
69
+ value: 4,
70
+ maxValue: 5,
71
+ allowHalf: false,
72
+ readOnly: true,
73
+ size: 'md',
74
+ },
56
75
  };
57
76
 
58
- export const HalfStars = Template.bind({});
59
- HalfStars.args = {
60
- value: 3.5,
61
- maxValue: 5,
62
- allowHalf: true,
63
- readOnly: true,
64
- size: 'md',
77
+ export const HalfStars: Story = {
78
+ args: {
79
+ value: 3.5,
80
+ maxValue: 5,
81
+ allowHalf: true,
82
+ readOnly: true,
83
+ size: 'md',
84
+ },
65
85
  };
66
86
 
67
- export const Small = Template.bind({});
68
- Small.args = {
69
- value: 4,
70
- maxValue: 5,
71
- allowHalf: false,
72
- readOnly: true,
73
- size: 'sm',
87
+ export const Small: Story = {
88
+ args: {
89
+ value: 4,
90
+ maxValue: 5,
91
+ allowHalf: false,
92
+ readOnly: true,
93
+ size: 'sm',
94
+ },
74
95
  };
75
96
 
76
- export const Large = Template.bind({});
77
- Large.args = {
78
- value: 4,
79
- maxValue: 5,
80
- allowHalf: false,
81
- readOnly: true,
82
- size: 'lg',
97
+ export const Large: Story = {
98
+ args: {
99
+ value: 4,
100
+ maxValue: 5,
101
+ allowHalf: false,
102
+ readOnly: true,
103
+ size: 'lg',
104
+ },
83
105
  };
84
106
 
85
- export const CustomColor = Template.bind({});
86
- CustomColor.args = {
87
- value: 4,
88
- maxValue: 5,
89
- allowHalf: false,
90
- readOnly: true,
91
- size: 'md',
92
- color: 'warning',
107
+ export const CustomColor: Story = {
108
+ args: {
109
+ value: 4,
110
+ maxValue: 5,
111
+ allowHalf: false,
112
+ readOnly: true,
113
+ size: 'md',
114
+ color: 'warning',
115
+ },
93
116
  };
94
117
 
95
- export const Interactive: StoryFn<RatingProps> = () => {
96
- const [rating, setRating] = useState(3);
97
-
98
- return (
99
- <div>
100
- <p>Selected rating: {rating}</p>
101
- <Rating value={rating} onChange={setRating} allowHalf={true} />
102
- </div>
103
- );
118
+ export const Interactive: Story = {
119
+ render: () => {
120
+ const [rating, setRating] = useState(3);
121
+ return (
122
+ <div>
123
+ <p>Selected rating: {rating}</p>
124
+ <Rating value={rating} onChange={setRating} allowHalf={true} />
125
+ </div>
126
+ );
127
+ },
104
128
  };
105
129
 
106
- export const CustomMaxValue = Template.bind({});
107
- CustomMaxValue.args = {
108
- value: 7,
109
- maxValue: 10,
110
- allowHalf: false,
111
- readOnly: true,
112
- size: 'md',
130
+ export const CustomMaxValue: Story = {
131
+ args: {
132
+ value: 7,
133
+ maxValue: 10,
134
+ allowHalf: false,
135
+ readOnly: true,
136
+ size: 'md',
137
+ },
113
138
  };
114
139
 
115
- export const Glass = {
140
+ export const Glass: Story = {
116
141
  args: {
117
142
  value: 4,
118
143
  maxValue: 5,
@@ -138,7 +163,7 @@ export const Glass = {
138
163
  ),
139
164
  };
140
165
 
141
- export const GlassInteractive = {
166
+ export const GlassInteractive: Story = {
142
167
  args: {
143
168
  value: 3,
144
169
  maxValue: 5,
@@ -174,7 +199,7 @@ export const GlassInteractive = {
174
199
  ),
175
200
  };
176
201
 
177
- export const GlassCustom = {
202
+ export const GlassCustom: Story = {
178
203
  args: {
179
204
  value: 4.5,
180
205
  maxValue: 5,
@@ -1,23 +1,32 @@
1
1
  import React from 'react';
2
- import { StoryFn, Meta } from '@storybook/react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
3
  import { River } from './River';
4
- import type { RiverProps } from './River';
5
4
 
6
- export default {
5
+ const meta = {
7
6
  title: 'Components/River',
8
7
  component: River,
8
+ parameters: {
9
+ layout: 'fullscreen',
10
+ docs: {
11
+ description: {
12
+ component:
13
+ 'The River component provides a flexible two-column layout pattern with an image on one side and content on the other. It supports various alignment options, background images, overlays, and can be reversed or centered. Rivers are ideal for showcasing features, products, or any content requiring side-by-side image and text presentation.',
14
+ },
15
+ },
16
+ },
17
+ tags: ['autodocs'],
9
18
  argTypes: {
10
19
  center: {
11
20
  control: { type: 'boolean' },
12
- defaultValue: false,
21
+ description: 'Whether to center the content',
13
22
  },
14
23
  breakout: {
15
24
  control: { type: 'boolean' },
16
- defaultValue: false,
25
+ description: 'Whether to break out of container constraints',
17
26
  },
18
27
  reverse: {
19
28
  control: { type: 'boolean' },
20
- defaultValue: false,
29
+ description: 'Whether to reverse the image and content positions',
21
30
  },
22
31
  backgroundImageSrc: {
23
32
  control: { type: 'text' },
@@ -25,7 +34,6 @@ export default {
25
34
  },
26
35
  showOverlay: {
27
36
  control: { type: 'boolean' },
28
- defaultValue: true,
29
37
  description: 'Show background overlay',
30
38
  },
31
39
  contentWidth: {
@@ -33,145 +41,215 @@ export default {
33
41
  description: 'Custom width for the river content (e.g., "800px", "50%")',
34
42
  },
35
43
  },
36
- } as Meta<typeof River>;
44
+ } satisfies Meta<typeof River>;
37
45
 
38
- const Template: StoryFn<typeof River> = args => (
39
- <div style={{ padding: '0', maxWidth: '100%' }}>
40
- <River {...args} />
41
- </div>
42
- );
46
+ export default meta;
47
+ type Story = StoryObj<typeof meta>;
43
48
 
44
49
  // Default river (image left, content right)
45
- export const Default = Template.bind({});
46
- Default.args = {
47
- title: 'Streamline Your Workflow',
48
- text: 'Our platform provides a comprehensive suite of tools to optimize your workflow and increase productivity. With intuitive interfaces and powerful features, you can accomplish more in less time.',
49
- actions: (
50
- <a href="#" className="c-btn c-btn--primary">
51
- Get Started
52
- </a>
50
+ export const Default: Story = {
51
+ render: args => (
52
+ <div style={{ padding: '0', maxWidth: '100%' }}>
53
+ <River {...args} />
54
+ </div>
53
55
  ),
54
- imageSrc: 'https://unsplash.it/g/500/300',
55
- imageAlt: 'Workflow diagram',
56
+ args: {
57
+ title: 'Streamline Your Workflow',
58
+ text: 'Our platform provides a comprehensive suite of tools to optimize your workflow and increase productivity. With intuitive interfaces and powerful features, you can accomplish more in less time.',
59
+ actions: (
60
+ <a href="#" className="c-btn c-btn--primary">
61
+ Get Started
62
+ </a>
63
+ ),
64
+ imageSrc: 'https://unsplash.it/g/500/300',
65
+ imageAlt: 'Workflow diagram',
66
+ },
56
67
  };
57
68
 
58
69
  // Reverse layout (content left, image right)
59
- export const Reverse = Template.bind({});
60
- Reverse.args = {
61
- ...Default.args,
62
- title: 'Data-Driven Insights',
63
- text: 'Harness the power of analytics to make informed decisions. Our advanced data visualization tools help you understand trends and identify opportunities for growth.',
64
- reverse: true,
70
+ export const Reverse: Story = {
71
+ render: args => (
72
+ <div style={{ padding: '0', maxWidth: '100%' }}>
73
+ <River {...args} />
74
+ </div>
75
+ ),
76
+ args: {
77
+ title: 'Data-Driven Insights',
78
+ text: 'Harness the power of analytics to make informed decisions. Our advanced data visualization tools help you understand trends and identify opportunities for growth.',
79
+ actions: (
80
+ <a href="#" className="c-btn c-btn--primary">
81
+ Get Started
82
+ </a>
83
+ ),
84
+ imageSrc: 'https://unsplash.it/g/500/300',
85
+ imageAlt: 'Workflow diagram',
86
+ reverse: true,
87
+ },
65
88
  };
66
89
 
67
90
  // Center layout (content centered)
68
- export const Centered = Template.bind({});
69
- Centered.args = {
70
- ...Default.args,
71
- title: 'Award-Winning Support',
72
- text: 'Our dedicated team of experts is available around the clock to provide assistance and ensure your success. Experience the highest level of customer service.',
73
- center: true,
91
+ export const Centered: Story = {
92
+ render: args => (
93
+ <div style={{ padding: '0', maxWidth: '100%' }}>
94
+ <River {...args} />
95
+ </div>
96
+ ),
97
+ args: {
98
+ title: 'Award-Winning Support',
99
+ text: 'Our dedicated team of experts is available around the clock to provide assistance and ensure your success. Experience the highest level of customer service.',
100
+ actions: (
101
+ <a href="#" className="c-btn c-btn--primary">
102
+ Get Started
103
+ </a>
104
+ ),
105
+ imageSrc: 'https://unsplash.it/g/500/300',
106
+ imageAlt: 'Workflow diagram',
107
+ center: true,
108
+ },
74
109
  };
75
110
 
76
111
  // Breakout layout (full width)
77
- export const Breakout = Template.bind({});
78
- Breakout.args = {
79
- ...Default.args,
80
- title: 'Scale With Confidence',
81
- text: "Our robust infrastructure adapts to your needs, whether you're a small business or a global enterprise. Grow your operations without worrying about technical limitations.",
82
- breakout: true,
112
+ export const Breakout: Story = {
113
+ render: args => (
114
+ <div style={{ padding: '0', maxWidth: '100%' }}>
115
+ <River {...args} />
116
+ </div>
117
+ ),
118
+ args: {
119
+ title: 'Scale With Confidence',
120
+ text: "Our robust infrastructure adapts to your needs, whether you're a small business or a global enterprise. Grow your operations without worrying about technical limitations.",
121
+ actions: (
122
+ <a href="#" className="c-btn c-btn--primary">
123
+ Get Started
124
+ </a>
125
+ ),
126
+ imageSrc: 'https://unsplash.it/g/500/300',
127
+ imageAlt: 'Workflow diagram',
128
+ breakout: true,
129
+ },
83
130
  };
84
131
 
85
132
  // Multi-paragraph text
86
- export const MultiParagraph = Template.bind({});
87
- MultiParagraph.args = {
88
- ...Default.args,
89
- title: 'Revolutionize Your Approach',
90
- text: [
91
- 'Our innovative solutions are designed to transform how you work, making complex tasks simple and intuitive.',
92
- "By focusing on user experience and practical functionality, we've created tools that adapt to your workflow rather than forcing you to adapt to them.",
93
- 'Experience the difference that thoughtful design and powerful technology can make in your daily operations.',
94
- ],
95
- actions: (
96
- <a href="#" className="c-btn c-btn--primary">
97
- Learn More
98
- </a>
133
+ export const MultiParagraph: Story = {
134
+ render: args => (
135
+ <div style={{ padding: '0', maxWidth: '100%' }}>
136
+ <River {...args} />
137
+ </div>
99
138
  ),
139
+ args: {
140
+ title: 'Revolutionize Your Approach',
141
+ text: [
142
+ 'Our innovative solutions are designed to transform how you work, making complex tasks simple and intuitive.',
143
+ "By focusing on user experience and practical functionality, we've created tools that adapt to your workflow rather than forcing you to adapt to them.",
144
+ 'Experience the difference that thoughtful design and powerful technology can make in your daily operations.',
145
+ ],
146
+ actions: (
147
+ <a href="#" className="c-btn c-btn--primary">
148
+ Learn More
149
+ </a>
150
+ ),
151
+ imageSrc: 'https://unsplash.it/g/500/300',
152
+ imageAlt: 'Workflow diagram',
153
+ },
100
154
  };
101
155
 
102
156
  // Content columns
103
- export const ContentColumns = Template.bind({});
104
- ContentColumns.args = {
105
- contentColumns: [
106
- {
107
- type: 'title',
108
- content: <h2 className="c-river__title">Flexible Content Layout</h2>,
109
- },
110
- {
111
- type: 'text',
112
- content: (
113
- <div>
114
- <p className="c-river__text">
115
- Use content columns to create custom layouts with different types of content. This
116
- approach gives you more control over the structure and presentation of your information.
117
- </p>
118
- <p className="c-river__text">
119
- Perfect for featuring important statistics, quotes, or highlighting key information
120
- alongside your main content.
121
- </p>
122
- </div>
123
- ),
124
- },
125
- ],
126
- actions: (
127
- <a href="#" className="c-btn c-btn--primary">
128
- Explore Options
129
- </a>
157
+ export const ContentColumns: Story = {
158
+ render: args => (
159
+ <div style={{ padding: '0', maxWidth: '100%' }}>
160
+ <River {...args} />
161
+ </div>
130
162
  ),
131
- imageSrc: 'https://unsplash.it/g/500/300',
163
+ args: {
164
+ contentColumns: [
165
+ {
166
+ type: 'title',
167
+ content: <h2 className="c-river__title">Flexible Content Layout</h2>,
168
+ },
169
+ {
170
+ type: 'text',
171
+ content: (
172
+ <div>
173
+ <p className="c-river__text">
174
+ Use content columns to create custom layouts with different types of content. This
175
+ approach gives you more control over the structure and presentation of your information.
176
+ </p>
177
+ <p className="c-river__text">
178
+ Perfect for featuring important statistics, quotes, or highlighting key information
179
+ alongside your main content.
180
+ </p>
181
+ </div>
182
+ ),
183
+ },
184
+ ],
185
+ actions: (
186
+ <a href="#" className="c-btn c-btn--primary">
187
+ Explore Options
188
+ </a>
189
+ ),
190
+ imageSrc: 'https://unsplash.it/g/500/300',
191
+ },
132
192
  };
133
193
 
134
194
  // Custom title styling
135
- export const CustomTitle = Template.bind({});
136
- CustomTitle.args = {
137
- title: <h1 className="c-river__title u-text-gradient">Custom Title with Gradient</h1>,
138
- text: 'The sun had set, leaving the sky painted in shades of orange and pink as the stars twinkled above. The air was filled with the sound of crickets and the rustle of leaves in the gentle breeze.',
139
- actions: (
140
- <a href="#" className="c-btn u-pl-0">
141
- Text Link <i className="icon-lux-circle"></i>
142
- </a>
195
+ export const CustomTitle: Story = {
196
+ render: args => (
197
+ <div style={{ padding: '0', maxWidth: '100%' }}>
198
+ <River {...args} />
199
+ </div>
143
200
  ),
144
- imageSrc: 'https://unsplash.it/g/712/196',
145
- imageAlt: 'Image',
201
+ args: {
202
+ title: <h1 className="c-river__title u-text-gradient">Custom Title with Gradient</h1>,
203
+ text: 'The sun had set, leaving the sky painted in shades of orange and pink as the stars twinkled above. The air was filled with the sound of crickets and the rustle of leaves in the gentle breeze.',
204
+ actions: (
205
+ <a href="#" className="c-btn u-pl-0">
206
+ Text Link <i className="icon-lux-circle"></i>
207
+ </a>
208
+ ),
209
+ imageSrc: 'https://unsplash.it/g/712/196',
210
+ imageAlt: 'Image',
211
+ },
146
212
  };
147
213
 
148
214
  // With background image
149
- export const WithBackgroundAndContent = Template.bind({});
150
- WithBackgroundAndContent.args = {
151
- title: 'Build Faster Applications',
152
- text: 'Our component library is designed for developers who want to create beautiful interfaces with minimal effort. With built-in TypeScript support and comprehensive documentation, you can focus on building features, not fighting with UI.',
153
- actions: (
154
- <a href="#" className="c-btn c-btn--light">
155
- View Documentation
156
- </a>
215
+ export const WithBackgroundAndContent: Story = {
216
+ render: args => (
217
+ <div style={{ padding: '0', maxWidth: '100%' }}>
218
+ <River {...args} />
219
+ </div>
157
220
  ),
158
- imageSrc: 'https://unsplash.it/g/500/300',
159
- backgroundImageSrc: 'https://unsplash.it/g/1920/600',
160
- showOverlay: true,
221
+ args: {
222
+ title: 'Build Faster Applications',
223
+ text: 'Our component library is designed for developers who want to create beautiful interfaces with minimal effort. With built-in TypeScript support and comprehensive documentation, you can focus on building features, not fighting with UI.',
224
+ actions: (
225
+ <a href="#" className="c-btn c-btn--light">
226
+ View Documentation
227
+ </a>
228
+ ),
229
+ imageSrc: 'https://unsplash.it/g/500/300',
230
+ backgroundImageSrc: 'https://unsplash.it/g/1920/600',
231
+ showOverlay: true,
232
+ },
161
233
  };
162
234
 
163
235
  // With custom content width
164
- export const CustomContentWidth = Template.bind({});
165
- CustomContentWidth.args = {
166
- title: 'Powerful Developer Experience',
167
- text: 'Our River component gives you complete control over your content layout. Customize content width, background images, and layouts to create engaging sections that convert visitors into customers.',
168
- actions: (
169
- <a href="#" className="c-btn c-btn--primary">
170
- Explore API
171
- </a>
236
+ export const CustomContentWidth: Story = {
237
+ render: args => (
238
+ <div style={{ padding: '0', maxWidth: '100%' }}>
239
+ <River {...args} />
240
+ </div>
172
241
  ),
173
- imageSrc: 'https://unsplash.it/g/500/300',
174
- contentWidth: '800px',
242
+ args: {
243
+ title: 'Powerful Developer Experience',
244
+ text: 'Our River component gives you complete control over your content layout. Customize content width, background images, and layouts to create engaging sections that convert visitors into customers.',
245
+ actions: (
246
+ <a href="#" className="c-btn c-btn--primary">
247
+ Explore API
248
+ </a>
249
+ ),
250
+ imageSrc: 'https://unsplash.it/g/500/300',
251
+ contentWidth: '800px',
252
+ },
175
253
  };
176
254
 
177
255
  // Multiple Rivers layout example
@@ -227,4 +305,6 @@ const MultipeRiversExample: React.FC = () => {
227
305
  );
228
306
  };
229
307
 
230
- export const MultipleRivers: StoryFn<typeof River> = () => <MultipeRiversExample />;
308
+ export const MultipleRivers: Story = {
309
+ render: () => <MultipeRiversExample />,
310
+ };
@@ -1,36 +1,46 @@
1
- import { Meta, StoryObj } from '@storybook/react';
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { Button } from '../Button';
3
3
  import { SectionIntro } from './SectionIntro';
4
+ import { SIZES } from '../../lib/constants/components';
4
5
 
5
- const meta: Meta<typeof SectionIntro> = {
6
+ const meta = {
6
7
  title: 'Components/SectionIntro',
7
8
  component: SectionIntro,
8
9
  parameters: {
9
10
  layout: 'padded',
11
+ docs: {
12
+ description: {
13
+ component:
14
+ 'The SectionIntro component provides a prominent introduction section for pages or content areas. It supports titles, labels, text content, images, background images, and call-to-action buttons. SectionIntros are ideal for page headers, section introductions, or any area requiring prominent content presentation.',
15
+ },
16
+ },
10
17
  },
18
+ tags: ['autodocs'],
11
19
  argTypes: {
12
- title: { control: 'text' },
13
- label: { control: 'text' },
14
- text: { control: 'text' },
20
+ title: { control: 'text', description: 'Main title text' },
21
+ label: { control: 'text', description: 'Label text displayed above the title' },
22
+ text: { control: 'text', description: 'Description text content' },
15
23
  alignment: {
16
24
  control: { type: 'select' },
17
25
  options: ['left', 'center', 'right'],
26
+ description: 'Text alignment',
18
27
  },
19
28
  size: {
20
29
  control: { type: 'select' },
21
- options: ['sm', 'md', 'lg'],
30
+ options: SIZES,
31
+ description: 'Size variant',
22
32
  },
23
33
  skeleton: { control: 'boolean' },
24
34
  showOverlay: { control: 'boolean' },
25
35
  actions: { control: false },
26
36
  backgroundImageSrc: { control: 'text' },
27
37
  imageSrc: { control: 'text' },
28
- imageAlt: { control: 'text' },
38
+ imageAlt: { control: 'text', description: 'Alt text for the image' },
29
39
  },
30
- };
40
+ } satisfies Meta<typeof SectionIntro>;
31
41
 
32
42
  export default meta;
33
- type Story = StoryObj<typeof SectionIntro>;
43
+ type Story = StoryObj<typeof meta>;
34
44
 
35
45
  // Default SectionIntro
36
46
  export const Default: Story = {