@repobit/dex-system-design 0.21.1 → 0.22.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 (53) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/package.json +4 -2
  3. package/src/components/Button/Button.js +7 -2
  4. package/src/components/Button/button.css.js +30 -0
  5. package/src/components/accordion/accordion-bg.stories.js +341 -171
  6. package/src/components/accordion/accordion.stories.js +345 -0
  7. package/src/components/anchor/anchor-nav.js +1 -0
  8. package/src/components/anchor/anchor.stories.js +134 -76
  9. package/src/components/back/back.css.js +1 -1
  10. package/src/components/back/back.stories.js +301 -63
  11. package/src/components/badge/badge.js +4 -7
  12. package/src/components/badge/badge.stories.js +89 -96
  13. package/src/components/breadcrumb/breadcrumb.stories.js +167 -3
  14. package/src/components/cards/card.stories.js +153 -3
  15. package/src/components/display/display.css.js +7 -10
  16. package/src/components/display/display.js +14 -2
  17. package/src/components/display/display.stories.js +213 -219
  18. package/src/components/divider/divider.stories.js +337 -30
  19. package/src/components/footer/footer-lp.stories.js +346 -3
  20. package/src/components/footer/footer.js +0 -3
  21. package/src/components/footer/footer.stories.js +267 -4
  22. package/src/components/header/header.css.js +1 -1
  23. package/src/components/header/header.js +81 -56
  24. package/src/components/header/header.stories.js +298 -22
  25. package/src/components/heading/heading.css.js +1 -1
  26. package/src/components/heading/heading.stories.js +355 -113
  27. package/src/components/image/image.css.js +146 -98
  28. package/src/components/image/image.js +13 -2
  29. package/src/components/image/image.stories.js +546 -160
  30. package/src/components/input/custom-form.stories.js +209 -12
  31. package/src/components/link/link.css.js +2 -2
  32. package/src/components/link/link.stories.js +383 -53
  33. package/src/components/paragraph/paragraph.css.js +1 -1
  34. package/src/components/paragraph/paragraph.stories.js +365 -157
  35. package/src/components/picture/picture.css.js +209 -0
  36. package/src/components/picture/picture.js +16 -2
  37. package/src/components/picture/picture.stories.js +525 -180
  38. package/src/components/pricing-cards/new-pricing-card.js +19 -4
  39. package/src/components/pricing-cards/new-pricing-card.stories.js +422 -0
  40. package/src/components/pricing-cards/new-pricing.css.js +8 -0
  41. package/src/components/pricing-cards/pricing-card-actions.js +50 -9
  42. package/src/components/pricing-cards/pricing-card-container.css.js +1 -1
  43. package/src/components/pricing-cards/pricing-card-header.css.js +73 -63
  44. package/src/components/pricing-cards/pricing-card-header.js +44 -10
  45. package/src/components/pricing-cards/pricing-card-pricing.js +63 -64
  46. package/src/components/pricing-cards/pricing-card.css.js +7 -15
  47. package/src/components/pricing-cards/pricing-card.js +354 -271
  48. package/src/components/pricing-cards/pricing-card.stories.js +3 -3
  49. package/src/tokens/fonts.stories.js +335 -8
  50. package/src/tokens/spacing.stories.js +701 -34
  51. package/src/tokens/tokens-grid.stories.js +897 -48
  52. package/src/tokens/typography.stories.js +980 -38
  53. package/src/components/accordion/accordion-light.stories.js +0 -241
@@ -3,9 +3,20 @@ import '../heading/heading.js';
3
3
  import './badge.js';
4
4
 
