-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtailwind.config.js
More file actions
122 lines (119 loc) · 3.75 KB
/
tailwind.config.js
File metadata and controls
122 lines (119 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// See the Tailwind configuration guide for advanced usage
// https://tailwindcss.com/docs/configuration
const plugin = require("tailwindcss/plugin");
const fs = require("fs");
const path = require("path");
module.exports = {
darkMode: "class",
content: ["./js/**/*.js", "../lib/*_web.ex", "../lib/*_web/**/*.*ex"],
theme: {
extend: {
colors: {
terminal: {
50: '#fafafa', // light bg-primary
100: '#f0f0f0', // light bg-surface
200: '#e5e5e5', // light bg-surface-alt
300: '#d4d4d4', // light border
400: '#71717a', // muted text (both modes)
500: '#3f3f46', // dark muted
600: '#2a2a2a', // dark border
700: '#1a1a1a', // dark bg-surface-alt
800: '#111111', // dark bg-surface
900: '#0a0a0a', // dark bg-primary
950: '#050505', // darkest
},
accent: {
DEFAULT: '#00ff41',
light: '#16a34a', // for light mode
muted: '#38ef7d',
dim: '#22c55e', // light mode muted
dark: '#0d7a2e', // very dark for bg tints
},
danger: {
DEFAULT: '#ef4444',
dark: '#dc2626',
},
},
boxShadow: {
'glow-sm': '0 0 8px rgba(0, 255, 65, 0.15)',
'glow': '0 0 15px rgba(0, 255, 65, 0.25)',
'glow-accent': '0 0 20px rgba(0, 255, 65, 0.3)',
},
fontFamily: {
mono: ['JetBrains Mono', 'Fira Code', 'monospace'],
sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],
},
},
},
plugins: [
require("@tailwindcss/forms"),
// Allows prefixing tailwind classes with LiveView classes to add rules
// only when LiveView classes are applied, for example:
//
// <div class="phx-click-loading:animate-ping">
//
plugin(({ addVariant }) =>
addVariant("phx-no-feedback", [
".phx-no-feedback&",
".phx-no-feedback &",
]),
),
plugin(({ addVariant }) =>
addVariant("phx-click-loading", [
".phx-click-loading&",
".phx-click-loading &",
]),
),
plugin(({ addVariant }) =>
addVariant("phx-submit-loading", [
".phx-submit-loading&",
".phx-submit-loading &",
]),
),
plugin(({ addVariant }) =>
addVariant("phx-change-loading", [
".phx-change-loading&",
".phx-change-loading &",
]),
),
// Embeds Hero Icons (https://heroicons.com) into your app.css bundle
// See your `CoreComponents.icon/1` for more information.
//
plugin(function ({ matchComponents, theme }) {
let iconsDir = path.join(__dirname, "../priv/hero_icons/optimized");
let values = {};
let icons = [
["", "/24/outline"],
["-solid", "/24/solid"],
["-mini", "/20/solid"],
];
icons.forEach(([suffix, dir]) => {
fs.readdirSync(path.join(iconsDir, dir)).map((file) => {
let name = path.basename(file, ".svg") + suffix;
values[name] = { name, fullPath: path.join(iconsDir, dir, file) };
});
});
matchComponents(
{
hero: ({ name, fullPath }) => {
let content = fs
.readFileSync(fullPath)
.toString()
.replace(/\r?\n|\r/g, "");
return {
[`--hero-${name}`]: `url('data:image/svg+xml;utf8,${content}')`,
"-webkit-mask": `var(--hero-${name})`,
mask: `var(--hero-${name})`,
"background-color": "currentColor",
"vertical-align": "middle",
display: "inline-block",
width: theme("spacing.5"),
height: theme("spacing.5"),
};
},
},
{ values },
);
}),
],
};