From 2542a43ec0f8c490586d50d25eb3782cb498e8a5 Mon Sep 17 00:00:00 2001 From: Dominik Prokop Date: Tue, 12 Feb 2019 21:54:20 +0100 Subject: [PATCH] Regenerating variabless sas on theme edit v1 --- package.json | 11 +- .../src/themes/_variables.dark.scss.tmpl.ts | 29 +- .../src/themes/_variables.light.scss.tmpl.ts | 385 ++++++++++++++++++ public/app/core/specs/search_results.test.ts | 2 +- .../playlist/specs/playlist_srv.test.ts | 6 +- public/sass/_variables.dark.scss | 7 +- public/sass/_variables.light.scss | 102 +++-- scripts/cli/generateSassVariableFiles.ts | 35 ++ scripts/cli/nodemon.json | 7 - scripts/cli/start.js | 23 ++ scripts/cli/watch.ts | 24 -- yarn.lock | 105 ++--- 12 files changed, 562 insertions(+), 174 deletions(-) create mode 100644 packages/grafana-ui/src/themes/_variables.light.scss.tmpl.ts create mode 100644 scripts/cli/generateSassVariableFiles.ts delete mode 100644 scripts/cli/nodemon.json create mode 100644 scripts/cli/start.js delete mode 100644 scripts/cli/watch.ts diff --git a/package.json b/package.json index b9a7fc691a6..7eb3c1dd1c3 100644 --- a/package.json +++ b/package.json @@ -17,13 +17,12 @@ "@babel/preset-react": "^7.0.0", "@babel/preset-typescript": "^7.1.0", "@rtsao/plugin-proposal-class-properties": "^7.0.1-patch.1", - "@types/chokidar": "^1.7.5", "@types/classnames": "^2.2.6", "@types/d3": "^4.10.1", "@types/enzyme": "^3.1.13", "@types/jest": "^23.3.2", "@types/jquery": "^1.10.35", - "@types/node": "^10.12.24", + "@types/node": "^8.0.31", "@types/react": "^16.7.6", "@types/react-dom": "^16.0.9", "@types/react-grid-layout": "^0.16.6", @@ -37,8 +36,8 @@ "babel-jest": "^23.6.0", "babel-loader": "^8.0.4", "babel-plugin-angularjs-annotate": "^0.9.0", - "chokidar": "^2.1.0", "clean-webpack-plugin": "^0.1.19", + "concurrently": "^4.1.0", "css-loader": "^0.28.7", "enzyme": "^3.6.0", "enzyme-adapter-react-16": "^1.5.0", @@ -72,7 +71,6 @@ "jest-date-mock": "^1.0.6", "lint-staged": "^8.1.3", "load-grunt-tasks": "3.5.2", - "log-timestamp": "^0.2.1", "mini-css-extract-plugin": "^0.4.0", "mocha": "^4.0.1", "monaco-editor": "^0.15.6", @@ -116,7 +114,7 @@ }, "scripts": { "dev": "webpack --progress --colors --mode development --config scripts/webpack/webpack.dev.js", - "start": "webpack-dev-server --progress --colors --mode development --config scripts/webpack/webpack.hot.js", + "start": "node ./scripts/cli/start.js", "watch": "webpack --progress --colors --watch --mode development --config scripts/webpack/webpack.dev.js", "build": "grunt build", "test": "grunt test", @@ -126,8 +124,7 @@ "api-tests": "jest --notify --watch --config=tests/api/jest.js", "precommit": "grunt precommit", "storybook": "cd packages/grafana-ui && yarn storybook", - "tmp": "nodemon -e ts -w ./packages/grafana-ui/src/themes -x yarn run tmp:exec", - "tmp:exec": "ts-node --project ./scripts/cli/tsconfig.json ./scripts/cli/watch.ts" + "themes:generate": "ts-node --project ./scripts/cli/tsconfig.json ./scripts/cli/generateSassVariableFiles.ts" }, "husky": { "hooks": { diff --git a/packages/grafana-ui/src/themes/_variables.dark.scss.tmpl.ts b/packages/grafana-ui/src/themes/_variables.dark.scss.tmpl.ts index 327b783be3c..617f9d5fd83 100644 --- a/packages/grafana-ui/src/themes/_variables.dark.scss.tmpl.ts +++ b/packages/grafana-ui/src/themes/_variables.dark.scss.tmpl.ts @@ -8,23 +8,24 @@ export const darkThemeVarsTemplate = (theme: GrafanaTheme) => ` // Grays // ------------------------- - $black: #000; - $dark-1: #141414; - $dark-2: #1f1f20; - $dark-3: #262628; - $dark-4: #333333; - $dark-5: #444444; - $gray-1: #555555; - $gray-2: #8e8e8e; - $gray-3: #b3b3b3; - $gray-4: #d8d9da; - $gray-5: #ececec; - $gray-7: #fbfbfb; + $black: ${theme.colors.black}; + $dark-1: ${theme.colors.dark2}; + $dark-2: ${theme.colors.dark2}; + $dark-3: ${theme.colors.dark3}; + $dark-4: ${theme.colors.dark4}; + $dark-5: ${theme.colors.dark5}; + $gray-1: ${theme.colors.gray1}; + $gray-2: ${theme.colors.gray2}; + $gray-3: ${theme.colors.gray3}; + $gray-4: ${theme.colors.gray4}; + $gray-5: ${theme.colors.gray5}; + $gray-6: ${theme.colors.gray6}; + $gray-7: ${theme.colors.gray7}; $gray-blue: #212327; $input-black: #09090b; - $white: #fff; + $white: ${theme.colors.white}; // Accent colors // ------------------------- @@ -383,5 +384,5 @@ export const darkThemeVarsTemplate = (theme: GrafanaTheme) => ` $vertical-resize-handle-bg: $dark-5; $vertical-resize-handle-dots: $gray-1; -$vertical-resize-handle-dots-hover: $gray-2; + $vertical-resize-handle-dots-hover: $gray-2; `; diff --git a/packages/grafana-ui/src/themes/_variables.light.scss.tmpl.ts b/packages/grafana-ui/src/themes/_variables.light.scss.tmpl.ts new file mode 100644 index 00000000000..11444e76bab --- /dev/null +++ b/packages/grafana-ui/src/themes/_variables.light.scss.tmpl.ts @@ -0,0 +1,385 @@ +import { GrafanaTheme } from '../types'; + +export const lightThemeVarsTemplate = (theme: GrafanaTheme) => ` + // Global values + // -------------------------------------------------- + + $theme-name: light; + + // Grays + // ------------------------- + $black: ${theme.colors.black}; + $dark-1: ${theme.colors.dark1}; + $dark-2: ${theme.colors.dark2}; + $dark-3: ${theme.colors.dark3}; + $dark-4: ${theme.colors.dark4}; + $dark-5: ${theme.colors.dark5}; + $gray-1: ${theme.colors.gray1}; + $gray-2: ${theme.colors.gray2}; + $gray-3: ${theme.colors.gray3}; + $gray-4: ${theme.colors.gray4}; + $gray-5: ${theme.colors.gray5}; + $gray-6: ${theme.colors.gray6}; + $gray-7: ${theme.colors.gray7}; + + $white: ${theme.colors.white}; + + // Accent colors + // ------------------------- + $blue: ${theme.colors.blue}; + $blue-light: #00a8e6; + $green: #3aa655; + $red: #d44939; + $yellow: #ff851b; + $orange: #ff7941; + $purple: #9954bb; + $variable: $blue; + + $brand-primary: $orange; + $brand-success: $green; + $brand-warning: $orange; + $brand-danger: $red; + + $query-red: $red; + $query-green: $green; + $query-purple: $purple; + $query-orange: $orange; + $query-keyword: $blue; + + // Status colors + // ------------------------- + $online: #01a64f; + $warn: #f79520; + $critical: #ec2128; + + // Scaffolding + // ------------------------- + $body-bg: $gray-7; + $page-bg: $gray-7; + + $body-color: $gray-1; + $text-color: $gray-1; + $text-color-strong: $dark-2; + $text-color-weak: $gray-2; + $text-color-faint: $gray-4; + $text-color-emphasis: $dark-5; + + $text-shadow-faint: none; + $textShadow: none; + + // gradients + $brand-gradient: linear-gradient( + to right, + rgba(255, 213, 0, 1) 0%, + rgba(255, 68, 0, 1) 99%, + rgba(255, 68, 0, 1) 100% + ); + + $page-gradient: linear-gradient(180deg, $white 10px, $gray-7 100px); + $edit-gradient: linear-gradient(-60deg, $gray-7, #f5f6f9 70%, $gray-7 98%); + + // Links + // ------------------------- + $link-color: $gray-1; + $link-color-disabled: lighten($link-color, 30%); + $link-hover-color: darken($link-color, 20%); + $external-link-color: $blue-light; + + // Typography + // ------------------------- + $headings-color: $text-color; + $abbr-border-color: $gray-2 !default; + $text-muted: $text-color-weak; + + $hr-border-color: $dark-3 !default; + + // Panel + // ------------------------- + $panel-bg: $white; + $panel-border: solid 1px $gray-5; + $panel-header-hover-bg: $gray-6; + $panel-corner: $gray-4; + + // Page header + $page-header-bg: linear-gradient(90deg, $white, $gray-7); + $page-header-shadow: inset 0px -3px 10px $gray-6; + $page-header-border-color: $gray-4; + + $divider-border-color: $gray-2; + + // Graphite Target Editor + $tight-form-bg: #eaebee; + $tight-form-func-bg: $gray-5; + $tight-form-func-highlight-bg: $gray-6; + + $modal-backdrop-bg: $body-bg; + $code-tag-bg: $gray-6; + $code-tag-border: darken($code-tag-bg, 3%); + + // cards + $card-background: linear-gradient(135deg, $gray-6, $gray-5); + $card-background-hover: linear-gradient(135deg, $gray-5, $gray-6); + $card-shadow: -1px -1px 0 0 hsla(0, 0%, 100%, 0.1), 1px 1px 0 0 rgba(0, 0, 0, 0.1); + + // Lists + $list-item-bg: linear-gradient(135deg, $gray-5, $gray-6); //$card-background; + $list-item-hover-bg: darken($gray-5, 5%); + $list-item-link-color: $text-color; + $list-item-shadow: $card-shadow; + + $empty-list-cta-bg: $gray-6; + + // Scrollbars + $scrollbarBackground: $gray-5; + $scrollbarBackground2: $gray-5; + $scrollbarBorder: $gray-4; + + // Tables + // ------------------------- + $table-bg: transparent; // overall background-color + $table-bg-accent: $gray-5; // for striping + $table-border: $gray-3; // table and cell border + + $table-bg-odd: $gray-6; + $table-bg-hover: $gray-5; + + // Buttons + // ------------------------- + $btn-primary-bg: $brand-primary; + $btn-primary-bg-hl: lighten($brand-primary, 8%); + + $btn-secondary-bg: $blue; + $btn-secondary-bg-hl: lighten($blue, 4%); + + $btn-success-bg: lighten($green, 3%); + $btn-success-bg-hl: darken($green, 3%); + + $btn-warning-bg: lighten($orange, 3%); + $btn-warning-bg-hl: darken($orange, 3%); + + $btn-danger-bg: lighten($red, 3%); + $btn-danger-bg-hl: darken($red, 3%); + + $btn-inverse-bg: $gray-6; + $btn-inverse-bg-hl: darken($gray-6, 5%); + $btn-inverse-text-color: $gray-1; + $btn-inverse-text-shadow: 0 1px 0 rgba(255, 255, 255, 0.4); + + $btn-link-color: $gray-1; + + $iconContainerBackground: $white; + + $btn-divider-left: $gray-4; + $btn-divider-right: $gray-7; + + $btn-drag-image: '../img/grab_light.svg'; + + // Forms + // ------------------------- + $input-bg: $white; + $input-bg-disabled: $gray-5; + + $input-color: $dark-3; + $input-border-color: $gray-5; + $input-box-shadow: none; + $input-border-focus: $blue !default; + $input-box-shadow-focus: $blue !default; + $input-color-placeholder: $gray-4 !default; + $input-label-bg: $gray-5; + $input-label-border-color: $gray-5; + $input-color-select-arrow: $gray-1; + + // Input placeholder text color + $placeholderText: $gray-2; + + // search + $search-shadow: 0 5px 30px 0 $gray-4; + $search-filter-box-bg: $gray-7; + + // Typeahead + $typeahead-shadow: 0 5px 10px 0 $gray-5; + $typeahead-selected-bg: $gray-6; + $typeahead-selected-color: $yellow; + + // Dropdowns + // ------------------------- + $dropdownBackground: $white; + $dropdownBorder: $gray-4; + $dropdownDividerTop: $gray-6; + $dropdownDividerBottom: $white; + + $dropdownLinkColor: $dark-3; + $dropdownLinkColorHover: $link-color; + $dropdownLinkColorActive: $link-color; + + $dropdownLinkBackgroundHover: $gray-6; + + // Horizontal forms & lists + // ------------------------- + $horizontalComponentOffset: 180px; + + // Navbar + // ------------------------- + $navbarHeight: 52px; + + $navbarBackground: $white; + $navbarBorder: 1px solid $gray-4; + $navbarShadow: 0 0 3px #c1c1c1; + + $navbarLinkColor: #444; + + $navbarButtonBackground: lighten($navbarBackground, 3%); + $navbarButtonBackgroundHighlight: lighten($navbarBackground, 5%); + + $navbar-button-border: $gray-4; + + // Sidemenu + // ------------------------- + $side-menu-bg: $dark-2; + $side-menu-bg-mobile: rgba(0, 0, 0, 0); //$gray-6; + $side-menu-item-hover-bg: $gray-1; + $side-menu-shadow: 5px 0px 10px -5px $gray-1; + $side-menu-link-color: $gray-6; + + // Menu dropdowns + // ------------------------- + $menu-dropdown-bg: $gray-7; + $menu-dropdown-hover-bg: $gray-6; + $menu-dropdown-shadow: 5px 5px 10px -5px $gray-1; + + // Tabs + // ------------------------- + $tab-border-color: $gray-5; + + // Toolbar + $toolbar-bg: white; + + // Form states and alerts + // ------------------------- + $warning-text-color: lighten($orange, 10%); + $error-text-color: lighten($red, 10%); + $success-text-color: lighten($green, 10%); + $info-text-color: $blue; + + $alert-error-bg: linear-gradient(90deg, #d44939, #e04d3d); + $alert-success-bg: linear-gradient(90deg, #3aa655, #47b274); + $alert-warning-bg: linear-gradient(90deg, #d44939, #e04d3d); + $alert-info-bg: $blue; + + // popover + $popover-bg: $page-bg; + $popover-color: $text-color; + $popover-border-color: $gray-5; + $popover-shadow: 0 0 20px $white; + + $popover-help-bg: $blue; + $popover-help-color: $gray-6; + + $popover-error-bg: $btn-danger-bg; + + // Tooltips and popovers + // ------------------------- + $tooltipColor: $popover-help-color; + $tooltipArrowWidth: 5px; + $tooltipLinkColor: lighten($popover-help-color, 5%); + $graph-tooltip-bg: $gray-5; + + $tooltipBackground: $gray-1; + $tooltipColor: $gray-7; + $tooltipArrowColor: $tooltipBackground; // Used by Angular tooltip + $tooltipBackgroundError: $brand-danger; + + // images + $checkboxImageUrl: '../img/checkbox_white.png'; + + // info box + $info-box-border-color: lighten($blue, 20%); + + // footer + $footer-link-color: $gray-3; + $footer-link-hover: $dark-5; + + // json explorer + $json-explorer-default-color: black; + $json-explorer-string-color: green; + $json-explorer-number-color: blue; + $json-explorer-boolean-color: red; + $json-explorer-null-color: #855a00; + $json-explorer-undefined-color: rgb(202, 11, 105); + $json-explorer-function-color: #ff20ed; + $json-explorer-rotate-time: 100ms; + $json-explorer-toggler-opacity: 0.6; + $json-explorer-bracket-color: blue; + $json-explorer-key-color: #00008b; + $json-explorer-url-color: blue; + + // Changelog and diff + // ------------------------- + $diff-label-bg: $gray-5; + $diff-label-fg: $gray-2; + + $diff-arrow-color: $dark-3; + $diff-group-bg: $gray-7; + + $diff-json-bg: $gray-5; + $diff-json-fg: $gray-2; + + $diff-json-added: lighten(desaturate($green, 30%), 10%); + $diff-json-deleted: desaturate($red, 35%); + + $diff-json-old: #5a372a; + $diff-json-new: #664e33; + + $diff-json-changed-fg: $gray-6; + $diff-json-changed-num: $gray-4; + + $diff-json-icon: $gray-4; + + //Submenu + $variable-option-bg: $blue-light; + + //Switch Slider + // ------------------------- + $switch-bg: $white; + $switch-slider-color: $gray-7; + $switch-slider-off-bg: $gray-5; + $switch-slider-on-bg: linear-gradient(90deg, $yellow, $red); + $switch-slider-shadow: 0 0 3px $dark-5; + + //Checkbox + // ------------------------- + $checkbox-bg: $gray-6; + $checkbox-border: 1px solid $gray-3; + $checkbox-checked-bg: linear-gradient(0deg, $yellow, $red); + $checkbox-color: $gray-7; + + //Panel Edit + // ------------------------- + $panel-editor-shadow: 0px 0px 8px $gray-3; + $panel-editor-side-menu-shadow: drop-shadow(0 0 2px $gray-3); + $panel-editor-viz-item-shadow: 0 0 4px $gray-3; + $panel-editor-viz-item-border: 1px solid $gray-3; + $panel-editor-viz-item-shadow-hover: 0 0 4px $blue-light; + $panel-editor-viz-item-border-hover: 1px solid $blue-light; + $panel-editor-viz-item-bg: $white; + $panel-editor-tabs-line-color: $dark-5; + $panel-editor-viz-item-bg-hover: lighten($blue, 62%); + + $panel-options-group-border: none; + $panel-options-group-header-bg: $gray-5; + + $panel-grid-placeholder-bg: lighten($blue, 62%); + $panel-grid-placeholder-shadow: 0 0 4px $blue-light; + + // logs + $logs-color-unkown: $gray-5; + + // toggle-group + $button-toggle-group-btn-active-bg: $brand-primary; + $button-toggle-group-btn-active-shadow: inset 0 0 4px $white; + $button-toggle-group-btn-seperator-border: 1px solid $gray-6; + + $vertical-resize-handle-bg: $gray-4; + $vertical-resize-handle-dots: $gray-3; + $vertical-resize-handle-dots-hover: $gray-2; +`; diff --git a/public/app/core/specs/search_results.test.ts b/public/app/core/specs/search_results.test.ts index 96dbc8bb963..af0b9d19873 100644 --- a/public/app/core/specs/search_results.test.ts +++ b/public/app/core/specs/search_results.test.ts @@ -4,7 +4,7 @@ import appEvents from 'app/core/app_events'; jest.mock('app/core/app_events', () => { return { - emit: jest.fn(), + emit: jest.fn(), }; }); diff --git a/public/app/features/playlist/specs/playlist_srv.test.ts b/public/app/features/playlist/specs/playlist_srv.test.ts index d2ff27e54e0..bfb1732d9c6 100644 --- a/public/app/features/playlist/specs/playlist_srv.test.ts +++ b/public/app/features/playlist/specs/playlist_srv.test.ts @@ -2,7 +2,7 @@ import { PlaylistSrv } from '../playlist_srv'; const dashboards = [{ url: 'dash1' }, { url: 'dash2' }]; -const createPlaylistSrv = (): [PlaylistSrv, { url: jest.MockInstance }] => { +const createPlaylistSrv = (): [PlaylistSrv, { url: jest.MockInstance }] => { const mockBackendSrv = { get: jest.fn(url => { switch (url) { @@ -27,7 +27,7 @@ const createPlaylistSrv = (): [PlaylistSrv, { url: jest.MockInstance }] => return [new PlaylistSrv(mockLocation, mockTimeout, mockBackendSrv), mockLocation]; }; -const mockWindowLocation = (): [jest.MockInstance, () => void] => { +const mockWindowLocation = (): [jest.MockInstance, () => void] => { const oldLocation = window.location; const hrefMock = jest.fn(); @@ -50,7 +50,7 @@ const mockWindowLocation = (): [jest.MockInstance, () => void] => { describe('PlaylistSrv', () => { let srv: PlaylistSrv; - let hrefMock: jest.MockInstance; + let hrefMock: jest.MockInstance; let unmockLocation: () => void; const initialUrl = 'http://localhost/playlist'; diff --git a/public/sass/_variables.dark.scss b/public/sass/_variables.dark.scss index 704c1cb7785..4a3f5eb97d2 100644 --- a/public/sass/_variables.dark.scss +++ b/public/sass/_variables.dark.scss @@ -5,8 +5,8 @@ $theme-name: dark; // Grays // ------------------------- -$black: #000; -$dark-1: #141414; +$black: #000000; +$dark-1: #1f1f20; $dark-2: #1f1f20; $dark-3: #262628; $dark-4: #333333; @@ -16,12 +16,13 @@ $gray-2: #8e8e8e; $gray-3: #b3b3b3; $gray-4: #d8d9da; $gray-5: #ececec; +$gray-6: #f4f5f8; $gray-7: #fbfbfb; $gray-blue: #212327; $input-black: #09090b; -$white: #fff; +$white: #ffffff; // Accent colors // ------------------------- diff --git a/public/sass/_variables.light.scss b/public/sass/_variables.light.scss index 57ab0d9e12a..ff9e884a39d 100644 --- a/public/sass/_variables.light.scss +++ b/public/sass/_variables.light.scss @@ -3,24 +3,10 @@ $theme-name: light; -// New Colors -// ------------------------- -$sapphire-faint: #f5f9ff; -$sapphire-light: #a8caff; -$sapphire-base: #3274d9; -$sapphire-shade: #1f60c4; -$lobster-base: #e02f44; -$lobster-shade: #c4162a; -$green-base: #37872d; -$green-shade: #19730e; -$green-base: #3eb15b; -$green-shade: #369b4f; -$purple-shade: #8f3bb8; -$yellow-base: #f2cc0c; - // Grays // ------------------------- -$black: #000; +$black: #000000; +$dark-1: #13161d; $dark-2: #1e2028; $dark-3: #303133; $dark-4: #35373f; @@ -33,35 +19,35 @@ $gray-5: #dde4ed; $gray-6: #e9edf2; $gray-7: #f7f8fa; -$white: #fff; +$white: #ffffff; // Accent colors // ------------------------- $blue: #0083b3; $blue-light: #00a8e6; $green: #3aa655; -$red: $lobster-base; +$red: #d44939; $yellow: #ff851b; $orange: #ff7941; $purple: #9954bb; -$variable: $purple-shade; +$variable: $blue; $brand-primary: $orange; $brand-success: $green; $brand-warning: $orange; -$brand-danger: $lobster-base; +$brand-danger: $red; -$query-red: $lobster-base; +$query-red: $red; $query-green: $green; $query-purple: $purple; $query-orange: $orange; -$query-keyword: $sapphire-base; +$query-keyword: $blue; // Status colors // ------------------------- -$online: $green-shade; +$online: #01a64f; $warn: #f79520; -$critical: $lobster-shade; +$critical: #ec2128; // Scaffolding // ------------------------- @@ -76,6 +62,7 @@ $text-color-faint: $gray-4; $text-color-emphasis: $dark-5; $text-shadow-faint: none; +$textShadow: none; // gradients $brand-gradient: linear-gradient(to right, rgba(255, 213, 0, 1) 0%, rgba(255, 68, 0, 1) 99%, rgba(255, 68, 0, 1) 100%); @@ -88,7 +75,7 @@ $edit-gradient: linear-gradient(-60deg, $gray-7, #f5f6f9 70%, $gray-7 98%); $link-color: $gray-1; $link-color-disabled: lighten($link-color, 30%); $link-hover-color: darken($link-color, 20%); -$external-link-color: $sapphire-shade; +$external-link-color: $blue-light; // Typography // ------------------------- @@ -150,17 +137,20 @@ $table-bg-hover: $gray-5; // Buttons // ------------------------- -$btn-primary-bg: $green-base; -$btn-primary-bg-hl: $green-shade; +$btn-primary-bg: $brand-primary; +$btn-primary-bg-hl: lighten($brand-primary, 8%); -$btn-secondary-bg: $sapphire-base; -$btn-secondary-bg-hl: $sapphire-shade; +$btn-secondary-bg: $blue; +$btn-secondary-bg-hl: lighten($blue, 4%); -$btn-success-bg: $green-base; -$btn-success-bg-hl: $green-shade; +$btn-success-bg: lighten($green, 3%); +$btn-success-bg-hl: darken($green, 3%); -$btn-danger-bg: $lobster-base; -$btn-danger-bg-hl: $lobster-shade; +$btn-warning-bg: lighten($orange, 3%); +$btn-warning-bg-hl: darken($orange, 3%); + +$btn-danger-bg: lighten($red, 3%); +$btn-danger-bg-hl: darken($red, 3%); $btn-inverse-bg: $gray-6; $btn-inverse-bg-hl: darken($gray-6, 5%); @@ -184,8 +174,8 @@ $input-bg-disabled: $gray-5; $input-color: $dark-3; $input-border-color: $gray-5; $input-box-shadow: none; -$input-border-focus: $sapphire-light !default; -$input-box-shadow-focus: $sapphire-light !default; +$input-border-focus: $blue !default; +$input-box-shadow-focus: $blue !default; $input-color-placeholder: $gray-4 !default; $input-label-bg: $gray-5; $input-label-border-color: $gray-5; @@ -259,13 +249,14 @@ $toolbar-bg: white; // Form states and alerts // ------------------------- $warning-text-color: lighten($orange, 10%); -$error-text-color: $lobster-shade; +$error-text-color: lighten($red, 10%); $success-text-color: lighten($green, 10%); +$info-text-color: $blue; -$alert-error-bg: linear-gradient(90deg, $lobster-base, $lobster-shade); -$alert-success-bg: linear-gradient(90deg, $green-base, $green-shade); -$alert-warning-bg: linear-gradient(90deg, $lobster-base, $lobster-shade); -$alert-info-bg: $sapphire-base; +$alert-error-bg: linear-gradient(90deg, #d44939, #e04d3d); +$alert-success-bg: linear-gradient(90deg, #3aa655, #47b274); +$alert-warning-bg: linear-gradient(90deg, #d44939, #e04d3d); +$alert-info-bg: $blue; // popover $popover-bg: $page-bg; @@ -273,7 +264,7 @@ $popover-color: $text-color; $popover-border-color: $gray-5; $popover-shadow: 0 0 20px $white; -$popover-help-bg: $sapphire-base; +$popover-help-bg: $blue; $popover-help-color: $gray-6; $popover-error-bg: $btn-danger-bg; @@ -294,7 +285,7 @@ $tooltipBackgroundError: $brand-danger; $checkboxImageUrl: '../img/checkbox_white.png'; // info box -$info-box-border-color: $sapphire-base; +$info-box-border-color: lighten($blue, 20%); // footer $footer-link-color: $gray-3; @@ -303,16 +294,16 @@ $footer-link-hover: $dark-5; // json explorer $json-explorer-default-color: black; $json-explorer-string-color: green; -$json-explorer-number-color: $sapphire-base; -$json-explorer-boolean-color: $lobster-base; +$json-explorer-number-color: blue; +$json-explorer-boolean-color: red; $json-explorer-null-color: #855a00; $json-explorer-undefined-color: rgb(202, 11, 105); $json-explorer-function-color: #ff20ed; $json-explorer-rotate-time: 100ms; $json-explorer-toggler-opacity: 0.6; -$json-explorer-bracket-color: $sapphire-base; +$json-explorer-bracket-color: blue; $json-explorer-key-color: #00008b; -$json-explorer-url-color: $sapphire-base; +$json-explorer-url-color: blue; // Changelog and diff // ------------------------- @@ -323,35 +314,35 @@ $diff-arrow-color: $dark-3; $diff-group-bg: $gray-7; $diff-json-bg: $gray-5; -$diff-json-fg: $gray-1; +$diff-json-fg: $gray-2; -$diff-json-added: $sapphire-shade; -$diff-json-deleted: $lobster-shade; +$diff-json-added: lighten(desaturate($green, 30%), 10%); +$diff-json-deleted: desaturate($red, 35%); $diff-json-old: #5a372a; $diff-json-new: #664e33; -$diff-json-changed-fg: $gray-7; +$diff-json-changed-fg: $gray-6; $diff-json-changed-num: $gray-4; $diff-json-icon: $gray-4; //Submenu -$variable-option-bg: $dropdownLinkBackgroundHover; +$variable-option-bg: $blue-light; //Switch Slider // ------------------------- $switch-bg: $white; $switch-slider-color: $gray-7; $switch-slider-off-bg: $gray-5; -$switch-slider-on-bg: linear-gradient(90deg, #ff9830, #e55400); +$switch-slider-on-bg: linear-gradient(90deg, $yellow, $red); $switch-slider-shadow: 0 0 3px $dark-5; //Checkbox // ------------------------- $checkbox-bg: $gray-6; $checkbox-border: 1px solid $gray-3; -$checkbox-checked-bg: linear-gradient(0deg, #ff9830, #e55400); +$checkbox-checked-bg: linear-gradient(0deg, $yellow, $red); $checkbox-color: $gray-7; //Panel Edit @@ -365,11 +356,12 @@ $panel-editor-viz-item-border-hover: 1px solid $blue-light; $panel-editor-viz-item-bg: $white; $panel-editor-tabs-line-color: $dark-5; $panel-editor-viz-item-bg-hover: lighten($blue, 62%); + $panel-options-group-border: none; $panel-options-group-header-bg: $gray-5; -$panel-grid-placeholder-bg: $sapphire-faint; -$panel-grid-placeholder-shadow: 0 0 4px $sapphire-light; +$panel-grid-placeholder-bg: lighten($blue, 62%); +$panel-grid-placeholder-shadow: 0 0 4px $blue-light; // logs $logs-color-unkown: $gray-5; diff --git a/scripts/cli/generateSassVariableFiles.ts b/scripts/cli/generateSassVariableFiles.ts new file mode 100644 index 00000000000..aaea77b200d --- /dev/null +++ b/scripts/cli/generateSassVariableFiles.ts @@ -0,0 +1,35 @@ +import fs from 'fs'; +import darkTheme from '@grafana/ui/src/themes/dark'; +import lightTheme from '@grafana/ui/src/themes/light'; +import { darkThemeVarsTemplate } from '@grafana/ui/src/themes/_variables.dark.scss.tmpl'; +import { lightThemeVarsTemplate } from '@grafana/ui/src/themes/_variables.light.scss.tmpl'; + +const darkThemeVariablesPath = __dirname + '/../../public/sass/_variables.dark.scss'; +const lightThemeVariablesPath = __dirname + '/../../public/sass/_variables.light.scss'; + +const writeVariablesFile = async (path: string, data: string) => { + return new Promise((resolve, reject) => { + fs.writeFile(path, data, e => { + if (e) { + reject(e); + } else { + resolve(data); + } + }); + }); +}; + +const generateSassVariableFiles = async () => { + try { + await Promise.all([ + writeVariablesFile(darkThemeVariablesPath, darkThemeVarsTemplate(darkTheme)), + writeVariablesFile(lightThemeVariablesPath, lightThemeVarsTemplate(lightTheme)), + ]); + console.log('\nSASS variable files generated'); + } catch (error) { + console.error('\nWriting SASS variable files failed', error); + process.exit(1); + } +}; + +generateSassVariableFiles(); diff --git a/scripts/cli/nodemon.json b/scripts/cli/nodemon.json deleted file mode 100644 index 3875f244868..00000000000 --- a/scripts/cli/nodemon.json +++ /dev/null @@ -1,7 +0,0 @@ - -{ - "watch": ["packages/grafana-ui/src/themes"], - "ext": "ts", - "ignore": ["src/**/*.spec.ts"], - "exec": "ts-node ./src/index.ts" -} diff --git a/scripts/cli/start.js b/scripts/cli/start.js new file mode 100644 index 00000000000..a31b04b2db2 --- /dev/null +++ b/scripts/cli/start.js @@ -0,0 +1,23 @@ +const concurrently = require('concurrently'); + +const startTask = async () => { + try { + const res = await concurrently([ + { + command: 'nodemon -e ts -w ./packages/grafana-ui/src/themes -x yarn run themes:generate', + name: 'SASS variables generator', + }, + { + command: 'webpack-dev-server --progress --colors --mode development --config scripts/webpack/webpack.hot.js', + name: 'Dev server', + }, + ], { + killOthers: ['failure', 'failure'], + }); + } catch (e) { + console.error(e); + process.exit(1); + } +}; + +startTask(); diff --git a/scripts/cli/watch.ts b/scripts/cli/watch.ts deleted file mode 100644 index 3592959a795..00000000000 --- a/scripts/cli/watch.ts +++ /dev/null @@ -1,24 +0,0 @@ -// import chokidar from 'chokidar'; -import darkTheme from '@grafana/ui/src/themes/dark'; -import { darkThemeVarsTemplate } from '@grafana/ui/src/themes/_variables.dark.scss.tmpl'; -import fs from 'fs'; - -console.log(__dirname + '../../packages/grafana-ui/src/themes/dark.ts'); - -const fileToWatch = [ - __dirname + '/../../packages/grafana-ui/src/themes/dark.ts', - __dirname + '/../../packages/grafana-ui/src/themes/light.ts', -]; -// const watchService = chokidar.watch(fileToWatch); -console.log(`Watching for file changes on ${fileToWatch}`); - -// watchService.on('change', path => { - -const result = darkThemeVarsTemplate(darkTheme); -console.log(result); - -fs.writeFile(__dirname + '/../../public/sass/_variables.dark.scss', result, e => { - console.log(e); -}); - -// }); diff --git a/yarn.lock b/yarn.lock index cedf13bd558..24c20b33a99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1506,14 +1506,6 @@ resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.10.tgz#780d552467824be4a241b29510a7873a7432c4a6" integrity sha512-fOM/Jhv51iyugY7KOBZz2ThfT1gwvsGCfWxpLpZDgkGjpEO4Le9cld07OdskikLjDUQJ43dzDaVRSFwQlpdqVg== -"@types/chokidar@^1.7.5": - version "1.7.5" - resolved "https://registry.yarnpkg.com/@types/chokidar/-/chokidar-1.7.5.tgz#1fa78c8803e035bed6d98e6949e514b133b0c9b6" - integrity sha512-PDkSRY7KltW3M60hSBlerxI8SFPXsO3AL/aRVsO4Kh9IHRW74Ih75gUuTd/aE4LSSFqypb10UIX3QzOJwBQMGQ== - dependencies: - "@types/events" "*" - "@types/node" "*" - "@types/classnames@^2.2.6": version "2.2.7" resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.7.tgz#fb68cc9be8487e6ea5b13700e759bfbab7e0fefd" @@ -1734,11 +1726,6 @@ "@types/cheerio" "*" "@types/react" "*" -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - "@types/geojson@*": version "7946.0.5" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.5.tgz#9aea839ea5af4b1bc079f1d9fa977d48665e02b0" @@ -1764,11 +1751,16 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.0.tgz#35fea17653490dab82e1d5e69731abfdbf13160d" integrity sha512-ry4DOrC+xenhQbzk1iIPzCZGhhPGEFv7ia7Iu6XXSLVluiJIe9FfG7Iu3mObH9mpxEXCWLCMU4JWbCCR9Oy1Zg== -"@types/node@^10.12.18", "@types/node@^10.12.24": +"@types/node@^10.12.18": version "10.12.25" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.25.tgz#0d01a7dd6127de60d861ece4a650963042abb538" integrity sha512-IcvnGLGSQFDvC07Bz2I8SX+QKErDZbUdiQq7S2u3XyzTyJfUmT0sWJMbeQkMzpTAkO7/N7sZpW/arUM2jfKsbQ== +"@types/node@^8.0.31": + version "8.10.40" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.40.tgz#4314888d5cd537945d73e9ce165c04cc550144a4" + integrity sha512-RRSjdwz63kS4u7edIwJUn8NqKLLQ6LyqF/X4+4jp38MBT3Vwetewi2N4dgJEshLbDwNgOJXNYoOwzVZUSSLhkQ== + "@types/prop-types@*": version "15.5.8" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.8.tgz#8ae4e0ea205fe95c3901a5a1df7f66495e3a56ce" @@ -4702,7 +4694,7 @@ child-process-promise@^2.2.1: node-version "^1.0.0" promise-polyfill "^6.0.1" -chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.0: +chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4: version "2.1.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.1.tgz#adc39ad55a2adf26548bd2afa048f611091f9184" integrity sha512-gfw3p2oQV2wEt+8VuMlNsPjCxDxvvgnm/kz+uATu805mWVF8IJN7uz9DN7iBz+RMJISmiVbCOBFs9qBGMjtPfQ== @@ -5216,6 +5208,21 @@ concat-stream@1.6.2, concat-stream@^1.4.6, concat-stream@^1.5.0, concat-stream@^ readable-stream "^2.2.2" typedarray "^0.0.6" +concurrently@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-4.1.0.tgz#17fdf067da71210685d9ea554423ef239da30d33" + integrity sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg== + dependencies: + chalk "^2.4.1" + date-fns "^1.23.0" + lodash "^4.17.10" + read-pkg "^4.0.1" + rxjs "^6.3.3" + spawn-command "^0.0.2-1" + supports-color "^4.5.0" + tree-kill "^1.1.0" + yargs "^12.0.1" + config-chain@~1.1.11: version "1.1.12" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" @@ -6076,7 +6083,7 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@^1.27.2: +date-fns@^1.23.0, date-fns@^1.27.2: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== @@ -6127,7 +6134,7 @@ debug@^4.0.1, debug@^4.1.0: dependencies: ms "^2.1.1" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -9054,7 +9061,7 @@ import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -10764,11 +10771,6 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= - lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -10777,29 +10779,12 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= -lodash._getnative@*, lodash._getnative@^3.0.0: +lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= @@ -10893,11 +10878,6 @@ lodash.mergewith@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== -lodash.restparam@*: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= - lodash.some@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" @@ -10948,11 +10928,6 @@ lodash@~4.3.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.3.0.tgz#efd9c4a6ec53f3b05412429915c3e4824e4d25a4" integrity sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ= -log-prefix@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/log-prefix/-/log-prefix-0.1.1.tgz#3ec492138c8044c9f9732298492dca87850cac90" - integrity sha512-aP1Lst8OCdZKATqzXDN0JBissNVZuiKLyo6hOXDBxaQ1jHDsaxh2J1i5Pp0zMy6ayTKDWfUlLMXyLaQe1PJ48g== - log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -10967,13 +10942,6 @@ log-symbols@^2.0.0, log-symbols@^2.1.0, log-symbols@^2.2.0: dependencies: chalk "^2.0.1" -log-timestamp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/log-timestamp/-/log-timestamp-0.2.1.tgz#02d4fd07550d6e3226d2741d89e7c693410276d6" - integrity sha512-a+hFCox7Up3gBrfREwXGjUEozdqjJrqpy82a41BUSEKlmvEZbsjR9vaYh/2PNFwydxX1r3zgfS/mAdNmRY/lKQ== - dependencies: - log-prefix "0.1.1" - log-update@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" @@ -14504,7 +14472,7 @@ readable-stream@~1.1.10: isarray "0.0.1" string_decoder "~0.10.x" -readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= @@ -15902,6 +15870,11 @@ space-separated-tokens@^1.0.0: dependencies: trim "0.0.1" +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= + spawn-promise@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/spawn-promise/-/spawn-promise-0.1.8.tgz#a5bea98814c48f52cbe02720e7fe2d6fc3b5119a" @@ -16346,6 +16319,13 @@ supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" +supports-color@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -16776,6 +16756,11 @@ traverse@^0.6.6: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= +tree-kill@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" + integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -18057,7 +18042,7 @@ yargs@^11.0.0, yargs@^11.1.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^12.0.5: +yargs@^12.0.1, yargs@^12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==