@reliability-design/web 1.0.2 → 1.0.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 (145) hide show
  1. package/dist/components/rel-accordion/README.md +132 -0
  2. package/dist/components/rel-accordion/rel-accordion.ts +61 -29
  3. package/dist/components/rel-alert/README.md +141 -0
  4. package/dist/components/rel-alert/rel-alert.ts +110 -67
  5. package/dist/components/rel-avatar/README.md +119 -0
  6. package/dist/components/rel-avatar/rel-avatar.ts +8 -15
  7. package/dist/components/rel-badge/README.md +86 -0
  8. package/dist/components/rel-badge/rel-badge.ts +28 -21
  9. package/dist/components/rel-breadcrumb/README.md +102 -0
  10. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +24 -18
  11. package/dist/components/rel-button/README.md +130 -0
  12. package/dist/components/rel-button/rel-button.ts +39 -59
  13. package/dist/components/rel-calendar/README.md +109 -0
  14. package/dist/components/rel-calendar/index.ts +1 -0
  15. package/dist/components/rel-calendar/rel-calendar.ts +467 -0
  16. package/dist/components/rel-card/README.md +94 -0
  17. package/dist/components/rel-card/rel-card.ts +21 -11
  18. package/dist/components/rel-cardmedia/README.md +127 -0
  19. package/dist/components/rel-cardmedia/rel-cardmedia.ts +22 -18
  20. package/dist/components/rel-carousel/README.md +166 -0
  21. package/dist/components/rel-carousel/index.ts +1 -0
  22. package/dist/components/rel-carousel/rel-carousel.ts +469 -0
  23. package/dist/components/rel-chart/README.md +286 -0
  24. package/dist/components/rel-chart/index.ts +1 -0
  25. package/dist/components/rel-chart/rel-chart.ts +736 -0
  26. package/dist/components/rel-checkbox/README.md +77 -0
  27. package/dist/components/rel-checkbox/rel-checkbox.ts +36 -45
  28. package/dist/components/rel-chip/README.md +114 -0
  29. package/dist/components/rel-chip/rel-chip.ts +47 -122
  30. package/dist/components/rel-container/README.md +99 -0
  31. package/dist/components/rel-container/rel-container.ts +1 -6
  32. package/dist/components/rel-date-picker/README.md +253 -0
  33. package/dist/components/rel-date-picker/index.ts +1 -0
  34. package/dist/components/rel-date-picker/rel-date-picker.ts +916 -0
  35. package/dist/components/rel-divider/README.md +100 -0
  36. package/dist/components/rel-divider/rel-divider.ts +37 -37
  37. package/dist/components/rel-drawer/README.md +200 -0
  38. package/dist/components/rel-drawer/index.ts +1 -0
  39. package/dist/components/rel-drawer/rel-drawer.ts +621 -0
  40. package/dist/components/rel-kbd/README.md +151 -0
  41. package/dist/components/rel-kbd/rel-kbd.ts +118 -0
  42. package/dist/components/rel-layout/README.md +88 -0
  43. package/dist/components/rel-layout/rel-layout.ts +12 -14
  44. package/dist/components/rel-menu/README.md +151 -0
  45. package/dist/components/rel-menu/rel-menu.ts +18 -10
  46. package/dist/components/rel-menubar/README.md +329 -0
  47. package/dist/components/rel-menubar/index.ts +2 -0
  48. package/dist/components/rel-menubar/rel-menubar-menu.ts +16 -0
  49. package/dist/components/rel-menubar/rel-menubar.ts +576 -0
  50. package/dist/components/rel-nav-menu/README.md +289 -0
  51. package/dist/components/rel-nav-menu/index.ts +3 -0
  52. package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +143 -0
  53. package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +53 -0
  54. package/dist/components/rel-nav-menu/rel-nav-menu.ts +331 -0
  55. package/dist/components/rel-navbar/README.md +126 -0
  56. package/dist/components/rel-navbar/rel-navbar.ts +91 -0
  57. package/dist/components/rel-otp/README.md +440 -0
  58. package/dist/components/rel-otp/index.ts +1 -0
  59. package/dist/components/rel-otp/rel-otp.ts +504 -0
  60. package/dist/components/rel-pagination/README.md +410 -0
  61. package/dist/components/rel-pagination/index.ts +1 -0
  62. package/dist/components/rel-pagination/rel-pagination.ts +376 -0
  63. package/dist/components/rel-popover/README.md +568 -0
  64. package/dist/components/rel-popover/index.ts +2 -0
  65. package/dist/components/rel-popover/rel-popover-content.ts +55 -0
  66. package/dist/components/rel-popover/rel-popover.ts +327 -0
  67. package/dist/components/rel-progress/README.md +110 -0
  68. package/dist/components/rel-progress/rel-progress.ts +58 -20
  69. package/dist/components/rel-quote-page/README.md +166 -0
  70. package/dist/components/rel-quote-page/rel-quote-page.ts +816 -0
  71. package/dist/components/rel-radio/README.md +120 -0
  72. package/dist/components/rel-radio/rel-radio.ts +41 -73
  73. package/dist/components/rel-resizable/README.md +140 -0
  74. package/dist/components/rel-resizable/index.ts +3 -0
  75. package/dist/components/rel-resizable/rel-resizable-group.ts +374 -0
  76. package/dist/components/rel-resizable/rel-resizable-handle.ts +149 -0
  77. package/dist/components/rel-resizable/rel-resizable-panel.ts +47 -0
  78. package/dist/components/rel-segmented-button/README.md +141 -0
  79. package/dist/components/rel-segmented-button/rel-segmented-button.ts +18 -13
  80. package/dist/components/rel-select/README.md +107 -0
  81. package/dist/components/rel-select/rel-select.ts +14 -14
  82. package/dist/components/rel-sheet/README.md +224 -0
  83. package/dist/components/rel-sheet/rel-sheet.ts +683 -0
  84. package/dist/components/rel-sidebar/README.md +209 -0
  85. package/dist/components/rel-sidebar/rel-sidebar.ts +1158 -0
  86. package/dist/components/rel-slider/README.md +135 -0
  87. package/dist/components/rel-slider/rel-slider.ts +19 -7
  88. package/dist/components/rel-snackbar/README.md +134 -0
  89. package/dist/components/rel-snackbar/rel-snackbar.ts +73 -2
  90. package/dist/components/rel-stepper/README.md +160 -0
  91. package/dist/components/rel-stepper/rel-stepper.ts +29 -8
  92. package/dist/components/rel-switch/README.md +102 -0
  93. package/dist/components/rel-switch/rel-switch.ts +22 -11
  94. package/dist/components/rel-tab/README.md +163 -0
  95. package/dist/components/rel-tab/rel-tab.ts +46 -22
  96. package/dist/components/rel-table/README.md +178 -0
  97. package/dist/components/rel-table/rel-table-body.ts +16 -0
  98. package/dist/components/rel-table/rel-table-caption.ts +22 -0
  99. package/dist/components/rel-table/rel-table-cell.ts +49 -0
  100. package/dist/components/rel-table/rel-table-footer.ts +18 -0
  101. package/dist/components/rel-table/rel-table-head.ts +33 -0
  102. package/dist/components/rel-table/rel-table-header.ts +16 -0
  103. package/dist/components/rel-table/rel-table-row.ts +32 -0
  104. package/dist/components/rel-table/rel-table.ts +47 -0
  105. package/dist/components/rel-textfield/README.md +90 -0
  106. package/dist/components/rel-textfield/rel-textfield.ts +37 -21
  107. package/dist/components/rel-toast/README.md +148 -0
  108. package/dist/components/rel-toast/rel-toast.ts +32 -14
  109. package/dist/components/rel-tooltip/README.md +103 -0
  110. package/dist/components/rel-tooltip/rel-tooltip.ts +9 -9
  111. package/dist/index.d.mts +846 -7
  112. package/dist/index.d.ts +846 -7
  113. package/dist/index.js +10860 -1803
  114. package/dist/index.js.map +1 -1
  115. package/dist/index.mjs +10820 -1809
  116. package/dist/index.mjs.map +1 -1
  117. package/dist/styles/vars.css +293 -183
  118. package/dist/vars-ITL2K3KO.css +294 -0
  119. package/package.json +2 -2
  120. package/dist/components/rel-accordion/rel-accordion.stories.ts +0 -313
  121. package/dist/components/rel-alert/rel-alert.stories.ts +0 -412
  122. package/dist/components/rel-avatar/rel-avatar.stories.ts +0 -327
  123. package/dist/components/rel-badge/rel-badge.stories.ts +0 -350
  124. package/dist/components/rel-breadcrumb/rel-breadcrumb.stories.ts +0 -306
  125. package/dist/components/rel-button/rel-button.stories.ts +0 -356
  126. package/dist/components/rel-card/rel-card.stories.ts +0 -299
  127. package/dist/components/rel-cardmedia/rel-cardmedia.stories.ts +0 -368
  128. package/dist/components/rel-checkbox/rel-checkbox.stories.ts +0 -414
  129. package/dist/components/rel-chip/rel-chip.stories.ts +0 -552
  130. package/dist/components/rel-container/rel-container.stories.ts +0 -239
  131. package/dist/components/rel-divider/rel-divider.stories.ts +0 -229
  132. package/dist/components/rel-layout/rel-layout.stories.ts +0 -713
  133. package/dist/components/rel-menu/rel-menu.stories.ts +0 -910
  134. package/dist/components/rel-progress/rel-progress.stories.ts +0 -817
  135. package/dist/components/rel-radio/rel-radio.stories.ts +0 -1048
  136. package/dist/components/rel-segmented-button/rel-segmented-button.stories.ts +0 -1079
  137. package/dist/components/rel-select/rel-select.stories.ts +0 -1201
  138. package/dist/components/rel-slider/rel-slider.stories.ts +0 -730
  139. package/dist/components/rel-snackbar/rel-snackbar.stories.ts +0 -808
  140. package/dist/components/rel-stepper/rel-stepper.stories.ts +0 -752
  141. package/dist/components/rel-switch/rel-switch.stories.ts +0 -441
  142. package/dist/components/rel-tab/rel-tab.stories.ts +0 -492
  143. package/dist/components/rel-textfield/rel-textfield.stories.ts +0 -710
  144. package/dist/components/rel-toast/rel-toast.stories.ts +0 -394
  145. package/dist/components/rel-tooltip/rel-tooltip.stories.ts +0 -364
