@tsiky/components-r19 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/AnnouncementPanel/FlexRowContainer.css +17 -17
- package/src/components/AnnouncementPanel/FlexRowContainer.stories.tsx +329 -329
- package/src/components/AnnouncementPanel/FlexRowContainer.tsx +24 -24
- package/src/components/AnnouncementPanel/ListBox/CounterListBox.css +56 -56
- package/src/components/AnnouncementPanel/ListBox/CounterListBox.stories.tsx +292 -292
- package/src/components/AnnouncementPanel/ListBox/CounterListBox.tsx +106 -106
- package/src/components/AnnouncementPanel/ListBox/SimpleListBox.css +57 -57
- package/src/components/AnnouncementPanel/ListBox/SimpleListBox.stories.tsx +189 -189
- package/src/components/AnnouncementPanel/ListBox/SimpleListBox.tsx +138 -138
- package/src/components/AnnouncementPanel/ListBox/TrendListBox.css +61 -61
- package/src/components/AnnouncementPanel/ListBox/TrendListBox.stories.tsx +257 -257
- package/src/components/AnnouncementPanel/ListBox/TrendListBox.tsx +90 -90
- package/src/components/AnnouncementPanel/ListBox/index.ts +3 -3
- package/src/components/AnnouncementPanel/ListContentContainer.css +23 -23
- package/src/components/AnnouncementPanel/ListContentContainer.stories.tsx +212 -212
- package/src/components/AnnouncementPanel/ListContentContainer.tsx +33 -33
- package/src/components/AnnouncementPanel/index.ts +3 -3
- package/src/components/Charts/area-chart-admission/AreaChartAdmission.tsx +7 -1
- package/src/components/Charts/bar-chart/BarChart.tsx +6 -2
- package/src/components/Charts/boxplot-chart/BoxPlotChart.tsx +114 -114
- package/src/components/Charts/mixed-chart/MixedChart.tsx +1 -1
- package/src/components/Charts/sankey-adaptation/sankey.tsx +70 -70
- package/src/components/DraggableSwitcher/DraggableSwitcherButton.tsx +58 -58
- package/src/components/DraggableSwitcher/context/useDraggableSwitcher.tsx +45 -45
- package/src/components/DraggableSwitcher/index.ts +2 -2
- package/src/components/DynamicInput/input/SelectInput.tsx +75 -75
- package/src/components/DynamicInput/input/assets/SelectInput.module.css +95 -95
- package/src/components/DynamicTable/AdvancedFilters.tsx +196 -196
- package/src/components/DynamicTable/ColumnSorter.tsx +185 -185
- package/src/components/DynamicTable/Pagination.tsx +115 -115
- package/src/components/DynamicTable/TableCell.tsx +38 -30
- package/src/components/DynamicTable/TableHeader.tsx +39 -34
- package/src/components/DynamicTable/TableauDynamique.module.css +79 -33
- package/src/components/DynamicTable/TableauDynamique.tsx +154 -154
- package/src/components/DynamicTable/filters/SelectFilter.tsx +69 -69
- package/src/components/DynamicTable/tools/tableTypes.ts +63 -63
- package/src/components/EntryControl/EntryControl.tsx +117 -117
- package/src/components/Grid/grid.css +285 -285
- package/src/components/MetricsPanel/MetricsPanel.tsx +37 -37
- package/src/components/MetricsPanel/renderers/CompactRenderer.tsx +1 -1
- package/src/components/NavItem/NavItem.tsx +58 -58
- package/src/components/PeriodRange/PeriodRange.module.css +158 -158
- package/src/components/PeriodRange/PeriodRange.tsx +130 -130
- package/src/components/SearchBar/SearchBar.css +40 -40
- package/src/components/TranslationKey/TranslationKey.css +272 -272
- package/src/components/TranslationKey/TranslationKey.tsx +8 -7
|
@@ -1,329 +1,329 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { ArrowUp, ArrowDown, TrendingUp, Users } from 'lucide-react';
|
|
3
|
-
import { FlexRowContainer } from './FlexRowContainer';
|
|
4
|
-
import { ListContentContainer } from './ListContentContainer';
|
|
5
|
-
import { CounterListBox } from './ListBox/CounterListBox';
|
|
6
|
-
import { SimpleListBox } from './ListBox/SimpleListBox';
|
|
7
|
-
import { TrendListBox } from './ListBox/TrendListBox';
|
|
8
|
-
|
|
9
|
-
const meta: Meta<typeof FlexRowContainer> = {
|
|
10
|
-
title: 'Components/FlexRowContainer',
|
|
11
|
-
component: FlexRowContainer,
|
|
12
|
-
parameters: {
|
|
13
|
-
layout: 'fullscreen',
|
|
14
|
-
docs: {
|
|
15
|
-
description: {
|
|
16
|
-
component:
|
|
17
|
-
'An adaptive flex container that allows children to take their natural size and wrap to new lines when needed.',
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
tags: ['autodocs'],
|
|
22
|
-
argTypes: {
|
|
23
|
-
gap: {
|
|
24
|
-
control: 'text',
|
|
25
|
-
description: 'Space between items',
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
export default meta;
|
|
31
|
-
type Story = StoryObj<typeof meta>;
|
|
32
|
-
|
|
33
|
-
export const AdaptiveDashboard: Story = {
|
|
34
|
-
name: 'Adaptive Dashboard',
|
|
35
|
-
args: {
|
|
36
|
-
gap: '1.5rem',
|
|
37
|
-
style: {
|
|
38
|
-
padding: '2rem',
|
|
39
|
-
background: '#f8fafc',
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
render: (args) => (
|
|
43
|
-
<FlexRowContainer {...args}>
|
|
44
|
-
{/* Small counter box */}
|
|
45
|
-
<ListContentContainer background='#0ea5e9'>
|
|
46
|
-
<CounterListBox title='Patients' data={[['63', 'Total']]} badgeColor='#0ea5e9' />
|
|
47
|
-
</ListContentContainer>
|
|
48
|
-
|
|
49
|
-
{/* Medium box with multiple lists */}
|
|
50
|
-
<ListContentContainer background='#0ea5e9'>
|
|
51
|
-
<SimpleListBox
|
|
52
|
-
title='Available beds'
|
|
53
|
-
data={[
|
|
54
|
-
['MED', '21 beds'],
|
|
55
|
-
['SURG', '2 beds'],
|
|
56
|
-
['ER', '12 beds'],
|
|
57
|
-
]}
|
|
58
|
-
/>
|
|
59
|
-
<SimpleListBox title='Overdue patients' data={['623152385 - MED', '623168542 - SURG']} />
|
|
60
|
-
<SimpleListBox title='Overdue patients' data={['623152385 - MED', '623168542 - SURG']} />
|
|
61
|
-
<SimpleListBox title='Overdue patients' data={['623152385 - MED', '623168542 - SURG']} />
|
|
62
|
-
</ListContentContainer>
|
|
63
|
-
|
|
64
|
-
{/* Large trend box */}
|
|
65
|
-
<ListContentContainer background='#0ea5e9'>
|
|
66
|
-
<TrendListBox
|
|
67
|
-
title='3h Trend'
|
|
68
|
-
items={[
|
|
69
|
-
{ label: 'MED', value: '+3', delta: 3, icon: <ArrowUp size={16} /> },
|
|
70
|
-
{ label: 'SURG', value: '-2', delta: -2, icon: <ArrowDown size={16} /> },
|
|
71
|
-
{ label: 'ER', value: '+5', delta: 5, icon: <ArrowUp size={16} /> },
|
|
72
|
-
{ label: 'PED', value: '+1', delta: 1, icon: <ArrowUp size={16} /> },
|
|
73
|
-
]}
|
|
74
|
-
/>
|
|
75
|
-
</ListContentContainer>
|
|
76
|
-
|
|
77
|
-
{/* Very wide box */}
|
|
78
|
-
<ListContentContainer background='#0ea5e9'>
|
|
79
|
-
<SimpleListBox
|
|
80
|
-
title='General information'
|
|
81
|
-
data={[
|
|
82
|
-
'All services are operating normally',
|
|
83
|
-
'Planned maintenance tonight at 10pm',
|
|
84
|
-
'Daily report available',
|
|
85
|
-
]}
|
|
86
|
-
/>
|
|
87
|
-
</ListContentContainer>
|
|
88
|
-
</FlexRowContainer>
|
|
89
|
-
),
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
export const MixedSizes: Story = {
|
|
93
|
-
name: 'Mixed Content Sizes',
|
|
94
|
-
args: {
|
|
95
|
-
gap: '1rem',
|
|
96
|
-
style: {
|
|
97
|
-
padding: '1.5rem',
|
|
98
|
-
background: '#f1f5f9',
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
render: (args) => (
|
|
102
|
-
<FlexRowContainer {...args}>
|
|
103
|
-
{/* Tiny box */}
|
|
104
|
-
<ListContentContainer background='#10b981'>
|
|
105
|
-
<CounterListBox title='Alerts' data={[['3', 'Critical']]} badgeColor='#ef4444' />
|
|
106
|
-
</ListContentContainer>
|
|
107
|
-
|
|
108
|
-
{/* Small box */}
|
|
109
|
-
<ListContentContainer background='#10b981'>
|
|
110
|
-
<TrendListBox
|
|
111
|
-
title='Stats'
|
|
112
|
-
items={[{ label: 'Up', value: '+5', icon: <ArrowUp size={14} /> }]}
|
|
113
|
-
/>
|
|
114
|
-
</ListContentContainer>
|
|
115
|
-
|
|
116
|
-
{/* Medium box */}
|
|
117
|
-
<ListContentContainer background='#10b981'>
|
|
118
|
-
<SimpleListBox
|
|
119
|
-
title='Status'
|
|
120
|
-
data={[
|
|
121
|
-
['System', 'Operational'],
|
|
122
|
-
['Database', 'Connected'],
|
|
123
|
-
]}
|
|
124
|
-
/>
|
|
125
|
-
</ListContentContainer>
|
|
126
|
-
|
|
127
|
-
{/* Large box */}
|
|
128
|
-
<ListContentContainer background='#10b981'>
|
|
129
|
-
<CounterListBox
|
|
130
|
-
title='Details'
|
|
131
|
-
data={[
|
|
132
|
-
['156', 'Orders processed'],
|
|
133
|
-
['42', 'New customers'],
|
|
134
|
-
['24', 'Pending'],
|
|
135
|
-
['8', 'Overdue'],
|
|
136
|
-
]}
|
|
137
|
-
badgeColor='#8b5cf6'
|
|
138
|
-
/>
|
|
139
|
-
</ListContentContainer>
|
|
140
|
-
|
|
141
|
-
{/* Extra large box */}
|
|
142
|
-
<ListContentContainer background='#10b981'>
|
|
143
|
-
<TrendListBox
|
|
144
|
-
title='Detailed Performance'
|
|
145
|
-
items={[
|
|
146
|
-
{ label: 'Response time', value: '125ms', delta: -12, icon: <ArrowDown size={16} /> },
|
|
147
|
-
{ label: 'CPU usage', value: '45%', delta: 2, icon: <ArrowUp size={16} /> },
|
|
148
|
-
{ label: 'Memory', value: '68%', delta: 5, icon: <ArrowUp size={16} /> },
|
|
149
|
-
{ label: 'Storage', value: '82%', delta: 8, icon: <ArrowUp size={16} /> },
|
|
150
|
-
]}
|
|
151
|
-
/>
|
|
152
|
-
</ListContentContainer>
|
|
153
|
-
</FlexRowContainer>
|
|
154
|
-
),
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
export const BusinessAdaptive: Story = {
|
|
158
|
-
name: 'Business Adaptive Layout',
|
|
159
|
-
args: {
|
|
160
|
-
gap: '1.5rem',
|
|
161
|
-
style: {
|
|
162
|
-
padding: '2rem',
|
|
163
|
-
background: '#f8fafc',
|
|
164
|
-
minHeight: '100vh',
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
render: (args) => (
|
|
168
|
-
<FlexRowContainer {...args}>
|
|
169
|
-
{/* Sales metrics */}
|
|
170
|
-
<ListContentContainer background='#0ea5e9'>
|
|
171
|
-
<CounterListBox
|
|
172
|
-
title='Sales'
|
|
173
|
-
data={[
|
|
174
|
-
['156', 'Orders'],
|
|
175
|
-
['€2.4K', 'Revenue'],
|
|
176
|
-
['42', 'Customers'],
|
|
177
|
-
]}
|
|
178
|
-
badgeColor='#0ea5e9'
|
|
179
|
-
/>
|
|
180
|
-
</ListContentContainer>
|
|
181
|
-
|
|
182
|
-
{/* Performance trends */}
|
|
183
|
-
<ListContentContainer background='#0ea5e9'>
|
|
184
|
-
<TrendListBox
|
|
185
|
-
title='Performance'
|
|
186
|
-
items={[
|
|
187
|
-
{ label: 'Revenue', value: '+12%', delta: 12, icon: <TrendingUp size={16} /> },
|
|
188
|
-
{ label: 'Users', value: '+8%', delta: 8, icon: <Users size={16} /> },
|
|
189
|
-
{ label: 'Engagement', value: '-2%', delta: -2, icon: <ArrowDown size={16} /> },
|
|
190
|
-
]}
|
|
191
|
-
/>
|
|
192
|
-
</ListContentContainer>
|
|
193
|
-
|
|
194
|
-
{/* Quick stats */}
|
|
195
|
-
<ListContentContainer background='#0ea5e9'>
|
|
196
|
-
<SimpleListBox
|
|
197
|
-
title='Quick metrics'
|
|
198
|
-
data={[
|
|
199
|
-
['Conversion rate', '3.2%'],
|
|
200
|
-
['Average order value', '€68.50'],
|
|
201
|
-
['Customer satisfaction', '4.8/5'],
|
|
202
|
-
]}
|
|
203
|
-
/>
|
|
204
|
-
</ListContentContainer>
|
|
205
|
-
|
|
206
|
-
{/* System status */}
|
|
207
|
-
<ListContentContainer background='#0ea5e9'>
|
|
208
|
-
<SimpleListBox
|
|
209
|
-
title='System status'
|
|
210
|
-
data={['All services operational', 'Backup successful', 'Update available']}
|
|
211
|
-
/>
|
|
212
|
-
</ListContentContainer>
|
|
213
|
-
|
|
214
|
-
{/* Detailed analytics */}
|
|
215
|
-
<ListContentContainer background='#0ea5e9'>
|
|
216
|
-
<TrendListBox
|
|
217
|
-
title='Detailed analytics'
|
|
218
|
-
items={[
|
|
219
|
-
{ label: 'New signups', value: '24', delta: 4, icon: <ArrowUp size={16} /> },
|
|
220
|
-
{ label: 'Retention', value: '88%', delta: 2, icon: <ArrowUp size={16} /> },
|
|
221
|
-
{ label: 'Bounce rate', value: '32%', delta: -3, icon: <ArrowDown size={16} /> },
|
|
222
|
-
{ label: 'Avg. session time', value: '4:12', delta: 0.5, icon: <ArrowUp size={16} /> },
|
|
223
|
-
]}
|
|
224
|
-
/>
|
|
225
|
-
</ListContentContainer>
|
|
226
|
-
</FlexRowContainer>
|
|
227
|
-
),
|
|
228
|
-
};
|
|
229
|
-
|
|
230
|
-
export const CompactAdaptive: Story = {
|
|
231
|
-
name: 'Compact Adaptive',
|
|
232
|
-
args: {
|
|
233
|
-
gap: '0.8rem',
|
|
234
|
-
style: {
|
|
235
|
-
padding: '1rem',
|
|
236
|
-
background: '#f1f5f9',
|
|
237
|
-
},
|
|
238
|
-
},
|
|
239
|
-
render: (args) => (
|
|
240
|
-
<FlexRowContainer {...args}>
|
|
241
|
-
<ListContentContainer background='#0ea5e9'>
|
|
242
|
-
<CounterListBox title='Active' data={[['42', 'Users']]} badgeColor='#0ea5e9' />
|
|
243
|
-
</ListContentContainer>
|
|
244
|
-
|
|
245
|
-
<ListContentContainer background='#0ea5e9'>
|
|
246
|
-
<SimpleListBox title='Status' data={['System normal']} />
|
|
247
|
-
</ListContentContainer>
|
|
248
|
-
|
|
249
|
-
<ListContentContainer background='#0ea5e9'>
|
|
250
|
-
<TrendListBox
|
|
251
|
-
title='Trends'
|
|
252
|
-
items={[
|
|
253
|
-
{ label: 'Up', value: '+3', icon: <ArrowUp size={14} /> },
|
|
254
|
-
{ label: 'Down', value: '-1', icon: <ArrowDown size={14} /> },
|
|
255
|
-
]}
|
|
256
|
-
/>
|
|
257
|
-
</ListContentContainer>
|
|
258
|
-
|
|
259
|
-
<ListContentContainer background='#0ea5e9'>
|
|
260
|
-
<CounterListBox title='Alerts' data={[['2', 'Minor']]} badgeColor='#f59e0b' />
|
|
261
|
-
</ListContentContainer>
|
|
262
|
-
</FlexRowContainer>
|
|
263
|
-
),
|
|
264
|
-
};
|
|
265
|
-
|
|
266
|
-
export const ResponsiveBehavior: Story = {
|
|
267
|
-
name: 'Responsive Behavior Demo',
|
|
268
|
-
args: {
|
|
269
|
-
gap: '1rem',
|
|
270
|
-
style: {
|
|
271
|
-
padding: '1.5rem',
|
|
272
|
-
background: '#f8fafc',
|
|
273
|
-
border: '2px dashed #cbd5e1',
|
|
274
|
-
},
|
|
275
|
-
},
|
|
276
|
-
parameters: {
|
|
277
|
-
docs: {
|
|
278
|
-
description: {
|
|
279
|
-
story:
|
|
280
|
-
'This demo shows how items naturally wrap to new lines based on their content size and available space. Resize the browser window to see the adaptive behavior.',
|
|
281
|
-
},
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
render: (args) => (
|
|
285
|
-
<div>
|
|
286
|
-
<div
|
|
287
|
-
style={{
|
|
288
|
-
textAlign: 'center',
|
|
289
|
-
marginBottom: '1rem',
|
|
290
|
-
color: '#64748b',
|
|
291
|
-
fontStyle: 'italic',
|
|
292
|
-
}}
|
|
293
|
-
>
|
|
294
|
-
↓ Resize the window to see adaptive behavior ↓
|
|
295
|
-
</div>
|
|
296
|
-
<FlexRowContainer {...args}>
|
|
297
|
-
<ListContentContainer background='#0ea5e9'>
|
|
298
|
-
<SimpleListBox title='Small' data={['Short content']} />
|
|
299
|
-
</ListContentContainer>
|
|
300
|
-
|
|
301
|
-
<ListContentContainer background='#0ea5e9'>
|
|
302
|
-
<SimpleListBox title='Medium' data={['Medium-length content', 'Another line here']} />
|
|
303
|
-
</ListContentContainer>
|
|
304
|
-
|
|
305
|
-
<ListContentContainer background='#0ea5e9'>
|
|
306
|
-
<SimpleListBox
|
|
307
|
-
title='Large'
|
|
308
|
-
data={[
|
|
309
|
-
'Very long content that takes more space',
|
|
310
|
-
'Another line with extra text',
|
|
311
|
-
'Yet another line to show behavior',
|
|
312
|
-
]}
|
|
313
|
-
/>
|
|
314
|
-
</ListContentContainer>
|
|
315
|
-
|
|
316
|
-
<ListContentContainer background='#0ea5e9'>
|
|
317
|
-
<SimpleListBox
|
|
318
|
-
title='Extra Large'
|
|
319
|
-
data={[
|
|
320
|
-
'Extremely long content that will take up a lot of width in the layout',
|
|
321
|
-
'A second line also with lots of text for demonstration',
|
|
322
|
-
'Third line to complete the showcase',
|
|
323
|
-
]}
|
|
324
|
-
/>
|
|
325
|
-
</ListContentContainer>
|
|
326
|
-
</FlexRowContainer>
|
|
327
|
-
</div>
|
|
328
|
-
),
|
|
329
|
-
};
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ArrowUp, ArrowDown, TrendingUp, Users } from 'lucide-react';
|
|
3
|
+
import { FlexRowContainer } from './FlexRowContainer';
|
|
4
|
+
import { ListContentContainer } from './ListContentContainer';
|
|
5
|
+
import { CounterListBox } from './ListBox/CounterListBox';
|
|
6
|
+
import { SimpleListBox } from './ListBox/SimpleListBox';
|
|
7
|
+
import { TrendListBox } from './ListBox/TrendListBox';
|
|
8
|
+
|
|
9
|
+
const meta: Meta<typeof FlexRowContainer> = {
|
|
10
|
+
title: 'Components/FlexRowContainer',
|
|
11
|
+
component: FlexRowContainer,
|
|
12
|
+
parameters: {
|
|
13
|
+
layout: 'fullscreen',
|
|
14
|
+
docs: {
|
|
15
|
+
description: {
|
|
16
|
+
component:
|
|
17
|
+
'An adaptive flex container that allows children to take their natural size and wrap to new lines when needed.',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
tags: ['autodocs'],
|
|
22
|
+
argTypes: {
|
|
23
|
+
gap: {
|
|
24
|
+
control: 'text',
|
|
25
|
+
description: 'Space between items',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default meta;
|
|
31
|
+
type Story = StoryObj<typeof meta>;
|
|
32
|
+
|
|
33
|
+
export const AdaptiveDashboard: Story = {
|
|
34
|
+
name: 'Adaptive Dashboard',
|
|
35
|
+
args: {
|
|
36
|
+
gap: '1.5rem',
|
|
37
|
+
style: {
|
|
38
|
+
padding: '2rem',
|
|
39
|
+
background: '#f8fafc',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
render: (args) => (
|
|
43
|
+
<FlexRowContainer {...args}>
|
|
44
|
+
{/* Small counter box */}
|
|
45
|
+
<ListContentContainer background='#0ea5e9'>
|
|
46
|
+
<CounterListBox title='Patients' data={[['63', 'Total']]} badgeColor='#0ea5e9' />
|
|
47
|
+
</ListContentContainer>
|
|
48
|
+
|
|
49
|
+
{/* Medium box with multiple lists */}
|
|
50
|
+
<ListContentContainer background='#0ea5e9'>
|
|
51
|
+
<SimpleListBox
|
|
52
|
+
title='Available beds'
|
|
53
|
+
data={[
|
|
54
|
+
['MED', '21 beds'],
|
|
55
|
+
['SURG', '2 beds'],
|
|
56
|
+
['ER', '12 beds'],
|
|
57
|
+
]}
|
|
58
|
+
/>
|
|
59
|
+
<SimpleListBox title='Overdue patients' data={['623152385 - MED', '623168542 - SURG']} />
|
|
60
|
+
<SimpleListBox title='Overdue patients' data={['623152385 - MED', '623168542 - SURG']} />
|
|
61
|
+
<SimpleListBox title='Overdue patients' data={['623152385 - MED', '623168542 - SURG']} />
|
|
62
|
+
</ListContentContainer>
|
|
63
|
+
|
|
64
|
+
{/* Large trend box */}
|
|
65
|
+
<ListContentContainer background='#0ea5e9'>
|
|
66
|
+
<TrendListBox
|
|
67
|
+
title='3h Trend'
|
|
68
|
+
items={[
|
|
69
|
+
{ label: 'MED', value: '+3', delta: 3, icon: <ArrowUp size={16} /> },
|
|
70
|
+
{ label: 'SURG', value: '-2', delta: -2, icon: <ArrowDown size={16} /> },
|
|
71
|
+
{ label: 'ER', value: '+5', delta: 5, icon: <ArrowUp size={16} /> },
|
|
72
|
+
{ label: 'PED', value: '+1', delta: 1, icon: <ArrowUp size={16} /> },
|
|
73
|
+
]}
|
|
74
|
+
/>
|
|
75
|
+
</ListContentContainer>
|
|
76
|
+
|
|
77
|
+
{/* Very wide box */}
|
|
78
|
+
<ListContentContainer background='#0ea5e9'>
|
|
79
|
+
<SimpleListBox
|
|
80
|
+
title='General information'
|
|
81
|
+
data={[
|
|
82
|
+
'All services are operating normally',
|
|
83
|
+
'Planned maintenance tonight at 10pm',
|
|
84
|
+
'Daily report available',
|
|
85
|
+
]}
|
|
86
|
+
/>
|
|
87
|
+
</ListContentContainer>
|
|
88
|
+
</FlexRowContainer>
|
|
89
|
+
),
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const MixedSizes: Story = {
|
|
93
|
+
name: 'Mixed Content Sizes',
|
|
94
|
+
args: {
|
|
95
|
+
gap: '1rem',
|
|
96
|
+
style: {
|
|
97
|
+
padding: '1.5rem',
|
|
98
|
+
background: '#f1f5f9',
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
render: (args) => (
|
|
102
|
+
<FlexRowContainer {...args}>
|
|
103
|
+
{/* Tiny box */}
|
|
104
|
+
<ListContentContainer background='#10b981'>
|
|
105
|
+
<CounterListBox title='Alerts' data={[['3', 'Critical']]} badgeColor='#ef4444' />
|
|
106
|
+
</ListContentContainer>
|
|
107
|
+
|
|
108
|
+
{/* Small box */}
|
|
109
|
+
<ListContentContainer background='#10b981'>
|
|
110
|
+
<TrendListBox
|
|
111
|
+
title='Stats'
|
|
112
|
+
items={[{ label: 'Up', value: '+5', icon: <ArrowUp size={14} /> }]}
|
|
113
|
+
/>
|
|
114
|
+
</ListContentContainer>
|
|
115
|
+
|
|
116
|
+
{/* Medium box */}
|
|
117
|
+
<ListContentContainer background='#10b981'>
|
|
118
|
+
<SimpleListBox
|
|
119
|
+
title='Status'
|
|
120
|
+
data={[
|
|
121
|
+
['System', 'Operational'],
|
|
122
|
+
['Database', 'Connected'],
|
|
123
|
+
]}
|
|
124
|
+
/>
|
|
125
|
+
</ListContentContainer>
|
|
126
|
+
|
|
127
|
+
{/* Large box */}
|
|
128
|
+
<ListContentContainer background='#10b981'>
|
|
129
|
+
<CounterListBox
|
|
130
|
+
title='Details'
|
|
131
|
+
data={[
|
|
132
|
+
['156', 'Orders processed'],
|
|
133
|
+
['42', 'New customers'],
|
|
134
|
+
['24', 'Pending'],
|
|
135
|
+
['8', 'Overdue'],
|
|
136
|
+
]}
|
|
137
|
+
badgeColor='#8b5cf6'
|
|
138
|
+
/>
|
|
139
|
+
</ListContentContainer>
|
|
140
|
+
|
|
141
|
+
{/* Extra large box */}
|
|
142
|
+
<ListContentContainer background='#10b981'>
|
|
143
|
+
<TrendListBox
|
|
144
|
+
title='Detailed Performance'
|
|
145
|
+
items={[
|
|
146
|
+
{ label: 'Response time', value: '125ms', delta: -12, icon: <ArrowDown size={16} /> },
|
|
147
|
+
{ label: 'CPU usage', value: '45%', delta: 2, icon: <ArrowUp size={16} /> },
|
|
148
|
+
{ label: 'Memory', value: '68%', delta: 5, icon: <ArrowUp size={16} /> },
|
|
149
|
+
{ label: 'Storage', value: '82%', delta: 8, icon: <ArrowUp size={16} /> },
|
|
150
|
+
]}
|
|
151
|
+
/>
|
|
152
|
+
</ListContentContainer>
|
|
153
|
+
</FlexRowContainer>
|
|
154
|
+
),
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export const BusinessAdaptive: Story = {
|
|
158
|
+
name: 'Business Adaptive Layout',
|
|
159
|
+
args: {
|
|
160
|
+
gap: '1.5rem',
|
|
161
|
+
style: {
|
|
162
|
+
padding: '2rem',
|
|
163
|
+
background: '#f8fafc',
|
|
164
|
+
minHeight: '100vh',
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
render: (args) => (
|
|
168
|
+
<FlexRowContainer {...args}>
|
|
169
|
+
{/* Sales metrics */}
|
|
170
|
+
<ListContentContainer background='#0ea5e9'>
|
|
171
|
+
<CounterListBox
|
|
172
|
+
title='Sales'
|
|
173
|
+
data={[
|
|
174
|
+
['156', 'Orders'],
|
|
175
|
+
['€2.4K', 'Revenue'],
|
|
176
|
+
['42', 'Customers'],
|
|
177
|
+
]}
|
|
178
|
+
badgeColor='#0ea5e9'
|
|
179
|
+
/>
|
|
180
|
+
</ListContentContainer>
|
|
181
|
+
|
|
182
|
+
{/* Performance trends */}
|
|
183
|
+
<ListContentContainer background='#0ea5e9'>
|
|
184
|
+
<TrendListBox
|
|
185
|
+
title='Performance'
|
|
186
|
+
items={[
|
|
187
|
+
{ label: 'Revenue', value: '+12%', delta: 12, icon: <TrendingUp size={16} /> },
|
|
188
|
+
{ label: 'Users', value: '+8%', delta: 8, icon: <Users size={16} /> },
|
|
189
|
+
{ label: 'Engagement', value: '-2%', delta: -2, icon: <ArrowDown size={16} /> },
|
|
190
|
+
]}
|
|
191
|
+
/>
|
|
192
|
+
</ListContentContainer>
|
|
193
|
+
|
|
194
|
+
{/* Quick stats */}
|
|
195
|
+
<ListContentContainer background='#0ea5e9'>
|
|
196
|
+
<SimpleListBox
|
|
197
|
+
title='Quick metrics'
|
|
198
|
+
data={[
|
|
199
|
+
['Conversion rate', '3.2%'],
|
|
200
|
+
['Average order value', '€68.50'],
|
|
201
|
+
['Customer satisfaction', '4.8/5'],
|
|
202
|
+
]}
|
|
203
|
+
/>
|
|
204
|
+
</ListContentContainer>
|
|
205
|
+
|
|
206
|
+
{/* System status */}
|
|
207
|
+
<ListContentContainer background='#0ea5e9'>
|
|
208
|
+
<SimpleListBox
|
|
209
|
+
title='System status'
|
|
210
|
+
data={['All services operational', 'Backup successful', 'Update available']}
|
|
211
|
+
/>
|
|
212
|
+
</ListContentContainer>
|
|
213
|
+
|
|
214
|
+
{/* Detailed analytics */}
|
|
215
|
+
<ListContentContainer background='#0ea5e9'>
|
|
216
|
+
<TrendListBox
|
|
217
|
+
title='Detailed analytics'
|
|
218
|
+
items={[
|
|
219
|
+
{ label: 'New signups', value: '24', delta: 4, icon: <ArrowUp size={16} /> },
|
|
220
|
+
{ label: 'Retention', value: '88%', delta: 2, icon: <ArrowUp size={16} /> },
|
|
221
|
+
{ label: 'Bounce rate', value: '32%', delta: -3, icon: <ArrowDown size={16} /> },
|
|
222
|
+
{ label: 'Avg. session time', value: '4:12', delta: 0.5, icon: <ArrowUp size={16} /> },
|
|
223
|
+
]}
|
|
224
|
+
/>
|
|
225
|
+
</ListContentContainer>
|
|
226
|
+
</FlexRowContainer>
|
|
227
|
+
),
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
export const CompactAdaptive: Story = {
|
|
231
|
+
name: 'Compact Adaptive',
|
|
232
|
+
args: {
|
|
233
|
+
gap: '0.8rem',
|
|
234
|
+
style: {
|
|
235
|
+
padding: '1rem',
|
|
236
|
+
background: '#f1f5f9',
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
render: (args) => (
|
|
240
|
+
<FlexRowContainer {...args}>
|
|
241
|
+
<ListContentContainer background='#0ea5e9'>
|
|
242
|
+
<CounterListBox title='Active' data={[['42', 'Users']]} badgeColor='#0ea5e9' />
|
|
243
|
+
</ListContentContainer>
|
|
244
|
+
|
|
245
|
+
<ListContentContainer background='#0ea5e9'>
|
|
246
|
+
<SimpleListBox title='Status' data={['System normal']} />
|
|
247
|
+
</ListContentContainer>
|
|
248
|
+
|
|
249
|
+
<ListContentContainer background='#0ea5e9'>
|
|
250
|
+
<TrendListBox
|
|
251
|
+
title='Trends'
|
|
252
|
+
items={[
|
|
253
|
+
{ label: 'Up', value: '+3', icon: <ArrowUp size={14} /> },
|
|
254
|
+
{ label: 'Down', value: '-1', icon: <ArrowDown size={14} /> },
|
|
255
|
+
]}
|
|
256
|
+
/>
|
|
257
|
+
</ListContentContainer>
|
|
258
|
+
|
|
259
|
+
<ListContentContainer background='#0ea5e9'>
|
|
260
|
+
<CounterListBox title='Alerts' data={[['2', 'Minor']]} badgeColor='#f59e0b' />
|
|
261
|
+
</ListContentContainer>
|
|
262
|
+
</FlexRowContainer>
|
|
263
|
+
),
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
export const ResponsiveBehavior: Story = {
|
|
267
|
+
name: 'Responsive Behavior Demo',
|
|
268
|
+
args: {
|
|
269
|
+
gap: '1rem',
|
|
270
|
+
style: {
|
|
271
|
+
padding: '1.5rem',
|
|
272
|
+
background: '#f8fafc',
|
|
273
|
+
border: '2px dashed #cbd5e1',
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
parameters: {
|
|
277
|
+
docs: {
|
|
278
|
+
description: {
|
|
279
|
+
story:
|
|
280
|
+
'This demo shows how items naturally wrap to new lines based on their content size and available space. Resize the browser window to see the adaptive behavior.',
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
render: (args) => (
|
|
285
|
+
<div>
|
|
286
|
+
<div
|
|
287
|
+
style={{
|
|
288
|
+
textAlign: 'center',
|
|
289
|
+
marginBottom: '1rem',
|
|
290
|
+
color: '#64748b',
|
|
291
|
+
fontStyle: 'italic',
|
|
292
|
+
}}
|
|
293
|
+
>
|
|
294
|
+
↓ Resize the window to see adaptive behavior ↓
|
|
295
|
+
</div>
|
|
296
|
+
<FlexRowContainer {...args}>
|
|
297
|
+
<ListContentContainer background='#0ea5e9'>
|
|
298
|
+
<SimpleListBox title='Small' data={['Short content']} />
|
|
299
|
+
</ListContentContainer>
|
|
300
|
+
|
|
301
|
+
<ListContentContainer background='#0ea5e9'>
|
|
302
|
+
<SimpleListBox title='Medium' data={['Medium-length content', 'Another line here']} />
|
|
303
|
+
</ListContentContainer>
|
|
304
|
+
|
|
305
|
+
<ListContentContainer background='#0ea5e9'>
|
|
306
|
+
<SimpleListBox
|
|
307
|
+
title='Large'
|
|
308
|
+
data={[
|
|
309
|
+
'Very long content that takes more space',
|
|
310
|
+
'Another line with extra text',
|
|
311
|
+
'Yet another line to show behavior',
|
|
312
|
+
]}
|
|
313
|
+
/>
|
|
314
|
+
</ListContentContainer>
|
|
315
|
+
|
|
316
|
+
<ListContentContainer background='#0ea5e9'>
|
|
317
|
+
<SimpleListBox
|
|
318
|
+
title='Extra Large'
|
|
319
|
+
data={[
|
|
320
|
+
'Extremely long content that will take up a lot of width in the layout',
|
|
321
|
+
'A second line also with lots of text for demonstration',
|
|
322
|
+
'Third line to complete the showcase',
|
|
323
|
+
]}
|
|
324
|
+
/>
|
|
325
|
+
</ListContentContainer>
|
|
326
|
+
</FlexRowContainer>
|
|
327
|
+
</div>
|
|
328
|
+
),
|
|
329
|
+
};
|