@grundtone/core 2.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/README.md +78 -0
- package/assets/logo-16x16.png +0 -0
- package/assets/logo-180x180.png +0 -0
- package/assets/logo-192x192.png +0 -0
- package/assets/logo-32x32.png +0 -0
- package/assets/logo-512x512.png +0 -0
- package/assets/logo.png +0 -0
- package/dist/index.d.mts +305 -0
- package/dist/index.d.ts +305 -0
- package/dist/index.js +373 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +354 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +50 -0
package/README.md
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# @grundtone/core
|
|
2
|
+
|
|
3
|
+
Core package for the Grundtone design system. This package contains the fundamental building blocks,
|
|
4
|
+
types, and utilities that form the foundation of the design system.
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
pnpm add @grundtone/core
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import { DEFAULT_THEME, type ThemeConfig } from '@grundtone/core';
|
|
16
|
+
|
|
17
|
+
// Use the default theme
|
|
18
|
+
const theme: ThemeConfig = DEFAULT_THEME;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Exports
|
|
22
|
+
|
|
23
|
+
### Types
|
|
24
|
+
|
|
25
|
+
- `ComponentProps` - Base interface for component props
|
|
26
|
+
- `ThemeConfig` - Theme configuration interface
|
|
27
|
+
- `Size` - Common size variants ('sm' | 'md' | 'lg')
|
|
28
|
+
- `Variant` - Common component variants ('primary' | 'secondary' | 'tertiary')
|
|
29
|
+
|
|
30
|
+
### Constants
|
|
31
|
+
|
|
32
|
+
- `DEFAULT_THEME` - Default theme configuration
|
|
33
|
+
|
|
34
|
+
## Development
|
|
35
|
+
|
|
36
|
+
1. Install dependencies:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pnpm install
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
2. Start development server:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pnpm dev
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
3. Build package:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pnpm build
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
4. Run tests:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pnpm test
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Contributing
|
|
61
|
+
|
|
62
|
+
Please refer to the main project README for contribution guidelines.
|
|
63
|
+
|
|
64
|
+
## TypeScript-konfiguration
|
|
65
|
+
|
|
66
|
+
Denne pakke bruger en specifik `tsconfig.json`, som udvider rodens `tsconfig.build.json`.
|
|
67
|
+
Konfigurationen sikrer at kildekoden i `src/` og types i `types/` bliver korrekt transpileret og at
|
|
68
|
+
types genereres i `dist/types`.
|
|
69
|
+
|
|
70
|
+
- outDir: `dist`
|
|
71
|
+
- rootDir: `src`
|
|
72
|
+
- Types genereres automatisk ved build
|
|
73
|
+
|
|
74
|
+
Byg pakken med:
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
pnpm build
|
|
78
|
+
```
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/assets/logo.png
ADDED
|
Binary file
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { InjectionKey, Ref } from 'vue';
|
|
2
|
+
|
|
3
|
+
interface ComponentProps {
|
|
4
|
+
class?: string;
|
|
5
|
+
style?: string | Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
type Size = 'sm' | 'md' | 'lg';
|
|
8
|
+
type Variant = 'primary' | 'secondary' | 'tertiary';
|
|
9
|
+
|
|
10
|
+
type ThemeMode = 'light' | 'dark' | 'auto';
|
|
11
|
+
interface ThemeColors {
|
|
12
|
+
primary: string;
|
|
13
|
+
primaryLight: string;
|
|
14
|
+
primaryDark: string;
|
|
15
|
+
onPrimary: string;
|
|
16
|
+
secondary: string;
|
|
17
|
+
secondaryLight: string;
|
|
18
|
+
secondaryDark: string;
|
|
19
|
+
success: string;
|
|
20
|
+
successLight: string;
|
|
21
|
+
successDark: string;
|
|
22
|
+
warning: string;
|
|
23
|
+
warningLight: string;
|
|
24
|
+
warningDark: string;
|
|
25
|
+
error: string;
|
|
26
|
+
errorLight: string;
|
|
27
|
+
errorDark: string;
|
|
28
|
+
info: string;
|
|
29
|
+
infoLight: string;
|
|
30
|
+
infoDark: string;
|
|
31
|
+
background: string;
|
|
32
|
+
backgroundAlt: string;
|
|
33
|
+
surface: string;
|
|
34
|
+
surfaceAlt: string;
|
|
35
|
+
surfaceRaised: string;
|
|
36
|
+
surfaceOverlay: string;
|
|
37
|
+
modalBackdrop: string;
|
|
38
|
+
text: string;
|
|
39
|
+
textSecondary: string;
|
|
40
|
+
textTertiary: string;
|
|
41
|
+
textInverse: string;
|
|
42
|
+
textPlaceholder: string;
|
|
43
|
+
textDisabled: string;
|
|
44
|
+
borderLight: string;
|
|
45
|
+
borderMedium: string;
|
|
46
|
+
borderStrong: string;
|
|
47
|
+
borderInverse: string;
|
|
48
|
+
focus: string;
|
|
49
|
+
focusRing: string;
|
|
50
|
+
neutral: string;
|
|
51
|
+
}
|
|
52
|
+
interface ThemeSpacing {
|
|
53
|
+
xs: string;
|
|
54
|
+
sm: string;
|
|
55
|
+
md: string;
|
|
56
|
+
lg: string;
|
|
57
|
+
xl: string;
|
|
58
|
+
'2xl': string;
|
|
59
|
+
'3xl': string;
|
|
60
|
+
'4xl': string;
|
|
61
|
+
}
|
|
62
|
+
interface ThemeTypography {
|
|
63
|
+
fontFamily: {
|
|
64
|
+
base: string;
|
|
65
|
+
heading: string;
|
|
66
|
+
mono: string;
|
|
67
|
+
};
|
|
68
|
+
fontSize: {
|
|
69
|
+
xs: string;
|
|
70
|
+
sm: string;
|
|
71
|
+
base: string;
|
|
72
|
+
lg: string;
|
|
73
|
+
xl: string;
|
|
74
|
+
'2xl': string;
|
|
75
|
+
'3xl': string;
|
|
76
|
+
'4xl': string;
|
|
77
|
+
'5xl': string;
|
|
78
|
+
};
|
|
79
|
+
fontWeight: {
|
|
80
|
+
thin: number;
|
|
81
|
+
light: number;
|
|
82
|
+
normal: number;
|
|
83
|
+
medium: number;
|
|
84
|
+
semibold: number;
|
|
85
|
+
bold: number;
|
|
86
|
+
extrabold: number;
|
|
87
|
+
};
|
|
88
|
+
lineHeight: {
|
|
89
|
+
none: number;
|
|
90
|
+
tight: number;
|
|
91
|
+
snug: number;
|
|
92
|
+
normal: number;
|
|
93
|
+
relaxed: number;
|
|
94
|
+
loose: number;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
interface ThemeShadows {
|
|
98
|
+
xs: string;
|
|
99
|
+
sm: string;
|
|
100
|
+
md: string;
|
|
101
|
+
lg: string;
|
|
102
|
+
xl: string;
|
|
103
|
+
'2xl': string;
|
|
104
|
+
inner: string;
|
|
105
|
+
none: string;
|
|
106
|
+
}
|
|
107
|
+
interface ShadowLayer {
|
|
108
|
+
x: number;
|
|
109
|
+
y: number;
|
|
110
|
+
blur: number;
|
|
111
|
+
spread: number;
|
|
112
|
+
color: string;
|
|
113
|
+
opacity: number;
|
|
114
|
+
inset?: boolean;
|
|
115
|
+
}
|
|
116
|
+
interface ThemeRadius {
|
|
117
|
+
none: string;
|
|
118
|
+
xs: string;
|
|
119
|
+
sm: string;
|
|
120
|
+
md: string;
|
|
121
|
+
lg: string;
|
|
122
|
+
xl: string;
|
|
123
|
+
'2xl': string;
|
|
124
|
+
'3xl': string;
|
|
125
|
+
full: string;
|
|
126
|
+
}
|
|
127
|
+
interface ThemeTransitions {
|
|
128
|
+
duration: {
|
|
129
|
+
fast: string;
|
|
130
|
+
base: string;
|
|
131
|
+
slow: string;
|
|
132
|
+
};
|
|
133
|
+
timing: {
|
|
134
|
+
ease: string;
|
|
135
|
+
easeIn: string;
|
|
136
|
+
easeOut: string;
|
|
137
|
+
easeInOut: string;
|
|
138
|
+
linear: string;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
interface ThemeZIndex {
|
|
142
|
+
dropdown: number;
|
|
143
|
+
sticky: number;
|
|
144
|
+
fixed: number;
|
|
145
|
+
modalBackdrop: number;
|
|
146
|
+
modal: number;
|
|
147
|
+
popover: number;
|
|
148
|
+
tooltip: number;
|
|
149
|
+
toast: number;
|
|
150
|
+
}
|
|
151
|
+
interface Theme {
|
|
152
|
+
mode: ThemeMode;
|
|
153
|
+
colors: ThemeColors;
|
|
154
|
+
spacing: ThemeSpacing;
|
|
155
|
+
typography: ThemeTypography;
|
|
156
|
+
shadows: ThemeShadows;
|
|
157
|
+
shadowDefinitions: Record<string, ShadowLayer[]>;
|
|
158
|
+
radius: ThemeRadius;
|
|
159
|
+
transitions: ThemeTransitions;
|
|
160
|
+
zIndex: ThemeZIndex;
|
|
161
|
+
}
|
|
162
|
+
interface ThemeProviderContext {
|
|
163
|
+
theme: Readonly<Ref<Theme>>;
|
|
164
|
+
mode: Readonly<Ref<ThemeMode>>;
|
|
165
|
+
isDark: Readonly<Ref<boolean>>;
|
|
166
|
+
isLight: Readonly<Ref<boolean>>;
|
|
167
|
+
setMode: (mode: ThemeMode) => void;
|
|
168
|
+
toggleMode: () => void;
|
|
169
|
+
applyTheme: () => void;
|
|
170
|
+
}
|
|
171
|
+
declare const THEME_INJECTION_KEY: InjectionKey<ThemeProviderContext>;
|
|
172
|
+
type ThemeConfig = Partial<Theme> | {
|
|
173
|
+
light?: Partial<Theme>;
|
|
174
|
+
dark?: Partial<Theme>;
|
|
175
|
+
};
|
|
176
|
+
interface ThemeProviderProps {
|
|
177
|
+
mode?: ThemeMode;
|
|
178
|
+
theme?: ThemeConfig;
|
|
179
|
+
enableTransitions?: boolean;
|
|
180
|
+
persistMode?: boolean;
|
|
181
|
+
storageKey?: string;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
type ColorPreset = Theme['colors'];
|
|
185
|
+
declare const SEMANTIC_COLOR_KEYS: readonly ["primary", "primaryLight", "primaryDark", "onPrimary", "secondary", "secondaryLight", "secondaryDark", "success", "successLight", "successDark", "warning", "warningLight", "warningDark", "error", "errorLight", "errorDark", "info", "infoLight", "infoDark", "background", "backgroundAlt", "surface", "surfaceAlt", "surfaceRaised", "surfaceOverlay", "modalBackdrop", "text", "textSecondary", "textTertiary", "textInverse", "textPlaceholder", "textDisabled", "borderLight", "borderMedium", "borderStrong", "borderInverse", "focus", "focusRing", "neutral"];
|
|
186
|
+
declare const defaultColorPreset: ColorPreset;
|
|
187
|
+
declare const defaultColorPresetDark: ColorPreset;
|
|
188
|
+
declare const defaultSpacing: {
|
|
189
|
+
readonly xs: "0.25rem";
|
|
190
|
+
readonly sm: "0.5rem";
|
|
191
|
+
readonly md: "1rem";
|
|
192
|
+
readonly lg: "1.5rem";
|
|
193
|
+
readonly xl: "2rem";
|
|
194
|
+
readonly '2xl': "3rem";
|
|
195
|
+
readonly '3xl': "4rem";
|
|
196
|
+
readonly '4xl': "6rem";
|
|
197
|
+
};
|
|
198
|
+
declare const defaultTypography: {
|
|
199
|
+
readonly fontFamily: {
|
|
200
|
+
readonly base: "'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif";
|
|
201
|
+
readonly heading: "'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif";
|
|
202
|
+
readonly mono: "'IBM Plex Mono', 'Courier New', monospace";
|
|
203
|
+
};
|
|
204
|
+
readonly fontSize: {
|
|
205
|
+
readonly xs: "0.75rem";
|
|
206
|
+
readonly sm: "0.875rem";
|
|
207
|
+
readonly base: "1rem";
|
|
208
|
+
readonly lg: "1.125rem";
|
|
209
|
+
readonly xl: "1.25rem";
|
|
210
|
+
readonly '2xl': "1.5rem";
|
|
211
|
+
readonly '3xl': "1.875rem";
|
|
212
|
+
readonly '4xl': "2.25rem";
|
|
213
|
+
readonly '5xl': "3rem";
|
|
214
|
+
};
|
|
215
|
+
readonly fontWeight: {
|
|
216
|
+
readonly thin: 100;
|
|
217
|
+
readonly light: 300;
|
|
218
|
+
readonly normal: 400;
|
|
219
|
+
readonly medium: 500;
|
|
220
|
+
readonly semibold: 600;
|
|
221
|
+
readonly bold: 700;
|
|
222
|
+
readonly extrabold: 800;
|
|
223
|
+
};
|
|
224
|
+
readonly lineHeight: {
|
|
225
|
+
readonly none: 1;
|
|
226
|
+
readonly tight: 1.25;
|
|
227
|
+
readonly snug: 1.375;
|
|
228
|
+
readonly normal: 1.5;
|
|
229
|
+
readonly relaxed: 1.625;
|
|
230
|
+
readonly loose: 2;
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
declare const defaultShadowDefinitions: Record<string, ShadowLayer[]>;
|
|
234
|
+
declare function hexToRgb(hex: string): {
|
|
235
|
+
r: number;
|
|
236
|
+
g: number;
|
|
237
|
+
b: number;
|
|
238
|
+
};
|
|
239
|
+
declare function shadowLayersToCSS(layers: ShadowLayer[]): string;
|
|
240
|
+
declare const defaultShadows: ThemeShadows;
|
|
241
|
+
declare const defaultRadius: {
|
|
242
|
+
readonly none: "0";
|
|
243
|
+
readonly xs: "0.125rem";
|
|
244
|
+
readonly sm: "0.25rem";
|
|
245
|
+
readonly md: "0.375rem";
|
|
246
|
+
readonly lg: "0.5rem";
|
|
247
|
+
readonly xl: "0.75rem";
|
|
248
|
+
readonly '2xl': "1rem";
|
|
249
|
+
readonly '3xl': "1.5rem";
|
|
250
|
+
readonly full: "9999px";
|
|
251
|
+
};
|
|
252
|
+
declare const defaultTransitions: {
|
|
253
|
+
readonly duration: {
|
|
254
|
+
readonly fast: "150ms";
|
|
255
|
+
readonly base: "300ms";
|
|
256
|
+
readonly slow: "500ms";
|
|
257
|
+
};
|
|
258
|
+
readonly timing: {
|
|
259
|
+
readonly ease: "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
260
|
+
readonly easeIn: "cubic-bezier(0.4, 0, 1, 1)";
|
|
261
|
+
readonly easeOut: "cubic-bezier(0, 0, 0.2, 1)";
|
|
262
|
+
readonly easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
263
|
+
readonly linear: "linear";
|
|
264
|
+
};
|
|
265
|
+
};
|
|
266
|
+
declare const defaultZIndex: {
|
|
267
|
+
readonly dropdown: 1000;
|
|
268
|
+
readonly sticky: 1020;
|
|
269
|
+
readonly fixed: 1030;
|
|
270
|
+
readonly modalBackdrop: 1040;
|
|
271
|
+
readonly modal: 1050;
|
|
272
|
+
readonly popover: 1060;
|
|
273
|
+
readonly tooltip: 1070;
|
|
274
|
+
readonly toast: 1080;
|
|
275
|
+
};
|
|
276
|
+
declare function createTheme(overrides: {
|
|
277
|
+
light?: Partial<ColorPreset>;
|
|
278
|
+
dark?: Partial<ColorPreset>;
|
|
279
|
+
}): {
|
|
280
|
+
light: Theme;
|
|
281
|
+
dark: Theme;
|
|
282
|
+
};
|
|
283
|
+
declare const defaultTheme: Theme;
|
|
284
|
+
|
|
285
|
+
interface LogoVariants {
|
|
286
|
+
primary: string;
|
|
287
|
+
favicon32: string;
|
|
288
|
+
favicon16: string;
|
|
289
|
+
appleTouchIcon: string;
|
|
290
|
+
pwa192: string;
|
|
291
|
+
pwa512: string;
|
|
292
|
+
}
|
|
293
|
+
interface BrandingConfig {
|
|
294
|
+
name: string;
|
|
295
|
+
tagline: string;
|
|
296
|
+
logos: LogoVariants;
|
|
297
|
+
}
|
|
298
|
+
declare const LOGO_VARIANT_SIZES: Record<keyof LogoVariants, {
|
|
299
|
+
width: number;
|
|
300
|
+
height: number;
|
|
301
|
+
}>;
|
|
302
|
+
declare const defaultBranding: BrandingConfig;
|
|
303
|
+
declare function createBranding(overrides?: Partial<BrandingConfig>): BrandingConfig;
|
|
304
|
+
|
|
305
|
+
export { type BrandingConfig, type ColorPreset, type ComponentProps, LOGO_VARIANT_SIZES, type LogoVariants, SEMANTIC_COLOR_KEYS, type ShadowLayer, type Size, THEME_INJECTION_KEY, type Theme, type ThemeColors, type ThemeConfig, type ThemeMode, type ThemeProviderContext, type ThemeProviderProps, type ThemeRadius, type ThemeShadows, type ThemeSpacing, type ThemeTransitions, type ThemeTypography, type ThemeZIndex, type Variant, createBranding, createTheme, defaultBranding, defaultColorPreset, defaultColorPresetDark, defaultRadius, defaultShadowDefinitions, defaultShadows, defaultSpacing, defaultTheme, defaultTransitions, defaultTypography, defaultZIndex, hexToRgb, shadowLayersToCSS };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { InjectionKey, Ref } from 'vue';
|
|
2
|
+
|
|
3
|
+
interface ComponentProps {
|
|
4
|
+
class?: string;
|
|
5
|
+
style?: string | Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
type Size = 'sm' | 'md' | 'lg';
|
|
8
|
+
type Variant = 'primary' | 'secondary' | 'tertiary';
|
|
9
|
+
|
|
10
|
+
type ThemeMode = 'light' | 'dark' | 'auto';
|
|
11
|
+
interface ThemeColors {
|
|
12
|
+
primary: string;
|
|
13
|
+
primaryLight: string;
|
|
14
|
+
primaryDark: string;
|
|
15
|
+
onPrimary: string;
|
|
16
|
+
secondary: string;
|
|
17
|
+
secondaryLight: string;
|
|
18
|
+
secondaryDark: string;
|
|
19
|
+
success: string;
|
|
20
|
+
successLight: string;
|
|
21
|
+
successDark: string;
|
|
22
|
+
warning: string;
|
|
23
|
+
warningLight: string;
|
|
24
|
+
warningDark: string;
|
|
25
|
+
error: string;
|
|
26
|
+
errorLight: string;
|
|
27
|
+
errorDark: string;
|
|
28
|
+
info: string;
|
|
29
|
+
infoLight: string;
|
|
30
|
+
infoDark: string;
|
|
31
|
+
background: string;
|
|
32
|
+
backgroundAlt: string;
|
|
33
|
+
surface: string;
|
|
34
|
+
surfaceAlt: string;
|
|
35
|
+
surfaceRaised: string;
|
|
36
|
+
surfaceOverlay: string;
|
|
37
|
+
modalBackdrop: string;
|
|
38
|
+
text: string;
|
|
39
|
+
textSecondary: string;
|
|
40
|
+
textTertiary: string;
|
|
41
|
+
textInverse: string;
|
|
42
|
+
textPlaceholder: string;
|
|
43
|
+
textDisabled: string;
|
|
44
|
+
borderLight: string;
|
|
45
|
+
borderMedium: string;
|
|
46
|
+
borderStrong: string;
|
|
47
|
+
borderInverse: string;
|
|
48
|
+
focus: string;
|
|
49
|
+
focusRing: string;
|
|
50
|
+
neutral: string;
|
|
51
|
+
}
|
|
52
|
+
interface ThemeSpacing {
|
|
53
|
+
xs: string;
|
|
54
|
+
sm: string;
|
|
55
|
+
md: string;
|
|
56
|
+
lg: string;
|
|
57
|
+
xl: string;
|
|
58
|
+
'2xl': string;
|
|
59
|
+
'3xl': string;
|
|
60
|
+
'4xl': string;
|
|
61
|
+
}
|
|
62
|
+
interface ThemeTypography {
|
|
63
|
+
fontFamily: {
|
|
64
|
+
base: string;
|
|
65
|
+
heading: string;
|
|
66
|
+
mono: string;
|
|
67
|
+
};
|
|
68
|
+
fontSize: {
|
|
69
|
+
xs: string;
|
|
70
|
+
sm: string;
|
|
71
|
+
base: string;
|
|
72
|
+
lg: string;
|
|
73
|
+
xl: string;
|
|
74
|
+
'2xl': string;
|
|
75
|
+
'3xl': string;
|
|
76
|
+
'4xl': string;
|
|
77
|
+
'5xl': string;
|
|
78
|
+
};
|
|
79
|
+
fontWeight: {
|
|
80
|
+
thin: number;
|
|
81
|
+
light: number;
|
|
82
|
+
normal: number;
|
|
83
|
+
medium: number;
|
|
84
|
+
semibold: number;
|
|
85
|
+
bold: number;
|
|
86
|
+
extrabold: number;
|
|
87
|
+
};
|
|
88
|
+
lineHeight: {
|
|
89
|
+
none: number;
|
|
90
|
+
tight: number;
|
|
91
|
+
snug: number;
|
|
92
|
+
normal: number;
|
|
93
|
+
relaxed: number;
|
|
94
|
+
loose: number;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
interface ThemeShadows {
|
|
98
|
+
xs: string;
|
|
99
|
+
sm: string;
|
|
100
|
+
md: string;
|
|
101
|
+
lg: string;
|
|
102
|
+
xl: string;
|
|
103
|
+
'2xl': string;
|
|
104
|
+
inner: string;
|
|
105
|
+
none: string;
|
|
106
|
+
}
|
|
107
|
+
interface ShadowLayer {
|
|
108
|
+
x: number;
|
|
109
|
+
y: number;
|
|
110
|
+
blur: number;
|
|
111
|
+
spread: number;
|
|
112
|
+
color: string;
|
|
113
|
+
opacity: number;
|
|
114
|
+
inset?: boolean;
|
|
115
|
+
}
|
|
116
|
+
interface ThemeRadius {
|
|
117
|
+
none: string;
|
|
118
|
+
xs: string;
|
|
119
|
+
sm: string;
|
|
120
|
+
md: string;
|
|
121
|
+
lg: string;
|
|
122
|
+
xl: string;
|
|
123
|
+
'2xl': string;
|
|
124
|
+
'3xl': string;
|
|
125
|
+
full: string;
|
|
126
|
+
}
|
|
127
|
+
interface ThemeTransitions {
|
|
128
|
+
duration: {
|
|
129
|
+
fast: string;
|
|
130
|
+
base: string;
|
|
131
|
+
slow: string;
|
|
132
|
+
};
|
|
133
|
+
timing: {
|
|
134
|
+
ease: string;
|
|
135
|
+
easeIn: string;
|
|
136
|
+
easeOut: string;
|
|
137
|
+
easeInOut: string;
|
|
138
|
+
linear: string;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
interface ThemeZIndex {
|
|
142
|
+
dropdown: number;
|
|
143
|
+
sticky: number;
|
|
144
|
+
fixed: number;
|
|
145
|
+
modalBackdrop: number;
|
|
146
|
+
modal: number;
|
|
147
|
+
popover: number;
|
|
148
|
+
tooltip: number;
|
|
149
|
+
toast: number;
|
|
150
|
+
}
|
|
151
|
+
interface Theme {
|
|
152
|
+
mode: ThemeMode;
|
|
153
|
+
colors: ThemeColors;
|
|
154
|
+
spacing: ThemeSpacing;
|
|
155
|
+
typography: ThemeTypography;
|
|
156
|
+
shadows: ThemeShadows;
|
|
157
|
+
shadowDefinitions: Record<string, ShadowLayer[]>;
|
|
158
|
+
radius: ThemeRadius;
|
|
159
|
+
transitions: ThemeTransitions;
|
|
160
|
+
zIndex: ThemeZIndex;
|
|
161
|
+
}
|
|
162
|
+
interface ThemeProviderContext {
|
|
163
|
+
theme: Readonly<Ref<Theme>>;
|
|
164
|
+
mode: Readonly<Ref<ThemeMode>>;
|
|
165
|
+
isDark: Readonly<Ref<boolean>>;
|
|
166
|
+
isLight: Readonly<Ref<boolean>>;
|
|
167
|
+
setMode: (mode: ThemeMode) => void;
|
|
168
|
+
toggleMode: () => void;
|
|
169
|
+
applyTheme: () => void;
|
|
170
|
+
}
|
|
171
|
+
declare const THEME_INJECTION_KEY: InjectionKey<ThemeProviderContext>;
|
|
172
|
+
type ThemeConfig = Partial<Theme> | {
|
|
173
|
+
light?: Partial<Theme>;
|
|
174
|
+
dark?: Partial<Theme>;
|
|
175
|
+
};
|
|
176
|
+
interface ThemeProviderProps {
|
|
177
|
+
mode?: ThemeMode;
|
|
178
|
+
theme?: ThemeConfig;
|
|
179
|
+
enableTransitions?: boolean;
|
|
180
|
+
persistMode?: boolean;
|
|
181
|
+
storageKey?: string;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
type ColorPreset = Theme['colors'];
|
|
185
|
+
declare const SEMANTIC_COLOR_KEYS: readonly ["primary", "primaryLight", "primaryDark", "onPrimary", "secondary", "secondaryLight", "secondaryDark", "success", "successLight", "successDark", "warning", "warningLight", "warningDark", "error", "errorLight", "errorDark", "info", "infoLight", "infoDark", "background", "backgroundAlt", "surface", "surfaceAlt", "surfaceRaised", "surfaceOverlay", "modalBackdrop", "text", "textSecondary", "textTertiary", "textInverse", "textPlaceholder", "textDisabled", "borderLight", "borderMedium", "borderStrong", "borderInverse", "focus", "focusRing", "neutral"];
|
|
186
|
+
declare const defaultColorPreset: ColorPreset;
|
|
187
|
+
declare const defaultColorPresetDark: ColorPreset;
|
|
188
|
+
declare const defaultSpacing: {
|
|
189
|
+
readonly xs: "0.25rem";
|
|
190
|
+
readonly sm: "0.5rem";
|
|
191
|
+
readonly md: "1rem";
|
|
192
|
+
readonly lg: "1.5rem";
|
|
193
|
+
readonly xl: "2rem";
|
|
194
|
+
readonly '2xl': "3rem";
|
|
195
|
+
readonly '3xl': "4rem";
|
|
196
|
+
readonly '4xl': "6rem";
|
|
197
|
+
};
|
|
198
|
+
declare const defaultTypography: {
|
|
199
|
+
readonly fontFamily: {
|
|
200
|
+
readonly base: "'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif";
|
|
201
|
+
readonly heading: "'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif";
|
|
202
|
+
readonly mono: "'IBM Plex Mono', 'Courier New', monospace";
|
|
203
|
+
};
|
|
204
|
+
readonly fontSize: {
|
|
205
|
+
readonly xs: "0.75rem";
|
|
206
|
+
readonly sm: "0.875rem";
|
|
207
|
+
readonly base: "1rem";
|
|
208
|
+
readonly lg: "1.125rem";
|
|
209
|
+
readonly xl: "1.25rem";
|
|
210
|
+
readonly '2xl': "1.5rem";
|
|
211
|
+
readonly '3xl': "1.875rem";
|
|
212
|
+
readonly '4xl': "2.25rem";
|
|
213
|
+
readonly '5xl': "3rem";
|
|
214
|
+
};
|
|
215
|
+
readonly fontWeight: {
|
|
216
|
+
readonly thin: 100;
|
|
217
|
+
readonly light: 300;
|
|
218
|
+
readonly normal: 400;
|
|
219
|
+
readonly medium: 500;
|
|
220
|
+
readonly semibold: 600;
|
|
221
|
+
readonly bold: 700;
|
|
222
|
+
readonly extrabold: 800;
|
|
223
|
+
};
|
|
224
|
+
readonly lineHeight: {
|
|
225
|
+
readonly none: 1;
|
|
226
|
+
readonly tight: 1.25;
|
|
227
|
+
readonly snug: 1.375;
|
|
228
|
+
readonly normal: 1.5;
|
|
229
|
+
readonly relaxed: 1.625;
|
|
230
|
+
readonly loose: 2;
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
declare const defaultShadowDefinitions: Record<string, ShadowLayer[]>;
|
|
234
|
+
declare function hexToRgb(hex: string): {
|
|
235
|
+
r: number;
|
|
236
|
+
g: number;
|
|
237
|
+
b: number;
|
|
238
|
+
};
|
|
239
|
+
declare function shadowLayersToCSS(layers: ShadowLayer[]): string;
|
|
240
|
+
declare const defaultShadows: ThemeShadows;
|
|
241
|
+
declare const defaultRadius: {
|
|
242
|
+
readonly none: "0";
|
|
243
|
+
readonly xs: "0.125rem";
|
|
244
|
+
readonly sm: "0.25rem";
|
|
245
|
+
readonly md: "0.375rem";
|
|
246
|
+
readonly lg: "0.5rem";
|
|
247
|
+
readonly xl: "0.75rem";
|
|
248
|
+
readonly '2xl': "1rem";
|
|
249
|
+
readonly '3xl': "1.5rem";
|
|
250
|
+
readonly full: "9999px";
|
|
251
|
+
};
|
|
252
|
+
declare const defaultTransitions: {
|
|
253
|
+
readonly duration: {
|
|
254
|
+
readonly fast: "150ms";
|
|
255
|
+
readonly base: "300ms";
|
|
256
|
+
readonly slow: "500ms";
|
|
257
|
+
};
|
|
258
|
+
readonly timing: {
|
|
259
|
+
readonly ease: "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
260
|
+
readonly easeIn: "cubic-bezier(0.4, 0, 1, 1)";
|
|
261
|
+
readonly easeOut: "cubic-bezier(0, 0, 0.2, 1)";
|
|
262
|
+
readonly easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
263
|
+
readonly linear: "linear";
|
|
264
|
+
};
|
|
265
|
+
};
|
|
266
|
+
declare const defaultZIndex: {
|
|
267
|
+
readonly dropdown: 1000;
|
|
268
|
+
readonly sticky: 1020;
|
|
269
|
+
readonly fixed: 1030;
|
|
270
|
+
readonly modalBackdrop: 1040;
|
|
271
|
+
readonly modal: 1050;
|
|
272
|
+
readonly popover: 1060;
|
|
273
|
+
readonly tooltip: 1070;
|
|
274
|
+
readonly toast: 1080;
|
|
275
|
+
};
|
|
276
|
+
declare function createTheme(overrides: {
|
|
277
|
+
light?: Partial<ColorPreset>;
|
|
278
|
+
dark?: Partial<ColorPreset>;
|
|
279
|
+
}): {
|
|
280
|
+
light: Theme;
|
|
281
|
+
dark: Theme;
|
|
282
|
+
};
|
|
283
|
+
declare const defaultTheme: Theme;
|
|
284
|
+
|
|
285
|
+
interface LogoVariants {
|
|
286
|
+
primary: string;
|
|
287
|
+
favicon32: string;
|
|
288
|
+
favicon16: string;
|
|
289
|
+
appleTouchIcon: string;
|
|
290
|
+
pwa192: string;
|
|
291
|
+
pwa512: string;
|
|
292
|
+
}
|
|
293
|
+
interface BrandingConfig {
|
|
294
|
+
name: string;
|
|
295
|
+
tagline: string;
|
|
296
|
+
logos: LogoVariants;
|
|
297
|
+
}
|
|
298
|
+
declare const LOGO_VARIANT_SIZES: Record<keyof LogoVariants, {
|
|
299
|
+
width: number;
|
|
300
|
+
height: number;
|
|
301
|
+
}>;
|
|
302
|
+
declare const defaultBranding: BrandingConfig;
|
|
303
|
+
declare function createBranding(overrides?: Partial<BrandingConfig>): BrandingConfig;
|
|
304
|
+
|
|
305
|
+
export { type BrandingConfig, type ColorPreset, type ComponentProps, LOGO_VARIANT_SIZES, type LogoVariants, SEMANTIC_COLOR_KEYS, type ShadowLayer, type Size, THEME_INJECTION_KEY, type Theme, type ThemeColors, type ThemeConfig, type ThemeMode, type ThemeProviderContext, type ThemeProviderProps, type ThemeRadius, type ThemeShadows, type ThemeSpacing, type ThemeTransitions, type ThemeTypography, type ThemeZIndex, type Variant, createBranding, createTheme, defaultBranding, defaultColorPreset, defaultColorPresetDark, defaultRadius, defaultShadowDefinitions, defaultShadows, defaultSpacing, defaultTheme, defaultTransitions, defaultTypography, defaultZIndex, hexToRgb, shadowLayersToCSS };
|