@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.
- package/dist/components/rel-accordion/README.md +132 -0
- package/dist/components/rel-accordion/rel-accordion.ts +61 -29
- package/dist/components/rel-alert/README.md +141 -0
- package/dist/components/rel-alert/rel-alert.ts +110 -67
- package/dist/components/rel-avatar/README.md +119 -0
- package/dist/components/rel-avatar/rel-avatar.ts +8 -15
- package/dist/components/rel-badge/README.md +86 -0
- package/dist/components/rel-badge/rel-badge.ts +28 -21
- package/dist/components/rel-breadcrumb/README.md +102 -0
- package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +24 -18
- package/dist/components/rel-button/README.md +130 -0
- package/dist/components/rel-button/rel-button.ts +39 -59
- package/dist/components/rel-calendar/README.md +109 -0
- package/dist/components/rel-calendar/index.ts +1 -0
- package/dist/components/rel-calendar/rel-calendar.ts +467 -0
- package/dist/components/rel-card/README.md +94 -0
- package/dist/components/rel-card/rel-card.ts +21 -11
- package/dist/components/rel-cardmedia/README.md +127 -0
- package/dist/components/rel-cardmedia/rel-cardmedia.ts +22 -18
- package/dist/components/rel-carousel/README.md +166 -0
- package/dist/components/rel-carousel/index.ts +1 -0
- package/dist/components/rel-carousel/rel-carousel.ts +469 -0
- package/dist/components/rel-chart/README.md +286 -0
- package/dist/components/rel-chart/index.ts +1 -0
- package/dist/components/rel-chart/rel-chart.ts +736 -0
- package/dist/components/rel-checkbox/README.md +77 -0
- package/dist/components/rel-checkbox/rel-checkbox.ts +36 -45
- package/dist/components/rel-chip/README.md +114 -0
- package/dist/components/rel-chip/rel-chip.ts +47 -122
- package/dist/components/rel-container/README.md +99 -0
- package/dist/components/rel-container/rel-container.ts +1 -6
- package/dist/components/rel-date-picker/README.md +253 -0
- package/dist/components/rel-date-picker/index.ts +1 -0
- package/dist/components/rel-date-picker/rel-date-picker.ts +916 -0
- package/dist/components/rel-divider/README.md +100 -0
- package/dist/components/rel-divider/rel-divider.ts +37 -37
- package/dist/components/rel-drawer/README.md +200 -0
- package/dist/components/rel-drawer/index.ts +1 -0
- package/dist/components/rel-drawer/rel-drawer.ts +621 -0
- package/dist/components/rel-kbd/README.md +151 -0
- package/dist/components/rel-kbd/rel-kbd.ts +118 -0
- package/dist/components/rel-layout/README.md +88 -0
- package/dist/components/rel-layout/rel-layout.ts +12 -14
- package/dist/components/rel-menu/README.md +151 -0
- package/dist/components/rel-menu/rel-menu.ts +18 -10
- package/dist/components/rel-menubar/README.md +329 -0
- package/dist/components/rel-menubar/index.ts +2 -0
- package/dist/components/rel-menubar/rel-menubar-menu.ts +16 -0
- package/dist/components/rel-menubar/rel-menubar.ts +576 -0
- package/dist/components/rel-nav-menu/README.md +289 -0
- package/dist/components/rel-nav-menu/index.ts +3 -0
- package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +143 -0
- package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +53 -0
- package/dist/components/rel-nav-menu/rel-nav-menu.ts +331 -0
- package/dist/components/rel-navbar/README.md +126 -0
- package/dist/components/rel-navbar/rel-navbar.ts +91 -0
- package/dist/components/rel-otp/README.md +440 -0
- package/dist/components/rel-otp/index.ts +1 -0
- package/dist/components/rel-otp/rel-otp.ts +504 -0
- package/dist/components/rel-pagination/README.md +410 -0
- package/dist/components/rel-pagination/index.ts +1 -0
- package/dist/components/rel-pagination/rel-pagination.ts +376 -0
- package/dist/components/rel-popover/README.md +568 -0
- package/dist/components/rel-popover/index.ts +2 -0
- package/dist/components/rel-popover/rel-popover-content.ts +55 -0
- package/dist/components/rel-popover/rel-popover.ts +327 -0
- package/dist/components/rel-progress/README.md +110 -0
- package/dist/components/rel-progress/rel-progress.ts +58 -20
- package/dist/components/rel-quote-page/README.md +166 -0
- package/dist/components/rel-quote-page/rel-quote-page.ts +816 -0
- package/dist/components/rel-radio/README.md +120 -0
- package/dist/components/rel-radio/rel-radio.ts +41 -73
- package/dist/components/rel-resizable/README.md +140 -0
- package/dist/components/rel-resizable/index.ts +3 -0
- package/dist/components/rel-resizable/rel-resizable-group.ts +374 -0
- package/dist/components/rel-resizable/rel-resizable-handle.ts +149 -0
- package/dist/components/rel-resizable/rel-resizable-panel.ts +47 -0
- package/dist/components/rel-segmented-button/README.md +141 -0
- package/dist/components/rel-segmented-button/rel-segmented-button.ts +18 -13
- package/dist/components/rel-select/README.md +107 -0
- package/dist/components/rel-select/rel-select.ts +14 -14
- package/dist/components/rel-sheet/README.md +224 -0
- package/dist/components/rel-sheet/rel-sheet.ts +683 -0
- package/dist/components/rel-sidebar/README.md +209 -0
- package/dist/components/rel-sidebar/rel-sidebar.ts +1158 -0
- package/dist/components/rel-slider/README.md +135 -0
- package/dist/components/rel-slider/rel-slider.ts +19 -7
- package/dist/components/rel-snackbar/README.md +134 -0
- package/dist/components/rel-snackbar/rel-snackbar.ts +73 -2
- package/dist/components/rel-stepper/README.md +160 -0
- package/dist/components/rel-stepper/rel-stepper.ts +29 -8
- package/dist/components/rel-switch/README.md +102 -0
- package/dist/components/rel-switch/rel-switch.ts +22 -11
- package/dist/components/rel-tab/README.md +163 -0
- package/dist/components/rel-tab/rel-tab.ts +46 -22
- package/dist/components/rel-table/README.md +178 -0
- package/dist/components/rel-table/rel-table-body.ts +16 -0
- package/dist/components/rel-table/rel-table-caption.ts +22 -0
- package/dist/components/rel-table/rel-table-cell.ts +49 -0
- package/dist/components/rel-table/rel-table-footer.ts +18 -0
- package/dist/components/rel-table/rel-table-head.ts +33 -0
- package/dist/components/rel-table/rel-table-header.ts +16 -0
- package/dist/components/rel-table/rel-table-row.ts +32 -0
- package/dist/components/rel-table/rel-table.ts +47 -0
- package/dist/components/rel-textfield/README.md +90 -0
- package/dist/components/rel-textfield/rel-textfield.ts +37 -21
- package/dist/components/rel-toast/README.md +148 -0
- package/dist/components/rel-toast/rel-toast.ts +32 -14
- package/dist/components/rel-tooltip/README.md +103 -0
- package/dist/components/rel-tooltip/rel-tooltip.ts +9 -9
- package/dist/index.d.mts +846 -7
- package/dist/index.d.ts +846 -7
- package/dist/index.js +10860 -1803
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10820 -1809
- package/dist/index.mjs.map +1 -1
- package/dist/styles/vars.css +293 -183
- package/dist/vars-ITL2K3KO.css +294 -0
- package/package.json +2 -2
- package/dist/components/rel-accordion/rel-accordion.stories.ts +0 -313
- package/dist/components/rel-alert/rel-alert.stories.ts +0 -412
- package/dist/components/rel-avatar/rel-avatar.stories.ts +0 -327
- package/dist/components/rel-badge/rel-badge.stories.ts +0 -350
- package/dist/components/rel-breadcrumb/rel-breadcrumb.stories.ts +0 -306
- package/dist/components/rel-button/rel-button.stories.ts +0 -356
- package/dist/components/rel-card/rel-card.stories.ts +0 -299
- package/dist/components/rel-cardmedia/rel-cardmedia.stories.ts +0 -368
- package/dist/components/rel-checkbox/rel-checkbox.stories.ts +0 -414
- package/dist/components/rel-chip/rel-chip.stories.ts +0 -552
- package/dist/components/rel-container/rel-container.stories.ts +0 -239
- package/dist/components/rel-divider/rel-divider.stories.ts +0 -229
- package/dist/components/rel-layout/rel-layout.stories.ts +0 -713
- package/dist/components/rel-menu/rel-menu.stories.ts +0 -910
- package/dist/components/rel-progress/rel-progress.stories.ts +0 -817
- package/dist/components/rel-radio/rel-radio.stories.ts +0 -1048
- package/dist/components/rel-segmented-button/rel-segmented-button.stories.ts +0 -1079
- package/dist/components/rel-select/rel-select.stories.ts +0 -1201
- package/dist/components/rel-slider/rel-slider.stories.ts +0 -730
- package/dist/components/rel-snackbar/rel-snackbar.stories.ts +0 -808
- package/dist/components/rel-stepper/rel-stepper.stories.ts +0 -752
- package/dist/components/rel-switch/rel-switch.stories.ts +0 -441
- package/dist/components/rel-tab/rel-tab.stories.ts +0 -492
- package/dist/components/rel-textfield/rel-textfield.stories.ts +0 -710
- package/dist/components/rel-toast/rel-toast.stories.ts +0 -394
- 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
|
-
};
|