@mastors/core 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +940 -0
- package/api/_index.scss +5 -0
- package/dist/mastors-core.css +7419 -0
- package/dist/mastors-core.css.map +1 -0
- package/package.json +73 -0
- package/postinstall.js +41 -0
- package/scripts/generate-tokens.js +259 -0
- package/scss/abstracts/_index.scss +6 -0
- package/scss/abstracts/_maps.scss +9 -0
- package/scss/abstracts/_placeholders.scss +7 -0
- package/scss/accessibility/_focus.scss +21 -0
- package/scss/accessibility/_index.scss +7 -0
- package/scss/accessibility/_motion.scss +14 -0
- package/scss/accessibility/_print.scss +52 -0
- package/scss/accessibility/_screen-reader.scss +31 -0
- package/scss/api/_index.scss +14 -0
- package/scss/base/_box-sizing.scss +6 -0
- package/scss/base/_index.scss +7 -0
- package/scss/base/_reset.scss +59 -0
- package/scss/base/_root.scss +43 -0
- package/scss/base/_typography-base.scss +40 -0
- package/scss/config/_flags.scss +13 -0
- package/scss/config/_index.scss +12 -0
- package/scss/config/_settings.scss +18 -0
- package/scss/functions/_color.scss +66 -0
- package/scss/functions/_em.scss +28 -0
- package/scss/functions/_index.scss +15 -0
- package/scss/functions/_map-helpers.scss +29 -0
- package/scss/functions/_math.scss +40 -0
- package/scss/functions/_rem.scss +27 -0
- package/scss/functions/_string.scss +57 -0
- package/scss/functions/_vars.scss +49 -0
- package/scss/generators/_class-generator.scss +83 -0
- package/scss/generators/_custom-property-generator.scss +29 -0
- package/scss/generators/_index.scss +6 -0
- package/scss/generators/_responsive-generator.scss +28 -0
- package/scss/helpers/_clearfix.scss +9 -0
- package/scss/helpers/_index.scss +7 -0
- package/scss/helpers/_ratio.scss +22 -0
- package/scss/helpers/_truncate.scss +25 -0
- package/scss/helpers/_visually-hidden.scss +39 -0
- package/scss/index.scss +41 -0
- package/scss/mixins/_breakpoint.scss +33 -0
- package/scss/mixins/_container.scss +20 -0
- package/scss/mixins/_elevation.scss +12 -0
- package/scss/mixins/_index.scss +9 -0
- package/scss/mixins/_pseudo.scss +13 -0
- package/scss/mixins/_theme.scss +31 -0
- package/scss/mixins/_transition.scss +20 -0
- package/scss/responsive/_container-queries.scss +31 -0
- package/scss/responsive/_engine.scss +65 -0
- package/scss/responsive/_fluid-type.scss +40 -0
- package/scss/responsive/_index.scss +6 -0
- package/scss/semantic/_colors.scss +29 -0
- package/scss/semantic/_index.scss +6 -0
- package/scss/semantic/_spacing.scss +13 -0
- package/scss/semantic/_typography.scss +13 -0
- package/scss/themes/_base-theme.scss +28 -0
- package/scss/themes/_dark.scss +59 -0
- package/scss/themes/_index.scss +6 -0
- package/scss/themes/_light.scss +31 -0
- package/scss/tokens/_color.scss +100 -0
- package/scss/tokens/_index.scss +12 -0
- package/scss/tokens/_opacity.scss +28 -0
- package/scss/tokens/_radii.scss +21 -0
- package/scss/tokens/_shadows.scss +20 -0
- package/scss/tokens/_sizing.scss +47 -0
- package/scss/tokens/_spacing.scss +48 -0
- package/scss/tokens/_transitions.scss +27 -0
- package/scss/tokens/_typography.scss +63 -0
- package/scss/tokens/_z-index.scss +21 -0
- package/scss/utilities/_animation.scss +125 -0
- package/scss/utilities/_borders.scss +55 -0
- package/scss/utilities/_colors.scss +42 -0
- package/scss/utilities/_cursor.scss +28 -0
- package/scss/utilities/_display.scss +26 -0
- package/scss/utilities/_index.scss +20 -0
- package/scss/utilities/_interaction.scss +156 -0
- package/scss/utilities/_layout.scss +162 -0
- package/scss/utilities/_opacity.scss +9 -0
- package/scss/utilities/_overflow.scss +36 -0
- package/scss/utilities/_pointer-events.scss +6 -0
- package/scss/utilities/_position.scss +32 -0
- package/scss/utilities/_shadows.scss +11 -0
- package/scss/utilities/_sizing.scss +40 -0
- package/scss/utilities/_spacing.scss +42 -0
- package/scss/utilities/_transform.scss +43 -0
- package/scss/utilities/_typography.scss +163 -0
- package/scss/utilities/_z-index.scss +9 -0
- package/scss/variables/_breakpoints.scss +14 -0
- package/scss/variables/_container.scss +13 -0
- package/scss/variables/_global.scss +8 -0
- package/scss/variables/_grid.scss +7 -0
- package/scss/variables/_index.scss +7 -0
- package/scss/vendors/_index.scss +15 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// semantic/_colors.scss
|
|
2
|
+
// Semantic color aliases mapped from primitive color tokens.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
// Semantic color aliases — role-based names that map to CSS custom properties.
|
|
6
|
+
// Use these in component CSS instead of raw token references for themability.
|
|
7
|
+
|
|
8
|
+
// These are SCSS variable aliases pointing to the custom properties
|
|
9
|
+
// emitted by themes/_base-theme.scss, _light.scss, _dark.scss.
|
|
10
|
+
// Downstream packages can @use this file to access semantic names.
|
|
11
|
+
|
|
12
|
+
$color-bg: var(--mastors-bg) !default;
|
|
13
|
+
$color-bg-subtle: var(--mastors-bg-subtle) !default;
|
|
14
|
+
$color-surface: var(--mastors-surface) !default;
|
|
15
|
+
$color-surface-raised: var(--mastors-surface-raised) !default;
|
|
16
|
+
$color-surface-overlay: var(--mastors-surface-overlay) !default;
|
|
17
|
+
|
|
18
|
+
$color-text: var(--mastors-text) !default;
|
|
19
|
+
$color-text-muted: var(--mastors-text-muted) !default;
|
|
20
|
+
$color-text-subtle: var(--mastors-text-subtle) !default;
|
|
21
|
+
$color-text-inverse: var(--mastors-text-inverse) !default;
|
|
22
|
+
|
|
23
|
+
$color-border: var(--mastors-border) !default;
|
|
24
|
+
$color-border-strong: var(--mastors-border-strong) !default;
|
|
25
|
+
|
|
26
|
+
$color-accent: var(--mastors-accent) !default;
|
|
27
|
+
$color-accent-hover: var(--mastors-accent-hover) !default;
|
|
28
|
+
$color-accent-subtle: var(--mastors-accent-subtle) !default;
|
|
29
|
+
$color-accent-text: var(--mastors-accent-text) !default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// semantic/_spacing.scss
|
|
2
|
+
// Semantic spacing aliases (layout-level naming).
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "../tokens/spacing" as sp;
|
|
6
|
+
|
|
7
|
+
// Semantic spacing aliases — layout-level naming on top of raw scale tokens.
|
|
8
|
+
|
|
9
|
+
$space-inline: sp.spacing(1) !default; // 0.25rem — tight inline gap
|
|
10
|
+
$space-element: sp.spacing(2) !default; // 0.5rem — within a component
|
|
11
|
+
$space-component: sp.spacing(4) !default; // 1rem — between component parts
|
|
12
|
+
$space-section: sp.spacing(16) !default; // 4rem — between page sections
|
|
13
|
+
$space-page: sp.spacing(24) !default; // 6rem — page-level breathing room
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// semantic/_typography.scss
|
|
2
|
+
// Semantic typography aliases (role-based naming).
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "../tokens/typography" as ty;
|
|
6
|
+
|
|
7
|
+
// Semantic typography role aliases.
|
|
8
|
+
|
|
9
|
+
$font-display: ty.font-family("sans") !default; // Hero headings
|
|
10
|
+
$font-heading: ty.font-family("sans") !default; // h1–h6
|
|
11
|
+
$font-body: ty.font-family("sans") !default; // p, li, td
|
|
12
|
+
$font-mono: ty.font-family("mono") !default; // code, pre, kbd
|
|
13
|
+
$font-ui: ty.font-family("sans") !default; // labels, buttons, nav
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// themes/_base-theme.scss
|
|
2
|
+
// Shared theme structure — reference doc only, not emitted.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
// The light and dark themes (_light.scss, _dark.scss) are the actual emitters.
|
|
6
|
+
// This file documents the full semantic custom property contract
|
|
7
|
+
// that all themes must implement, without producing any CSS output.
|
|
8
|
+
// Semantic custom properties contract:
|
|
9
|
+
// Surfaces
|
|
10
|
+
// --mastors-bg ← page background
|
|
11
|
+
// --mastors-bg-subtle ← subdued page background
|
|
12
|
+
// --mastors-surface ← card / panel surface
|
|
13
|
+
// --mastors-surface-raised ← elevated surface (dropdowns, tooltips)
|
|
14
|
+
// --mastors-surface-overlay ← modal/overlay surface
|
|
15
|
+
// Text
|
|
16
|
+
// --mastors-text ← primary text
|
|
17
|
+
// --mastors-text-muted ← secondary / supporting text
|
|
18
|
+
// --mastors-text-subtle ← tertiary / placeholder text
|
|
19
|
+
// --mastors-text-inverse ← text on dark/accent surfaces
|
|
20
|
+
// Borders
|
|
21
|
+
// --mastors-border ← default border
|
|
22
|
+
// --mastors-border-strong ← emphasis border
|
|
23
|
+
// Brand / Accent
|
|
24
|
+
// --mastors-accent ← primary brand color
|
|
25
|
+
// --mastors-accent-hover ← accent hover state
|
|
26
|
+
// --mastors-accent-subtle ← light accent tint
|
|
27
|
+
// --mastors-accent-text ← text on accent backgrounds
|
|
28
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// themes/_dark.scss
|
|
2
|
+
// Dark theme CSS custom property overrides.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "../tokens/color" as ct;
|
|
6
|
+
|
|
7
|
+
// Dark theme — inverts surface/text/border semantics.
|
|
8
|
+
// Strategy is controlled by $dark-mode-strategy (default: "class").
|
|
9
|
+
// "class" → activated by .dark / [data-theme="dark"] on <html>
|
|
10
|
+
// "media" → activated by prefers-color-scheme: dark
|
|
11
|
+
|
|
12
|
+
$dark-mode-strategy: "class" !default;
|
|
13
|
+
|
|
14
|
+
@if $dark-mode-strategy == "class" {
|
|
15
|
+
[data-theme="dark"],
|
|
16
|
+
.dark {
|
|
17
|
+
--mastors-bg: #{ct.color("neutral", 950)};
|
|
18
|
+
--mastors-bg-subtle: #{ct.color("neutral", 900)};
|
|
19
|
+
--mastors-surface: #{ct.color("neutral", 900)};
|
|
20
|
+
--mastors-surface-raised: #{ct.color("neutral", 800)};
|
|
21
|
+
--mastors-surface-overlay: #{ct.color("neutral", 700)};
|
|
22
|
+
|
|
23
|
+
--mastors-text: #{ct.color("neutral", 50)};
|
|
24
|
+
--mastors-text-muted: #{ct.color("neutral", 400)};
|
|
25
|
+
--mastors-text-subtle: #{ct.color("neutral", 500)};
|
|
26
|
+
--mastors-text-inverse: #{ct.color("neutral", 900)};
|
|
27
|
+
|
|
28
|
+
--mastors-border: #{ct.color("neutral", 700)};
|
|
29
|
+
--mastors-border-strong: #{ct.color("neutral", 500)};
|
|
30
|
+
|
|
31
|
+
--mastors-accent: #{ct.color("primary", 400)};
|
|
32
|
+
--mastors-accent-hover: #{ct.color("primary", 300)};
|
|
33
|
+
--mastors-accent-subtle: #{ct.color("primary", 950)};
|
|
34
|
+
--mastors-accent-text: #{ct.color("neutral", 950)};
|
|
35
|
+
}
|
|
36
|
+
} @else {
|
|
37
|
+
@media (prefers-color-scheme: dark) {
|
|
38
|
+
:root {
|
|
39
|
+
--mastors-bg: #{ct.color("neutral", 950)};
|
|
40
|
+
--mastors-bg-subtle: #{ct.color("neutral", 900)};
|
|
41
|
+
--mastors-surface: #{ct.color("neutral", 900)};
|
|
42
|
+
--mastors-surface-raised: #{ct.color("neutral", 800)};
|
|
43
|
+
--mastors-surface-overlay: #{ct.color("neutral", 700)};
|
|
44
|
+
|
|
45
|
+
--mastors-text: #{ct.color("neutral", 50)};
|
|
46
|
+
--mastors-text-muted: #{ct.color("neutral", 400)};
|
|
47
|
+
--mastors-text-subtle: #{ct.color("neutral", 500)};
|
|
48
|
+
--mastors-text-inverse: #{ct.color("neutral", 900)};
|
|
49
|
+
|
|
50
|
+
--mastors-border: #{ct.color("neutral", 700)};
|
|
51
|
+
--mastors-border-strong: #{ct.color("neutral", 500)};
|
|
52
|
+
|
|
53
|
+
--mastors-accent: #{ct.color("primary", 400)};
|
|
54
|
+
--mastors-accent-hover: #{ct.color("primary", 300)};
|
|
55
|
+
--mastors-accent-subtle: #{ct.color("primary", 950)};
|
|
56
|
+
--mastors-accent-text: #{ct.color("neutral", 950)};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// themes/_light.scss
|
|
2
|
+
// Light theme CSS custom property overrides.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "../tokens/color" as ct;
|
|
6
|
+
|
|
7
|
+
// Light theme — explicit override (identical to base, but declared
|
|
8
|
+
// so a .light class or data-theme can be toggled back from dark).
|
|
9
|
+
|
|
10
|
+
:root,
|
|
11
|
+
[data-theme="light"],
|
|
12
|
+
.light {
|
|
13
|
+
--mastors-bg: #{ct.color("white")};
|
|
14
|
+
--mastors-bg-subtle: #{ct.color("neutral", 50)};
|
|
15
|
+
--mastors-surface: #{ct.color("white")};
|
|
16
|
+
--mastors-surface-raised: #{ct.color("neutral", 50)};
|
|
17
|
+
--mastors-surface-overlay: #{ct.color("neutral", 100)};
|
|
18
|
+
|
|
19
|
+
--mastors-text: #{ct.color("neutral", 900)};
|
|
20
|
+
--mastors-text-muted: #{ct.color("neutral", 500)};
|
|
21
|
+
--mastors-text-subtle: #{ct.color("neutral", 400)};
|
|
22
|
+
--mastors-text-inverse: #{ct.color("white")};
|
|
23
|
+
|
|
24
|
+
--mastors-border: #{ct.color("neutral", 200)};
|
|
25
|
+
--mastors-border-strong: #{ct.color("neutral", 400)};
|
|
26
|
+
|
|
27
|
+
--mastors-accent: #{ct.color("primary", 600)};
|
|
28
|
+
--mastors-accent-hover: #{ct.color("primary", 700)};
|
|
29
|
+
--mastors-accent-subtle: #{ct.color("primary", 50)};
|
|
30
|
+
--mastors-accent-text: #{ct.color("white")};
|
|
31
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// tokens/_color.scss
|
|
2
|
+
// Design token map: color palette (primitives).
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "sass:map";
|
|
6
|
+
|
|
7
|
+
$color-tokens: (
|
|
8
|
+
"primary": (
|
|
9
|
+
"50": #eff6ff,
|
|
10
|
+
"100": #dbeafe,
|
|
11
|
+
"200": #bfdbfe,
|
|
12
|
+
"300": #93c5fd,
|
|
13
|
+
"400": #60a5fa,
|
|
14
|
+
"500": #3b82f6,
|
|
15
|
+
"600": #2563eb,
|
|
16
|
+
"700": #1d4ed8,
|
|
17
|
+
"800": #1e40af,
|
|
18
|
+
"900": #1e3a8a,
|
|
19
|
+
"950": #172554,
|
|
20
|
+
),
|
|
21
|
+
"neutral": (
|
|
22
|
+
"50": #f9fafb,
|
|
23
|
+
"100": #f3f4f6,
|
|
24
|
+
"200": #e5e7eb,
|
|
25
|
+
"300": #d1d5db,
|
|
26
|
+
"400": #9ca3af,
|
|
27
|
+
"500": #6b7280,
|
|
28
|
+
"600": #4b5563,
|
|
29
|
+
"700": #374151,
|
|
30
|
+
"800": #1f2937,
|
|
31
|
+
"900": #111827,
|
|
32
|
+
"950": #030712,
|
|
33
|
+
),
|
|
34
|
+
"success": (
|
|
35
|
+
"50": #f0fdf4,
|
|
36
|
+
"100": #dcfce7,
|
|
37
|
+
"200": #bbf7d0,
|
|
38
|
+
"300": #86efac,
|
|
39
|
+
"400": #4ade80,
|
|
40
|
+
"500": #22c55e,
|
|
41
|
+
"600": #16a34a,
|
|
42
|
+
"700": #15803d,
|
|
43
|
+
"800": #166534,
|
|
44
|
+
"900": #14532d,
|
|
45
|
+
"950": #052e16,
|
|
46
|
+
),
|
|
47
|
+
"warning": (
|
|
48
|
+
"50": #fffbeb,
|
|
49
|
+
"100": #fef3c7,
|
|
50
|
+
"200": #fde68a,
|
|
51
|
+
"300": #fcd34d,
|
|
52
|
+
"400": #fbbf24,
|
|
53
|
+
"500": #f59e0b,
|
|
54
|
+
"600": #d97706,
|
|
55
|
+
"700": #b45309,
|
|
56
|
+
"800": #92400e,
|
|
57
|
+
"900": #78350f,
|
|
58
|
+
"950": #451a03,
|
|
59
|
+
),
|
|
60
|
+
"error": (
|
|
61
|
+
"50": #fef2f2,
|
|
62
|
+
"100": #fee2e2,
|
|
63
|
+
"200": #fecaca,
|
|
64
|
+
"300": #fca5a5,
|
|
65
|
+
"400": #f87171,
|
|
66
|
+
"500": #ef4444,
|
|
67
|
+
"600": #dc2626,
|
|
68
|
+
"700": #b91c1c,
|
|
69
|
+
"800": #991b1b,
|
|
70
|
+
"900": #7f1d1d,
|
|
71
|
+
"950": #450a0a,
|
|
72
|
+
),
|
|
73
|
+
"info": (
|
|
74
|
+
"50": #ecfeff,
|
|
75
|
+
"100": #cffafe,
|
|
76
|
+
"200": #a5f3fc,
|
|
77
|
+
"300": #67e8f9,
|
|
78
|
+
"400": #22d3ee,
|
|
79
|
+
"500": #06b6d4,
|
|
80
|
+
"600": #0891b2,
|
|
81
|
+
"700": #0e7490,
|
|
82
|
+
"800": #155e75,
|
|
83
|
+
"900": #164e63,
|
|
84
|
+
"950": #083344,
|
|
85
|
+
),
|
|
86
|
+
"white": #fff,
|
|
87
|
+
"black": #000,
|
|
88
|
+
"transparent": transparent,
|
|
89
|
+
) !default;
|
|
90
|
+
|
|
91
|
+
// Accessor: color("primary", 600)
|
|
92
|
+
@function color($palette, $shade: null) {
|
|
93
|
+
$p: map.get($color-tokens, $palette);
|
|
94
|
+
|
|
95
|
+
@if $shade {
|
|
96
|
+
@return map.get($p, "#{$shade}");
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@return $p;
|
|
100
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// tokens/_index.scss
|
|
2
|
+
// ─────────────────────────────────────────────────────────────
|
|
3
|
+
|
|
4
|
+
@forward "color";
|
|
5
|
+
@forward "spacing";
|
|
6
|
+
@forward "typography";
|
|
7
|
+
@forward "shadows";
|
|
8
|
+
@forward "radii";
|
|
9
|
+
@forward "transitions";
|
|
10
|
+
@forward "z-index";
|
|
11
|
+
@forward "opacity";
|
|
12
|
+
@forward "sizing";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// tokens/_opacity.scss
|
|
2
|
+
// Design token map: opacity scale.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "sass:map";
|
|
6
|
+
|
|
7
|
+
$opacity-tokens: (
|
|
8
|
+
"0": 0,
|
|
9
|
+
"5": 0.05,
|
|
10
|
+
"10": 0.1,
|
|
11
|
+
"15": 0.15,
|
|
12
|
+
"20": 0.2,
|
|
13
|
+
"25": 0.25,
|
|
14
|
+
"30": 0.3,
|
|
15
|
+
"40": 0.4,
|
|
16
|
+
"50": 0.5,
|
|
17
|
+
"60": 0.6,
|
|
18
|
+
"70": 0.7,
|
|
19
|
+
"75": 0.75,
|
|
20
|
+
"80": 0.8,
|
|
21
|
+
"90": 0.9,
|
|
22
|
+
"95": 0.95,
|
|
23
|
+
"100": 1,
|
|
24
|
+
) !default;
|
|
25
|
+
|
|
26
|
+
@function opacity($key) {
|
|
27
|
+
@return map.get($opacity-tokens, "#{$key}");
|
|
28
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// tokens/_radii.scss
|
|
2
|
+
// Design token map: border-radius scale.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "sass:map";
|
|
6
|
+
|
|
7
|
+
$radius-tokens: (
|
|
8
|
+
"none": 0px,
|
|
9
|
+
"sm": 0.125rem,
|
|
10
|
+
"base": 0.25rem,
|
|
11
|
+
"md": 0.375rem,
|
|
12
|
+
"lg": 0.5rem,
|
|
13
|
+
"xl": 0.75rem,
|
|
14
|
+
"2xl": 1rem,
|
|
15
|
+
"3xl": 1.5rem,
|
|
16
|
+
"full": 9999px,
|
|
17
|
+
) !default;
|
|
18
|
+
|
|
19
|
+
@function radius($key) {
|
|
20
|
+
@return map.get($radius-tokens, $key);
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// tokens/_shadows.scss
|
|
2
|
+
// Design token map: box-shadow elevation scale.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "sass:map";
|
|
6
|
+
|
|
7
|
+
$shadow-tokens: (
|
|
8
|
+
"xs": (0 1px 2px 0 rgb(0 0 0 / 5%)),
|
|
9
|
+
"sm": (0 1px 3px 0 rgb(0 0 0 / 10%), 0 1px 2px -1px rgb(0 0 0 / 10%)),
|
|
10
|
+
"md": (0 4px 6px -1px rgb(0 0 0 / 10%), 0 2px 4px -2px rgb(0 0 0 / 10%)),
|
|
11
|
+
"lg": (0 10px 15px -3px rgb(0 0 0 / 10%), 0 4px 6px -4px rgb(0 0 0 / 10%)),
|
|
12
|
+
"xl": (0 20px 25px -5px rgb(0 0 0 / 10%), 0 8px 10px -6px rgb(0 0 0 / 10%)),
|
|
13
|
+
"2xl": (0 25px 50px -12px rgb(0 0 0 / 25%)),
|
|
14
|
+
"inner": (inset 0 2px 4px 0 rgb(0 0 0 / 5%)),
|
|
15
|
+
"none": none,
|
|
16
|
+
) !default;
|
|
17
|
+
|
|
18
|
+
@function shadow($key) {
|
|
19
|
+
@return map.get($shadow-tokens, $key);
|
|
20
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// tokens/_sizing.scss
|
|
2
|
+
// Design token map: width / height / size scale.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "sass:map";
|
|
6
|
+
|
|
7
|
+
$sizing-tokens: (
|
|
8
|
+
"0": 0,
|
|
9
|
+
"px": 1px,
|
|
10
|
+
"1": 0.25rem,
|
|
11
|
+
"2": 0.5rem,
|
|
12
|
+
"4": 1rem,
|
|
13
|
+
"8": 2rem,
|
|
14
|
+
"12": 3rem,
|
|
15
|
+
"16": 4rem,
|
|
16
|
+
"20": 5rem,
|
|
17
|
+
"24": 6rem,
|
|
18
|
+
"32": 8rem,
|
|
19
|
+
"40": 10rem,
|
|
20
|
+
"48": 12rem,
|
|
21
|
+
"56": 14rem,
|
|
22
|
+
"64": 16rem,
|
|
23
|
+
"72": 18rem,
|
|
24
|
+
"80": 20rem,
|
|
25
|
+
"96": 24rem,
|
|
26
|
+
"1\\/2": 50%,
|
|
27
|
+
"1\\/3": 33.3333%,
|
|
28
|
+
"2\\/3": 66.6667%,
|
|
29
|
+
"1\\/4": 25%,
|
|
30
|
+
"3\\/4": 75%,
|
|
31
|
+
"1\\/5": 20%,
|
|
32
|
+
"2\\/5": 40%,
|
|
33
|
+
"3\\/5": 60%,
|
|
34
|
+
"4\\/5": 80%,
|
|
35
|
+
"auto": auto,
|
|
36
|
+
"full": 100%,
|
|
37
|
+
"screen": 100vw,
|
|
38
|
+
"svw": 100svw,
|
|
39
|
+
"dvw": 100dvw,
|
|
40
|
+
"min": min-content,
|
|
41
|
+
"max": max-content,
|
|
42
|
+
"fit": fit-content,
|
|
43
|
+
) !default;
|
|
44
|
+
|
|
45
|
+
@function sizing($key) {
|
|
46
|
+
@return map.get($sizing-tokens, "#{$key}");
|
|
47
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// tokens/_spacing.scss
|
|
2
|
+
// Design token map: spacing scale.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "sass:map";
|
|
6
|
+
|
|
7
|
+
$spacing-tokens: (
|
|
8
|
+
"0": 0px,
|
|
9
|
+
"px": 1px,
|
|
10
|
+
"0\\.5": 0.125rem,
|
|
11
|
+
"1": 0.25rem,
|
|
12
|
+
"1\\.5": 0.375rem,
|
|
13
|
+
"2": 0.5rem,
|
|
14
|
+
"2\\.5": 0.625rem,
|
|
15
|
+
"3": 0.75rem,
|
|
16
|
+
"3\\.5": 0.875rem,
|
|
17
|
+
"4": 1rem,
|
|
18
|
+
"5": 1.25rem,
|
|
19
|
+
"6": 1.5rem,
|
|
20
|
+
"7": 1.75rem,
|
|
21
|
+
"8": 2rem,
|
|
22
|
+
"9": 2.25rem,
|
|
23
|
+
"10": 2.5rem,
|
|
24
|
+
"11": 2.75rem,
|
|
25
|
+
"12": 3rem,
|
|
26
|
+
"14": 3.5rem,
|
|
27
|
+
"16": 4rem,
|
|
28
|
+
"20": 5rem,
|
|
29
|
+
"24": 6rem,
|
|
30
|
+
"28": 7rem,
|
|
31
|
+
"32": 8rem,
|
|
32
|
+
"36": 9rem,
|
|
33
|
+
"40": 10rem,
|
|
34
|
+
"44": 11rem,
|
|
35
|
+
"48": 12rem,
|
|
36
|
+
"52": 13rem,
|
|
37
|
+
"56": 14rem,
|
|
38
|
+
"60": 15rem,
|
|
39
|
+
"64": 16rem,
|
|
40
|
+
"72": 18rem,
|
|
41
|
+
"80": 20rem,
|
|
42
|
+
"96": 24rem,
|
|
43
|
+
) !default;
|
|
44
|
+
|
|
45
|
+
// Accessor: spacing(4) → 1rem
|
|
46
|
+
@function spacing($key) {
|
|
47
|
+
@return map.get($spacing-tokens, "#{$key}");
|
|
48
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// tokens/_transitions.scss
|
|
2
|
+
// Design token map: duration and easing curves.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "sass:map";
|
|
6
|
+
|
|
7
|
+
$duration-tokens: (
|
|
8
|
+
"75": 75ms,
|
|
9
|
+
"100": 100ms,
|
|
10
|
+
"150": 150ms,
|
|
11
|
+
"200": 200ms,
|
|
12
|
+
"300": 300ms,
|
|
13
|
+
"500": 500ms,
|
|
14
|
+
"700": 700ms,
|
|
15
|
+
"1000": 1000ms,
|
|
16
|
+
) !default;
|
|
17
|
+
|
|
18
|
+
$easing-tokens: (
|
|
19
|
+
"linear": linear,
|
|
20
|
+
"in": cubic-bezier(0.4, 0, 1, 1),
|
|
21
|
+
"out": cubic-bezier(0, 0, 0.2, 1),
|
|
22
|
+
"in-out": cubic-bezier(0.4, 0, 0.2, 1),
|
|
23
|
+
"bounce": cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
24
|
+
) !default;
|
|
25
|
+
|
|
26
|
+
@function duration($key) { @return map.get($duration-tokens, "#{$key}"); }
|
|
27
|
+
@function easing($key) { @return map.get($easing-tokens, $key); }
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// tokens/_typography.scss
|
|
2
|
+
// Design token map: type scale, font families, weights, tracking.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "sass:map";
|
|
6
|
+
|
|
7
|
+
$font-size-tokens: (
|
|
8
|
+
"xs": 0.75rem,
|
|
9
|
+
"sm": 0.875rem,
|
|
10
|
+
"base": 1rem,
|
|
11
|
+
"lg": 1.125rem,
|
|
12
|
+
"xl": 1.25rem,
|
|
13
|
+
"2xl": 1.5rem,
|
|
14
|
+
"3xl": 1.875rem,
|
|
15
|
+
"4xl": 2.25rem,
|
|
16
|
+
"5xl": 3rem,
|
|
17
|
+
"6xl": 3.75rem,
|
|
18
|
+
"7xl": 4.5rem,
|
|
19
|
+
"8xl": 6rem,
|
|
20
|
+
"9xl": 8rem,
|
|
21
|
+
) !default;
|
|
22
|
+
|
|
23
|
+
$font-family-tokens: (
|
|
24
|
+
"sans": (system-ui, -apple-system, "BlinkMacSystemFont", "Segoe UI", "Roboto", sans-serif),
|
|
25
|
+
"serif": ("Georgia", "Cambria", "Times New Roman", "Times", serif),
|
|
26
|
+
"mono": (ui-monospace, "SFMono-Regular", "Menlo", "Monaco", "Consolas", monospace),
|
|
27
|
+
) !default;
|
|
28
|
+
|
|
29
|
+
$font-weight-tokens: (
|
|
30
|
+
"thin": 100,
|
|
31
|
+
"extralight": 200,
|
|
32
|
+
"light": 300,
|
|
33
|
+
"normal": 400,
|
|
34
|
+
"medium": 500,
|
|
35
|
+
"semibold": 600,
|
|
36
|
+
"bold": 700,
|
|
37
|
+
"extrabold": 800,
|
|
38
|
+
"black": 900,
|
|
39
|
+
) !default;
|
|
40
|
+
|
|
41
|
+
$line-height-tokens: (
|
|
42
|
+
"none": 1,
|
|
43
|
+
"tight": 1.25,
|
|
44
|
+
"snug": 1.375,
|
|
45
|
+
"normal": 1.5,
|
|
46
|
+
"relaxed": 1.625,
|
|
47
|
+
"loose": 2,
|
|
48
|
+
) !default;
|
|
49
|
+
|
|
50
|
+
$letter-spacing-tokens: (
|
|
51
|
+
"tighter": -0.05em,
|
|
52
|
+
"tight": -0.025em,
|
|
53
|
+
"normal": 0,
|
|
54
|
+
"wide": 0.025em,
|
|
55
|
+
"wider": 0.05em,
|
|
56
|
+
"widest": 0.1em,
|
|
57
|
+
) !default;
|
|
58
|
+
|
|
59
|
+
@function font-size($key) { @return map.get($font-size-tokens, $key); }
|
|
60
|
+
@function font-family($key) { @return map.get($font-family-tokens, $key); }
|
|
61
|
+
@function font-weight($key) { @return map.get($font-weight-tokens, $key); }
|
|
62
|
+
@function line-height($key) { @return map.get($line-height-tokens, $key); }
|
|
63
|
+
@function letter-spacing($key) { @return map.get($letter-spacing-tokens, $key); }
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// tokens/_z-index.scss
|
|
2
|
+
// Design token map: z-index stacking layers.
|
|
3
|
+
// ─────────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
@use "sass:map";
|
|
6
|
+
|
|
7
|
+
$z-index-tokens: (
|
|
8
|
+
"base": 0,
|
|
9
|
+
"raised": 10,
|
|
10
|
+
"dropdown": 100,
|
|
11
|
+
"sticky": 200,
|
|
12
|
+
"overlay": 300,
|
|
13
|
+
"modal": 400,
|
|
14
|
+
"toast": 500,
|
|
15
|
+
"tooltip": 600,
|
|
16
|
+
"max": 9999,
|
|
17
|
+
) !default;
|
|
18
|
+
|
|
19
|
+
@function z($key) {
|
|
20
|
+
@return map.get($z-index-tokens, $key);
|
|
21
|
+
}
|