5
5
  export default {
6
- title : 'Atoms/Badge',
7
- component: 'bd-badge',
8
- argTypes : {
6
+ title : 'Atoms/Badge',
7
+ component : 'bd-badge',
8
+ tags : ['autodocs'],
9
+ parameters: {
10
+ docs: {
11
+ description: {
12
+ component: `
13
+ Un **badge** care poate afișa un text sau un element în slot.
14
+ Badge-ul acceptă culori personalizate, variante predefinite, dimensiuni diferite și mărimi de font.
15
+ Acest Storybook include toate exemplele posibile pentru testare completă.`
16
+ }
17
+ }
18
+ },
19
+ argTypes: {
9
20
  children: {
10
21
  control : 'text',
11
22
  description : 'Conținutul afișat în interiorul badge-ului (prin slot).',
@@ -13,54 +24,57 @@ export default {
13
24
  },
14
25
  color: {
15
26
  control : 'color',
16
- description : 'Culoarea de fundal a badge-ului',
27
+ description : 'Culoarea de fundal a badge-ului.',
17
28
  defaultValue: '#026DFF'
18
29
  },
19
30
  variant: {
20
- control: {
21
- type : 'select',
22
- options: ['', 'bd-light-blue', 'bd-light-green']
23
- },
24
- description : 'Variantă de stil pentru badge',
25
- defaultValue: ''
31
+ control : { type: 'select' },
32
+ options : ['', 'bd-light-blue', 'bd-light-green'],
33
+ description: 'Variantă de stil predefinită pentru badge.'
26
34
  },
27
35
  size: {
28
- control: {
29
- type : 'select',
30
- options: ['sm', 'md', 'lg']
31
- },
32
- description : 'Dimensiunea badge-ului',
33
- defaultValue: 'md'
36
+ control : { type: 'select' },
37
+ options : ['sm', 'md', 'lg'],
38
+ description: 'Dimensiunea badge-ului.'
34
39
  },
35
40
  fontsize: {
36
- control: {
37
- type : 'select',
38
- options: ['12', '14', '16']
39
- },
40
- description : 'Mărimea fontului',
41
- defaultValue: '14'
42
- }
43
- },
44
- parameters: {
45
- docs: {
46
- description: {
47
- component: 'Un badge simplu care afișează un text prin slot și are multiple opțiuni de personalizare.'
48
- }
41
+ control : { type: 'select' },
42
+ options : ['12', '14', '16'],
43
+ description: 'Mărimea fontului textului.'
49
44
  }
50
45
  }
51
46
  };
52
47
 
48
+ // TEMPLATE DE BAZĂ
53
49
  const Template = ({ children, color, variant, size, fontsize }) => html`
54
- <bd-badge
55
- color="${color}"
56
- variant="${variant}"
57
- size="${size}"
50
+ <bd-badge
51
+ color="${color}"
52
+ variant="${variant}"
53
+ size="${size}"
58
54
  fontsize="${fontsize}"
59
55
  >
60
56
  ${children}
61
57
  </bd-badge>
62
58
  `;
63
59
 
60
+ export const Default = Template.bind({});
61
+ Default.args = {
62
+ children: 'Badge',
63
+ color : '#026DFF',
64
+ variant : '',
65
+ size : 'md',
66
+ fontsize: '14'
67
+ };
68
+
69
+ Default.parameters = {
70
+ docs: {
71
+ description: {
72
+ story: 'Exemplul de bază pentru componenta Badge.'
73
+ }
74
+ }
75
+ };
76
+
77
+ // TEMPLATE SECȚIUNI
64
78
  const GridTemplate = (items) => html`
65
79
  <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 16px;">
66
80
  ${items}
@@ -74,16 +88,10 @@ const SectionTemplate = (title, items) => html`
74
88
  </div>
75
89
  `;
76
90
 
77
- export const Default = Template.bind({});
78
- Default.args = {
79
- children: 'Badge',
80
- color : '#026DFF',
81
- variant : '',
82
- size : 'md',
83
- fontsize: '14'
84
- };
85
-
86
- export const AllVariants = () => {
91
+ // ===================
92
+ // 🔵 TOATE VARIANTELE
93
+ // ===================
94
+ export const Variants = () => {
87
95
  const variants = [
88
96
  { variant: '', label: 'Default' },
89
97
  { variant: 'bd-light-blue', label: 'Light Blue' },
@@ -91,14 +99,23 @@ export const AllVariants = () => {
91
99
  ];
92
100
 
93
101
  return SectionTemplate(
94
- 'Toate Variantele',
102
+ 'Variante disponibile',
95
103
  variants.map(item => html`
96
104
  <bd-badge variant="${item.variant}">${item.label}</bd-badge>
97
105
  `)
98
106
  );
99
107
  };
100
108
 
101
- export const AllSizes = () => {
109
+ Variants.parameters = {
110
+ docs: {
111
+ description: { story: 'Toate variantele vizuale ale componentei bd-badge.' }
112
+ }
113
+ };
114
+
115
+ // ===================
116
+ // 🔶 TOATE DIMENSIUNILE
117
+ // ===================
118
+ export const Sizes = () => {
102
119
  const sizes = [
103
120
  { size: 'sm', label: 'Small' },
104
121
  { size: 'md', label: 'Medium' },
@@ -106,14 +123,23 @@ export const AllSizes = () => {
106
123
  ];
107
124
 
108
125
  return SectionTemplate(
109
- 'Toate Dimensiunile',
126
+ 'Dimensiuni disponibile',
110
127
  sizes.map(item => html`
111
128
  <bd-badge size="${item.size}">${item.label}</bd-badge>
112
129
  `)
113
130
  );
114
131
  };
115
132
 
116
- export const AllFontSizes = () => {
133
+ Sizes.parameters = {
134
+ docs: {
135
+ description: { story: 'Dimensiuni disponibile pentru badge.' }
136
+ }
137
+ };
138
+
139
+ // ==========================
140
+ // 🔤 TOATE MĂRIMILE DE FONT
141
+ // ==========================
142
+ export const FontSizes = () => {
117
143
  const fontSizes = [
118
144
  { fontsize: '12', label: 'Font 12' },
119
145
  { fontsize: '14', label: 'Font 14' },
@@ -121,13 +147,22 @@ export const AllFontSizes = () => {
121
147
  ];
122
148
 
123
149
  return SectionTemplate(
124
- 'Toate Mărimile de Font',
150
+ 'Mărimi de font disponibile',
125
151
  fontSizes.map(item => html`
126
152
  <bd-badge fontsize="${item.fontsize}">${item.label}</bd-badge>
127
153
  `)
128
154
  );
129
155
  };
130
156
 
157
+ FontSizes.parameters = {
158
+ docs: {
159
+ description: { story: 'Toate mărimile de font suportate de badge.' }
160
+ }
161
+ };
162
+
163
+ // =======================================
164
+ // 🧪 COMBINAȚII: VARIANTE × DIMENSIUNI
165
+ // =======================================
131
166
  export const Combinations = () => {
132
167
  const combinations = [
133
168
  { variant: 'bd-light-blue', size: 'sm', label: 'Light Blue Small' },
@@ -139,59 +174,17 @@ export const Combinations = () => {
139
174
  ];
140
175
 
141
176
  return SectionTemplate(
142
- 'Combinații Variante și Dimensiuni',
177
+ 'Combinații între variante și dimensiuni',
143
178
  combinations.map(item => html`
144
- <bd-badge variant="${item.variant}" size="${item.size}">${item.label}</bd-badge>
179
+ <bd-badge variant="${item.variant}" size="${item.size}">
180
+ ${item.label}
181
+ </bd-badge>
145
182
  `)
146
183
  );
147
184
  };
148
185
 
149
- export const CustomColors = () => {
150
- const colors = [
151
- { color: '#FF5733', label: 'Rosu' },
152
- { color: '#33FF57', label: 'Verde' },
153
- { color: '#3357FF', label: 'Albastru' },
154
- { color: '#F3FF33', label: 'Galben', textColor: '#000' },
155
- { color: '#FF33F3', label: 'Roz' },
156
- { color: '#33FFF3', label: 'Turcoaz' }
157
- ];
158
-
159
- return SectionTemplate(
160
- 'Culori Personalizate',
161
- colors.map(item => html`
162
- <bd-badge color="${item.color}">${item.label}</bd-badge>
163
- `)
164
- );
165
- };
166
-
167
- AllVariants.parameters = {
168
- docs: {
169
- description: {
170
- story: 'Toate variantele de badge disponibile.'
171
- }
172
- }
173
- };
174
-
175
- AllSizes.parameters = {
176
- docs: {
177
- description: {
178
- story: 'Toate dimensiunile de badge disponibile.'
179
- }
180
- }
181
- };
182
-
183
- AllFontSizes.parameters = {
184
- docs: {
185
- description: {
186
- story: 'Toate mărimile de font disponibile pentru badge-uri.'
187
- }
188
- }
189
- };
190
-
191
186
  Combinations.parameters = {
192
187
  docs: {
193
- description: {
194
- story: 'Diverse combinații între variante și dimensiuni.'
195
- }
188
+ description: { story: 'Combinații ale tuturor variantelor și dimensiunilor.' }
196
189
  }
197
- };
190
+ };
@@ -5,10 +5,21 @@ export default {
5
5
  title : 'Components/Breadcrumb',
6
6
  component : 'bd-breadcrumb',
7
7
  subcomponents: { 'BreadcrumbItem': 'bd-breadcrumb-item' },
8
- parameters : {
8
+ tags : ['autodocs'],
9
+ argTypes : {
10
+ mobileBreakpoint: {
11
+ control : 'text',
12
+ description: 'Breakpoint for mobile responsive behavior',
13
+ table : {
14
+ type : { summary: 'string' },
15
+ defaultValue: { summary: '768px' }
16
+ }
17
+ }
18
+ },
19
+ parameters: {
9
20
  docs: {
10
21
  description: {
11
- component: 'A navigation component that shows the current page location within a hierarchy.'
22
+ component: 'A navigation component that shows the current page location within a hierarchy. Supports responsive behavior and accessible navigation.'
12
23
  }
13
24
  }
14
25
  }
@@ -30,6 +41,13 @@ export const Default = () => html`
30
41
  </bd-breadcrumb-item>
31
42
  </bd-breadcrumb>
32
43
  `;
44
+ Default.parameters = {
45
+ docs: {
46
+ description: {
47
+ story: 'Default breadcrumb navigation showing a typical product hierarchy. The current page is marked with the `current` attribute and is not clickable.'
48
+ }
49
+ }
50
+ };
33
51
 
34
52
  export const WithNestedLinks = () => html`
35
53
  <bd-breadcrumb>
@@ -47,6 +65,13 @@ export const WithNestedLinks = () => html`
47
65
  </bd-breadcrumb-item>
48
66
  </bd-breadcrumb>
49
67
  `;
68
+ WithNestedLinks.parameters = {
69
+ docs: {
70
+ description: {
71
+ story: 'Breadcrumb with nested product categories demonstrating deep hierarchical navigation structure.'
72
+ }
73
+ }
74
+ };
50
75
 
51
76
  export const MixedItems = () => html`
52
77
  <bd-breadcrumb>
@@ -64,6 +89,13 @@ export const MixedItems = () => html`
64
89
  </bd-breadcrumb-item>
65
90
  </bd-breadcrumb>
66
91
  `;
92
+ MixedItems.parameters = {
93
+ docs: {
94
+ description: {
95
+ story: 'Breadcrumb with mixed navigation items - some are clickable links while others are non-clickable text nodes for intermediate hierarchy levels.'
96
+ }
97
+ }
98
+ };
67
99
 
68
100
  export const LongPath = () => html`
69
101
  <bd-breadcrumb>
@@ -87,6 +119,13 @@ export const LongPath = () => html`
87
119
  </bd-breadcrumb-item>
88
120
  </bd-breadcrumb>
89
121
  `;
122
+ LongPath.parameters = {
123
+ docs: {
124
+ description: {
125
+ story: 'Breadcrumb with an extended hierarchical path showing how the component handles deep navigation structures and long product names.'
126
+ }
127
+ }
128
+ };
90
129
 
91
130
  export const MobileView = () => html`
92
131
  <div style="max-width: 400px; border: 1px solid #ccc; padding: 20px;">
@@ -106,4 +145,129 @@ export const MobileView = () => html`
106
145
  Resize window to see responsive behavior.
107
146
  </p>
108
147
  </div>
109
- `;
148
+ `;
149
+ MobileView.parameters = {
150
+ docs: {
151
+ description: {
152
+ story: 'Mobile-optimized breadcrumb demonstration. The component automatically adapts to smaller screens by collapsing intermediate items when the viewport is below the specified breakpoint.'
153
+ }
154
+ }
155
+ };
156
+
157
+ export const EcommerceExample = () => html`
158
+ <bd-breadcrumb>
159
+ <bd-breadcrumb-item href="/">
160
+ Home
161
+ </bd-breadcrumb-item>
162
+ <bd-breadcrumb-item href="/electronics">
163
+ Electronics
164
+ </bd-breadcrumb-item>
165
+ <bd-breadcrumb-item href="/electronics/computers">
166
+ Computers & Tablets
167
+ </bd-breadcrumb-item>
168
+ <bd-breadcrumb-item href="/electronics/computers/laptops">
169
+ Laptops
170
+ </bd-breadcrumb-item>
171
+ <bd-breadcrumb-item current>
172
+ Gaming Laptops - High Performance
173
+ </bd-breadcrumb-item>
174
+ </bd-breadcrumb>
175
+ `;
176
+ EcommerceExample.parameters = {
177
+ docs: {
178
+ description: {
179
+ story: 'E-commerce style breadcrumb showing typical product categorization hierarchy commonly used in online shopping platforms.'
180
+ }
181
+ }
182
+ };
183
+
184
+ export const DocumentationExample = () => html`
185
+ <bd-breadcrumb>
186
+ <bd-breadcrumb-item href="/">
187
+ Home
188
+ </bd-breadcrumb-item>
189
+ <bd-breadcrumb-item href="/help">
190
+ Help Center
191
+ </bd-breadcrumb-item>
192
+ <bd-breadcrumb-item href="/help/getting-started">
193
+ Getting Started
194
+ </bd-breadcrumb-item>
195
+ <bd-breadcrumb-item href="/help/getting-started/installation">
196
+ Installation Guide
197
+ </bd-breadcrumb-item>
198
+ <bd-breadcrumb-item current>
199
+ Troubleshooting
200
+ </bd-breadcrumb-item>
201
+ </bd-breadcrumb>
202
+ `;
203
+ DocumentationExample.parameters = {
204
+ docs: {
205
+ description: {
206
+ story: 'Documentation site breadcrumb demonstrating hierarchical navigation through help articles and documentation sections.'
207
+ }
208
+ }
209
+ };
210
+
211
+ export const AccessibilityExample = () => html`
212
+ <bd-breadcrumb aria-label="Breadcrumb navigation">
213
+ <bd-breadcrumb-item href="/">
214
+ Home
215
+ </bd-breadcrumb-item>
216
+ <bd-breadcrumb-item href="/accessibility">
217
+ Accessibility
218
+ </bd-breadcrumb-item>
219
+ <bd-breadcrumb-item href="/accessibility/components">
220
+ Components
221
+ </bd-breadcrumb-item>
222
+ <bd-breadcrumb-item current>
223
+ Breadcrumb Best Practices
224
+ </bd-breadcrumb-item>
225
+ </bd-breadcrumb>
226
+
227
+ <div style="margin-top: 2rem; padding: 1rem; background: #f5f5f5; border-radius: 4px;">
228
+ <h4 style="margin-top: 0;">Accessibility Features</h4>
229
+ <ul style="margin-bottom: 0;">
230
+ <li><strong>ARIA landmarks:</strong> Proper navigation role with aria-label</li>
231
+ <li><strong>Current page indication:</strong> aria-current="page" for active item</li>
232
+ <li><strong>Keyboard navigation:</strong> All links are keyboard accessible</li>
233
+ <li><strong>Semantic structure:</strong> Clear hierarchy for screen readers</li>
234
+ </ul>
235
+ </div>
236
+ `;
237
+ AccessibilityExample.parameters = {
238
+ docs: {
239
+ description: {
240
+ story: 'Accessibility-focused breadcrumb example demonstrating proper ARIA attributes and semantic HTML structure for screen reader compatibility and keyboard navigation.'
241
+ }
242
+ }
243
+ };
244
+
245
+ // Template for interactive controls
246
+ const BreadcrumbTemplate = ({ mobileBreakpoint }) => html`
247
+ <bd-breadcrumb mobile-breakpoint="${mobileBreakpoint}">
248
+ <bd-breadcrumb-item href="/">
249
+ Home
250
+ </bd-breadcrumb-item>
251
+ <bd-breadcrumb-item href="/products">
252
+ Products
253
+ </bd-breadcrumb-item>
254
+ <bd-breadcrumb-item href="/products/security">
255
+ Security
256
+ </bd-breadcrumb-item>
257
+ <bd-breadcrumb-item current>
258
+ Current Product
259
+ </bd-breadcrumb-item>
260
+ </bd-breadcrumb>
261
+ `;
262
+
263
+ export const InteractiveExample = BreadcrumbTemplate.bind({});
264
+ InteractiveExample.args = {
265
+ mobileBreakpoint: '768px'
266
+ };
267
+ InteractiveExample.parameters = {
268
+ docs: {
269
+ description: {
270
+ story: 'Interactive breadcrumb example. Use the controls panel to adjust the mobile breakpoint and see how it affects the responsive behavior.'
271
+ }
272
+ }
273
+ };