Skip to content

Commit

Permalink
Replacing css/themed and css/Variables formatter with css/advanced (#931
Browse files Browse the repository at this point in the history
)

* replacing themed

* replace cssVariables formatter
  • Loading branch information
lukasoppermann committed Apr 25, 2024
1 parent 0e7641a commit 518fbfc
Show file tree
Hide file tree
Showing 10 changed files with 91 additions and 160 deletions.
5 changes: 5 additions & 0 deletions .changeset/popular-dryers-end.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@primer/primitives': minor
---

Replacing css/themed and css/variables with css/advanced
18 changes: 3 additions & 15 deletions src/PrimerStyleDictionary.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,10 @@ import {
javascriptEsm,
typescriptExportDefinition,
jsonNestedPrefixed,
cssThemed,
cssCustomMedia,
jsonOneDimensional,
jsonPostCssFallback,
cssMediaQuery,
cssVariables,
cssAdvanced,
jsonFigma,
} from './formats'

Expand All @@ -50,25 +48,15 @@ StyleDictionary.registerParser(w3cJsonParser)
*
*/
StyleDictionary.registerFormat({
name: 'css/themed',
formatter: cssThemed,
name: 'css/advanced',
formatter: cssAdvanced,
})

StyleDictionary.registerFormat({
name: 'css/customMedia',
formatter: cssCustomMedia,
})

StyleDictionary.registerFormat({
name: 'css/mediaQuery',
formatter: cssMediaQuery,
})

StyleDictionary.registerFormat({
name: 'css/variables',
formatter: cssVariables,
})

StyleDictionary.registerFormat({
name: 'javascript/esm',
formatter: javascriptEsm,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {cssMediaQuery} from './cssMediaQuery'
import {cssAdvanced} from './cssAdvanced'
import {getMockDictionary, getMockFormatterArguments, getMockToken} from '../test-utilities'
import {format} from 'prettier'
import type {TransformedToken} from 'style-dictionary'
Expand All @@ -12,7 +12,7 @@ describe('Format: tokens nested in media query', () => {
}`,
{parser: 'css', printWidth: 500},
)
expect(cssMediaQuery(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})

it('Wrap all tokens in screen media query', () => {
Expand All @@ -37,7 +37,7 @@ describe('Format: tokens nested in media query', () => {
}`,
{parser: 'css', printWidth: 500},
)
expect(cssMediaQuery(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})

it('Ignore if no matching media query is found', () => {
Expand All @@ -55,7 +55,7 @@ describe('Format: tokens nested in media query', () => {
},
},
})
expect(cssMediaQuery(input)).toStrictEqual('')
expect(cssAdvanced(input)).toStrictEqual('')
})

