@camtomlabs/malix-design-system 0.1.7 → 0.3.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/src/tokens.css CHANGED
@@ -3,22 +3,43 @@
3
3
  --malix-background-main: #ffffff;
4
4
  --malix-surface: #ffffff;
5
5
  --malix-surface-secondary: #f9fafb;
6
+ --malix-surface-elevated: #ffffff;
6
7
  --malix-surface-hover: #f3f4f6;
8
+ --malix-surface-active: #f3f4f6;
9
+ --malix-surface-disabled: #f9fafb;
10
+
11
+ /* ── Inputs ──────────────────────────────────── */
12
+ --malix-input-bg: #ffffff;
13
+ --malix-input-autofill-bg: #ffffff;
7
14
 
8
15
  /* ── Foreground / text ─────────────────────── */
9
16
  --malix-foreground: #111827;
10
17
  --malix-foreground-secondary: #6b7280;
11
18
  --malix-foreground-tertiary: #9ca3af;
12
19
  --malix-foreground-disabled: #d1d5db;
20
+ --malix-placeholder: #9ca3af;
13
21
 
14
22
  /* ── Borders ───────────────────────────────── */
15
23
  --malix-border: #e5e7eb;
16
24
  --malix-border-strong: #d1d5db;
17
25
  --malix-border-focus: #004a7c;
26
+ --malix-border-disabled: #e5e7eb;
18
27
  --malix-overlay: #00000066;
19
-
20
- /* ── Primary CTA ───────────────────────────── */
21
- --malix-cta-primary-bg: #004a7c;
28
+ --malix-overlay-backdrop: rgba(0, 0, 0, 0.4);
29
+ --malix-focus-ring: 0 0 0 3px #004a7c26;
30
+
31
+ /* ── Z-index scale ───────────────────────────── */
32
+ --malix-z-dropdown: 100;
33
+ --malix-z-sticky: 200;
34
+ --malix-z-overlay: 300;
35
+ --malix-z-modal: 400;
36
+ --malix-z-tooltip: 500;
37
+ --malix-z-notification: 600;
38
+
39
+ /* ── Primary ─────────────────────────────── */
40
+ --malix-primary: #004a7c;
41
+ --malix-primary-bg: var(--malix-primary);
42
+ --malix-cta-primary-bg: var(--malix-primary-bg); /* @deprecated — use --malix-primary-bg */
22
43
  --malix-primary-hover: #003a63;
23
44
  --malix-primary-active: #002e4f;
24
45
  --malix-primary-foreground: #ffffff;
@@ -41,6 +62,11 @@
41
62
  --malix-info-light: #eff6ff;
42
63
  --malix-info-foreground: #1e40af;
43
64
 
65
+ /* ── Table ────────────────────────────────── */
66
+ --malix-table-header-bg: #f9fafb;
67
+ --malix-table-row-hover: #f3f4f6;
68
+ --malix-table-border: #e5e7eb;
69
+
44
70
  /* ── Glass / morphism ──────────────────────── */
45
71
  --malix-glass-bg: #f3f3f3b3;
46
72
  --malix-glass-border: #ffffff66;
@@ -51,6 +77,24 @@
51
77
  --malix-sidebar-hover-bg: #fbfbfb;
52
78
  --malix-sidebar-active-bg: #e6f0f7;
53
79
 
80
+ /* ── Card ─────────────────────────────────── */
81
+ --malix-card-bg: var(--malix-surface);
82
+ --malix-card-border: var(--malix-border);
83
+ --malix-card-radius: var(--malix-radius-lg);
84
+
85
+ /* ── Input (semantic) ────────────────────── */
86
+ --malix-input-border: var(--malix-border);
87
+
88
+ /* ── Nav ──────────────────────────────────── */
89
+ --malix-nav-bg: var(--malix-background-main);
90
+ --malix-nav-height: 56px;
91
+
92
+ /* ── Layout / Containers ─────────────────── */
93
+ --malix-container-sm: 640px;
94
+ --malix-container-md: 768px;
95
+ --malix-container-lg: 1024px;
96
+ --malix-container-xl: 1280px;
97
+
54
98
  /* ── Spacing ───────────────────────────────── */
55
99
  --malix-space-xs: 4px;
56
100
  --malix-space-sm: 8px;
@@ -74,6 +118,10 @@
74
118
  --malix-text-lg: 16px;
