@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.
- package/README.md +101 -199
- package/atomix.config.ts +241 -0
- package/dist/atomix.css +260 -179
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +250 -179
- package/dist/atomix.min.css.map +1 -1
- package/dist/charts.js +61 -66
- package/dist/charts.js.map +1 -1
- package/dist/core.js +47 -31
- package/dist/core.js.map +1 -1
- package/dist/forms.js +47 -31
- package/dist/forms.js.map +1 -1
- package/dist/heavy.js +47 -31
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +1841 -1633
- package/dist/index.esm.js +4975 -4113
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +5151 -4290
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/theme.d.ts +1572 -1442
- package/dist/theme.js +4816 -4080
- package/dist/theme.js.map +1 -1
- package/package.json +6 -20
- package/src/components/Accordion/Accordion.stories.tsx +50 -17
- package/src/components/AtomixGlass/AtomixGlass.tsx +65 -31
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +11 -4
- package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1 -32
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +2 -2
- package/src/components/AtomixGlass/stories/shared-components.tsx +0 -31
- package/src/components/Avatar/Avatar.stories.tsx +7 -0
- package/src/components/Badge/Badge.stories.tsx +91 -13
- package/src/components/Block/Block.stories.tsx +7 -23
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +7 -0
- package/src/components/Button/Button.stories.tsx +141 -22
- package/src/components/Button/ButtonGroup.stories.tsx +315 -0
- package/src/components/Button/ButtonGroup.tsx +67 -0
- package/src/components/Button/index.ts +2 -0
- package/src/components/Callout/Callout.stories.tsx +8 -6
- package/src/components/Card/Card.stories.tsx +82 -28
- package/src/components/Chart/AnimatedChart.tsx +0 -1
- package/src/components/Chart/AreaChart.tsx +0 -1
- package/src/components/Chart/BarChart.tsx +0 -1
- package/src/components/Chart/BubbleChart.tsx +0 -1
- package/src/components/Chart/CandlestickChart.tsx +0 -1
- package/src/components/Chart/Chart.stories.tsx +5 -7
- package/src/components/Chart/Chart.tsx +0 -16
- package/src/components/Chart/ChartRenderer.tsx +1 -1
- package/src/components/Chart/DonutChart.tsx +0 -1
- package/src/components/Chart/FunnelChart.tsx +0 -1
- package/src/components/Chart/GaugeChart.tsx +0 -1
- package/src/components/Chart/HeatmapChart.tsx +0 -1
- package/src/components/Chart/LineChart.tsx +0 -1
- package/src/components/Chart/MultiAxisChart.tsx +0 -1
- package/src/components/Chart/PieChart.tsx +0 -1
- package/src/components/Chart/RadarChart.tsx +0 -1
- package/src/components/Chart/ScatterChart.tsx +0 -1
- package/src/components/Chart/WaterfallChart.tsx +0 -1
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +7 -0
- package/src/components/DataTable/DataTable.stories.tsx +23 -16
- package/src/components/DatePicker/DatePicker.stories.tsx +27 -19
- package/src/components/Dropdown/Dropdown.stories.tsx +11 -19
- package/src/components/EdgePanel/EdgePanel.stories.tsx +1 -0
- package/src/components/Footer/Footer.stories.tsx +8 -6
- package/src/components/Footer/FooterLink.tsx +9 -2
- package/src/components/Form/Checkbox.stories.tsx +7 -0
- package/src/components/Form/Form.stories.tsx +7 -0
- package/src/components/Form/FormGroup.stories.tsx +9 -1
- package/src/components/Form/Input.stories.tsx +69 -16
- package/src/components/Form/Radio.stories.tsx +9 -1
- package/src/components/Form/Select.stories.tsx +9 -1
- package/src/components/Form/Textarea.stories.tsx +10 -2
- package/src/components/Hero/Hero.stories.tsx +7 -0
- package/src/components/List/List.stories.tsx +7 -0
- package/src/components/Messages/Messages.stories.tsx +8 -7
- package/src/components/Modal/Modal.stories.tsx +17 -6
- package/src/components/Navigation/Menu/Menu.stories.tsx +7 -0
- package/src/components/Navigation/Nav/Nav.stories.tsx +7 -0
- package/src/components/Navigation/Navbar/Navbar.stories.tsx +1 -0
- package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +1 -1
- package/src/components/Pagination/Pagination.stories.tsx +188 -111
- package/src/components/Pagination/Pagination.tsx +83 -3
- package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -5
- package/src/components/Popover/Popover.stories.tsx +191 -115
- package/src/components/ProductReview/ProductReview.stories.tsx +80 -58
- package/src/components/Progress/Progress.stories.tsx +79 -49
- package/src/components/Rating/Rating.stories.tsx +109 -84
- package/src/components/River/River.stories.tsx +194 -114
- package/src/components/SectionIntro/SectionIntro.stories.tsx +19 -9
- package/src/components/Slider/Slider.stories.tsx +7 -0
- package/src/components/Spinner/Spinner.stories.tsx +15 -11
- package/src/components/Steps/Steps.stories.tsx +132 -98
- package/src/components/Tabs/Tabs.stories.tsx +163 -112
- package/src/components/Testimonial/Testimonial.stories.tsx +114 -68
- package/src/components/Todo/Todo.stories.tsx +38 -12
- package/src/components/Toggle/Toggle.stories.tsx +61 -28
- package/src/components/Tooltip/Tooltip.stories.tsx +318 -200
- package/src/components/Upload/Upload.stories.tsx +122 -84
- package/src/components/VideoPlayer/VideoPlayer.stories.tsx +7 -24
- package/src/components/index.ts +1 -0
- package/src/lib/composables/useAtomixGlass.ts +2 -3
- package/src/lib/composables/useNavbar.ts +0 -10
- package/src/lib/config/loader.ts +2 -1
- package/src/lib/constants/components.ts +10 -0
- package/src/lib/hooks/useComponentCustomization.ts +1 -1
- package/src/lib/theme/README.md +174 -0
- package/src/lib/theme/adapters/index.ts +31 -0
- package/src/lib/theme/adapters/themeAdapter.ts +287 -0
- package/src/lib/theme/config/__tests__/configLoader.test.ts +207 -0
- package/src/lib/theme/config/configLoader.ts +254 -0
- package/src/lib/theme/config/loader.ts +37 -48
- package/src/lib/theme/config/types.ts +2 -2
- package/src/lib/theme/config/validator.ts +15 -91
- package/src/lib/theme/{constants.ts → constants/constants.ts} +0 -18
- package/src/lib/theme/constants/index.ts +8 -0
- package/src/lib/theme/core/ThemeRegistry.ts +19 -6
- package/src/lib/theme/core/__tests__/createTheme.test.ts +132 -0
- package/src/lib/theme/core/composeTheme.ts +155 -0
- package/src/lib/theme/core/createTheme.ts +94 -0
- package/src/lib/theme/{createTheme.ts → core/createThemeObject.ts} +10 -6
- package/src/lib/theme/core/index.ts +5 -19
- package/src/lib/theme/devtools/Comparator.tsx +346 -22
- package/src/lib/theme/devtools/IMPROVEMENTS.md +139 -38
- package/src/lib/theme/devtools/Inspector.tsx +335 -51
- package/src/lib/theme/devtools/LiveEditor.tsx +478 -107
- package/src/lib/theme/devtools/Preview.tsx +471 -221
- package/src/lib/theme/{core → devtools}/ThemeValidator.ts +1 -1
- package/src/lib/theme/devtools/index.ts +14 -4
- package/src/lib/theme/devtools/useHistory.ts +130 -0
- package/src/lib/theme/errors/index.ts +12 -0
- package/src/lib/theme/generators/cssFile.ts +79 -0
- package/src/lib/theme/generators/generateCSS.ts +89 -0
- package/src/lib/theme/{generateCSSVariables.ts → generators/generateCSSVariables.ts} +3 -13
- package/src/lib/theme/generators/index.ts +19 -0
- package/src/lib/theme/i18n/rtl.ts +5 -6
- package/src/lib/theme/index.ts +120 -15
- package/src/lib/theme/runtime/ThemeApplicator.ts +52 -111
- package/src/lib/theme/{ThemeContext.tsx → runtime/ThemeContext.tsx} +1 -1
- package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +1 -1
- package/src/lib/theme/runtime/ThemeProvider.tsx +456 -179
- package/src/lib/theme/runtime/index.ts +1 -2
- package/src/lib/theme/runtime/useTheme.ts +1 -2
- package/src/lib/theme/test/testTheme.ts +385 -0
- package/src/lib/theme/tokens/index.ts +12 -0
- package/src/lib/theme/tokens/tokens.ts +721 -0
- package/src/lib/theme/types.ts +6 -42
- package/src/lib/theme/{utils.ts → utils/domUtils.ts} +2 -2
- package/src/lib/theme/utils/index.ts +11 -0
- package/src/lib/theme/utils/injectCSS.ts +90 -0
- package/src/lib/theme/utils/themeHelpers.ts +78 -0
- package/src/lib/theme/{themeUtils.ts → utils/themeUtils.ts} +1 -1
- package/src/lib/theme-tools.ts +7 -8
- package/src/lib/types/components.ts +40 -130
- package/src/lib/utils/componentUtils.ts +1 -1
- package/src/styles/01-settings/_settings.design-tokens.scss +4 -1
- package/src/styles/02-tools/_tools.button.scss +66 -79
- package/src/styles/06-components/_components.atomix-glass.scss +13 -3
- package/src/styles/06-components/_components.pagination.scss +88 -0
- package/scripts/sync-theme-config.js +0 -309
- package/src/lib/theme/composeTheme.ts +0 -370
- package/src/lib/theme/core/ThemeCache.ts +0 -283
- package/src/lib/theme/core/ThemeEngine.test.ts +0 -146
- package/src/lib/theme/core/ThemeEngine.ts +0 -665
- package/src/lib/theme/createThemeFromConfig.ts +0 -132
- package/src/lib/theme/devtools/CLI.ts +0 -364
- package/src/lib/theme/runtime/ThemeManager.test.ts +0 -192
- package/src/lib/theme/runtime/ThemeManager.ts +0 -446
- package/src/styles/03-generic/_generated-root.css +0 -26
- package/src/themes/README.md +0 -442
- package/src/themes/themes.config.js +0 -68
- /package/src/lib/theme/{cssVariableMapper.ts → adapters/cssVariableMapper.ts} +0 -0
- /package/src/lib/theme/{errors.ts → errors/errors.ts} +0 -0
|
@@ -1,118 +1,143 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { fn } from '@storybook/test';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
4
3
|
import { Rating } from './Rating';
|
|
5
|
-
import
|
|
4
|
+
import { THEME_COLORS, SIZES } from '../../lib/constants/components';
|
|
6
5
|
|
|
7
|
-
|
|
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: {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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'
|
|
37
|
+
control: { type: 'select' },
|
|
38
|
+
options: SIZES,
|
|
39
|
+
description: 'The size of the rating stars',
|
|
17
40
|
},
|
|
18
41
|
color: {
|
|
19
|
-
control: {
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
53
|
+
export default meta;
|
|
54
|
+
type Story = StoryObj<typeof meta>;
|
|
39
55
|
|
|
40
|
-
|
|
41
|
-
Default
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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 =
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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 =
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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 =
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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 =
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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 =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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 =
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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 {
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
3
|
import { River } from './River';
|
|
4
|
-
import type { RiverProps } from './River';
|
|
5
4
|
|
|
6
|
-
|
|
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
|
-
|
|
21
|
+
description: 'Whether to center the content',
|
|
13
22
|
},
|
|
14
23
|
breakout: {
|
|
15
24
|
control: { type: 'boolean' },
|
|
16
|
-
|
|
25
|
+
description: 'Whether to break out of container constraints',
|
|
17
26
|
},
|
|
18
27
|
reverse: {
|
|
19
28
|
control: { type: 'boolean' },
|
|
20
|
-
|
|
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
|
-
}
|
|
44
|
+
} satisfies Meta<typeof River>;
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
|
|
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 =
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
55
|
-
|
|
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 =
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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 =
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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 =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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 =
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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 =
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
|
|
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 =
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
145
|
-
|
|
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 =
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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 =
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
174
|
-
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
43
|
+
type Story = StoryObj<typeof meta>;
|
|
34
44
|
|
|
35
45
|
// Default SectionIntro
|
|
36
46
|
export const Default: Story = {
|