Skip to content

Commit c67233c

Browse files
Use color-mix(…) for non hex values
1 parent ac14abf commit c67233c

File tree

1 file changed

+21
-24
lines changed

1 file changed

+21
-24
lines changed

src/styles.js

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,21 @@ const round = (num) =>
77
.replace(/\.0$/, '')
88
const rem = (px) => `${round(px / 16)}rem`
99
const em = (px, base) => `${round(px / base)}em`
10-
const isHex = (hex) => /^#[0-9A-F]{6}$/i.test(hex)
11-
const hexToRgb = (hex) => {
12-
hex = hex.replace('#', '')
10+
const opacity = (color, opacity) => {
11+
// In v3, the colors are hex encoded and a previous typography plugin version
12+
// only handled these values. We keep the old behavior for backward
13+
// compatibility with v3 codebases but use color-mix for any other color
14+
// values.
15+
hex = color.replace('#', '')
1316
hex = hex.length === 3 ? hex.replace(/./g, '$&$&') : hex
1417
const r = parseInt(hex.substring(0, 2), 16)
1518
const g = parseInt(hex.substring(2, 4), 16)
1619
const b = parseInt(hex.substring(4, 6), 16)
17-
return `${r} ${g} ${b}`
20+
21+
if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) {
22+
return `color-mix(in oklab, ${color} ${opacity}, transparent)`
23+
}
24+
return `rgb(${r}, ${g}, ${b} / ${opacity})`
1825
}
1926

