@asafarim/design-tokens 0.3.5 → 0.4.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/css/tokens.base.css +51 -6
- package/package.json +7 -2
- package/src/build/index.ts +5 -0
- package/src/build/toCssVars.ts +31 -0
- package/src/build/toJson.ts +20 -0
- package/src/build/validate.ts +90 -0
- package/src/core/types.ts +29 -0
- package/src/core/utils.ts +42 -0
- package/src/index.ts +60 -0
- package/src/themes/dark.ts +64 -0
- package/src/themes/densityComfortable.ts +11 -0
- package/src/themes/densityCompact.ts +11 -0
- package/src/themes/highContrast.ts +60 -0
- package/src/themes/index.ts +21 -0
- package/src/themes/light.ts +64 -0
- package/src/tokens/color/accent.ts +20 -0
- package/src/tokens/color/brand.ts +41 -0
- package/src/tokens/color/dataViz.ts +20 -0
- package/src/tokens/color/gradients.ts +13 -0
- package/src/tokens/color/index.ts +7 -0
- package/src/tokens/color/neutral.ts +32 -0
- package/src/tokens/color/overlays.ts +21 -0
- package/src/tokens/color/semantic.ts +36 -0
- package/src/tokens/effects/blur.ts +7 -0
- package/src/tokens/effects/index.ts +4 -0
- package/src/tokens/effects/opacity.ts +11 -0
- package/src/tokens/effects/shadows.ts +20 -0
- package/src/tokens/effects/textures.ts +11 -0
- package/src/tokens/iconography/index.ts +2 -0
- package/src/tokens/iconography/sizes.ts +9 -0
- package/src/tokens/iconography/strokeWidths.ts +7 -0
- package/src/tokens/index.ts +21 -0
- package/src/tokens/motion/duration.ts +7 -0
- package/src/tokens/motion/easing.ts +8 -0
- package/src/tokens/motion/index.ts +4 -0
- package/src/tokens/motion/reducedMotion.ts +9 -0
- package/src/tokens/motion/transitions.ts +16 -0
- package/src/tokens/shape/borders.ts +7 -0
- package/src/tokens/shape/index.ts +3 -0
- package/src/tokens/shape/radii.ts +9 -0
- package/src/tokens/shape/strokes.ts +7 -0
- package/src/tokens/spacing/density.ts +12 -0
- package/src/tokens/spacing/grid.ts +28 -0
- package/src/tokens/spacing/index.ts +5 -0
- package/src/tokens/spacing/layout.ts +20 -0
- package/src/tokens/spacing/rtl.ts +20 -0
- package/src/tokens/spacing/scale.ts +15 -0
- package/src/tokens/typography/families.ts +14 -0
- package/src/tokens/typography/headings.ts +29 -0
- package/src/tokens/typography/index.ts +7 -0
- package/src/tokens/typography/letterSpacing.ts +7 -0
- package/src/tokens/typography/lineHeights.ts +13 -0
- package/src/tokens/typography/responsive.ts +21 -0
- package/src/tokens/typography/sizes.ts +14 -0
- package/src/tokens/typography/weights.ts +13 -0
- package/src/tokens/ui/button.ts +25 -0
- package/src/tokens/ui/focus.ts +7 -0
- package/src/tokens/ui/index.ts +5 -0
- package/src/tokens/ui/input.ts +12 -0
- package/src/tokens/ui/overlay.ts +6 -0
- package/src/tokens/ui/surface.ts +9 -0
- package/src/tokens/zindex/index.ts +1 -0
- package/src/tokens/zindex/scale.ts +12 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const brand = {
|
|
4
|
+
primary50: {
|
|
5
|
+
value: "#EEF2FF",
|
|
6
|
+
description: "Primary brand color scale - 50 (lightest)."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
primary100: {
|
|
9
|
+
value: "#E0E7FF",
|
|
10
|
+
description: "Primary brand color scale - 100."
|
|
11
|
+
} satisfies Token,
|
|
12
|
+
primary200: {
|
|
13
|
+
value: "#C7D2FE",
|
|
14
|
+
description: "Primary brand color scale - 200."
|
|
15
|
+
} satisfies Token,
|
|
16
|
+
primary300: {
|
|
17
|
+
value: "#A5B4FC",
|
|
18
|
+
description: "Primary brand color scale - 300."
|
|
19
|
+
} satisfies Token,
|
|
20
|
+
primary400: {
|
|
21
|
+
value: "#818CF8",
|
|
22
|
+
description: "Primary brand color scale - 400."
|
|
23
|
+
} satisfies Token,
|
|
24
|
+
primary500: {
|
|
25
|
+
value: "#3A5AFE",
|
|
26
|
+
description: "Primary brand color scale - 500 (core brand blue).",
|
|
27
|
+
meta: { wcag: "Use for primary actions; pair with onPrimary tokens." }
|
|
28
|
+
} satisfies Token,
|
|
29
|
+
primary600: {
|
|
30
|
+
value: "#304FFE",
|
|
31
|
+
description: "Primary brand color scale - 600."
|
|
32
|
+
} satisfies Token,
|
|
33
|
+
primary700: {
|
|
34
|
+
value: "#1E40FF",
|
|
35
|
+
description: "Primary brand color scale - 700 (darkest brand accent)."
|
|
36
|
+
} satisfies Token,
|
|
37
|
+
secondary500: {
|
|
38
|
+
value: "#14B8A6",
|
|
39
|
+
description: "Optional secondary brand accent (teal)."
|
|
40
|
+
} satisfies Token
|
|
41
|
+
} as const;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const dataViz = {
|
|
4
|
+
series1: { value: "#3A5AFE", description: "DataViz series color 1 (brand primary)." } satisfies Token,
|
|
5
|
+
series2: { value: "#14B8A6", description: "DataViz series color 2 (brand secondary)." } satisfies Token,
|
|
6
|
+
series3: { value: "#8B5CF6", description: "DataViz series color 3." } satisfies Token,
|
|
7
|
+
series4: { value: "#F59E0B", description: "DataViz series color 4." } satisfies Token,
|
|
8
|
+
series5: { value: "#EF4444", description: "DataViz series color 5." } satisfies Token,
|
|
9
|
+
series6: { value: "#0EA5E9", description: "DataViz series color 6." } satisfies Token,
|
|
10
|
+
series7: { value: "#84CC16", description: "DataViz series color 7." } satisfies Token,
|
|
11
|
+
series8: { value: "#EC4899", description: "DataViz series color 8." } satisfies Token,
|
|
12
|
+
series9: { value: "#6366F1", description: "DataViz series color 9." } satisfies Token,
|
|
13
|
+
series10: { value: "#F97316", description: "DataViz series color 10." } satisfies Token,
|
|
14
|
+
series11: { value: "#22C55E", description: "DataViz series color 11." } satisfies Token,
|
|
15
|
+
series12: { value: "#A855F7", description: "DataViz series color 12." } satisfies Token,
|
|
16
|
+
gridline: { value: "#D1D5DB", description: "DataViz gridline color." } satisfies Token,
|
|
17
|
+
axis: { value: "#6B7280", description: "DataViz axis label color." } satisfies Token,
|
|
18
|
+
tooltipBg: { value: "#111827", description: "DataViz tooltip background color." } satisfies Token,
|
|
19
|
+
tooltipText: { value: "#F9FAFB", description: "DataViz tooltip text color." } satisfies Token
|
|
20
|
+
} as const;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const gradients = {
|
|
4
|
+
primary: {
|
|
5
|
+
value: "linear-gradient(135deg, #3A5AFE 0%, #8B5CF6 100%)",
|
|
6
|
+
description: "Primary brand gradient (used for hero/marketing accents)."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
subtleHero: {
|
|
9
|
+
value: "linear-gradient(180deg, rgba(58, 90, 254, 0.10) 0%, rgba(249, 250, 251, 0) 80%)",
|
|
10
|
+
description: "Subtle hero gradient background overlay (light).",
|
|
11
|
+
meta: { note: "Use theme override in dark/high-contrast." }
|
|
12
|
+
} satisfies Token
|
|
13
|
+
} as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { brand } from "./brand";
|
|
2
|
+
export { neutral } from "./neutral";
|
|
3
|
+
export { semantic } from "./semantic";
|
|
4
|
+
export { accent } from "./accent";
|
|
5
|
+
export { dataViz } from "./dataViz";
|
|
6
|
+
export { overlays } from "./overlays";
|
|
7
|
+
export { gradients } from "./gradients";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const neutral = {
|
|
4
|
+
gray900: {
|
|
5
|
+
value: "#111827",
|
|
6
|
+
description: "Neutral gray - 900 (near-black)."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
gray700: {
|
|
9
|
+
value: "#374151",
|
|
10
|
+
description: "Neutral gray - 700."
|
|
11
|
+
} satisfies Token,
|
|
12
|
+
gray500: {
|
|
13
|
+
value: "#6B7280",
|
|
14
|
+
description: "Neutral gray - 500."
|
|
15
|
+
} satisfies Token,
|
|
16
|
+
gray300: {
|
|
17
|
+
value: "#D1D5DB",
|
|
18
|
+
description: "Neutral gray - 300."
|
|
19
|
+
} satisfies Token,
|
|
20
|
+
gray50: {
|
|
21
|
+
value: "#F9FAFB",
|
|
22
|
+
description: "Neutral gray - 50 (near-white)."
|
|
23
|
+
} satisfies Token,
|
|
24
|
+
white: {
|
|
25
|
+
value: "#FFFFFF",
|
|
26
|
+
description: "Pure white."
|
|
27
|
+
} satisfies Token,
|
|
28
|
+
black: {
|
|
29
|
+
value: "#000000",
|
|
30
|
+
description: "Pure black."
|
|
31
|
+
} satisfies Token
|
|
32
|
+
} as const;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const overlays = {
|
|
4
|
+
scrimStrong: {
|
|
5
|
+
value: "rgba(17, 24, 39, 0.64)",
|
|
6
|
+
description: "Strong scrim for modals/overlays."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
scrim: {
|
|
9
|
+
value: "rgba(17, 24, 39, 0.48)",
|
|
10
|
+
description: "Default scrim for overlays."
|
|
11
|
+
} satisfies Token,
|
|
12
|
+
scrimSubtle: {
|
|
13
|
+
value: "rgba(17, 24, 39, 0.24)",
|
|
14
|
+
description: "Subtle scrim for light overlays."
|
|
15
|
+
} satisfies Token,
|
|
16
|
+
glassFill: {
|
|
17
|
+
value: "rgba(249, 250, 251, 0.72)",
|
|
18
|
+
description: "Glass/blur fill for frosted surfaces (light).",
|
|
19
|
+
meta: { note: "For dark theme, use theme override." }
|
|
20
|
+
} satisfies Token
|
|
21
|
+
} as const;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const semantic = {
|
|
4
|
+
success: {
|
|
5
|
+
value: "#16A34A",
|
|
6
|
+
description: "Semantic success color (base)."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
successSubtle: {
|
|
9
|
+
value: "#DCFCE7",
|
|
10
|
+
description: "Semantic success background/surface (subtle)."
|
|
11
|
+
} satisfies Token,
|
|
12
|
+
warning: {
|
|
13
|
+
value: "#F59E0B",
|
|
14
|
+
description: "Semantic warning color (base)."
|
|
15
|
+
} satisfies Token,
|
|
16
|
+
warningSubtle: {
|
|
17
|
+
value: "#FEF3C7",
|
|
18
|
+
description: "Semantic warning background/surface (subtle)."
|
|
19
|
+
} satisfies Token,
|
|
20
|
+
error: {
|
|
21
|
+
value: "#EF4444",
|
|
22
|
+
description: "Semantic error color (base)."
|
|
23
|
+
} satisfies Token,
|
|
24
|
+
errorSubtle: {
|
|
25
|
+
value: "#FEE2E2",
|
|
26
|
+
description: "Semantic error background/surface (subtle)."
|
|
27
|
+
} satisfies Token,
|
|
28
|
+
info: {
|
|
29
|
+
value: "#0EA5E9",
|
|
30
|
+
description: "Semantic info color (base)."
|
|
31
|
+
} satisfies Token,
|
|
32
|
+
infoSubtle: {
|
|
33
|
+
value: "#E0F2FE",
|
|
34
|
+
description: "Semantic info background/surface (subtle)."
|
|
35
|
+
} satisfies Token
|
|
36
|
+
} as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const blur = {
|
|
4
|
+
sm: { value: "4px", description: "Small blur." } satisfies Token,
|
|
5
|
+
md: { value: "8px", description: "Medium blur." } satisfies Token,
|
|
6
|
+
lg: { value: "16px", description: "Large blur (glass)." } satisfies Token
|
|
7
|
+
} as const;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const opacity = {
|
|
4
|
+
o0: { value: 0, description: "Opacity 0%." } satisfies Token<number>,
|
|
5
|
+
o10: { value: 0.1, description: "Opacity 10%." } satisfies Token<number>,
|
|
6
|
+
o20: { value: 0.2, description: "Opacity 20%." } satisfies Token<number>,
|
|
7
|
+
o40: { value: 0.4, description: "Opacity 40%." } satisfies Token<number>,
|
|
8
|
+
o60: { value: 0.6, description: "Opacity 60%." } satisfies Token<number>,
|
|
9
|
+
o80: { value: 0.8, description: "Opacity 80%." } satisfies Token<number>,
|
|
10
|
+
o100: { value: 1, description: "Opacity 100%." } satisfies Token<number>
|
|
11
|
+
} as const;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const shadows = {
|
|
4
|
+
sm: {
|
|
5
|
+
value: "0 1px 2px rgba(17, 24, 39, 0.06)",
|
|
6
|
+
description: "Shadow sm (subtle elevation)."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
md: {
|
|
9
|
+
value: "0 6px 20px rgba(17, 24, 39, 0.10)",
|
|
10
|
+
description: "Shadow md (card elevation)."
|
|
11
|
+
} satisfies Token,
|
|
12
|
+
lg: {
|
|
13
|
+
value: "0 16px 40px rgba(17, 24, 39, 0.14)",
|
|
14
|
+
description: "Shadow lg (overlay elevation)."
|
|
15
|
+
} satisfies Token,
|
|
16
|
+
xl: {
|
|
17
|
+
value: "0 24px 60px rgba(17, 24, 39, 0.18)",
|
|
18
|
+
description: "Shadow xl (modal elevation)."
|
|
19
|
+
} satisfies Token
|
|
20
|
+
} as const;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const textures = {
|
|
4
|
+
none: { value: "none", description: "No texture." } satisfies Token,
|
|
5
|
+
noise: {
|
|
6
|
+
value:
|
|
7
|
+
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22120%22 height=%22120%22%3E%3Cfilter id=%22n%22 x=%220%22 y=%220%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%223%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22120%22 height=%22120%22 filter=%22url(%23n)%22 opacity=%220.06%22/%3E%3C/svg%3E')",
|
|
8
|
+
description: "Subtle noise texture (data URI).",
|
|
9
|
+
meta: { note: "Use as background-image; keep opacity low." }
|
|
10
|
+
} satisfies Token
|
|
11
|
+
} as const;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const sizes = {
|
|
4
|
+
xs: { value: "12px", description: "Icon size XS." } satisfies Token,
|
|
5
|
+
sm: { value: "16px", description: "Icon size SM." } satisfies Token,
|
|
6
|
+
md: { value: "20px", description: "Icon size MD." } satisfies Token,
|
|
7
|
+
lg: { value: "24px", description: "Icon size LG." } satisfies Token,
|
|
8
|
+
xl: { value: "28px", description: "Icon size XL." } satisfies Token
|
|
9
|
+
} as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const strokeWidths = {
|
|
4
|
+
thin: { value: 1, description: "Thin icon stroke width." } satisfies Token<number>,
|
|
5
|
+
regular: { value: 1.5, description: "Regular icon stroke width." } satisfies Token<number>,
|
|
6
|
+
bold: { value: 2, description: "Bold icon stroke width." } satisfies Token<number>
|
|
7
|
+
} as const;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as color from "./color";
|
|
2
|
+
import * as typography from "./typography";
|
|
3
|
+
import * as spacing from "./spacing";
|
|
4
|
+
import * as shape from "./shape";
|
|
5
|
+
import * as effects from "./effects";
|
|
6
|
+
import * as motion from "./motion";
|
|
7
|
+
import * as zindex from "./zindex";
|
|
8
|
+
import * as iconography from "./iconography";
|
|
9
|
+
import * as ui from "./ui";
|
|
10
|
+
|
|
11
|
+
export const tokens = {
|
|
12
|
+
color,
|
|
13
|
+
typography,
|
|
14
|
+
spacing,
|
|
15
|
+
shape,
|
|
16
|
+
effects,
|
|
17
|
+
motion,
|
|
18
|
+
zindex,
|
|
19
|
+
iconography,
|
|
20
|
+
ui
|
|
21
|
+
} as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const duration = {
|
|
4
|
+
fast: { value: "120ms", description: "Fast duration for micro-interactions." } satisfies Token,
|
|
5
|
+
normal: { value: "200ms", description: "Normal duration for standard UI transitions." } satisfies Token,
|
|
6
|
+
slow: { value: "320ms", description: "Slow duration for larger transitions." } satisfies Token
|
|
7
|
+
} as const;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const easing = {
|
|
4
|
+
standard: { value: "cubic-bezier(0.2, 0, 0, 1)", description: "Standard easing." } satisfies Token,
|
|
5
|
+
emphasized: { value: "cubic-bezier(0.2, 0, 0, 1.2)", description: "Emphasized easing." } satisfies Token,
|
|
6
|
+
entrance: { value: "cubic-bezier(0, 0, 0, 1)", description: "Entrance easing." } satisfies Token,
|
|
7
|
+
exit: { value: "cubic-bezier(0.4, 0, 1, 1)", description: "Exit easing." } satisfies Token
|
|
8
|
+
} as const;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const reducedMotion = {
|
|
4
|
+
disableTransitions: {
|
|
5
|
+
value: 1,
|
|
6
|
+
description: "If true, consumers should disable non-essential transitions when prefers-reduced-motion is enabled.",
|
|
7
|
+
meta: { hint: "Use @media (prefers-reduced-motion: reduce) in CSS." }
|
|
8
|
+
} satisfies Token<number>
|
|
9
|
+
} as const;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const transitions = {
|
|
4
|
+
fade: {
|
|
5
|
+
value: "opacity var(--asm-motion-duration-normal) var(--asm-motion-easing-standard)",
|
|
6
|
+
description: "Fade transition preset."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
slide: {
|
|
9
|
+
value: "transform var(--asm-motion-duration-normal) var(--asm-motion-easing-standard)",
|
|
10
|
+
description: "Slide transition preset."
|
|
11
|
+
} satisfies Token,
|
|
12
|
+
scale: {
|
|
13
|
+
value: "transform var(--asm-motion-duration-fast) var(--asm-motion-easing-emphasized)",
|
|
14
|
+
description: "Scale transition preset."
|
|
15
|
+
} satisfies Token
|
|
16
|
+
} as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const borders = {
|
|
4
|
+
hairline: { value: "1px", description: "Hairline border width." } satisfies Token,
|
|
5
|
+
thin: { value: "2px", description: "Thin border width." } satisfies Token,
|
|
6
|
+
thick: { value: "3px", description: "Thick border width." } satisfies Token
|
|
7
|
+
} as const;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const radii = {
|
|
4
|
+
sm: { value: "6px", description: "Small radius." } satisfies Token,
|
|
5
|
+
md: { value: "10px", description: "Medium radius." } satisfies Token,
|
|
6
|
+
lg: { value: "12px", description: "Large radius (cards)." } satisfies Token,
|
|
7
|
+
xl: { value: "16px", description: "Extra-large radius." } satisfies Token,
|
|
8
|
+
full: { value: "9999px", description: "Full pill/circle radius." } satisfies Token
|
|
9
|
+
} as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const strokes = {
|
|
4
|
+
default: { value: "1px", description: "Default stroke width." } satisfies Token,
|
|
5
|
+
strong: { value: "2px", description: "Strong stroke width." } satisfies Token,
|
|
6
|
+
dash: { value: "4 2", description: "Default dash pattern (stroke-dasharray)." } satisfies Token
|
|
7
|
+
} as const;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const density = {
|
|
4
|
+
compactFactor: {
|
|
5
|
+
value: 0.9,
|
|
6
|
+
description: "Density factor applied in compact mode."
|
|
7
|
+
} satisfies Token<number>,
|
|
8
|
+
comfortableFactor: {
|
|
9
|
+
value: 1.05,
|
|
10
|
+
description: "Density factor applied in comfortable mode."
|
|
11
|
+
} satisfies Token<number>
|
|
12
|
+
} as const;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const grid = {
|
|
4
|
+
columns: {
|
|
5
|
+
value: 12,
|
|
6
|
+
description: "Default grid column count."
|
|
7
|
+
} satisfies Token<number>,
|
|
8
|
+
gutter: {
|
|
9
|
+
value: "24px",
|
|
10
|
+
description: "Default grid gutter size."
|
|
11
|
+
} satisfies Token,
|
|
12
|
+
breakpoints: {
|
|
13
|
+
xs: { value: "360px", description: "Breakpoint XS." } satisfies Token,
|
|
14
|
+
sm: { value: "640px", description: "Breakpoint SM." } satisfies Token,
|
|
15
|
+
md: { value: "768px", description: "Breakpoint MD." } satisfies Token,
|
|
16
|
+
lg: { value: "1024px", description: "Breakpoint LG." } satisfies Token,
|
|
17
|
+
xl: { value: "1280px", description: "Breakpoint XL." } satisfies Token,
|
|
18
|
+
x2l: { value: "1536px", description: "Breakpoint 2XL." } satisfies Token
|
|
19
|
+
},
|
|
20
|
+
containerWidths: {
|
|
21
|
+
xs: { value: "480px", description: "Container width XS." } satisfies Token,
|
|
22
|
+
sm: { value: "640px", description: "Container width SM." } satisfies Token,
|
|
23
|
+
md: { value: "768px", description: "Container width MD." } satisfies Token,
|
|
24
|
+
lg: { value: "1024px", description: "Container width LG." } satisfies Token,
|
|
25
|
+
xl: { value: "1280px", description: "Container width XL." } satisfies Token,
|
|
26
|
+
x2l: { value: "1360px", description: "Container width 2XL (ASafariM standard)." } satisfies Token
|
|
27
|
+
}
|
|
28
|
+
} as const;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const layout = {
|
|
4
|
+
pagePaddingX: {
|
|
5
|
+
value: "clamp(16px, 3vw, 32px)",
|
|
6
|
+
description: "Default horizontal page padding (responsive)."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
pagePaddingY: {
|
|
9
|
+
value: "clamp(16px, 3vw, 40px)",
|
|
10
|
+
description: "Default vertical page padding (responsive)."
|
|
11
|
+
} satisfies Token,
|
|
12
|
+
sectionGap: {
|
|
13
|
+
value: "clamp(24px, 4vw, 64px)",
|
|
14
|
+
description: "Vertical spacing between major sections."
|
|
15
|
+
} satisfies Token,
|
|
16
|
+
componentGap: {
|
|
17
|
+
value: "16px",
|
|
18
|
+
description: "Default spacing between components within a section."
|
|
19
|
+
} satisfies Token
|
|
20
|
+
} as const;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const rtl = {
|
|
4
|
+
logicalInsetStart: {
|
|
5
|
+
value: "inset-inline-start",
|
|
6
|
+
description: "Use logical inset start property for RTL-safe positioning."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
logicalInsetEnd: {
|
|
9
|
+
value: "inset-inline-end",
|
|
10
|
+
description: "Use logical inset end property for RTL-safe positioning."
|
|
11
|
+
} satisfies Token,
|
|
12
|
+
logicalMarginStart: {
|
|
13
|
+
value: "margin-inline-start",
|
|
14
|
+
description: "Use logical margin start for RTL-safe spacing."
|
|
15
|
+
} satisfies Token,
|
|
16
|
+
logicalMarginEnd: {
|
|
17
|
+
value: "margin-inline-end",
|
|
18
|
+
description: "Use logical margin end for RTL-safe spacing."
|
|
19
|
+
} satisfies Token
|
|
20
|
+
} as const;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const scale = {
|
|
4
|
+
s0: { value: "0px", description: "Spacing 0." } satisfies Token,
|
|
5
|
+
s1: { value: "4px", description: "Spacing 1 (4px)." } satisfies Token,
|
|
6
|
+
s2: { value: "8px", description: "Spacing 2 (8px)." } satisfies Token,
|
|
7
|
+
s3: { value: "12px", description: "Spacing 3 (12px)." } satisfies Token,
|
|
8
|
+
s4: { value: "16px", description: "Spacing 4 (16px)." } satisfies Token,
|
|
9
|
+
s5: { value: "20px", description: "Spacing 5 (20px)." } satisfies Token,
|
|
10
|
+
s6: { value: "24px", description: "Spacing 6 (24px)." } satisfies Token,
|
|
11
|
+
s8: { value: "32px", description: "Spacing 8 (32px)." } satisfies Token,
|
|
12
|
+
s10: { value: "40px", description: "Spacing 10 (40px)." } satisfies Token,
|
|
13
|
+
s12: { value: "48px", description: "Spacing 12 (48px)." } satisfies Token,
|
|
14
|
+
s16: { value: "64px", description: "Spacing 16 (64px)." } satisfies Token
|
|
15
|
+
} as const;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const families = {
|
|
4
|
+
primary: {
|
|
5
|
+
value:
|
|
6
|
+
"Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\"",
|
|
7
|
+
description: "Primary UI font family stack (Inter first)."
|
|
8
|
+
} satisfies Token,
|
|
9
|
+
mono: {
|
|
10
|
+
value:
|
|
11
|
+
"\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
|
|
12
|
+
description: "Monospace font family stack (JetBrains Mono first)."
|
|
13
|
+
} satisfies Token
|
|
14
|
+
} as const;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const headings = {
|
|
4
|
+
h1: {
|
|
5
|
+
value: "var(--asm-font-size-6xl) / var(--asm-line-height-h1) var(--asm-font-family-primary)",
|
|
6
|
+
description: "H1 shorthand (size/line-height/family).",
|
|
7
|
+
meta: { note: "Use size/weight/lineHeight tokens for precise control." }
|
|
8
|
+
} satisfies Token,
|
|
9
|
+
h2: {
|
|
10
|
+
value: "var(--asm-font-size-5xl) / var(--asm-line-height-h2) var(--asm-font-family-primary)",
|
|
11
|
+
description: "H2 shorthand (size/line-height/family)."
|
|
12
|
+
} satisfies Token,
|
|
13
|
+
h3: {
|
|
14
|
+
value: "var(--asm-font-size-4xl) / var(--asm-line-height-h3) var(--asm-font-family-primary)",
|
|
15
|
+
description: "H3 shorthand (size/line-height/family)."
|
|
16
|
+
} satisfies Token,
|
|
17
|
+
h4: {
|
|
18
|
+
value: "var(--asm-font-size-3xl) / var(--asm-line-height-h4) var(--asm-font-family-primary)",
|
|
19
|
+
description: "H4 shorthand (size/line-height/family)."
|
|
20
|
+
} satisfies Token,
|
|
21
|
+
h5: {
|
|
22
|
+
value: "var(--asm-font-size-2xl) / var(--asm-line-height-h5) var(--asm-font-family-primary)",
|
|
23
|
+
description: "H5 shorthand (size/line-height/family)."
|
|
24
|
+
} satisfies Token,
|
|
25
|
+
h6: {
|
|
26
|
+
value: "var(--asm-font-size-xl) / var(--asm-line-height-h6) var(--asm-font-family-primary)",
|
|
27
|
+
description: "H6 shorthand (size/line-height/family)."
|
|
28
|
+
} satisfies Token
|
|
29
|
+
} as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { families } from "./families";
|
|
2
|
+
export { weights } from "./weights";
|
|
3
|
+
export { sizes } from "./sizes";
|
|
4
|
+
export { lineHeights } from "./lineHeights";
|
|
5
|
+
export { letterSpacing } from "./letterSpacing";
|
|
6
|
+
export { headings } from "./headings";
|
|
7
|
+
export { responsive } from "./responsive";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const letterSpacing = {
|
|
4
|
+
tight: { value: "-0.01em", description: "Tight letter spacing." } satisfies Token,
|
|
5
|
+
normal: { value: "0em", description: "Normal letter spacing." } satisfies Token,
|
|
6
|
+
wide: { value: "0.02em", description: "Wide letter spacing." } satisfies Token
|
|
7
|
+
} as const;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const lineHeights = {
|
|
4
|
+
tight: { value: 1.1, description: "Tight line-height (headings)." } satisfies Token<number>,
|
|
5
|
+
normal: { value: 1.4, description: "Normal line-height (UI)." } satisfies Token<number>,
|
|
6
|
+
relaxed: { value: 1.6, description: "Relaxed line-height (long form)." } satisfies Token<number>,
|
|
7
|
+
h1: { value: 1.05, description: "H1 line-height." } satisfies Token<number>,
|
|
8
|
+
h2: { value: 1.1, description: "H2 line-height." } satisfies Token<number>,
|
|
9
|
+
h3: { value: 1.15, description: "H3 line-height." } satisfies Token<number>,
|
|
10
|
+
h4: { value: 1.2, description: "H4 line-height." } satisfies Token<number>,
|
|
11
|
+
h5: { value: 1.25, description: "H5 line-height." } satisfies Token<number>,
|
|
12
|
+
h6: { value: 1.25, description: "H6 line-height." } satisfies Token<number>
|
|
13
|
+
} as const;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const responsive = {
|
|
4
|
+
bodyMaxWidth: {
|
|
5
|
+
value: "68ch",
|
|
6
|
+
description: "Recommended max-width for long-form text blocks."
|
|
7
|
+
} satisfies Token,
|
|
8
|
+
scaleMobile: {
|
|
9
|
+
value: 0.95,
|
|
10
|
+
description: "Typography scale factor for mobile contexts.",
|
|
11
|
+
meta: { note: "Use with clamp() in consuming apps when needed." }
|
|
12
|
+
} satisfies Token<number>,
|
|
13
|
+
scaleTablet: {
|
|
14
|
+
value: 1,
|
|
15
|
+
description: "Typography scale factor for tablet contexts."
|
|
16
|
+
} satisfies Token<number>,
|
|
17
|
+
scaleDesktop: {
|
|
18
|
+
value: 1.05,
|
|
19
|
+
description: "Typography scale factor for desktop contexts."
|
|
20
|
+
} satisfies Token<number>
|
|
21
|
+
} as const;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const sizes = {
|
|
4
|
+
xs: { value: "0.75rem", description: "Font size xs (12px)." } satisfies Token,
|
|
5
|
+
sm: { value: "0.875rem", description: "Font size sm (14px)." } satisfies Token,
|
|
6
|
+
md: { value: "1rem", description: "Font size md (16px)." } satisfies Token,
|
|
7
|
+
lg: { value: "1.125rem", description: "Font size lg (18px)." } satisfies Token,
|
|
8
|
+
xl: { value: "1.25rem", description: "Font size xl (20px)." } satisfies Token,
|
|
9
|
+
x2l: { value: "1.5rem", description: "Font size 2xl (24px)." } satisfies Token,
|
|
10
|
+
x3l: { value: "1.875rem", description: "Font size 3xl (30px)." } satisfies Token,
|
|
11
|
+
x4l: { value: "2.25rem", description: "Font size 4xl (36px)." } satisfies Token,
|
|
12
|
+
x5l: { value: "3rem", description: "Font size 5xl (48px)." } satisfies Token,
|
|
13
|
+
x6l: { value: "3.75rem", description: "Font size 6xl (60px)." } satisfies Token
|
|
14
|
+
} as const;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Token } from "../../core/types";
|
|
2
|
+
|
|
3
|
+
export const weights = {
|
|
4
|
+
w100: { value: 100, description: "Font weight 100 (thin)." } satisfies Token<number>,
|
|
5
|
+
w200: { value: 200, description: "Font weight 200 (extra light)." } satisfies Token<number>,
|
|
6
|
+
w300: { value: 300, description: "Font weight 300 (light)." } satisfies Token<number>,
|
|
7
|
+
w400: { value: 400, description: "Font weight 400 (regular)." } satisfies Token<number>,
|
|
8
|
+
w500: { value: 500, description: "Font weight 500 (medium)." } satisfies Token<number>,
|
|
9
|
+
w600: { value: 600, description: "Font weight 600 (semibold)." } satisfies Token<number>,
|
|
10
|
+
w700: { value: 700, description: "Font weight 700 (bold)." } satisfies Token<number>,
|
|
11
|
+
w800: { value: 800, description: "Font weight 800 (extra bold)." } satisfies Token<number>,
|
|
12
|
+
w900: { value: 900, description: "Font weight 900 (black)." } satisfies Token<number>
|
|
13
|
+
} as const;
|