diff --git a/.github/workflows/themes-weekly-pull.yml b/.github/workflows/themes-weekly-pull.yml new file mode 100644 index 000000000..8eb579674 --- /dev/null +++ b/.github/workflows/themes-weekly-pull.yml @@ -0,0 +1,49 @@ +name: themes-weekly-pull + +on: + schedule: + # run every friday at 5AM + - cron: '0 5 * * 5' + workflow_dispatch: + +env: + NODE_VERSION: 14.x + +jobs: + pull-from-jsonbin: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: ${{ env.NODE_VERSION }} + registry-url: 'https://registry.npmjs.org' + + - name: Install dependencies + run: yarn + + - name: Run themes:pull script + run: yarn run themes:pull + env: + JSONBIN_MASTER_KEY: ${{ secrets.JSONBIN_MASTER_KEY }} + JSONBIN_ID: ${{ secrets.JSONBIN_ID }} + + - name: Generate dark tokens + run: npx token-transformer scripts/themes/tokens/arduino-tokens.json scripts/themes/tokens/dark.json core,ide-default,ide-dark,theia core,ide-default,ide-dark + + - name: Generate default tokens + run: npx token-transformer scripts/themes/tokens/arduino-tokens.json scripts/themes/tokens/default.json core,ide-default,theia core,ide-default + + - name: Run themes:generate script + run: yarn run themes:generate + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v4 + with: + commit-message: Updated themes + title: Update themes + branch: themes/themes-update + author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> diff --git a/.gitignore b/.gitignore index fdab6fb0e..858ecbdea 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,7 @@ yarn*.log plugins # the config files for the CLI arduino-ide-extension/data/cli/config +# the tokens folder for the themes +scripts/themes/tokens +# environment variables +.env diff --git a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts index 1f70245cb..80a4e0775 100644 --- a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts +++ b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts @@ -284,7 +284,14 @@ MonacoThemingService.register({ id: 'arduino-theme', label: 'Light (Arduino)', uiTheme: 'vs', - json: require('../../src/browser/data/arduino.color-theme.json'), + json: require('../../src/browser/data/default.color-theme.json'), +}); + +MonacoThemingService.register({ + id: 'arduino-theme-dark', + label: 'Dark (Arduino)', + uiTheme: 'vs-dark', + json: require('../../src/browser/data/dark.color-theme.json'), }); export default new ContainerModule((bind, unbind, isBound, rebind) => { diff --git a/arduino-ide-extension/src/browser/data/dark.color-theme.json b/arduino-ide-extension/src/browser/data/dark.color-theme.json new file mode 100644 index 000000000..072e9a300 --- /dev/null +++ b/arduino-ide-extension/src/browser/data/dark.color-theme.json @@ -0,0 +1,149 @@ +{ + "name": "Arduino dark", + "type": "dark", + "colors": { + "list.highlightForeground": "#0ca1a6", + "list.activeSelectionForeground": "#dae3e3", + "list.activeSelectionBackground": "#434f54", + "list.inactiveSelectionForeground": "#dae3e3", + "list.inactiveSelectionBackground": "#434f54", + "list.hoverBackground": "#1f272a", + "progressBar.background": "#005c5f", + "editor.background": "#1f272a", + "editor.foreground": "#dae3e3", + "editor.lineHighlightBackground": "#434f5410", + "editor.selectionBackground": "#f1c40f", + "editorCursor.foreground": "#434f54", + "editorWhitespace.foreground": "#bfbfbf", + "editorWidget.background": "#171e21", + "focusBorder": "#dae3e3", + "menubar.selectionBackground": "#ffffff", + "menubar.selectionForeground": "#212121", + "menu.selectionBackground": "#dae3e3", + "menu.selectionForeground": "#212121", + "editorGroupHeader.tabsBackground": "#171e21", + "button.background": "#0ca1a6", + "titleBar.activeBackground": "#171e21", + "titleBar.activeForeground": "#dae3e3", + "terminal.background": "#000000", + "terminal.foreground": "#e0e0e0", + "dropdown.border": "#7fcbcd", + "dropdown.background": "#2c353a", + "dropdown.foreground": "#dae3e3", + "activityBar.background": "#171e21", + "activityBar.foreground": "#dae3e3", + "activityBar.inactiveForeground": "#4e5b61", + "activityBar.activeBorder": "#0ca1a6", + "statusBar.background": "#171e21", + "secondaryButton.background": "#ff000000", + "secondaryButton.foreground": "#dae3e3", + "secondaryButton.hoverBackground": "#434f54", + "arduino.branding.primary": "#0ca1a6", + "arduino.branding.secondary": "#b5c8c9", + "arduino.foreground": "#edf1f1", + "arduino.output.foreground": "#ffffff", + "arduino.output.background": "#000000", + "arduino.toolbar.hoverBackground": "#dae3e3", + "sideBar.background": "#101618", + "input.background": "#000000", + "foreground": "#dae3e3", + "settings.headerForeground": "#dae3e3", + "tree.indentGuidesStroke": "#374146", + "tab.unfocusedActiveForeground": "#dae3e3", + "tab.inactiveBackground": "#171e21" + }, + "tokenColors": [ + { + "name": "", + "settings": { + "foreground": "#dae3e3" + } + }, + { + "name": "Comments", + "scope": "comment", + "settings": { + "foreground": "#7f8c8d" + } + }, + { + "name": "Keywords Attributes", + "scope": [ + "storage", + "support", + "string.quoted.single.c" + ], + "settings": { + "foreground": "#0ca1a6" + } + }, + { + "name": "literal", + "scope": [ + "meta.function.c", + "entity.name.function", + "meta.function-call.c", + "variable.other" + ], + "settings": { + "foreground": "#F39C12" + } + }, + { + "name": "punctuation", + "scope": [ + "punctuation.section", + "meta.function-call.c", + "meta.block.c", + "meta.function.c", + "variable", + "variable.name" + ], + "settings": { + "foreground": "#dae3e3" + } + }, + { + "name": "function preprocessor", + "scope": [ + "entity.name.function.preprocessor.c", + "meta.preprocessor.macro.c" + ], + "settings": { + "foreground": "#569CD6" + } + }, + { + "name": "constants", + "scope": [ + "string.quoted.double", + "string.quoted.other.lt-gt", + "constant" + ], + "settings": { + "foreground": "#7fcbcd" + } + }, + { + "name": "meta keywords", + "scope": [ + "keyword.control", + "meta.preprocessor.c" + ], + "settings": { + "foreground": "#C586C0" + } + }, + { + "name": "numeric preprocessor", + "scope": [ + "meta.preprocessor.macro.c", + "constant.numeric.preprocessor.c", + "meta.preprocessor.c" + ], + "settings": { + "foreground": "#434f54" + } + } + ] +} diff --git a/arduino-ide-extension/src/browser/data/default.color-theme.json b/arduino-ide-extension/src/browser/data/default.color-theme.json new file mode 100644 index 000000000..2f4660652 --- /dev/null +++ b/arduino-ide-extension/src/browser/data/default.color-theme.json @@ -0,0 +1,149 @@ +{ + "name": "Arduino default", + "type": "default", + "colors": { + "list.highlightForeground": "#008184", + "list.activeSelectionForeground": "#4e5b61", + "list.activeSelectionBackground": "#dae3e3", + "list.inactiveSelectionForeground": "#4e5b61", + "list.inactiveSelectionBackground": "#dae3e3", + "list.hoverBackground": "#ecf1f1", + "progressBar.background": "#005c5f", + "editor.background": "#ffffff", + "editor.foreground": "#4e5b61", + "editor.lineHighlightBackground": "#434f5410", + "editor.selectionBackground": "#f1c40f", + "editorCursor.foreground": "#434f54", + "editorWhitespace.foreground": "#bfbfbf", + "editorWidget.background": "#f7f9f9", + "focusBorder": "#7fcbcd", + "menubar.selectionBackground": "#ffffff", + "menubar.selectionForeground": "#212121", + "menu.selectionBackground": "#dae3e3", + "menu.selectionForeground": "#212121", + "editorGroupHeader.tabsBackground": "#ecf1f1", + "button.background": "#7fcbcd", + "titleBar.activeBackground": "#006d70", + "titleBar.activeForeground": "#f7f9f9", + "terminal.background": "#000000", + "terminal.foreground": "#e0e0e0", + "dropdown.border": "#f7f9f9", + "dropdown.background": "#ffffff", + "dropdown.foreground": "#4e5b61", + "activityBar.background": "#ecf1f1", + "activityBar.foreground": "#4e5b61", + "activityBar.inactiveForeground": "#bdc7c7", + "activityBar.activeBorder": "#008184", + "statusBar.background": "#006d70", + "secondaryButton.background": "#ff000000", + "secondaryButton.foreground": "#008184", + "secondaryButton.hoverBackground": "#dae3e3", + "arduino.branding.primary": "#008184", + "arduino.branding.secondary": "#b5c8c9", + "arduino.foreground": "#edf1f1", + "arduino.output.foreground": "#ffffff", + "arduino.output.background": "#000000", + "arduino.toolbar.hoverBackground": "#f7f9f9", + "sideBar.background": "#f7f9f9", + "input.background": "#ffffff", + "foreground": "#4e5b61", + "settings.headerForeground": "#4e5b61", + "tree.indentGuidesStroke": "#dae3e3", + "tab.unfocusedActiveForeground": "#4e5b61", + "tab.inactiveBackground": "#ecf1f1" + }, + "tokenColors": [ + { + "name": "", + "settings": { + "foreground": "#434f54" + } + }, + { + "name": "Comments", + "scope": "comment", + "settings": { + "foreground": "#95a5a6cc" + } + }, + { + "name": "Keywords Attributes", + "scope": [ + "storage", + "support", + "string.quoted.single.c" + ], + "settings": { + "foreground": "#00979D" + } + }, + { + "name": "literal", + "scope": [ + "meta.function.c", + "entity.name.function", + "meta.function-call.c", + "variable.other" + ], + "settings": { + "foreground": "#D35400" + } + }, + { + "name": "punctuation", + "scope": [ + "punctuation.section", + "meta.function-call.c", + "meta.block.c", + "meta.function.c", + "variable", + "variable.name" + ], + "settings": { + "foreground": "#434f54" + } + }, + { + "name": "function preprocessor", + "scope": [ + "entity.name.function.preprocessor.c", + "meta.preprocessor.macro.c" + ], + "settings": { + "foreground": "#9e846d" + } + }, + { + "name": "constants", + "scope": [ + "string.quoted.double", + "string.quoted.other.lt-gt", + "constant" + ], + "settings": { + "foreground": "#005C5F" + } + }, + { + "name": "meta keywords", + "scope": [ + "keyword.control", + "meta.preprocessor.c" + ], + "settings": { + "foreground": "#728E00" + } + }, + { + "name": "numeric preprocessor", + "scope": [ + "meta.preprocessor.macro.c", + "constant.numeric.preprocessor.c", + "meta.preprocessor.c" + ], + "settings": { + "foreground": "#434f54" + } + } + ] +} diff --git a/package.json b/package.json index 71534a9c9..f51038496 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,9 @@ "rimraf": "^2.6.1", "semver": "^7.3.2", "typescript": "~4.5.5", - "jsdom": "^11.5.1" + "jsdom": "^11.5.1", + "style-dictionary": "^3.7.0", + "xhr2": "^0.2.1" }, "resolutions": { "find-git-exec": "0.0.4", @@ -53,6 +55,8 @@ "i18n:check": "yarn i18n:generate && git add -N ./i18n && git diff --exit-code ./i18n", "i18n:push": "node ./scripts/i18n/transifex-push.js ./i18n/en.json", "i18n:pull": "node ./scripts/i18n/transifex-pull.js ./i18n/", + "themes:pull": "node ./scripts/themes/theme-tokens-pull.js", + "themes:generate": "node ./scripts/themes/theme-generator.js", "compose-changelog": "yarn --cwd ./arduino-ide-extension compose-changelog" }, "lint-staged": { diff --git a/scripts/themes/theme-generator.js b/scripts/themes/theme-generator.js new file mode 100644 index 000000000..801180582 --- /dev/null +++ b/scripts/themes/theme-generator.js @@ -0,0 +1,112 @@ +const StyleDictionaryPackage = require('style-dictionary'); + +StyleDictionaryPackage.registerTransform({ + name: 'vsCodeName', + type: 'name', + transformer: (token) => { + // syntax tokens we remove the first part of the object path + if (token.path[0] === 'colors') { + return token.path.slice(1).join('.'); + } + + if (token.path[0] === 'syntax') { + // This allows you to have tokens at multiple levels + // like `comment` and `comment.line` + if (token.name === '*') { + // removes the first and last parts of the path + return token.path.slice(1, -1).join('.'); + } else { + // removes the first part of the path which would be 'syntax' + return token.path.slice(1).join('.'); + } + } + }, +}); + +// Add a custom format that will generate the VSCode theme JSON +StyleDictionaryPackage.registerFormat({ + name: 'vsCodeTheme', + formatter: (dictionary, config) => { + // VSCode theme JSON files have this structure + const theme = { + name: `Arduino ${config.themeType}`, + type: config.themeType, + colors: {}, + }; + + // Filter out the design tokens we don't want to add to the + // 'colors' object. This includes core colors defined in tokens/core.json5 + // and syntax tokens defined in tokens/syntax + dictionary.allProperties + .filter((token) => { + return !['color', 'syntax'].includes(token.path[0]); + }) + .forEach((token) => { + // Add each token to the colors object, the name is generated by the custom + // transform defined above + theme.colors[token.name] = token.value; + }); + + // Map the syntax styles + theme.tokenColors = dictionary.allProperties + .filter((token) => { + return token.path[0] === 'syntax'; + }) + .map((token) => ({ + name: token.name, + scope: token.scope, + settings: { + foreground: token.value, + fontStyle: token.fontStyle, + }, + })); + + // Style Dictionary formats expect a string that will be then written to a file + return JSON.stringify(theme, null, 2); + }, +}); + +function getStyleDictionaryConfig(theme) { + return { + source: [`./scripts/themes/tokens/${theme}.json`], + platforms: { + vscode: { + // Directory to build files to + buildPath: `./arduino-ide-extension/src/browser/data/`, + themeType: `${theme}`, + // The name of the custom transform we defined above + transforms: ['vsCodeName'], + files: [ + { + // The path the file will be created at. Make sure this matches + // the file paths defined in the package.json + destination: `${theme}.color-theme.json`, + // The name of the custom format defined above + format: 'vsCodeTheme', + selector: `${theme}-theme`, + }, + ], + }, + }, + }; +} + +console.log('Build started...'); + +// PROCESS THE DESIGN TOKENS FOR THE DIFFEREN BRANDS AND PLATFORMS + +['default', 'dark'].map(function (theme) { + console.log('\n=============================================='); + console.log(`\nProcessing: [${theme}]`); + + const StyleDictionary = StyleDictionaryPackage.extend( + getStyleDictionaryConfig(theme) + ); + + StyleDictionary.buildPlatform('vscode'); + + console.log('\nEnd processing'); +}); + +console.log('\n=============================================='); +console.log('\nBuild completed!'); diff --git a/scripts/themes/theme-tokens-pull.js b/scripts/themes/theme-tokens-pull.js new file mode 100644 index 000000000..b0e9238cc --- /dev/null +++ b/scripts/themes/theme-tokens-pull.js @@ -0,0 +1,34 @@ +const XMLHttpRequest = require('xhr2'); +const fs = require('fs'); + +const JSONBIN_MASTER_KEY = process.env.JSONBIN_MASTER_KEY; +const JSONBIN_ID = process.env.JSONBIN_ID; + +const destFolder = './scripts/themes/tokens'; + +if (!fs.existsSync(destFolder)){ + fs.mkdirSync(destFolder); +} + +let req = new XMLHttpRequest(); + +req.open('GET', 'https://api.jsonbin.io/v3/b/'+ JSONBIN_ID +'/latest', true); +req.setRequestHeader('X-Master-Key', JSONBIN_MASTER_KEY); +req.send(); + +req.onreadystatechange = () => { + if (req.readyState == XMLHttpRequest.DONE) { + const tokens = JSON.parse(req.responseText).record.values; + fs.writeFile( + destFolder + '/arduino-tokens.json', + JSON.stringify(tokens), + (err) => { + if (err) { + console.error(err); + return; + } + console.log('Arduino tokens file saved!'); + } + ); + } +}; diff --git a/yarn.lock b/yarn.lock index 1ca796316..08bab7fb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5143,6 +5143,14 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -5189,6 +5197,24 @@ caniuse-lite@^1.0.30001332: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz#59590c8ffa8b5939cf4161f00827b8873ad72498" integrity sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA== +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -5254,6 +5280,42 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +change-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== + dependencies: + camel-case "^4.1.2" + capital-case "^1.0.4" + constant-case "^3.0.4" + dot-case "^3.0.4" + header-case "^2.0.4" + no-case "^3.0.4" + param-case "^3.0.4" + pascal-case "^3.1.2" + path-case "^3.0.4" + sentence-case "^3.0.4" + snake-case "^3.0.4" + tslib "^2.0.3" + +changes-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/changes-stream/-/changes-stream-2.2.0.tgz#9cf2bdbc2173c29c634aec9948e5d23b24d37c18" + integrity sha1-nPK9vCFzwpxjSuyZSOXSOyTTfBg= + dependencies: + back "~0.1.5" + debug "~0.8.0" + http-https "~1.0.0" + readable-stream "1.0.x" + character-entities@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.1.tgz#98724833e1e27990dee0bd0f2b8a859c3476aac7" @@ -5550,7 +5612,7 @@ commander@^7.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^8.2.0: +commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -5659,8 +5721,15 @@ content-disposition@0.5.4, content-disposition@^0.5.2: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + +constant-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== dependencies: - safe-buffer "5.2.1" + no-case "^3.0.4" + tslib "^2.0.3" + upper-case "^2.0.2" content-type@~1.0.4: version "1.0.4" @@ -6404,6 +6473,22 @@ dompurify@^2.2.9: resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.8.tgz#224fe9ae57d7ebd9a1ae1ac18c1c1ca3f532226f" integrity sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw== +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dot-prop@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" @@ -8358,6 +8443,14 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +header-case@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== + dependencies: + capital-case "^1.0.4" + tslib "^2.0.3" + helper-date@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/helper-date/-/helper-date-1.0.1.tgz#12fedea3ad8e44a7ca4c4efb0ff4104a5120cffb" @@ -9418,11 +9511,26 @@ json5@^2.1.2, json5@^2.2.1: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +json5@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +json5@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + jsonc-parser@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== +jsonc-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" + integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -9943,6 +10051,13 @@ loupe@^2.3.1: dependencies: get-func-name "^2.0.0" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lowercase-keys@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" @@ -10992,6 +11107,18 @@ node-abi@*, node-abi@^3.0.0, node-abi@^3.3.0: version "3.15.0" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.15.0.tgz#cd9ac8c58328129b49998cc6fa16aa5506152716" integrity sha512-Ic6z/j6I9RLm4ov7npo1I48UQr2BEyFCqh6p7S1dhEx9jPO0GPGq/e2Rb7x7DroQrmiVMz/Bw1vJm9sPAl2nxA== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-abi@*: + version "3.5.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.5.0.tgz#26e8b7b251c3260a5ac5ba5aef3b4345a0229248" + integrity sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw== dependencies: semver "^7.3.5" @@ -11753,6 +11880,14 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -11830,6 +11965,14 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -11840,6 +11983,14 @@ path-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== +path-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -13339,6 +13490,24 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +sentence-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + +sentence-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + serialize-error@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" @@ -13555,6 +13724,22 @@ smart-buffer@^4.1.0, smart-buffer@^4.2.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -14132,6 +14317,21 @@ strong-log-transformer@^2.0.0: minimist "^1.2.0" through "^2.3.4" +style-dictionary@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/style-dictionary/-/style-dictionary-3.7.0.tgz#02f4b17232cbb1142a3fdc09a17dfb08aafde3b0" + integrity sha512-BL4AQS5kNDBXbFHWJhlCve6+ojnHgHkiwhf2nNByU698elXWdyK5b27OprphT4q0/tJ52zB+lodhqxIxbNOajQ== + dependencies: + chalk "^4.0.0" + change-case "^4.1.2" + commander "^8.3.0" + fs-extra "^10.0.0" + glob "^7.2.0" + json5 "^2.2.0" + jsonc-parser "^3.0.0" + lodash "^4.17.15" + tinycolor2 "^1.4.1" + style-loader@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" @@ -14407,6 +14607,11 @@ timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +tinycolor2@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" + integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== + tippy.js@^6.3.1: version "6.3.7" resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" @@ -14952,6 +15157,20 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== +upper-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== + dependencies: + tslib "^2.0.3" + +upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== + dependencies: + tslib "^2.0.3" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -15533,6 +15752,11 @@ xdg-trashdir@^2.1.1: user-home "^2.0.0" xdg-basedir "^2.0.0" +xhr2@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.2.1.tgz#4e73adc4f9cfec9cbd2157f73efdce3a5f108a93" + integrity sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"