75
119
  --malix-text-xl: 20px;
76
120
  --malix-text-2xl: 24px;
121
+ --malix-text-3xl: 30px;
122
+ --malix-text-4xl: 36px;
123
+ --malix-text-5xl: 48px;
124
+ --malix-text-display: clamp(2.5rem, 5vw, 4rem);
77
125
 
78
126
  --malix-font-body: Geist, sans-serif;
79
127
  --malix-font-heading: Geist, sans-serif;
@@ -103,22 +151,35 @@
103
151
  --malix-background-main: #010510;
104
152
  --malix-surface: #000413;
105
153
  --malix-surface-secondary: #1c232d;
154
+ --malix-surface-elevated: #0f172a;
106
155
  --malix-surface-hover: #475569;
156
+ --malix-surface-active: #475569;
157
+ --malix-surface-disabled: #1c232d;
158
+
159
+ /* ── Inputs ──────────────────────────────────── */
160
+ --malix-input-bg: #0f172a;
161
+ --malix-input-autofill-bg: #0f172a;
107
162
 
108
163
  /* ── Foreground / text ─────────────────────── */
109
164
  --malix-foreground: #F9FAFB;
110
165
  --malix-foreground-secondary: #dfdfdf;
111
166
  --malix-foreground-tertiary: #6B7280;
112
167
  --malix-foreground-disabled: #475569;
168
+ --malix-placeholder: #6B7280;
113
169
 
114
170
  /* ── Borders ───────────────────────────────── */
115
171
  --malix-border: #334155;
116
172
  --malix-border-strong: #475569;
117
173
  --malix-border-focus: #60A5FA;
174
+ --malix-border-disabled: #334155;
118
175
  --malix-overlay: #00000099;
176
+ --malix-overlay-backdrop: rgba(0, 0, 0, 0.6);
177
+ --malix-focus-ring: 0 0 0 3px #60A5FA33;
119
178
 
120
- /* ── Primary CTA ───────────────────────────── */
121
- --malix-cta-primary-bg: #005ce8;
179
+ /* ── Primary ─────────────────────────────── */
180
+ --malix-primary: #005ce8;
181
+ --malix-primary-bg: var(--malix-primary);
182
+ --malix-cta-primary-bg: var(--malix-primary-bg); /* @deprecated */
122
183
  --malix-primary-hover: #0351cf;
123
184
  --malix-primary-active: #1037a3;
124
185
  --malix-primary-foreground: #FFFFFF;
@@ -141,6 +202,11 @@
141
202
  --malix-info-light: #1E3A5F;
142
203
  --malix-info-foreground: #93C5FD;
143
204
 
205
+ /* ── Table ────────────────────────────────── */
206
+ --malix-table-header-bg: #1c232d;
207
+ --malix-table-row-hover: #1e2632;
208
+ --malix-table-border: #334155;
209
+
144
210
  /* ── Glass / morphism ──────────────────────── */
145
211
  --malix-glass-bg: #1E293BCC;
146
212
  --malix-glass-border: #47556966;
@@ -150,16 +216,16 @@
150
216
  --malix-sidebar-hover-bg: #1e2632;
151
217
  --malix-sidebar-active-bg: #1c232d;
152
218
 
153
- /* ── Shadows (dark mode) ───────────────────── */
219
+ /* ── Shadows (dark mode — stronger + border fallback) */
154
220
  --malix-shadow-btn-primary: 0 1px 2px #00000025, 0 2px 4px #60A5FA40;
155
221
  --malix-shadow-btn-secondary: none;
156
222
  --malix-shadow-input: none;
157
- --malix-shadow-depth: 0 4px 12px #00000040;
158
- --malix-shadow-card-l1: 0 1px 3px #0000002a, 0 1px 2px #00000020;
159
- --malix-shadow-card-l2: 0 4px 6px -1px #00000033, 0 2px 4px -2px #00000025;
160
- --malix-shadow-card-l3: 0 10px 15px -3px #00000040, 0 4px 6px -4px #00000030;
161
- --malix-shadow-overlay: 0 10px 25px #00000040;
162
- --malix-shadow-tooltip: 0 4px 8px #00000040;
163
- --malix-shadow-sidebar: 1px 0 3px #00000020;
164
- --malix-shadow-header: 0 1px 3px #00000020;
223
+ --malix-shadow-depth: 0 4px 12px #00000060;
224
+ --malix-shadow-card-l1: 0 1px 3px #00000040, 0 1px 2px #00000030;
225
+ --malix-shadow-card-l2: 0 4px 6px -1px #00000050, 0 2px 4px -2px #00000040;
226
+ --malix-shadow-card-l3: 0 10px 15px -3px #00000060, 0 4px 6px -4px #00000050;
227
+ --malix-shadow-overlay: 0 10px 25px #00000060;
228
+ --malix-shadow-tooltip: 0 4px 8px #00000060;
229
+ --malix-shadow-sidebar: 1px 0 3px #00000030;
230
+ --malix-shadow-header: 0 1px 3px #00000030;
165
231
  }
