chordia-ui 0.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.
@@ -0,0 +1,145 @@
1
+ /* ═══════════════════════════════════════════════════════
2
+ FONT FACES — Chordia Design System
3
+ ═══════════════════════════════════════════════════════ */
4
+
5
+ /* ── Averta (Narrow PE) ── */
6
+ /* System typeface: UI, body text, labels */
7
+
8
+ @font-face {
9
+ font-family: 'Averta';
10
+ src: url('../fonts/averta/averta-narrow-pe-regular.woff2') format('woff2');
11
+ font-weight: 400;
12
+ font-style: normal;
13
+ font-display: swap;
14
+ }
15
+
16
+ @font-face {
17
+ font-family: 'Averta';
18
+ src: url('../fonts/averta/averta-narrow-pe-italic.woff2') format('woff2');
19
+ font-weight: 400;
20
+ font-style: italic;
21
+ font-display: swap;
22
+ }
23
+
24
+ @font-face {
25
+ font-family: 'Averta';
26
+ src: url('../fonts/averta/averta-narrow-pe-medium.woff2') format('woff2');
27
+ font-weight: 500;
28
+ font-style: normal;
29
+ font-display: swap;
30
+ }
31
+
32
+ @font-face {
33
+ font-family: 'Averta';
34
+ src: url('../fonts/averta/averta-narrow-pe-medium-italic.woff2') format('woff2');
35
+ font-weight: 500;
36
+ font-style: italic;
37
+ font-display: swap;
38
+ }
39
+
40
+ @font-face {
41
+ font-family: 'Averta';
42
+ src: url('../fonts/averta/averta-narrow-pe-semibold.woff2') format('woff2');
43
+ font-weight: 600;
44
+ font-style: normal;
45
+ font-display: swap;
46
+ }
47
+
48
+ @font-face {
49
+ font-family: 'Averta';
50
+ src: url('../fonts/averta/averta-narrow-pe-semibold-italic.woff2') format('woff2');
51
+ font-weight: 600;
52
+ font-style: italic;
53
+ font-display: swap;
54
+ }
55
+
56
+ @font-face {
57
+ font-family: 'Averta';
58
+ src: url('../fonts/averta/averta-narrow-pe-bold.woff2') format('woff2');
59
+ font-weight: 700;
60
+ font-style: normal;
61
+ font-display: swap;
62
+ }
63
+
64
+ @font-face {
65
+ font-family: 'Averta';
66
+ src: url('../fonts/averta/averta-narrow-pe-bold-italic.woff2') format('woff2');
67
+ font-weight: 700;
68
+ font-style: italic;
69
+ font-display: swap;
70
+ }
71
+
72
+ @font-face {
73
+ font-family: 'Averta';
74
+ src: url('../fonts/averta/averta-narrow-pe-extrabold.woff2') format('woff2');
75
+ font-weight: 800;
76
+ font-style: normal;
77
+ font-display: swap;
78
+ }
79
+
80
+ @font-face {
81
+ font-family: 'Averta';
82
+ src: url('../fonts/averta/averta-narrow-pe-light.woff2') format('woff2');
83
+ font-weight: 300;
84
+ font-style: normal;
85
+ font-display: swap;
86
+ }
87
+
88
+ /* ── Tomato Grotesk ── */
89
+ /* Display typeface: headlines, hero text */
90
+
91
+ @font-face {
92
+ font-family: 'Tomato Grotesk';
93
+ src: url('../fonts/tomato-grotesk/Tomato Grotesk Light.woff2') format('woff2');
94
+ font-weight: 300;
95
+ font-style: normal;
96
+ font-display: swap;
97
+ }
98
+
99
+ @font-face {
100
+ font-family: 'Tomato Grotesk';
101
+ src: url('../fonts/tomato-grotesk/Tomato Grotesk Light Slanted.woff2') format('woff2');
102
+ font-weight: 300;
103
+ font-style: italic;
104
+ font-display: swap;
105
+ }
106
+
107
+ @font-face {
108
+ font-family: 'Tomato Grotesk';
109
+ src: url('../fonts/tomato-grotesk/Tomato Grotesk Regular.woff2') format('woff2');
110
+ font-weight: 400;
111
+ font-style: normal;
112
+ font-display: swap;
113
+ }
114
+
115
+ @font-face {
116
+ font-family: 'Tomato Grotesk';
117
+ src: url('../fonts/tomato-grotesk/Tomato Grotesk Regular Slanted.woff2') format('woff2');
118
+ font-weight: 400;
119
+ font-style: italic;
120
+ font-display: swap;
121
+ }
122
+
123
+ @font-face {
124
+ font-family: 'Tomato Grotesk';
125
+ src: url('../fonts/tomato-grotesk/Tomato Grotesk Bold.woff2') format('woff2');
126
+ font-weight: 700;
127
+ font-style: normal;
128
+ font-display: swap;
129
+ }
130
+
131
+ @font-face {
132
+ font-family: 'Tomato Grotesk';
133
+ src: url('../fonts/tomato-grotesk/Tomato Grotesk Bold Slanted.woff2') format('woff2');
134
+ font-weight: 700;
135
+ font-style: italic;
136
+ font-display: swap;
137
+ }
138
+
139
+ @font-face {
140
+ font-family: 'Tomato Grotesk';
141
+ src: url('../fonts/tomato-grotesk/Tomato Grotesk Black.woff2') format('woff2');
142
+ font-weight: 900;
143
+ font-style: normal;
144
+ font-display: swap;
145
+ }
@@ -0,0 +1,4 @@
1
+ @import './fonts.css';
2
+ @import './colors.css';
3
+ @import './typography.css';
4
+ @import './spacing.css';
@@ -0,0 +1,54 @@
1
+ /* Chordia Design System - Spacing, Radius & Shadow Tokens */
2
+ :root {
3
+ /* ============================================
4
+ SPACING SCALE
5
+ ============================================ */
6
+ --spacing-1: 0.25rem;
7
+ --spacing-2: 0.5rem;
8
+ --spacing-3: 0.75rem;
9
+ --spacing-4: 1rem;
10
+ --spacing-5: 1.25rem;
11
+ --spacing-6: 1.5rem;
12
+ --spacing-8: 2rem;
13
+ --spacing-10: 2.5rem;
14
+ --spacing-12: 3rem;
15
+
16
+ /* ============================================
17
+ BORDER RADIUS
18
+ ============================================ */
19
+ --radius-sm: 0.375rem;
20
+ --radius: 0.5rem;
21
+ --radius-md: 0.75rem;
22
+ --radius-lg: 0.875rem;
23
+ --radius-xl: 1rem;
24
+ --radius-2xl: 1.125rem;
25
+ --radius-full: 9999px;
26
+
27
+ /* ============================================
28
+ SHADOWS
29
+ ============================================ */
30
+ --shadow-sm: 0 2px 4px rgba(30, 33, 37, 0.06);
31
+ --shadow: 0 6px 12px rgba(30, 33, 37, 0.08);
32
+ --shadow-md: 0 6px 12px rgba(30, 33, 37, 0.08);
33
+ --shadow-lg: 0 10px 18px rgba(30, 33, 37, 0.10);
34
+
35
+ /* ============================================
36
+ TRANSITIONS
37
+ ============================================ */
38
+ --transition-fast: 0.15s ease-out;
39
+ --transition: 0.2s ease-out;
40
+ --transition-slow: 0.3s ease-out;
41
+ --transition-expand: 0.25s cubic-bezier(0.4, 0, 0.2, 1);
42
+ }
43
+
44
+ /* ============================================
45
+ RESPONSIVE CONSIDERATIONS
46
+ ============================================ */
47
+ @media (max-width: 768px) {
48
+ :root {
49
+ --spacing-6: 1.25rem;
50
+ --spacing-8: 1.5rem;
51
+ --text-2xl: 1rem;
52
+ --text-3xl: 1.125rem;
53
+ }
54
+ }
@@ -0,0 +1,38 @@
1
+ /* Chordia Design System - Typography Tokens */
2
+ :root {
3
+ /* ============================================
4
+ TYPOGRAPHY SCALE
5
+ ============================================ */
6
+ --text-xs: 0.625rem;
7
+ --text-xs-plus: 0.656rem;
8
+ --text-sm: 0.688rem;
9
+ --text-sm-plus: 0.719rem;
10
+ --text-base: 0.75rem;
11
+ --text-md: 0.813rem;
12
+ --text-lg: 0.875rem;
13
+ --text-xl: 1rem;
14
+ --text-2xl: 1.125rem;
15
+ --text-3xl: 1.25rem;
16
+ --text-4xl: 1.5rem;
17
+
18
+ /* Font weights */
19
+ --font-normal: 400;
20
+ --font-medium: 500;
21
+ --font-semibold: 600;
22
+ --font-bold: 650;
23
+ --font-extrabold: 680;
24
+ --font-heavy: 720;
25
+
26
+ /* Line heights */
27
+ --leading-tight: 1.2;
28
+ --leading-snug: 1.3;
29
+ --leading-normal: 1.5;
30
+ --leading-relaxed: 1.7;
31
+
32
+ /* Letter spacing */
33
+ --tracking-tight: -0.01em;
34
+ --tracking-normal: 0;
35
+ --tracking-wide: 0.02em;
36
+ --tracking-wider: 0.05em;
37
+ --tracking-label: 0.16em;
38
+ }
@@ -0,0 +1,11 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ /**
5
+ * Utility function to merge Tailwind CSS classes
6
+ * Combines clsx and tailwind-merge for optimal className handling
7
+ */
8
+ export function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+
@@ -0,0 +1 @@
1
+ export { cn } from './cn';
@@ -0,0 +1,204 @@
1
+ const { fontFamily } = require('tailwindcss/defaultTheme')
2
+
3
+ /** @type {import('tailwindcss').Config} */
4
+ module.exports = {
5
+ theme: {
6
+ extend: {
7
+ colors: {
8
+ "chordia": "var(--bg-chordia)",
9
+ paper: "var(--paper)",
10
+ "paper-secondary": "var(--paper-secondary)",
11
+ "paper-elevated": "var(--paper-elevated)",
12
+ "paper-high": "var(--paper-high)",
13
+ ink: "var(--text-ink)",
14
+ "text-strong": "var(--text-strong)",
15
+ "text-muted": "var(--text-muted)",
16
+ "text-faint": "var(--text-faint)",
17
+ "text-subtle": "var(--text-subtle)",
18
+ "text-xfaint": "var(--text-xfaint)",
19
+ border: "var(--border)",
20
+ "border-hover": "var(--border-hover)",
21
+ "border-strong": "var(--border-strong)",
22
+ "border-subtle": "var(--border-subtle)",
23
+ "hover-warm": "var(--hover-warm)",
24
+ "hover-warm-strong": "var(--hover-warm-strong)",
25
+ "hover-warm-subtle": "var(--hover-warm-subtle)",
26
+ "hover-cool": "var(--hover-cool)",
27
+ focus: "var(--focus)",
28
+ "state-present": "var(--state-present)",
29
+ "state-absent": "var(--state-absent)",
30
+ "state-unknown": "var(--state-unknown)",
31
+ "rail-compliance": "var(--rail-compliance)",
32
+ "rail-tone": "var(--rail-tone)",
33
+ "rail-discovery": "var(--rail-discovery)",
34
+ "rail-outcome": "var(--rail-outcome)",
35
+ "rail-signal-churn": "var(--rail-signal-churn)",
36
+ "rail-signal-upsell": "var(--rail-signal-upsell)",
37
+ "rail-signal-satisfaction": "var(--rail-signal-satisfaction)",
38
+ "rail-quality": "var(--rail-quality)",
39
+ "rail-orange": "var(--rail-orange)",
40
+ "rail-purple": "var(--rail-purple)",
41
+ "rail-blue": "var(--rail-blue)",
42
+ "rail-slate": "var(--rail-slate)",
43
+ "rail-coral": "var(--rail-coral)",
44
+ "rail-teal": "var(--rail-teal)",
45
+ "rail-olive": "var(--rail-olive)",
46
+ bg: "var(--bg-chordia)",
47
+ paper2: "var(--paper-secondary)",
48
+ text: "var(--text-base)",
49
+ muted: "var(--text-muted)",
50
+ faint: "var(--text-faint)",
51
+ b1: "var(--border)",
52
+ b2: "var(--border-hover)",
53
+ warm: "var(--hover-warm)",
54
+ cool: "var(--hover-cool)",
55
+ present: "var(--state-present)",
56
+ absent: "var(--state-absent)",
57
+ unknown: "var(--state-unknown)",
58
+ "gray-0": "#1E2125",
59
+ "gray-1": "rgba(30, 33, 37, 0.78)",
60
+ "gray-2": "rgba(30, 33, 37, 0.56)",
61
+ "gray-3": "rgba(30, 33, 37, 0.36)",
62
+ "gray-4": "rgba(52, 58, 64, 0.12)",
63
+ "green-0": "#25A372",
64
+ "green-1": "#25A372",
65
+ "green-2": "rgba(231, 212, 162, 0.22)",
66
+ "beige-0": "rgba(231, 212, 162, 0.22)",
67
+ "beige-1": "#F4F1E6",
68
+ "beige-2": "rgba(231, 212, 162, 0.22)",
69
+ "red-0": "#C98A5A",
70
+ "red-1": "#C98A5A",
71
+ "red-2": "#C98A5A",
72
+ "purple": "#9A82FD",
73
+ "yellow": "#E7BF33",
74
+ background: "var(--background)",
75
+ foreground: "var(--foreground)",
76
+ card: "var(--card)",
77
+ "card-foreground": "var(--card-foreground)",
78
+ popover: "var(--popover)",
79
+ "popover-foreground": "var(--popover-foreground)",
80
+ primary: "var(--primary)",
81
+ "primary-foreground": "var(--primary-foreground)",
82
+ secondary: "var(--secondary)",
83
+ "secondary-foreground": "var(--secondary-foreground)",
84
+ accent: "var(--accent)",
85
+ "accent-foreground": "var(--accent-foreground)",
86
+ destructive: "var(--destructive)",
87
+ "destructive-foreground": "var(--destructive-foreground)",
88
+ input: "var(--input)",
89
+ "input-background": "var(--input-background)",
90
+ "switch-background": "var(--switch-background)",
91
+ ring: "var(--ring)",
92
+ "chart-1": "var(--chart-1)",
93
+ "chart-2": "var(--chart-2)",
94
+ "chart-3": "var(--chart-3)",
95
+ "chart-4": "var(--chart-4)",
96
+ "chart-5": "var(--chart-5)",
97
+ sidebar: "var(--sidebar)",
98
+ "sidebar-foreground": "var(--sidebar-foreground)",
99
+ "sidebar-primary": "var(--sidebar-primary)",
100
+ "sidebar-primary-foreground": "var(--sidebar-primary-foreground)",
101
+ "sidebar-accent": "var(--sidebar-accent)",
102
+ "sidebar-accent-foreground": "var(--sidebar-accent-foreground)",
103
+ "sidebar-border": "var(--sidebar-border)",
104
+ "sidebar-ring": "var(--sidebar-ring)",
105
+ },
106
+ spacing: {
107
+ "1": "var(--spacing-1)",
108
+ "2": "var(--spacing-2)",
109
+ "3": "var(--spacing-3)",
110
+ "4": "var(--spacing-4)",
111
+ "5": "var(--spacing-5)",
112
+ "6": "var(--spacing-6)",
113
+ "8": "var(--spacing-8)",
114
+ "10": "var(--spacing-10)",
115
+ "12": "var(--spacing-12)",
116
+ },
117
+ borderRadius: {
118
+ sm: "var(--radius-sm)",
119
+ DEFAULT: "var(--radius)",
120
+ md: "var(--radius-md)",
121
+ lg: "var(--radius-lg)",
122
+ xl: "var(--radius-xl)",
123
+ "2xl": "var(--radius-2xl)",
124
+ full: "var(--radius-full)",
125
+ r1: "var(--radius-lg)",
126
+ r2: "var(--radius-md)",
127
+ },
128
+ boxShadow: {
129
+ sm: "var(--shadow-sm)",
130
+ DEFAULT: "var(--shadow)",
131
+ md: "var(--shadow-md)",
132
+ lg: "var(--shadow-lg)",
133
+ s1: "var(--shadow-lg)",
134
+ s2: "var(--shadow-md)",
135
+ },
136
+ fontSize: {
137
+ xs: "var(--text-xs)",
138
+ "xs-plus": "var(--text-xs-plus)",
139
+ sm: "var(--text-sm)",
140
+ "sm-plus": "var(--text-sm-plus)",
141
+ base: "var(--text-base)",
142
+ md: "var(--text-md)",
143
+ lg: "var(--text-lg)",
144
+ xl: "var(--text-xl)",
145
+ "2xl": "var(--text-2xl)",
146
+ "3xl": "var(--text-3xl)",
147
+ "4xl": "var(--text-4xl)",
148
+ },
149
+ fontWeight: {
150
+ normal: "var(--font-normal)",
151
+ medium: "var(--font-medium)",
152
+ semibold: "var(--font-semibold)",
153
+ bold: "var(--font-bold)",
154
+ extrabold: "var(--font-extrabold)",
155
+ heavy: "var(--font-heavy)",
156
+ },
157
+ letterSpacing: {
158
+ tight: "var(--tracking-tight)",
159
+ normal: "var(--tracking-normal)",
160
+ wide: "var(--tracking-wide)",
161
+ wider: "var(--tracking-wider)",
162
+ label: "var(--tracking-label)",
163
+ },
164
+ lineHeight: {
165
+ tight: "var(--leading-tight)",
166
+ snug: "var(--leading-snug)",
167
+ normal: "var(--leading-normal)",
168
+ relaxed: "var(--leading-relaxed)",
169
+ },
170
+ transitionDuration: {
171
+ fast: "0.15s",
172
+ DEFAULT: "0.2s",
173
+ slow: "0.3s",
174
+ expand: "0.25s",
175
+ },
176
+ transitionTimingFunction: {
177
+ "ease-out": "ease-out",
178
+ "expand": "cubic-bezier(0.4, 0, 0.2, 1)",
179
+ },
180
+ },
181
+ fontFamily: {
182
+ "averta": ["var(--font-averta)", ...fontFamily.sans],
183
+ "tomato-grotesk": ["var(--font-tomato-grotesk)", ...fontFamily.sans],
184
+ "fira-code": ["var(--font-fira-code)", ...fontFamily.mono],
185
+ },
186
+ keyframes: {
187
+ 'pulse-expand': {
188
+ '0%': { transform: 'scale(1)' },
189
+ '30%': { transform: 'scale(3)' },
190
+ '60%': { transform: 'scale(1)' },
191
+ '100%': { transform: 'scale(1)' },
192
+ },
193
+ fade: {
194
+ '0%, 100%': { opacity: '0' },
195
+ '50%': { opacity: '1' },
196
+ },
197
+ },
198
+ animation: {
199
+ 'pulse-expand': '2s pulse-expand ease-out infinite ',
200
+ 'fade': 'fade 4s infinite'
201
+ },
202
+ },
203
+ plugins: [],
204
+ };