@quinnjr/ngx-tailwindcss 1.0.0 → 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/package.json CHANGED
@@ -1,20 +1,36 @@
1
1
  {
2
2
  "name": "@quinnjr/ngx-tailwindcss",
3
- "version": "1.0.0",
4
- "type": "module",
3
+ "version": "1.1.0",
5
4
  "description": "A highly customizable Angular component library for Tailwind CSS 4+. Build beautiful, accessible UI components with full theming support, intelligent class merging, and zero bundled CSS. Features 30+ components including buttons, cards, modals, forms, tables, and more.",
6
5
  "license": "MIT",
6
+ "exports": {
7
+ "./styles/theme.css": "./styles/theme.css",
8
+ "./package.json": {
9
+ "default": "./package.json"
10
+ },
11
+ ".": {
12
+ "types": "./types/quinnjr-ngx-tailwindcss.d.ts",
13
+ "default": "./fesm2022/quinnjr-ngx-tailwindcss.mjs"
14
+ }
15
+ },
7
16
  "author": {
8
- "name": "Pegasus Heavy Industries LLC",
9
- "url": "https://pegasusheavy.github.io/ngx-tailwindcss"
17
+ "name": "Joseph R Quinn",
18
+ "url": "https://quinnjr.github.io/ngx-tailwindcss"
10
19
  },
11
- "homepage": "https://pegasusheavy.github.io/ngx-tailwindcss",
20
+ "homepage": "https://quinnjr.github.io/ngx-tailwindcss",
12
21
  "repository": {
13
22
  "type": "git",
14
- "url": "git+https://github.com/pegasusheavy/ngx-tailwindcss.git"
23
+ "url": "git+https://github.com/quinnjr/ngx-tailwindcss.git"
15
24
  },
16
25
  "bugs": {
17
- "url": "https://github.com/pegasusheavy/ngx-tailwindcss/issues"
26
+ "url": "https://github.com/quinnjr/ngx-tailwindcss/issues"
27
+ },
28
+ "publishConfig": {
29
+ "access": "public",
30
+ "registry": "https://registry.npmjs.org/"
31
+ },
32
+ "engines": {
33
+ "node": ">=18.0.0"
18
34
  },
19
35
  "keywords": [
20
36
  "angular",
@@ -68,82 +84,47 @@
68
84
  "stepper"
69
85
  ],
70
86
  "peerDependencies": {
71
- "@angular/animations": "^19.0.0 || ^20.0.0 || ^21.0.0",
72
- "@angular/cdk": "^19.0.0 || ^20.0.0 || ^21.0.0",
73
- "@angular/common": "^19.0.0 || ^20.0.0 || ^21.0.0",
74
- "@angular/core": "^19.0.0 || ^20.0.0 || ^21.0.0",
75
- "@angular/forms": "^19.0.0 || ^20.0.0 || ^21.0.0"
76
- },
77
- "devDependencies": {
78
- "@analogjs/vite-plugin-angular": "^2.2.0",
79
- "@angular-devkit/build-angular": "^21.0.4",
80
- "@angular/animations": "^21.0.6",
81
- "@angular/build": "^21.0.4",
82
- "@angular/cdk": "^21.0.5",
83
- "@angular/cli": "^21.0.4",
84
- "@angular/common": "^21.0.6",
85
- "@angular/compiler": "^21.0.6",
86
- "@angular/compiler-cli": "^21.0.6",
87
- "@angular/core": "^21.0.6",
88
- "@angular/forms": "^21.0.6",
89
- "@angular/platform-browser": "^21.0.6",
90
- "@angular/platform-browser-dynamic": "^21.0.6",
91
- "@commitlint/cli": "^20.2.0",
92
- "@commitlint/config-conventional": "^20.2.0",
93
- "@eslint/js": "^9.39.2",
94
- "@pegasusheavy/eslint-typescript-access": "^1.0.0",
95
- "@testing-library/angular": "^18.1.1",
96
- "@testing-library/dom": "^10.4.1",
97
- "@testing-library/jest-dom": "^6.9.1",
98
- "@testing-library/user-event": "^14.6.1",
99
- "@typescript-eslint/eslint-plugin": "^8.50.0",
100
- "@typescript-eslint/parser": "^8.50.0",
101
- "@typescript-eslint/utils": "^8.50.0",
102
- "@vitest/coverage-v8": "^4.0.16",
103
- "angular-eslint": "^21.1.0",
104
- "concurrently": "^9.2.1",
105
- "eslint": "^9.39.2",
106
- "eslint-config-prettier": "^10.1.8",
107
- "eslint-plugin-jsdoc": "^61.5.0",
108
- "eslint-plugin-unicorn": "^62.0.0",
109
- "husky": "^9.1.7",
110
- "jsdom": "^27.3.0",
111
- "ng-packagr": "^21.0.1",
112
- "prettier": "^3.7.4",
113
- "rxjs": "~7.8.2",
114
- "tslib": "^2.8.1",
115
- "typescript": "~5.9.3",
116
- "typescript-eslint": "^8.50.0",
117
- "vitest": "^4.0.16",
118
- "zone.js": "~0.16.0"
87
+ "@angular/common": "^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
88
+ "@angular/core": "^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
89
+ "@angular/cdk": "^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
90
+ "@angular/forms": "^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
91
+ "@angular/animations": "^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
92
+ "@tauri-apps/api": "^2.0.0",
93
+ "@tauri-apps/plugin-dialog": "^2.0.0",
94
+ "@tauri-apps/plugin-notification": "^2.0.0",
95
+ "@tauri-apps/plugin-process": "^2.0.0",
96
+ "@tauri-apps/plugin-store": "^2.0.0",
97
+ "@tauri-apps/plugin-updater": "^2.0.0",
98
+ "electron": "^28.0.0 || ^29.0.0 || ^30.0.0 || ^31.0.0 || ^32.0.0 || ^33.0.0 || ^34.0.0 || ^35.0.0 || ^36.0.0 || ^37.0.0 || ^38.0.0 || ^39.0.0"
119
99
  },
120
- "exports": {
121
- ".": {
122
- "types": "./index.d.ts",
123
- "default": "./fesm2022/pegasus-heavy-ngx-tailwindcss.mjs"
100
+ "peerDependenciesMeta": {
101
+ "@tauri-apps/api": {
102
+ "optional": true
103
+ },
104
+ "@tauri-apps/plugin-dialog": {
105
+ "optional": true
106
+ },
107
+ "@tauri-apps/plugin-notification": {
108
+ "optional": true
109
+ },
110
+ "@tauri-apps/plugin-process": {
111
+ "optional": true
112
+ },
113
+ "@tauri-apps/plugin-store": {
114
+ "optional": true
115
+ },
116
+ "@tauri-apps/plugin-updater": {
117
+ "optional": true
118
+ },
119
+ "electron": {
120
+ "optional": true
124
121
  }
125
122
  },
126
123
  "sideEffects": false,
127
- "publishConfig": {
128
- "access": "public"
129
- },
130
- "scripts": {
131
- "ng": "ng",
132
- "build": "ng build ngx-tailwindcss --configuration production",
133
- "build:watch": "ng build ngx-tailwindcss --watch",
134
- "publish:dist": "pnpm run build && pnpm publish dist/ngx-tailwindcss --no-git-checks --access public",
135
- "postbuild": "cp README.md dist/ngx-tailwindcss/README.md",
136
- "dev": "concurrently -n lib,docs -c cyan,green \"pnpm run build:watch\" \"pnpm run docs:dev\"",
137
- "docs:dev": "cd docs && pnpm run dev",
138
- "docs:start": "cd docs && pnpm run start",
139
- "test": "vitest",
140
- "test:run": "vitest run --testTimeout 60000 --hookTimeout 60000",
141
- "test:coverage": "vitest run --coverage",
142
- "test:ui": "vitest --ui",
143
- "lint": "eslint projects/",
144
- "lint:fix": "eslint projects/ --fix",
145
- "format": "prettier --write \"projects/**/*.{ts,html,scss,css,json}\"",
146
- "format:check": "prettier --check \"projects/**/*.{ts,html,scss,css,json}\"",
147
- "commitlint": "commitlint"
124
+ "module": "fesm2022/quinnjr-ngx-tailwindcss.mjs",
125
+ "typings": "types/quinnjr-ngx-tailwindcss.d.ts",
126
+ "type": "module",
127
+ "dependencies": {
128
+ "tslib": "^2.3.0"
148
129
  }
149
130
  }
@@ -0,0 +1,379 @@
1
+ /**
2
+ * ngx-tailwindcss Theme System
3
+ *
4
+ * This file provides CSS custom properties (variables) for theming.
5
+ * The shipped components style themselves with plain Tailwind CSS utility
6
+ * classes and do NOT read these variables directly. The variables exist for
7
+ * two distinct purposes:
8
+ *
9
+ * 1. Semantic tokens (--tw-color-*): consumed by the OPTIONAL theme-aware
10
+ * path — the THEME_CSS_CLASSES constants (e.g.
11
+ * 'bg-[var(--tw-color-primary)]') and the TwThemeService runtime theming
12
+ * API. If you opt into that path, overriding these variables re-colors
13
+ * everything that uses it.
14
+ *
15
+ * 2. Per-component tokens (--tw-button-*, --tw-card-*, --tw-switch-*, ...):
16
+ * provided as a stable naming convention for YOUR OWN CSS when you
17
+ * restyle the components (e.g. via classOverride, ::part-like wrapper
18
+ * selectors, or global stylesheets). The shipped components do not read
19
+ * them; they are hooks for consumer stylesheets and default to the
20
+ * semantic tokens above so they follow your theme automatically.
21
+ *
22
+ * USAGE:
23
+ * ======
24
+ * 1. Import this file in your application's global styles:
25
+ *
26
+ * @import '@quinnjr/ngx-tailwindcss/styles/theme.css';
27
+ *
28
+ * 2. Override any variables in your own CSS to customize colors:
29
+ *
30
+ * :root {
31
+ * --tw-color-primary: #6366f1;
32
+ * --tw-color-primary-hover: #4f46e5;
33
+ * }
34
+ *
35
+ * .dark {
36
+ * --tw-color-primary: #818cf8;
37
+ * --tw-color-primary-hover: #a5b4fc;
38
+ * }
39
+ *
40
+ * DARK MODE:
41
+ * ==========
42
+ * The library supports dark mode via the 'dark' class on the <html> element.
43
+ * Use the TwThemeService or your own implementation to toggle dark mode:
44
+ *
45
+ * // In your app
46
+ * document.documentElement.classList.toggle('dark');
47
+ *
48
+ * Or use the provided service:
49
+ *
50
+ * import { TwThemeService } from '@quinnjr/ngx-tailwindcss';
51
+ * themeService.setColorMode('dark');
52
+ *
53
+ * CUSTOMIZATION LEVELS:
54
+ * =====================
55
+ * 1. CSS Variables (this file) - Override semantic colors for the optional
56
+ * THEME_CSS_CLASSES / TwThemeService path, or use the per-component
57
+ * tokens in your own stylesheets
58
+ * 2. Tailwind Config - Extend/override Tailwind's color palette
59
+ * 3. Component Props - Use classOverride/classReplace on individual components
60
+ * 4. TwThemeService - Programmatically set theme at runtime
61
+ */
62
+
63
+ :root {
64
+ /* =====================================================
65
+ BRAND COLORS
66
+ These are semantic color tokens. Override these to
67
+ change colors throughout the library.
68
+ ===================================================== */
69
+
70
+ /* Primary - Main brand color used for primary actions, links, focus states */
71
+ --tw-color-primary: #3b82f6;
72
+ --tw-color-primary-hover: #2563eb;
73
+ --tw-color-primary-active: #1d4ed8;
74
+ --tw-color-primary-light: #dbeafe;
75
+ --tw-color-primary-dark: #1e40af;
76
+
77
+ /* Secondary - Used for secondary actions and less prominent UI elements */
78
+ --tw-color-secondary: #64748b;
79
+ --tw-color-secondary-hover: #475569;
80
+ --tw-color-secondary-active: #334155;
81
+ --tw-color-secondary-light: #f1f5f9;
82
+ --tw-color-secondary-dark: #1e293b;
83
+
84
+ /* =====================================================
85
+ SEMANTIC COLORS
86
+ ===================================================== */
87
+
88
+ /* Success - Positive actions, confirmations, success states */
89
+ --tw-color-success: #10b981;
90
+ --tw-color-success-hover: #059669;
91
+ --tw-color-success-bg: #ecfdf5;
92
+ --tw-color-success-text: #065f46;
93
+ --tw-color-success-border: #a7f3d0;
94
+
95
+ /* Warning - Cautionary states, warnings */
96
+ --tw-color-warning: #f59e0b;
97
+ --tw-color-warning-hover: #d97706;
98
+ --tw-color-warning-bg: #fffbeb;
99
+ --tw-color-warning-text: #92400e;
100
+ --tw-color-warning-border: #fcd34d;
101
+
102
+ /* Danger - Destructive actions, errors, critical states */
103
+ --tw-color-danger: #ef4444;
104
+ --tw-color-danger-hover: #dc2626;
105
+ --tw-color-danger-bg: #fef2f2;
106
+ --tw-color-danger-text: #991b1b;
107
+ --tw-color-danger-border: #fecaca;
108
+
109
+ /* Info - Informational content, help text */
110
+ --tw-color-info: #06b6d4;
111
+ --tw-color-info-hover: #0891b2;
112
+ --tw-color-info-bg: #ecfeff;
113
+ --tw-color-info-text: #155e75;
114
+ --tw-color-info-border: #a5f3fc;
115
+
116
+ /* =====================================================
117
+ NEUTRAL PALETTE
118
+ ===================================================== */
119
+
120
+ /* Background - Page and container backgrounds */
121
+ --tw-color-background: #ffffff;
122
+ --tw-color-background-alt: #f8fafc;
123
+
124
+ /* Surface - Card, modal, dropdown backgrounds */
125
+ --tw-color-surface: #ffffff;
126
+ --tw-color-surface-alt: #f1f5f9;
127
+ --tw-color-surface-hover: #f8fafc;
128
+
129
+ /* =====================================================
130
+ TEXT COLORS
131
+ ===================================================== */
132
+
133
+ --tw-color-text: #0f172a;
134
+ --tw-color-text-primary: #0f172a;
135
+ --tw-color-text-secondary: #475569;
136
+ --tw-color-text-muted: #94a3b8;
137
+ --tw-color-text-disabled: #cbd5e1;
138
+ --tw-color-text-inverse: #ffffff;
139
+ --tw-color-text-link: var(--tw-color-primary);
140
+ --tw-color-text-link-hover: var(--tw-color-primary-hover);
141
+
142
+ /* =====================================================
143
+ BORDER COLORS
144
+ ===================================================== */
145
+
146
+ --tw-color-border: #e2e8f0;
147
+ --tw-color-border-light: #f1f5f9;
148
+ --tw-color-border-dark: #cbd5e1;
149
+ --tw-color-border-focus: var(--tw-color-primary);
150
+
151
+ /* =====================================================
152
+ INTERACTIVE STATES
153
+ ===================================================== */
154
+
155
+ --tw-color-hover: #f1f5f9;
156
+ --tw-color-active: #e2e8f0;
157
+ --tw-color-disabled-bg: #f1f5f9;
158
+ --tw-color-disabled-text: #94a3b8;
159
+
160
+ /* Focus ring */
161
+ --tw-color-focus-ring: rgba(59, 130, 246, 0.5);
162
+ --tw-color-focus-ring-offset: #ffffff;
163
+
164
+ /* =====================================================
165
+ OVERLAY & BACKDROP
166
+ ===================================================== */
167
+
168
+ --tw-color-overlay: rgba(0, 0, 0, 0.5);
169
+ --tw-backdrop-blur: blur(4px);
170
+
171
+ /* =====================================================
172
+ SHADOWS
173
+ ===================================================== */
174
+
175
+ --tw-shadow-color: rgba(0, 0, 0, 0.1);
176
+ --tw-elevation-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
177
+ --tw-elevation: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
178
+ --tw-elevation-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
179
+ --tw-elevation-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
180
+ --tw-elevation-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
181
+
182
+ /* =====================================================
183
+ COMPONENT-SPECIFIC VARIABLES
184
+ Override these to customize individual components.
185
+ ===================================================== */
186
+
187
+ /* Button */
188
+ --tw-button-border-radius: 0.5rem;
189
+ --tw-button-font-weight: 500;
190
+ --tw-button-primary-bg: var(--tw-color-primary);
191
+ --tw-button-primary-text: var(--tw-color-text-inverse);
192
+ --tw-button-primary-hover: var(--tw-color-primary-hover);
193
+ --tw-button-secondary-bg: var(--tw-color-secondary);
194
+ --tw-button-secondary-text: var(--tw-color-text-inverse);
195
+ --tw-button-secondary-hover: var(--tw-color-secondary-hover);
196
+
197
+ /* Card */
198
+ --tw-card-bg: var(--tw-color-surface);
199
+ --tw-card-border: var(--tw-color-border);
200
+ --tw-card-border-radius: 0.75rem;
201
+ --tw-card-shadow: var(--tw-elevation);
202
+
203
+ /* Input */
204
+ --tw-input-bg: var(--tw-color-surface);
205
+ --tw-input-text: var(--tw-color-text);
206
+ --tw-input-border: var(--tw-color-border);
207
+ --tw-input-border-radius: 0.5rem;
208
+ --tw-input-placeholder: var(--tw-color-text-muted);
209
+ --tw-input-focus-border: var(--tw-color-border-focus);
210
+ --tw-input-focus-ring: var(--tw-color-focus-ring);
211
+
212
+ /* Modal */
213
+ --tw-modal-bg: var(--tw-color-surface);
214
+ --tw-modal-border-radius: 0.75rem;
215
+ --tw-modal-shadow: var(--tw-elevation-xl);
216
+ --tw-modal-overlay: var(--tw-color-overlay);
217
+
218
+ /* Dropdown */
219
+ --tw-dropdown-bg: var(--tw-color-surface);
220
+ --tw-dropdown-border: var(--tw-color-border);
221
+ --tw-dropdown-border-radius: 0.5rem;
222
+ --tw-dropdown-shadow: var(--tw-elevation-lg);
223
+ --tw-dropdown-item-hover: var(--tw-color-hover);
224
+
225
+ /* Tooltip */
226
+ --tw-tooltip-bg: #1e293b;
227
+ --tw-tooltip-text: #ffffff;
228
+ --tw-tooltip-border-radius: 0.375rem;
229
+
230
+ /* Badge */
231
+ --tw-badge-border-radius: 9999px;
232
+
233
+ /* Alert */
234
+ --tw-alert-border-radius: 0.5rem;
235
+
236
+ /* Tabs */
237
+ --tw-tab-bg: transparent;
238
+ --tw-tab-text: var(--tw-color-text-secondary);
239
+ --tw-tab-active-text: var(--tw-color-primary);
240
+ --tw-tab-active-indicator: var(--tw-color-primary);
241
+ --tw-tab-hover-bg: var(--tw-color-hover);
242
+
243
+ /* Select */
244
+ --tw-select-bg: var(--tw-color-surface);
245
+ --tw-select-text: var(--tw-color-text);
246
+ --tw-select-border: var(--tw-color-border);
247
+ --tw-select-option-hover: var(--tw-color-hover);
248
+ --tw-select-option-selected: var(--tw-color-primary-light);
249
+
250
+ /* Switch */
251
+ --tw-switch-track-off: var(--tw-color-border-dark);
252
+ --tw-switch-track-on: var(--tw-color-primary);
253
+ --tw-switch-thumb: var(--tw-color-surface);
254
+
255
+ /* Checkbox / Radio */
256
+ --tw-checkbox-border: var(--tw-color-border-dark);
257
+ --tw-checkbox-checked: var(--tw-color-primary);
258
+ --tw-checkbox-checkmark: var(--tw-color-text-inverse);
259
+
260
+ /* Progress */
261
+ --tw-progress-track: var(--tw-color-border);
262
+ --tw-progress-bar: var(--tw-color-primary);
263
+
264
+ /* Slider */
265
+ --tw-slider-track: var(--tw-color-border);
266
+ --tw-slider-range: var(--tw-color-primary);
267
+ --tw-slider-thumb: var(--tw-color-surface);
268
+ --tw-slider-thumb-border: var(--tw-color-primary);
269
+
270
+ /* Table */
271
+ --tw-table-header-bg: var(--tw-color-surface-alt);
272
+ --tw-table-row-hover: var(--tw-color-hover);
273
+ --tw-table-border: var(--tw-color-border);
274
+
275
+ /* Sidebar */
276
+ --tw-sidebar-bg: var(--tw-color-surface);
277
+ --tw-sidebar-border: var(--tw-color-border);
278
+ --tw-sidebar-item-hover: var(--tw-color-hover);
279
+ --tw-sidebar-item-active: var(--tw-color-primary-light);
280
+
281
+ /* Accordion */
282
+ --tw-accordion-bg: var(--tw-color-surface);
283
+ --tw-accordion-border: var(--tw-color-border);
284
+ --tw-accordion-header-hover: var(--tw-color-hover);
285
+ }
286
+
287
+ /* =====================================================
288
+ DARK MODE OVERRIDES
289
+ Apply .dark class to <html> element to enable.
290
+ ===================================================== */
291
+
292
+ .dark {
293
+ /* Brand colors */
294
+ --tw-color-primary: #60a5fa;
295
+ --tw-color-primary-hover: #93c5fd;
296
+ --tw-color-primary-active: #bfdbfe;
297
+ --tw-color-primary-light: rgba(59, 130, 246, 0.2);
298
+ --tw-color-primary-dark: #3b82f6;
299
+
300
+ --tw-color-secondary: #94a3b8;
301
+ --tw-color-secondary-hover: #cbd5e1;
302
+ --tw-color-secondary-active: #e2e8f0;
303
+ --tw-color-secondary-light: rgba(100, 116, 139, 0.2);
304
+ --tw-color-secondary-dark: #64748b;
305
+
306
+ /* Semantic colors */
307
+ --tw-color-success: #34d399;
308
+ --tw-color-success-hover: #6ee7b7;
309
+ --tw-color-success-bg: rgba(16, 185, 129, 0.15);
310
+ --tw-color-success-text: #6ee7b7;
311
+ --tw-color-success-border: rgba(16, 185, 129, 0.3);
312
+
313
+ --tw-color-warning: #fbbf24;
314
+ --tw-color-warning-hover: #fcd34d;
315
+ --tw-color-warning-bg: rgba(245, 158, 11, 0.15);
316
+ --tw-color-warning-text: #fcd34d;
317
+ --tw-color-warning-border: rgba(245, 158, 11, 0.3);
318
+
319
+ --tw-color-danger: #f87171;
320
+ --tw-color-danger-hover: #fca5a5;
321
+ --tw-color-danger-bg: rgba(239, 68, 68, 0.15);
322
+ --tw-color-danger-text: #fca5a5;
323
+ --tw-color-danger-border: rgba(239, 68, 68, 0.3);
324
+
325
+ --tw-color-info: #22d3ee;
326
+ --tw-color-info-hover: #67e8f9;
327
+ --tw-color-info-bg: rgba(6, 182, 212, 0.15);
328
+ --tw-color-info-text: #67e8f9;
329
+ --tw-color-info-border: rgba(6, 182, 212, 0.3);
330
+
331
+ /* Neutral palette */
332
+ --tw-color-background: #0f172a;
333
+ --tw-color-background-alt: #1e293b;
334
+
335
+ --tw-color-surface: #1e293b;
336
+ --tw-color-surface-alt: #334155;
337
+ --tw-color-surface-hover: #334155;
338
+
339
+ /* Text colors */
340
+ --tw-color-text: #f8fafc;
341
+ --tw-color-text-primary: #f8fafc;
342
+ --tw-color-text-secondary: #94a3b8;
343
+ --tw-color-text-muted: #64748b;
344
+ --tw-color-text-disabled: #475569;
345
+ --tw-color-text-inverse: #0f172a;
346
+
347
+ /* Border colors */
348
+ --tw-color-border: #334155;
349
+ --tw-color-border-light: #475569;
350
+ --tw-color-border-dark: #1e293b;
351
+
352
+ /* Interactive states */
353
+ --tw-color-hover: #334155;
354
+ --tw-color-active: #475569;
355
+ --tw-color-disabled-bg: #1e293b;
356
+ --tw-color-disabled-text: #475569;
357
+
358
+ /* Focus ring */
359
+ --tw-color-focus-ring: rgba(96, 165, 250, 0.5);
360
+ --tw-color-focus-ring-offset: #0f172a;
361
+
362
+ /* Overlay */
363
+ --tw-color-overlay: rgba(0, 0, 0, 0.7);
364
+
365
+ /* Shadows (darker for dark mode) */
366
+ --tw-shadow-color: rgba(0, 0, 0, 0.4);
367
+ --tw-elevation-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
368
+ --tw-elevation: 0 1px 3px 0 rgba(0, 0, 0, 0.4), 0 1px 2px -1px rgba(0, 0, 0, 0.4);
369
+ --tw-elevation-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -2px rgba(0, 0, 0, 0.4);
370
+ --tw-elevation-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -4px rgba(0, 0, 0, 0.4);
371
+ --tw-elevation-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 8px 10px -6px rgba(0, 0, 0, 0.5);
372
+
373
+ /* Component-specific dark mode overrides */
374
+ --tw-card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
375
+ --tw-tooltip-bg: #f1f5f9;
376
+ --tw-tooltip-text: #0f172a;
377
+ --tw-select-option-selected: rgba(59, 130, 246, 0.3);
378
+ --tw-sidebar-item-active: rgba(59, 130, 246, 0.2);
379
+ }