@@ -4,15 +4,32 @@
4
4
  "--malix-background-main",
5
5
  "--malix-surface",
6
6
  "--malix-surface-secondary",
7
+ "--malix-surface-elevated",
7
8
  "--malix-surface-hover",
9
+ "--malix-surface-active",
10
+ "--malix-surface-disabled",
11
+ "--malix-input-bg",
12
+ "--malix-input-autofill-bg",
8
13
  "--malix-foreground",
9
14
  "--malix-foreground-secondary",
10
15
  "--malix-foreground-tertiary",
11
16
  "--malix-foreground-disabled",
17
+ "--malix-placeholder",
12
18
  "--malix-border",
13
19
  "--malix-border-strong",
14
20
  "--malix-border-focus",
21
+ "--malix-border-disabled",
15
22
  "--malix-overlay",
23
+ "--malix-overlay-backdrop",
24
+ "--malix-focus-ring",
25
+ "--malix-z-dropdown",
26
+ "--malix-z-sticky",
27
+ "--malix-z-overlay",
28
+ "--malix-z-modal",
29
+ "--malix-z-tooltip",
30
+ "--malix-z-notification",
31
+ "--malix-primary",
32
+ "--malix-primary-bg",
16
33
  "--malix-cta-primary-bg",
17
34
  "--malix-primary-hover",
18
35
  "--malix-primary-active",
@@ -30,12 +47,25 @@
30
47
  "--malix-info",
31
48
  "--malix-info-light",
32
49
  "--malix-info-foreground",
50
+ "--malix-table-header-bg",
51
+ "--malix-table-row-hover",
52
+ "--malix-table-border",
33
53
  "--malix-glass-bg",
34
54
  "--malix-glass-border",
35
55
  "--malix-glass-blur",
36
56
  "--malix-sidebar-bg",
37
57
  "--malix-sidebar-hover-bg",
38
58
  "--malix-sidebar-active-bg",
59
+ "--malix-card-bg",
60
+ "--malix-card-border",
61
+ "--malix-card-radius",
62
+ "--malix-input-border",
63
+ "--malix-nav-bg",
64
+ "--malix-nav-height",
65
+ "--malix-container-sm",
66
+ "--malix-container-md",
67
+ "--malix-container-lg",
68
+ "--malix-container-xl",
39
69
  "--malix-space-xs",
40
70
  "--malix-space-sm",
41
71
  "--malix-space-md",
@@ -54,6 +84,10 @@
54
84
  "--malix-text-lg",
55
85
  "--malix-text-xl",
56
86
  "--malix-text-2xl",
87
+ "--malix-text-3xl",
88
+ "--malix-text-4xl",
89
+ "--malix-text-5xl",
90
+ "--malix-text-display",
57
91
  "--malix-font-body",
58
92
  "--malix-font-heading",
