Created
April 20, 2021 12:56
-
-
Save davidhellmann/b845c676f10c95a9a1794855f3b2bb7f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| * Tailwind Prose Settings | |
| */ | |
| const settings = require('./tailwind.settings'); | |
| const settingsColors = require('./tailwind.settings.colors'); | |
| const colorMap = { | |
| colorDefault: settingsColors.gray['700'], | |
| colorLead: settingsColors.gray['600'], | |
| colorLink: settingsColors.gray['900'], | |
| colorLiBullet: settingsColors.gray['300'], | |
| colorBorder: settingsColors.gray['200'], | |
| colorFigCaption: settingsColors.gray['500'], | |
| colorPre: settingsColors.gray['200'], | |
| colorPreBg: settingsColors.gray['800'], | |
| }; | |
| const round = num => | |
| num | |
| .toFixed(7) | |
| .replace(/(\.[0-9]+?)0+$/, '$1') | |
| .replace(/\.0$/, ''); | |
| const em = (px, base) => `${round(px / base)}em`; | |
| module.exports = theme => { | |
| const output = { | |
| DEFAULT: { | |
| css: [ | |
| { | |
| color: colorMap.colorDefault, | |
| maxWidth: '65ch', | |
| '[class~="lead"]': { | |
| color: colorMap.colorLead, | |
| }, | |
| a: { | |
| color: colorMap.colorLink, | |
| textDecoration: 'underline', | |
| fontWeight: '500', | |
| }, | |
| strong: { | |
| color: null, | |
| fontWeight: '600', | |
| }, | |
| 'ol > li': { | |
| position: 'relative', | |
| }, | |
| 'ol > li::before': { | |
| content: 'counter(list-item) "."', | |
| position: 'absolute', | |
| fontWeight: '400', | |
| color: null, | |
| }, | |
| 'ul > li': { | |
| position: 'relative', | |
| }, | |
| 'ul > li::before': { | |
| content: '""', | |
| position: 'absolute', | |
| backgroundColor: colorMap.colorLiBullet, | |
| borderRadius: '50%', | |
| }, | |
| hr: { | |
| borderColor: colorMap.colorBorder, | |
| borderTopWidth: 1, | |
| }, | |
| blockquote: { | |
| fontWeight: '500', | |
| fontStyle: 'italic', | |
| color: null, | |
| borderLeftWidth: '0.25rem', | |
| borderLeftColor: colorMap.colorBorder, | |
| quotes: '"\\201C""\\201D""\\2018""\\2019"', | |
| }, | |
| 'blockquote p:first-of-type::before': { | |
| content: 'open-quote', | |
| }, | |
| 'blockquote p:last-of-type::after': { | |
| content: 'close-quote', | |
| }, | |
| h1: { | |
| color: null, | |
| fontWeight: '800', | |
| }, | |
| h2: { | |
| color: null, | |
| fontWeight: '700', | |
| }, | |
| h3: { | |
| color: null, | |
| fontWeight: '600', | |
| }, | |
| h4: { | |
| color: null, | |
| fontWeight: '600', | |
| }, | |
| 'figure figcaption': { | |
| color: colorMap.colorFigCaption, | |
| }, | |
| code: { | |
| color: null, | |
| fontWeight: '600', | |
| }, | |
| 'code::before': { | |
| content: '"`"', | |
| }, | |
| 'code::after': { | |
| content: '"`"', | |
| }, | |
| 'a code': { | |
| color: null, | |
| }, | |
| pre: { | |
| color: colorMap.colorPre, | |
| backgroundColor: colorMap.colorPreBg, | |
| overflowX: 'auto', | |
| }, | |
| 'pre code': { | |
| backgroundColor: 'transparent', | |
| borderWidth: '0', | |
| borderRadius: '0', | |
| padding: '0', | |
| fontWeight: '400', | |
| color: 'inherit', | |
| fontSize: 'inherit', | |
| fontFamily: theme('fontFamily.mono').join(', '), | |
| lineHeight: 'inherit', | |
| }, | |
| 'pre code::before': { | |
| content: '""', | |
| }, | |
| 'pre code::after': { | |
| content: '""', | |
| }, | |
| table: { | |
| width: '100%', | |
| tableLayout: 'auto', | |
| textAlign: 'left', | |
| marginTop: em(32, 16), | |
| marginBottom: em(32, 16), | |
| }, | |
| thead: { | |
| color: null, | |
| fontWeight: '600', | |
| borderBottomWidth: '1px', | |
| borderBottomColor: colorMap.colorBorder, | |
| }, | |
| 'thead th': { | |
| verticalAlign: 'bottom', | |
| }, | |
| 'tbody tr': { | |
| borderBottomWidth: '1px', | |
| borderBottomColor: colorMap.colorBorder, | |
| }, | |
| 'tbody tr:last-child': { | |
| borderBottomWidth: '0', | |
| }, | |
| 'tbody td': { | |
| verticalAlign: 'top', | |
| }, | |
| }, | |
| { | |
| fontSize: `${settings.typography.fontSize}rem`, | |
| lineHeight: settings.typography.lineHeight, | |
| p: { | |
| marginTop: em(20, 16), | |
| marginBottom: em(20, 16), | |
| }, | |
| '[class~="lead"]': { | |
| fontSize: theme('fontSize.xl[0]'), | |
| lineHeight: settings.typography.lineHeight - 0.2, | |
| marginTop: em(24, 20), | |
| marginBottom: em(24, 20), | |
| }, | |
| blockquote: { | |
| marginTop: em(32, 20), | |
| marginBottom: em(32, 20), | |
| paddingLeft: em(20, 20), | |
| }, | |
| h1: { | |
| fontSize: theme('fontSize.3xl[0]'), | |
| marginTop: '0', | |
| marginBottom: em(32, 36), | |
| lineHeight: theme('fontSize.3xl[1]'), | |
| }, | |
| h2: { | |
| fontSize: theme('fontSize.2xl[0]'), | |
| marginTop: em(48, 24), | |
| marginBottom: em(24, 24), | |
| lineHeight: theme('fontSize.2xl[1]'), | |
| }, | |
| h3: { | |
| fontSize: theme('fontSize.xl[0]'), | |
| marginTop: em(32, 20), | |
| marginBottom: em(12, 20), | |
| lineHeight: theme('fontSize.xl[1]'), | |
| }, | |
| h4: { | |
| marginTop: em(24, 16), | |
| marginBottom: em(8, 16), | |
| lineHeight: theme('fontSize.l[1]'), | |
| }, | |
| img: { | |
| marginTop: em(32, 16), | |
| marginBottom: em(32, 16), | |
| }, | |
| video: { | |
| marginTop: em(32, 16), | |
| marginBottom: em(32, 16), | |
| }, | |
| figure: { | |
| marginTop: em(32, 16), | |
| marginBottom: em(32, 16), | |
| }, | |
| 'figure > *': { | |
| marginTop: '0', | |
| marginBottom: '0', | |
| }, | |
| 'figure figcaption': { | |
| fontSize: theme('fontSize.sm[0]'), | |
| lineHeight: settings.typography.lineHeight, | |
| marginTop: em(12, 14), | |
| }, | |
| code: { | |
| fontSize: theme('fontSize.sm[0]'), | |
| }, | |
| 'h2 code': { | |
| fontSize: em(21, 24), | |
| }, | |
| 'h3 code': { | |
| fontSize: em(18, 20), | |
| }, | |
| pre: { | |
| fontSize: theme('fontSize.sm[0]'), | |
| lineHeight: settings.typography.lineHeight, | |
| marginTop: em(24, 14), | |
| marginBottom: em(24, 14), | |
| borderRadius: em(6), | |
| paddingTop: em(12, 14), | |
| paddingRight: em(16, 14), | |
| paddingBottom: em(12, 14), | |
| paddingLeft: em(16, 14), | |
| }, | |
| ol: { | |
| marginTop: em(20, 16), | |
| marginBottom: em(20, 16), | |
| }, | |
| ul: { | |
| marginTop: em(20, 16), | |
| marginBottom: em(20, 16), | |
| }, | |
| li: { | |
| marginTop: em(8, 16), | |
| marginBottom: em(8, 16), | |
| }, | |
| 'ol > li': { | |
| paddingLeft: em(28, 16), | |
| }, | |
| 'ol > li::before': { | |
| left: '0', | |
| }, | |
| 'ul > li': { | |
| paddingLeft: em(28, 16), | |
| }, | |
| 'ul > li::before': { | |
| width: em(6, 16), | |
| height: em(6, 16), | |
| top: `calc(${em(28 / 2, 16)} - ${em(3, 16)})`, | |
| left: em(4, 16), | |
| }, | |
| '> ul > li p': { | |
| marginTop: em(12, 16), | |
| marginBottom: em(12, 16), | |
| }, | |
| '> ul > li > *:first-child': { | |
| marginTop: em(20, 16), | |
| }, | |
| '> ul > li > *:last-child': { | |
| marginBottom: em(20, 16), | |
| }, | |
| '> ol > li > *:first-child': { | |
| marginTop: em(20, 16), | |
| }, | |
| '> ol > li > *:last-child': { | |
| marginBottom: em(20, 16), | |
| }, | |
| 'ul ul, ul ol, ol ul, ol ol': { | |
| marginTop: em(12, 16), | |
| marginBottom: em(12, 16), | |
| }, | |
| hr: { | |
| marginTop: em(48, 16), | |
| marginBottom: em(48, 16), | |
| }, | |
| 'hr + *': { | |
| marginTop: '0', | |
| }, | |
| 'h2 + *': { | |
| marginTop: '0', | |
| }, | |
| 'h3 + *': { | |
| marginTop: '0', | |
| }, | |
| 'h4 + *': { | |
| marginTop: '0', | |
| }, | |
| table: { | |
| fontSize: theme('fontSize.sm[0]'), | |
| lineHeight: settings.typography.lineHeight, | |
| }, | |
| 'thead th': { | |
| paddingRight: em(8, 14), | |
| paddingBottom: em(8, 14), | |
| paddingLeft: em(8, 14), | |
| }, | |
| 'thead th:first-child': { | |
| paddingLeft: '0', | |
| }, | |
| 'thead th:last-child': { | |
| paddingRight: '0', | |
| }, | |
| 'tbody td': { | |
| paddingTop: em(8, 14), | |
| paddingRight: em(8, 14), | |
| paddingBottom: em(8, 14), | |
| paddingLeft: em(8, 14), | |
| }, | |
| 'tbody td:first-child': { | |
| paddingLeft: '0', | |
| }, | |
| 'tbody td:last-child': { | |
| paddingRight: '0', | |
| }, | |
| }, | |
| { | |
| '> :first-child': { | |
| marginTop: '0', | |
| }, | |
| '> :last-child': { | |
| marginBottom: '0', | |
| }, | |
| }, | |
| ], | |
| }, | |
| md: { | |
| css: [ | |
| { | |
| fontSize: theme('fontSize.lg[0]'), | |
| lineHeight: settings.typography.lineHeight, | |
| p: { | |
| marginTop: em(24, 20), | |
| marginBottom: em(24, 20), | |
| }, | |
| '[class~="lead"]': { | |
| fontSize: theme('fontSize.2xl[0]'), | |
| lineHeight: settings.typography.lineHeight - 0.2, | |
| marginTop: em(24, 24), | |
| marginBottom: em(24, 24), | |
| }, | |
| blockquote: { | |
| marginTop: em(48, 30), | |
| marginBottom: em(48, 30), | |
| paddingLeft: em(32, 30), | |
| }, | |
| h1: { | |
| fontSize: theme('fontSize.4xl[0]'), | |
| marginTop: '0', | |
| marginBottom: em(48, 56), | |
| lineHeight: theme('fontSize.4xl[1]'), | |
| }, | |
| h2: { | |
| fontSize: theme('fontSize.3xl[0]'), | |
| marginTop: em(56, 36), | |
| marginBottom: em(32, 36), | |
| lineHeight: theme('fontSize.3xl[1]'), | |
| }, | |
| h3: { | |
| fontSize: theme('fontSize.2xl[0]'), | |
| marginTop: em(48, 30), | |
| marginBottom: em(20, 30), | |
| lineHeight: theme('fontSize.2xl[1]'), | |
| }, | |
| h4: { | |
| marginTop: em(36, 20), | |
| marginBottom: em(12, 20), | |
| lineHeight: theme('fontSize.xl[1]'), | |
| }, | |
| img: { | |
| marginTop: em(40, 20), | |
| marginBottom: em(40, 20), | |
| }, | |
| video: { | |
| marginTop: em(40, 20), | |
| marginBottom: em(40, 20), | |
| }, | |
| figure: { | |
| marginTop: em(40, 20), | |
| marginBottom: em(40, 20), | |
| }, | |
| 'figure > *': { | |
| marginTop: '0', | |
| marginBottom: '0', | |
| }, | |
| 'figure figcaption': { | |
| fontSize: theme('fontSize.base[0]'), | |
| lineHeight: settings.typography.lineHeight, | |
| marginTop: em(18, 18), | |
| }, | |
| code: { | |
| fontSize: theme('fontSize.base[0]'), | |
| }, | |
| 'h2 code': { | |
| fontSize: em(31, 36), | |
| }, | |
| 'h3 code': { | |
| fontSize: em(27, 30), | |
| }, | |
| pre: { | |
| fontSize: theme('fontSize.base[0]'), | |
| lineHeight: settings.typography.lineHeight, | |
| marginTop: em(36, 18), | |
| marginBottom: em(36, 18), | |
| borderRadius: em(8), | |
| paddingTop: em(20, 18), | |
| paddingRight: em(24, 18), | |
| paddingBottom: em(20, 18), | |
| paddingLeft: em(24, 18), | |
| }, | |
| ol: { | |
| marginTop: em(24, 20), | |
| marginBottom: em(24, 20), | |
| }, | |
| ul: { | |
| marginTop: em(24, 20), | |
| marginBottom: em(24, 20), | |
| }, | |
| li: { | |
| marginTop: em(12, 20), | |
| marginBottom: em(12, 20), | |
| }, | |
| 'ol > li': { | |
| paddingLeft: em(36, 20), | |
| }, | |
| 'ol > li::before': { | |
| left: '0', | |
| }, | |
| 'ul > li': { | |
| paddingLeft: em(36, 20), | |
| }, | |
| 'ul > li::before': { | |
| width: em(7, 20), | |
| height: em(7, 20), | |
| top: `calc(${em(36 / 2, 20)} - ${em(3.5, 20)})`, | |
| left: em(5, 20), | |
| }, | |
| '> ul > li p': { | |
| marginTop: em(16, 20), | |
| marginBottom: em(16, 20), | |
| }, | |
| '> ul > li > *:first-child': { | |
| marginTop: em(24, 20), | |
| }, | |
| '> ul > li > *:last-child': { | |
| marginBottom: em(24, 20), | |
| }, | |
| '> ol > li > *:first-child': { | |
| marginTop: em(24, 20), | |
| }, | |
| '> ol > li > *:last-child': { | |
| marginBottom: em(24, 20), | |
| }, | |
| 'ul ul, ul ol, ol ul, ol ol': { | |
| marginTop: em(16, 20), | |
| marginBottom: em(16, 20), | |
| }, | |
| hr: { | |
| marginTop: em(56, 20), | |
| marginBottom: em(56, 20), | |
| }, | |
| 'hr + *': { | |
| marginTop: '0', | |
| }, | |
| 'h2 + *': { | |
| marginTop: '0', | |
| }, | |
| 'h3 + *': { | |
| marginTop: '0', | |
| }, | |
| 'h4 + *': { | |
| marginTop: '0', | |
| }, | |
| table: { | |
| fontSize: theme('fontSize.base[0]'), | |
| lineHeight: settings.typography.lineHeight, | |
| }, | |
| 'thead th': { | |
| paddingRight: em(12, 18), | |
| paddingBottom: em(16, 18), | |
| paddingLeft: em(12, 18), | |
| }, | |
| 'thead th:first-child': { | |
| paddingLeft: '0', | |
| }, | |
| 'thead th:last-child': { | |
| paddingRight: '0', | |
| }, | |
| 'tbody td': { | |
| paddingTop: em(16, 18), | |
| paddingRight: em(12, 18), | |
| paddingBottom: em(16, 18), | |
| paddingLeft: em(12, 18), | |
| }, | |
| 'tbody td:first-child': { | |
| paddingLeft: '0', | |
| }, | |
| 'tbody td:last-child': { | |
| paddingRight: '0', | |
| }, | |
| }, | |
| { | |
| '> :first-child': { | |
| marginTop: '0', | |
| }, | |
| '> :last-child': { | |
| marginBottom: '0', | |
| }, | |
| }, | |
| ], | |
| }, | |
| }; | |
| return output; | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment