zero-to-app 3.2.1 → 3.2.2
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/brand/brand-config.d.ts +65 -0
- package/dist/brand/brand-config.d.ts.map +1 -0
- package/dist/brand/brand-config.js +68 -0
- package/dist/brand/brand-config.js.map +1 -0
- package/dist/brand/brand-context.d.ts +55 -0
- package/dist/brand/brand-context.d.ts.map +1 -0
- package/dist/brand/brand-context.js +76 -0
- package/dist/brand/brand-context.js.map +1 -0
- package/dist/brand/brand-types.d.ts +92 -0
- package/dist/brand/brand-types.d.ts.map +1 -0
- package/dist/brand/brand-types.js +2 -0
- package/dist/brand/brand-types.js.map +1 -0
- package/dist/brand/default-brand.d.ts +11 -0
- package/dist/brand/default-brand.d.ts.map +1 -0
- package/dist/brand/default-brand.js +32 -0
- package/dist/brand/default-brand.js.map +1 -0
- package/dist/brand/index.d.ts +6 -0
- package/dist/brand/index.d.ts.map +1 -0
- package/dist/brand/index.js +8 -0
- package/dist/brand/index.js.map +1 -0
- package/dist/brand/palette-generator.d.ts +64 -0
- package/dist/brand/palette-generator.d.ts.map +1 -0
- package/dist/brand/palette-generator.js +292 -0
- package/dist/brand/palette-generator.js.map +1 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +3 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/navigation/app-tabs/app-tabs.d.ts +63 -0
- package/dist/components/navigation/app-tabs/app-tabs.d.ts.map +1 -0
- package/dist/components/navigation/app-tabs/app-tabs.js +13 -0
- package/dist/components/navigation/app-tabs/app-tabs.js.map +1 -0
- package/dist/components/navigation/app-tabs/app-tabs.web.d.ts +47 -0
- package/dist/components/navigation/app-tabs/app-tabs.web.d.ts.map +1 -0
- package/dist/components/navigation/app-tabs/app-tabs.web.js +104 -0
- package/dist/components/navigation/app-tabs/app-tabs.web.js.map +1 -0
- package/dist/components/navigation/app-tabs/index.d.ts +3 -0
- package/dist/components/navigation/app-tabs/index.d.ts.map +1 -0
- package/dist/components/navigation/app-tabs/index.js +3 -0
- package/dist/components/navigation/app-tabs/index.js.map +1 -0
- package/dist/components/navigation/drawer/drawer.d.ts +24 -0
- package/dist/components/navigation/drawer/drawer.d.ts.map +1 -0
- package/dist/components/navigation/drawer/drawer.js +82 -0
- package/dist/components/navigation/drawer/drawer.js.map +1 -0
- package/dist/components/navigation/index.d.ts +10 -0
- package/dist/components/navigation/index.d.ts.map +1 -0
- package/dist/components/navigation/index.js +11 -0
- package/dist/components/navigation/index.js.map +1 -0
- package/dist/components/navigation/native-header.d.ts +25 -0
- package/dist/components/navigation/native-header.d.ts.map +1 -0
- package/dist/components/navigation/native-header.js +32 -0
- package/dist/components/navigation/native-header.js.map +1 -0
- package/dist/components/navigation/shared/sidebar-styles.d.ts +34 -0
- package/dist/components/navigation/shared/sidebar-styles.d.ts.map +1 -0
- package/dist/components/navigation/shared/sidebar-styles.js +34 -0
- package/dist/components/navigation/shared/sidebar-styles.js.map +1 -0
- package/dist/components/navigation/sidebar/index.d.ts +10 -0
- package/dist/components/navigation/sidebar/index.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/index.js +7 -0
- package/dist/components/navigation/sidebar/index.js.map +1 -0
- package/dist/components/navigation/sidebar/sidebar-footer.d.ts +18 -0
- package/dist/components/navigation/sidebar/sidebar-footer.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/sidebar-footer.js +27 -0
- package/dist/components/navigation/sidebar/sidebar-footer.js.map +1 -0
- package/dist/components/navigation/sidebar/sidebar-header.d.ts +26 -0
- package/dist/components/navigation/sidebar/sidebar-header.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/sidebar-header.js +38 -0
- package/dist/components/navigation/sidebar/sidebar-header.js.map +1 -0
- package/dist/components/navigation/sidebar/sidebar-item.d.ts +36 -0
- package/dist/components/navigation/sidebar/sidebar-item.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/sidebar-item.js +63 -0
- package/dist/components/navigation/sidebar/sidebar-item.js.map +1 -0
- package/dist/components/navigation/sidebar/sidebar-section.d.ts +34 -0
- package/dist/components/navigation/sidebar/sidebar-section.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/sidebar-section.js +56 -0
- package/dist/components/navigation/sidebar/sidebar-section.js.map +1 -0
- package/dist/components/navigation/sidebar/sidebar.d.ts +2 -0
- package/dist/components/navigation/sidebar/sidebar.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/sidebar.js +4 -0
- package/dist/components/navigation/sidebar/sidebar.js.map +1 -0
- package/dist/components/navigation/sidebar/sidebar.native.d.ts +23 -0
- package/dist/components/navigation/sidebar/sidebar.native.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/sidebar.native.js +80 -0
- package/dist/components/navigation/sidebar/sidebar.native.js.map +1 -0
- package/dist/components/navigation/sidebar/sidebar.web.d.ts +26 -0
- package/dist/components/navigation/sidebar/sidebar.web.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/sidebar.web.js +90 -0
- package/dist/components/navigation/sidebar/sidebar.web.js.map +1 -0
- package/dist/components/navigation/themed-stack.d.ts +25 -0
- package/dist/components/navigation/themed-stack.d.ts.map +1 -0
- package/dist/components/navigation/themed-stack.js +37 -0
- package/dist/components/navigation/themed-stack.js.map +1 -0
- package/dist/components/shared/index.d.ts +3 -0
- package/dist/components/shared/index.d.ts.map +1 -0
- package/dist/components/shared/index.js +2 -0
- package/dist/components/shared/index.js.map +1 -0
- package/dist/components/shared/types.d.ts +82 -0
- package/dist/components/shared/types.d.ts.map +1 -0
- package/dist/components/shared/types.js +2 -0
- package/dist/components/shared/types.js.map +1 -0
- package/dist/components/shared/utils.d.ts +19 -0
- package/dist/components/shared/utils.d.ts.map +1 -0
- package/dist/components/shared/utils.js +23 -0
- package/dist/components/shared/utils.js.map +1 -0
- package/dist/components/ui/button.d.ts +132 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +252 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/chip.d.ts +88 -0
- package/dist/components/ui/chip.d.ts.map +1 -0
- package/dist/components/ui/chip.js +129 -0
- package/dist/components/ui/chip.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +88 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +66 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/container.d.ts +31 -0
- package/dist/components/ui/container.d.ts.map +1 -0
- package/dist/components/ui/container.js +46 -0
- package/dist/components/ui/container.js.map +1 -0
- package/dist/components/ui/fab.d.ts +51 -0
- package/dist/components/ui/fab.d.ts.map +1 -0
- package/dist/components/ui/fab.js +142 -0
- package/dist/components/ui/fab.js.map +1 -0
- package/dist/components/ui/index.d.ts +23 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +22 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/components/ui/screen.d.ts +40 -0
- package/dist/components/ui/screen.d.ts.map +1 -0
- package/dist/components/ui/screen.js +57 -0
- package/dist/components/ui/screen.js.map +1 -0
- package/dist/components/ui/slider.d.ts +47 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/slider.js +41 -0
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/themed-image.d.ts +7 -0
- package/dist/components/ui/themed-image.d.ts.map +1 -0
- package/dist/components/ui/themed-image.js +9 -0
- package/dist/components/ui/themed-image.js.map +1 -0
- package/dist/components/ui/themed-view.d.ts +20 -0
- package/dist/components/ui/themed-view.d.ts.map +1 -0
- package/dist/components/ui/themed-view.js +75 -0
- package/dist/components/ui/themed-view.js.map +1 -0
- package/dist/components/ui/typography.d.ts +110 -0
- package/dist/components/ui/typography.d.ts.map +1 -0
- package/dist/components/ui/typography.js +69 -0
- package/dist/components/ui/typography.js.map +1 -0
- package/dist/context/layout-context.d.ts +66 -0
- package/dist/context/layout-context.d.ts.map +1 -0
- package/dist/context/layout-context.js +83 -0
- package/dist/context/layout-context.js.map +1 -0
- package/dist/context/scroll-context.d.ts +8 -0
- package/dist/context/scroll-context.d.ts.map +1 -0
- package/dist/context/scroll-context.js +16 -0
- package/dist/context/scroll-context.js.map +1 -0
- package/dist/context/sidebar-context.d.ts +74 -0
- package/dist/context/sidebar-context.d.ts.map +1 -0
- package/dist/context/sidebar-context.js +95 -0
- package/dist/context/sidebar-context.js.map +1 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use-breakpoint.d.ts +8 -0
- package/dist/hooks/use-breakpoint.d.ts.map +1 -0
- package/dist/hooks/use-breakpoint.js +10 -0
- package/dist/hooks/use-breakpoint.js.map +1 -0
- package/dist/hooks/use-dimensions.d.ts +31 -0
- package/dist/hooks/use-dimensions.d.ts.map +1 -0
- package/dist/hooks/use-dimensions.js +44 -0
- package/dist/hooks/use-dimensions.js.map +1 -0
- package/dist/hooks/use-route-navigation.d.ts +19 -0
- package/dist/hooks/use-route-navigation.d.ts.map +1 -0
- package/dist/hooks/use-route-navigation.js +25 -0
- package/dist/hooks/use-route-navigation.js.map +1 -0
- package/dist/icons/icon-utils.d.ts +24 -0
- package/dist/icons/icon-utils.d.ts.map +1 -0
- package/dist/icons/icon-utils.js +57 -0
- package/dist/icons/icon-utils.js.map +1 -0
- package/dist/icons/index.d.ts +13 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +12 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/theme/high-contrast-theme.d.ts +19 -0
- package/dist/theme/high-contrast-theme.d.ts.map +1 -0
- package/dist/theme/high-contrast-theme.js +257 -0
- package/dist/theme/high-contrast-theme.js.map +1 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +6 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-config.d.ts +150 -0
- package/dist/theme/theme-config.d.ts.map +1 -0
- package/dist/theme/theme-config.js +318 -0
- package/dist/theme/theme-config.js.map +1 -0
- package/dist/theme/theme.d.ts +106 -0
- package/dist/theme/theme.d.ts.map +1 -0
- package/dist/theme/theme.js +135 -0
- package/dist/theme/theme.js.map +1 -0
- package/dist/utils/contrast-checker.d.ts +51 -0
- package/dist/utils/contrast-checker.d.ts.map +1 -0
- package/dist/utils/contrast-checker.js +97 -0
- package/dist/utils/contrast-checker.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Material Design 3 Color Palette Generator
|
|
3
|
+
* Uses @material/material-color-utilities to generate tonal palettes from seed colors
|
|
4
|
+
* Reference: https://m3.material.io/styles/color/the-color-system/color-roles
|
|
5
|
+
*/
|
|
6
|
+
import { argbFromHex, hexFromArgb, TonalPalette, Hct, } from '@material/material-color-utilities';
|
|
7
|
+
/**
|
|
8
|
+
* Generates a tonal palette from a seed color
|
|
9
|
+
* @param seedColor Hex color string (e.g., '#6750A4')
|
|
10
|
+
* @returns TonalPalette with tones 0-100
|
|
11
|
+
*/
|
|
12
|
+
function generateTonalPalette(seedColor) {
|
|
13
|
+
const argb = argbFromHex(seedColor);
|
|
14
|
+
const hct = Hct.fromInt(argb);
|
|
15
|
+
return TonalPalette.fromHueAndChroma(hct.hue, hct.chroma);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generates secondary palette from primary
|
|
19
|
+
* Uses same hue with reduced chroma for harmony
|
|
20
|
+
*/
|
|
21
|
+
function generateSecondaryPalette(primaryColor) {
|
|
22
|
+
const argb = argbFromHex(primaryColor);
|
|
23
|
+
const hct = Hct.fromInt(argb);
|
|
24
|
+
// Secondary uses same hue but lower chroma (16 is M3 standard)
|
|
25
|
+
return TonalPalette.fromHueAndChroma(hct.hue, Math.min(16, hct.chroma));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generates tertiary palette from primary
|
|
29
|
+
* Uses complementary hue for contrast
|
|
30
|
+
*/
|
|
31
|
+
function generateTertiaryPalette(primaryColor) {
|
|
32
|
+
const argb = argbFromHex(primaryColor);
|
|
33
|
+
const hct = Hct.fromInt(argb);
|
|
34
|
+
// Tertiary uses complementary hue (+60 degrees)
|
|
35
|
+
const tertiaryHue = (hct.hue + 60) % 360;
|
|
36
|
+
return TonalPalette.fromHueAndChroma(tertiaryHue, Math.max(24, hct.chroma));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Generates neutral palette from primary
|
|
40
|
+
* Uses very low chroma for subtle tinting
|
|
41
|
+
*/
|
|
42
|
+
function generateNeutralPalette(primaryColor) {
|
|
43
|
+
const argb = argbFromHex(primaryColor);
|
|
44
|
+
const hct = Hct.fromInt(argb);
|
|
45
|
+
// Neutral uses same hue with very low chroma (4 is M3 standard)
|
|
46
|
+
return TonalPalette.fromHueAndChroma(hct.hue, 4);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Generates neutral variant palette from primary
|
|
50
|
+
* Uses low chroma for subtle variation
|
|
51
|
+
*/
|
|
52
|
+
function generateNeutralVariantPalette(primaryColor) {
|
|
53
|
+
const argb = argbFromHex(primaryColor);
|
|
54
|
+
const hct = Hct.fromInt(argb);
|
|
55
|
+
// Neutral variant uses same hue with low chroma (8 is M3 standard)
|
|
56
|
+
return TonalPalette.fromHueAndChroma(hct.hue, 8);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Generates M3 error palette
|
|
60
|
+
* Uses standard red hue with appropriate chroma
|
|
61
|
+
*/
|
|
62
|
+
function generateErrorPalette() {
|
|
63
|
+
// M3 standard error color: red with hue ~25, chroma ~84
|
|
64
|
+
return TonalPalette.fromHueAndChroma(25, 84);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generates a complete Material Design 3 light theme color scheme from seed colors
|
|
68
|
+
* @param options Seed colors for generating palettes
|
|
69
|
+
* @returns Complete Colors object for light theme
|
|
70
|
+
*/
|
|
71
|
+
export function generateLightColors(options) {
|
|
72
|
+
// Generate tonal palettes
|
|
73
|
+
const primaryPalette = generateTonalPalette(options.primary);
|
|
74
|
+
const secondaryPalette = options.secondary
|
|
75
|
+
? generateTonalPalette(options.secondary)
|
|
76
|
+
: generateSecondaryPalette(options.primary);
|
|
77
|
+
const tertiaryPalette = options.tertiary
|
|
78
|
+
? generateTonalPalette(options.tertiary)
|
|
79
|
+
: generateTertiaryPalette(options.primary);
|
|
80
|
+
const errorPalette = options.error
|
|
81
|
+
? generateTonalPalette(options.error)
|
|
82
|
+
: generateErrorPalette();
|
|
83
|
+
const neutralPalette = options.neutral
|
|
84
|
+
? generateTonalPalette(options.neutral)
|
|
85
|
+
: generateNeutralPalette(options.primary);
|
|
86
|
+
const neutralVariantPalette = options.neutralVariant
|
|
87
|
+
? generateTonalPalette(options.neutralVariant)
|
|
88
|
+
: generateNeutralVariantPalette(options.primary);
|
|
89
|
+
// Build light theme using M3 tone mappings
|
|
90
|
+
// Reference: https://m3.material.io/styles/color/the-color-system/tokens
|
|
91
|
+
return {
|
|
92
|
+
// Primary — use the exact seed color so the brand color is preserved exactly.
|
|
93
|
+
// onPrimary is computed from contrast (white or black) against that exact color.
|
|
94
|
+
primary: options.primary,
|
|
95
|
+
onPrimary: pickOnColor(options.primary),
|
|
96
|
+
primaryContainer: hexFromArgb(primaryPalette.tone(90)),
|
|
97
|
+
onPrimaryContainer: hexFromArgb(primaryPalette.tone(10)),
|
|
98
|
+
// Secondary
|
|
99
|
+
secondary: hexFromArgb(secondaryPalette.tone(40)),
|
|
100
|
+
onSecondary: hexFromArgb(secondaryPalette.tone(100)),
|
|
101
|
+
secondaryContainer: hexFromArgb(secondaryPalette.tone(90)),
|
|
102
|
+
onSecondaryContainer: hexFromArgb(secondaryPalette.tone(10)),
|
|
103
|
+
// Tertiary
|
|
104
|
+
tertiary: hexFromArgb(tertiaryPalette.tone(40)),
|
|
105
|
+
onTertiary: hexFromArgb(tertiaryPalette.tone(100)),
|
|
106
|
+
tertiaryContainer: hexFromArgb(tertiaryPalette.tone(90)),
|
|
107
|
+
onTertiaryContainer: hexFromArgb(tertiaryPalette.tone(10)),
|
|
108
|
+
// Error
|
|
109
|
+
error: hexFromArgb(errorPalette.tone(40)),
|
|
110
|
+
onError: hexFromArgb(errorPalette.tone(100)),
|
|
111
|
+
errorContainer: hexFromArgb(errorPalette.tone(90)),
|
|
112
|
+
onErrorContainer: hexFromArgb(errorPalette.tone(10)),
|
|
113
|
+
// Surface
|
|
114
|
+
surface: hexFromArgb(neutralPalette.tone(98)),
|
|
115
|
+
onSurface: hexFromArgb(neutralPalette.tone(10)),
|
|
116
|
+
onSurfaceVariant: hexFromArgb(neutralVariantPalette.tone(30)),
|
|
117
|
+
// Surface containers
|
|
118
|
+
surfaceContainerLowest: hexFromArgb(neutralPalette.tone(100)),
|
|
119
|
+
surfaceContainerLow: hexFromArgb(neutralPalette.tone(96)),
|
|
120
|
+
surfaceContainer: hexFromArgb(neutralPalette.tone(94)),
|
|
121
|
+
surfaceContainerHigh: hexFromArgb(neutralPalette.tone(92)),
|
|
122
|
+
surfaceContainerHighest: hexFromArgb(neutralPalette.tone(90)),
|
|
123
|
+
// Outline
|
|
124
|
+
outline: hexFromArgb(neutralVariantPalette.tone(50)),
|
|
125
|
+
outlineVariant: hexFromArgb(neutralVariantPalette.tone(80)),
|
|
126
|
+
// Inverse
|
|
127
|
+
inverseSurface: hexFromArgb(neutralPalette.tone(20)),
|
|
128
|
+
inverseOnSurface: hexFromArgb(neutralPalette.tone(95)),
|
|
129
|
+
inversePrimary: hexFromArgb(primaryPalette.tone(80)),
|
|
130
|
+
// Semantic
|
|
131
|
+
scrim: hexFromArgb(neutralPalette.tone(0)),
|
|
132
|
+
shadow: hexFromArgb(neutralPalette.tone(0)),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Generates a complete Material Design 3 dark theme color scheme from seed colors
|
|
137
|
+
* @param options Seed colors for generating palettes
|
|
138
|
+
* @returns Complete Colors object for dark theme
|
|
139
|
+
*/
|
|
140
|
+
export function generateDarkColors(options) {
|
|
141
|
+
// Generate tonal palettes (same as light)
|
|
142
|
+
const primaryPalette = generateTonalPalette(options.primary);
|
|
143
|
+
const secondaryPalette = options.secondary
|
|
144
|
+
? generateTonalPalette(options.secondary)
|
|
145
|
+
: generateSecondaryPalette(options.primary);
|
|
146
|
+
const tertiaryPalette = options.tertiary
|
|
147
|
+
? generateTonalPalette(options.tertiary)
|
|
148
|
+
: generateTertiaryPalette(options.primary);
|
|
149
|
+
const errorPalette = options.error
|
|
150
|
+
? generateTonalPalette(options.error)
|
|
151
|
+
: generateErrorPalette();
|
|
152
|
+
const neutralPalette = options.neutral
|
|
153
|
+
? generateTonalPalette(options.neutral)
|
|
154
|
+
: generateNeutralPalette(options.primary);
|
|
155
|
+
const neutralVariantPalette = options.neutralVariant
|
|
156
|
+
? generateTonalPalette(options.neutralVariant)
|
|
157
|
+
: generateNeutralVariantPalette(options.primary);
|
|
158
|
+
// Build dark theme using M3 tone mappings
|
|
159
|
+
// Dark theme uses inverted tone values
|
|
160
|
+
return {
|
|
161
|
+
// Primary — same exact brand color in dark mode; onPrimary adapts via contrast.
|
|
162
|
+
primary: options.primary,
|
|
163
|
+
onPrimary: pickOnColor(options.primary),
|
|
164
|
+
primaryContainer: hexFromArgb(primaryPalette.tone(30)),
|
|
165
|
+
onPrimaryContainer: hexFromArgb(primaryPalette.tone(90)),
|
|
166
|
+
// Secondary
|
|
167
|
+
secondary: hexFromArgb(secondaryPalette.tone(80)),
|
|
168
|
+
onSecondary: hexFromArgb(secondaryPalette.tone(20)),
|
|
169
|
+
secondaryContainer: hexFromArgb(secondaryPalette.tone(30)),
|
|
170
|
+
onSecondaryContainer: hexFromArgb(secondaryPalette.tone(90)),
|
|
171
|
+
// Tertiary
|
|
172
|
+
tertiary: hexFromArgb(tertiaryPalette.tone(80)),
|
|
173
|
+
onTertiary: hexFromArgb(tertiaryPalette.tone(20)),
|
|
174
|
+
tertiaryContainer: hexFromArgb(tertiaryPalette.tone(30)),
|
|
175
|
+
onTertiaryContainer: hexFromArgb(tertiaryPalette.tone(90)),
|
|
176
|
+
// Error
|
|
177
|
+
error: hexFromArgb(errorPalette.tone(80)),
|
|
178
|
+
onError: hexFromArgb(errorPalette.tone(20)),
|
|
179
|
+
errorContainer: hexFromArgb(errorPalette.tone(30)),
|
|
180
|
+
onErrorContainer: hexFromArgb(errorPalette.tone(90)),
|
|
181
|
+
// Surface
|
|
182
|
+
surface: hexFromArgb(neutralPalette.tone(6)),
|
|
183
|
+
onSurface: hexFromArgb(neutralPalette.tone(90)),
|
|
184
|
+
onSurfaceVariant: hexFromArgb(neutralVariantPalette.tone(80)),
|
|
185
|
+
// Surface containers
|
|
186
|
+
surfaceContainerLowest: hexFromArgb(neutralPalette.tone(4)),
|
|
187
|
+
surfaceContainerLow: hexFromArgb(neutralPalette.tone(10)),
|
|
188
|
+
surfaceContainer: hexFromArgb(neutralPalette.tone(12)),
|
|
189
|
+
surfaceContainerHigh: hexFromArgb(neutralPalette.tone(17)),
|
|
190
|
+
surfaceContainerHighest: hexFromArgb(neutralPalette.tone(22)),
|
|
191
|
+
// Outline
|
|
192
|
+
outline: hexFromArgb(neutralVariantPalette.tone(60)),
|
|
193
|
+
outlineVariant: hexFromArgb(neutralVariantPalette.tone(30)),
|
|
194
|
+
// Inverse
|
|
195
|
+
inverseSurface: hexFromArgb(neutralPalette.tone(90)),
|
|
196
|
+
inverseOnSurface: hexFromArgb(neutralPalette.tone(20)),
|
|
197
|
+
inversePrimary: hexFromArgb(primaryPalette.tone(40)),
|
|
198
|
+
// Semantic
|
|
199
|
+
scrim: hexFromArgb(neutralPalette.tone(0)),
|
|
200
|
+
shadow: hexFromArgb(neutralPalette.tone(0)),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Pick white or black as the on-color for a given background, based on contrast.
|
|
205
|
+
*/
|
|
206
|
+
function pickOnColor(background) {
|
|
207
|
+
return contrastRatio('#FFFFFF', background) >= contrastRatio('#000000', background)
|
|
208
|
+
? '#FFFFFF'
|
|
209
|
+
: '#000000';
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Compute WCAG 2.1 relative luminance for an ARGB integer.
|
|
213
|
+
* https://www.w3.org/TR/WCAG21/#dfn-relative-luminance
|
|
214
|
+
*/
|
|
215
|
+
function relativeLuminance(argb) {
|
|
216
|
+
const linearize = (val) => val <= 0.04045 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);
|
|
217
|
+
const r = linearize(((argb >> 16) & 0xFF) / 255);
|
|
218
|
+
const g = linearize(((argb >> 8) & 0xFF) / 255);
|
|
219
|
+
const b = linearize((argb & 0xFF) / 255);
|
|
220
|
+
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Compute the WCAG 2.1 contrast ratio between two hex colors.
|
|
224
|
+
* Returns a value between 1 (no contrast) and 21 (black on white).
|
|
225
|
+
* https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio
|
|
226
|
+
*/
|
|
227
|
+
export function contrastRatio(foreground, background) {
|
|
228
|
+
const fgL = relativeLuminance(argbFromHex(foreground));
|
|
229
|
+
const bgL = relativeLuminance(argbFromHex(background));
|
|
230
|
+
const lighter = Math.max(fgL, bgL);
|
|
231
|
+
const darker = Math.min(fgL, bgL);
|
|
232
|
+
return (lighter + 0.05) / (darker + 0.05);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Check if two colors meet a minimum WCAG contrast ratio.
|
|
236
|
+
* @param foreground Foreground color (hex)
|
|
237
|
+
* @param background Background color (hex)
|
|
238
|
+
* @param minRatio Minimum contrast ratio (default: 4.5 for AA compliance)
|
|
239
|
+
* @returns true if contrast meets minimum ratio
|
|
240
|
+
*/
|
|
241
|
+
export function hasContrastRatio(foreground, background, minRatio = 4.5) {
|
|
242
|
+
return contrastRatio(foreground, background) >= minRatio;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Generate high-contrast color adjustments
|
|
246
|
+
* Increases contrast for accessibility compliance
|
|
247
|
+
*/
|
|
248
|
+
export function generateHighContrastColors(baseColors) {
|
|
249
|
+
// In high-contrast mode, increase tone differences
|
|
250
|
+
// This is a simplified version - production would use full WCAG calculations
|
|
251
|
+
return {
|
|
252
|
+
...baseColors,
|
|
253
|
+
// Increase contrast for all on-color pairs
|
|
254
|
+
onPrimary: '#FFFFFF',
|
|
255
|
+
onSecondary: '#FFFFFF',
|
|
256
|
+
onTertiary: '#FFFFFF',
|
|
257
|
+
onError: '#FFFFFF',
|
|
258
|
+
onSurface: '#000000',
|
|
259
|
+
onSurfaceVariant: '#000000',
|
|
260
|
+
onPrimaryContainer: '#000000',
|
|
261
|
+
onSecondaryContainer: '#000000',
|
|
262
|
+
onTertiaryContainer: '#000000',
|
|
263
|
+
onErrorContainer: '#000000',
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Adapter: Convert a TonalPalette into a simple map of tones -> hex strings.
|
|
268
|
+
* This provides a stable, serializable shape consumers in the codebase expect
|
|
269
|
+
* (e.g. lookups by tone value) and isolates callers from potential upstream
|
|
270
|
+
* API changes in the material-color-utilities package.
|
|
271
|
+
*/
|
|
272
|
+
export function tonalPaletteToHexMap(palette) {
|
|
273
|
+
const map = {};
|
|
274
|
+
for (let t = 0; t <= 100; t += 10) {
|
|
275
|
+
try {
|
|
276
|
+
map[t] = hexFromArgb(palette.tone(t));
|
|
277
|
+
}
|
|
278
|
+
catch (e) {
|
|
279
|
+
// if palette.tone is unavailable for some reason, fallback to white/black
|
|
280
|
+
map[t] = t >= 50 ? '#FFFFFF' : '#000000';
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return map;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Helper: generate a hex-map directly from a seed color
|
|
287
|
+
*/
|
|
288
|
+
export function generateTonalHexMapFromSeed(seedColor) {
|
|
289
|
+
const palette = generateTonalPalette(seedColor);
|
|
290
|
+
return tonalPaletteToHexMap(palette);
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=palette-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette-generator.js","sourceRoot":"","sources":["../../brand/palette-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../components/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../components/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* SF Symbol icon configuration for iOS
|
|
4
|
+
*/
|
|
5
|
+
export interface SFSymbolIcon {
|
|
6
|
+
/** Default state SF Symbol name */
|
|
7
|
+
default: string;
|
|
8
|
+
/** Selected state SF Symbol name */
|
|
9
|
+
selected: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Material Design icon name for Android
|
|
13
|
+
*/
|
|
14
|
+
export type MaterialIconName = string;
|
|
15
|
+
/**
|
|
16
|
+
* Tab configuration for AppTabs
|
|
17
|
+
*/
|
|
18
|
+
export interface AppTabConfig {
|
|
19
|
+
/** Unique tab name (used for routing) */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Tab route href */
|
|
22
|
+
href: string;
|
|
23
|
+
/** Tab display label */
|
|
24
|
+
label: string;
|
|
25
|
+
/** Optional iOS SF Symbol icon configuration (must include both default and selected states) */
|
|
26
|
+
sfSymbol?: SFSymbolIcon;
|
|
27
|
+
/** Optional Android Material Design icon name */
|
|
28
|
+
materialIcon?: MaterialIconName;
|
|
29
|
+
/** Optional web icon (web only) */
|
|
30
|
+
webIcon?: any;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* External link configuration (web only)
|
|
34
|
+
*/
|
|
35
|
+
export interface AppTabsExternalLink {
|
|
36
|
+
label: string;
|
|
37
|
+
href: string;
|
|
38
|
+
icon?: any;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Props for AppTabs component
|
|
42
|
+
*/
|
|
43
|
+
export interface AppTabsProps {
|
|
44
|
+
/** Brand or app name to display */
|
|
45
|
+
brandName?: string;
|
|
46
|
+
/** Optional logo image */
|
|
47
|
+
logoImage?: ReactNode;
|
|
48
|
+
/** Array of tab configurations */
|
|
49
|
+
tabs: AppTabConfig[];
|
|
50
|
+
/** External links shown in the app bar (web only) */
|
|
51
|
+
externalLinks?: AppTabsExternalLink[];
|
|
52
|
+
/** App bar height in pixels (web only) */
|
|
53
|
+
height?: number;
|
|
54
|
+
/** Called when hamburger is pressed (native only) */
|
|
55
|
+
onPrimaryMenuPress?: () => void;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Native platform tabs for mobile (iOS/Android).
|
|
59
|
+
* Uses true native tabs with liquid glass effect on iOS.
|
|
60
|
+
* For web, see app-tabs.web.tsx
|
|
61
|
+
*/
|
|
62
|
+
export default function AppTabs({ tabs, }: AppTabsProps): import("react/jsx-runtime").JSX.Element;
|
|
63
|
+
//# sourceMappingURL=app-tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-tabs.d.ts","sourceRoot":"","sources":["../../../../components/navigation/app-tabs/app-tabs.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,iDAAiD;IACjD,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,mCAAmC;IACnC,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kCAAkC;IAClC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,qDAAqD;IACrD,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,IAAI,GACL,EAAE,YAAY,2CAoBd"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { NativeTabs } from 'expo-router/unstable-native-tabs';
|
|
3
|
+
import { useThemeContext } from '../../../theme';
|
|
4
|
+
/**
|
|
5
|
+
* Native platform tabs for mobile (iOS/Android).
|
|
6
|
+
* Uses true native tabs with liquid glass effect on iOS.
|
|
7
|
+
* For web, see app-tabs.web.tsx
|
|
8
|
+
*/
|
|
9
|
+
export default function AppTabs({ tabs, }) {
|
|
10
|
+
const { values: theme } = useThemeContext();
|
|
11
|
+
return (_jsx(NativeTabs, { tintColor: theme.primary, iconColor: theme.onSurfaceVariant, children: tabs.map((tab) => (_jsxs(NativeTabs.Trigger, { name: tab.name, children: [(tab.sfSymbol || tab.materialIcon) && (_jsx(NativeTabs.Trigger.Icon, { sf: tab.sfSymbol, md: tab.materialIcon })), _jsx(NativeTabs.Trigger.Label, { children: tab.label })] }, tab.name))) }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=app-tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-tabs.js","sourceRoot":"","sources":["../../../../components/navigation/app-tabs/app-tabs.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA8DjD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,IAAI,GACS;IACb,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAAC;IAE5C,OAAO,CACL,KAAC,UAAU,IACT,SAAS,EAAE,KAAK,CAAC,OAAO,EACxB,SAAS,EAAE,KAAK,CAAC,gBAAgB,YAChC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,MAAC,UAAU,CAAC,OAAO,IAAgB,IAAI,EAAE,GAAG,CAAC,IAAI,aAC9C,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CACrC,KAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IACtB,EAAE,EAAE,GAAG,CAAC,QAAe,EACvB,EAAE,EAAE,GAAG,CAAC,YAAY,GACpB,CACH,EACD,KAAC,UAAU,CAAC,OAAO,CAAC,KAAK,cAAE,GAAG,CAAC,KAAK,GAA4B,KAPzC,GAAG,CAAC,IAAI,CAQZ,CACtB,CAAC,GACS,CACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { type PlatformIcon } from '../../../icons';
|
|
3
|
+
/**
|
|
4
|
+
* External link configuration for AppTabs
|
|
5
|
+
*/
|
|
6
|
+
export interface AppTabsExternalLink {
|
|
7
|
+
label: string;
|
|
8
|
+
href: string;
|
|
9
|
+
icon?: PlatformIcon | string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* SF Symbol icon configuration for iOS
|
|
13
|
+
*/
|
|
14
|
+
export interface SFSymbolIcon {
|
|
15
|
+
default: string;
|
|
16
|
+
selected: string;
|
|
17
|
+
}
|
|
18
|
+
export type MaterialIconName = string;
|
|
19
|
+
/**
|
|
20
|
+
* Tab configuration for AppTabs
|
|
21
|
+
*/
|
|
22
|
+
export interface AppTabConfig {
|
|
23
|
+
name: string;
|
|
24
|
+
href: string;
|
|
25
|
+
label: string;
|
|
26
|
+
sfSymbol?: SFSymbolIcon;
|
|
27
|
+
materialIcon?: MaterialIconName;
|
|
28
|
+
webIcon?: PlatformIcon | string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Props for AppTabs component
|
|
32
|
+
*/
|
|
33
|
+
export interface AppTabsProps {
|
|
34
|
+
brandName: string;
|
|
35
|
+
logoImage?: ReactNode;
|
|
36
|
+
tabs: AppTabConfig[];
|
|
37
|
+
externalLinks?: AppTabsExternalLink[];
|
|
38
|
+
height?: number;
|
|
39
|
+
/** Native-only: called when hamburger is pressed on native platforms */
|
|
40
|
+
onPrimaryMenuPress?: () => void;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Material 3 themed tabs component for navigation.
|
|
44
|
+
* Responsive: right-side drawer on mobile, horizontal tabs on desktop.
|
|
45
|
+
*/
|
|
46
|
+
export default function AppTabs({ brandName, logoImage, tabs, externalLinks, height, }: AppTabsProps): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
//# sourceMappingURL=app-tabs.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-tabs.web.d.ts","sourceRoot":"","sources":["../../../../components/navigation/app-tabs/app-tabs.web.tsx"],"names":[],"mappings":"AAQA,OAAc,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AAM9D,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,SAAS,EACT,SAAS,EACT,IAAI,EACJ,aAAkB,EAClB,MAAW,GACZ,EAAE,YAAY,2CAoFd"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Tabs, TabList, TabTrigger, TabSlot, } from 'expo-router/ui';
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
import { Pressable, View, StyleSheet, Linking } from 'react-native';
|
|
5
|
+
import { useThemeContext } from '../../../theme';
|
|
6
|
+
import { Typography } from '../../ui/typography';
|
|
7
|
+
import { ThemedView } from '../../ui/themed-view';
|
|
8
|
+
import { Link, usePathname, useRouter } from 'expo-router';
|
|
9
|
+
import { renderIcon } from '../../../icons';
|
|
10
|
+
import { useLayout } from '../../../context/layout-context';
|
|
11
|
+
import { useDimensions, breakpoints } from '../../../hooks';
|
|
12
|
+
import { Drawer } from '../drawer/drawer';
|
|
13
|
+
import { SidebarItem } from '../sidebar/sidebar-item';
|
|
14
|
+
import { sidebarItemStyles } from '../shared/sidebar-styles';
|
|
15
|
+
/**
|
|
16
|
+
* Material 3 themed tabs component for navigation.
|
|
17
|
+
* Responsive: right-side drawer on mobile, horizontal tabs on desktop.
|
|
18
|
+
*/
|
|
19
|
+
export default function AppTabs({ brandName, logoImage, tabs, externalLinks = [], height = 64, }) {
|
|
20
|
+
const { setAppBarHeight } = useLayout();
|
|
21
|
+
const { width } = useDimensions();
|
|
22
|
+
const isMobile = width < breakpoints.large;
|
|
23
|
+
const [menuOpen, setMenuOpen] = useState(false);
|
|
24
|
+
const pathname = usePathname();
|
|
25
|
+
const router = useRouter();
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
setAppBarHeight(height);
|
|
28
|
+
}, [height, setAppBarHeight]);
|
|
29
|
+
// Close drawer on navigation
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
setMenuOpen(false);
|
|
32
|
+
}, [pathname]);
|
|
33
|
+
return (_jsxs(Tabs, { children: [_jsx(TabList, { asChild: true, children: _jsx(CustomTabList, { brandName: brandName, logoImage: logoImage, externalLinks: externalLinks, height: height, isMobile: isMobile, onMenuPress: () => setMenuOpen(true), children: tabs.map((tab) => (_jsx(TabTrigger, { name: tab.name, href: tab.href, asChild: true, children: _jsx(TabButton, { height: height, webIcon: tab.webIcon, materialIcon: tab.materialIcon, children: tab.label }) }, tab.name))) }) }), _jsx(TabSlot, { style: { flex: 1, overflow: 'hidden' } }), isMobile && (_jsxs(Drawer, { isOpen: menuOpen, onClose: () => setMenuOpen(false), side: "right", header: _jsx(DrawerHeader, { brandName: brandName, logoImage: logoImage }), children: [tabs.map((tab) => {
|
|
34
|
+
const icon = tab.webIcon
|
|
35
|
+
? (typeof tab.webIcon === 'string' ? { name: tab.webIcon } : tab.webIcon)
|
|
36
|
+
: tab.materialIcon
|
|
37
|
+
? { library: 'MaterialIcons', name: tab.materialIcon }
|
|
38
|
+
: undefined;
|
|
39
|
+
const isActive = pathname === tab.href || pathname.startsWith(tab.href + '/');
|
|
40
|
+
return (_jsx(SidebarItem, { label: tab.label, icon: icon, active: isActive, onPress: () => router.push(tab.href) }, tab.name));
|
|
41
|
+
}), externalLinks.length > 0 && _jsx(DrawerDivider, {}), externalLinks.map((link, i) => {
|
|
42
|
+
const icon = link.icon
|
|
43
|
+
? (typeof link.icon === 'string' ? { name: link.icon } : link.icon)
|
|
44
|
+
: undefined;
|
|
45
|
+
return (_jsx(SidebarItem, { label: link.label, icon: icon, onPress: () => Linking.openURL(link.href) }, i));
|
|
46
|
+
})] }))] }));
|
|
47
|
+
}
|
|
48
|
+
function TabButton({ children, isFocused, height, webIcon, materialIcon, ...props }) {
|
|
49
|
+
const { values: theme } = useThemeContext();
|
|
50
|
+
const spacing = theme.spacing;
|
|
51
|
+
const [hovered, setHovered] = useState(false);
|
|
52
|
+
const iconToRender = webIcon || (materialIcon ? { library: 'MaterialIcons', name: materialIcon } : undefined);
|
|
53
|
+
const iconColor = isFocused || hovered ? theme.primary : theme.onSurfaceVariant;
|
|
54
|
+
return (_jsxs(Pressable, { ...props, onHoverIn: () => setHovered(true), onHoverOut: () => setHovered(false), style: ({ pressed }) => [
|
|
55
|
+
styles.tabButton,
|
|
56
|
+
{ paddingHorizontal: spacing.lg, height, justifyContent: 'center' },
|
|
57
|
+
pressed && { opacity: 0.7 },
|
|
58
|
+
], children: [_jsxs(View, { style: [styles.tabButtonContent, { gap: spacing.sm }], children: [iconToRender && renderIcon(iconToRender, 'MaterialIcons', 20, iconColor), _jsx(Typography, { variant: "labelLarge", weight: "medium", color: iconColor, children: children })] }), isFocused && (_jsx(View, { style: [styles.activeIndicator, { backgroundColor: theme.primary }] }))] }));
|
|
59
|
+
}
|
|
60
|
+
function CustomTabList({ brandName, logoImage, externalLinks, height, isMobile, onMenuPress, children, ...props }) {
|
|
61
|
+
const { values: theme } = useThemeContext();
|
|
62
|
+
const spacing = theme.spacing;
|
|
63
|
+
return (_jsx(ThemedView, { variant: "appbar", rounded: false, style: [styles.appBar, { height, paddingHorizontal: spacing.xxl, borderBottomWidth: 1, borderBottomColor: theme.tokens.appbar.border }], children: _jsxs(View, { ...props, style: [styles.appBarContent, { height, gap: spacing.sm }], children: [_jsx(Link, { href: "/", style: styles.brand, children: _jsxs(View, { style: [styles.brandContent, { gap: spacing.sm }], children: [logoImage, _jsx(Typography, { variant: "titleLarge", weight: "medium", children: brandName })] }) }), !isMobile && (_jsxs(_Fragment, { children: [_jsx(View, { style: [styles.tabs, { gap: spacing.xs }], children: children }), externalLinks.length > 0 && (_jsx(View, { style: [styles.tabs, { gap: spacing.xs, marginLeft: spacing.lg }], children: externalLinks.map((link, i) => (_jsx(ExternalLinkButton, { ...link, height: height }, i))) }))] })), isMobile && (_jsx(Pressable, { onPress: onMenuPress, accessibilityLabel: "Open menu", accessibilityRole: "button", style: ({ pressed }) => [
|
|
64
|
+
styles.iconButton,
|
|
65
|
+
{ padding: spacing.sm, borderRadius: theme.shape.buttonBorderRadius },
|
|
66
|
+
pressed && { opacity: 0.7 },
|
|
67
|
+
], children: renderIcon({ library: 'Feather', name: 'menu' }, 'Feather', 24, theme.onSurface) }))] }) }));
|
|
68
|
+
}
|
|
69
|
+
// --- Desktop external link button ---
|
|
70
|
+
function ExternalLinkButton({ href, label, height, icon }) {
|
|
71
|
+
const { values: theme } = useThemeContext();
|
|
72
|
+
const spacing = theme.spacing;
|
|
73
|
+
const [hovered, setHovered] = useState(false);
|
|
74
|
+
const color = hovered ? theme.primary : theme.onSurfaceVariant;
|
|
75
|
+
return (_jsx(Link, { href: href, target: "_blank", asChild: true, children: _jsx(Pressable, { onHoverIn: () => setHovered(true), onHoverOut: () => setHovered(false), style: ({ pressed }) => [
|
|
76
|
+
styles.tabButton,
|
|
77
|
+
{ paddingHorizontal: spacing.lg, height, justifyContent: 'center', borderRadius: theme.shape.buttonBorderRadius },
|
|
78
|
+
pressed && { opacity: 0.7 },
|
|
79
|
+
], children: _jsxs(View, { style: [styles.tabButtonContent, { gap: spacing.sm }], children: [icon && renderIcon(icon, 'MaterialIcons', 20, color), _jsx(Typography, { variant: "labelLarge", weight: "medium", color: color, children: label })] }) }) }));
|
|
80
|
+
}
|
|
81
|
+
// --- Drawer header ---
|
|
82
|
+
function DrawerHeader({ brandName, logoImage }) {
|
|
83
|
+
const { values: theme } = useThemeContext();
|
|
84
|
+
const spacing = theme.spacing;
|
|
85
|
+
return (_jsx(View, { style: [styles.drawerHeader, { padding: spacing.lg, borderBottomColor: theme.tokens.sidebar.divider }], children: _jsxs(View, { style: [styles.brandContent, { gap: spacing.sm }], children: [logoImage, _jsx(Typography, { variant: "titleMedium", weight: "bold", children: brandName })] }) }));
|
|
86
|
+
}
|
|
87
|
+
function DrawerDivider() {
|
|
88
|
+
const { values: theme } = useThemeContext();
|
|
89
|
+
return _jsx(View, { style: [sidebarItemStyles.divider, { backgroundColor: theme.tokens.sidebar.divider }] });
|
|
90
|
+
}
|
|
91
|
+
// --- Styles ---
|
|
92
|
+
const styles = StyleSheet.create({
|
|
93
|
+
appBar: { width: '100%', flexDirection: 'row' },
|
|
94
|
+
appBarContent: { flexDirection: 'row', alignItems: 'center', width: '100%' },
|
|
95
|
+
brand: { marginRight: 'auto' },
|
|
96
|
+
brandContent: { flexDirection: 'row', alignItems: 'center' },
|
|
97
|
+
tabs: { flexDirection: 'row', alignItems: 'center' },
|
|
98
|
+
tabButton: { position: 'relative' },
|
|
99
|
+
tabButtonContent: { flexDirection: 'row', alignItems: 'center' },
|
|
100
|
+
activeIndicator: { position: 'absolute', bottom: 0, left: 0, right: 0, height: 3, borderTopLeftRadius: 2, borderTopRightRadius: 2 },
|
|
101
|
+
iconButton: { alignItems: 'center', justifyContent: 'center' },
|
|
102
|
+
drawerHeader: { borderBottomWidth: 1, width: '100%' },
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=app-tabs.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-tabs.web.js","sourceRoot":"","sources":["../../../../components/navigation/app-tabs/app-tabs.web.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/navigation/app-tabs/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../components/navigation/app-tabs/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
3
|
+
export interface DrawerProps {
|
|
4
|
+
/** Whether the drawer is open */
|
|
5
|
+
isOpen: boolean;
|
|
6
|
+
/** Callback when drawer should close */
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
/** Which side the drawer slides from */
|
|
9
|
+
side?: 'left' | 'right';
|
|
10
|
+
/** Optional header component */
|
|
11
|
+
header?: React.ReactNode;
|
|
12
|
+
/** Drawer content */
|
|
13
|
+
children: React.ReactNode;
|
|
14
|
+
/** Optional footer component */
|
|
15
|
+
footer?: React.ReactNode;
|
|
16
|
+
/** Custom styles for the drawer container */
|
|
17
|
+
style?: StyleProp<ViewStyle>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Reusable animated drawer component.
|
|
21
|
+
* Slides in from the left or right with a backdrop.
|
|
22
|
+
*/
|
|
23
|
+
export declare const Drawer: React.FC<DrawerProps>;
|
|
24
|
+
//# sourceMappingURL=drawer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawer.d.ts","sourceRoot":"","sources":["../../../../components/navigation/drawer/drawer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAA2C,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIvG,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,wCAAwC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,gCAAgC;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,qBAAqB;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,gCAAgC;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAuExC,CAAC"}
|