59
93
  "--malix-weight-normal",
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Malix Design System — Stylelint Config
3
+ *
4
+ * Extend this in your project:
5
+ *
6
+ * // .stylelintrc.cjs
7
+ * module.exports = {
8
+ * extends: ['@camtomlabs/malix-design-system/stylelint.config'],
9
+ * };
10
+ */
11
+
12
+ /** @type {import('stylelint').Config} */
13
+ module.exports = {
14
+ rules: {
15
+ // Prevent !important — except for known override contexts
16
+ 'declaration-no-important': [
17
+ true,
18
+ {
19
+ message:
20
+ 'Avoid !important — use token specificity or data-attributes. If overriding a third-party library, add a comment explaining why.',
21
+ severity: 'warning',
22
+ },
23
+ ],
24
+
25
+ // Flag hardcoded hex colors — encourage token usage
26
+ 'color-no-hex': [
27
+ true,
28
+ {
29
+ message:
30
+ 'Use a Malix token instead of a hex color: var(--malix-*). See token reference at https://malix.camtom.com/docs/tokens',
31
+ severity: 'warning',
32
+ },
33
+ ],
34
+
35
+ // Flag arbitrary z-index values — use the --malix-z-* scale
36
+ 'declaration-property-value-allowed-list': [
37
+ {
38
+ 'z-index': [
39
+ 'auto',
40
+ 'inherit',
41
+ 'initial',
42
+ 'unset',
43
+ '-1',
44
+ '0',
45
+ '1',
46
+ '/var\\(--malix-z-/',
47
+ ],
48
+ },
49
+ {
50
+ message:
51
+ 'Use a Malix z-index token: var(--malix-z-dropdown|sticky|overlay|modal|tooltip|notification). Arbitrary z-index values cause stacking conflicts.',
52
+ severity: 'warning',
53
+ },
54
+ ],
55
+ },
56
+ };
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Malix Design System — Tailwind CSS Preset
3
+ *
4
+ * Usage:
5
+ * // tailwind.config.ts
6
+ * import malixPreset from '@camtomlabs/malix-design-system/tailwind.preset';
7
+ * export default { presets: [malixPreset], ... }
8
+ *
9
+ * All colors reference CSS custom properties so they adapt
10
+ * automatically to light/dark mode via .dark or [data-theme="dark"].
11
+ */
12
+
13
+ /** @type {import('tailwindcss').Config} */
14
+ export default {
15
+ theme: {
16
+ extend: {
17
+ colors: {
18
+ malix: {
19
+ /* Backgrounds / surfaces */
20
+ bg: 'var(--malix-background-main)',
21
+ surface: {
22
+ DEFAULT: 'var(--malix-surface)',
23
+ secondary: 'var(--malix-surface-secondary)',
24
+ elevated: 'var(--malix-surface-elevated)',
25
+ hover: 'var(--malix-surface-hover)',
26
+ active: 'var(--malix-surface-active)',
27
+ disabled: 'var(--malix-surface-disabled)',
28
+ },
29
+
30
+ /* Input */
31
+ input: {
32
+ bg: 'var(--malix-input-bg)',
33
+ 'autofill-bg': 'var(--malix-input-autofill-bg)',
34
+ },
35
+
36
+ /* Foreground / text */
37
+ fg: {
38
+ DEFAULT: 'var(--malix-foreground)',
39
+ secondary: 'var(--malix-foreground-secondary)',
40
+ tertiary: 'var(--malix-foreground-tertiary)',
41
+ disabled: 'var(--malix-foreground-disabled)',
42
+ },
43
+ placeholder: 'var(--malix-placeholder)',
44
+
45
+ /* Borders */
46
+ border: {
47
+ DEFAULT: 'var(--malix-border)',
48
+ strong: 'var(--malix-border-strong)',
49
+ focus: 'var(--malix-border-focus)',
50
+ disabled: 'var(--malix-border-disabled)',
51
+ },
52
+
53
+ /* Primary */
54
+ primary: {
55
+ DEFAULT: 'var(--malix-primary)',
56
+ hover: 'var(--malix-primary-hover)',
57
+ active: 'var(--malix-primary-active)',
58
+ foreground: 'var(--malix-primary-foreground)',
59
+ light: 'var(--malix-primary-light)',
60
+ },
61
+
62
+ /* Semantic */
63
+ success: {
64
+ DEFAULT: 'var(--malix-success)',
65
+ light: 'var(--malix-success-light)',
66
+ foreground: 'var(--malix-success-foreground)',
67
+ },
68
+ warning: {
69
+ DEFAULT: 'var(--malix-warning)',
70
+ light: 'var(--malix-warning-light)',
71
+ foreground: 'var(--malix-warning-foreground)',
72
+ },
73
+ error: {
74
+ DEFAULT: 'var(--malix-error)',
75
+ light: 'var(--malix-error-light)',
76
+ foreground: 'var(--malix-error-foreground)',
77
+ },
78
+ info: {
79
+ DEFAULT: 'var(--malix-info)',
80
+ light: 'var(--malix-info-light)',
81
+ foreground: 'var(--malix-info-foreground)',
82
+ },
83
+
84
+ /* Table */
85
+ table: {
86
+ 'header-bg': 'var(--malix-table-header-bg)',
87
+ 'row-hover': 'var(--malix-table-row-hover)',
88
+ border: 'var(--malix-table-border)',
89
+ },
90
+
91
+ /* Sidebar */
92
+ sidebar: {
93
+ bg: 'var(--malix-sidebar-bg)',
94
+ hover: 'var(--malix-sidebar-hover-bg)',
95
+ active: 'var(--malix-sidebar-active-bg)',
96
+ },
97
+
98
+ /* Glass */
99
+ glass: {
100
+ bg: 'var(--malix-glass-bg)',
101
+ border: 'var(--malix-glass-border)',
102
+ },
103
+
104
+ overlay: 'var(--malix-overlay)',
105
+ 'overlay-backdrop': 'var(--malix-overlay-backdrop)',
106
+ },
107
+ },
108
+
109
+ fontFamily: {
110
+ malix: 'var(--malix-font-body)',
111
+ 'malix-heading': 'var(--malix-font-heading)',
112
+ },
113
+
114
+ fontSize: {
115
+ 'malix-xs': 'var(--malix-text-xs)',
116
+ 'malix-sm': 'var(--malix-text-sm)',
117
+ 'malix-base': 'var(--malix-text-base)',
118
+ 'malix-lg': 'var(--malix-text-lg)',
119
+ 'malix-xl': 'var(--malix-text-xl)',
120
+ 'malix-2xl': 'var(--malix-text-2xl)',
121
+ },
122
+
123
+ fontWeight: {
124
+ 'malix-normal': 'var(--malix-weight-normal)',
125
+ 'malix-medium': 'var(--malix-weight-medium)',
126
+ 'malix-semibold': 'var(--malix-weight-semibold)',
127
+ 'malix-bold': 'var(--malix-weight-bold)',
128
+ },
129
+
130
+ spacing: {
131
+ 'malix-xs': 'var(--malix-space-xs)',
132
+ 'malix-sm': 'var(--malix-space-sm)',
133
+ 'malix-md': 'var(--malix-space-md)',
134
+ 'malix-lg': 'var(--malix-space-lg)',
135
+ 'malix-xl': 'var(--malix-space-xl)',
136
+ 'malix-2xl': 'var(--malix-space-2xl)',
137
+ 'malix-3xl': 'var(--malix-space-3xl)',
138
+ },
139
+
140
+ borderRadius: {
141
+ 'malix-sm': 'var(--malix-radius-sm)',
142
+ 'malix-md': 'var(--malix-radius-md)',
143
+ 'malix-lg': 'var(--malix-radius-lg)',
144
+ 'malix-xl': 'var(--malix-radius-xl)',
145
+ 'malix-pill': 'var(--malix-radius-pill)',
146
+ },
147
+
148
+ boxShadow: {
149
+ 'malix-btn-primary': 'var(--malix-shadow-btn-primary)',
150
+ 'malix-btn-secondary': 'var(--malix-shadow-btn-secondary)',
151
+ 'malix-input': 'var(--malix-shadow-input)',
152
+ 'malix-depth': 'var(--malix-shadow-depth)',
153
+ 'malix-card': 'var(--malix-shadow-card-l1)',
154
+ 'malix-card-l2': 'var(--malix-shadow-card-l2)',
155
+ 'malix-card-l3': 'var(--malix-shadow-card-l3)',
156
+ 'malix-overlay': 'var(--malix-shadow-overlay)',
157
+ 'malix-tooltip': 'var(--malix-shadow-tooltip)',
158
+ 'malix-sidebar': 'var(--malix-shadow-sidebar)',
159
+ 'malix-header': 'var(--malix-shadow-header)',
160
+ 'malix-focus': 'var(--malix-focus-ring)',
161
+ },
162
+
163
+ zIndex: {
164
+ 'malix-dropdown': 'var(--malix-z-dropdown)',
165
+ 'malix-sticky': 'var(--malix-z-sticky)',
166
+ 'malix-overlay': 'var(--malix-z-overlay)',
167
+ 'malix-modal': 'var(--malix-z-modal)',
168
+ 'malix-tooltip': 'var(--malix-z-tooltip)',
169
+ 'malix-notification': 'var(--malix-z-notification)',
170
+ },
171
+ },
172
+ },
173
+ };