@idealyst/theme 1.2.29 → 1.2.31
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 +8 -2
- package/src/animation/index.native.ts +62 -0
- package/src/animation/index.ts +68 -0
- package/src/animation/tokens.ts +145 -0
- package/src/animation/transitions.native.ts +219 -0
- package/src/animation/transitions.ts +293 -0
- package/src/animation/types.ts +80 -0
- package/src/babel/plugin.js +114 -2
- package/src/babel/theme-analyzer.js +126 -26
- package/src/builder.ts +6 -0
- package/src/components/CLAUDE.md +1 -1
- package/src/config/generator.ts +2 -2
- package/src/darkTheme.ts +1 -1
- package/src/index.ts +5 -1
- package/src/lightTheme.ts +15 -1
- package/src/styleBuilder.ts +1 -0
- package/src/theme/extensions.ts +3 -1
- package/src/theme/structures.ts +17 -0
|
@@ -16,6 +16,31 @@ const fs = require('fs');
|
|
|
16
16
|
let themeKeys = null;
|
|
17
17
|
let themeLoadAttempted = false;
|
|
18
18
|
|
|
19
|
+
// Global aliases configuration (set via plugin options)
|
|
20
|
+
let packageAliases = {};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Resolve an import source using configured aliases (static version for use outside AST traversal).
|
|
24
|
+
* Returns the resolved path or null if no alias matches.
|
|
25
|
+
*/
|
|
26
|
+
function resolveWithAliasesStatic(source, fromDir) {
|
|
27
|
+
for (const [aliasPrefix, aliasPath] of Object.entries(packageAliases)) {
|
|
28
|
+
if (source === aliasPrefix || source.startsWith(aliasPrefix + '/')) {
|
|
29
|
+
// Replace the alias prefix with the actual path
|
|
30
|
+
const remainder = source.slice(aliasPrefix.length);
|
|
31
|
+
let resolved = aliasPath + remainder;
|
|
32
|
+
|
|
33
|
+
// If aliasPath is relative, resolve from fromDir
|
|
34
|
+
if (!nodePath.isAbsolute(resolved)) {
|
|
35
|
+
resolved = nodePath.resolve(fromDir, resolved);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return resolved;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
|
|
19
44
|
/**
|
|
20
45
|
* Extract theme keys by statically analyzing the theme file's AST.
|
|
21
46
|
*/
|
|
@@ -99,6 +124,29 @@ function extractThemeKeysFromAST(themeFilePath, babelTypes, verboseMode) {
|
|
|
99
124
|
return { calls, baseThemeVar: null };
|
|
100
125
|
}
|
|
101
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Resolve an import source using configured aliases.
|
|
129
|
+
* Returns the resolved path or null if no alias matches.
|
|
130
|
+
*/
|
|
131
|
+
function resolveWithAliases(source, fromDir) {
|
|
132
|
+
for (const [aliasPrefix, aliasPath] of Object.entries(packageAliases)) {
|
|
133
|
+
if (source === aliasPrefix || source.startsWith(aliasPrefix + '/')) {
|
|
134
|
+
// Replace the alias prefix with the actual path
|
|
135
|
+
const remainder = source.slice(aliasPrefix.length);
|
|
136
|
+
let resolved = aliasPath + remainder;
|
|
137
|
+
|
|
138
|
+
// If aliasPath is relative, resolve from fromDir
|
|
139
|
+
if (!nodePath.isAbsolute(resolved)) {
|
|
140
|
+
resolved = nodePath.resolve(fromDir, resolved);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
log('Resolved alias:', source, '->', resolved);
|
|
144
|
+
return resolved;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
|
|
102
150
|
/**
|
|
103
151
|
* Resolve and analyze a base theme from an import.
|
|
104
152
|
*/
|
|
@@ -122,42 +170,75 @@ function extractThemeKeysFromAST(themeFilePath, babelTypes, verboseMode) {
|
|
|
122
170
|
} else {
|
|
123
171
|
const packageDir = nodePath.dirname(themeFilePath);
|
|
124
172
|
|
|
125
|
-
//
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
nodePath.
|
|
135
|
-
|
|
136
|
-
nodePath.resolve(packageDir, `../theme/src/${themeFileName}`),
|
|
137
|
-
nodePath.resolve(packageDir, `../../theme/src/${themeFileName}`),
|
|
138
|
-
nodePath.resolve(packageDir, `../../../theme/src/${themeFileName}`),
|
|
139
|
-
nodePath.resolve(packageDir, `../../packages/theme/src/${themeFileName}`),
|
|
140
|
-
nodePath.resolve(packageDir, `../../../packages/theme/src/${themeFileName}`),
|
|
141
|
-
// This plugin's own package location
|
|
142
|
-
nodePath.resolve(__dirname, `../${themeFileName}`),
|
|
173
|
+
// First, try to resolve using configured aliases
|
|
174
|
+
const aliasResolved = resolveWithAliases(importInfo.source, packageDir);
|
|
175
|
+
if (aliasResolved) {
|
|
176
|
+
// Determine which theme file to look for based on variable name
|
|
177
|
+
const themeFileName = varName.includes('dark') ? 'darkTheme.ts' : 'lightTheme.ts';
|
|
178
|
+
|
|
179
|
+
// Check if alias points to a directory or a specific file
|
|
180
|
+
let possiblePaths = [
|
|
181
|
+
aliasResolved,
|
|
182
|
+
nodePath.join(aliasResolved, 'src', themeFileName),
|
|
183
|
+
nodePath.join(aliasResolved, themeFileName),
|
|
143
184
|
];
|
|
144
185
|
|
|
145
|
-
|
|
186
|
+
// Add .ts extension if needed
|
|
187
|
+
possiblePaths = possiblePaths.flatMap(p => {
|
|
188
|
+
if (p.endsWith('.ts') || p.endsWith('.tsx')) return [p];
|
|
189
|
+
return [p, p + '.ts', p + '.tsx'];
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
log('Looking for aliased theme in:', possiblePaths);
|
|
146
193
|
|
|
147
194
|
for (const p of possiblePaths) {
|
|
148
195
|
if (fs.existsSync(p)) {
|
|
149
196
|
baseThemePath = p;
|
|
150
|
-
log('Found
|
|
197
|
+
log('Found aliased theme at:', p);
|
|
151
198
|
break;
|
|
152
199
|
}
|
|
153
200
|
}
|
|
154
201
|
}
|
|
155
202
|
|
|
203
|
+
// If no alias match, use default resolution for @idealyst/theme
|
|
156
204
|
if (!baseThemePath) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
205
|
+
// Determine which theme file to look for based on variable name
|
|
206
|
+
const themeFileName = varName.includes('dark') ? 'darkTheme.ts' : 'lightTheme.ts';
|
|
207
|
+
let possiblePaths = [];
|
|
208
|
+
|
|
209
|
+
if (importInfo.source === '@idealyst/theme') {
|
|
210
|
+
possiblePaths = [
|
|
211
|
+
// Symlinked packages at root level
|
|
212
|
+
`/idealyst-packages/theme/src/${themeFileName}`,
|
|
213
|
+
// Standard node_modules
|
|
214
|
+
nodePath.resolve(packageDir, `node_modules/@idealyst/theme/src/${themeFileName}`),
|
|
215
|
+
// Monorepo structure - walk up to find packages dir
|
|
216
|
+
nodePath.resolve(packageDir, `../theme/src/${themeFileName}`),
|
|
217
|
+
nodePath.resolve(packageDir, `../../theme/src/${themeFileName}`),
|
|
218
|
+
nodePath.resolve(packageDir, `../../../theme/src/${themeFileName}`),
|
|
219
|
+
nodePath.resolve(packageDir, `../../packages/theme/src/${themeFileName}`),
|
|
220
|
+
nodePath.resolve(packageDir, `../../../packages/theme/src/${themeFileName}`),
|
|
221
|
+
nodePath.resolve(packageDir, `../../../../packages/theme/src/${themeFileName}`),
|
|
222
|
+
nodePath.resolve(packageDir, `../../../../../packages/theme/src/${themeFileName}`),
|
|
223
|
+
nodePath.resolve(packageDir, `../../../../../../packages/theme/src/${themeFileName}`),
|
|
224
|
+
// This plugin's own package location
|
|
225
|
+
nodePath.resolve(__dirname, `../${themeFileName}`),
|
|
226
|
+
];
|
|
227
|
+
|
|
228
|
+
log('Looking for base theme in:', possiblePaths);
|
|
229
|
+
|
|
230
|
+
for (const p of possiblePaths) {
|
|
231
|
+
if (fs.existsSync(p)) {
|
|
232
|
+
baseThemePath = p;
|
|
233
|
+
log('Found base theme at:', p);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
160
237
|
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
if (!baseThemePath) {
|
|
241
|
+
log('Could not resolve base theme path for:', importInfo.source);
|
|
161
242
|
return;
|
|
162
243
|
}
|
|
163
244
|
}
|
|
@@ -366,11 +447,23 @@ function extractThemeKeysFromAST(themeFilePath, babelTypes, verboseMode) {
|
|
|
366
447
|
*
|
|
367
448
|
* REQUIRED Options:
|
|
368
449
|
* - themePath: Path to the consumer's theme file (e.g., './src/theme/styles.ts')
|
|
450
|
+
*
|
|
451
|
+
* OPTIONAL Options:
|
|
452
|
+
* - aliases: Object mapping package prefixes to paths for resolution
|
|
453
|
+
* Example: { '@idealyst/theme': '/path/to/packages/theme' }
|
|
369
454
|
*/
|
|
370
455
|
function loadThemeKeys(opts, rootDir, babelTypes, verboseMode) {
|
|
371
456
|
if (themeLoadAttempted) return themeKeys;
|
|
372
457
|
themeLoadAttempted = true;
|
|
373
458
|
|
|
459
|
+
// Set up package aliases for resolution
|
|
460
|
+
if (opts.aliases && typeof opts.aliases === 'object') {
|
|
461
|
+
packageAliases = opts.aliases;
|
|
462
|
+
if (verboseMode) {
|
|
463
|
+
console.log('[idealyst-plugin] Configured aliases:', packageAliases);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
374
467
|
const themePath = opts.themePath;
|
|
375
468
|
|
|
376
469
|
if (!themePath) {
|
|
@@ -381,9 +474,16 @@ function loadThemeKeys(opts, rootDir, babelTypes, verboseMode) {
|
|
|
381
474
|
);
|
|
382
475
|
}
|
|
383
476
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
477
|
+
// First try to resolve using aliases
|
|
478
|
+
let resolvedPath;
|
|
479
|
+
const aliasResolved = resolveWithAliasesStatic(themePath, rootDir);
|
|
480
|
+
if (aliasResolved && fs.existsSync(aliasResolved)) {
|
|
481
|
+
resolvedPath = aliasResolved;
|
|
482
|
+
} else {
|
|
483
|
+
resolvedPath = themePath.startsWith('.')
|
|
484
|
+
? nodePath.resolve(rootDir, themePath)
|
|
485
|
+
: require.resolve(themePath, { paths: [rootDir] });
|
|
486
|
+
}
|
|
387
487
|
|
|
388
488
|
if (verboseMode) {
|
|
389
489
|
console.log('[idealyst-plugin] Analyzing theme file:', resolvedPath);
|
package/src/builder.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
Typography,
|
|
8
8
|
TypographyValue,
|
|
9
9
|
ButtonSizeValue,
|
|
10
|
+
IconButtonSizeValue,
|
|
10
11
|
ChipSizeValue,
|
|
11
12
|
BadgeSizeValue,
|
|
12
13
|
IconSizeValue,
|
|
@@ -20,6 +21,7 @@ import {
|
|
|
20
21
|
ProgressSizeValue,
|
|
21
22
|
AccordionSizeValue,
|
|
22
23
|
ActivityIndicatorSizeValue,
|
|
24
|
+
AlertSizeValue,
|
|
23
25
|
BreadcrumbSizeValue,
|
|
24
26
|
ListSizeValue,
|
|
25
27
|
MenuSizeValue,
|
|
@@ -55,6 +57,7 @@ export type BuiltTheme<
|
|
|
55
57
|
};
|
|
56
58
|
sizes: {
|
|
57
59
|
button: Record<TSize, ButtonSizeValue>;
|
|
60
|
+
iconButton: Record<TSize, IconButtonSizeValue>;
|
|
58
61
|
chip: Record<TSize, ChipSizeValue>;
|
|
59
62
|
badge: Record<TSize, BadgeSizeValue>;
|
|
60
63
|
icon: Record<TSize, IconSizeValue>;
|
|
@@ -68,6 +71,7 @@ export type BuiltTheme<
|
|
|
68
71
|
progress: Record<TSize, ProgressSizeValue>;
|
|
69
72
|
accordion: Record<TSize, AccordionSizeValue>;
|
|
70
73
|
activityIndicator: Record<TSize, ActivityIndicatorSizeValue>;
|
|
74
|
+
alert: Record<TSize, AlertSizeValue>;
|
|
71
75
|
breadcrumb: Record<TSize, BreadcrumbSizeValue>;
|
|
72
76
|
list: Record<TSize, ListSizeValue>;
|
|
73
77
|
menu: Record<TSize, MenuSizeValue>;
|
|
@@ -246,6 +250,7 @@ export class ThemeBuilder<
|
|
|
246
250
|
*/
|
|
247
251
|
setSizes<S extends string>(sizes: {
|
|
248
252
|
button: Record<S, ButtonSizeValue>;
|
|
253
|
+
iconButton: Record<S, IconButtonSizeValue>;
|
|
249
254
|
chip: Record<S, ChipSizeValue>;
|
|
250
255
|
badge: Record<S, BadgeSizeValue>;
|
|
251
256
|
icon: Record<S, IconSizeValue>;
|
|
@@ -259,6 +264,7 @@ export class ThemeBuilder<
|
|
|
259
264
|
progress: Record<S, ProgressSizeValue>;
|
|
260
265
|
accordion: Record<S, AccordionSizeValue>;
|
|
261
266
|
activityIndicator: Record<S, ActivityIndicatorSizeValue>;
|
|
267
|
+
alert: Record<S, AlertSizeValue>;
|
|
262
268
|
breadcrumb: Record<S, BreadcrumbSizeValue>;
|
|
263
269
|
list: Record<S, ListSizeValue>;
|
|
264
270
|
menu: Record<S, MenuSizeValue>;
|
package/src/components/CLAUDE.md
CHANGED
|
@@ -141,7 +141,7 @@ function createSizeVariants(theme: Theme) {
|
|
|
141
141
|
|
|
142
142
|
#### Colors
|
|
143
143
|
- **Intents**: `theme.intents[intent].primary`, `.contrast`, `.light`, `.dark`
|
|
144
|
-
- Available intents: `primary`, `success`, `
|
|
144
|
+
- Available intents: `primary`, `success`, `danger`, `warning`, `neutral`, `info`
|
|
145
145
|
- **Surface**: `theme.colors.surface.primary`, `.secondary`, `.tertiary`, `.inverse`, etc.
|
|
146
146
|
- **Text**: `theme.colors.text.primary`, `.secondary`, `.tertiary`, `.inverse`, etc.
|
|
147
147
|
- **Border**: `theme.colors.border.primary`, `.secondary`, `.tertiary`, `.disabled`
|
package/src/config/generator.ts
CHANGED
|
@@ -636,7 +636,7 @@ function generateInputStyles(theme: Theme, extensions?: ComponentExtensions): Re
|
|
|
636
636
|
},
|
|
637
637
|
error: {
|
|
638
638
|
true: {
|
|
639
|
-
borderColor: themeRef('intents.
|
|
639
|
+
borderColor: themeRef('intents.danger.primary'),
|
|
640
640
|
},
|
|
641
641
|
false: {},
|
|
642
642
|
},
|
|
@@ -666,7 +666,7 @@ function generateInputStyles(theme: Theme, extensions?: ComponentExtensions): Re
|
|
|
666
666
|
fontSize: 12,
|
|
667
667
|
variants: {
|
|
668
668
|
error: {
|
|
669
|
-
true: { color: themeRef('intents.
|
|
669
|
+
true: { color: themeRef('intents.danger.primary') },
|
|
670
670
|
false: {},
|
|
671
671
|
},
|
|
672
672
|
},
|
package/src/darkTheme.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -23,4 +23,8 @@ export * from './componentStyles';
|
|
|
23
23
|
// Responsive utilities
|
|
24
24
|
export * from './responsive';
|
|
25
25
|
export * from './breakpoints';
|
|
26
|
-
export * from './useResponsiveStyle';
|
|
26
|
+
export * from './useResponsiveStyle';
|
|
27
|
+
|
|
28
|
+
// Animation tokens and utilities
|
|
29
|
+
// Note: Use '@idealyst/theme/animation' for full animation API
|
|
30
|
+
export { durations, easings, presets } from './animation/tokens';
|
package/src/lightTheme.ts
CHANGED
|
@@ -19,7 +19,7 @@ export const lightTheme = createTheme()
|
|
|
19
19
|
light: '#a7f3d0',
|
|
20
20
|
dark: '#165e29',
|
|
21
21
|
})
|
|
22
|
-
.addIntent('
|
|
22
|
+
.addIntent('danger', {
|
|
23
23
|
primary: '#ef4444',
|
|
24
24
|
contrast: '#ffffff',
|
|
25
25
|
light: '#fca5a1',
|
|
@@ -120,6 +120,13 @@ export const lightTheme = createTheme()
|
|
|
120
120
|
lg: { paddingVertical: 10, paddingHorizontal: 20, minHeight: 48, fontSize: 18, lineHeight: 28, iconSize: 18 },
|
|
121
121
|
xl: { paddingVertical: 12, paddingHorizontal: 24, minHeight: 56, fontSize: 20, lineHeight: 32, iconSize: 20 },
|
|
122
122
|
},
|
|
123
|
+
iconButton: {
|
|
124
|
+
xs: { size: 24, iconSize: 12 },
|
|
125
|
+
sm: { size: 32, iconSize: 14 },
|
|
126
|
+
md: { size: 40, iconSize: 16 },
|
|
127
|
+
lg: { size: 48, iconSize: 18 },
|
|
128
|
+
xl: { size: 56, iconSize: 20 },
|
|
129
|
+
},
|
|
123
130
|
chip: {
|
|
124
131
|
xs: { paddingVertical: 1, paddingHorizontal: 6, minHeight: 16, borderRadius: 999, fontSize: 10, lineHeight: 12, iconSize: 10 },
|
|
125
132
|
sm: { paddingVertical: 2, paddingHorizontal: 8, minHeight: 20, borderRadius: 999, fontSize: 11, lineHeight: 14, iconSize: 12 },
|
|
@@ -211,6 +218,13 @@ export const lightTheme = createTheme()
|
|
|
211
218
|
lg: { size: 48, borderWidth: 4 },
|
|
212
219
|
xl: { size: 64, borderWidth: 5 },
|
|
213
220
|
},
|
|
221
|
+
alert: {
|
|
222
|
+
xs: { padding: 8, gap: 6, borderRadius: 4, titleFontSize: 12, titleLineHeight: 16, messageFontSize: 11, messageLineHeight: 14, iconSize: 16, closeIconSize: 12 },
|
|
223
|
+
sm: { padding: 12, gap: 8, borderRadius: 6, titleFontSize: 14, titleLineHeight: 20, messageFontSize: 12, messageLineHeight: 16, iconSize: 20, closeIconSize: 14 },
|
|
224
|
+
md: { padding: 16, gap: 10, borderRadius: 8, titleFontSize: 16, titleLineHeight: 24, messageFontSize: 14, messageLineHeight: 20, iconSize: 24, closeIconSize: 16 },
|
|
225
|
+
lg: { padding: 20, gap: 12, borderRadius: 10, titleFontSize: 18, titleLineHeight: 28, messageFontSize: 16, messageLineHeight: 24, iconSize: 28, closeIconSize: 18 },
|
|
226
|
+
xl: { padding: 24, gap: 14, borderRadius: 12, titleFontSize: 20, titleLineHeight: 32, messageFontSize: 18, messageLineHeight: 28, iconSize: 32, closeIconSize: 20 },
|
|
227
|
+
},
|
|
214
228
|
breadcrumb: {
|
|
215
229
|
xs: { fontSize: 10, lineHeight: 14, iconSize: 12 },
|
|
216
230
|
sm: { fontSize: 12, lineHeight: 16, iconSize: 14 },
|
package/src/styleBuilder.ts
CHANGED
package/src/theme/extensions.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
2
2
|
|
|
3
|
-
import type { IntentValue, ShadowValue, Shade, ColorValue, InteractionConfig, ButtonSizeValue, ChipSizeValue, BadgeSizeValue, IconSizeValue, InputSizeValue, RadioButtonSizeValue, SelectSizeValue, SliderSizeValue, SwitchSizeValue, TextAreaSizeValue, AvatarSizeValue, ProgressSizeValue, AccordionSizeValue, ActivityIndicatorSizeValue, BreadcrumbSizeValue, ListSizeValue, MenuSizeValue, TextSizeValue, TabBarSizeValue, TableSizeValue, TooltipSizeValue, ViewSizeValue, Typography, TypographyValue } from './structures';
|
|
3
|
+
import type { IntentValue, ShadowValue, Shade, ColorValue, InteractionConfig, ButtonSizeValue, ChipSizeValue, BadgeSizeValue, IconSizeValue, InputSizeValue, RadioButtonSizeValue, SelectSizeValue, SliderSizeValue, SwitchSizeValue, TextAreaSizeValue, AvatarSizeValue, ProgressSizeValue, AccordionSizeValue, ActivityIndicatorSizeValue, AlertSizeValue, BreadcrumbSizeValue, ListSizeValue, MenuSizeValue, TextSizeValue, TabBarSizeValue, TableSizeValue, TooltipSizeValue, ViewSizeValue, Typography, TypographyValue } from './structures';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Default fallback theme structure.
|
|
@@ -22,6 +22,7 @@ export interface DefaultTheme {
|
|
|
22
22
|
chip: Record<string, ChipSizeValue>;
|
|
23
23
|
badge: Record<string, BadgeSizeValue>;
|
|
24
24
|
icon: Record<string, IconSizeValue>;
|
|
25
|
+
iconButton: Record<string, IconSizeValue>;
|
|
25
26
|
input: Record<string, InputSizeValue>;
|
|
26
27
|
radioButton: Record<string, RadioButtonSizeValue>;
|
|
27
28
|
select: Record<string, SelectSizeValue>;
|
|
@@ -32,6 +33,7 @@ export interface DefaultTheme {
|
|
|
32
33
|
progress: Record<string, ProgressSizeValue>;
|
|
33
34
|
accordion: Record<string, AccordionSizeValue>;
|
|
34
35
|
activityIndicator: Record<string, ActivityIndicatorSizeValue>;
|
|
36
|
+
alert: Record<string, AlertSizeValue>;
|
|
35
37
|
breadcrumb: Record<string, BreadcrumbSizeValue>;
|
|
36
38
|
list: Record<string, ListSizeValue>;
|
|
37
39
|
menu: Record<string, MenuSizeValue>;
|
package/src/theme/structures.ts
CHANGED
|
@@ -98,6 +98,11 @@ export type ButtonSizeValue = {
|
|
|
98
98
|
iconSize: SizeValue;
|
|
99
99
|
};
|
|
100
100
|
|
|
101
|
+
export type IconButtonSizeValue = {
|
|
102
|
+
size: SizeValue;
|
|
103
|
+
iconSize: SizeValue;
|
|
104
|
+
};
|
|
105
|
+
|
|
101
106
|
export type ChipSizeValue = {
|
|
102
107
|
paddingVertical: SizeValue;
|
|
103
108
|
paddingHorizontal: SizeValue;
|
|
@@ -194,6 +199,18 @@ export type ActivityIndicatorSizeValue = {
|
|
|
194
199
|
borderWidth: SizeValue;
|
|
195
200
|
};
|
|
196
201
|
|
|
202
|
+
export type AlertSizeValue = {
|
|
203
|
+
padding: SizeValue;
|
|
204
|
+
gap: SizeValue;
|
|
205
|
+
borderRadius: SizeValue;
|
|
206
|
+
titleFontSize: SizeValue;
|
|
207
|
+
titleLineHeight: SizeValue;
|
|
208
|
+
messageFontSize: SizeValue;
|
|
209
|
+
messageLineHeight: SizeValue;
|
|
210
|
+
iconSize: SizeValue;
|
|
211
|
+
closeIconSize: SizeValue;
|
|
212
|
+
};
|
|
213
|
+
|
|
197
214
|
export type BreadcrumbSizeValue = {
|
|
198
215
|
fontSize: SizeValue;
|
|
199
216
|
lineHeight: SizeValue;
|