2027
let defaultModifiers = {
@@ -1060,9 +1067,7 @@ let defaultModifiers = {
10601067
'--tw-prose-quote-borders': colors.slate[200],
10611068
'--tw-prose-captions': colors.slate[500],
10621069
'--tw-prose-kbd': colors.slate[900],
1063-
'--tw-prose-kbd-shadows': isHex(colors.slate[900])
1064-
? `rgb(${hexToRgb(colors.slate[900])} / 10%)`
1065-
: colors.slate[900].replace(")", " / .1)"),
1070+
'--tw-prose-kbd-shadows': opacity(colors.slate[900], '10%'),
10661071
'--tw-prose-code': colors.slate[900],
10671072
'--tw-prose-pre-code': colors.slate[200],
10681073
'--tw-prose-pre-bg': colors.slate[800],
@@ -1080,7 +1085,7 @@ let defaultModifiers = {
10801085
'--tw-prose-invert-quote-borders': colors.slate[700],
10811086
'--tw-prose-invert-captions': colors.slate[400],
10821087
'--tw-prose-invert-kbd': colors.white,
1083-
'--tw-prose-invert-kbd-shadows': `rgb(${hexToRgb(colors.white)} / 10%)`,
1088+
'--tw-prose-invert-kbd-shadows': opacity(colors.white, '10%'),
10841089
'--tw-prose-invert-code': colors.white,
10851090
'--tw-prose-invert-pre-code': colors.slate[300],
10861091
'--tw-prose-invert-pre-bg': 'rgb(0 0 0 / 50%)',
@@ -1103,9 +1108,7 @@ let defaultModifiers = {
11031108
'--tw-prose-quote-borders': colors.gray[200],
11041109
'--tw-prose-captions': colors.gray[500],
11051110
'--tw-prose-kbd': colors.gray[900],
1106-
'--tw-prose-kbd-shadows': isHex(colors.gray[900])
1107-
? `rgb(${hexToRgb(colors.gray[900])} / 10%)`
1108-
: colors.gray[900].replace(")", " / .1)"),
1111+
'--tw-prose-kbd-shadows': opacity(colors.gray[900], '10%'),
11091112
'--tw-prose-code': colors.gray[900],
11101113
'--tw-prose-pre-code': colors.gray[200],
11111114
'--tw-prose-pre-bg': colors.gray[800],
@@ -1123,7 +1126,7 @@ let defaultModifiers = {
11231126
'--tw-prose-invert-quote-borders': colors.gray[700],
11241127
'--tw-prose-invert-captions': colors.gray[400],
11251128
'--tw-prose-invert-kbd': colors.white,
1126-
'--tw-prose-invert-kbd-shadows': `rgb(${hexToRgb(colors.white)} / 10%)`,
1129+
'--tw-prose-invert-kbd-shadows': opacity(colors.white, '10%'),
11271130
'--tw-prose-invert-code': colors.white,
11281131
'--tw-prose-invert-pre-code': colors.gray[300],
11291132
'--tw-prose-invert-pre-bg': 'rgb(0 0 0 / 50%)',
@@ -1146,9 +1149,7 @@ let defaultModifiers = {
11461149
'--tw-prose-quote-borders': colors.zinc[200],
11471150
'--tw-prose-captions': colors.zinc[500],
11481151
'--tw-prose-kbd': colors.zinc[900],
1149-
'--tw-prose-kbd-shadows': isHex(colors.zinc[900])
1150-
? `rgb(${hexToRgb(colors.zinc[900])} / 10%)`
1151-
: colors.zinc[900].replace(")", " / .1)"),
1152+
'--tw-prose-kbd-shadows': opacity(colors.zinc[900], '10%'),
11521153
'--tw-prose-code': colors.zinc[900],
11531154
'--tw-prose-pre-code': colors.zinc[200],
11541155
'--tw-prose-pre-bg': colors.zinc[800],
@@ -1166,7 +1167,7 @@ let defaultModifiers = {
11661167
'--tw-prose-invert-quote-borders': colors.zinc[700],
11671168
'--tw-prose-invert-captions': colors.zinc[400],
11681169
'--tw-prose-invert-kbd': colors.white,
1169-
'--tw-prose-invert-kbd-shadows': `rgb(${hexToRgb(colors.white)} / 10%)`,
1170+
'--tw-prose-invert-kbd-shadows': opacity(colors.white, '10%'),
11701171
'--tw-prose-invert-code': colors.white,
11711172
'--tw-prose-invert-pre-code': colors.zinc[300],
11721173
'--tw-prose-invert-pre-bg': 'rgb(0 0 0 / 50%)',
@@ -1189,9 +1190,7 @@ let defaultModifiers = {
11891190
'--tw-prose-quote-borders': colors.neutral[200],
11901191
'--tw-prose-captions': colors.neutral[500],
11911192
'--tw-prose-kbd': colors.neutral[900],
1192-
'--tw-prose-kbd-shadows': isHex(colors.neutral[900])
1193-
? `rgb(${hexToRgb(colors.neutral[900])} / 10%)`
1194-
: colors.neutral[900].replace(")", " / .1)"),
1193+
'--tw-prose-kbd-shadows': opacity(colors.neutral[900], '10%'),
11951194
'--tw-prose-code': colors.neutral[900],
11961195
'--tw-prose-pre-code': colors.neutral[200],
11971196
'--tw-prose-pre-bg': colors.neutral[800],
@@ -1209,7 +1208,7 @@ let defaultModifiers = {
12091208
'--tw-prose-invert-quote-borders': colors.neutral[700],
12101209
'--tw-prose-invert-captions': colors.neutral[400],
12111210
'--tw-prose-invert-kbd': colors.white,
1212-
'--tw-prose-invert-kbd-shadows': `rgb(${hexToRgb(colors.white)} / 10%)`,
1211+
'--tw-prose-invert-kbd-shadows': opacity(colors.white, '10%'),
12131212
'--tw-prose-invert-code': colors.white,
12141213
'--tw-prose-invert-pre-code': colors.neutral[300],
12151214
'--tw-prose-invert-pre-bg': 'rgb(0 0 0 / 50%)',
@@ -1232,9 +1231,7 @@ let defaultModifiers = {
12321231
'--tw-prose-quote-borders': colors.stone[200],
12331232
'--tw-prose-captions': colors.stone[500],
12341233
'--tw-prose-kbd': colors.stone[900],
1235-
'--tw-prose-kbd-shadows': isHex(colors.stone[900])
1236-
? `rgb(${hexToRgb(colors.stone[900])} / 10%)`
1237-
: colors.stone[900].replace(")", " / .1)"),
1234+
'--tw-prose-kbd-shadows': opacity(colors.stone[900], '10%'),
12381235
'--tw-prose-code': colors.stone[900],
12391236
'--tw-prose-pre-code': colors.stone[200],
12401237
'--tw-prose-pre-bg': colors.stone[800],
@@ -1252,7 +1249,7 @@ let defaultModifiers = {
12521249
'--tw-prose-invert-quote-borders': colors.stone[700],
12531250
'--tw-prose-invert-captions': colors.stone[400],
12541251
'--tw-prose-invert-kbd': colors.white,
1255-
'--tw-prose-invert-kbd-shadows': `rgb(${hexToRgb(colors.white)} / 10%)`,
1252+
'--tw-prose-invert-kbd-shadows': opacity(colors.white, '10%'),
12561253
'--tw-prose-invert-code': colors.white,
12571254
'--tw-prose-invert-pre-code': colors.stone[300],
12581255
'--tw-prose-invert-pre-bg': 'rgb(0 0 0 / 50%)',

0 commit comments

Comments
 (0)