diff --git a/.changeset/pretty-apes-pump.md b/.changeset/pretty-apes-pump.md
new file mode 100644
index 000000000..2620703a9
--- /dev/null
+++ b/.changeset/pretty-apes-pump.md
@@ -0,0 +1,5 @@
+---
+'@primer/primitives': patch
+---
+
+add option to remove descriptions from css output
diff --git a/.changeset/tricky-maps-buy.md b/.changeset/tricky-maps-buy.md
new file mode 100644
index 000000000..decfbe32d
--- /dev/null
+++ b/.changeset/tricky-maps-buy.md
@@ -0,0 +1,5 @@
+---
+"@primer/primitives": patch
+---
+
+Minor docs fixes
diff --git a/.github/workflows/a11y-contrast.yml b/.github/workflows/a11y-contrast.yml
index 653c04010..bb15cf34d 100644
--- a/.github/workflows/a11y-contrast.yml
+++ b/.github/workflows/a11y-contrast.yml
@@ -6,32 +6,12 @@ on:
- main
jobs:
- # JOB to run change detection
changes:
- runs-on: ubuntu-latest
- # Required permissions
- permissions:
- pull-requests: read
- # Set job outputs to values from filter step
- outputs:
- tokens: ${{ steps.filter.outputs.tokens }}
- # transformation: ${{ steps.filter.outputs.transformation }}
- steps:
- # For pull requests it's not necessary to checkout the code
- - uses: dorny/paths-filter@v2
- id: filter
- with:
- filters: |
- tokens:
- - 'src/tokens/**'
- - 'data/**'
- - name: No changes to tokens detected
- if: ${{ steps.filter.outputs.tokens == 'false' }}
- run: echo "No changes to tokens detected, skipping further jobs checking tokens"
+ uses: ./.github/workflows/hasChanged.yml
build:
needs: changes
- if: ${{ needs.changes.outputs.tokens == 'true' }}
+ if: needs.changes.outputs.oldTokens == 'true'
name: Check design token color contrast
runs-on: ubuntu-latest
steps:
@@ -42,9 +22,10 @@ jobs:
uses: actions/setup-node@v3
with:
node-version: 18
+ cache: 'npm'
- name: Install dependencies
- run: npm ci --no-audit --no-fund
+ run: npm ci --no-audit --no-fund --ignore-scripts
- name: Build tokens
run: npm run build # building v1 as they are currently used for contrast check
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index abdeefc4e..df259539b 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -19,81 +19,22 @@ jobs:
uses: actions/setup-node@v3
with:
node-version: 16
+ cache: 'npm'
- name: Install dependencies
- run: npm ci --legacy-peer-deps --no-audit --no-fund && cd docs && npm ci --legacy-peer-deps --no-audit --no-fund
+ run: npm ci --no-audit --no-fund --ignore-scripts
- name: Build v1 tokens
run: npm run build
- - name: Build v2 tokens
- run: npm run build:tokens
+ - name: Build v8 tokens
+ run: npm run build:next
- lint:
- if: ${{ github.repository == 'primer/primitives' }}
- name: Code linting check
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Set up Node.js
- uses: actions/setup-node@v3
- with:
- node-version: 16
-
- - name: Install dependencies
- run: npm ci --legacy-peer-deps --no-audit --no-fund && cd docs && npm ci --legacy-peer-deps --no-audit --no-fund
-
- - name: Build v1 tokens
- run: npm run build
-
- - name: Build v2 tokens
- run: npm run build:tokens
-
- - name: Lint
+ - name: Code linting check
run: npm run lint
- formatting:
- if: ${{ github.repository == 'primer/primitives' }}
- name: Code formatting check
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Set up Node.js
- uses: actions/setup-node@v3
- with:
- node-version: 16
-
- - name: Install dependencies
- run: npm ci --legacy-peer-deps --no-audit --no-fund && cd docs && npm ci --legacy-peer-deps --no-audit --no-fund
-
- - name: Lint
+ - name: Code formatting check
run: npm run format:check
- test:
- if: ${{ github.repository == 'primer/primitives' }}
- name: Unit tests
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Set up Node.js
- uses: actions/setup-node@v3
- with:
- node-version: 16
-
- - name: Install dependencies
- run: npm ci --legacy-peer-deps --no-audit --no-fund && cd docs && npm ci --legacy-peer-deps --no-audit --no-fund
-
- - name: Build v1 tokens
- run: npm run build
-
- - name: Build v2 tokens
- run: npm run build:tokens
-
- name: Run unit tests
- run: npm test
+ run: npm test
\ No newline at end of file
diff --git a/.github/workflows/consumer_test.yml b/.github/workflows/consumer_test.yml
index 44f41f9eb..e42afe729 100644
--- a/.github/workflows/consumer_test.yml
+++ b/.github/workflows/consumer_test.yml
@@ -11,24 +11,7 @@ env:
jobs:
changes:
- runs-on: ubuntu-latest
- # Required permissions
- permissions:
- pull-requests: read
- # Set job outputs to values from filter step
- outputs:
- outputAffected: ${{ steps.filter.outputs.outputAffected }}
- steps:
- # For pull requests it's not necessary to checkout the code
- - uses: dorny/paths-filter@v2
- id: filter
- with:
- list-files: shell
- filters: |
- outputAffected:
- - '!(*.md|**/**/*.md|**/**/*.test.ts|**/**/*.test.js|docs/**|storybook/**)'
- - name: Detecting changes that effect output
- run: echo ${{ steps.filter.outputs.outputAffected == 'true' && 'Committed changes may affect output' || 'Committed changes do not affect output' }}
+ uses: ./.github/workflows/hasChanged.yml
test:
needs: changes
@@ -48,7 +31,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v3
with:
- node-version: '16'
+ node-version: 16
- name: Caching dependencies
uses: actions/cache@v3
@@ -59,7 +42,7 @@ jobs:
${{ runner.os }}-node-
- name: Install local dependencies
- run: npm install --legacy-peer-deps
+ run: npm install --legacy-peer-deps --ignore-scripts
- name: Install consumer dependencies (reference)
run: pushd ${{env.TEST_FOLDER}}; npm install --legacy-peer-deps; popd
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index cd1f8e727..f92f44e0a 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -19,3 +19,4 @@ jobs:
install: npm ci --legacy-peer-deps --no-audit --no-fund && cd docs && npm ci --legacy-peer-deps --no-audit --no-fund && cd ..
build: npm run build:tokens && npm run build && npm run build:next && cd docs && npm run build
output_dir: docs/public
+
diff --git a/.github/workflows/deploy_preview.yml b/.github/workflows/deploy_preview.yml
index 94fc2f208..5c2232132 100644
--- a/.github/workflows/deploy_preview.yml
+++ b/.github/workflows/deploy_preview.yml
@@ -15,10 +15,11 @@ jobs:
uses: primer/.github/.github/workflows/deploy_preview.yml@main
with:
node_version: 18
- install: npm ci --no-audit --no-fund
+ install: npm ci --no-audit --no-fund --ignore-scripts && npm run install:storybook && npm run install:docs
build: npm run build:tokens && npm run build && npm run build:next && cd docs && npm run build:preview
output_dir: docs/public
+
post_storybook:
needs: deploy
name: Link storybook
diff --git a/.github/workflows/ui_test_primitives_diff.yml b/.github/workflows/design_token_diff.yml
similarity index 84%
rename from .github/workflows/ui_test_primitives_diff.yml
rename to .github/workflows/design_token_diff.yml
index ec759e228..7855ade54 100644
--- a/.github/workflows/ui_test_primitives_diff.yml
+++ b/.github/workflows/design_token_diff.yml
@@ -4,8 +4,11 @@ on:
pull_request:
jobs:
+ changes:
+ uses: ./.github/workflows/hasChanged.yml
+
test:
- if: ${{ github.repository == 'primer/primitives' }}
+ if: ${{ github.repository == 'primer/primitives' && needs.changes.outputs.outputAffected == 'true' }}
name: Primitives v2
runs-on: ubuntu-latest
steps:
@@ -21,7 +24,8 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v3
with:
- node-version: '16'
+ node-version: 16
+ cache: 'npm'
- name: Cache dependencies
uses: actions/cache@v3
@@ -32,10 +36,10 @@ jobs:
${{ runner.os }}-node-
- name: Install dependencies
- run: npm install --legacy-peer-deps
+ run: npm install --legacy-peer-deps --ignore-scripts
- name: Install dependencies (reference)
- run: pushd temp-main; npm install --legacy-peer-deps; popd
+ run: pushd temp-main; npm install --legacy-peer-deps --ignore-scripts; popd
- name: Build
run: npm run build:tokens
diff --git a/.github/workflows/diff-v8.yml b/.github/workflows/diff-v8.yml
new file mode 100644
index 000000000..6636cd2d4
--- /dev/null
+++ b/.github/workflows/diff-v8.yml
@@ -0,0 +1,128 @@
+# Posts a comment listing all the variables that changed in a PR
+name: Show diff for v8 design token changes
+on:
+ pull_request:
+ branches-ignore:
+ - 'changeset-release/**'
+jobs:
+ changes:
+ uses: ./.github/workflows/hasChanged.yml
+
+ diff:
+ needs: changes
+ if: ${{ needs.changes.outputs.tokens == 'true' }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Checkout base branch
+ uses: actions/checkout@v3
+ with:
+ ref: ${{ github.base_ref }}
+ path: base
+
+ - name: Set up Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16
+ cache: 'npm'
+
+ - name: Install dependencies
+ run: npm ci --no-audit --no-fund --include=dev --ignore-scripts
+
+ - name: Build v8 tokens
+ run: npm run build:next
+
+ - name: Install dependencies (base)
+ run: pushd base; npm i --no-audit --no-fund --ignore-scripts; popd
+
+ - name: Build (base)
+ run: pushd base; npm run build:next; popd
+
+ - name: Install dependecies for diffing
+ run: npm install shelljs
+
+ - name: Diff v8 tokens
+ uses: actions/github-script@v6
+ with:
+ script: |
+ const cssFolder = 'tokens-next-private/css'
+ const shell = require('shelljs')
+ const globber = await glob.create(cssFolder + '/**/**/*.css')
+ const files = await globber.glob()
+
+ // create diffs
+ const diffs = files.map(file => {
+ // run diff
+ const diff = shell.exec(`diff -u ${file.replace(cssFolder, 'base/' + cssFolder)} ${file}`)
+ // get filename
+ const regexRunnerPath = new RegExp('^[a-z\/]+\/tokens-next-private', 'g')
+ const filename = file.replaceAll(regexRunnerPath,'')
+
+ console.log('Checking diff for ' + filename + '...')
+
+ if (diff.stderr) {
+ console.error(diff.stderr)
+ core.setFailed(diff.stderr)
+ }
+
+ if (diff.stdout === '') {
+ console.log('No diff for ' + filename + '\n')
+ } else {
+ console.log(diff.stdout + '\n')
+ }
+
+ return {
+ file: filename,
+ diff: diff.stdout || ''
+ }
+ })
+ // filter files with no diffs
+ .filter(item => {
+ return item.diff !== ''
+ })
+
+ // prepare comment body
+ let body = '## Design Token Diff\n\n'
+ if (diffs.length === 0) {
+ body += 'No design tokens changed'
+ } else {
+ body += diffs.map(({file, diff}) =>
+ '' +
+ `${file}
\n` +
+ " \n"+
+ " ```diff"+
+ ` ${diff}` +
+ " ```"+
+ '\n '
+ ).join('\n')
+ }
+ // get comments
+ const {data: comments} = await github.rest.issues.listComments({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo
+ });
+
+ // get comment if exists
+ const existingComment = comments.filter(comment => comment.body.includes('## Design Token Diff'));
+ // if token issue exists, update it
+ if(existingComment.length > 0) {
+ await github.rest.issues.updateComment({
+ comment_id: existingComment[0].id,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ body
+ })
+ }
+
+ // if comment does not exist, create it
+ else {
+ await github.rest.issues.createComment({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ body
+ })
+ }
diff --git a/.github/workflows/diff.yml b/.github/workflows/diff.yml
index 73f1ff545..5431fdf87 100644
--- a/.github/workflows/diff.yml
+++ b/.github/workflows/diff.yml
@@ -5,31 +5,12 @@ on:
branches-ignore:
- 'changeset-release/**'
jobs:
- # JOB to run change detection
changes:
- runs-on: ubuntu-latest
- # Required permissions
- permissions:
- pull-requests: read
- # Set job outputs to values from filter step
- outputs:
- tokens: ${{ steps.filter.outputs.tokens }}
- steps:
- # For pull requests it's not necessary to checkout the code
- - uses: dorny/paths-filter@v2
- id: filter
- with:
- filters: |
- tokens:
- - 'src/tokens/**'
- - 'data/**'
- - name: No changes to tokens detected
- if: ${{ steps.filter.outputs.tokens == 'false' }}
- run: echo "No changes to tokens detected, skipping further jobs checking tokens"
+ uses: ./.github/workflows/hasChanged.yml
comment:
needs: changes
- if: ${{ needs.changes.outputs.tokens == 'true' }}
+ if: ${{ needs.changes.outputs.tokens == 'true' || needs.changes.outputs.oldTokens == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -38,7 +19,8 @@ jobs:
- name: Set up node
uses: actions/setup-node@v3
with:
- node-version: 16.x
+ node-version: 16
+ cache: 'npm'
- name: Create comment (if necessary)
uses: actions/github-script@v5
@@ -80,10 +62,11 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v3
with:
- node-version: 16.x
+ node-version: 16
+ cache: 'npm'
- name: Install dependencies
- run: npm ci --no-audit --no-fund --include=dev
+ run: npm ci --no-audit --no-fund --include=dev --ignore-scripts
- name: Build tokens
run: npm run build
@@ -92,7 +75,7 @@ jobs:
run: npm run build:tokens
- name: Install dependencies (base)
- run: pushd base; npm i --no-audit --no-fund; popd
+ run: pushd base; npm i --no-audit --no-fund --ignore-scripts; popd
- name: Build (base)
run: pushd base; npm run build; popd
diff --git a/.github/workflows/hasChanged.yml b/.github/workflows/hasChanged.yml
new file mode 100644
index 000000000..dd3e3b0a3
--- /dev/null
+++ b/.github/workflows/hasChanged.yml
@@ -0,0 +1,85 @@
+name: Check if files or folders have been changed
+
+on:
+ workflow_call:
+ outputs:
+ outputAffected:
+ description: "Boolean value indicating changes in any file or folder that has an effect on the output"
+ value: ${{ jobs.hasChanged.outputs.oldTokens || jobs.hasChanged.outputs.src || jobs.hasChanged.outputs.buildScripts }}
+ tokens:
+ description: "Boolean value indicating change in src/tokens folder"
+ value: ${{ jobs.hasChanged.outputs.tokens }}
+ oldTokens:
+ description: "Boolean value indicating change in data folder"
+ value: ${{ jobs.hasChanged.outputs.oldTokens }}
+ src:
+ description: "Boolean value indicating change in src folder"
+ value: ${{ jobs.hasChanged.outputs.src }}
+ scripts:
+ description: "Boolean value indicating change in scripts folder"
+ value: ${{ jobs.hasChanged.outputs.scripts }}
+ buildScripts:
+ description: "Boolean value indicating change in build files in the build folder"
+ value: ${{ jobs.hasChanged.outputs.buildScripts }}
+ dependencies:
+ description: "Boolean value indicating change in dependencies"
+ value: ${{ jobs.hasChanged.outputs.dependencies }}
+ docs:
+ description: "Boolean value indicating change in docs folder"
+ value: ${{ jobs.hasChanged.outputs.docs }}
+jobs:
+ hasChanged:
+ name: Checking for changes
+ runs-on: ubuntu-latest
+ # Required permissions
+ permissions:
+ pull-requests: read
+ outputs:
+ outputAffected: ${{ steps.filter.outputs.outputAffected }}
+ tokens: ${{ steps.filter.outputs.tokens }}
+ oldTokens: ${{ steps.filter.outputs.oldTokens }}
+ src: ${{ steps.filter.outputs.src }}
+ scripts: ${{ steps.filter.outputs.scripts }}
+ buildScripts: ${{ steps.filter.outputs.buildScripts }}
+ dependencies: ${{ steps.filter.outputs.dependencies }}
+ docs: ${{ steps.filter.outputs.docs }}
+ steps:
+ - uses: actions/checkout@v3
+ - uses: dorny/paths-filter@v2
+ id: filter
+ with:
+ list-files: shell
+ filters: |
+ tokens:
+ - 'src/tokens/**'
+ oldTokens:
+ - 'data/**'
+ src:
+ - 'src/**/**.ts'
+ - 'src/**/**.json'
+ - 'src/**/**.json5'
+ scripts:
+ - 'scripts/**'
+ buildScripts:
+ - 'scripts/build.ts'
+ - 'scripts/buildTokens.ts'
+ - 'scripts/themes.config.ts'
+ - 'tsconfig.json'
+ - 'tsconfig.build.json'
+ - 'package.json'
+ dependencies:
+ - 'package.json'
+ - 'package-lock.json'
+ docs:
+ - 'docs/**'
+ - name: Detecting changes that effect output
+ if: steps.filter.outputs.tokens == 'true' || steps.filter.outputs.oldTokens == 'true' || steps.filter.outputs.src == 'true' || steps.filter.outputs.scripts == 'true' || steps.filter.outputs.dependencies == 'true' || steps.filter.outputs.docs == 'true'
+ run: |
+ echo Changes detected
+ echo - tokens: ${{ steps.filter.outputs.tokens }}
+ echo - oldTokens: ${{ steps.filter.outputs.oldTokens }}
+ echo - src: ${{ steps.filter.outputs.src }}
+ echo - scripts: ${{ steps.filter.outputs.scripts }}
+ echo - buildScripts: ${{ steps.filter.outputs.buildScripts }}
+ echo - dependencies: ${{ steps.filter.outputs.dependencies }}
+ echo - docs: ${{ steps.filter.outputs.docs }}
\ No newline at end of file
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 83a70fc1f..2e47f8158 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -21,7 +21,8 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v3
with:
- node-version: 16.x
+ node-version: 16
+ cache: 'npm'
- name: Install dependencies
run: npm ci --legacy-peer-deps --no-audit --no-fund && pushd docs; npm ci --legacy-peer-deps --no-audit --no-fund; popd
diff --git a/.github/workflows/release_candidate.yml b/.github/workflows/release_candidate.yml
index a7747d23d..f9fc23eec 100644
--- a/.github/workflows/release_candidate.yml
+++ b/.github/workflows/release_candidate.yml
@@ -20,7 +20,8 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v3
with:
- node-version: 16.x
+ node-version: 16
+ cache: 'npm'
- name: Install dependencies
run: npm ci --legacy-peer-deps
diff --git a/__tests__/buildJs/pathToDotNotation.test.js b/__tests__/buildJs/pathToDotNotation.test.js
deleted file mode 100644
index e5c4e2a20..000000000
--- a/__tests__/buildJs/pathToDotNotation.test.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const {pathToDotNotation} = require('../../build')
-
-// eslint-disable-next-line i18n-text/no-en
-describe('Token formatters: dot.notation', () => {
- it('returns a valid token name in dot.notation', () => {
- expect(pathToDotNotation({path: ['red']})).toBe('red')
- expect(pathToDotNotation({path: ['color', 'red']})).toBe('color.red')
- expect(pathToDotNotation({path: ['color', 'functional', 'danger']})).toBe('color.functional.danger')
- })
-
- it('works as expected with empty token path', () => {
- expect(pathToDotNotation({path: []})).toBe('')
- expect(() => pathToDotNotation({path: null})).toThrowError()
- expect(() => pathToDotNotation([])).toThrowError()
- })
-})
diff --git a/__tests__/buildJs/pathToKebabCase.test.js b/__tests__/buildJs/pathToKebabCase.test.js
deleted file mode 100644
index e9dc33b83..000000000
--- a/__tests__/buildJs/pathToKebabCase.test.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const {pathToKebabCase} = require('../../build')
-
-// eslint-disable-next-line i18n-text/no-en
-describe('Token formatters: kebab-case', () => {
- it('returns a valid token name in kebab-case', () => {
- expect(pathToKebabCase({path: ['red']})).toBe('red')
- expect(pathToKebabCase({path: ['color', 'red']})).toBe('color-red')
- expect(pathToKebabCase({path: ['color', 'functional', 'danger']})).toBe('color-functional-danger')
- })
-
- it('works as expected with empty token path', () => {
- expect(pathToKebabCase({path: []})).toBe('')
- expect(() => pathToKebabCase({path: null})).toThrowError()
- expect(() => pathToKebabCase([])).toThrowError()
- })
-})
diff --git a/__tests__/buildJs/pathToPascalCase.test.js b/__tests__/buildJs/pathToPascalCase.test.js
deleted file mode 100644
index c2e1578f0..000000000
--- a/__tests__/buildJs/pathToPascalCase.test.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const {pathToPascalCase} = require('../../build')
-
-// eslint-disable-next-line i18n-text/no-en
-describe('Token formatters: PascalCase', () => {
- test('returns a valid token name in PascalCase', () => {
- expect(pathToPascalCase({path: ['red']})).toBe('Red')
- expect(pathToPascalCase({path: ['color', 'red']})).toBe('ColorRed')
- expect(pathToPascalCase({path: ['color', 'functional', 'danger']})).toBe('ColorFunctionalDanger')
- })
-
- it('works as expected with empty token path', () => {
- expect(pathToPascalCase({path: []})).toBe('')
- expect(() => pathToPascalCase({path: null})).toThrowError()
- expect(() => pathToPascalCase([])).toThrowError()
- })
-})
diff --git a/docs/storybook/.storybook/main.ts b/docs/storybook/.storybook/main.ts
index b278de952..9debd0054 100644
--- a/docs/storybook/.storybook/main.ts
+++ b/docs/storybook/.storybook/main.ts
@@ -7,6 +7,7 @@ const config: StorybookConfig = {
'@storybook/addon-interactions',
'@storybook/addon-a11y',
'storybook-addon-rem',
+ 'storybook-addon-paddings',
],
framework: {
name: '@storybook/react-webpack5',
diff --git a/docs/storybook/.storybook/preview.js b/docs/storybook/.storybook/preview.js
index d9f134e03..cfe6cfc2d 100644
--- a/docs/storybook/.storybook/preview.js
+++ b/docs/storybook/.storybook/preview.js
@@ -21,6 +21,14 @@ const preview = {
order: ['Color', 'Typography', 'Size', 'Demos', 'Migration'],
},
},
+ paddings: {
+ values: [
+ {name: 'Small', value: '1rem'},
+ {name: 'Medium', value: '2rem'},
+ {name: 'None', value: '0px'},
+ ],
+ default: 'Small',
+ },
},
}
@@ -327,7 +335,6 @@ const tempTheme = deepmerge(theme, {
export const decorators = [
(Story, context) => {
- console.log('test:', context.globals.theme)
const {parameters} = context
const defaultStoryType = 'swatch'
const storyType = parameters.storyType || defaultStoryType
diff --git a/docs/storybook/.storybook/storybook.css b/docs/storybook/.storybook/storybook.css
index f2ed7738f..5dcef3959 100644
--- a/docs/storybook/.storybook/storybook.css
+++ b/docs/storybook/.storybook/storybook.css
@@ -23,8 +23,6 @@
.story-wrap {
font-family: var(--fontStack-system);
color: var(--fgColor-default);
- /* background-color: var(--bgColor-default); */
- padding: 1rem;
}
#storybook-preview-wrapper {
@@ -153,3 +151,14 @@ code {
border: unset;
color: var(--fgColor-default) !important;
}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ word-wrap: normal;
+ border: 0;
+}
diff --git a/docs/storybook/package-lock.json b/docs/storybook/package-lock.json
index db3d7751a..1d9c268f5 100644
--- a/docs/storybook/package-lock.json
+++ b/docs/storybook/package-lock.json
@@ -32,10 +32,11 @@
"@storybook/react": "^7.0.6",
"@storybook/react-webpack5": "^7.0.6",
"@storybook/testing-library": "^0.0.14-next.1",
- "@storybook/theming": "6.5.16",
+ "@storybook/theming": "^7.0.6",
"babel-loader": "^8.3.0",
"prop-types": "^15.8.1",
"storybook": "^7.0.6",
+ "storybook-addon-paddings": "^5.0.0",
"storybook-addon-rem": "^1.3.0",
"typescript": "^4.9.4"
}
@@ -2835,26 +2836,6 @@
}
}
},
- "node_modules/@storybook/addon-actions/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/addon-backgrounds": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.0.7.tgz",
@@ -2889,26 +2870,6 @@
}
}
},
- "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/addon-controls": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.0.7.tgz",
@@ -2944,26 +2905,6 @@
}
}
},
- "node_modules/@storybook/addon-controls/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/addon-docs": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.0.7.tgz",
@@ -3001,26 +2942,6 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/addon-docs/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/addon-essentials": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.0.7.tgz",
@@ -3103,26 +3024,6 @@
}
}
},
- "node_modules/@storybook/addon-interactions/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/addon-links": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.0.7.tgz",
@@ -3249,26 +3150,6 @@
}
}
},
- "node_modules/@storybook/addon-toolbars/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/addon-viewport": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.0.7.tgz",
@@ -3302,26 +3183,6 @@
}
}
},
- "node_modules/@storybook/addon-viewport/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/addons": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.0.7.tgz",
@@ -3405,26 +3266,6 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/blocks/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/blocks/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -3535,26 +3376,6 @@
}
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/builder-webpack5/node_modules/@types/node": {
"version": "16.18.24",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.24.tgz",
@@ -4011,26 +3832,6 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/components/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/core-client": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.0.7.tgz",
@@ -4553,26 +4354,6 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/manager-api/node_modules/@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@storybook/manager-api/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -5125,15 +4906,15 @@
}
},
"node_modules/@storybook/theming": {
- "version": "6.5.16",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz",
- "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==",
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
+ "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
"dev": true,
"dependencies": {
- "@storybook/client-logger": "6.5.16",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7"
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
+ "@storybook/client-logger": "7.0.7",
+ "@storybook/global": "^5.0.0",
+ "memoizerific": "^1.11.3"
},
"funding": {
"type": "opencollective",
@@ -5144,20 +4925,6 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/theming/node_modules/@storybook/client-logger": {
- "version": "6.5.16",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz",
- "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==",
- "dev": true,
- "dependencies": {
- "core-js": "^3.8.2",
- "global": "^4.4.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
"node_modules/@storybook/types": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.0.7.tgz",
@@ -12814,6 +12581,32 @@
"url": "https://opencollective.com/storybook"
}
},
+ "node_modules/storybook-addon-paddings": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/storybook-addon-paddings/-/storybook-addon-paddings-5.0.0.tgz",
+ "integrity": "sha512-+4x9zlOS82tHg4wmm1j67kiwDho+l7CfOttshczlcFQCOP2mHM3PrpXnxbNus5v6xf46Qh0vnYzD+wg0tfZY3Q==",
+ "dev": true,
+ "dependencies": {
+ "memoizerific": "^1.11.0"
+ },
+ "peerDependencies": {
+ "@storybook/components": "^7.0.0",
+ "@storybook/manager-api": "^7.0.0",
+ "@storybook/preview-api": "^7.0.0",
+ "@storybook/theming": "^7.0.0",
+ "@storybook/types": "^7.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/storybook-addon-rem": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/storybook-addon-rem/-/storybook-addon-rem-1.3.0.tgz",
@@ -12982,6 +12775,26 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/storybook-addon-rem/node_modules/@storybook/theming": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz",
+ "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "6.5.16",
+ "core-js": "^3.8.2",
+ "memoizerific": "^1.11.3",
+ "regenerator-runtime": "^0.13.7"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/storybook-addon-rem/node_modules/isobject": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
@@ -16092,20 +15905,6 @@
"telejson": "^7.0.3",
"ts-dedent": "^2.0.0",
"uuid": "^9.0.0"
- },
- "dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- }
}
},
"@storybook/addon-backgrounds": {
@@ -16124,20 +15923,6 @@
"@storybook/types": "7.0.7",
"memoizerific": "^1.11.3",
"ts-dedent": "^2.0.0"
- },
- "dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- }
}
},
"@storybook/addon-controls": {
@@ -16157,20 +15942,6 @@
"@storybook/types": "7.0.7",
"lodash": "^4.17.21",
"ts-dedent": "^2.0.0"
- },
- "dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- }
}
},
"@storybook/addon-docs": {
@@ -16200,20 +15971,6 @@
"remark-external-links": "^8.0.0",
"remark-slug": "^6.0.0",
"ts-dedent": "^2.0.0"
- },
- "dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- }
}
},
"@storybook/addon-essentials": {
@@ -16268,20 +16025,6 @@
"jest-mock": "^27.0.6",
"polished": "^4.2.2",
"ts-dedent": "^2.2.0"
- },
- "dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- }
}
},
"@storybook/addon-links": {
@@ -16344,20 +16087,6 @@
"@storybook/manager-api": "7.0.7",
"@storybook/preview-api": "7.0.7",
"@storybook/theming": "7.0.7"
- },
- "dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- }
}
},
"@storybook/addon-viewport": {
@@ -16375,20 +16104,6 @@
"@storybook/theming": "7.0.7",
"memoizerific": "^1.11.3",
"prop-types": "^15.7.2"
- },
- "dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- }
}
},
"@storybook/addons": {
@@ -16442,18 +16157,6 @@
"util-deprecate": "^1.0.2"
},
"dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -16546,18 +16249,6 @@
"webpack-virtual-modules": "^0.4.3"
},
"dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- },
"@types/node": {
"version": "16.18.24",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.24.tgz",
@@ -16889,20 +16580,6 @@
"memoizerific": "^1.11.3",
"use-resize-observer": "^9.1.0",
"util-deprecate": "^1.0.2"
- },
- "dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- }
}
},
"@storybook/core-client": {
@@ -17306,18 +16983,6 @@
"ts-dedent": "^2.0.0"
},
"dependencies": {
- "@storybook/theming": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
- "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
- "dev": true,
- "requires": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.0.7",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- }
- },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -17705,27 +17370,15 @@
}
},
"@storybook/theming": {
- "version": "6.5.16",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz",
- "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==",
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.7.tgz",
+ "integrity": "sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA==",
"dev": true,
"requires": {
- "@storybook/client-logger": "6.5.16",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7"
- },
- "dependencies": {
- "@storybook/client-logger": {
- "version": "6.5.16",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz",
- "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==",
- "dev": true,
- "requires": {
- "core-js": "^3.8.2",
- "global": "^4.4.0"
- }
- }
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
+ "@storybook/client-logger": "7.0.7",
+ "@storybook/global": "^5.0.0",
+ "memoizerific": "^1.11.3"
}
},
"@storybook/types": {
@@ -23205,6 +22858,15 @@
"@storybook/cli": "7.0.7"
}
},
+ "storybook-addon-paddings": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/storybook-addon-paddings/-/storybook-addon-paddings-5.0.0.tgz",
+ "integrity": "sha512-+4x9zlOS82tHg4wmm1j67kiwDho+l7CfOttshczlcFQCOP2mHM3PrpXnxbNus5v6xf46Qh0vnYzD+wg0tfZY3Q==",
+ "dev": true,
+ "requires": {
+ "memoizerific": "^1.11.0"
+ }
+ },
"storybook-addon-rem": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/storybook-addon-rem/-/storybook-addon-rem-1.3.0.tgz",
@@ -23329,6 +22991,18 @@
"regenerator-runtime": "^0.13.7"
}
},
+ "@storybook/theming": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz",
+ "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==",
+ "dev": true,
+ "requires": {
+ "@storybook/client-logger": "6.5.16",
+ "core-js": "^3.8.2",
+ "memoizerific": "^1.11.3",
+ "regenerator-runtime": "^0.13.7"
+ }
+ },
"isobject": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
diff --git a/docs/storybook/package.json b/docs/storybook/package.json
index e1ff0327c..28feea4c9 100644
--- a/docs/storybook/package.json
+++ b/docs/storybook/package.json
@@ -8,6 +8,7 @@
"@babel/preset-env": "^7.20.2",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.0",
+ "@storybook/addon-a11y": "^7.0.6",
"@storybook/addon-essentials": "^7.0.6",
"@storybook/addon-interactions": "^7.0.6",
"@storybook/addon-links": "^7.0.6",
@@ -15,12 +16,12 @@
"@storybook/react": "^7.0.6",
"@storybook/react-webpack5": "^7.0.6",
"@storybook/testing-library": "^0.0.14-next.1",
- "@storybook/theming": "6.5.16",
- "@storybook/addon-a11y": "^7.0.6",
- "storybook-addon-rem": "^1.3.0",
+ "@storybook/theming": "^7.0.6",
"babel-loader": "^8.3.0",
"prop-types": "^15.8.1",
"storybook": "^7.0.6",
+ "storybook-addon-paddings": "^5.0.0",
+ "storybook-addon-rem": "^1.3.0",
"typescript": "^4.9.4"
},
"dependencies": {
diff --git a/docs/storybook/stories/Color/Functional/Background.stories.tsx b/docs/storybook/stories/Color/Functional/Background.stories.tsx
index 7bbe70047..bc8a80e62 100644
--- a/docs/storybook/stories/Color/Functional/Background.stories.tsx
+++ b/docs/storybook/stories/Color/Functional/Background.stories.tsx
@@ -9,7 +9,7 @@ export default {
},
}
-const bgColors = ['bgColor-default', 'bgColor-muted', 'bgColor-disabled']
+const bgColors = ['bgColor-default', 'bgColor-muted', 'bgColor-disabled', 'bgColor-emphasis']
export const Background = () => {
return (
diff --git a/docs/storybook/stories/Color/Patterns/AllPatterns.stories.tsx b/docs/storybook/stories/Color/Patterns/AllPatterns.stories.tsx
index 33df1638c..a33710d34 100644
--- a/docs/storybook/stories/Color/Patterns/AllPatterns.stories.tsx
+++ b/docs/storybook/stories/Color/Patterns/AllPatterns.stories.tsx
@@ -72,12 +72,31 @@ export const Avatar = () => {
}
export const Control = () => {
- const data = getTokensByName(colorTokens, 'control').map(token => {
+ const control = getTokensByName(colorTokens, 'control').map(token => {
return {
id: token.name,
...token,
}
})
+
+ const controlKnob = getTokensByName(colorTokens, 'controlKnob').map(token => {
+ return {
+ id: token.name,
+ ...token,
+ }
+ })
+
+ const controlTrack = getTokensByName(colorTokens, 'controlTrack').map(token => {
+ return {
+ id: token.name,
+ ...token,
+ }
+ })
+
+ const data = control.concat(controlKnob, controlTrack).map((item, index) => ({
+ ...item,
+ index,
+ }))
return (
diff --git a/docs/storybook/stories/Demos/Components.stories.tsx b/docs/storybook/stories/Demos/Components.stories.tsx
index 543995d90..e1942a87e 100644
--- a/docs/storybook/stories/Demos/Components.stories.tsx
+++ b/docs/storybook/stories/Demos/Components.stories.tsx
@@ -19,7 +19,7 @@ export const FlashDemo = () => {
export const LabelDemo = () => {
return (
-
+
@@ -35,7 +35,7 @@ export const LabelDemo = () => {
export const StateLabelDemo = () => {
return (
-
+
Open
Closed
Closed
diff --git a/docs/storybook/stories/Migration/v8/DeprecatedPatternTokensMap.json b/docs/storybook/stories/Migration/v8/DeprecatedPatternTokensMap.json
index a7f643727..9f116b294 100644
--- a/docs/storybook/stories/Migration/v8/DeprecatedPatternTokensMap.json
+++ b/docs/storybook/stories/Migration/v8/DeprecatedPatternTokensMap.json
@@ -36,6 +36,9 @@
"color-timeline-badge-bg": {
"background": "timelineBadge-bgColor"
},
+ "color-btn-text": {
+ "color": "control-fgColor-rest"
+ },
"color-btn-bg": {
"background": "button-default-bgColor-rest"
},
diff --git a/docs/storybook/stories/Size/Border.stories.tsx b/docs/storybook/stories/Size/Border.stories.tsx
index 8befb29f0..06831eee7 100644
--- a/docs/storybook/stories/Size/Border.stories.tsx
+++ b/docs/storybook/stories/Size/Border.stories.tsx
@@ -35,9 +35,9 @@ export const BorderSize = () => {
return (
-
+
Border size
-
+
{
return (
-
+
Border radius
-
+
{
return (
-
+
Focus outline
-
+
{
return (
-
+
Breakpoints
-
+
{
return (
-
+
Control stack
-
+
{
return (
-
+
Responsive control stack
-
+
{
return (
-
+
Touch target
-
+
{
return (
-
+
Responsive touch target
-
+
{
return (
-
+
Base size
-
+
{
return (
-
+
Stack
-
+
{
})
return (
-
+
Viewport ranges
-
+
{
return (
-
+
Base weight
-
+
{
return (
-
+
Font family
-
+
{
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+ width: 'auto',
renderCell: row => {
return {row.value}
},
@@ -81,9 +81,9 @@ export const FontShorthand = () => {
return (
-
+
Font shorthand
-
+
{
}
})
- const filteredData = data.filter(item => item.id.includes('display'))
+ const filteredData = data.filter(item => !item.id.includes('shorthand') && item.id.includes('display'))
return (
@@ -158,7 +158,6 @@ export const Display = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
renderCell: row => {
return (
@@ -189,7 +188,6 @@ export const Display = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
renderCell: row => {
return {row.value}
},
@@ -216,7 +214,9 @@ export const TitleLarge = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('title') && item.id.includes('large'))
+ const filteredData = data.filter(
+ item => !item.id.includes('shorthand') && item.id.includes('title') && item.id.includes('large'),
+ )
return (
@@ -232,7 +232,6 @@ export const TitleLarge = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
renderCell: row => {
return (
@@ -263,7 +262,7 @@ export const TitleLarge = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -290,7 +289,9 @@ export const TitleMedium = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('title') && item.id.includes('medium'))
+ const filteredData = data.filter(
+ item => !item.id.includes('shorthand') && item.id.includes('title') && item.id.includes('medium'),
+ )
return (
@@ -306,7 +307,7 @@ export const TitleMedium = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return (
@@ -337,7 +338,7 @@ export const TitleMedium = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -364,7 +365,9 @@ export const TitleSmall = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('title') && item.id.includes('small'))
+ const filteredData = data.filter(
+ item => !item.id.includes('shorthand') && item.id.includes('title') && item.id.includes('small'),
+ )
return (
@@ -380,7 +383,7 @@ export const TitleSmall = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return (
@@ -411,7 +414,7 @@ export const TitleSmall = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -438,7 +441,7 @@ export const Subtitle = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('subtitle'))
+ const filteredData = data.filter(item => !item.id.includes('shorthand') && item.id.includes('subtitle'))
return (
@@ -454,7 +457,7 @@ export const Subtitle = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return (
@@ -485,7 +488,7 @@ export const Subtitle = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -512,7 +515,9 @@ export const BodyLarge = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('body') && item.id.includes('large'))
+ const filteredData = data.filter(
+ item => !item.id.includes('shorthand') && item.id.includes('body') && item.id.includes('large'),
+ )
return (
@@ -528,7 +533,7 @@ export const BodyLarge = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return (
@@ -559,7 +564,7 @@ export const BodyLarge = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -586,7 +591,9 @@ export const BodyMedium = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('body') && item.id.includes('medium'))
+ const filteredData = data.filter(
+ item => !item.id.includes('shorthand') && item.id.includes('title') && item.id.includes('medium'),
+ )
return (
@@ -602,7 +609,7 @@ export const BodyMedium = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return (
@@ -633,7 +640,7 @@ export const BodyMedium = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -660,7 +667,9 @@ export const BodySmall = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('body') && item.id.includes('small'))
+ const filteredData = data.filter(
+ item => !item.id.includes('shorthand') && item.id.includes('title') && item.id.includes('small'),
+ )
return (
@@ -676,7 +685,7 @@ export const BodySmall = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return (
@@ -707,7 +716,7 @@ export const BodySmall = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -734,7 +743,7 @@ export const Caption = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('caption'))
+ const filteredData = data.filter(item => !item.id.includes('shorthand') && item.id.includes('caption'))
return (
@@ -750,7 +759,7 @@ export const Caption = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return (
@@ -781,7 +790,7 @@ export const Caption = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -808,7 +817,7 @@ export const CodeBlock = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('codeBlock'))
+ const filteredData = data.filter(item => !item.id.includes('shorthand') && item.id.includes('codeBlock'))
return (
@@ -824,7 +833,7 @@ export const CodeBlock = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return (
@@ -855,7 +864,7 @@ export const CodeBlock = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -882,7 +891,7 @@ export const InlineCodeBlock = () => {
}
})
- const filteredData = data.filter(item => item.id.includes('codeInline'))
+ const filteredData = data.filter(item => !item.id.includes('shorthand') && item.id.includes('codeInline'))
return (
@@ -898,7 +907,7 @@ export const InlineCodeBlock = () => {
header: 'Property',
field: 'name',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return (
@@ -929,7 +938,7 @@ export const InlineCodeBlock = () => {
header: 'Output value',
field: 'value',
rowHeader: true,
- width: 'growCollapse',
+
renderCell: row => {
return {row.value}
},
@@ -960,9 +969,9 @@ export const Overview = () => {
return (
-
+
Overview
-
+
{
header: 'Description',
field: 'comment',
rowHeader: true,
- width: 'growCollapse',
+ width: 'auto',
renderCell: row => {
return (
{
const {selector, selectorLight, selectorDark} = options
- const {outputReferences} = options
+ const {outputReferences, descriptions} = options
+ const formatting: LineFormatting = {
+ commentStyle: descriptions ? 'long' : 'none',
+ }
// add file header
const output = [fileHeader({file})]
// add single theme css
output.push(`${selector || ':root'}${selectorLight ? `, ${selectorLight}` : ''}{
- ${formattedVariables({format: 'css', dictionary, outputReferences})}
+ ${formattedVariables({format: 'css', dictionary, outputReferences, formatting})}
}`)
// add auto dark theme css
if (selectorDark) {
output.push(`@media (prefers-color-scheme: dark) {
${selectorDark} {
- ${formattedVariables({format: 'css', dictionary, outputReferences})}
+ ${formattedVariables({format: 'css', dictionary, outputReferences, formatting})}
}
}`)
}
diff --git a/src/formats/cssVariables.ts b/src/formats/cssVariables.ts
new file mode 100644
index 000000000..9d8d90b92
--- /dev/null
+++ b/src/formats/cssVariables.ts
@@ -0,0 +1,25 @@
+import StyleDictionary from 'style-dictionary'
+import type {FormatterArguments} from 'style-dictionary/types/Format'
+import type {LineFormatting} from 'style-dictionary/types/FormatHelpers'
+const {fileHeader, formattedVariables} = StyleDictionary.formatHelpers
+
+/**
+ * @description Converts `StyleDictionary.dictionary.tokens` to css with prefers dark and light section
+ * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts)
+ * @param arguments.options outputReferences `boolean`, selector `string`, selectorLight `string`, selectorDark `string`
+ * @returns formatted `string`
+ */
+export const cssVariables: StyleDictionary.Formatter = ({dictionary, options = {}, file}: FormatterArguments) => {
+ const selector = options.selector ? options.selector : `:root`
+ const {outputReferences, descriptions} = options
+ const formatting: LineFormatting = {
+ commentStyle: descriptions ? 'long' : 'none',
+ }
+
+ return `${fileHeader({file})}${selector} {\n${formattedVariables({
+ format: 'css',
+ dictionary,
+ outputReferences,
+ formatting,
+ })}\n}\n`
+}
diff --git a/src/formats/cssWrapMediaQuery.test.ts b/src/formats/cssWrapMediaQuery.test.ts
index 93d3468eb..cd459ca30 100644
--- a/src/formats/cssWrapMediaQuery.test.ts
+++ b/src/formats/cssWrapMediaQuery.test.ts
@@ -1,5 +1,5 @@
import {cssWrapMediaQuery} from './cssWrapMediaQuery'
-import {getMockFormatterArguments} from '~/src/test-utilities'
+import {getMockDictionary, getMockFormatterArguments, getMockToken} from '~/src/test-utilities'
import {format} from 'prettier'
describe('Format: tokens nested in media query', () => {
@@ -65,4 +65,106 @@ describe('Format: tokens nested in media query', () => {
)
expect(cssWrapMediaQuery(input)).toStrictEqual(expectedOutput)
})
+
+ it('Show comment if option.description is true', () => {
+ const input = getMockFormatterArguments({
+ dictionary: getMockDictionary({
+ tokens: {
+ subgroup: {
+ red: getMockToken({
+ name: 'red',
+ value: 'transformedValue',
+ comment: 'This is a description',
+ }),
+ },
+ },
+ }),
+ options: {
+ mediaQuery: {
+ 'size-fine.css': '(pointer: fine)',
+ },
+ descriptions: true,
+ },
+ file: {
+ destination: 'size-fine.css',
+ options: {
+ showFileHeader: false,
+ },
+ },
+ })
+
+ const expectedOutput = format(
+ ` @media (pointer: fine) {
+ :root {
+ --red: transformedValue; /* This is a description */
+ }
+ }`,
+ {parser: 'css', printWidth: 500},
+ )
+ expect(cssWrapMediaQuery(input)).toStrictEqual(expectedOutput)
+ })
+
+ it('Hides comment if option.description is false or not set', () => {
+ const input = getMockFormatterArguments({
+ dictionary: getMockDictionary({
+ tokens: {
+ subgroup: {
+ red: getMockToken({
+ name: 'red',
+ value: 'transformedValue',
+ comment: 'This is a description',
+ }),
+ },
+ },
+ }),
+ options: {
+ mediaQuery: {
+ 'size-fine.css': '(pointer: fine)',
+ },
+ descriptions: false,
+ },
+ file: {
+ destination: 'size-fine.css',
+ options: {
+ showFileHeader: false,
+ },
+ },
+ })
+
+ const inputUnset = getMockFormatterArguments({
+ dictionary: getMockDictionary({
+ tokens: {
+ subgroup: {
+ red: getMockToken({
+ name: 'red',
+ value: 'transformedValue',
+ comment: 'This is a description',
+ }),
+ },
+ },
+ }),
+ options: {
+ mediaQuery: {
+ 'size-fine.css': '(pointer: fine)',
+ },
+ },
+ file: {
+ destination: 'size-fine.css',
+ options: {
+ showFileHeader: false,
+ },
+ },
+ })
+
+ const expectedOutput = format(
+ ` @media (pointer: fine) {
+ :root {
+ --red: transformedValue;
+ }
+ }`,
+ {parser: 'css', printWidth: 500},
+ )
+ expect(cssWrapMediaQuery(input)).toStrictEqual(expectedOutput)
+ expect(cssWrapMediaQuery(inputUnset)).toStrictEqual(expectedOutput)
+ })
})
diff --git a/src/formats/cssWrapMediaQuery.ts b/src/formats/cssWrapMediaQuery.ts
index 3b37eeb5f..f99bbb0d0 100644
--- a/src/formats/cssWrapMediaQuery.ts
+++ b/src/formats/cssWrapMediaQuery.ts
@@ -1,6 +1,7 @@
import StyleDictionary from 'style-dictionary'
import type {FormatterArguments} from 'style-dictionary/types/Format'
import {format} from 'prettier'
+import type {LineFormatting} from 'style-dictionary/types/FormatHelpers'
const {fileHeader, formattedVariables} = StyleDictionary.formatHelpers
/**
@@ -9,7 +10,10 @@ const {fileHeader, formattedVariables} = StyleDictionary.formatHelpers
* @returns formatted `string`
*/
export const cssWrapMediaQuery: StyleDictionary.Formatter = ({dictionary, options, file}: FormatterArguments) => {
- const {outputReferences} = options
+ const {outputReferences, descriptions} = options
+ const formatting: LineFormatting = {
+ commentStyle: descriptions ? 'long' : 'none',
+ }
// get specific media query or use screen
const mediaQuery = options.mediaQuery?.[file.destination] || 'screen'
// add file header
@@ -17,7 +21,7 @@ export const cssWrapMediaQuery: StyleDictionary.Formatter = ({dictionary, option
// add meadia query
output.push(`@media ${mediaQuery} {\n:root {`)
// add tokens
- output.push(formattedVariables({format: 'css', dictionary, outputReferences}))
+ output.push(formattedVariables({format: 'css', dictionary, outputReferences, formatting}))
// close media query
output.push(`}\n}`)
// return prettified
diff --git a/src/formats/index.ts b/src/formats/index.ts
index c7b232975..6e2067d42 100644
--- a/src/formats/index.ts
+++ b/src/formats/index.ts
@@ -1,6 +1,7 @@
export {cssThemed} from './cssThemed'
export {cssCustomMedia} from './cssCustomMedia'
export {cssWrapMediaQuery} from './cssWrapMediaQuery'
+export {cssVariables} from './cssVariables'
export {javascriptCommonJs} from './javascriptCommonJs'
export {javascriptEsm} from './javascriptEsm'
export {jsonNestedPrefixed} from './jsonNestedPrefixed'
diff --git a/src/platforms/css.ts b/src/platforms/css.ts
index 5528605a6..99b4a74da 100644
--- a/src/platforms/css.ts
+++ b/src/platforms/css.ts
@@ -44,6 +44,7 @@ export const css: PlatformInitializer = (outputFile, prefix, buildPath, options)
options: {
showFileHeader: false,
outputReferences: false,
+ descriptions: false,
selector,
selectorLight,
selectorDark,
@@ -56,6 +57,7 @@ export const css: PlatformInitializer = (outputFile, prefix, buildPath, options)
filter: token => isSource(token) && options?.themed !== true,
options: {
showFileHeader: false,
+ descriptions: false,
...options?.options,
},
},
@@ -77,6 +79,7 @@ export const css: PlatformInitializer = (outputFile, prefix, buildPath, options)
'src/tokens/functional/size/size-fine.json',
]),
options: {
+ descriptions: false,
showFileHeader: false,
mediaQuery: {
'css/functional/size/size-fine.css': '(pointer: fine)',
diff --git a/src/tokens/functional/color/dark/patterns-dark.json5 b/src/tokens/functional/color/dark/patterns-dark.json5
index 6d1a28f95..eb4d90d4f 100644
--- a/src/tokens/functional/color/dark/patterns-dark.json5
+++ b/src/tokens/functional/color/dark/patterns-dark.json5
@@ -6,7 +6,7 @@
alpha: 0.1,
},
borderColor: {
- $value: 'transparent',
+ $value: '{borderColor.muted}',
$type: 'color',
},
},
diff --git a/src/tokens/functional/size/border.json b/src/tokens/functional/size/border.json
index 1e8d2dd06..13f5324bd 100644
--- a/src/tokens/functional/size/border.json
+++ b/src/tokens/functional/size/border.json
@@ -1,7 +1,8 @@
{
"boxShadow": {
"thin": {
- "value": "inset 0 0 0 {borderWidth.thin}"
+ "value": "inset 0 0 0 {borderWidth.thin}",
+ "description": "Thin shadow for borders"
},
"thick": {
"value": "inset 0 0 0 {borderWidth.thick}"