@ankhorage/surface 2.1.1 → 2.2.1
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/CHANGELOG.md +12 -0
- package/README.md +1 -654
- package/dist/layout/Stack.d.ts +1 -1
- package/dist/layout/Stack.d.ts.map +1 -1
- package/dist/layout/Stack.js +2 -13
- package/dist/layout/Stack.js.map +1 -1
- package/dist/theme/colorEngine.d.ts +2 -2
- package/dist/theme/colorEngine.d.ts.map +1 -1
- package/dist/theme/colorEngine.js.map +1 -1
- package/dist/theme/createTheme.d.ts +2 -2
- package/dist/theme/createTheme.d.ts.map +1 -1
- package/dist/theme/createTheme.js +33 -92
- package/dist/theme/createTheme.js.map +1 -1
- package/dist/theme/defaultTokens.d.ts +3 -0
- package/dist/theme/defaultTokens.d.ts.map +1 -0
- package/dist/theme/defaultTokens.js +56 -0
- package/dist/theme/defaultTokens.js.map +1 -0
- package/dist/theme/resolveGlobalTokens.d.ts +6 -0
- package/dist/theme/resolveGlobalTokens.d.ts.map +1 -0
- package/dist/theme/resolveGlobalTokens.js +46 -0
- package/dist/theme/resolveGlobalTokens.js.map +1 -0
- package/dist/theme/resolveHeadingTokenOverrides.d.ts +6 -0
- package/dist/theme/resolveHeadingTokenOverrides.d.ts.map +1 -0
- package/dist/theme/resolveHeadingTokenOverrides.js +38 -0
- package/dist/theme/resolveHeadingTokenOverrides.js.map +1 -0
- package/dist/theme/resolveNumericTokenOverrides.d.ts +2 -0
- package/dist/theme/resolveNumericTokenOverrides.d.ts.map +1 -0
- package/dist/theme/resolveNumericTokenOverrides.js +15 -0
- package/dist/theme/resolveNumericTokenOverrides.js.map +1 -0
- package/dist/theme/resolveWeightTokenOverrides.d.ts +3 -0
- package/dist/theme/resolveWeightTokenOverrides.d.ts.map +1 -0
- package/dist/theme/resolveWeightTokenOverrides.js +43 -0
- package/dist/theme/resolveWeightTokenOverrides.js.map +1 -0
- package/dist/theme/types.d.ts +1 -0
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/theme/types.js.map +1 -1
- package/package.json +3 -3
- package/src/layout/Stack.test.ts +14 -0
- package/src/layout/Stack.tsx +3 -17
- package/src/theme/colorEngine.ts +3 -2
- package/src/theme/createTheme.ts +35 -95
- package/src/theme/createThemeOverrides.test.ts +51 -0
- package/src/theme/createThemeValidation.test.ts +50 -0
- package/src/theme/defaultTokens.ts +58 -0
- package/src/theme/resolveGlobalTokens.ts +55 -0
- package/src/theme/resolveHeadingTokenOverrides.ts +61 -0
- package/src/theme/resolveNumericTokenOverrides.ts +19 -0
- package/src/theme/resolveWeightTokenOverrides.ts +48 -0
- package/src/theme/types.ts +1 -0
package/dist/layout/Stack.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/layout/Stack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/layout/Stack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAqB,KAAK,UAAU,EAAwB,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC5D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,UAAU,CAAC,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;IAClF,OAAO,CAAC,EAAE,UAAU,CAClB,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,CACzF,CAAC;IACF,IAAI,CAAC,EAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;CACtC;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,SAAoB,EACpB,GAAO,EACP,KAAK,EACL,OAAO,EACP,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,UAAU,qBA0BZ"}
|
package/dist/layout/Stack.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { View } from 'react-native';
|
|
3
1
|
import { resolveResponsive, useResponsiveRuntime } from '../core/responsive';
|
|
4
2
|
import { useTheme } from '../theme/ThemeContext';
|
|
5
3
|
import { Box } from './Box';
|
|
@@ -12,26 +10,17 @@ export function Stack({ children, direction = 'column', gap = 0, align, justify,
|
|
|
12
10
|
const activeAlign = resolveResponsive(align, breakpoint);
|
|
13
11
|
const activeJustify = resolveResponsive(justify, breakpoint);
|
|
14
12
|
const activeWrap = resolveResponsive(wrap, breakpoint);
|
|
15
|
-
const nodes = React.Children.toArray(children);
|
|
16
13
|
return (<Box {...props} style={[
|
|
17
14
|
{
|
|
18
15
|
flexDirection: activeDirection,
|
|
16
|
+
gap: activeGap,
|
|
19
17
|
alignItems: activeAlign,
|
|
20
18
|
justifyContent: activeJustify,
|
|
21
19
|
flexWrap: activeWrap,
|
|
22
20
|
},
|
|
23
21
|
props.style,
|
|
24
22
|
]}>
|
|
25
|
-
{
|
|
26
|
-
const spacing = index === 0
|
|
27
|
-
? undefined
|
|
28
|
-
: activeDirection === 'row'
|
|
29
|
-
? { marginLeft: activeGap }
|
|
30
|
-
: { marginTop: activeGap };
|
|
31
|
-
return (<View key={String(index)} style={spacing}>
|
|
32
|
-
{node}
|
|
33
|
-
</View>);
|
|
34
|
-
})}
|
|
23
|
+
{children}
|
|
35
24
|
</Box>);
|
|
36
25
|
}
|
|
37
26
|
//# sourceMappingURL=Stack.js.map
|
package/dist/layout/Stack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../src/layout/Stack.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../src/layout/Stack.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAmB,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAiB,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAmB,MAAM,WAAW,CAAC;AAa5D,MAAM,UAAU,KAAK,CAAC,EACpB,QAAQ,EACR,SAAS,GAAG,QAAQ,EACpB,GAAG,GAAG,CAAC,EACP,KAAK,EACL,OAAO,EACP,IAAI,EACJ,GAAG,KAAK,EACG;IACX,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,EAAE,UAAU,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAC9C,MAAM,eAAe,GAAG,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC;IAC7E,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAEvD,OAAO,CACL,CAAC,GAAG,CACF,IAAI,KAAK,CAAC,CACV,KAAK,CAAC,CAAC;YACL;gBACE,aAAa,EAAE,eAAe;gBAC9B,GAAG,EAAE,SAAS;gBACd,UAAU,EAAE,WAAW;gBACvB,cAAc,EAAE,aAAa;gBAC7B,QAAQ,EAAE,UAAU;aACrB;YACD,KAAK,CAAC,KAAK;SACZ,CAAC,CAEF;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC","sourcesContent":["import type React from 'react';\n\nimport { resolveResponsive, type Responsive, useResponsiveRuntime } from '../core/responsive';\nimport { useTheme } from '../theme/ThemeContext';\nimport { Box, type BoxProps } from './Box';\nimport { resolveSpacing, type SpaceValue } from './helpers';\n\nexport interface StackProps extends Omit<BoxProps, 'children'> {\n children?: React.ReactNode;\n direction?: Responsive<'row' | 'column'>;\n gap?: Responsive<SpaceValue>;\n align?: Responsive<'flex-start' | 'center' | 'flex-end' | 'stretch' | 'baseline'>;\n justify?: Responsive<\n 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly'\n >;\n wrap?: Responsive<'nowrap' | 'wrap'>;\n}\n\nexport function Stack({\n children,\n direction = 'column',\n gap = 0,\n align,\n justify,\n wrap,\n ...props\n}: StackProps) {\n const { theme } = useTheme();\n const { breakpoint } = useResponsiveRuntime();\n const activeDirection = resolveResponsive(direction, breakpoint) ?? 'column';\n const activeGap = resolveSpacing(theme, resolveResponsive(gap, breakpoint)) ?? 0;\n const activeAlign = resolveResponsive(align, breakpoint);\n const activeJustify = resolveResponsive(justify, breakpoint);\n const activeWrap = resolveResponsive(wrap, breakpoint);\n\n return (\n <Box\n {...props}\n style={[\n {\n flexDirection: activeDirection,\n gap: activeGap,\n alignItems: activeAlign,\n justifyContent: activeJustify,\n flexWrap: activeWrap,\n },\n props.style,\n ]}\n >\n {children}\n </Box>\n );\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { GeneratedThemeModeColors, GeneratedThemeSwatches, HexColor, SemanticColorReferenceMap, SemanticColorToken } from '@ankhorage/color-theory';
|
|
2
2
|
import type { ThemeConfig } from '@ankhorage/contracts';
|
|
3
|
-
import type { ThemeSemantics } from './types';
|
|
3
|
+
import type { ThemeSemantics, ThemeTokens } from './types';
|
|
4
4
|
/**
|
|
5
5
|
* Surface semantic resolver: maps color-theory SemanticColorToken references
|
|
6
6
|
* to hex values from the generated swatches.
|
|
@@ -8,7 +8,7 @@ import type { ThemeSemantics } from './types';
|
|
|
8
8
|
export type SurfaceSemanticColors = Record<SemanticColorToken, HexColor>;
|
|
9
9
|
export declare function resolveSemanticColors(generated: GeneratedThemeModeColors, references: SemanticColorReferenceMap): SurfaceSemanticColors;
|
|
10
10
|
export declare function generatePalette(config: ThemeConfig, mode?: 'light' | 'dark'): {
|
|
11
|
-
colors:
|
|
11
|
+
colors: ThemeTokens['colors'];
|
|
12
12
|
swatches: GeneratedThemeSwatches;
|
|
13
13
|
semantics: ThemeSemantics;
|
|
14
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colorEngine.d.ts","sourceRoot":"","sources":["../../src/theme/colorEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,wBAAwB,EACxB,sBAAsB,EACtB,QAAQ,EACR,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAOjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAOV,cAAc,
|
|
1
|
+
{"version":3,"file":"colorEngine.d.ts","sourceRoot":"","sources":["../../src/theme/colorEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,wBAAwB,EACxB,sBAAsB,EACtB,QAAQ,EACR,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAOjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAOV,cAAc,EACd,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAEzE,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,wBAAwB,EACnC,UAAU,EAAE,yBAAyB,GACpC,qBAAqB,CAUvB;AA8DD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,OAAO,GAAG,MAAgB,GAC/B;IACD,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,SAAS,EAAE,cAAc,CAAC;CAC3B,CA8FA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colorEngine.js","sourceRoot":"","sources":["../../src/theme/colorEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ColorSwatch,\n GeneratedThemeModeColors,\n GeneratedThemeSwatches,\n HexColor,\n SemanticColorReferenceMap,\n SemanticColorToken,\n} from '@ankhorage/color-theory';\nimport {\n createDefaultSemanticStatusSwatches,\n generateThemeModeColors,\n getReadableForeground,\n parseHexColorOrThrow,\n} from '@ankhorage/color-theory';\nimport type { ThemeConfig } from '@ankhorage/contracts';\n\nimport type {\n ActionSemantics,\n BorderSemantics,\n ContentSemantics,\n NeutralSemantics,\n RoleSemantics,\n SurfaceSemantics,\n ThemeSemantics,\n} from './types';\n\n/**\n * Surface semantic resolver: maps color-theory SemanticColorToken references\n * to hex values from the generated swatches.\n */\nexport type SurfaceSemanticColors = Record<SemanticColorToken, HexColor>;\n\nexport function resolveSemanticColors(\n generated: GeneratedThemeModeColors,\n references: SemanticColorReferenceMap,\n): SurfaceSemanticColors {\n return Object.fromEntries(\n Object.entries(references).map(([token, ref]) => {\n const swatch = generated.swatches[ref.role];\n if (!swatch) {\n throw new Error(`Missing swatch for role '${ref.role}' (token: '${token}')`);\n }\n return [token, swatch[ref.step]];\n }),\n ) as SurfaceSemanticColors;\n}\n\nfunction buildNeutralSemantics(neutralSwatch: ColorSwatch, isDark: boolean): NeutralSemantics {\n if (isDark) {\n return {\n bg: neutralSwatch[950],\n bgSubtle: neutralSwatch[900],\n surface: neutralSwatch[900],\n surfaceHover: neutralSwatch[800],\n surfaceActive: neutralSwatch[700],\n border: neutralSwatch[800],\n borderStrong: neutralSwatch[600],\n divider: neutralSwatch[800],\n text: neutralSwatch[50],\n textMuted: neutralSwatch[200],\n textSubtle: neutralSwatch[300],\n };\n }\n return {\n bg: neutralSwatch[50],\n bgSubtle: neutralSwatch[100],\n surface: neutralSwatch[100],\n surfaceHover: neutralSwatch[200],\n surfaceActive: neutralSwatch[300],\n border: neutralSwatch[200],\n borderStrong: neutralSwatch[300],\n divider: neutralSwatch[200],\n text: neutralSwatch[900],\n textMuted: neutralSwatch[700],\n textSubtle: neutralSwatch[600],\n };\n}\n\nfunction buildRoleSemantics(swatch: ColorSwatch, isDark: boolean): RoleSemantics {\n const base = swatch[500];\n const { foreground: onSolidText } = getReadableForeground(base);\n\n if (isDark) {\n return {\n base,\n hover: swatch[400],\n strong: swatch[300],\n softBg: swatch[900],\n softHover: swatch[800],\n softActive: swatch[700],\n outline: swatch[500],\n onSolidText,\n };\n }\n\n return {\n base,\n hover: swatch[600],\n strong: swatch[700],\n softBg: swatch[100],\n softHover: swatch[200],\n softActive: swatch[300],\n outline: swatch[400],\n onSolidText,\n };\n}\n\nexport function generatePalette(\n config: ThemeConfig,\n mode: 'light' | 'dark' = 'light',\n): {\n colors: Record<string, string>;\n swatches: GeneratedThemeSwatches;\n semantics: ThemeSemantics;\n} {\n const modeConfig = mode === 'dark' ? config.dark : config.light;\n const isDark = mode === 'dark';\n\n // Throws deterministically on invalid primary color\n parseHexColorOrThrow(modeConfig.primaryColor);\n\n const generated = generateThemeModeColors(modeConfig);\n const { swatches } = generated;\n const neutralSwatch = swatches.neutral;\n\n const neutral = buildNeutralSemantics(neutralSwatch, isDark);\n const brand = buildRoleSemantics(swatches.primary, isDark);\n\n // Fallback to primary swatch for missing ordinal roles\n const secondarySwatch = swatches.secondary ?? swatches.primary;\n const tertiarySwatch = swatches.tertiary ?? swatches.primary;\n const quaternarySwatch = swatches.quaternary ?? swatches.primary;\n\n const semanticStatusSwatches = createDefaultSemanticStatusSwatches().swatches;\n\n const danger = buildRoleSemantics(semanticStatusSwatches.danger, isDark);\n const success = buildRoleSemantics(semanticStatusSwatches.success, isDark);\n const warning = buildRoleSemantics(semanticStatusSwatches.warning, isDark);\n // Keep destructive action and feedback error aligned until a dedicated error status swatch is introduced.\n const error = danger;\n const info = buildRoleSemantics(secondarySwatch, isDark);\n const inverseSurface = isDark ? neutralSwatch[50] : neutralSwatch[900];\n const inverseOnSurface = isDark ? neutralSwatch[900] : neutralSwatch[50];\n\n const surfaceSemantics: SurfaceSemantics = {\n default: neutral.surface,\n subtle: neutral.bgSubtle,\n raised: neutral.surface,\n inverse: inverseSurface,\n };\n\n const content: ContentSemantics = {\n default: neutral.text,\n muted: neutral.textMuted,\n subtle: neutral.textSubtle,\n inverse: inverseOnSurface,\n };\n\n const border: BorderSemantics = {\n default: neutral.border,\n strong: neutral.borderStrong,\n focus: brand.outline,\n };\n\n const action: ActionSemantics = {\n primary: brand,\n neutral: buildRoleSemantics(neutralSwatch, isDark),\n danger,\n };\n\n const colors: Record<string, string> = {\n primary: brand.base,\n secondary: secondarySwatch[500],\n accent: tertiarySwatch[500],\n highlight: quaternarySwatch[500],\n tertiary: tertiarySwatch[500],\n quaternary: quaternarySwatch[500],\n background: neutral.bg,\n surface: neutral.surface,\n text: neutral.text,\n textSecondary: neutral.textMuted,\n border: neutral.border,\n error: error.base,\n success: success.base,\n warning: warning.base,\n info: info.base,\n };\n\n return {\n colors,\n swatches,\n semantics: {\n neutral,\n brand,\n secondary: buildRoleSemantics(secondarySwatch, isDark),\n accent: buildRoleSemantics(tertiarySwatch, isDark),\n highlight: buildRoleSemantics(quaternarySwatch, isDark),\n danger,\n success,\n warning,\n error,\n info,\n surface: surfaceSemantics,\n content,\n border,\n action,\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"colorEngine.js","sourceRoot":"","sources":["../../src/theme/colorEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ColorSwatch,\n GeneratedThemeModeColors,\n GeneratedThemeSwatches,\n HexColor,\n SemanticColorReferenceMap,\n SemanticColorToken,\n} from '@ankhorage/color-theory';\nimport {\n createDefaultSemanticStatusSwatches,\n generateThemeModeColors,\n getReadableForeground,\n parseHexColorOrThrow,\n} from '@ankhorage/color-theory';\nimport type { ThemeConfig } from '@ankhorage/contracts';\n\nimport type {\n ActionSemantics,\n BorderSemantics,\n ContentSemantics,\n NeutralSemantics,\n RoleSemantics,\n SurfaceSemantics,\n ThemeSemantics,\n ThemeTokens,\n} from './types';\n\n/**\n * Surface semantic resolver: maps color-theory SemanticColorToken references\n * to hex values from the generated swatches.\n */\nexport type SurfaceSemanticColors = Record<SemanticColorToken, HexColor>;\n\nexport function resolveSemanticColors(\n generated: GeneratedThemeModeColors,\n references: SemanticColorReferenceMap,\n): SurfaceSemanticColors {\n return Object.fromEntries(\n Object.entries(references).map(([token, ref]) => {\n const swatch = generated.swatches[ref.role];\n if (!swatch) {\n throw new Error(`Missing swatch for role '${ref.role}' (token: '${token}')`);\n }\n return [token, swatch[ref.step]];\n }),\n ) as SurfaceSemanticColors;\n}\n\nfunction buildNeutralSemantics(neutralSwatch: ColorSwatch, isDark: boolean): NeutralSemantics {\n if (isDark) {\n return {\n bg: neutralSwatch[950],\n bgSubtle: neutralSwatch[900],\n surface: neutralSwatch[900],\n surfaceHover: neutralSwatch[800],\n surfaceActive: neutralSwatch[700],\n border: neutralSwatch[800],\n borderStrong: neutralSwatch[600],\n divider: neutralSwatch[800],\n text: neutralSwatch[50],\n textMuted: neutralSwatch[200],\n textSubtle: neutralSwatch[300],\n };\n }\n return {\n bg: neutralSwatch[50],\n bgSubtle: neutralSwatch[100],\n surface: neutralSwatch[100],\n surfaceHover: neutralSwatch[200],\n surfaceActive: neutralSwatch[300],\n border: neutralSwatch[200],\n borderStrong: neutralSwatch[300],\n divider: neutralSwatch[200],\n text: neutralSwatch[900],\n textMuted: neutralSwatch[700],\n textSubtle: neutralSwatch[600],\n };\n}\n\nfunction buildRoleSemantics(swatch: ColorSwatch, isDark: boolean): RoleSemantics {\n const base = swatch[500];\n const { foreground: onSolidText } = getReadableForeground(base);\n\n if (isDark) {\n return {\n base,\n hover: swatch[400],\n strong: swatch[300],\n softBg: swatch[900],\n softHover: swatch[800],\n softActive: swatch[700],\n outline: swatch[500],\n onSolidText,\n };\n }\n\n return {\n base,\n hover: swatch[600],\n strong: swatch[700],\n softBg: swatch[100],\n softHover: swatch[200],\n softActive: swatch[300],\n outline: swatch[400],\n onSolidText,\n };\n}\n\nexport function generatePalette(\n config: ThemeConfig,\n mode: 'light' | 'dark' = 'light',\n): {\n colors: ThemeTokens['colors'];\n swatches: GeneratedThemeSwatches;\n semantics: ThemeSemantics;\n} {\n const modeConfig = mode === 'dark' ? config.dark : config.light;\n const isDark = mode === 'dark';\n\n // Throws deterministically on invalid primary color\n parseHexColorOrThrow(modeConfig.primaryColor);\n\n const generated = generateThemeModeColors(modeConfig);\n const { swatches } = generated;\n const neutralSwatch = swatches.neutral;\n\n const neutral = buildNeutralSemantics(neutralSwatch, isDark);\n const brand = buildRoleSemantics(swatches.primary, isDark);\n\n // Fallback to primary swatch for missing ordinal roles\n const secondarySwatch = swatches.secondary ?? swatches.primary;\n const tertiarySwatch = swatches.tertiary ?? swatches.primary;\n const quaternarySwatch = swatches.quaternary ?? swatches.primary;\n\n const semanticStatusSwatches = createDefaultSemanticStatusSwatches().swatches;\n\n const danger = buildRoleSemantics(semanticStatusSwatches.danger, isDark);\n const success = buildRoleSemantics(semanticStatusSwatches.success, isDark);\n const warning = buildRoleSemantics(semanticStatusSwatches.warning, isDark);\n // Keep destructive action and feedback error aligned until a dedicated error status swatch is introduced.\n const error = danger;\n const info = buildRoleSemantics(secondarySwatch, isDark);\n const inverseSurface = isDark ? neutralSwatch[50] : neutralSwatch[900];\n const inverseOnSurface = isDark ? neutralSwatch[900] : neutralSwatch[50];\n\n const surfaceSemantics: SurfaceSemantics = {\n default: neutral.surface,\n subtle: neutral.bgSubtle,\n raised: neutral.surface,\n inverse: inverseSurface,\n };\n\n const content: ContentSemantics = {\n default: neutral.text,\n muted: neutral.textMuted,\n subtle: neutral.textSubtle,\n inverse: inverseOnSurface,\n };\n\n const border: BorderSemantics = {\n default: neutral.border,\n strong: neutral.borderStrong,\n focus: brand.outline,\n };\n\n const action: ActionSemantics = {\n primary: brand,\n neutral: buildRoleSemantics(neutralSwatch, isDark),\n danger,\n };\n\n const colors: ThemeTokens['colors'] = {\n primary: brand.base,\n secondary: secondarySwatch[500],\n accent: tertiarySwatch[500],\n highlight: quaternarySwatch[500],\n tertiary: tertiarySwatch[500],\n quaternary: quaternarySwatch[500],\n background: neutral.bg,\n surface: neutral.surface,\n text: neutral.text,\n textSecondary: neutral.textMuted,\n border: neutral.border,\n error: error.base,\n success: success.base,\n warning: warning.base,\n info: info.base,\n };\n\n return {\n colors,\n swatches,\n semantics: {\n neutral,\n brand,\n secondary: buildRoleSemantics(secondarySwatch, isDark),\n accent: buildRoleSemantics(tertiarySwatch, isDark),\n highlight: buildRoleSemantics(quaternarySwatch, isDark),\n danger,\n success,\n warning,\n error,\n info,\n surface: surfaceSemantics,\n content,\n border,\n action,\n },\n };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { SurfaceTheme, ThemeConfig
|
|
2
|
-
export
|
|
1
|
+
import type { SurfaceTheme, ThemeConfig } from './types';
|
|
2
|
+
export { DEFAULT_TOKENS } from './defaultTokens';
|
|
3
3
|
export declare const DEFAULT_CONFIG: ThemeConfig;
|
|
4
4
|
export declare function createTheme(config?: ThemeConfig, mode?: 'light' | 'dark', activeFontId?: string | null): SurfaceTheme;
|
|
5
5
|
//# sourceMappingURL=createTheme.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTheme.d.ts","sourceRoot":"","sources":["../../src/theme/createTheme.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createTheme.d.ts","sourceRoot":"","sources":["../../src/theme/createTheme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,eAAO,MAAM,cAAc,EAAE,WAK5B,CAAC;AAcF,wBAAgB,WAAW,CACzB,MAAM,GAAE,WAA4B,EACpC,IAAI,GAAE,OAAO,GAAG,MAAgB,EAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,YAAY,CAYd"}
|
|
@@ -1,107 +1,48 @@
|
|
|
1
1
|
import { generatePalette } from './colorEngine';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
none: 0,
|
|
5
|
-
xs: 4,
|
|
6
|
-
s: 8,
|
|
7
|
-
m: 16,
|
|
8
|
-
l: 24,
|
|
9
|
-
xl: 32,
|
|
10
|
-
xxl: 48,
|
|
11
|
-
},
|
|
12
|
-
radii: {
|
|
13
|
-
none: 0,
|
|
14
|
-
s: 4,
|
|
15
|
-
m: 8,
|
|
16
|
-
l: 16,
|
|
17
|
-
full: 9999,
|
|
18
|
-
},
|
|
19
|
-
typography: {
|
|
20
|
-
headings: {
|
|
21
|
-
1: { size: 32, lineHeight: 40, weight: 'bold' },
|
|
22
|
-
2: { size: 24, lineHeight: 32, weight: 'bold' },
|
|
23
|
-
3: { size: 20, lineHeight: 28, weight: 'bold' },
|
|
24
|
-
4: { size: 18, lineHeight: 24, weight: 'semiBold' },
|
|
25
|
-
5: { size: 16, lineHeight: 22, weight: 'semiBold' },
|
|
26
|
-
6: { size: 14, lineHeight: 20, weight: 'semiBold' },
|
|
27
|
-
},
|
|
28
|
-
sizes: {
|
|
29
|
-
xs: 12,
|
|
30
|
-
s: 14,
|
|
31
|
-
m: 16,
|
|
32
|
-
l: 18,
|
|
33
|
-
xl: 20,
|
|
34
|
-
xxl: 24,
|
|
35
|
-
'3xl': 30,
|
|
36
|
-
h1: 32,
|
|
37
|
-
h2: 24,
|
|
38
|
-
h3: 20,
|
|
39
|
-
h4: 18,
|
|
40
|
-
h5: 16,
|
|
41
|
-
h6: 14,
|
|
42
|
-
},
|
|
43
|
-
weights: {
|
|
44
|
-
thin: '100',
|
|
45
|
-
extraLight: '200',
|
|
46
|
-
light: '300',
|
|
47
|
-
regular: '400',
|
|
48
|
-
medium: '500',
|
|
49
|
-
semiBold: '600',
|
|
50
|
-
bold: '700',
|
|
51
|
-
extraBold: '800',
|
|
52
|
-
black: '900',
|
|
53
|
-
},
|
|
54
|
-
fonts: {
|
|
55
|
-
normal: {},
|
|
56
|
-
italic: {},
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
shadows: {
|
|
60
|
-
soft: 2,
|
|
61
|
-
medium: 4,
|
|
62
|
-
hard: 8,
|
|
63
|
-
},
|
|
64
|
-
};
|
|
2
|
+
import { resolveGlobalTokens } from './resolveGlobalTokens';
|
|
3
|
+
export { DEFAULT_TOKENS } from './defaultTokens';
|
|
65
4
|
export const DEFAULT_CONFIG = {
|
|
66
5
|
id: 'default',
|
|
67
6
|
name: 'Default',
|
|
68
|
-
light: {
|
|
69
|
-
|
|
70
|
-
harmony: 'monochromatic',
|
|
71
|
-
},
|
|
72
|
-
dark: {
|
|
73
|
-
primaryColor: '#3B82F6',
|
|
74
|
-
harmony: 'monochromatic',
|
|
75
|
-
},
|
|
7
|
+
light: { primaryColor: '#3B82F6', harmony: 'monochromatic' },
|
|
8
|
+
dark: { primaryColor: '#3B82F6', harmony: 'monochromatic' },
|
|
76
9
|
};
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
10
|
+
const ACTIVE_FONT_WEIGHTS = [
|
|
11
|
+
'100',
|
|
12
|
+
'200',
|
|
13
|
+
'300',
|
|
14
|
+
'400',
|
|
15
|
+
'500',
|
|
16
|
+
'600',
|
|
17
|
+
'700',
|
|
18
|
+
'800',
|
|
19
|
+
'900',
|
|
20
|
+
];
|
|
87
21
|
export function createTheme(config = DEFAULT_CONFIG, mode = 'light', activeFontId) {
|
|
88
22
|
const { colors, swatches, semantics } = generatePalette(config, mode);
|
|
89
23
|
const theme = {
|
|
90
|
-
...
|
|
91
|
-
colors
|
|
24
|
+
...resolveGlobalTokens(config.tokens),
|
|
25
|
+
colors,
|
|
92
26
|
swatches,
|
|
93
27
|
semantics,
|
|
94
28
|
config,
|
|
95
29
|
};
|
|
96
|
-
|
|
97
|
-
const familyName = toPascalCase(activeFontId);
|
|
98
|
-
const weights = ['100', '200', '300', '400', '500', '600', '700', '800', '900'];
|
|
99
|
-
weights.forEach((w) => {
|
|
100
|
-
// Convention from GoogleFonts plugin: Family_WeightRegular
|
|
101
|
-
theme.typography.fonts.normal[w] = `${familyName}_${w}Regular`;
|
|
102
|
-
theme.typography.fonts.italic[w] = `${familyName}_${w}Italic`;
|
|
103
|
-
});
|
|
104
|
-
}
|
|
30
|
+
applyActiveFont(theme, activeFontId);
|
|
105
31
|
return theme;
|
|
106
32
|
}
|
|
33
|
+
function applyActiveFont(theme, activeFontId) {
|
|
34
|
+
if (!activeFontId)
|
|
35
|
+
return;
|
|
36
|
+
const familyName = toPascalCase(activeFontId);
|
|
37
|
+
for (const weight of ACTIVE_FONT_WEIGHTS) {
|
|
38
|
+
theme.typography.fonts.normal[weight] = `${familyName}_${weight}Regular`;
|
|
39
|
+
theme.typography.fonts.italic[weight] = `${familyName}_${weight}Italic`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function toPascalCase(value) {
|
|
43
|
+
return value
|
|
44
|
+
.split(/[- ]+/)
|
|
45
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
46
|
+
.join('');
|
|
47
|
+
}
|
|
107
48
|
//# sourceMappingURL=createTheme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTheme.js","sourceRoot":"","sources":["../../src/theme/createTheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"createTheme.js","sourceRoot":"","sources":["../../src/theme/createTheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE;IAC5D,IAAI,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE;CAC5D,CAAC;AAEF,MAAM,mBAAmB,GAA0B;IACjD,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACN,CAAC;AAEF,MAAM,UAAU,WAAW,CACzB,SAAsB,cAAc,EACpC,OAAyB,OAAO,EAChC,YAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtE,MAAM,KAAK,GAAiB;QAC1B,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM;QACN,QAAQ;QACR,SAAS;QACT,MAAM;KACP,CAAC;IAEF,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB,EAAE,YAAuC;IACnF,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC9C,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACzC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,UAAU,IAAI,MAAM,SAAS,CAAC;QACzE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,UAAU,IAAI,MAAM,QAAQ,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC","sourcesContent":["import { generatePalette } from './colorEngine';\nimport { resolveGlobalTokens } from './resolveGlobalTokens';\nimport type { FontWeight, SurfaceTheme, ThemeConfig } from './types';\n\nexport { DEFAULT_TOKENS } from './defaultTokens';\n\nexport const DEFAULT_CONFIG: ThemeConfig = {\n id: 'default',\n name: 'Default',\n light: { primaryColor: '#3B82F6', harmony: 'monochromatic' },\n dark: { primaryColor: '#3B82F6', harmony: 'monochromatic' },\n};\n\nconst ACTIVE_FONT_WEIGHTS: readonly FontWeight[] = [\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n];\n\nexport function createTheme(\n config: ThemeConfig = DEFAULT_CONFIG,\n mode: 'light' | 'dark' = 'light',\n activeFontId?: string | null,\n): SurfaceTheme {\n const { colors, swatches, semantics } = generatePalette(config, mode);\n const theme: SurfaceTheme = {\n ...resolveGlobalTokens(config.tokens),\n colors,\n swatches,\n semantics,\n config,\n };\n\n applyActiveFont(theme, activeFontId);\n return theme;\n}\n\nfunction applyActiveFont(theme: SurfaceTheme, activeFontId: string | null | undefined): void {\n if (!activeFontId) return;\n\n const familyName = toPascalCase(activeFontId);\n for (const weight of ACTIVE_FONT_WEIGHTS) {\n theme.typography.fonts.normal[weight] = `${familyName}_${weight}Regular`;\n theme.typography.fonts.italic[weight] = `${familyName}_${weight}Italic`;\n }\n}\n\nfunction toPascalCase(value: string): string {\n return value\n .split(/[- ]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultTokens.d.ts","sourceRoot":"","sources":["../../src/theme/defaultTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,SAAS,CAAC;AAgBvD,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAyCjF,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const EMPTY_FONT_MAP = {
|
|
2
|
+
'100': undefined,
|
|
3
|
+
'200': undefined,
|
|
4
|
+
'300': undefined,
|
|
5
|
+
'400': undefined,
|
|
6
|
+
'500': undefined,
|
|
7
|
+
'600': undefined,
|
|
8
|
+
'700': undefined,
|
|
9
|
+
'800': undefined,
|
|
10
|
+
'900': undefined,
|
|
11
|
+
bold: undefined,
|
|
12
|
+
normal: undefined,
|
|
13
|
+
};
|
|
14
|
+
export const DEFAULT_TOKENS = {
|
|
15
|
+
spacing: { none: 0, xs: 4, s: 8, m: 16, l: 24, xl: 32, xxl: 48 },
|
|
16
|
+
radii: { none: 0, s: 4, m: 8, l: 16, full: 9999 },
|
|
17
|
+
typography: {
|
|
18
|
+
headings: {
|
|
19
|
+
1: { size: 32, lineHeight: 40, weight: 'bold' },
|
|
20
|
+
2: { size: 24, lineHeight: 32, weight: 'bold' },
|
|
21
|
+
3: { size: 20, lineHeight: 28, weight: 'bold' },
|
|
22
|
+
4: { size: 18, lineHeight: 24, weight: 'semiBold' },
|
|
23
|
+
5: { size: 16, lineHeight: 22, weight: 'semiBold' },
|
|
24
|
+
6: { size: 14, lineHeight: 20, weight: 'semiBold' },
|
|
25
|
+
},
|
|
26
|
+
sizes: {
|
|
27
|
+
xs: 12,
|
|
28
|
+
s: 14,
|
|
29
|
+
m: 16,
|
|
30
|
+
l: 18,
|
|
31
|
+
xl: 20,
|
|
32
|
+
xxl: 24,
|
|
33
|
+
'3xl': 30,
|
|
34
|
+
h1: 32,
|
|
35
|
+
h2: 24,
|
|
36
|
+
h3: 20,
|
|
37
|
+
h4: 18,
|
|
38
|
+
h5: 16,
|
|
39
|
+
h6: 14,
|
|
40
|
+
},
|
|
41
|
+
weights: {
|
|
42
|
+
thin: '100',
|
|
43
|
+
extraLight: '200',
|
|
44
|
+
light: '300',
|
|
45
|
+
regular: '400',
|
|
46
|
+
medium: '500',
|
|
47
|
+
semiBold: '600',
|
|
48
|
+
bold: '700',
|
|
49
|
+
extraBold: '800',
|
|
50
|
+
black: '900',
|
|
51
|
+
},
|
|
52
|
+
fonts: { normal: { ...EMPTY_FONT_MAP }, italic: { ...EMPTY_FONT_MAP } },
|
|
53
|
+
},
|
|
54
|
+
shadows: { soft: 2, medium: 4, hard: 8 },
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=defaultTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultTokens.js","sourceRoot":"","sources":["../../src/theme/defaultTokens.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAA2C;IAC7D,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA2D;IACpF,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IAChE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACjD,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/C,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/C,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/C,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;YACnD,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;YACnD,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;SACpD;QACD,KAAK,EAAE;YACL,EAAE,EAAE,EAAE;YACN,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,EAAE,EAAE,EAAE;YACN,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;YACT,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;SACP;QACD,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;YACX,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,KAAK;SACb;QACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE;KACxE;IACD,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;CACzC,CAAC","sourcesContent":["import type { FontWeight, ThemeTokens } from './types';\n\nconst EMPTY_FONT_MAP: Record<FontWeight, string | undefined> = {\n '100': undefined,\n '200': undefined,\n '300': undefined,\n '400': undefined,\n '500': undefined,\n '600': undefined,\n '700': undefined,\n '800': undefined,\n '900': undefined,\n bold: undefined,\n normal: undefined,\n};\n\nexport const DEFAULT_TOKENS: Omit<ThemeTokens, 'colors' | 'swatches' | 'semantics'> = {\n spacing: { none: 0, xs: 4, s: 8, m: 16, l: 24, xl: 32, xxl: 48 },\n radii: { none: 0, s: 4, m: 8, l: 16, full: 9999 },\n typography: {\n headings: {\n 1: { size: 32, lineHeight: 40, weight: 'bold' },\n 2: { size: 24, lineHeight: 32, weight: 'bold' },\n 3: { size: 20, lineHeight: 28, weight: 'bold' },\n 4: { size: 18, lineHeight: 24, weight: 'semiBold' },\n 5: { size: 16, lineHeight: 22, weight: 'semiBold' },\n 6: { size: 14, lineHeight: 20, weight: 'semiBold' },\n },\n sizes: {\n xs: 12,\n s: 14,\n m: 16,\n l: 18,\n xl: 20,\n xxl: 24,\n '3xl': 30,\n h1: 32,\n h2: 24,\n h3: 20,\n h4: 18,\n h5: 16,\n h6: 14,\n },\n weights: {\n thin: '100',\n extraLight: '200',\n light: '300',\n regular: '400',\n medium: '500',\n semiBold: '600',\n bold: '700',\n extraBold: '800',\n black: '900',\n },\n fonts: { normal: { ...EMPTY_FONT_MAP }, italic: { ...EMPTY_FONT_MAP } },\n },\n shadows: { soft: 2, medium: 4, hard: 8 },\n};\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ThemeGlobalTokenOverrides } from '@ankhorage/contracts';
|
|
2
|
+
import type { ThemeTokens } from './types';
|
|
3
|
+
type GlobalThemeTokens = Omit<ThemeTokens, 'colors' | 'swatches' | 'semantics'>;
|
|
4
|
+
export declare function resolveGlobalTokens(overrides?: ThemeGlobalTokenOverrides): GlobalThemeTokens;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=resolveGlobalTokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGlobalTokens.d.ts","sourceRoot":"","sources":["../../src/theme/resolveGlobalTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAMtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC;AAEhF,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,yBAAyB,GAAG,iBAAiB,CAmC5F"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { DEFAULT_TOKENS } from './defaultTokens';
|
|
2
|
+
import { resolveHeadingTokenOverrides } from './resolveHeadingTokenOverrides';
|
|
3
|
+
import { resolveNumericTokenOverrides } from './resolveNumericTokenOverrides';
|
|
4
|
+
import { resolveWeightTokenOverrides } from './resolveWeightTokenOverrides';
|
|
5
|
+
export function resolveGlobalTokens(overrides) {
|
|
6
|
+
validateZeroTokens(overrides);
|
|
7
|
+
const typography = overrides?.typography;
|
|
8
|
+
return {
|
|
9
|
+
spacing: {
|
|
10
|
+
...DEFAULT_TOKENS.spacing,
|
|
11
|
+
...resolveNumericTokenOverrides('spacing', overrides?.spacing),
|
|
12
|
+
},
|
|
13
|
+
radii: {
|
|
14
|
+
...DEFAULT_TOKENS.radii,
|
|
15
|
+
...resolveNumericTokenOverrides('radii', overrides?.radii),
|
|
16
|
+
},
|
|
17
|
+
typography: {
|
|
18
|
+
headings: resolveHeadingTokenOverrides(DEFAULT_TOKENS.typography.headings, typography?.headings),
|
|
19
|
+
sizes: {
|
|
20
|
+
...DEFAULT_TOKENS.typography.sizes,
|
|
21
|
+
...resolveNumericTokenOverrides('typography.sizes', typography?.sizes, true),
|
|
22
|
+
},
|
|
23
|
+
weights: {
|
|
24
|
+
...DEFAULT_TOKENS.typography.weights,
|
|
25
|
+
...resolveWeightTokenOverrides(typography?.weights),
|
|
26
|
+
},
|
|
27
|
+
fonts: {
|
|
28
|
+
normal: { ...DEFAULT_TOKENS.typography.fonts.normal },
|
|
29
|
+
italic: { ...DEFAULT_TOKENS.typography.fonts.italic },
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
shadows: {
|
|
33
|
+
...DEFAULT_TOKENS.shadows,
|
|
34
|
+
...resolveNumericTokenOverrides('shadows', overrides?.shadows),
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function validateZeroTokens(overrides) {
|
|
39
|
+
if (overrides?.spacing?.none !== undefined && overrides.spacing.none !== 0) {
|
|
40
|
+
throw new RangeError('Theme token spacing.none must remain 0.');
|
|
41
|
+
}
|
|
42
|
+
if (overrides?.radii?.none !== undefined && overrides.radii.none !== 0) {
|
|
43
|
+
throw new RangeError('Theme token radii.none must remain 0.');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=resolveGlobalTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGlobalTokens.js","sourceRoot":"","sources":["../../src/theme/resolveGlobalTokens.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAK5E,MAAM,UAAU,mBAAmB,CAAC,SAAqC;IACvE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,SAAS,EAAE,UAAU,CAAC;IACzC,OAAO;QACL,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;SAC/D;QACD,KAAK,EAAE;YACL,GAAG,cAAc,CAAC,KAAK;YACvB,GAAG,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;SAC3D;QACD,UAAU,EAAE;YACV,QAAQ,EAAE,4BAA4B,CACpC,cAAc,CAAC,UAAU,CAAC,QAAQ,EAClC,UAAU,EAAE,QAAQ,CACrB;YACD,KAAK,EAAE;gBACL,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK;gBAClC,GAAG,4BAA4B,CAAC,kBAAkB,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC;aAC7E;YACD,OAAO,EAAE;gBACP,GAAG,cAAc,CAAC,UAAU,CAAC,OAAO;gBACpC,GAAG,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC;aACpD;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE;gBACrD,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE;aACtD;SACF;QACD,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;SAC/D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAgD;IAC1E,IAAI,SAAS,EAAE,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,UAAU,CAAC,yCAAyC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,SAAS,EAAE,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC","sourcesContent":["import type { ThemeGlobalTokenOverrides } from '@ankhorage/contracts';\n\nimport { DEFAULT_TOKENS } from './defaultTokens';\nimport { resolveHeadingTokenOverrides } from './resolveHeadingTokenOverrides';\nimport { resolveNumericTokenOverrides } from './resolveNumericTokenOverrides';\nimport { resolveWeightTokenOverrides } from './resolveWeightTokenOverrides';\nimport type { ThemeTokens } from './types';\n\ntype GlobalThemeTokens = Omit<ThemeTokens, 'colors' | 'swatches' | 'semantics'>;\n\nexport function resolveGlobalTokens(overrides?: ThemeGlobalTokenOverrides): GlobalThemeTokens {\n validateZeroTokens(overrides);\n const typography = overrides?.typography;\n return {\n spacing: {\n ...DEFAULT_TOKENS.spacing,\n ...resolveNumericTokenOverrides('spacing', overrides?.spacing),\n },\n radii: {\n ...DEFAULT_TOKENS.radii,\n ...resolveNumericTokenOverrides('radii', overrides?.radii),\n },\n typography: {\n headings: resolveHeadingTokenOverrides(\n DEFAULT_TOKENS.typography.headings,\n typography?.headings,\n ),\n sizes: {\n ...DEFAULT_TOKENS.typography.sizes,\n ...resolveNumericTokenOverrides('typography.sizes', typography?.sizes, true),\n },\n weights: {\n ...DEFAULT_TOKENS.typography.weights,\n ...resolveWeightTokenOverrides(typography?.weights),\n },\n fonts: {\n normal: { ...DEFAULT_TOKENS.typography.fonts.normal },\n italic: { ...DEFAULT_TOKENS.typography.fonts.italic },\n },\n },\n shadows: {\n ...DEFAULT_TOKENS.shadows,\n ...resolveNumericTokenOverrides('shadows', overrides?.shadows),\n },\n };\n}\n\nfunction validateZeroTokens(overrides: ThemeGlobalTokenOverrides | undefined): void {\n if (overrides?.spacing?.none !== undefined && overrides.spacing.none !== 0) {\n throw new RangeError('Theme token spacing.none must remain 0.');\n }\n if (overrides?.radii?.none !== undefined && overrides.radii.none !== 0) {\n throw new RangeError('Theme token radii.none must remain 0.');\n }\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ThemeTypographyHeadingOverrides } from '@ankhorage/contracts';
|
|
2
|
+
import type { ThemeTokens } from './types';
|
|
3
|
+
type HeadingTokens = ThemeTokens['typography']['headings'];
|
|
4
|
+
export declare function resolveHeadingTokenOverrides(defaults: HeadingTokens, overrides: Readonly<Record<string, ThemeTypographyHeadingOverrides>> | undefined): HeadingTokens;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=resolveHeadingTokenOverrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveHeadingTokenOverrides.d.ts","sourceRoot":"","sources":["../../src/theme/resolveHeadingTokenOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC;AAO3D,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC,GAAG,SAAS,GAC/E,aAAa,CAUf"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const HEADING_KEYS = new Set(['1', '2', '3', '4', '5', '6']);
|
|
2
|
+
const HEADING_WEIGHTS = new Set(['regular', 'medium', 'semiBold', 'bold']);
|
|
3
|
+
export function resolveHeadingTokenOverrides(defaults, overrides) {
|
|
4
|
+
validateHeadingKeys(overrides);
|
|
5
|
+
return {
|
|
6
|
+
1: resolveHeading('1', defaults[1], overrides?.['1']),
|
|
7
|
+
2: resolveHeading('2', defaults[2], overrides?.['2']),
|
|
8
|
+
3: resolveHeading('3', defaults[3], overrides?.['3']),
|
|
9
|
+
4: resolveHeading('4', defaults[4], overrides?.['4']),
|
|
10
|
+
5: resolveHeading('5', defaults[5], overrides?.['5']),
|
|
11
|
+
6: resolveHeading('6', defaults[6], overrides?.['6']),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function validateHeadingKeys(overrides) {
|
|
15
|
+
for (const key of Object.keys(overrides ?? {})) {
|
|
16
|
+
if (!HEADING_KEYS.has(key))
|
|
17
|
+
throw new RangeError(`Unknown typography heading token: ${key}.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function resolveHeading(key, fallback, override) {
|
|
21
|
+
const size = override?.size ?? fallback.size;
|
|
22
|
+
const lineHeight = override?.lineHeight ?? fallback.lineHeight;
|
|
23
|
+
const weight = override?.weight ?? fallback.weight;
|
|
24
|
+
if (!Number.isFinite(size) || size <= 0) {
|
|
25
|
+
throw new RangeError(`Theme token typography.headings.${key}.size must be a finite positive number.`);
|
|
26
|
+
}
|
|
27
|
+
if (!Number.isFinite(lineHeight) || lineHeight <= 0) {
|
|
28
|
+
throw new RangeError(`Theme token typography.headings.${key}.lineHeight must be a finite positive number.`);
|
|
29
|
+
}
|
|
30
|
+
if (!isHeadingWeight(weight)) {
|
|
31
|
+
throw new RangeError(`Invalid heading weight for typography.headings.${key}: ${weight}.`);
|
|
32
|
+
}
|
|
33
|
+
return { size, lineHeight, weight };
|
|
34
|
+
}
|
|
35
|
+
function isHeadingWeight(value) {
|
|
36
|
+
return HEADING_WEIGHTS.has(value);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=resolveHeadingTokenOverrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveHeadingTokenOverrides.js","sourceRoot":"","sources":["../../src/theme/resolveHeadingTokenOverrides.ts"],"names":[],"mappings":"AAQA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnF,MAAM,UAAU,4BAA4B,CAC1C,QAAuB,EACvB,SAAgF;IAEhF,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO;QACL,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,SAAgF;IAEhF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,qCAAqC,GAAG,GAAG,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,GAAW,EACX,QAAsB,EACtB,QAAqD;IAErD,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC7C,MAAM,UAAU,GAAG,QAAQ,EAAE,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC;IAC/D,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,UAAU,CAClB,mCAAmC,GAAG,yCAAyC,CAChF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAClB,mCAAmC,GAAG,+CAA+C,CACtF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,kDAAkD,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import type { ThemeTypographyHeadingOverrides } from '@ankhorage/contracts';\n\nimport type { ThemeTokens } from './types';\n\ntype HeadingTokens = ThemeTokens['typography']['headings'];\ntype HeadingToken = HeadingTokens[1];\ntype HeadingWeight = HeadingToken['weight'];\n\nconst HEADING_KEYS = new Set<string>(['1', '2', '3', '4', '5', '6']);\nconst HEADING_WEIGHTS = new Set<string>(['regular', 'medium', 'semiBold', 'bold']);\n\nexport function resolveHeadingTokenOverrides(\n defaults: HeadingTokens,\n overrides: Readonly<Record<string, ThemeTypographyHeadingOverrides>> | undefined,\n): HeadingTokens {\n validateHeadingKeys(overrides);\n return {\n 1: resolveHeading('1', defaults[1], overrides?.['1']),\n 2: resolveHeading('2', defaults[2], overrides?.['2']),\n 3: resolveHeading('3', defaults[3], overrides?.['3']),\n 4: resolveHeading('4', defaults[4], overrides?.['4']),\n 5: resolveHeading('5', defaults[5], overrides?.['5']),\n 6: resolveHeading('6', defaults[6], overrides?.['6']),\n };\n}\n\nfunction validateHeadingKeys(\n overrides: Readonly<Record<string, ThemeTypographyHeadingOverrides>> | undefined,\n): void {\n for (const key of Object.keys(overrides ?? {})) {\n if (!HEADING_KEYS.has(key)) throw new RangeError(`Unknown typography heading token: ${key}.`);\n }\n}\n\nfunction resolveHeading(\n key: string,\n fallback: HeadingToken,\n override: ThemeTypographyHeadingOverrides | undefined,\n): HeadingToken {\n const size = override?.size ?? fallback.size;\n const lineHeight = override?.lineHeight ?? fallback.lineHeight;\n const weight = override?.weight ?? fallback.weight;\n if (!Number.isFinite(size) || size <= 0) {\n throw new RangeError(\n `Theme token typography.headings.${key}.size must be a finite positive number.`,\n );\n }\n if (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n throw new RangeError(\n `Theme token typography.headings.${key}.lineHeight must be a finite positive number.`,\n );\n }\n if (!isHeadingWeight(weight)) {\n throw new RangeError(`Invalid heading weight for typography.headings.${key}: ${weight}.`);\n }\n return { size, lineHeight, weight };\n}\n\nfunction isHeadingWeight(value: string): value is HeadingWeight {\n return HEADING_WEIGHTS.has(value);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveNumericTokenOverrides.d.ts","sourceRoot":"","sources":["../../src/theme/resolveNumericTokenOverrides.ts"],"names":[],"mappings":"AAAA,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,EACvD,eAAe,UAAQ,GACtB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAclC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function resolveNumericTokenOverrides(family, overrides, requirePositive = false) {
|
|
2
|
+
if (overrides === undefined)
|
|
3
|
+
return {};
|
|
4
|
+
for (const [token, value] of Object.entries(overrides)) {
|
|
5
|
+
const invalid = !Number.isFinite(value) || (requirePositive ? value <= 0 : value < 0);
|
|
6
|
+
if (invalid) {
|
|
7
|
+
const expectation = requirePositive
|
|
8
|
+
? 'a finite positive number'
|
|
9
|
+
: 'a finite non-negative number';
|
|
10
|
+
throw new RangeError(`Theme token ${family}.${token} must be ${expectation}.`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return { ...overrides };
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=resolveNumericTokenOverrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveNumericTokenOverrides.js","sourceRoot":"","sources":["../../src/theme/resolveNumericTokenOverrides.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,4BAA4B,CAC1C,MAAc,EACd,SAAuD,EACvD,eAAe,GAAG,KAAK;IAEvB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACtF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,eAAe;gBACjC,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,8BAA8B,CAAC;YACnC,MAAM,IAAI,UAAU,CAAC,eAAe,MAAM,IAAI,KAAK,YAAY,WAAW,GAAG,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;AAC1B,CAAC","sourcesContent":["export function resolveNumericTokenOverrides(\n family: string,\n overrides: Readonly<Record<string, number>> | undefined,\n requirePositive = false,\n): Readonly<Record<string, number>> {\n if (overrides === undefined) return {};\n\n for (const [token, value] of Object.entries(overrides)) {\n const invalid = !Number.isFinite(value) || (requirePositive ? value <= 0 : value < 0);\n if (invalid) {\n const expectation = requirePositive\n ? 'a finite positive number'\n : 'a finite non-negative number';\n throw new RangeError(`Theme token ${family}.${token} must be ${expectation}.`);\n }\n }\n\n return { ...overrides };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveWeightTokenOverrides.d.ts","sourceRoot":"","sources":["../../src/theme/resolveWeightTokenOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA2B1C,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GACtD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CActC"}
|