Skip to content

Commit ba8ab9b

Browse files
committed
upd ui
1 parent 4eaf36b commit ba8ab9b

File tree

126 files changed

+14648
-2219
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

126 files changed

+14648
-2219
lines changed

.storybook/main.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ export default defineMain({
77
'@storybook/addon-themes',
88
'@chromatic-com/storybook',
99
'@storybook/addon-a11y',
10-
'@storybook/addon-coverage',
11-
'@storybook/addon-docs'
10+
'@storybook/addon-docs',
11+
'@storybook/addon-viewport'
1212
],
1313
core: {
1414
builder: '@storybook/builder-vite',

.storybook/preview.tsx

Lines changed: 61 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
// .storybook/preview.tsx
2-
import addonDocs from "@storybook/addon-docs";
32
import { definePreview } from '@storybook/nextjs-vite'
43
import { Provider as WrapBalancer } from 'react-wrap-balancer'
5-
import addonLinks from '@storybook/addon-links'
6-
import addonThemes from '@storybook/addon-themes'
7-
import addonA11y from '@storybook/addon-a11y'
4+
import clsx from 'clsx'
85

96
import '@fontsource/roboto/300.css'
107
import '@fontsource/roboto/400.css'
@@ -23,20 +20,29 @@ import '../src/theme/styles.css'
2320
import { theme } from '../src/theme/theme'
2421

2522
/**
26-
* Optional Jest results. If the file doesnt exist, we pass `undefined`
23+
* Optional Jest results. If the file doesn't exist, we pass `undefined`
2724
* so the addon silently does nothing (no runtime error).
28-
* Vite will inline JSON when present.
25+
* Using dynamic import with error handling for better compatibility.
2926
*/
30-
// @ts-ignore – file may not exist in CI/locally
31-
import testResults from '../test-results.json?url'
27+
let testResults: any = undefined
28+
try {
29+
// @ts-ignore – file may not exist in CI/locally
30+
const testResultsModule = await import('../test-results.json')
31+
testResults = testResultsModule.default || testResultsModule
32+
} catch {
33+
// Silently ignore if file doesn't exist
34+
testResults = undefined
35+
}
36+
37+
// Viewport presets for both Storybook viewport addon and Chromatic
38+
const viewportPresets = {
39+
mobile: { name: 'mobile', styles: { width: '375px', height: '667px' } },
40+
tablet: { name: 'tablet', styles: { width: '768px', height: '1024px' } },
41+
desktop: { name: 'desktop', styles: { width: '1280px', height: '720px' } },
42+
wide: { name: 'wide', styles: { width: '1920px', height: '1080px' } },
43+
}
3244

3345
const preview = definePreview({
34-
addons: [
35-
addonLinks(),
36-
addonThemes(),
37-
addonA11y(),
38-
addonDocs()
39-
],
4046
parameters: {
4147
controls: {
4248
expanded: true,
@@ -45,6 +51,11 @@ const preview = definePreview({
4551
date: /Date$/i,
4652
},
4753
},
54+
// Viewport configuration for Storybook viewport addon
55+
viewport: {
56+
viewports: viewportPresets,
57+
},
58+
// Chromatic viewports (using same presets)
4859
chromatic: {
4960
delay: 1000,
5061
diffThreshold: 0.1,
@@ -55,6 +66,10 @@ const preview = definePreview({
5566
{ name: 'wide', width: 1920, height: 1080 },
5667
],
5768
},
69+
// Coverage results for addon-coverage
70+
...(testResults && { coverageResults: testResults }),
71+
// Default layout for page components
72+
layout: 'fullscreen',
5873
backgrounds: {
5974
default: 'light',
6075
options: {
@@ -84,7 +99,7 @@ const preview = definePreview({
8499
},
85100

86101
decorators: [
87-
// Show jest results if available
102+
// Theme and provider decorator
88103
(Story, context) => {
89104
const forcedTheme =
90105
context.globals.theme === 'system' ? undefined : (context.globals.theme as 'light' | 'dark')
@@ -97,15 +112,43 @@ const preview = definePreview({
97112
<MuiThemeProvider theme={theme}>
98113
<LocalizationProvider dateAdapter={AdapterDayjs}>
99114
<WrapBalancer>
100-
<div className="w-full max-w-2xl px-4 py-6">
101-
<Story />
102-
</div>
115+
<Story />
103116
</WrapBalancer>
104117
</LocalizationProvider>
105118
</MuiThemeProvider>
106119
</NextThemeProvider>
107120
);
108121
},
122+
// Container decorator - only applies when container parameter is true
123+
// This allows components to opt-in to container wrapping instead of defaulting to it
124+
(Story, context) => {
125+
const shouldUseContainer =
126+
context.parameters.container === true ||
127+
(context.parameters.layout !== 'fullscreen' &&
128+
context.parameters.fullscreen !== true &&
129+
context.parameters.container !== false)
130+
131+
// If explicitly set to false or fullscreen, don't wrap
132+
if (context.parameters.container === false ||
133+
context.parameters.layout === 'fullscreen' ||
134+
context.parameters.fullscreen === true) {
135+
return <Story />
136+
}
137+
138+
// Only apply container if explicitly requested
139+
if (!shouldUseContainer) {
140+
return <Story />
141+
}
142+
143+
const containerWidth = context.parameters.containerWidth || 'max-w-2xl'
144+
const containerPadding = context.parameters.containerPadding || 'px-4 py-6'
145+
146+
return (
147+
<div className={clsx('w-full', containerWidth, containerPadding)}>
148+
<Story />
149+
</div>
150+
)
151+
},
109152
],
110153

111154
tags: [],

package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,24 @@
5656
"@fontsource/caveat": "^5.2.8",
5757
"@fontsource/material-icons": "^5.2.7",
5858
"@fontsource/roboto": "^5.2.9",
59+
"@headlessui/react": "^2.2.9",
5960
"@heroicons/react": "^2.2.0",
6061
"@mui/icons-material": "^7.3.6",
6162
"@mui/material": "^7.3.6",
6263
"@mui/types": "^7.4.9",
6364
"@mui/x-date-pickers": "8.19.0",
6465
"@tailwindcss/postcss": "4.1.17",
6566
"@tailwindcss/typography": "^0.5.19",
67+
"@tanstack/react-table": "8.20.6",
68+
"@tanstack/react-virtual": "^3.13.12",
6669
"@types/react": "^19.2.7",
67-
"algoliasearch": "^5.45.0",
6870
"autoprefixer": "^10.4.22",
6971
"clsx": "^2.1.1",
7072
"date-fns": "^4.1.0",
7173
"dayjs": "^1.11.19",
7274
"export-to-csv": "^1.4.0",
7375
"glob": "^13.0.0",
74-
"material-react-table": "^3.2.1",
76+
"gsap": "3.13.0",
7577
"next": "^16.0.7",
7678
"next-themes": "^0.4.6",
7779
"react": "19.2.0",
@@ -86,13 +88,12 @@
8688
"devDependencies": {
8789
"@chromatic-com/storybook": "^4.1.3",
8890
"@storybook/addon-a11y": "10.0.6",
89-
"@storybook/addon-coverage": "^3.0.0",
9091
"@storybook/addon-docs": "10.0.6",
9192
"@storybook/addon-links": "10.0.6",
9293
"@storybook/addon-themes": "10.0.6",
9394
"@storybook/builder-vite": "10.0.6",
94-
"@storybook/nextjs": "^10.1.4",
95-
"@storybook/nextjs-vite": "^10.1.4",
95+
"@storybook/nextjs": "10.0.6",
96+
"@storybook/nextjs-vite": "10.0.6",
9697
"@storybook/react-vite": "10.0.6",
9798
"@testing-library/jest-dom": "^6.9.1",
9899
"@testing-library/react": "^16.3.0",

0 commit comments

Comments
 (0)