it('Wraps in defined media query if files match', () => {
Expand Down Expand Up @@ -91,7 +91,7 @@ describe('Format: tokens nested in media query', () => {
}`,
{parser: 'css', printWidth: 500},
)
expect(cssMediaQuery(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})

it('Show comment if option.description is true', () => {
Expand Down Expand Up @@ -131,7 +131,7 @@ describe('Format: tokens nested in media query', () => {
}`,
{parser: 'css', printWidth: 500},
)
expect(cssMediaQuery(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})

it('Hides comment if option.description is false or not set', () => {
Expand Down Expand Up @@ -197,7 +197,7 @@ describe('Format: tokens nested in media query', () => {
}`,
{parser: 'css', printWidth: 500},
)
expect(cssMediaQuery(input)).toStrictEqual(expectedOutput)
expect(cssMediaQuery(inputUnset)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(inputUnset)).toStrictEqual(expectedOutput)
})
})
22 changes: 13 additions & 9 deletions src/formats/cssMediaQuery.ts → src/formats/cssAdvanced.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,14 @@ import {format} from 'prettier'
import type {LineFormatting} from 'style-dictionary/types/FormatHelpers'
const {fileHeader, formattedVariables} = StyleDictionary.formatHelpers

export const cssMediaQuery: StyleDictionary.Formatter = ({
const wrapWithSelector = (css: string, selector: string | false): string => {
// return without selector
if (selector === false || selector.trim().length === 0) return css
// return with selector
return `${selector} { ${css} }`
}

export const cssAdvanced: StyleDictionary.Formatter = ({
dictionary: originalDictionary,
options = {
queries: [],
Expand All @@ -16,7 +23,7 @@ export const cssMediaQuery: StyleDictionary.Formatter = ({
// get options
const {outputReferences, descriptions} = options
// selector
const selector = file.options?.selector || ':root'
const selector = file.options?.selector !== undefined ? file.options.selector : ':root'
// query extension property
const queryExtProp = file.options?.queryExtensionProperty || 'mediaQuery'
// get queries from file options
Expand Down Expand Up @@ -81,14 +88,11 @@ export const cssMediaQuery: StyleDictionary.Formatter = ({
// early abort if no matches
if (!filteredDictionary.allTokens.length) continue
// add tokens into root
const rootCss = `${selector} {${formattedVariables({
format: 'css',
dictionary: filteredDictionary,
outputReferences,
formatting,
})}}`
const css = formattedVariables({format: 'css', dictionary: filteredDictionary, outputReferences, formatting})
// wrap css
const cssWithSelector = wrapWithSelector(css, query.selector !== undefined ? query.selector : selector)
// add css with or without query
output.push(queryString ? `${queryString} { ${rootCss} }` : rootCss)
output.push(queryString ? `${queryString} { ${cssWithSelector} }` : cssWithSelector)
}
// return prettified
return format(output.join('\n'), {parser: 'css', printWidth: 500})
Expand Down
72 changes: 31 additions & 41 deletions src/formats/cssThemed.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {cssThemed} from './cssThemed'
import {cssAdvanced} from './cssAdvanced'
import {getMockFormatterArguments} from '../test-utilities'
import {format} from 'prettier'

Expand All @@ -14,15 +14,26 @@ describe('Format: Css Themed', () => {
printWidth: 500,
},
)
expect(cssThemed(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})

it('Formats tokens with custom selectors', () => {
const input = getMockFormatterArguments({
options: {
selector: `[data-color-mode="dark"][data-dark-theme="dark"]`,
selectorLight: `[data-color-mode="auto"][data-light-theme="dark"]`,
selectorDark: `[data-color-mode="auto"][data-dark-theme="dark"]`,
file: {
destination: 'dark.css',
options: {
showFileHeader: false,
queries: [
{
selector:
'[data-color-mode="dark"][data-dark-theme="dark"], [data-color-mode="auto"][data-light-theme="dark"]',
},
{
query: '@media (prefers-color-scheme: dark)',
selector: '[data-color-mode="auto"][data-dark-theme="dark"]',
},
],
},
},
})
const expectedOutput = format(
Expand All @@ -37,13 +48,22 @@ describe('Format: Css Themed', () => {
}`,
{parser: 'css', printWidth: 500},
)
expect(cssThemed(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})

it('Formats tokens with only options.selector', () => {
it('Formats tokens with only one selector', () => {
const input = getMockFormatterArguments({
options: {
selector: `[data-color-mode="dark"]`,
file: {
destination: 'dark.css',
options: {
showFileHeader: false,
selector: '',
queries: [
{
query: `[data-color-mode="dark"]`,
},
],
},
},
})
const expectedOutput = format(
Expand All @@ -52,36 +72,6 @@ describe('Format: Css Themed', () => {
}`,
{parser: 'css', printWidth: 500},
)
expect(cssThemed(input)).toStrictEqual(expectedOutput)
})

it('Formats tokens with only options.selectorLight', () => {
const input = getMockFormatterArguments({
options: {
selectorLight: `[data-color-mode="light"]`,
},
})
const expectedOutput = format(
`:root, [data-color-mode="light"]{
--red: transformedValue;
}`,
{parser: 'css', printWidth: 500},
)
expect(cssThemed(input)).toStrictEqual(expectedOutput)
})

it('Formats tokens with only options.selectorDark', () => {
const input = getMockFormatterArguments({
options: {
selectorLight: `[data-color-mode="dark"]`,
},
})
const expectedOutput = format(
`:root, [data-color-mode="dark"]{
--red: transformedValue;
}`,
{parser: 'css', printWidth: 500},
)
expect(cssThemed(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})
})
35 changes: 0 additions & 35 deletions src/formats/cssThemed.ts

This file was deleted.

24 changes: 16 additions & 8 deletions src/formats/cssVariables.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {cssVariables} from './cssVariables'
import {cssAdvanced} from './cssAdvanced'
import {getMockFormatterArguments} from '../test-utilities'
import {format} from 'prettier'

Expand All @@ -14,13 +14,17 @@ describe('Format: css/variables', () => {
printWidth: 500,
},
)
expect(cssVariables(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})

it('Formats tokens with custom selectors', () => {
const input = getMockFormatterArguments({
options: {
selector: `[data-color-mode="dark"]`,
file: {
destination: 'test.css',
options: {
showFileHeader: false,
selector: `[data-color-mode="dark"]`,
},
},
})
const expectedOutput = format(
Expand All @@ -29,13 +33,17 @@ describe('Format: css/variables', () => {
}`,
{parser: 'css', printWidth: 500},
)
expect(cssVariables(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})

it('Formats tokens with only options.selector', () => {
const input = getMockFormatterArguments({
options: {
selector: `[data-color-mode="dark"]`,
file: {
destination: 'test.css',
options: {
showFileHeader: false,
selector: `[data-color-mode="dark"]`,
},
},
})
const expectedOutput = format(
Expand All @@ -44,6 +52,6 @@ describe('Format: css/variables', () => {
}`,
{parser: 'css', printWidth: 500},
)
expect(cssVariables(input)).toStrictEqual(expectedOutput)
expect(cssAdvanced(input)).toStrictEqual(expectedOutput)
})
})
28 changes: 0 additions & 28 deletions src/formats/cssVariables.ts

This file was deleted.

4 changes: 1 addition & 3 deletions src/formats/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
export {cssThemed} from './cssThemed'
export {cssCustomMedia} from './cssCustomMedia'
export {cssMediaQuery} from './cssMediaQuery'
export {cssVariables} from './cssVariables'
export {cssAdvanced} from './cssAdvanced'
export {jsonFigma} from './jsonFigma'
export {javascriptCommonJs} from './javascriptCommonJs'
export {javascriptEsm} from './javascriptEsm'
Expand Down
Loading

0 comments on commit 518fbfc

Please sign in to comment.