@tociva/tailng-theme 0.6.0 → 0.7.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/README.md +163 -0
- package/fesm2022/tociva-tailng-theme.mjs +49 -0
- package/fesm2022/tociva-tailng-theme.mjs.map +1 -0
- package/package.json +24 -5
- package/tailwind/plugin.cjs +48 -0
- package/tailwind/preset.cjs +59 -0
- package/tailwind/tailng.plugin.cjs +2 -0
- package/tailwind/tailng.preset.cjs +2 -0
- package/tokens/components/code.css +12 -0
- package/tokens/foundation/base.css +13 -0
- package/tokens/foundation/elevation.css +6 -0
- package/tokens/foundation/motion.css +9 -0
- package/tokens/foundation/shapes.css +4 -0
- package/tokens/foundation/typography.css +12 -0
- package/tokens/index.css +27 -0
- package/tokens/modes/mode-dark.css +14 -0
- package/tokens/modes/mode-light.css +14 -0
- package/tokens/modes/mode-night.css +14 -0
- package/tokens/palettes/default.css +3 -0
- package/tokens/palettes/slate.css +2 -0
- package/tokens/semantic/theme-default.css +30 -0
- package/tokens/semantic/theme-emerald.css +24 -0
- package/tokens/semantic/theme-indigo.css +24 -0
- package/tokens/semantic/theme-rose.css +24 -0
- package/tokens/semantic/theme-slate.css +24 -0
- package/types/tociva-tailng-theme.d.ts +31 -0
package/README.md
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# @tociva/tailng-theme
|
|
2
|
+
|
|
3
|
+
Tailwind CSS preset and design tokens for Tailng components.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
`@tociva/tailng-theme` provides a shared Tailwind CSS configuration used by Tailng components and applications. It defines colors, typography, spacing, border radius, and other design tokens in a reusable preset that ensures consistency across your application.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @tociva/tailng-theme
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Peer Dependencies
|
|
16
|
+
|
|
17
|
+
- `tailwindcss`: ^3.4.0
|
|
18
|
+
|
|
19
|
+
## Features
|
|
20
|
+
|
|
21
|
+
- CSS variable-based theming
|
|
22
|
+
- Consistent design tokens (colors, spacing, radius)
|
|
23
|
+
- Tailwind preset for easy integration
|
|
24
|
+
- Type-safe design tokens (TypeScript)
|
|
25
|
+
- Light and dark mode support ready
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
### Basic Setup
|
|
30
|
+
|
|
31
|
+
Add the preset to your `tailwind.config.js`:
|
|
32
|
+
|
|
33
|
+
```javascript
|
|
34
|
+
/** @type {import('tailwindcss').Config} */
|
|
35
|
+
module.exports = {
|
|
36
|
+
presets: [
|
|
37
|
+
require('@tociva/tailng-theme/tailwind/preset'),
|
|
38
|
+
],
|
|
39
|
+
content: [
|
|
40
|
+
'./src/**/*.{html,ts}',
|
|
41
|
+
],
|
|
42
|
+
theme: {
|
|
43
|
+
extend: {},
|
|
44
|
+
},
|
|
45
|
+
plugins: [],
|
|
46
|
+
};
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### With Custom Theme
|
|
50
|
+
|
|
51
|
+
Extend the preset with your own theme:
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
/** @type {import('tailwindcss').Config} */
|
|
55
|
+
module.exports = {
|
|
56
|
+
presets: [
|
|
57
|
+
require('@tociva/tailng-theme/tailwind/preset'),
|
|
58
|
+
],
|
|
59
|
+
theme: {
|
|
60
|
+
extend: {
|
|
61
|
+
colors: {
|
|
62
|
+
primary: 'var(--color-primary, #2563eb)',
|
|
63
|
+
},
|
|
64
|
+
borderRadius: {
|
|
65
|
+
tng: 'var(--radius, 0.25rem)',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### CSS Variables
|
|
73
|
+
|
|
74
|
+
Define your theme variables in your global CSS:
|
|
75
|
+
|
|
76
|
+
```css
|
|
77
|
+
:root {
|
|
78
|
+
--color-primary: #2563eb;
|
|
79
|
+
--radius: 0.25rem;
|
|
80
|
+
--surface: #ffffff;
|
|
81
|
+
--surface-2: #f8fafc;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* Dark mode */
|
|
85
|
+
@media (prefers-color-scheme: dark) {
|
|
86
|
+
:root {
|
|
87
|
+
--color-primary: #3b82f6;
|
|
88
|
+
--surface: #1e293b;
|
|
89
|
+
--surface-2: #0f172a;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Design Tokens
|
|
95
|
+
|
|
96
|
+
Import and use design tokens in TypeScript:
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { tailngTokens } from '@tociva/tailng-theme';
|
|
100
|
+
|
|
101
|
+
// Use tokens programmatically
|
|
102
|
+
const radius = tailngTokens.radius.md; // '0.25rem'
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Available Tokens
|
|
106
|
+
|
|
107
|
+
### Border Radius
|
|
108
|
+
|
|
109
|
+
- `sm`: `0.125rem`
|
|
110
|
+
- `md`: `0.25rem`
|
|
111
|
+
- `lg`: `0.5rem`
|
|
112
|
+
|
|
113
|
+
### Colors
|
|
114
|
+
|
|
115
|
+
The preset uses CSS variables for colors, allowing easy theming:
|
|
116
|
+
|
|
117
|
+
- `primary`: `var(--color-primary, #2563eb)`
|
|
118
|
+
- Custom colors can be added via CSS variables
|
|
119
|
+
|
|
120
|
+
## Preset Structure
|
|
121
|
+
|
|
122
|
+
The preset extends Tailwind's default theme with:
|
|
123
|
+
|
|
124
|
+
- **Colors**: CSS variable-based primary color
|
|
125
|
+
- **Border Radius**: Consistent radius values
|
|
126
|
+
- **Spacing**: Standard spacing scale (can be extended)
|
|
127
|
+
|
|
128
|
+
## Customization
|
|
129
|
+
|
|
130
|
+
### Override Default Values
|
|
131
|
+
|
|
132
|
+
```javascript
|
|
133
|
+
module.exports = {
|
|
134
|
+
presets: [require('@tociva/tailng-theme/tailwind/preset')],
|
|
135
|
+
theme: {
|
|
136
|
+
extend: {
|
|
137
|
+
colors: {
|
|
138
|
+
primary: '#your-color', // Override default
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Add Custom Variables
|
|
146
|
+
|
|
147
|
+
```css
|
|
148
|
+
:root {
|
|
149
|
+
--color-primary: #your-primary-color;
|
|
150
|
+
--color-secondary: #your-secondary-color;
|
|
151
|
+
--radius: 0.5rem;
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Related Packages
|
|
156
|
+
|
|
157
|
+
- [`@tociva/tailng-ui`](../ui/README.md) - UI components that use this theme
|
|
158
|
+
- [`@tociva/tailng-icons`](../icons/README.md) - Icon components
|
|
159
|
+
- [`@tociva/tailng-cdk`](../cdk/README.md) - Component development kit
|
|
160
|
+
|
|
161
|
+
## License
|
|
162
|
+
|
|
163
|
+
MIT
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const radii = {
|
|
2
|
+
sm: 'var(--radius-sm)',
|
|
3
|
+
md: 'var(--radius-md)',
|
|
4
|
+
lg: 'var(--radius-lg)',
|
|
5
|
+
};
|
|
6
|
+
const motion = {
|
|
7
|
+
fast: 'var(--duration-fast)',
|
|
8
|
+
normal: 'var(--duration-normal)',
|
|
9
|
+
slow: 'var(--duration-slow)',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const colors = {
|
|
13
|
+
bg: 'var(--background-color)',
|
|
14
|
+
fg: 'var(--text-color)',
|
|
15
|
+
border: 'var(--border-color)',
|
|
16
|
+
primary: 'var(--primary-color)',
|
|
17
|
+
danger: 'var(--danger-color)',
|
|
18
|
+
warning: 'var(--warning-color)',
|
|
19
|
+
success: 'var(--success-color)',
|
|
20
|
+
info: 'var(--info-color)',
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Tailwind preset for @tailng/theme.
|
|
25
|
+
* Map Tailwind colors to CSS variables (no hardcoded colors here).
|
|
26
|
+
*/
|
|
27
|
+
const tailngPreset = {
|
|
28
|
+
theme: {
|
|
29
|
+
extend: {
|
|
30
|
+
colors: {
|
|
31
|
+
bg: 'var(--background-color)',
|
|
32
|
+
fg: 'var(--text-color)',
|
|
33
|
+
border: 'var(--border-color)',
|
|
34
|
+
primary: 'var(--primary-color)',
|
|
35
|
+
danger: 'var(--danger-color)',
|
|
36
|
+
warning: 'var(--warning-color)',
|
|
37
|
+
success: 'var(--success-color)',
|
|
38
|
+
info: 'var(--info-color)',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Generated bundle index. Do not edit.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
export { colors, motion, radii, tailngPreset };
|
|
49
|
+
//# sourceMappingURL=tociva-tailng-theme.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tociva-tailng-theme.mjs","sources":["../../../../libs/theme/src/scales/scales.ts","../../../../libs/theme/src/scales/colors.ts","../../../../libs/theme/src/tailwind/tailwind.preset.ts","../../../../libs/theme/src/tociva-tailng-theme.ts"],"sourcesContent":["export const radii = {\n sm: 'var(--radius-sm)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n} as const;\n\nexport const motion = {\n fast: 'var(--duration-fast)',\n normal: 'var(--duration-normal)',\n slow: 'var(--duration-slow)',\n} as const;\n","export const colors = {\n bg: 'var(--background-color)',\n fg: 'var(--text-color)',\n border: 'var(--border-color)',\n\n primary: 'var(--primary-color)',\n danger: 'var(--danger-color)',\n warning: 'var(--warning-color)',\n success: 'var(--success-color)',\n info: 'var(--info-color)',\n} as const;\n","import type { Config } from 'tailwindcss';\n\n/**\n * Tailwind preset for @tailng/theme.\n * Map Tailwind colors to CSS variables (no hardcoded colors here).\n */\nexport const tailngPreset: Partial<Config> = {\n theme: {\n extend: {\n colors: {\n bg: 'var(--background-color)',\n fg: 'var(--text-color)',\n border: 'var(--border-color)',\n\n primary: 'var(--primary-color)',\n danger: 'var(--danger-color)',\n warning: 'var(--warning-color)',\n success: 'var(--success-color)',\n info: 'var(--info-color)',\n },\n },\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAO,MAAM,KAAK,GAAG;AACnB,IAAA,EAAE,EAAE,kBAAkB;AACtB,IAAA,EAAE,EAAE,kBAAkB;AACtB,IAAA,EAAE,EAAE,kBAAkB;;AAGjB,MAAM,MAAM,GAAG;AACpB,IAAA,IAAI,EAAE,sBAAsB;AAC5B,IAAA,MAAM,EAAE,wBAAwB;AAChC,IAAA,IAAI,EAAE,sBAAsB;;;ACTvB,MAAM,MAAM,GAAG;AACpB,IAAA,EAAE,EAAE,yBAAyB;AAC7B,IAAA,EAAE,EAAE,mBAAmB;AACvB,IAAA,MAAM,EAAE,qBAAqB;AAE7B,IAAA,OAAO,EAAE,sBAAsB;AAC/B,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,OAAO,EAAE,sBAAsB;AAC/B,IAAA,OAAO,EAAE,sBAAsB;AAC/B,IAAA,IAAI,EAAE,mBAAmB;;;ACP3B;;;AAGG;AACI,MAAM,YAAY,GAAoB;AAC3C,IAAA,KAAK,EAAE;AACL,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,yBAAyB;AAC7B,gBAAA,EAAE,EAAE,mBAAmB;AACvB,gBAAA,MAAM,EAAE,qBAAqB;AAE7B,gBAAA,OAAO,EAAE,sBAAsB;AAC/B,gBAAA,MAAM,EAAE,qBAAqB;AAC7B,gBAAA,OAAO,EAAE,sBAAsB;AAC/B,gBAAA,OAAO,EAAE,sBAAsB;AAC/B,gBAAA,IAAI,EAAE,mBAAmB;AAC1B,aAAA;AACF,SAAA;AACF,KAAA;;;ACrBH;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tociva/tailng-theme",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "TailNG theme tokens (CSS) + Tailwind preset/plugin helpers",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -11,10 +11,29 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/tociva/tailng/issues"
|
|
13
13
|
},
|
|
14
|
+
"sideEffects": [
|
|
15
|
+
"*.css"
|
|
16
|
+
],
|
|
14
17
|
"peerDependencies": {
|
|
15
18
|
"tailwindcss": "^3.4.0"
|
|
16
19
|
},
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./types/tociva-tailng-theme.d.ts",
|
|
23
|
+
"default": "./fesm2022/tociva-tailng-theme.mjs"
|
|
24
|
+
},
|
|
25
|
+
"./tokens/index.css": "./tokens/index.css",
|
|
26
|
+
"./tokens/base.css": "./tokens/base.css",
|
|
27
|
+
"./tokens/light.css": "./tokens/light.css",
|
|
28
|
+
"./tokens/dark.css": "./tokens/dark.css",
|
|
29
|
+
"./tailwind/plugin": "./tailwind/plugin.cjs",
|
|
30
|
+
"./package.json": {
|
|
31
|
+
"default": "./package.json"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"module": "fesm2022/tociva-tailng-theme.mjs",
|
|
35
|
+
"typings": "types/tociva-tailng-theme.d.ts",
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"tslib": "^2.3.0"
|
|
38
|
+
}
|
|
20
39
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @tailng/theme - Tailwind plugin (CommonJS)
|
|
3
|
+
* Adds a few small utilities that leverage theme variables.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* // tailwind.config.cjs
|
|
7
|
+
* module.exports = {
|
|
8
|
+
* plugins: [require('@tailng/theme/tailwind/plugin.cjs')],
|
|
9
|
+
* };
|
|
10
|
+
*/
|
|
11
|
+
const plugin = require('tailwindcss/plugin');
|
|
12
|
+
|
|
13
|
+
module.exports = plugin(function ({ addUtilities, addBase }) {
|
|
14
|
+
// Base defaults (optional but handy)
|
|
15
|
+
addBase({
|
|
16
|
+
':root': {
|
|
17
|
+
color: 'var(--text-color)',
|
|
18
|
+
backgroundColor: 'var(--background-color)',
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// Utilities
|
|
23
|
+
addUtilities(
|
|
24
|
+
{
|
|
25
|
+
'.tng-ring': {
|
|
26
|
+
outline: 'none',
|
|
27
|
+
boxShadow: '0 0 0 var(--focus-ring-width) color-mix(in srgb, var(--primary-color) 35%, transparent)',
|
|
28
|
+
},
|
|
29
|
+
'.tng-ring-danger': {
|
|
30
|
+
outline: 'none',
|
|
31
|
+
boxShadow: '0 0 0 var(--focus-ring-width) color-mix(in srgb, var(--danger-color) 35%, transparent)',
|
|
32
|
+
},
|
|
33
|
+
'.tng-border': {
|
|
34
|
+
borderWidth: 'var(--border-width)',
|
|
35
|
+
borderColor: 'var(--border-color)',
|
|
36
|
+
},
|
|
37
|
+
'.tng-border-hover:hover': {
|
|
38
|
+
borderColor: 'var(--border-color-hover)',
|
|
39
|
+
},
|
|
40
|
+
'.tng-disabled': {
|
|
41
|
+
color: 'var(--disable-color)',
|
|
42
|
+
cursor: 'not-allowed',
|
|
43
|
+
opacity: '0.7',
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{ variants: ['responsive', 'hover', 'focus'] }
|
|
47
|
+
);
|
|
48
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @tailng/theme - Tailwind preset (CommonJS)
|
|
3
|
+
* Maps Tailwind tokens to CSS variables provided by @tailng/theme tokens.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* // tailwind.config.cjs
|
|
7
|
+
* module.exports = {
|
|
8
|
+
* presets: [require('@tailng/theme/tailwind/preset.cjs')],
|
|
9
|
+
* };
|
|
10
|
+
*/
|
|
11
|
+
module.exports = {
|
|
12
|
+
theme: {
|
|
13
|
+
extend: {
|
|
14
|
+
colors: {
|
|
15
|
+
// Surfaces
|
|
16
|
+
bg: 'var(--background-color)',
|
|
17
|
+
fg: 'var(--text-color)',
|
|
18
|
+
border: 'var(--border-color)',
|
|
19
|
+
'border-hover': 'var(--border-color-hover)',
|
|
20
|
+
|
|
21
|
+
// Semantic
|
|
22
|
+
primary: 'var(--primary-color)',
|
|
23
|
+
danger: 'var(--danger-color)',
|
|
24
|
+
warning: 'var(--warning-color)',
|
|
25
|
+
success: 'var(--success-color)',
|
|
26
|
+
info: 'var(--info-color)',
|
|
27
|
+
|
|
28
|
+
// "on-*" helpers (useful for text color on colored bg)
|
|
29
|
+
'on-primary': 'var(--on-primary-color)',
|
|
30
|
+
'on-danger': 'var(--on-danger-color)',
|
|
31
|
+
'on-warning': 'var(--on-warning-color)',
|
|
32
|
+
'on-success': 'var(--on-success-color)',
|
|
33
|
+
'on-info': 'var(--on-info-color)',
|
|
34
|
+
},
|
|
35
|
+
borderRadius: {
|
|
36
|
+
sm: 'var(--radius-sm)',
|
|
37
|
+
md: 'var(--radius-md)',
|
|
38
|
+
lg: 'var(--radius-lg)',
|
|
39
|
+
},
|
|
40
|
+
boxShadow: {
|
|
41
|
+
sm: 'var(--shadow-sm)',
|
|
42
|
+
md: 'var(--shadow-md)',
|
|
43
|
+
lg: 'var(--shadow-lg)',
|
|
44
|
+
},
|
|
45
|
+
fontFamily: {
|
|
46
|
+
sans: ['var(--font-sans)'],
|
|
47
|
+
},
|
|
48
|
+
transitionTimingFunction: {
|
|
49
|
+
standard: 'var(--ease-standard)',
|
|
50
|
+
emphasized: 'var(--ease-emphasized)',
|
|
51
|
+
},
|
|
52
|
+
transitionDuration: {
|
|
53
|
+
fast: 'var(--duration-fast)',
|
|
54
|
+
normal: 'var(--duration-normal)',
|
|
55
|
+
slow: 'var(--duration-slow)',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* @tailng/theme - tokens/components/code.css
|
|
2
|
+
Code highlighting tokens (semantic). */
|
|
3
|
+
|
|
4
|
+
:root {
|
|
5
|
+
--code-keyword-color: var(--primary-color);
|
|
6
|
+
--code-string-color: var(--success-color);
|
|
7
|
+
--code-comment-color: var(--disable-color);
|
|
8
|
+
--code-number-color: var(--info-color);
|
|
9
|
+
--code-tag-color: var(--danger-color);
|
|
10
|
+
--code-attr-color: var(--warning-color);
|
|
11
|
+
--code-decorator-color: var(--primary-color-hover);
|
|
12
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* @tailng/theme - tokens/foundation/base.css
|
|
2
|
+
Shared (non-theme) tokens. */
|
|
3
|
+
:root {
|
|
4
|
+
--font-sans: Roboto, system-ui, -apple-system, Segoe UI, Arial, sans-serif;
|
|
5
|
+
|
|
6
|
+
/* Radius scale */
|
|
7
|
+
--radius-sm: 4px;
|
|
8
|
+
--radius-md: 6px;
|
|
9
|
+
--radius-lg: 10px;
|
|
10
|
+
|
|
11
|
+
/* Border widths */
|
|
12
|
+
--border-width: 1px;
|
|
13
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* @tailng/theme - tokens/foundation/typography.css */
|
|
2
|
+
:root {
|
|
3
|
+
--font-size-xs: 0.75rem;
|
|
4
|
+
--font-size-sm: 0.875rem;
|
|
5
|
+
--font-size-md: 1rem;
|
|
6
|
+
--font-size-lg: 1.125rem;
|
|
7
|
+
--font-size-xl: 1.25rem;
|
|
8
|
+
|
|
9
|
+
--line-height-tight: 1.2;
|
|
10
|
+
--line-height-normal: 1.5;
|
|
11
|
+
--line-height-loose: 1.7;
|
|
12
|
+
}
|
package/tokens/index.css
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* @tailng/theme - tokens/index.css
|
|
2
|
+
Import this once in your app. */
|
|
3
|
+
|
|
4
|
+
@import "./foundation/base.css";
|
|
5
|
+
@import "./foundation/motion.css";
|
|
6
|
+
@import "./foundation/typography.css";
|
|
7
|
+
@import "./foundation/elevation.css";
|
|
8
|
+
@import "./foundation/shapes.css";
|
|
9
|
+
|
|
10
|
+
/* Optional palettes (not required) */
|
|
11
|
+
@import "./palettes/default.css";
|
|
12
|
+
@import "./palettes/slate.css";
|
|
13
|
+
|
|
14
|
+
/* Theme (brand identity) */
|
|
15
|
+
@import "./semantic/theme-default.css";
|
|
16
|
+
@import "./semantic/theme-slate.css";
|
|
17
|
+
@import "./semantic/theme-indigo.css";
|
|
18
|
+
@import "./semantic/theme-emerald.css";
|
|
19
|
+
@import "./semantic/theme-rose.css";
|
|
20
|
+
|
|
21
|
+
/* Modes (light/dark/night) */
|
|
22
|
+
@import "./modes/mode-light.css";
|
|
23
|
+
@import "./modes/mode-dark.css";
|
|
24
|
+
@import "./modes/mode-night.css";
|
|
25
|
+
|
|
26
|
+
/* Component-level tokens (optional) */
|
|
27
|
+
@import "./components/code.css";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* @tailng/theme - tokens/modes/mode-dark.css
|
|
2
|
+
Mode tokens (dark).
|
|
3
|
+
Apply by setting: <html class="mode-dark"> */
|
|
4
|
+
|
|
5
|
+
:where(html.mode-dark, .mode-dark) {
|
|
6
|
+
--background-color: #020617;
|
|
7
|
+
--alternate-background-color: #0b1220;
|
|
8
|
+
--text-color: #e5e7eb;
|
|
9
|
+
|
|
10
|
+
--border-color: #1e293b;
|
|
11
|
+
--border-color-hover: #334155;
|
|
12
|
+
|
|
13
|
+
--disable-color: #94a3b8;
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* @tailng/theme - tokens/modes/mode-light.css
|
|
2
|
+
Mode tokens (light).
|
|
3
|
+
Apply by setting: <html class="mode-light"> */
|
|
4
|
+
|
|
5
|
+
:where(html.mode-light, .mode-light) {
|
|
6
|
+
--background-color: #ffffff;
|
|
7
|
+
--alternate-background-color: #f8fafc;
|
|
8
|
+
--text-color: #0f172a;
|
|
9
|
+
|
|
10
|
+
--border-color: #e2e8f0;
|
|
11
|
+
--border-color-hover: #cbd5e1;
|
|
12
|
+
|
|
13
|
+
--disable-color: #64748b;
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* @tailng/theme - tokens/modes/mode-night.css
|
|
2
|
+
Mode tokens (night / true-black).
|
|
3
|
+
Apply by setting: <html class="mode-night"> */
|
|
4
|
+
|
|
5
|
+
:where(html.mode-night, .mode-night) {
|
|
6
|
+
--background-color: #000000;
|
|
7
|
+
--alternate-background-color: #070a10;
|
|
8
|
+
--text-color: #e5e7eb;
|
|
9
|
+
|
|
10
|
+
--border-color: #111827;
|
|
11
|
+
--border-color-hover: #1f2937;
|
|
12
|
+
|
|
13
|
+
--disable-color: #9ca3af;
|
|
14
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/* @tailng/theme - tokens/semantic/theme-default.css
|
|
2
|
+
Brand identity tokens (stable across modes).
|
|
3
|
+
Apply by setting: <html class="theme-default"> */
|
|
4
|
+
|
|
5
|
+
:where(html.theme-default, .theme-default) {
|
|
6
|
+
/* Primary (blue) */
|
|
7
|
+
--primary-color: #2563eb; /* blue-600 */
|
|
8
|
+
--primary-color-hover: #1d4ed8; /* blue-700 */
|
|
9
|
+
--on-primary-color: #ffffff;
|
|
10
|
+
|
|
11
|
+
/* Danger (red) */
|
|
12
|
+
--danger-color: #dc2626; /* red-600 */
|
|
13
|
+
--danger-color-hover: #b91c1c; /* red-700 */
|
|
14
|
+
--on-danger-color: #ffffff;
|
|
15
|
+
|
|
16
|
+
/* Warning (amber) */
|
|
17
|
+
--warning-color: #f59e0b; /* amber-500 */
|
|
18
|
+
--warning-color-hover: #d97706; /* amber-600 */
|
|
19
|
+
--on-warning-color: #020617; /* near-slate-950 */
|
|
20
|
+
|
|
21
|
+
/* Success (green) */
|
|
22
|
+
--success-color: #16a34a; /* green-600 */
|
|
23
|
+
--success-color-hover: #15803d; /* green-700 */
|
|
24
|
+
--on-success-color: #ffffff;
|
|
25
|
+
|
|
26
|
+
/* Info (cyan) */
|
|
27
|
+
--info-color: #0891b2; /* cyan-600 */
|
|
28
|
+
--info-color-hover: #0e7490; /* cyan-700 */
|
|
29
|
+
--on-info-color: #ffffff;
|
|
30
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* @tailng/theme - semantic/theme-emerald.css
|
|
2
|
+
Calm, positive theme */
|
|
3
|
+
|
|
4
|
+
:where(html.theme-emerald, .theme-emerald) {
|
|
5
|
+
--primary-color: #059669; /* emerald-600 */
|
|
6
|
+
--primary-color-hover: #047857; /* emerald-700 */
|
|
7
|
+
--on-primary-color: #ffffff;
|
|
8
|
+
|
|
9
|
+
--danger-color: #dc2626;
|
|
10
|
+
--danger-color-hover: #b91c1c;
|
|
11
|
+
--on-danger-color: #ffffff;
|
|
12
|
+
|
|
13
|
+
--warning-color: #f59e0b;
|
|
14
|
+
--warning-color-hover: #d97706;
|
|
15
|
+
--on-warning-color: #020617;
|
|
16
|
+
|
|
17
|
+
--success-color: #16a34a;
|
|
18
|
+
--success-color-hover: #15803d;
|
|
19
|
+
--on-success-color: #ffffff;
|
|
20
|
+
|
|
21
|
+
--info-color: #0ea5e9;
|
|
22
|
+
--info-color-hover: #0284c7;
|
|
23
|
+
--on-info-color: #ffffff;
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* @tailng/theme - semantic/theme-indigo.css
|
|
2
|
+
Modern SaaS theme */
|
|
3
|
+
|
|
4
|
+
:where(html.theme-indigo, .theme-indigo) {
|
|
5
|
+
--primary-color: #4f46e5; /* indigo-600 */
|
|
6
|
+
--primary-color-hover: #4338ca; /* indigo-700 */
|
|
7
|
+
--on-primary-color: #ffffff;
|
|
8
|
+
|
|
9
|
+
--danger-color: #ef4444;
|
|
10
|
+
--danger-color-hover: #dc2626;
|
|
11
|
+
--on-danger-color: #ffffff;
|
|
12
|
+
|
|
13
|
+
--warning-color: #f59e0b;
|
|
14
|
+
--warning-color-hover: #d97706;
|
|
15
|
+
--on-warning-color: #020617;
|
|
16
|
+
|
|
17
|
+
--success-color: #22c55e;
|
|
18
|
+
--success-color-hover: #16a34a;
|
|
19
|
+
--on-success-color: #ffffff;
|
|
20
|
+
|
|
21
|
+
--info-color: #06b6d4;
|
|
22
|
+
--info-color-hover: #0891b2;
|
|
23
|
+
--on-info-color: #ffffff;
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* @tailng/theme - semantic/theme-rose.css
|
|
2
|
+
Soft but professional theme */
|
|
3
|
+
|
|
4
|
+
:where(html.theme-rose, .theme-rose) {
|
|
5
|
+
--primary-color: #e11d48; /* rose-600 */
|
|
6
|
+
--primary-color-hover: #be123c; /* rose-700 */
|
|
7
|
+
--on-primary-color: #ffffff;
|
|
8
|
+
|
|
9
|
+
--danger-color: #dc2626;
|
|
10
|
+
--danger-color-hover: #b91c1c;
|
|
11
|
+
--on-danger-color: #ffffff;
|
|
12
|
+
|
|
13
|
+
--warning-color: #f59e0b;
|
|
14
|
+
--warning-color-hover: #d97706;
|
|
15
|
+
--on-warning-color: #020617;
|
|
16
|
+
|
|
17
|
+
--success-color: #22c55e;
|
|
18
|
+
--success-color-hover: #16a34a;
|
|
19
|
+
--on-success-color: #ffffff;
|
|
20
|
+
|
|
21
|
+
--info-color: #0ea5e9;
|
|
22
|
+
--info-color-hover: #0284c7;
|
|
23
|
+
--on-info-color: #ffffff;
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* @tailng/theme - semantic/theme-slate.css
|
|
2
|
+
Enterprise neutral theme */
|
|
3
|
+
|
|
4
|
+
:where(html.theme-slate, .theme-slate) {
|
|
5
|
+
--primary-color: #334155; /* slate-700 */
|
|
6
|
+
--primary-color-hover: #1e293b; /* slate-800 */
|
|
7
|
+
--on-primary-color: #ffffff;
|
|
8
|
+
|
|
9
|
+
--danger-color: #dc2626;
|
|
10
|
+
--danger-color-hover: #b91c1c;
|
|
11
|
+
--on-danger-color: #ffffff;
|
|
12
|
+
|
|
13
|
+
--warning-color: #f59e0b;
|
|
14
|
+
--warning-color-hover: #d97706;
|
|
15
|
+
--on-warning-color: #020617;
|
|
16
|
+
|
|
17
|
+
--success-color: #16a34a;
|
|
18
|
+
--success-color-hover: #15803d;
|
|
19
|
+
--on-success-color: #ffffff;
|
|
20
|
+
|
|
21
|
+
--info-color: #0ea5e9;
|
|
22
|
+
--info-color-hover: #0284c7;
|
|
23
|
+
--on-info-color: #ffffff;
|
|
24
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Config } from 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
declare const radii: {
|
|
4
|
+
readonly sm: "var(--radius-sm)";
|
|
5
|
+
readonly md: "var(--radius-md)";
|
|
6
|
+
readonly lg: "var(--radius-lg)";
|
|
7
|
+
};
|
|
8
|
+
declare const motion: {
|
|
9
|
+
readonly fast: "var(--duration-fast)";
|
|
10
|
+
readonly normal: "var(--duration-normal)";
|
|
11
|
+
readonly slow: "var(--duration-slow)";
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
declare const colors: {
|
|
15
|
+
readonly bg: "var(--background-color)";
|
|
16
|
+
readonly fg: "var(--text-color)";
|
|
17
|
+
readonly border: "var(--border-color)";
|
|
18
|
+
readonly primary: "var(--primary-color)";
|
|
19
|
+
readonly danger: "var(--danger-color)";
|
|
20
|
+
readonly warning: "var(--warning-color)";
|
|
21
|
+
readonly success: "var(--success-color)";
|
|
22
|
+
readonly info: "var(--info-color)";
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Tailwind preset for @tailng/theme.
|
|
27
|
+
* Map Tailwind colors to CSS variables (no hardcoded colors here).
|
|
28
|
+
*/
|
|
29
|
+
declare const tailngPreset: Partial<Config>;
|
|
30
|
+
|
|
31
|
+
export { colors, motion, radii, tailngPreset };
|