@@ -1,713 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/web-components-vite';
2
- import { html } from 'lit';
3
- import './rel-layout';
4
-
5
- /**
6
- * The Layout component provides a responsive grid system for organizing content.
7
- * Built with Lit web components for framework-agnostic usage with full token support.
8
- *
9
- * ## Features
10
- * - **Flexible Grid System**: Customizable columns (default 4)
11
- * - **Responsive Breakpoints**: Automatically adapts to screen sizes
12
- * - **Customizable Gap**: Control spacing between grid items
13
- * - **Optional Responsive Mode**: Toggle responsive behavior on/off
14
- * - **Token-Based Styling**: Uses design system tokens
15
- */
16
- const meta: Meta = {
17
- title: 'Components/Layout',
18
- tags: ['autodocs'],
19
- component: 'rel-layout',
20
- argTypes: {
21
- gap: {
22
- control: { type: 'text' },
23
- description: 'Gap between grid items',
24
- table: {
25
- defaultValue: { summary: '1rem' },
26
- type: { summary: 'string' },
27
- },
28
- },
29
- columns: {
30
- control: { type: 'number', min: 1, max: 12 },
31
- description: 'Number of columns in the grid',
32
- table: {
33
- defaultValue: { summary: '4' },
34
- type: { summary: 'number' },
35
- },
36
- },
37
- responsive: {
38
- control: { type: 'boolean' },
39
- description: 'Enable responsive breakpoints (4→3→2→1 columns)',
40
- table: {
41
- defaultValue: { summary: 'true' },
42
- type: { summary: 'boolean' },
43
- },
44
- },
45
- },
46
- render: (args) => html`
47
- <rel-layout
48
- gap="${args.gap || '1rem'}"
49
- columns="${args.columns || 4}"
50
- ?responsive="${args.responsive !== false}">
51
- <div style="background: #e3f2fd; padding: 20px; text-align: center; border-radius: 8px;">Item 1</div>
52
- <div style="background: #f3e5f5; padding: 20px; text-align: center; border-radius: 8px;">Item 2</div>
53
- <div style="background: #e8f5e9; padding: 20px; text-align: center; border-radius: 8px;">Item 3</div>
54
- <div style="background: #fff3e0; padding: 20px; text-align: center; border-radius: 8px;">Item 4</div>
55
- </rel-layout>
56
- `,
57
- };
58
-
59
- export default meta;
60
- type Story = StoryObj;
61
-
62
- /**
63
- * Default 4-column responsive grid
64
- */
65
- export const Default: Story = {
66
- args: {
67
- gap: '1rem',
68
- columns: 4,
69
- responsive: true,
70
- },
71
- };
72
-
73
- /**
74
- * 2-column grid layout
75
- */
76
- export const TwoColumns: Story = {
77
- render: () => html`
78
- <rel-layout columns="2" gap="1.5rem">
79
- <div style="background: var(--rel-colors-blue-tertiary); color: white; padding: 24px; border-radius: 8px;">
80
- <h3 style="margin: 0 0 8px;">Column 1</h3>
81
- <p style="margin: 0;">Content in first column</p>
82
- </div>
83
- <div style="background: var(--rel-colors-green-success); color: white; padding: 24px; border-radius: 8px;">
84
- <h3 style="margin: 0 0 8px;">Column 2</h3>
85
- <p style="margin: 0;">Content in second column</p>
86
- </div>
87
- </rel-layout>
88
- `,
89
- };
90
-
91
- /**
92
- * 3-column grid layout
93
- */
94
- export const ThreeColumns: Story = {
95
- render: () => html`
96
- <rel-layout columns="3" gap="1rem">
97
- <div style="background: #e3f2fd; padding: 20px; text-align: center; border-radius: 8px; min-height: 100px; display: flex; align-items: center; justify-content: center;">Card 1</div>
98
- <div style="background: #f3e5f5; padding: 20px; text-align: center; border-radius: 8px; min-height: 100px; display: flex; align-items: center; justify-content: center;">Card 2</div>
99
- <div style="background: #e8f5e9; padding: 20px; text-align: center; border-radius: 8px; min-height: 100px; display: flex; align-items: center; justify-content: center;">Card 3</div>
100
- <div style="background: #fff3e0; padding: 20px; text-align: center; border-radius: 8px; min-height: 100px; display: flex; align-items: center; justify-content: center;">Card 4</div>
101
- <div style="background: #fce4ec; padding: 20px; text-align: center; border-radius: 8px; min-height: 100px; display: flex; align-items: center; justify-content: center;">Card 5</div>
102
- <div style="background: #e0f2f1; padding: 20px; text-align: center; border-radius: 8px; min-height: 100px; display: flex; align-items: center; justify-content: center;">Card 6</div>
103
- </rel-layout>
104
- `,
105
- };
106
-
107
- /**
108
- * 4-column grid layout (default)
109
- */
110
- export const FourColumns: Story = {
111
- render: () => html`
112
- <rel-layout columns="4" gap="1rem">
113
- ${Array.from({ length: 8 }, (_, i) => html`
114
- <div style="background: var(--rel-colors-gray-border); padding: 20px; text-align: center; border-radius: 8px; min-height: 80px; display: flex; align-items: center; justify-content: center; color: var(--rel-colors-gray-primary);">
115
- Item ${i + 1}
116
- </div>
117
- `)}
118
- </rel-layout>
119
- `,
120
- };
121
-
122
- /**
123
- * 6-column grid layout
124
- */
125
- export const SixColumns: Story = {
126
- render: () => html`
127
- <rel-layout columns="6" gap="0.75rem">
128
- ${Array.from({ length: 12 }, (_, i) => html`
129
- <div style="background: var(--rel-colors-blue-tertiary); color: white; padding: 16px; text-align: center; border-radius: 6px; min-height: 60px; display: flex; align-items: center; justify-content: center; font-size: 12px;">
130
- ${i + 1}
131
- </div>
132
- `)}
133
- </rel-layout>
134
- `,
135
- };
136
-
137
- /**
138
- * Custom gap spacing
139
- */
140
- export const CustomGap: Story = {
141
- render: () => html`
142
- <div style="display: flex; flex-direction: column; gap: 32px;">
143
- <div>
144
- <h4 style="margin-bottom: 16px; color: var(--rel-colors-gray-heading);">Small Gap (0.5rem)</h4>
145
- <rel-layout columns="4" gap="0.5rem">
146
- ${Array.from({ length: 4 }, (_, i) => html`
147
- <div style="background: #e3f2fd; padding: 16px; text-align: center; border-radius: 6px;">Item ${i + 1}</div>
148
- `)}
149
- </rel-layout>
150
- </div>
151
-
152
- <div>
153
- <h4 style="margin-bottom: 16px; color: var(--rel-colors-gray-heading);">Medium Gap (1rem)</h4>
154
- <rel-layout columns="4" gap="1rem">
155
- ${Array.from({ length: 4 }, (_, i) => html`
156
- <div style="background: #f3e5f5; padding: 16px; text-align: center; border-radius: 6px;">Item ${i + 1}</div>
157
- `)}
158
- </rel-layout>
159
- </div>
160
-
161
- <div>
162
- <h4 style="margin-bottom: 16px; color: var(--rel-colors-gray-heading);">Large Gap (2rem)</h4>
163
- <rel-layout columns="4" gap="2rem">
164
- ${Array.from({ length: 4 }, (_, i) => html`
165
- <div style="background: #e8f5e9; padding: 16px; text-align: center; border-radius: 6px;">Item ${i + 1}</div>
166
- `)}
167
- </rel-layout>
168
- </div>
169
- </div>
170
- `,
171
- };
172
-
173
- /**
174
- * Non-responsive grid (responsive=false)
175
- */
176
- export const NonResponsive: Story = {
177
- render: () => html`
178
- <div>
179
- <p style="color: var(--rel-colors-gray-primary); margin-bottom: 16px;">
180
- <strong>Note:</strong> This grid will maintain 4 columns on all screen sizes (resize window to test)
181
- </p>
182
- <rel-layout columns="4" gap="1rem" responsive="false">
183
- ${Array.from({ length: 8 }, (_, i) => html`
184
- <div style="background: var(--rel-colors-yellow-pending); padding: 20px; text-align: center; border-radius: 8px; min-height: 80px; display: flex; align-items: center; justify-content: center; color: var(--rel-colors-black);">
185
- Item ${i + 1}
186
- </div>
187
- `)}
188
- </rel-layout>
189
- </div>
190
- `,
191
- };
192
-
193
- /**
194
- * Dashboard layout example
195
- */
196
- export const DashboardLayout: Story = {
197
- render: () => html`
198
- <rel-layout columns="4" gap="1.5rem">
199
- <!-- Main stat cards -->
200
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
201
- <div style="color: var(--rel-colors-gray-placeholder); font-size: 14px; margin-bottom: 8px;">Total Users</div>
202
- <div style="font-size: 32px; font-weight: 700; color: var(--rel-colors-blue-tertiary);">1,234</div>
203
- <div style="color: var(--rel-colors-green-success); font-size: 12px; margin-top: 8px;">↑ 12% this month</div>
204
- </div>
205
-
206
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
207
- <div style="color: var(--rel-colors-gray-placeholder); font-size: 14px; margin-bottom: 8px;">Revenue</div>
208
- <div style="font-size: 32px; font-weight: 700; color: var(--rel-colors-green-success);">$56.7k</div>
209
- <div style="color: var(--rel-colors-green-success); font-size: 12px; margin-top: 8px;">↑ 8% this month</div>
210
- </div>
211
-
212
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
213
- <div style="color: var(--rel-colors-gray-placeholder); font-size: 14px; margin-bottom: 8px;">Active Sessions</div>
214
- <div style="font-size: 32px; font-weight: 700; color: var(--rel-colors-yellow-pending);">89</div>
215
- <div style="color: var(--rel-colors-gray-placeholder); font-size: 12px; margin-top: 8px;">Currently online</div>
216
- </div>
217
-
218
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
219
- <div style="color: var(--rel-colors-gray-placeholder); font-size: 14px; margin-bottom: 8px;">Conversion Rate</div>
220
- <div style="font-size: 32px; font-weight: 700; color: var(--rel-colors-blue-tertiary);">3.24%</div>
221
- <div style="color: var(--rel-colors-red-secondary); font-size: 12px; margin-top: 8px;">↓ 2% this month</div>
222
- </div>
223
- </rel-layout>
224
- `,
225
- };
226
-
227
- /**
228
- * Product grid example
229
- */
230
- export const ProductGrid: Story = {
231
- render: () => html`
232
- <rel-layout columns="4" gap="1.5rem">
233
- ${Array.from({ length: 8 }, (_, i) => html`
234
- <div style="background: white; border-radius: 12px; overflow: hidden; box-shadow: var(--rel-shadows-shadow-200);">
235
- <div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); height: 160px; display: flex; align-items: center; justify-content: center; color: white; font-size: 48px; font-weight: 700;">
236
- ${i + 1}
237
- </div>
238
- <div style="padding: 16px;">
239
- <h4 style="margin: 0 0 8px; color: var(--rel-colors-gray-heading); font-size: 16px;">Product ${i + 1}</h4>
240
- <p style="margin: 0 0 12px; color: var(--rel-colors-gray-placeholder); font-size: 14px;">Product description goes here</p>
241
- <div style="font-size: 20px; font-weight: 700; color: var(--rel-colors-blue-tertiary);">$${(i + 1) * 10}.99</div>
242
- </div>
243
- </div>
244
- `)}
245
- </rel-layout>
246
- `,
247
- };
248
-
249
- /**
250
- * Image gallery example
251
- */
252
- export const ImageGallery: Story = {
253
- render: () => html`
254
- <rel-layout columns="3" gap="1rem">
255
- ${Array.from({ length: 9 }, (_, i) => {
256
- const colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A', '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E2', '#F8B739'];
257
- return html`
258
- <div style="background: ${colors[i]}; aspect-ratio: 1; border-radius: 12px; display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; font-weight: 700; box-shadow: var(--rel-shadows-shadow-100);">
259
- ${i + 1}
260
- </div>
261
- `;
262
- })}
263
- </rel-layout>
264
- `,
265
- };
266
-
267
- /**
268
- * Responsive breakpoints demonstration
269
- */
270
- export const ResponsiveBreakpoints: Story = {
271
- render: () => html`
272
- <div>
273
- <div style="background: var(--rel-colors-blue-tertiary); color: white; padding: 16px; border-radius: 8px; margin-bottom: 16px;">
274
- <strong>Responsive Behavior:</strong>
275
- <ul style="margin: 8px 0 0; padding-left: 20px; font-size: 14px;">
276
- <li>Desktop (>1024px): 4 columns</li>
277
- <li>Tablet (≤1024px): 3 columns</li>
278
- <li>Mobile (≤768px): 2 columns</li>
279
- <li>Small Mobile (≤480px): 1 column</li>
280
- </ul>
281
- <p style="margin: 8px 0 0; font-size: 13px; opacity: 0.9;">Resize your browser window to see the layout adapt!</p>
282
- </div>
283
- <rel-layout columns="4" gap="1rem" responsive>
284
- ${Array.from({ length: 8 }, (_, i) => html`
285
- <div style="background: var(--rel-colors-gray-border); padding: 20px; text-align: center; border-radius: 8px; min-height: 100px; display: flex; align-items: center; justify-content: center; color: var(--rel-colors-gray-primary); font-weight: 600;">
286
- Item ${i + 1}
287
- </div>
288
- `)}
289
- </rel-layout>
290
- </div>
291
- `,
292
- };
293
-
294
- /**
295
- * Mixed content layout
296
- */
297
- export const MixedContent: Story = {
298
- render: () => html`
299
- <rel-layout columns="3" gap="1.5rem">
300
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
301
- <h3 style="margin: 0 0 12px; color: var(--rel-colors-gray-heading);">Card with Button</h3>
302
- <p style="margin: 0 0 16px; color: var(--rel-colors-gray-primary); font-size: 14px;">This card contains a button component inside the grid.</p>
303
- <rel-button variant="primary" size="medium">Click Me</rel-button>
304
- </div>
305
-
306
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
307
- <h3 style="margin: 0 0 12px; color: var(--rel-colors-gray-heading);">Card with Chips</h3>
308
- <div style="display: flex; gap: 8px; flex-wrap: wrap;">
309
- <rel-chip label="Design" tone="blue"></rel-chip>
310
- <rel-chip label="Development" tone="green"></rel-chip>
311
- <rel-chip label="Testing" tone="yellow"></rel-chip>
312
- </div>
313
- </div>
314
-
315
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
316
- <h3 style="margin: 0 0 12px; color: var(--rel-colors-gray-heading);">Card with Avatar</h3>
317
- <div style="display: flex; align-items: center; gap: 12px;">
318
- <rel-avatar size="md" type="text" text="JD"></rel-avatar>
319
- <div>
320
- <div style="font-weight: 600; color: var(--rel-colors-gray-heading);">John Doe</div>
321
- <div style="font-size: 13px; color: var(--rel-colors-gray-placeholder);">Developer</div>
322
- </div>
323
- </div>
324
- </div>
325
- </rel-layout>
326
- `,
327
- };
328
-
329
- /**
330
- * 5-column grid layout
331
- */
332
- export const FiveColumns: Story = {
333
- render: () => html`
334
- <rel-layout columns="5" gap="1rem">
335
- ${Array.from({ length: 10 }, (_, i) => html`
336
- <div style="background: var(--rel-colors-green-success); color: white; padding: 16px; text-align: center; border-radius: 8px; min-height: 80px; display: flex; align-items: center; justify-content: center; font-weight: 600;">
337
- ${i + 1}
338
- </div>
339
- `)}
340
- </rel-layout>
341
- `,
342
- };
343
-
344
- /**
345
- * Gap variations comparison
346
- */
347
- export const GapVariations: Story = {
348
- render: () => html`
349
- <div style="display: flex; flex-direction: column; gap: 48px;">
350
- <div>
351
- <h4 style="margin-bottom: 16px; color: var(--rel-colors-gray-heading);">No Gap (0)</h4>
352
- <rel-layout columns="4" gap="0">
353
- ${Array.from({ length: 4 }, (_, i) => html`
354
- <div style="background: #e3f2fd; padding: 16px; text-align: center;">Item ${i + 1}</div>
355
- `)}
356
- </rel-layout>
357
- </div>
358
-
359
- <div>
360
- <h4 style="margin-bottom: 16px; color: var(--rel-colors-gray-heading);">Extra Small Gap (0.25rem)</h4>
361
- <rel-layout columns="4" gap="0.25rem">
362
- ${Array.from({ length: 4 }, (_, i) => html`
363
- <div style="background: #f3e5f5; padding: 16px; text-align: center;">Item ${i + 1}</div>
364
- `)}
365
- </rel-layout>
366
- </div>
367
-
368
- <div>
369
- <h4 style="margin-bottom: 16px; color: var(--rel-colors-gray-heading);">Extra Large Gap (3rem)</h4>
370
- <rel-layout columns="4" gap="3rem">
371
- ${Array.from({ length: 4 }, (_, i) => html`
372
- <div style="background: #e8f5e9; padding: 16px; text-align: center;">Item ${i + 1}</div>
373
- `)}
374
- </rel-layout>
375
- </div>
376
-
377
- <div>
378
- <h4 style="margin-bottom: 16px; color: var(--rel-colors-gray-heading);">Pixel Gap (32px)</h4>
379
- <rel-layout columns="4" gap="32px">
380
- ${Array.from({ length: 4 }, (_, i) => html`
381
- <div style="background: #fff3e0; padding: 16px; text-align: center;">Item ${i + 1}</div>
382
- `)}
383
- </rel-layout>
384
- </div>
385
- </div>
386
- `,
387
- };
388
-
389
- /**
390
- * Nested layouts for complex designs
391
- */
392
- export const NestedLayouts: Story = {
393
- render: () => html`
394
- <rel-layout columns="2" gap="1.5rem">
395
- <!-- Left column with nested grid -->
396
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
397
- <h3 style="margin: 0 0 16px; color: var(--rel-colors-gray-heading);">Nested Grid</h3>
398
- <rel-layout columns="2" gap="0.75rem">
399
- ${Array.from({ length: 4 }, (_, i) => html`
400
- <div style="background: var(--rel-colors-blue-tertiary); color: white; padding: 16px; text-align: center; border-radius: 6px; font-size: 14px;">
401
- Nested ${i + 1}
402
- </div>
403
- `)}
404
- </rel-layout>
405
- </div>
406
-
407
- <!-- Right column with nested grid -->
408
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
409
- <h3 style="margin: 0 0 16px; color: var(--rel-colors-gray-heading);">3-Column Nested</h3>
410
- <rel-layout columns="3" gap="0.5rem">
411
- ${Array.from({ length: 6 }, (_, i) => html`
412
- <div style="background: var(--rel-colors-green-success); color: white; padding: 12px; text-align: center; border-radius: 6px; font-size: 12px;">
413
- ${i + 1}
414
- </div>
415
- `)}
416
- </rel-layout>
417
- </div>
418
-
419
- <!-- Full width nested example -->
420
- <div style="grid-column: 1 / -1; background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
421
- <h3 style="margin: 0 0 16px; color: var(--rel-colors-gray-heading);">Full Width with 4-Column Nested Grid</h3>
422
- <rel-layout columns="4" gap="1rem">
423
- ${Array.from({ length: 8 }, (_, i) => html`
424
- <div style="background: var(--rel-colors-yellow-pending); padding: 20px; text-align: center; border-radius: 8px; color: var(--rel-colors-black); font-weight: 600;">
425
- Item ${i + 1}
426
- </div>
427
- `)}
428
- </rel-layout>
429
- </div>
430
- </rel-layout>
431
- `,
432
- };
433
-
434
- /**
435
- * Admin dashboard with mixed grid sections
436
- */
437
- export const AdminDashboard: Story = {
438
- render: () => html`
439
- <div style="display: flex; flex-direction: column; gap: 24px;">
440
- <!-- Header stats - 4 columns -->
441
- <rel-layout columns="4" gap="1.5rem">
442
- <div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-300);">
443
- <div style="font-size: 14px; opacity: 0.9; margin-bottom: 8px;">Total Revenue</div>
444
- <div style="font-size: 32px; font-weight: 700;">$124.5k</div>
445
- <div style="font-size: 12px; opacity: 0.8; margin-top: 8px;">+14% from last month</div>
446
- </div>
447
-
448
- <div style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); color: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-300);">
449
- <div style="font-size: 14px; opacity: 0.9; margin-bottom: 8px;">New Customers</div>
450
- <div style="font-size: 32px; font-weight: 700;">2,543</div>
451
- <div style="font-size: 12px; opacity: 0.8; margin-top: 8px;">+8% from last month</div>
452
- </div>
453
-
454
- <div style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); color: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-300);">
455
- <div style="font-size: 14px; opacity: 0.9; margin-bottom: 8px;">Active Projects</div>
456
- <div style="font-size: 32px; font-weight: 700;">127</div>
457
- <div style="font-size: 12px; opacity: 0.8; margin-top: 8px;">15 completed this week</div>
458
- </div>
459
-
460
- <div style="background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%); color: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-300);">
461
- <div style="font-size: 14px; opacity: 0.9; margin-bottom: 8px;">Team Members</div>
462
- <div style="font-size: 32px; font-weight: 700;">48</div>
463
- <div style="font-size: 12px; opacity: 0.8; margin-top: 8px;">4 new this month</div>
464
- </div>
465
- </rel-layout>
466
-
467
- <!-- Main content - 3 columns -->
468
- <rel-layout columns="3" gap="1.5rem">
469
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
470
- <h4 style="margin: 0 0 16px; color: var(--rel-colors-gray-heading);">Recent Activity</h4>
471
- <div style="display: flex; flex-direction: column; gap: 12px;">
472
- ${Array.from({ length: 4 }, (_, i) => html`
473
- <div style="padding: 12px; background: var(--rel-colors-gray-bg); border-radius: 8px; font-size: 13px; color: var(--rel-colors-gray-primary);">
474
- Activity item ${i + 1}
475
- </div>
476
- `)}
477
- </div>
478
- </div>
479
-
480
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
481
- <h4 style="margin: 0 0 16px; color: var(--rel-colors-gray-heading);">Performance</h4>
482
- <div style="display: flex; flex-direction: column; gap: 12px;">
483
- <div style="display: flex; justify-content: space-between; align-items: center;">
484
- <span style="font-size: 14px; color: var(--rel-colors-gray-primary);">CPU Usage</span>
485
- <span style="font-weight: 600; color: var(--rel-colors-blue-tertiary);">45%</span>
486
- </div>
487
- <div style="display: flex; justify-content: space-between; align-items: center;">
488
- <span style="font-size: 14px; color: var(--rel-colors-gray-primary);">Memory</span>
489
- <span style="font-weight: 600; color: var(--rel-colors-green-success);">62%</span>
490
- </div>
491
- <div style="display: flex; justify-content: space-between; align-items: center;">
492
- <span style="font-size: 14px; color: var(--rel-colors-gray-primary);">Storage</span>
493
- <span style="font-weight: 600; color: var(--rel-colors-yellow-pending);">78%</span>
494
- </div>
495
- <div style="display: flex; justify-content: space-between; align-items: center;">
496
- <span style="font-size: 14px; color: var(--rel-colors-gray-primary);">Network</span>
497
- <span style="font-weight: 600; color: var(--rel-colors-red-secondary);">92%</span>
498
- </div>
499
- </div>
500
- </div>
501
-
502
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
503
- <h4 style="margin: 0 0 16px; color: var(--rel-colors-gray-heading);">Quick Actions</h4>
504
- <div style="display: flex; flex-direction: column; gap: 8px;">
505
- <rel-button variant="primary" size="medium" style="width: 100%;">New Project</rel-button>
506
- <rel-button variant="secondary" size="medium" style="width: 100%;">Add User</rel-button>
507
- <rel-button variant="outline" size="medium" style="width: 100%;">Generate Report</rel-button>
508
- </div>
509
- </div>
510
- </rel-layout>
511
- </div>
512
- `,
513
- };
514
-
515
- /**
516
- * E-commerce product showcase
517
- */
518
- export const EcommerceShowcase: Story = {
519
- render: () => html`
520
- <rel-layout columns="4" gap="2rem">
521
- ${Array.from({ length: 12 }, (_, i) => {
522
- const gradients = [
523
- 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
524
- 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)',
525
- 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)',
526
- 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)',
527
- 'linear-gradient(135deg, #fa709a 0%, #fee140 100%)',
528
- 'linear-gradient(135deg, #30cfd0 0%, #330867 100%)',
529
- 'linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)',
530
- 'linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%)',
531
- 'linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%)',
532
- 'linear-gradient(135deg, #ff6e7f 0%, #bfe9ff 100%)',
533
- 'linear-gradient(135deg, #e0c3fc 0%, #8ec5fc 100%)',
534
- 'linear-gradient(135deg, #f8b500 0%, #fceabb 100%)',
535
- ];
536
- return html`
537
- <div style="background: white; border-radius: 16px; overflow: hidden; box-shadow: var(--rel-shadows-shadow-300); transition: transform 0.2s;">
538
- <div style="background: ${gradients[i]}; height: 200px; display: flex; align-items: center; justify-content: center; color: white; font-size: 48px; font-weight: 700; text-shadow: 0 2px 4px rgba(0,0,0,0.1);">
539
- ${i + 1}
540
- </div>
541
- <div style="padding: 20px;">
542
- <h4 style="margin: 0 0 8px; color: var(--rel-colors-gray-heading); font-size: 18px; font-weight: 600;">Premium Product ${i + 1}</h4>
543
- <p style="margin: 0 0 12px; color: var(--rel-colors-gray-placeholder); font-size: 14px; line-height: 1.5;">High quality product with amazing features</p>
544
- <div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px;">
545
- <div style="font-size: 24px; font-weight: 700; color: var(--rel-colors-blue-tertiary);">$${(i + 1) * 49}.99</div>
546
- <div style="display: flex; gap: 4px; align-items: center; color: var(--rel-colors-yellow-pending);">
547
- <span style="font-size: 16px;">★★★★★</span>
548
- <span style="font-size: 12px; color: var(--rel-colors-gray-placeholder);">(${Math.floor(Math.random() * 500) + 50})</span>
549
- </div>
550
- </div>
551
- <rel-button variant="primary" size="small" style="width: 100%;">Add to Cart</rel-button>
552
- </div>
553
- </div>
554
- `;
555
- })}
556
- </rel-layout>
557
- `,
558
- };
559
-
560
- /**
561
- * Team member cards gallery
562
- */
563
- export const TeamGallery: Story = {
564
- render: () => html`
565
- <rel-layout columns="5" gap="1.5rem">
566
- ${Array.from({ length: 10 }, (_, i) => {
567
- const names = ['Alice Johnson', 'Bob Smith', 'Carol Williams', 'David Brown', 'Emma Davis', 'Frank Miller', 'Grace Wilson', 'Henry Moore', 'Iris Taylor', 'Jack Anderson'];
568
- const roles = ['Frontend Dev', 'Backend Dev', 'UI Designer', 'DevOps', 'Product Manager', 'UX Designer', 'QA Engineer', 'Data Scientist', 'Tech Lead', 'Scrum Master'];
569
- const colors = ['#667eea', '#f093fb', '#4facfe', '#43e97b', '#fa709a', '#30cfd0', '#a8edea', '#ff9a9e', '#ffecd2', '#ff6e7f'];
570
-
571
- return html`
572
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200); text-align: center;">
573
- <div style="background: ${colors[i]}; width: 80px; height: 80px; border-radius: 50%; margin: 0 auto 16px; display: flex; align-items: center; justify-content: center; color: white; font-size: 32px; font-weight: 700;">
574
- ${names[i].split(' ').map(n => n[0]).join('')}
575
- </div>
576
- <h4 style="margin: 0 0 4px; color: var(--rel-colors-gray-heading); font-size: 16px; font-weight: 600;">${names[i]}</h4>
577
- <p style="margin: 0 0 12px; color: var(--rel-colors-gray-placeholder); font-size: 13px;">${roles[i]}</p>
578
- <div style="display: flex; gap: 8px; justify-content: center;">
579
- <div style="width: 32px; height: 32px; background: var(--rel-colors-gray-bg); border-radius: 6px; display: flex; align-items: center; justify-content: center; cursor: pointer;">
580
- <span style="font-size: 14px;">💼</span>
581
- </div>
582
- <div style="width: 32px; height: 32px; background: var(--rel-colors-gray-bg); border-radius: 6px; display: flex; align-items: center; justify-content: center; cursor: pointer;">
583
- <span style="font-size: 14px;">✉️</span>
584
- </div>
585
- </div>
586
- </div>
587
- `;
588
- })}
589
- </rel-layout>
590
- `,
591
- };
592
-
593
- /**
594
- * Asymmetric grid with spanning elements
595
- */
596
- export const AsymmetricGrid: Story = {
597
- render: () => html`
598
- <rel-layout columns="4" gap="1.5rem">
599
- <!-- Wide feature card -->
600
- <div style="grid-column: span 2; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 40px; border-radius: 16px; box-shadow: var(--rel-shadows-shadow-300);">
601
- <h2 style="margin: 0 0 12px; font-size: 32px; font-weight: 700;">Featured Item</h2>
602
- <p style="margin: 0 0 20px; font-size: 16px; opacity: 0.95; line-height: 1.6;">This is a featured card that spans 2 columns, making it stand out from the rest of the grid.</p>
603
- <rel-button variant="secondary" size="large">Learn More</rel-button>
604
- </div>
605
-
606
- <!-- Regular cards -->
607
- ${Array.from({ length: 2 }, (_, i) => html`
608
- <div style="background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
609
- <h4 style="margin: 0 0 12px; color: var(--rel-colors-gray-heading);">Card ${i + 1}</h4>
610
- <p style="margin: 0; color: var(--rel-colors-gray-primary); font-size: 14px;">Regular sized card content</p>
611
- </div>
612
- `)}
613
-
614
- <!-- Small cards -->
615
- ${Array.from({ length: 4 }, (_, i) => html`
616
- <div style="background: white; padding: 20px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200); text-align: center;">
617
- <div style="font-size: 36px; margin-bottom: 8px;">${['📊', '📈', '💡', '🎯'][i]}</div>
618
- <div style="font-size: 14px; font-weight: 600; color: var(--rel-colors-gray-heading);">Metric ${i + 1}</div>
619
- <div style="font-size: 24px; font-weight: 700; color: var(--rel-colors-blue-tertiary); margin-top: 8px;">${Math.floor(Math.random() * 1000)}</div>
620
- </div>
621
- `)}
622
-
623
- <!-- Wide card at bottom -->
624
- <div style="grid-column: span 3; background: white; padding: 32px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
625
- <h3 style="margin: 0 0 16px; color: var(--rel-colors-gray-heading); font-size: 24px;">Extended Content Area</h3>
626
- <p style="margin: 0; color: var(--rel-colors-gray-primary); line-height: 1.6;">This card spans 3 columns and can contain more detailed information or complex layouts. Perfect for charts, tables, or detailed content.</p>
627
- </div>
628
-
629
- <!-- Single card -->
630
- <div style="background: var(--rel-colors-green-success); color: white; padding: 32px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200); display: flex; align-items: center; justify-content: center; text-align: center;">
631
- <div>
632
- <div style="font-size: 48px; font-weight: 700; margin-bottom: 8px;">100%</div>
633
- <div style="font-size: 14px; opacity: 0.95;">Complete</div>
634
- </div>
635
- </div>
636
- </rel-layout>
637
- `,
638
- };
639
-
640
- /**
641
- * Content management system layout
642
- */
643
- export const CMSLayout: Story = {
644
- render: () => html`
645
- <div style="display: flex; flex-direction: column; gap: 24px;">
646
- <!-- Top navigation stats -->
647
- <rel-layout columns="6" gap="1rem">
648
- ${['Posts', 'Pages', 'Media', 'Comments', 'Users', 'Settings'].map((item, i) => {
649
- const counts = [142, 28, 1547, 89, 64, 12];
650
- return html`
651
- <div style="background: white; padding: 20px; border-radius: 10px; box-shadow: var(--rel-shadows-shadow-200); text-align: center; cursor: pointer; transition: transform 0.2s; border: 2px solid transparent;"
652
- onmouseover="this.style.transform='translateY(-4px)'; this.style.borderColor='var(--rel-colors-blue-tertiary)'"
653
- onmouseout="this.style.transform='translateY(0)'; this.style.borderColor='transparent'">
654
- <div style="font-size: 12px; color: var(--rel-colors-gray-placeholder); margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.5px;">${item}</div>
655
- <div style="font-size: 28px; font-weight: 700; color: var(--rel-colors-gray-heading);">${counts[i]}</div>
656
- </div>
657
- `;
658
- })}
659
- </rel-layout>
660
-
661
- <!-- Main content area -->
662
- <rel-layout columns="3" gap="1.5rem">
663
- <!-- Recent posts -->
664
- <div style="grid-column: span 2; background: white; padding: 24px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
665
- <h3 style="margin: 0 0 20px; color: var(--rel-colors-gray-heading); font-size: 20px; font-weight: 600;">Recent Posts</h3>
666
- <div style="display: flex; flex-direction: column; gap: 16px;">
667
- ${Array.from({ length: 5 }, (_, i) => html`
668
- <div style="display: flex; gap: 16px; padding: 16px; background: var(--rel-colors-gray-bg); border-radius: 8px;">
669
- <div style="width: 80px; height: 80px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 8px; flex-shrink: 0;"></div>
670
- <div style="flex: 1;">
671
- <h4 style="margin: 0 0 8px; color: var(--rel-colors-gray-heading); font-size: 16px; font-weight: 600;">Blog Post Title ${i + 1}</h4>
672
- <p style="margin: 0 0 8px; color: var(--rel-colors-gray-primary); font-size: 13px; line-height: 1.5;">Brief excerpt from the blog post content...</p>
673
- <div style="display: flex; gap: 16px; font-size: 12px; color: var(--rel-colors-gray-placeholder);">
674
- <span>2 days ago</span>
675
- <span>•</span>
676
- <span>Category ${i + 1}</span>
677
- </div>
678
- </div>
679
- <div style="display: flex; gap: 8px; align-items: flex-start;">
680
- <rel-button variant="outline" size="small">Edit</rel-button>
681
- </div>
682
- </div>
683
- `)}
684
- </div>
685
- </div>
686
-
687
- <!-- Sidebar -->
688
- <div style="display: flex; flex-direction: column; gap: 16px;">
689
- <div style="background: white; padding: 20px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
690
- <h4 style="margin: 0 0 16px; color: var(--rel-colors-gray-heading); font-size: 16px; font-weight: 600;">Quick Actions</h4>
691
- <div style="display: flex; flex-direction: column; gap: 8px;">
692
- <rel-button variant="primary" size="medium" style="width: 100%;">New Post</rel-button>
693
- <rel-button variant="secondary" size="medium" style="width: 100%;">New Page</rel-button>
694
- <rel-button variant="outline" size="medium" style="width: 100%;">Upload Media</rel-button>
695
- </div>
696
- </div>
697
-
698
- <div style="background: white; padding: 20px; border-radius: 12px; box-shadow: var(--rel-shadows-shadow-200);">
699
- <h4 style="margin: 0 0 16px; color: var(--rel-colors-gray-heading); font-size: 16px; font-weight: 600;">Categories</h4>
700
- <div style="display: flex; flex-direction: column; gap: 8px;">
701
- ${['Technology', 'Design', 'Business', 'Marketing'].map(cat => html`
702
- <div style="display: flex; justify-content: space-between; padding: 8px; background: var(--rel-colors-gray-bg); border-radius: 6px; font-size: 14px;">
703
- <span style="color: var(--rel-colors-gray-heading);">${cat}</span>
704
- <span style="color: var(--rel-colors-gray-placeholder);">${Math.floor(Math.random() * 50)}</span>
705
- </div>
706
- `)}
707
- </div>
708
- </div>
709
- </div>
710
- </rel-layout>
711
- </div>
712
- `,
713
- };