1
- import React , { useEffect } from 'react' ;
1
+ 'use client' ;
2
+
3
+ import { useEffect } from 'react' ;
2
4
3
5
import {
4
6
Badge ,
@@ -13,17 +15,16 @@ import {
13
15
useMantineColorScheme ,
14
16
} from '@mantine/core' ;
15
17
import {
16
- IconComponents ,
17
18
IconDeviceFloppy ,
18
19
IconLayout ,
19
20
IconPalette ,
20
21
IconRefresh ,
21
- IconTypography ,
22
22
IconX ,
23
23
} from '@tabler/icons-react' ;
24
24
25
25
import { useThemeCustomizer } from '@/contexts/theme-customizer' ;
26
26
27
+ import { ThemePreviewCanvas } from './components/ThemePreviewCanvas' ;
27
28
import { AppearanceTab } from './tabs/AppearanceTab' ;
28
29
import { LayoutTab } from './tabs/LayoutTab' ;
29
30
@@ -98,95 +99,75 @@ export default function ThemeCustomizerDrawer({
98
99
</ Group >
99
100
}
100
101
position = "right"
101
- size = "md "
102
+ size = "100% "
102
103
padding = "md"
103
104
closeButtonProps = { {
104
105
icon : < IconX size = { 16 } /> ,
105
106
} }
106
107
>
107
- < Stack h = "100%" gap = { 0 } >
108
- < Text fz = "sm" c = "dimmed" mb = "md" >
109
- Explore different styles according to your preferences. Changes are
110
- previewed in real-time.
111
- </ Text >
112
-
113
- < ScrollArea style = { { flex : 1 } } offsetScrollbars >
114
- < Tabs defaultValue = "layout" >
115
- < Tabs . List >
116
- < Tabs . Tab value = "layout" leftSection = { < IconLayout size = { 16 } /> } >
117
- Layout
118
- </ Tabs . Tab >
119
- < Tabs . Tab
120
- value = "appearance"
121
- leftSection = { < IconPalette size = { 16 } /> }
122
- >
123
- Appearance
124
- </ Tabs . Tab >
125
- < Tabs . Tab
126
- value = "typography"
127
- leftSection = { < IconTypography size = { 16 } /> }
128
- disabled
108
+ < Group grow align = "start" h = "100%" gap = "xl" wrap = "nowrap" >
109
+ { /* Customization Controls */ }
110
+ < Box w = { 360 } style = { { minWidth : 320 } } >
111
+ < Stack gap = "sm" >
112
+ < Text fz = "sm" c = "dimmed" >
113
+ Explore different styles. Changes are previewed in real-time.
114
+ </ Text >
115
+ < ScrollArea h = "calc(100vh - 180px)" offsetScrollbars >
116
+ < Tabs defaultValue = "layout" >
117
+ < Tabs . List grow >
118
+ < Tabs . Tab
119
+ value = "layout"
120
+ leftSection = { < IconLayout size = { 16 } /> }
121
+ >
122
+ Layout
123
+ </ Tabs . Tab >
124
+ < Tabs . Tab
125
+ value = "appearance"
126
+ leftSection = { < IconPalette size = { 16 } /> }
127
+ >
128
+ Appearance
129
+ </ Tabs . Tab >
130
+ { /* Add more tabs here */ }
131
+ </ Tabs . List >
132
+
133
+ < Tabs . Panel value = "layout" pt = "md" >
134
+ < LayoutTab
135
+ config = { previewConfig }
136
+ onConfigUpdate = { updateConfig }
137
+ />
138
+ </ Tabs . Panel >
139
+
140
+ < Tabs . Panel value = "appearance" pt = "md" >
141
+ < AppearanceTab
142
+ config = { previewConfig }
143
+ onConfigUpdate = { updateConfig }
144
+ />
145
+ </ Tabs . Panel >
146
+ </ Tabs >
147
+ </ ScrollArea >
148
+ < Group justify = "space-between" >
149
+ < Button
150
+ variant = "subtle"
151
+ leftSection = { < IconRefresh size = { 16 } /> }
152
+ onClick = { handleReset }
153
+ disabled = { ! hasUnsavedChanges }
129
154
>
130
- Typography
131
- </ Tabs . Tab >
132
- < Tabs . Tab
133
- value = "components"
134
- leftSection = { < IconComponents size = { 16 } /> }
135
- disabled
155
+ Reset
156
+ </ Button >
157
+ < Button
158
+ leftSection = { < IconDeviceFloppy size = { 16 } /> }
159
+ onClick = { handleApply }
160
+ disabled = { ! hasUnsavedChanges }
136
161
>
137
- Components
138
- </ Tabs . Tab >
139
- </ Tabs . List >
140
-
141
- < Tabs . Panel value = "layout" pt = "md" >
142
- < LayoutTab config = { previewConfig } onConfigUpdate = { updateConfig } />
143
- </ Tabs . Panel >
144
-
145
- < Tabs . Panel value = "appearance" pt = "md" >
146
- < AppearanceTab
147
- config = { previewConfig }
148
- onConfigUpdate = { updateConfig }
149
- />
150
- </ Tabs . Panel >
151
-
152
- < Tabs . Panel value = "typography" pt = "md" >
153
- < Stack align = "center" mt = "xl" >
154
- < Text c = "dimmed" size = "sm" >
155
- Typography customization coming soon
156
- </ Text >
157
- </ Stack >
158
- </ Tabs . Panel >
159
-
160
- < Tabs . Panel value = "components" pt = "md" >
161
- < Stack align = "center" mt = "xl" >
162
- < Text c = "dimmed" size = "sm" >
163
- Component customization coming soon
164
- </ Text >
165
- </ Stack >
166
- </ Tabs . Panel >
167
- </ Tabs >
168
- </ ScrollArea >
169
-
170
- < Box pt = "md" >
171
- < Group justify = "space-between" >
172
- < Button
173
- variant = "subtle"
174
- leftSection = { < IconRefresh size = { 16 } /> }
175
- onClick = { handleReset }
176
- disabled = { ! hasUnsavedChanges }
177
- >
178
- Reset
179
- </ Button >
180
- < Button
181
- leftSection = { < IconDeviceFloppy size = { 16 } /> }
182
- onClick = { handleApply }
183
- disabled = { ! hasUnsavedChanges }
184
- >
185
- Save Changes
186
- </ Button >
187
- </ Group >
162
+ Save Changes
163
+ </ Button >
164
+ </ Group >
165
+ </ Stack >
188
166
</ Box >
189
- </ Stack >
167
+
168
+ { /* Preview Canvas */ }
169
+ < ThemePreviewCanvas config = { previewConfig } />
170
+ </ Group >
190
171
</ Drawer >
191
172
) ;
192
173
}
0 commit comments