@idealyst/navigation 1.0.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 +76 -0
- package/src/context/NavigatorContext.native.tsx +51 -0
- package/src/context/NavigatorContext.web.tsx +37 -0
- package/src/context/index.native.ts +2 -0
- package/src/context/index.ts +2 -0
- package/src/context/index.web.ts +2 -0
- package/src/context/types.ts +13 -0
- package/src/examples/ExampleDrawerRouter.tsx +159 -0
- package/src/examples/ExampleStackRouter.tsx +245 -0
- package/src/examples/ExampleTabRouter.tsx +157 -0
- package/src/examples/highContrastThemes.ts +584 -0
- package/src/examples/index.ts +3 -0
- package/src/examples/unistyles.ts +84 -0
- package/src/index.ts +5 -0
- package/src/layouts/GeneralLayout/GeneralLayout.styles.ts +55 -0
- package/src/layouts/GeneralLayout/GeneralLayout.tsx +144 -0
- package/src/layouts/GeneralLayout/README.md +171 -0
- package/src/layouts/GeneralLayout/index.ts +2 -0
- package/src/layouts/GeneralLayout/types.ts +99 -0
- package/src/layouts/index.ts +1 -0
- package/src/routing/index.native.tsx +2 -0
- package/src/routing/index.ts +2 -0
- package/src/routing/index.web.tsx +2 -0
- package/src/routing/router.native.tsx +90 -0
- package/src/routing/router.web.tsx +74 -0
- package/src/routing/types.ts +15 -0
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createTheme,
|
|
3
|
+
type ThemeConfig,
|
|
4
|
+
} from '@idealyst/components/src/theme';
|
|
5
|
+
|
|
6
|
+
// High contrast color palettes - designed for maximum accessibility
|
|
7
|
+
export const highContrastLightPalettes = {
|
|
8
|
+
// Pure high contrast colors
|
|
9
|
+
red: {
|
|
10
|
+
50: '#ffffff',
|
|
11
|
+
100: '#ffe5e5',
|
|
12
|
+
200: '#ffcccc',
|
|
13
|
+
300: '#ff9999',
|
|
14
|
+
400: '#ff6666',
|
|
15
|
+
500: '#ff0000', // Pure red
|
|
16
|
+
600: '#cc0000',
|
|
17
|
+
700: '#990000',
|
|
18
|
+
800: '#660000',
|
|
19
|
+
900: '#330000',
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
orange: {
|
|
23
|
+
50: '#ffffff',
|
|
24
|
+
100: '#fff3e0',
|
|
25
|
+
200: '#ffe0b3',
|
|
26
|
+
300: '#ffcc80',
|
|
27
|
+
400: '#ffb74d',
|
|
28
|
+
500: '#ff8f00', // High contrast orange
|
|
29
|
+
600: '#cc7200',
|
|
30
|
+
700: '#995500',
|
|
31
|
+
800: '#663900',
|
|
32
|
+
900: '#331c00',
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
yellow: {
|
|
36
|
+
50: '#ffffff',
|
|
37
|
+
100: '#fffde7',
|
|
38
|
+
200: '#fff9c4',
|
|
39
|
+
300: '#fff59d',
|
|
40
|
+
400: '#fff176',
|
|
41
|
+
500: '#ffeb3b', // High contrast yellow
|
|
42
|
+
600: '#ccbc2e',
|
|
43
|
+
700: '#998d22',
|
|
44
|
+
800: '#665e17',
|
|
45
|
+
900: '#332f0b',
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
green: {
|
|
49
|
+
50: '#ffffff',
|
|
50
|
+
100: '#e8f5e8',
|
|
51
|
+
200: '#c8e6c8',
|
|
52
|
+
300: '#a5d6a5',
|
|
53
|
+
400: '#81c784',
|
|
54
|
+
500: '#4caf50', // High contrast green
|
|
55
|
+
600: '#388e3c',
|
|
56
|
+
700: '#2e7d32',
|
|
57
|
+
800: '#1b5e20',
|
|
58
|
+
900: '#0d2f10',
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
blue: {
|
|
62
|
+
50: '#ffffff',
|
|
63
|
+
100: '#e3f2fd',
|
|
64
|
+
200: '#bbdefb',
|
|
65
|
+
300: '#90caf9',
|
|
66
|
+
400: '#64b5f6',
|
|
67
|
+
500: '#2196f3', // High contrast blue
|
|
68
|
+
600: '#1976d2',
|
|
69
|
+
700: '#1565c0',
|
|
70
|
+
800: '#0d47a1',
|
|
71
|
+
900: '#0a2472',
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
purple: {
|
|
75
|
+
50: '#ffffff',
|
|
76
|
+
100: '#f3e5f5',
|
|
77
|
+
200: '#e1bee7',
|
|
78
|
+
300: '#ce93d8',
|
|
79
|
+
400: '#ba68c8',
|
|
80
|
+
500: '#9c27b0', // High contrast purple
|
|
81
|
+
600: '#7b1fa2',
|
|
82
|
+
700: '#6a1b9a',
|
|
83
|
+
800: '#4a148c',
|
|
84
|
+
900: '#3d1178',
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
black: {
|
|
88
|
+
50: '#ffffff',
|
|
89
|
+
100: '#f5f5f5',
|
|
90
|
+
200: '#eeeeee',
|
|
91
|
+
300: '#e0e0e0',
|
|
92
|
+
400: '#bdbdbd',
|
|
93
|
+
500: '#9e9e9e',
|
|
94
|
+
600: '#757575',
|
|
95
|
+
700: '#616161',
|
|
96
|
+
800: '#424242',
|
|
97
|
+
900: '#000000', // Pure black
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
gray: {
|
|
101
|
+
50: '#ffffff', // Pure white
|
|
102
|
+
100: '#f8f8f8',
|
|
103
|
+
200: '#e8e8e8',
|
|
104
|
+
300: '#d0d0d0',
|
|
105
|
+
400: '#b0b0b0',
|
|
106
|
+
500: '#808080',
|
|
107
|
+
600: '#606060',
|
|
108
|
+
700: '#404040',
|
|
109
|
+
800: '#202020',
|
|
110
|
+
900: '#000000', // Pure black
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
white: {
|
|
114
|
+
50: '#ffffff', // Pure white
|
|
115
|
+
100: '#ffffff',
|
|
116
|
+
200: '#ffffff',
|
|
117
|
+
300: '#ffffff',
|
|
118
|
+
400: '#ffffff',
|
|
119
|
+
500: '#ffffff',
|
|
120
|
+
600: '#ffffff',
|
|
121
|
+
700: '#ffffff',
|
|
122
|
+
800: '#ffffff',
|
|
123
|
+
900: '#ffffff',
|
|
124
|
+
},
|
|
125
|
+
} as const;
|
|
126
|
+
|
|
127
|
+
// High contrast dark palettes
|
|
128
|
+
export const highContrastDarkPalettes = {
|
|
129
|
+
// Pure high contrast colors for dark mode
|
|
130
|
+
red: {
|
|
131
|
+
50: '#000000',
|
|
132
|
+
100: '#330000',
|
|
133
|
+
200: '#660000',
|
|
134
|
+
300: '#990000',
|
|
135
|
+
400: '#cc0000',
|
|
136
|
+
500: '#ff0000', // Pure red
|
|
137
|
+
600: '#ff3333',
|
|
138
|
+
700: '#ff6666',
|
|
139
|
+
800: '#ff9999',
|
|
140
|
+
900: '#ffffff',
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
orange: {
|
|
144
|
+
50: '#000000',
|
|
145
|
+
100: '#331c00',
|
|
146
|
+
200: '#663900',
|
|
147
|
+
300: '#995500',
|
|
148
|
+
400: '#cc7200',
|
|
149
|
+
500: '#ff8f00', // High contrast orange
|
|
150
|
+
600: '#ffab40',
|
|
151
|
+
700: '#ffcc80',
|
|
152
|
+
800: '#ffe0b3',
|
|
153
|
+
900: '#ffffff',
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
yellow: {
|
|
157
|
+
50: '#000000',
|
|
158
|
+
100: '#332f0b',
|
|
159
|
+
200: '#665e17',
|
|
160
|
+
300: '#998d22',
|
|
161
|
+
400: '#ccbc2e',
|
|
162
|
+
500: '#ffeb3b', // High contrast yellow
|
|
163
|
+
600: '#fff176',
|
|
164
|
+
700: '#fff59d',
|
|
165
|
+
800: '#fff9c4',
|
|
166
|
+
900: '#ffffff',
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
green: {
|
|
170
|
+
50: '#000000',
|
|
171
|
+
100: '#0d2f10',
|
|
172
|
+
200: '#1b5e20',
|
|
173
|
+
300: '#2e7d32',
|
|
174
|
+
400: '#388e3c',
|
|
175
|
+
500: '#4caf50', // High contrast green
|
|
176
|
+
600: '#81c784',
|
|
177
|
+
700: '#a5d6a5',
|
|
178
|
+
800: '#c8e6c8',
|
|
179
|
+
900: '#ffffff',
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
blue: {
|
|
183
|
+
50: '#000000',
|
|
184
|
+
100: '#0a2472',
|
|
185
|
+
200: '#0d47a1',
|
|
186
|
+
300: '#1565c0',
|
|
187
|
+
400: '#1976d2',
|
|
188
|
+
500: '#2196f3', // High contrast blue
|
|
189
|
+
600: '#64b5f6',
|
|
190
|
+
700: '#90caf9',
|
|
191
|
+
800: '#bbdefb',
|
|
192
|
+
900: '#ffffff',
|
|
193
|
+
},
|
|
194
|
+
|
|
195
|
+
purple: {
|
|
196
|
+
50: '#000000',
|
|
197
|
+
100: '#3d1178',
|
|
198
|
+
200: '#4a148c',
|
|
199
|
+
300: '#6a1b9a',
|
|
200
|
+
400: '#7b1fa2',
|
|
201
|
+
500: '#9c27b0', // High contrast purple
|
|
202
|
+
600: '#ba68c8',
|
|
203
|
+
700: '#ce93d8',
|
|
204
|
+
800: '#e1bee7',
|
|
205
|
+
900: '#ffffff',
|
|
206
|
+
},
|
|
207
|
+
|
|
208
|
+
black: {
|
|
209
|
+
50: '#000000', // Pure black
|
|
210
|
+
100: '#000000',
|
|
211
|
+
200: '#000000',
|
|
212
|
+
300: '#000000',
|
|
213
|
+
400: '#000000',
|
|
214
|
+
500: '#000000',
|
|
215
|
+
600: '#000000',
|
|
216
|
+
700: '#000000',
|
|
217
|
+
800: '#000000',
|
|
218
|
+
900: '#000000',
|
|
219
|
+
},
|
|
220
|
+
|
|
221
|
+
gray: {
|
|
222
|
+
50: '#000000', // Pure black
|
|
223
|
+
100: '#111111',
|
|
224
|
+
200: '#222222',
|
|
225
|
+
300: '#333333',
|
|
226
|
+
400: '#555555',
|
|
227
|
+
500: '#777777',
|
|
228
|
+
600: '#aaaaaa',
|
|
229
|
+
700: '#cccccc',
|
|
230
|
+
800: '#eeeeee',
|
|
231
|
+
900: '#ffffff', // Pure white
|
|
232
|
+
},
|
|
233
|
+
|
|
234
|
+
white: {
|
|
235
|
+
50: '#000000',
|
|
236
|
+
100: '#202020',
|
|
237
|
+
200: '#404040',
|
|
238
|
+
300: '#606060',
|
|
239
|
+
400: '#808080',
|
|
240
|
+
500: '#a0a0a0',
|
|
241
|
+
600: '#c0c0c0',
|
|
242
|
+
700: '#e0e0e0',
|
|
243
|
+
800: '#f0f0f0',
|
|
244
|
+
900: '#ffffff', // Pure white
|
|
245
|
+
},
|
|
246
|
+
} as const;
|
|
247
|
+
|
|
248
|
+
// High contrast light intents
|
|
249
|
+
function createHighContrastLightIntents(palettes: typeof highContrastLightPalettes) {
|
|
250
|
+
return {
|
|
251
|
+
primary: {
|
|
252
|
+
main: palettes.blue[500], // Pure blue
|
|
253
|
+
on: '#ffffff', // Pure white text
|
|
254
|
+
container: palettes.blue[50], // White container
|
|
255
|
+
onContainer: palettes.blue[900], // Very dark blue text
|
|
256
|
+
light: palettes.blue[200],
|
|
257
|
+
dark: palettes.blue[800],
|
|
258
|
+
border: palettes.blue[500], // Strong border
|
|
259
|
+
},
|
|
260
|
+
success: {
|
|
261
|
+
main: palettes.green[500], // Pure green
|
|
262
|
+
on: '#ffffff', // Pure white text
|
|
263
|
+
container: palettes.green[50], // White container
|
|
264
|
+
onContainer: palettes.green[900], // Very dark green text
|
|
265
|
+
light: palettes.green[200],
|
|
266
|
+
dark: palettes.green[800],
|
|
267
|
+
border: palettes.green[500], // Strong border
|
|
268
|
+
},
|
|
269
|
+
error: {
|
|
270
|
+
main: palettes.red[500], // Pure red
|
|
271
|
+
on: '#ffffff', // Pure white text
|
|
272
|
+
container: palettes.red[50], // White container
|
|
273
|
+
onContainer: palettes.red[900], // Very dark red text
|
|
274
|
+
light: palettes.red[200],
|
|
275
|
+
dark: palettes.red[800],
|
|
276
|
+
border: palettes.red[500], // Strong border
|
|
277
|
+
},
|
|
278
|
+
warning: {
|
|
279
|
+
main: palettes.orange[500], // High contrast orange
|
|
280
|
+
on: '#000000', // Black text for better contrast
|
|
281
|
+
container: palettes.orange[50], // White container
|
|
282
|
+
onContainer: palettes.orange[900], // Very dark orange text
|
|
283
|
+
light: palettes.orange[200],
|
|
284
|
+
dark: palettes.orange[800],
|
|
285
|
+
border: palettes.orange[500], // Strong border
|
|
286
|
+
},
|
|
287
|
+
neutral: {
|
|
288
|
+
main: palettes.gray[500], // Medium gray
|
|
289
|
+
on: '#ffffff', // Pure white text
|
|
290
|
+
container: palettes.gray[50], // White container
|
|
291
|
+
onContainer: palettes.gray[900], // Pure black text
|
|
292
|
+
light: palettes.gray[200],
|
|
293
|
+
dark: palettes.gray[800],
|
|
294
|
+
border: palettes.gray[500], // Strong border
|
|
295
|
+
},
|
|
296
|
+
info: {
|
|
297
|
+
main: palettes.blue[500], // Pure blue
|
|
298
|
+
on: '#ffffff', // Pure white text
|
|
299
|
+
container: palettes.blue[50], // White container
|
|
300
|
+
onContainer: palettes.blue[900], // Very dark blue text
|
|
301
|
+
light: palettes.blue[200],
|
|
302
|
+
dark: palettes.blue[800],
|
|
303
|
+
border: palettes.blue[500], // Strong border
|
|
304
|
+
},
|
|
305
|
+
} as any;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// High contrast dark intents
|
|
309
|
+
function createHighContrastDarkIntents(palettes: typeof highContrastDarkPalettes) {
|
|
310
|
+
return {
|
|
311
|
+
primary: {
|
|
312
|
+
main: palettes.blue[500], // Pure blue
|
|
313
|
+
on: '#000000', // Pure black text
|
|
314
|
+
container: palettes.blue[50], // Black container
|
|
315
|
+
onContainer: palettes.blue[900], // Pure white text
|
|
316
|
+
light: palettes.blue[700],
|
|
317
|
+
dark: palettes.blue[300],
|
|
318
|
+
border: palettes.blue[500], // Strong border
|
|
319
|
+
},
|
|
320
|
+
success: {
|
|
321
|
+
main: palettes.green[500], // Pure green
|
|
322
|
+
on: '#000000', // Pure black text
|
|
323
|
+
container: palettes.green[50], // Black container
|
|
324
|
+
onContainer: palettes.green[900], // Pure white text
|
|
325
|
+
light: palettes.green[700],
|
|
326
|
+
dark: palettes.green[300],
|
|
327
|
+
border: palettes.green[500], // Strong border
|
|
328
|
+
},
|
|
329
|
+
error: {
|
|
330
|
+
main: palettes.red[500], // Pure red
|
|
331
|
+
on: '#000000', // Pure black text
|
|
332
|
+
container: palettes.red[50], // Black container
|
|
333
|
+
onContainer: palettes.red[900], // Pure white text
|
|
334
|
+
light: palettes.red[700],
|
|
335
|
+
dark: palettes.red[300],
|
|
336
|
+
border: palettes.red[500], // Strong border
|
|
337
|
+
},
|
|
338
|
+
warning: {
|
|
339
|
+
main: palettes.orange[500], // High contrast orange
|
|
340
|
+
on: '#000000', // Pure black text
|
|
341
|
+
container: palettes.orange[50], // Black container
|
|
342
|
+
onContainer: palettes.orange[900], // Pure white text
|
|
343
|
+
light: palettes.orange[700],
|
|
344
|
+
dark: palettes.orange[300],
|
|
345
|
+
border: palettes.orange[500], // Strong border
|
|
346
|
+
},
|
|
347
|
+
neutral: {
|
|
348
|
+
main: palettes.gray[500], // Medium gray
|
|
349
|
+
on: '#000000', // Pure black text
|
|
350
|
+
container: palettes.gray[50], // Black container
|
|
351
|
+
onContainer: palettes.gray[900], // Pure white text
|
|
352
|
+
light: palettes.gray[700],
|
|
353
|
+
dark: palettes.gray[300],
|
|
354
|
+
border: palettes.gray[500], // Strong border
|
|
355
|
+
},
|
|
356
|
+
info: {
|
|
357
|
+
main: palettes.blue[500], // Pure blue
|
|
358
|
+
on: '#000000', // Pure black text
|
|
359
|
+
container: palettes.blue[50], // Black container
|
|
360
|
+
onContainer: palettes.blue[900], // Pure white text
|
|
361
|
+
light: palettes.blue[700],
|
|
362
|
+
dark: palettes.blue[300],
|
|
363
|
+
border: palettes.blue[500], // Strong border
|
|
364
|
+
},
|
|
365
|
+
} as any;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// High contrast light colors
|
|
369
|
+
function createHighContrastLightColors(palettes: typeof highContrastLightPalettes) {
|
|
370
|
+
return {
|
|
371
|
+
text: {
|
|
372
|
+
primary: palettes.gray[900], // Pure black text
|
|
373
|
+
secondary: palettes.gray[800], // Very dark gray
|
|
374
|
+
disabled: palettes.gray[600], // Medium gray
|
|
375
|
+
inverse: palettes.gray[50], // Pure white
|
|
376
|
+
muted: palettes.gray[700], // Dark gray
|
|
377
|
+
placeholder: palettes.gray[600], // Medium gray
|
|
378
|
+
},
|
|
379
|
+
surface: {
|
|
380
|
+
primary: palettes.gray[50], // Pure white surface
|
|
381
|
+
secondary: palettes.gray[100], // Light gray surface
|
|
382
|
+
tertiary: palettes.gray[200], // Medium light surface
|
|
383
|
+
elevated: palettes.gray[50], // Pure white elevated
|
|
384
|
+
overlay: 'rgba(0, 0, 0, 0.8)', // Strong overlay
|
|
385
|
+
inverse: palettes.gray[900], // Pure black inverse
|
|
386
|
+
},
|
|
387
|
+
border: {
|
|
388
|
+
primary: palettes.gray[900], // Pure black border
|
|
389
|
+
secondary: palettes.gray[800], // Very dark border
|
|
390
|
+
strong: palettes.gray[900], // Pure black strong border
|
|
391
|
+
focus: palettes.blue[500], // Pure blue focus
|
|
392
|
+
disabled: palettes.gray[600], // Medium gray disabled
|
|
393
|
+
},
|
|
394
|
+
interactive: {
|
|
395
|
+
hover: palettes.gray[200], // Light gray hover
|
|
396
|
+
pressed: palettes.gray[300], // Medium light pressed
|
|
397
|
+
focus: palettes.blue[500], // Pure blue focus
|
|
398
|
+
disabled: palettes.gray[200], // Light gray disabled
|
|
399
|
+
},
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// High contrast dark colors
|
|
404
|
+
function createHighContrastDarkColors(palettes: typeof highContrastDarkPalettes) {
|
|
405
|
+
return {
|
|
406
|
+
text: {
|
|
407
|
+
primary: palettes.gray[900], // Pure white text
|
|
408
|
+
secondary: palettes.gray[800], // Very light gray
|
|
409
|
+
disabled: palettes.gray[600], // Medium gray
|
|
410
|
+
inverse: palettes.gray[50], // Pure black
|
|
411
|
+
muted: palettes.gray[700], // Light gray
|
|
412
|
+
placeholder: palettes.gray[600], // Medium gray
|
|
413
|
+
},
|
|
414
|
+
surface: {
|
|
415
|
+
primary: palettes.gray[50], // Pure black surface
|
|
416
|
+
secondary: palettes.gray[100], // Very dark surface
|
|
417
|
+
tertiary: palettes.gray[200], // Dark surface
|
|
418
|
+
elevated: palettes.gray[100], // Very dark elevated
|
|
419
|
+
overlay: 'rgba(0, 0, 0, 0.9)', // Very strong overlay
|
|
420
|
+
inverse: palettes.gray[900], // Pure white inverse
|
|
421
|
+
},
|
|
422
|
+
border: {
|
|
423
|
+
primary: palettes.gray[900], // Pure white border
|
|
424
|
+
secondary: palettes.gray[800], // Very light border
|
|
425
|
+
strong: palettes.gray[900], // Pure white strong border
|
|
426
|
+
focus: palettes.blue[500], // Pure blue focus
|
|
427
|
+
disabled: palettes.gray[600], // Medium gray disabled
|
|
428
|
+
},
|
|
429
|
+
interactive: {
|
|
430
|
+
hover: palettes.gray[200], // Dark hover
|
|
431
|
+
pressed: palettes.gray[300], // Medium dark pressed
|
|
432
|
+
focus: palettes.blue[500], // Pure blue focus
|
|
433
|
+
disabled: palettes.gray[200], // Dark disabled
|
|
434
|
+
},
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// Create high contrast themes
|
|
439
|
+
export const highContrastThemes = {
|
|
440
|
+
lightHighContrast: createTheme({
|
|
441
|
+
name: 'LightHighContrast',
|
|
442
|
+
mode: 'light',
|
|
443
|
+
palettes: highContrastLightPalettes,
|
|
444
|
+
intents: createHighContrastLightIntents(highContrastLightPalettes),
|
|
445
|
+
colors: createHighContrastLightColors(highContrastLightPalettes),
|
|
446
|
+
|
|
447
|
+
typography: {
|
|
448
|
+
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
|
|
449
|
+
fontWeight: {
|
|
450
|
+
light: '400', // No ultra-light weights for better readability
|
|
451
|
+
regular: '500', // Slightly heavier for better contrast
|
|
452
|
+
medium: '600', // Medium weight
|
|
453
|
+
semibold: '700', // Bold
|
|
454
|
+
bold: '800', // Extra bold
|
|
455
|
+
extrabold: '900', // Black
|
|
456
|
+
},
|
|
457
|
+
},
|
|
458
|
+
|
|
459
|
+
borderRadius: {
|
|
460
|
+
sm: 2, // Sharper corners for high contrast
|
|
461
|
+
md: 4,
|
|
462
|
+
lg: 6,
|
|
463
|
+
xl: 8,
|
|
464
|
+
xxl: 12,
|
|
465
|
+
},
|
|
466
|
+
|
|
467
|
+
spacing: {
|
|
468
|
+
xs: 4,
|
|
469
|
+
sm: 8,
|
|
470
|
+
md: 16,
|
|
471
|
+
lg: 24,
|
|
472
|
+
xl: 32,
|
|
473
|
+
xxl: 40,
|
|
474
|
+
xxxl: 48,
|
|
475
|
+
},
|
|
476
|
+
|
|
477
|
+
shadows: {
|
|
478
|
+
sm: {
|
|
479
|
+
shadowColor: '#000',
|
|
480
|
+
shadowOffset: { width: 0, height: 2 },
|
|
481
|
+
shadowOpacity: 0.25, // Stronger shadows
|
|
482
|
+
shadowRadius: 4,
|
|
483
|
+
elevation: 2,
|
|
484
|
+
},
|
|
485
|
+
md: {
|
|
486
|
+
shadowColor: '#000',
|
|
487
|
+
shadowOffset: { width: 0, height: 4 },
|
|
488
|
+
shadowOpacity: 0.3, // Stronger shadows
|
|
489
|
+
shadowRadius: 8,
|
|
490
|
+
elevation: 4,
|
|
491
|
+
},
|
|
492
|
+
lg: {
|
|
493
|
+
shadowColor: '#000',
|
|
494
|
+
shadowOffset: { width: 0, height: 8 },
|
|
495
|
+
shadowOpacity: 0.35, // Stronger shadows
|
|
496
|
+
shadowRadius: 16,
|
|
497
|
+
elevation: 8,
|
|
498
|
+
},
|
|
499
|
+
},
|
|
500
|
+
|
|
501
|
+
transitions: {
|
|
502
|
+
fast: '0.1s ease', // Faster transitions
|
|
503
|
+
base: '0.15s ease',
|
|
504
|
+
slow: '0.2s ease',
|
|
505
|
+
button: 'all 0.15s ease',
|
|
506
|
+
fade: 'opacity 0.15s ease',
|
|
507
|
+
slide: 'transform 0.2s ease',
|
|
508
|
+
},
|
|
509
|
+
}),
|
|
510
|
+
|
|
511
|
+
darkHighContrast: createTheme({
|
|
512
|
+
name: 'DarkHighContrast',
|
|
513
|
+
mode: 'dark',
|
|
514
|
+
palettes: highContrastDarkPalettes,
|
|
515
|
+
intents: createHighContrastDarkIntents(highContrastDarkPalettes),
|
|
516
|
+
colors: createHighContrastDarkColors(highContrastDarkPalettes),
|
|
517
|
+
|
|
518
|
+
typography: {
|
|
519
|
+
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
|
|
520
|
+
fontWeight: {
|
|
521
|
+
light: '400', // No ultra-light weights for better readability
|
|
522
|
+
regular: '500', // Slightly heavier for better contrast
|
|
523
|
+
medium: '600', // Medium weight
|
|
524
|
+
semibold: '700', // Bold
|
|
525
|
+
bold: '800', // Extra bold
|
|
526
|
+
extrabold: '900', // Black
|
|
527
|
+
},
|
|
528
|
+
},
|
|
529
|
+
|
|
530
|
+
borderRadius: {
|
|
531
|
+
sm: 2, // Sharper corners for high contrast
|
|
532
|
+
md: 4,
|
|
533
|
+
lg: 6,
|
|
534
|
+
xl: 8,
|
|
535
|
+
xxl: 12,
|
|
536
|
+
},
|
|
537
|
+
|
|
538
|
+
spacing: {
|
|
539
|
+
xs: 4,
|
|
540
|
+
sm: 8,
|
|
541
|
+
md: 16,
|
|
542
|
+
lg: 24,
|
|
543
|
+
xl: 32,
|
|
544
|
+
xxl: 40,
|
|
545
|
+
xxxl: 48,
|
|
546
|
+
},
|
|
547
|
+
|
|
548
|
+
shadows: {
|
|
549
|
+
sm: {
|
|
550
|
+
shadowColor: '#000',
|
|
551
|
+
shadowOffset: { width: 0, height: 2 },
|
|
552
|
+
shadowOpacity: 0.5, // Much stronger shadows for dark mode
|
|
553
|
+
shadowRadius: 4,
|
|
554
|
+
elevation: 2,
|
|
555
|
+
},
|
|
556
|
+
md: {
|
|
557
|
+
shadowColor: '#000',
|
|
558
|
+
shadowOffset: { width: 0, height: 4 },
|
|
559
|
+
shadowOpacity: 0.6, // Much stronger shadows for dark mode
|
|
560
|
+
shadowRadius: 8,
|
|
561
|
+
elevation: 4,
|
|
562
|
+
},
|
|
563
|
+
lg: {
|
|
564
|
+
shadowColor: '#000',
|
|
565
|
+
shadowOffset: { width: 0, height: 8 },
|
|
566
|
+
shadowOpacity: 0.7, // Much stronger shadows for dark mode
|
|
567
|
+
shadowRadius: 16,
|
|
568
|
+
elevation: 8,
|
|
569
|
+
},
|
|
570
|
+
},
|
|
571
|
+
|
|
572
|
+
transitions: {
|
|
573
|
+
fast: '0.1s ease', // Faster transitions
|
|
574
|
+
base: '0.15s ease',
|
|
575
|
+
slow: '0.2s ease',
|
|
576
|
+
button: 'all 0.15s ease',
|
|
577
|
+
fade: 'opacity 0.15s ease',
|
|
578
|
+
slide: 'transform 0.2s ease',
|
|
579
|
+
},
|
|
580
|
+
}),
|
|
581
|
+
} as const;
|
|
582
|
+
|
|
583
|
+
// Extended type definitions for TypeScript
|
|
584
|
+
export type HighContrastThemeVariant = 'lightHighContrast' | 'darkHighContrast';
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { breakpoints, extendedThemes } from '@idealyst/components/src/theme';
|
|
2
|
+
import { highContrastThemes } from './highContrastThemes';
|
|
3
|
+
import { StyleSheet } from 'react-native-unistyles';
|
|
4
|
+
|
|
5
|
+
// Extend UnistylesThemes to include high contrast themes
|
|
6
|
+
// This overrides the more limited declaration from the components package
|
|
7
|
+
declare module 'react-native-unistyles' {
|
|
8
|
+
export interface UnistylesThemes {
|
|
9
|
+
light: typeof extendedThemes.light;
|
|
10
|
+
dark: typeof extendedThemes.dark;
|
|
11
|
+
lightHighContrast: typeof highContrastThemes.lightHighContrast;
|
|
12
|
+
darkHighContrast: typeof highContrastThemes.darkHighContrast;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Configure with all themes, including high contrast variants
|
|
17
|
+
// This will override any previous configuration
|
|
18
|
+
StyleSheet.configure({
|
|
19
|
+
themes: {
|
|
20
|
+
light: extendedThemes.light,
|
|
21
|
+
dark: extendedThemes.dark,
|
|
22
|
+
lightHighContrast: highContrastThemes.lightHighContrast,
|
|
23
|
+
darkHighContrast: highContrastThemes.darkHighContrast,
|
|
24
|
+
},
|
|
25
|
+
settings: {
|
|
26
|
+
initialTheme: 'light',
|
|
27
|
+
},
|
|
28
|
+
breakpoints,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Export theme names for easy reference
|
|
32
|
+
export const availableThemes = [
|
|
33
|
+
'light',
|
|
34
|
+
'dark',
|
|
35
|
+
'lightHighContrast',
|
|
36
|
+
'darkHighContrast'
|
|
37
|
+
] as const;
|
|
38
|
+
|
|
39
|
+
export type AvailableTheme = typeof availableThemes[number];
|
|
40
|
+
|
|
41
|
+
// Helper function to get next theme in rotation
|
|
42
|
+
export function getNextTheme(currentTheme: string): AvailableTheme {
|
|
43
|
+
const currentIndex = availableThemes.indexOf(currentTheme as AvailableTheme);
|
|
44
|
+
const nextIndex = (currentIndex + 1) % availableThemes.length;
|
|
45
|
+
return availableThemes[nextIndex];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Helper function to get theme display name
|
|
49
|
+
export function getThemeDisplayName(theme: string): string {
|
|
50
|
+
switch (theme) {
|
|
51
|
+
case 'light':
|
|
52
|
+
return 'Light';
|
|
53
|
+
case 'dark':
|
|
54
|
+
return 'Dark';
|
|
55
|
+
case 'lightHighContrast':
|
|
56
|
+
return 'Light High Contrast';
|
|
57
|
+
case 'darkHighContrast':
|
|
58
|
+
return 'Dark High Contrast';
|
|
59
|
+
default:
|
|
60
|
+
return theme;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Helper function to check if theme is high contrast
|
|
65
|
+
export function isHighContrastTheme(theme: string): boolean {
|
|
66
|
+
return theme.includes('HighContrast');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Helper function to get matching theme mode
|
|
70
|
+
export function getThemeMode(theme: string): 'light' | 'dark' {
|
|
71
|
+
return theme.includes('dark') ? 'dark' : 'light';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Helper function to get high contrast variant of current theme
|
|
75
|
+
export function getHighContrastVariant(theme: string): AvailableTheme {
|
|
76
|
+
const mode = getThemeMode(theme);
|
|
77
|
+
return mode === 'dark' ? 'darkHighContrast' : 'lightHighContrast';
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Helper function to get standard variant of current theme
|
|
81
|
+
export function getStandardVariant(theme: string): AvailableTheme {
|
|
82
|
+
const mode = getThemeMode(theme);
|
|
83
|
+
return mode === 'dark' ? 'dark' : 'light';
|
|
84
|
+
}
|