@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/LICENSE +1 -1
- package/README.md +20 -12
- package/fesm2022/quinnjr-ngx-tailwindcss.mjs +41274 -0
- package/fesm2022/quinnjr-ngx-tailwindcss.mjs.map +1 -0
- package/package.json +61 -80
- package/src/lib/styles/theme.css +379 -0
- package/types/quinnjr-ngx-tailwindcss.d.ts +12439 -0
- package/.claude/settings.local.json +0 -9
- package/.cursorignore +0 -61
- package/.prettierignore +0 -19
- package/CHANGELOG.md +0 -356
- package/commitlint.config.cjs +0 -4
- package/extract-inline.js +0 -1
- package/pegasusheavy-ngx-tailwindcss-0.1.0.tgz +0 -0
- package/pnpm-workspace.yaml +0 -17
package/package.json
CHANGED
|
@@ -1,20 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quinnjr/ngx-tailwindcss",
|
|
3
|
-
"version": "1.
|
|
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": "
|
|
9
|
-
"url": "https://
|
|
17
|
+
"name": "Joseph R Quinn",
|
|
18
|
+
"url": "https://quinnjr.github.io/ngx-tailwindcss"
|
|
10
19
|
},
|
|
11
|
-
"homepage": "https://
|
|
20
|
+
"homepage": "https://quinnjr.github.io/ngx-tailwindcss",
|
|
12
21
|
"repository": {
|
|
13
22
|
"type": "git",
|
|
14
|
-
"url": "git+https://github.com/
|
|
23
|
+
"url": "git+https://github.com/quinnjr/ngx-tailwindcss.git"
|
|
15
24
|
},
|
|
16
25
|
"bugs": {
|
|
17
|
-
"url": "https://github.com/
|
|
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/
|
|
72
|
-
"@angular/
|
|
73
|
-
"@angular/
|
|
74
|
-
"@angular/
|
|
75
|
-
"@angular/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
"@
|
|
79
|
-
"@
|
|
80
|
-
"@
|
|
81
|
-
"@
|
|
82
|
-
"
|
|
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
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
|
|
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
|
-
"
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
"
|
|
131
|
-
"
|
|
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
|
+
}
|