diff --git a/.github/workflows/build_and_test_workflow.yml b/.github/workflows/build_and_test_workflow.yml index f4f5395ea2fd..7b624bb7f1e3 100644 --- a/.github/workflows/build_and_test_workflow.yml +++ b/.github/workflows/build_and_test_workflow.yml @@ -346,7 +346,7 @@ jobs: - name: Set OpenSearch URL run: | - echo "OPENSEARCH_URL=https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/${{ env.VERSION }}/latest/linux/x64/tar/dist/opensearch/opensearch-${{ env.VERSION }}-linux-x64.tar.gz" >> $GITHUB_ENV + echo "OPENSEARCH_URL=https://artifacts.opensearch.org/snapshots/core/opensearch/${{ env.VERSION }}-SNAPSHOT/opensearch-min-${{ env.VERSION }}-SNAPSHOT-linux-x64-latest.tar.gz" >> $GITHUB_ENV - name: Verify if OpenSearch is available for version id: verify-opensearch-exists diff --git a/CHANGELOG.md b/CHANGELOG.md index 40f3fce48093..76226d64e1b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - [Saved Object Service] Add Repository Factory Provider ([#4149](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4149)) - Enable plugins to augment visualizations with additional data and context ([#4361](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4361)) - New management overview page and rename stack management to dashboard management ([#4287](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4287)) - +- Reduce the amount of comments in compiled CSS ([#4648](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4648)) ### 🐛 Bug Fixes @@ -43,6 +43,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Migrate from legacy elasticsearch client to opensearch-js client in `osd-opensearch-archiver` package([#4142](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4142)) - Replace the use of `bluebird` in `saved_objects` plugin ([#4026](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4026)) - [Table Visualization] Remove custom styling for text-align:center in favor of OUI utility class. ([#4164](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4164)) +- [Dashboard] Restructure the `Dashboard` plugin folder to be more cohesive with the project ([#4575](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4575)) ### 🔩 Tests diff --git a/package.json b/package.json index 96ad94d99ce2..705e1fe24307 100644 --- a/package.json +++ b/package.json @@ -219,7 +219,7 @@ "source-map-support": "^0.5.19", "symbol-observable": "^1.2.0", "tar": "^6.1.11", - "tinygradient": "0.4.3", + "tinygradient": "^1.1.5", "tinymath": "1.2.1", "tslib": "^2.0.0", "type-detect": "^4.0.8", diff --git a/packages/osd-optimizer/package.json b/packages/osd-optimizer/package.json index 5ff707dc4f86..e0410c441c38 100644 --- a/packages/osd-optimizer/package.json +++ b/packages/osd-optimizer/package.json @@ -48,6 +48,7 @@ "@types/watchpack": "^1.1.6", "@types/webpack": "^4.41.31", "babel-loader": "^8.2.3", + "comment-stripper": "^0.0.4", "css-loader": "^5.2.7", "file-loader": "^6.2.0", "loader-utils": "^2.0.4", diff --git a/packages/osd-optimizer/src/worker/webpack.config.ts b/packages/osd-optimizer/src/worker/webpack.config.ts index b67a13f3c833..03262c4223d2 100644 --- a/packages/osd-optimizer/src/worker/webpack.config.ts +++ b/packages/osd-optimizer/src/worker/webpack.config.ts @@ -137,6 +137,12 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker: sourceMap: !worker.dist, }, }, + { + loader: 'comment-stripper', + options: { + language: 'css', + }, + }, ], }, { @@ -164,6 +170,12 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker: }, }, }, + { + loader: 'comment-stripper', + options: { + language: 'css', + }, + }, { loader: 'sass-loader', options: { diff --git a/packages/osd-ui-framework/Gruntfile.js b/packages/osd-ui-framework/Gruntfile.js index e0565b103736..10295493609c 100644 --- a/packages/osd-ui-framework/Gruntfile.js +++ b/packages/osd-ui-framework/Gruntfile.js @@ -28,6 +28,7 @@ * under the License. */ +const { strip } = require('comment-stripper'); const sass = require('node-sass'); const postcss = require('postcss'); const postcssConfig = require('@osd/optimizer/postcss.config.js'); @@ -91,7 +92,10 @@ module.exports = function (grunt) { } postcss([postcssConfig]) - .process(result.css, { from: src, to: dest }) + .process(strip(result.css.toString('utf8'), { language: 'css' }), { + from: src, + to: dest, + }) .then((result) => { grunt.file.write(dest, result.css); diff --git a/packages/osd-ui-framework/dist/kui_dark.css b/packages/osd-ui-framework/dist/kui_dark.css index e6d6f76e4f9a..193a7c7f7acc 100644 --- a/packages/osd-ui-framework/dist/kui_dark.css +++ b/packages/osd-ui-framework/dist/kui_dark.css @@ -8,577 +8,17 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/** - * 1. Focus rings shouldn't be visible on scrollable regions, but a11y requires them to be focusable. - * Browser's supporting `:focus-visible` will still show outline on keyboard focus only. - * Others like Safari, won't show anything at all. - * 2. Force the `:focus-visible` when the `tabindex=0` (is tabbable) - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/** - * 1. Enforce pointer when there's no href. - * 2. Allow these styles to be applied to a button element. - */ -/** - * 1. Override Bootstrap styles. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :disabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * Nothing fancy, just the basics so we can use this for both regular and static controls. - */ -/** - * 1. Prevent Firefox users from being able to resize textareas to smaller than the min-height. - */ -/** - * We specifically don't include Angular's ng-${state} classes here because we don't want to be tightly - * coupled with Angular. - */ -/** - * 1. Embedded SVG of fa-caret-down - * (https://github.com/encharm/Font-Awesome-SVG-PNG/blob/master/black/svg/caret-down.svg). - * 2. Make room on right side for the caret. - * 3. Prevent Firefox from showing dotted line around text on focus. - */ -/** - * 1. Setting to inline-block guarantees the same height when applied to both - * button elements and anchor tags. - * 2. Fit MicroButton inside of Table rows without pushing them taller. - */ -/** - * 1. Give Bar a consistent height for when it contains shorter children, and therefore can't - * depend on them to give it the desired height. - */ -/** - * 1. Put 10px of space between each child. - * 2. If there is only one section, align it to the right. If you wanted it aligned right, you - * wouldn't use the Bar in the first place. - * 3. Children in the middle should center their content. - * 4. Fix an IE bug which causes the last child to overflow the container. - * 5. Fixing this bug means we now need to align the children to the right. - */ -/** - * 1. Required for IE11. - */ + main { display: block; - /* 1 */ } + } .kuiBar { display: flex; align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ } + } .kuiBarSection { display: flex; @@ -588,33 +28,24 @@ main { margin-right: 25px; } .kuiBarSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiBarSection:first-child { margin-left: 0; } .kuiBarSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiBarSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiBarSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Setting to inline-block guarantees the same height when applied to both - * button elements and anchor tags. - * 2. Links can be focused when they're "disabled" (since we're just faking this with a class), but - * at least make them look like they're not focused. - */ .kuiButton { display: inline-block; - /* 1 */ - -webkit-appearance: none; - appearance: none; + appearance: none; cursor: pointer; padding: 4px 12px 5px; font-size: 16px; @@ -631,21 +62,14 @@ main { cursor: not-allowed; opacity: 0.5; } .kuiButton:enabled:active { - -webkit-transform: translateY(1px); - transform: translateY(1px); } + transform: translateY(1px); } a.kuiButton:not(.kuiButton-isDisabled):active { - /* 1 */ - -webkit-transform: translateY(1px); - transform: translateY(1px); } + transform: translateY(1px); } -/** - * 1. Solves whitespace problems introduced by inline elements. - */ .kuiButton__inner { display: flex; - /* 1 */ - align-items: center; - /* 1 */ } + align-items: center; + } .kuiButton--small { font-size: 12px; @@ -668,122 +92,85 @@ main { .kuiButton--iconText.kuiButton--small .kuiButton__icon:last-child:not(:only-child) { margin-left: 4px; } -/** - * 1. Override Bootstrap. - */ .kuiButton--basic { color: #DFE5EF; background-color: #25262E; } .kuiButton--basic:not(a):enabled:focus { color: #DFE5EF; } a.kuiButton--basic:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #DFE5EF; } + color: #DFE5EF; } .kuiButton--basic:enabled:hover { background-color: #0e0f12 !important; - /* 1 */ } + } a.kuiButton--basic:not(.kuiButton-isDisabled):hover { - /* 1 */ - background-color: #0e0f12 !important; - /* 1 */ } + background-color: #0e0f12 !important; + } .kuiButton--basic:enabled:active { background-color: #0e0f12 !important; - /* 1 */ } + } a.kuiButton--basic:not(.kuiButton-isDisabled):active { - /* 1 */ - background-color: #0e0f12 !important; - /* 1 */ } + background-color: #0e0f12 !important; + } -/** - * 1. Override Bootstrap. - */ .kuiButton--primary { color: #FFF; background-color: #1BA9F5; } .kuiButton--primary:not(a):enabled:focus { color: #FFF; } a.kuiButton--primary:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #FFF; } + color: #FFF; } .kuiButton--primary:enabled:hover { color: #FFF !important; - /* 1 */ - background-color: #098dd4; } + background-color: #098dd4; } a.kuiButton--primary:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #098dd4; } + color: #FFF !important; + background-color: #098dd4; } .kuiButton--primary:enabled:active { color: #FFF !important; - /* 1 */ - background-color: #098dd4; } + background-color: #098dd4; } a.kuiButton--primary:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #098dd4; } + color: #FFF !important; + background-color: #098dd4; } -/** - * 1. Override Bootstrap. - */ .kuiButton--success { color: #FFF; background-color: #7DE2D1; } .kuiButton--success:not(a):enabled:focus { color: #FFF; } a.kuiButton--success:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #FFF; } + color: #FFF; } .kuiButton--success:enabled:hover { color: #FFF !important; - /* 1 */ - background-color: #53d9c2; } + background-color: #53d9c2; } a.kuiButton--success:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #53d9c2; } + color: #FFF !important; + background-color: #53d9c2; } .kuiButton--success:enabled:active { color: #FFF !important; - /* 1 */ - background-color: #53d9c2; } + background-color: #53d9c2; } a.kuiButton--success:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #53d9c2; } + color: #FFF !important; + background-color: #53d9c2; } -/** - * 1. Override Bootstrap. - */ .kuiButton--danger { color: #F66; border: solid 1px #F66; } .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #F66; - /* 3 */ - color: #F66; } + outline: none !important; + box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #F66; + color: #F66; } a.kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #F66; - /* 3 */ - color: #F66; } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #F66; + color: #F66; } .kuiButton--danger:enabled:hover { color: #ff3333 !important; border: solid 1px #ff3333; background-color: rgba(255, 102, 102, 0.1); } a.kuiButton--danger:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #ff3333 !important; + color: #ff3333 !important; border: solid 1px #ff3333; background-color: rgba(255, 102, 102, 0.1); } .kuiButton--danger:enabled:active { @@ -791,112 +178,77 @@ main { border: solid 1px #ff3333; background-color: rgba(255, 102, 102, 0.1); } a.kuiButton--danger:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #ff3333 !important; + color: #ff3333 !important; border: solid 1px #ff3333; background-color: rgba(255, 102, 102, 0.1); } -/** - * 1. Override Bootstrap. - */ .kuiButton--warning { color: #FFF; background-color: #FFCE7A; } .kuiButton--warning:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #FFCE7A; - /* 3 */ - color: #FFF; } + outline: none !important; + box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #FFCE7A; + color: #FFF; } a.kuiButton--warning:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #FFCE7A; - /* 3 */ - color: #FFF; } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #FFCE7A; + color: #FFF; } .kuiButton--warning:enabled:hover { color: #FFF !important; - /* 1 */ - background-color: #ffbb47; } + background-color: #ffbb47; } a.kuiButton--warning:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #ffbb47; } + color: #FFF !important; + background-color: #ffbb47; } .kuiButton--warning:enabled:active { color: #FFF !important; - /* 1 */ - background-color: #ffbb47; } + background-color: #ffbb47; } a.kuiButton--warning:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #ffbb47; } + color: #FFF !important; + background-color: #ffbb47; } .kuiButton--warning:disabled { background-color: #ffe1ad; } a.kuiButton--warning.kuiButton-isDisabled { background-color: #ffe1ad; } -/** - * 1. Override Bootstrap. - * 2. Override either Bootstrap or Timeline styles. - */ .kuiButton--hollow { color: #1BA9F5 !important; - /* 2 */ - background-color: transparent; } + background-color: transparent; } .kuiButton--hollow:enabled:hover { color: #098dd4 !important; - /* 1 */ - text-decoration: underline; } + text-decoration: underline; } a.kuiButton--hollow:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #098dd4 !important; - /* 1 */ - text-decoration: underline; } + color: #098dd4 !important; + text-decoration: underline; } .kuiButton--hollow:enabled:active { color: #098dd4 !important; - /* 1 */ - text-decoration: underline; } + text-decoration: underline; } a.kuiButton--hollow:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #098dd4 !important; - /* 1 */ - text-decoration: underline; } + color: #098dd4 !important; + text-decoration: underline; } .kuiButton--secondary { color: #1BA9F5 !important; - /* 2 */ - border: solid 1px #1BA9F5; } + border: solid 1px #1BA9F5; } .kuiButton--secondary:enabled:hover { color: #098dd4 !important; - /* 1 */ - border: solid 1px #098dd4; + border: solid 1px #098dd4; background-color: rgba(27, 169, 245, 0.1); text-decoration: underline; } a.kuiButton--secondary:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #098dd4 !important; - /* 1 */ - border: solid 1px #098dd4; + color: #098dd4 !important; + border: solid 1px #098dd4; background-color: rgba(27, 169, 245, 0.1); text-decoration: underline; } .kuiButton--secondary:enabled:active { color: #098dd4 !important; - /* 1 */ - border: solid 1px #098dd4; + border: solid 1px #098dd4; background-color: rgba(27, 169, 245, 0.1); text-decoration: underline; } a.kuiButton--secondary:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #098dd4 !important; - /* 1 */ - border: solid 1px #098dd4; + color: #098dd4 !important; + border: solid 1px #098dd4; background-color: rgba(27, 169, 245, 0.1); text-decoration: underline; } @@ -934,66 +286,42 @@ main { display: inline-block; } .kuiCollapseButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; padding: 4px; border: none; line-height: 1; font-size: 16px; color: #DFE5EF !important; - /* 1 */ - cursor: pointer; + cursor: pointer; opacity: 0.35; } .kuiCollapseButton:hover { opacity: 1; } -/** - * 1. Set inline-block so this wrapper shrinks to fit the input. - */ .kuiAssistedInput { display: inline-block; - /* 1 */ - position: relative; } + position: relative; } -/** - * 1. Vertically center the assistance, regardless of its height. - */ .kuiAssistedInput__assistance { position: absolute; right: 12px; top: 50%; - /* 1 */ - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - /* 1 */ } - -/** - * 1. Deliberately disable only webkit appearance. If we disable it in Firefox, we get a really - * ugly default appearance which we can't customize, so our best option is to give Firefox - * control over the checkbox's appearance. - * 2. Override default styles (possibly from Bootstrap). - */ + transform: translateY(-50%); + } + .kuiCheckBox { - -webkit-appearance: none; - appearance: none; - /* 1 */ - background-color: #16171c; + appearance: none; + background-color: #16171c; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 4px; width: 16px; height: 16px; - font: "var(--font-text)" !important; - /* 2 */ - line-height: 1.5 !important; - /* 2 */ - margin: 0 !important; - /* 2 */ - font-family: "var(--font-text)" !important; - /* 2 */ - font-size: 10px !important; - /* 2 */ - transition: background-color 0.1s linear; } + font: var(--font-text) !important; + line-height: 1.5 !important; + margin: 0 !important; + font-family: var(--font-text) !important; + font-size: 10px !important; + transition: background-color 0.1s linear; } .kuiCheckBox::before { position: relative; left: 0.25em; @@ -1010,11 +338,9 @@ main { opacity: 1; } .kuiCheckBox:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #1BA9F5; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #1D1E24, 0 0 0 2px #1BA9F5; + } .kuiCheckBox:disabled { background-color: #202128 !important; border-color: #202128 !important; @@ -1030,15 +356,12 @@ main { font-size: 16px; margin-left: 8px; } -/** - * 1. Override Bootstrap. - */ .kuiLabel { font-size: 16px; line-height: 1.5; font-weight: bold; margin-bottom: 0; - /* 1 */ } + } .kuiSearchInput { width: 180px; @@ -1056,14 +379,9 @@ main { font-size: 1em; color: #535966; } -/** - * 1. Make space for search icon. - * 2. Expand to fill container. - */ .kuiSearchInput__input { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1074,11 +392,9 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-left: 28px; - /* 1 */ - width: 100%; - /* 2 */ } + padding-left: 28px; + width: 100%; + } .kuiSearchInput__input:invalid { border-color: #F66; } .kuiSearchInput__input:focus { @@ -1094,13 +410,9 @@ main { .kuiSearchInput--large { width: 400px; } -/** - * Avoid setting a width here, so that the width of the options can dynamically set the width. - */ .kuiSelect { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1111,15 +423,12 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-right: 30px; - /* 2 */ - background-image: url('data:image/svg+xml;utf8,'); - /* 1 */ - background-size: 14px; + padding-right: 30px; + background-image: url('data:image/svg+xml;utf8,'); + background-size: 14px; background-repeat: no-repeat; background-position: calc(100% - 8px); - /* 2 */ } + } .kuiSelect:invalid { border-color: #F66; } .kuiSelect:focus { @@ -1130,7 +439,7 @@ main { cursor: not-allowed; } .kuiSelect:-moz-focusring { text-shadow: 0 0 0; - /* 3 */ } + } .kuiSelect.kuiSelect-isInvalid { border-color: #F66; } .kuiSelect:focus { @@ -1147,28 +456,22 @@ main { .kuiSelect--large { width: 400px; } -/** - * 1. Have the same spatial footprint as the regular input. - */ .kuiStaticInput { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; line-height: 1.5; color: #DFE5EF; border: 1px solid transparent; - /* 1 */ - background-color: transparent; } + background-color: transparent; } .kuiTextArea { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1179,7 +482,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ } + } .kuiTextArea:invalid { border-color: #F66; } .kuiTextArea:focus { @@ -1206,9 +509,8 @@ main { .kuiTextInput { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1219,7 +521,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ } + } .kuiTextInput:invalid { border-color: #F66; } .kuiTextInput:focus { @@ -1237,13 +539,10 @@ main { .kuiTextInput--large { width: 400px; } -/** - * 1. We may want to put elements in here which have different heights. - */ .kuiFieldGroup { display: flex; align-items: center; - /* 1 */ } + } .kuiFieldGroup--alignTop { align-items: flex-start; } @@ -1258,23 +557,14 @@ main { .kuiFieldGroupSection--wide > * { width: 100%; } -/** - * 1. Copied from FontAwesome's .fa class. We use a custom class to make it easier to migrate away - * from FontAwesome someday. When we do migrate away, we can just update this definition. - */ .kuiIcon { display: inline-block; - /* 1 */ - font: normal normal normal 14px/1 FontAwesome, sans-serif; - /* 1 */ - font-size: inherit; - /* 1 */ - text-rendering: auto; - /* 1 */ - -webkit-font-smoothing: antialiased; - /* 1 */ - -moz-osx-font-smoothing: grayscale; - /* 1 */ } + font: normal normal normal 14px/1 FontAwesome, sans-serif; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } .kuiIcon--info { color: #1BA9F5; } @@ -1299,41 +589,26 @@ main { line-height: 1.5; border: 2px solid; } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--info { border-color: rgba(27, 169, 245, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--success { border-color: rgba(125, 226, 209, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--warning { border-color: rgba(255, 206, 122, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--error { border-color: rgba(255, 102, 102, 0.25); - /* 1 */ } + } -/** - * 1. Align with first line of title text if it wraps. - */ .kuiInfoPanelHeader { display: flex; align-items: baseline; - /* 1 */ } + } .kuiInfoPanelHeader__icon { margin-right: 10px; @@ -1358,34 +633,23 @@ main { color: #1BA9F5; text-decoration: none; cursor: pointer; - /* 1 */ - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: none; - /* 2 */ - font-size: inherit; - /* 2 */ - line-height: inherit; - /* 2 */ } + appearance: none; + background-color: transparent; + border: none; + font-size: inherit; + line-height: inherit; + } .kuiLink:visited, .kuiLink:active { color: #1BA9F5; } .kuiLink:hover { color: #098dd4; text-decoration: underline; } -/** - * 1. Breadcrumbs are placed in the top-left corner and need to be bumped over - * a bit. - */ .kuiLocalBreadcrumbs { display: flex; align-items: center; padding: 12px 8px; - /* 1 */ - border-bottom: 1px solid #343741; + border-bottom: 1px solid #343741; flex-grow: 1; flex-basis: 100%; background-color: #1D1E24; } @@ -1398,33 +662,21 @@ main { margin-left: 6px; } .kuiLocalBreadcrumb + .kuiLocalBreadcrumb::before { content: "/"; - -webkit-user-select: none; - user-select: none; + user-select: none; margin-right: 4px; color: #343741; } -/** - * 1. Make it a bit darker to contrast with the gray background. - */ .kuiLocalBreadcrumb__link { color: #1BA9F5; text-decoration: none; cursor: pointer; - /* 1 */ - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: none; - /* 2 */ - font-size: inherit; - /* 2 */ - line-height: inherit; - /* 2 */ - color: #1BA9F5; - /* 1 */ - font-size: 16px; } + appearance: none; + background-color: transparent; + border: none; + font-size: inherit; + line-height: inherit; + color: #1BA9F5; + font-size: 16px; } .kuiLocalBreadcrumb__link:visited, .kuiLocalBreadcrumb__link:active { color: #1BA9F5; } .kuiLocalBreadcrumb__link:hover { @@ -1449,12 +701,8 @@ main { justify-content: space-between; margin-bottom: 4px; } -/** - * 1. Override inherited styles. - */ .kuiDatePickerNavigationButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; border: none; font-size: 14px; @@ -1467,13 +715,10 @@ main { background-color: #1BA9F5; } .kuiDatePickerNavigationButton:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px transparent, 0 0 0 2px #1BA9F5; - /* 3 */ - color: #DFE5EF; - /* 1 */ } + outline: none !important; + box-shadow: 0 0 0 1px transparent, 0 0 0 2px #1BA9F5; + color: #DFE5EF; + } .kuiDatePickerHeaderCell { padding: 9px 0; @@ -1486,22 +731,14 @@ main { .kuiDatePickerRowCell { padding: 0; text-align: center; - /** - * This state class exists to support weird angular-bootstrap datepicker functionality, - * in which you can't select a day on the "From" calendar if it falls after the selected day in - * the "To" calendar (and vice versa, you can't select a "To" day if it is before the "From" day). - */ } + } .kuiDatePickerRowCell.kuiDatePickerRowCell-isBlocked { cursor: not-allowed; } .kuiDatePickerRowCell.kuiDatePickerRowCell-isBlocked .kuiDatePickerRowCellContent { pointer-events: none; } -/** - * 1. Override inherited styles. - */ .kuiDatePickerRowCellContent { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; width: 100%; border: 1px solid transparent; @@ -1512,13 +749,10 @@ main { line-height: 1.2; } .kuiDatePickerRowCellContent:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px transparent, 0 0 0 2px #1BA9F5; - /* 3 */ - color: #DFE5EF; - /* 1 */ } + outline: none !important; + box-shadow: 0 0 0 1px transparent, 0 0 0 2px #1BA9F5; + color: #DFE5EF; + } .kuiDatePickerRowCellContent:disabled { pointer-events: none; opacity: 0.5; } @@ -1543,16 +777,14 @@ main { line-height: 20px; } .kuiLocalDropdownCloseButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; padding: 4px; border: none; line-height: 1; font-size: 16px; color: #DFE5EF !important; - /* 1 */ - cursor: pointer; + cursor: pointer; opacity: 0.35; position: absolute; top: 1px; @@ -1572,13 +804,9 @@ main { .kuiLocalDropdownPanel--right { margin-left: 30px; } -/** - * 1. Override inherited styles. - */ .kuiLocalDropdownTitle { margin-top: 0; - /* 1 */ - margin-bottom: 12px; + margin-bottom: 12px; font-size: 18px; color: #DFE5EF; } @@ -1593,15 +821,11 @@ main { justify-content: space-between; margin-bottom: 6px; } -/** - * 1. Override inherited styles. - */ .kuiLocalDropdownHeader__label { font-size: 14px; font-weight: 700; margin-bottom: 0; - /* 1 */ - color: #DFE5EF; } + color: #DFE5EF; } .kuiLocalDropdownHeader__actions { display: flex; } @@ -1683,24 +907,16 @@ main { margin-right: 5px; margin-bottom: -1px; } -/** - * 1. Match height of logo in side bar, but allow it to expand to accommodate - * dropdown. - */ .kuiLocalNav { display: flex; flex-direction: column; justify-content: space-between; min-height: 69px; - /* 1 */ - color: #DFE5EF; + color: #DFE5EF; background-color: #1D1E24; line-height: 1.5; border-bottom: solid 1px #343741; } -/** - * 1. Allow row to expand if the content is so long that it wraps. - */ .kuiLocalNavRow { display: flex; align-items: stretch; @@ -1710,18 +926,10 @@ main { display: flex; align-items: stretch; } -/** - * 1. We make this row flex-start because it usually contains a search input, which may expand - * beyond the height of this container. We can't use `align-items: center`, because this would - * cause the search input to overflow both on the top and bottom; `align-items: flex-start` - * makes it only overflow on the bottom. But this means we need to manually center the content - * of this container using padding. - */ .kuiLocalNavRow--secondary { padding: 0 8px; - /* 1 */ - align-items: flex-start; - /* 1 */ } + align-items: flex-start; + } .kuiLocalSearch { display: flex; @@ -1729,9 +937,8 @@ main { margin-bottom: 8px; } .kuiLocalSearchInput { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1742,8 +949,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - flex: 1 1 100%; + flex: 1 1 100%; border-color: #FFF; border-color: #343741; border-radius: 4px 0 0 4px; } @@ -1766,33 +972,22 @@ main { border-radius: 0; border-left-width: 0; } -/** - * 1. em used for right padding so documentation link and query string - * won't overlap if the user increases their default browser font size - * This is sized for the 'Options' link - */ .kuiLocalSearchInput, .kuiLocalSearchAssistedInput__input { padding-right: 6em; - /* 1 */ } + } -/** - * 1. Vertically center the assistance, regardless of its height. - */ .kuiLocalSearchAssistedInput__assistance { position: absolute; right: 6px; top: 50%; - /* 1 */ - z-index: 2; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - /* 1 */ } + z-index: 2; + transform: translateY(-50%); + } .kuiLocalSearchSelect { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1803,16 +998,12 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-right: 30px; - /* 2 */ - background-image: url('data:image/svg+xml;utf8,'); - /* 1 */ - background-size: 14px; + padding-right: 30px; + background-image: url('data:image/svg+xml;utf8,'); + background-size: 14px; background-repeat: no-repeat; background-position: calc(100% - 8px); - /* 2 */ - border-left-width: 0; + border-left-width: 0; border-radius: 0; } .kuiLocalSearchSelect:invalid { border-color: #F66; } @@ -1824,40 +1015,28 @@ main { cursor: not-allowed; } .kuiLocalSearchSelect:-moz-focusring { text-shadow: 0 0 0; - /* 3 */ } + } -/** - * 1. Override inherited styles. - */ .kuiLocalSearchButton { width: 43px; height: 32px; font-size: 16px; line-height: 0; - /* 1 */ - color: #FFF; + color: #FFF; background-color: #1BA9F5; border: 0; border-radius: 0 4px 4px 0; } .kuiLocalSearchButton:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; + } -/** - * 1. We want the bottom border on selected tabs to be flush with the bottom of the container. - */ .kuiLocalTabs { display: flex; align-items: flex-end; height: 100%; } -/** - * 1. Override inherited typographic styles. - */ .kuiLocalTab { padding: 5px 0 6px; font-size: 18px; @@ -1866,13 +1045,8 @@ main { text-decoration: none; cursor: pointer; margin-top: 0 !important; - /* 1 */ - margin-bottom: 0 !important; - /* 1 */ - /** - * 1. We may want to show a tooltip to explain why the tab is disabled, so we will just show - * a regular cursor instead of setting pointer-events: none. - */ } + margin-bottom: 0 !important; + } .kuiLocalTab:hover:not(.kuiLocalTab-isDisabled), .kuiLocalTab:active:not(.kuiLocalTab-isDisabled) { color: #1BA9F5; } .kuiLocalTab.kuiLocalTab-isSelected { @@ -1882,7 +1056,7 @@ main { .kuiLocalTab.kuiLocalTab-isDisabled { opacity: 0.5; cursor: default; - /* 1 */ } + } .kuiLocalTab + .kuiLocalTab { margin-left: 15px; } @@ -1900,22 +1074,19 @@ main { padding: 0; display: none; } -/** - * 1. Put 10px of space between each child. - */ .kuiPager { display: flex; align-items: center; } .kuiPager > * + * { margin-left: 10px; - /* 1 */ } + } .kuiPagerText { font-size: 16px; line-height: 1.5; color: #98A2B3; white-space: nowrap; - /* 1 */ } + } .kuiPanel { box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.3), 0 1px 5px -2px rgba(0, 0, 0, 0.3); @@ -1951,62 +1122,44 @@ main { align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 50px; border-bottom: 1px solid #343741; } .kuiPanelHeader .kuiButton:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; + } a.kuiPanelHeader .kuiButton:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; + } .kuiPanelHeader .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #343741, 0 0 0 2px #F66; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #343741, 0 0 0 2px #F66; + } a.kuiPanelHeader .kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #343741, 0 0 0 2px #F66; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #343741, 0 0 0 2px #F66; + } .kuiPanelHeader .kuiSelect { border-color: #16171c; } .kuiPanelHeader .kuiSelect:not(a):enabled:focus { outline: none; border-color: #1BA9F5; } a.kuiPanelHeader .kuiSelect:not(.kuiButton-isDisabled):focus { - /* 1 */ - outline: none; + outline: none; border-color: #1BA9F5; } -/** - * 1. This way we can use h1, h2, etc. - */ .kuiPanelHeader__title { font-size: 20px; line-height: 1.5; margin: 0; - /* 1 */ } + } -/** - * 1. Undo what barSection mixin does. - */ .kuiPanelHeaderSection { display: flex; align-items: center; @@ -2015,26 +1168,24 @@ main { margin-right: 25px; } .kuiPanelHeaderSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiPanelHeaderSection:first-child { margin-left: 0; } .kuiPanelHeaderSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiPanelHeaderSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiPanelHeaderSection > * + * { margin-left: 10px; - /* 1 */ } + } .kuiPanelHeaderSection:only-child { margin-left: 0; - /* 1 */ - margin-right: auto; - /* 1 */ } + margin-right: auto; + } .kuiPanelBody { padding: 10px; } @@ -2069,98 +1220,63 @@ main { .kuiStatusText--error { color: #F66; } -/** - * 1. Set the image to be the same size as a font icon at 14px. - * 2. We need to cap the height too, in case the icon was designed thin and tall. - */ .kuiStatusText__icon { margin-right: 6px; width: 1.15em; - /* 1 */ - max-height: 1.15em; - /* 2 */ } + max-height: 1.15em; + } -/** - * 1. Make seamless transition from ToolBar to Table header and contained Menu. - * 1. Make seamless transition from Table to ToolBarFooter header. - */ .kuiControlledTable { background: #1D1E24; } .kuiControlledTable .kuiTable { border-top: none; - /* 1 */ } + } .kuiControlledTable .kuiToolBarFooter { border-top: none; - /* 2 */ } + } .kuiControlledTable .kuiMenu--contained { border-top: none; - /* 1 */ } + } -/** - * 1. Prevent cells from expanding based on content size. This substitutes for table-layout: fixed. - */ -/** - * NOTE: table-layout: fixed causes a bug in IE11 and Edge (see #9929). It also prevents us from - * specifying a column width, e.g. the checkbox column. - */ .kuiTable { width: 100%; border: 1px solid #343741; border-collapse: collapse; background-color: #1D1E24; } -/** - * 1. Allow contents of cells to determine table's width. - */ .kuiTable--fluid { width: auto; - /* 1 */ } + } .kuiTable--fluid .kuiTableHeaderCell, .kuiTable--fluid .kuiTableRowCell { max-width: none; - /* 1 */ } + } .kuiTableHeaderCell { font-size: 16px; font-weight: 400; text-align: left; max-width: 20px; - /* 1 */ - line-height: 1.5; + line-height: 1.5; color: #98A2B3; } .kuiTableHeaderCell__liner { display: inline-block; padding: 7px 8px 8px; } -/** - * 1. Prevent rapid clicking from selecting text. - * 2. Remove native button element styles. - * 3. Make buttons look and behave like table header cells. - */ .kuiTableHeaderCellButton { - -webkit-user-select: none; - user-select: none; - /* 1 */ - cursor: pointer; + user-select: none; + cursor: pointer; width: 100%; - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: 0; - /* 2 */ - padding: 0; - /* 2 */ - color: inherit; - /* 3 */ - line-height: inherit; - /* 3 */ - font-size: inherit; - /* 3 */ - text-align: inherit; - /* 3 */ } + appearance: none; + background-color: transparent; + border: 0; + padding: 0; + color: inherit; + line-height: inherit; + font-size: inherit; + text-align: inherit; + } .kuiTableHeaderCellButton:hover .kuiTableSortIcon { display: block; opacity: 1; } @@ -2190,31 +1306,20 @@ main { font-weight: 400; text-align: left; max-width: 20px; - /* 1 */ - color: #DFE5EF; + color: #DFE5EF; border-top: 1px solid #343741; vertical-align: middle; } -/** - * 1. Vertically align all children. - * 2. The padding on this div allows the ellipsis to show if the content is truncated. If - * the padding was on the cell, the ellipsis would be cropped. - * 3. Truncate content with an ellipsis. - */ .kuiTableRowCell__liner { padding: 7px 8px 8px; - /* 2 */ - line-height: 1.5; - /* 1 */ - overflow: hidden; - /* 3 */ - text-overflow: ellipsis; - /* 3 */ - white-space: nowrap; - /* 3 */ } + line-height: 1.5; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } .kuiTableRowCell__liner > * { vertical-align: middle; - /* 1 */ } + } .kuiTableRowCell--wrap .kuiTableRowCell__liner { white-space: normal; } @@ -2223,34 +1328,24 @@ main { overflow: visible; white-space: normal; } -/** - * 1. We don't want to create too strong a disconnect between the original row and the row - * that contains its expanded details. - */ .kuiTableRowCell--expanded { border-top-color: #1D1E24; - /* 1 */ } + } .kuiTableRowCell--alignRight { text-align: right; } .kuiTableRowCell--alignRight .kuiTableRowCell__liner { text-align: right; } -/** - * 1. Rendered width of cell with checkbox inside of it. - * 2. Align checkbox with text in other cells. - * 3. Show the checkbox in Edge; otherwise it gets cropped. - */ .kuiTableHeaderCell--checkBox, .kuiTableRowCell--checkBox { width: 28px; - /* 1 */ - line-height: 1; - /* 2 */ } + line-height: 1; + } .kuiTableHeaderCell--checkBox .kuiTableRowCell__liner, .kuiTableRowCell--checkBox .kuiTableRowCell__liner { overflow: visible; - /* 3 */ } + } .kuiTableHeaderCell--checkBox .kuiTableHeaderCell__liner, .kuiTableHeaderCell--checkBox .kuiTableRowCell__liner, .kuiTableRowCell--checkBox .kuiTableHeaderCell__liner, @@ -2267,41 +1362,29 @@ main { display: flex; border-bottom: 1px solid #343741; } -/** - * 1. Override button styles (some of which are from Bootstrap). - * 2. Adding a border shifts tabs right by 1px, so we need to shift them back. - * 3. Move the tab down so that its bottom border covers the container's bottom border. - * 4. When the tab is focused, its bottom border changes to be 1px, so we need to add 1px more - * of padding to make sure the text doesn't shift down. - */ .kuiTab { - -webkit-appearance: none; - appearance: none; - /* 1 */ - cursor: pointer; + appearance: none; + cursor: pointer; padding: 10px 30px; font-size: 16px; color: #98A2B3; background-color: transparent; - /* 1 */ - border: 1px solid #343741; + border: 1px solid #343741; border-radius: 0; - /* 1 */ - margin-bottom: -1px; - /* 3 */ } + margin-bottom: -1px; + } .kuiTab + .kuiTab { border-left: none; } .kuiTab + .kuiTab:focus:not(.kuiTab-isSelected):not(:active) { margin-left: -1px; - /* 2 */ } + } .kuiTab:active { outline: none !important; - /* 1 */ - box-shadow: none; - /* 1 */ } + box-shadow: none; + } .kuiTab:focus { outline: none; - /* 1 */ } + } .kuiTab:focus:not(.kuiTab-isSelected):not(:active) { z-index: 1; color: #1BA9F5; @@ -2320,49 +1403,37 @@ main { align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 50px; background-color: transparent; border: solid 1px #343741; } .kuiToolBar .kuiButton:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; + } a.kuiToolBar .kuiButton:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #343741, 0 0 0 2px #1BA9F5; + } .kuiToolBar .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #343741, 0 0 0 2px #F66; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #343741, 0 0 0 2px #F66; + } a.kuiToolBar .kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #343741, 0 0 0 2px #F66; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #343741, 0 0 0 2px #F66; + } .kuiToolBar .kuiSelect { border-color: #16171c; } .kuiToolBar .kuiSelect:not(a):enabled:focus { outline: none; border-color: #1BA9F5; } a.kuiToolBar .kuiSelect:not(.kuiButton-isDisabled):focus { - /* 1 */ - outline: none; + outline: none; border-color: #1BA9F5; } .kuiToolBarSection { @@ -2373,36 +1444,31 @@ main { margin-right: 25px; } .kuiToolBarSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiToolBarSection:first-child { margin-left: 0; } .kuiToolBarSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiToolBarSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiToolBarSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Override Bar styles and put Search on the left side. - */ .kuiToolBar--searchOnly .kuiToolBarSearch { margin-left: 0 !important; - /* 1 */ } + } .kuiToolBarFooter { display: flex; align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 40px; background-color: #1D1E24; } @@ -2414,27 +1480,21 @@ main { margin-right: 25px; } .kuiToolBarFooterSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiToolBarFooterSection:first-child { margin-left: 0; } .kuiToolBarFooterSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiToolBarFooterSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiToolBarFooterSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Put 10px of space between each child. - * 2. Fix IE11 bug which causes this item to grow too wide when there is only a single - * kuiToolBarSection sibling. - */ .kuiToolBarSearch { display: flex; align-items: center; @@ -2442,15 +1502,14 @@ main { margin-right: 25px; flex: 1 1 auto; max-width: 100%; - /* 2 */ - line-height: 1.5; } + line-height: 1.5; } .kuiToolBarSearch:first-child { margin-left: 0; } .kuiToolBarSearch:last-child { margin-right: 0; } .kuiToolBarSearch > * + * { margin-left: 10px; - /* 1 */ } + } .kuiToolBarSearchBox { flex: 1 1 auto; @@ -2465,85 +1524,55 @@ main { font-size: 1em; color: #acacac; } -/** - * 1. Fix inherited styles (possibly from Bootstrap). - */ .kuiToolBarSearchBox__input { width: 100%; min-width: 200px; padding: 4px 12px 5px 28px; - font-family: "var(--font-text)"; - /* 1 */ - background-color: #1D1E24; + font-family: var(--font-text); + background-color: #1D1E24; color: #DFE5EF; border-radius: 4px; font-size: 1em; border: 1px solid #343741; line-height: normal; - /* 1 */ - transition: border-color 0.1s linear; } + transition: border-color 0.1s linear; } .kuiToolBarSearchBox__input:focus { outline: none; border-color: #1BA9F5; } -/* - * 1. We don't want the text to take up two lines and overflow the ToolBar. - */ .kuiToolBarText { font-size: 16px; line-height: 1.5; color: #98A2B3; white-space: nowrap; - /* 1 */ } + } -/** - * 1. Override h1. - */ .kuiTitle { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - font-size: 24px; } + font-weight: 400; + font-size: 24px; } -/** - * 1. Override h2, h3, etc. - */ .kuiSubTitle { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - font-size: 20px; } + font-weight: 400; + font-size: 20px; } -/** - * 1. Override p. - */ .kuiTextTitle { margin: 0; - /* 1 */ - font-weight: 700; - /* 1 */ - line-height: 1.5; + font-weight: 700; + line-height: 1.5; font-size: 16px; } -/** - * 1. Override p. - */ .kuiText { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - line-height: 1.5; + font-weight: 400; + line-height: 1.5; font-size: 16px; } .kuiSubText { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - line-height: 1.5; + font-weight: 400; + line-height: 1.5; font-size: 14px; } .kuiSubduedText { diff --git a/packages/osd-ui-framework/dist/kui_light.css b/packages/osd-ui-framework/dist/kui_light.css index 80b31588660e..b6952eb159bb 100644 --- a/packages/osd-ui-framework/dist/kui_light.css +++ b/packages/osd-ui-framework/dist/kui_light.css @@ -8,543 +8,17 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/** - * 1. Focus rings shouldn't be visible on scrollable regions, but a11y requires them to be focusable. - * Browser's supporting `:focus-visible` will still show outline on keyboard focus only. - * Others like Safari, won't show anything at all. - * 2. Force the `:focus-visible` when the `tabindex=0` (is tabbable) - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/** - * 1. Enforce pointer when there's no href. - * 2. Allow these styles to be applied to a button element. - */ -/** - * 1. Override Bootstrap styles. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :disabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * Nothing fancy, just the basics so we can use this for both regular and static controls. - */ -/** - * 1. Prevent Firefox users from being able to resize textareas to smaller than the min-height. - */ -/** - * We specifically don't include Angular's ng-${state} classes here because we don't want to be tightly - * coupled with Angular. - */ -/** - * 1. Embedded SVG of fa-caret-down - * (https://github.com/encharm/Font-Awesome-SVG-PNG/blob/master/black/svg/caret-down.svg). - * 2. Make room on right side for the caret. - * 3. Prevent Firefox from showing dotted line around text on focus. - */ -/** - * 1. Setting to inline-block guarantees the same height when applied to both - * button elements and anchor tags. - * 2. Fit MicroButton inside of Table rows without pushing them taller. - */ -/** - * 1. Give Bar a consistent height for when it contains shorter children, and therefore can't - * depend on them to give it the desired height. - */ -/** - * 1. Put 10px of space between each child. - * 2. If there is only one section, align it to the right. If you wanted it aligned right, you - * wouldn't use the Bar in the first place. - * 3. Children in the middle should center their content. - * 4. Fix an IE bug which causes the last child to overflow the container. - * 5. Fixing this bug means we now need to align the children to the right. - */ -/** - * 1. Required for IE11. - */ + main { display: block; - /* 1 */ } + } .kuiBar { display: flex; align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ } + } .kuiBarSection { display: flex; @@ -554,33 +28,24 @@ main { margin-right: 25px; } .kuiBarSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiBarSection:first-child { margin-left: 0; } .kuiBarSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiBarSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiBarSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Setting to inline-block guarantees the same height when applied to both - * button elements and anchor tags. - * 2. Links can be focused when they're "disabled" (since we're just faking this with a class), but - * at least make them look like they're not focused. - */ .kuiButton { display: inline-block; - /* 1 */ - -webkit-appearance: none; - appearance: none; + appearance: none; cursor: pointer; padding: 4px 12px 5px; font-size: 16px; @@ -597,21 +62,14 @@ main { cursor: not-allowed; opacity: 0.5; } .kuiButton:enabled:active { - -webkit-transform: translateY(1px); - transform: translateY(1px); } + transform: translateY(1px); } a.kuiButton:not(.kuiButton-isDisabled):active { - /* 1 */ - -webkit-transform: translateY(1px); - transform: translateY(1px); } + transform: translateY(1px); } -/** - * 1. Solves whitespace problems introduced by inline elements. - */ .kuiButton__inner { display: flex; - /* 1 */ - align-items: center; - /* 1 */ } + align-items: center; + } .kuiButton--small { font-size: 12px; @@ -634,122 +92,85 @@ main { .kuiButton--iconText.kuiButton--small .kuiButton__icon:last-child:not(:only-child) { margin-left: 4px; } -/** - * 1. Override Bootstrap. - */ .kuiButton--basic { color: #343741; background-color: #F5F7FA; } .kuiButton--basic:not(a):enabled:focus { color: #343741; } a.kuiButton--basic:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #343741; } + color: #343741; } .kuiButton--basic:enabled:hover { background-color: #d3dce9 !important; - /* 1 */ } + } a.kuiButton--basic:not(.kuiButton-isDisabled):hover { - /* 1 */ - background-color: #d3dce9 !important; - /* 1 */ } + background-color: #d3dce9 !important; + } .kuiButton--basic:enabled:active { background-color: #d3dce9 !important; - /* 1 */ } + } a.kuiButton--basic:not(.kuiButton-isDisabled):active { - /* 1 */ - background-color: #d3dce9 !important; - /* 1 */ } + background-color: #d3dce9 !important; + } -/** - * 1. Override Bootstrap. - */ .kuiButton--primary { color: #FFF; background-color: #006BB4; } .kuiButton--primary:not(a):enabled:focus { color: #FFF; } a.kuiButton--primary:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #FFF; } + color: #FFF; } .kuiButton--primary:enabled:hover { color: #FFF !important; - /* 1 */ - background-color: #004d81; } + background-color: #004d81; } a.kuiButton--primary:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #004d81; } + color: #FFF !important; + background-color: #004d81; } .kuiButton--primary:enabled:active { color: #FFF !important; - /* 1 */ - background-color: #004d81; } + background-color: #004d81; } a.kuiButton--primary:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #004d81; } + color: #FFF !important; + background-color: #004d81; } -/** - * 1. Override Bootstrap. - */ .kuiButton--success { color: #FFF; background-color: #017D73; } .kuiButton--success:not(a):enabled:focus { color: #FFF; } a.kuiButton--success:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #FFF; } + color: #FFF; } .kuiButton--success:enabled:hover { color: #FFF !important; - /* 1 */ - background-color: #014a44; } + background-color: #014a44; } a.kuiButton--success:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #014a44; } + color: #FFF !important; + background-color: #014a44; } .kuiButton--success:enabled:active { color: #FFF !important; - /* 1 */ - background-color: #014a44; } + background-color: #014a44; } a.kuiButton--success:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #014a44; } + color: #FFF !important; + background-color: #014a44; } -/** - * 1. Override Bootstrap. - */ .kuiButton--danger { color: #BD271E; border: solid 1px #BD271E; } .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #BD271E; - /* 3 */ - color: #BD271E; } + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #BD271E; + color: #BD271E; } a.kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #BD271E; - /* 3 */ - color: #BD271E; } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #BD271E; + color: #BD271E; } .kuiButton--danger:enabled:hover { color: #911e17 !important; border: solid 1px #911e17; background-color: rgba(189, 39, 30, 0.1); } a.kuiButton--danger:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #911e17 !important; + color: #911e17 !important; border: solid 1px #911e17; background-color: rgba(189, 39, 30, 0.1); } .kuiButton--danger:enabled:active { @@ -757,112 +178,77 @@ main { border: solid 1px #911e17; background-color: rgba(189, 39, 30, 0.1); } a.kuiButton--danger:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #911e17 !important; + color: #911e17 !important; border: solid 1px #911e17; background-color: rgba(189, 39, 30, 0.1); } -/** - * 1. Override Bootstrap. - */ .kuiButton--warning { color: #FFF; background-color: #F5A700; } .kuiButton--warning:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #F5A700; - /* 3 */ - color: #FFF; } + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #F5A700; + color: #FFF; } a.kuiButton--warning:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #F5A700; - /* 3 */ - color: #FFF; } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #F5A700; + color: #FFF; } .kuiButton--warning:enabled:hover { color: #FFF !important; - /* 1 */ - background-color: #c28400; } + background-color: #c28400; } a.kuiButton--warning:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #c28400; } + color: #FFF !important; + background-color: #c28400; } .kuiButton--warning:enabled:active { color: #FFF !important; - /* 1 */ - background-color: #c28400; } + background-color: #c28400; } a.kuiButton--warning:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #c28400; } + color: #FFF !important; + background-color: #c28400; } .kuiButton--warning:disabled { background-color: #ffbb29; } a.kuiButton--warning.kuiButton-isDisabled { background-color: #ffbb29; } -/** - * 1. Override Bootstrap. - * 2. Override either Bootstrap or Timeline styles. - */ .kuiButton--hollow { color: #006BB4 !important; - /* 2 */ - background-color: transparent; } + background-color: transparent; } .kuiButton--hollow:enabled:hover { color: #004d81 !important; - /* 1 */ - text-decoration: underline; } + text-decoration: underline; } a.kuiButton--hollow:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #004d81 !important; - /* 1 */ - text-decoration: underline; } + color: #004d81 !important; + text-decoration: underline; } .kuiButton--hollow:enabled:active { color: #004d81 !important; - /* 1 */ - text-decoration: underline; } + text-decoration: underline; } a.kuiButton--hollow:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #004d81 !important; - /* 1 */ - text-decoration: underline; } + color: #004d81 !important; + text-decoration: underline; } .kuiButton--secondary { color: #006BB4 !important; - /* 2 */ - border: solid 1px #006BB4; } + border: solid 1px #006BB4; } .kuiButton--secondary:enabled:hover { color: #004d81 !important; - /* 1 */ - border: solid 1px #004d81; + border: solid 1px #004d81; background-color: rgba(0, 107, 180, 0.1); text-decoration: underline; } a.kuiButton--secondary:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #004d81 !important; - /* 1 */ - border: solid 1px #004d81; + color: #004d81 !important; + border: solid 1px #004d81; background-color: rgba(0, 107, 180, 0.1); text-decoration: underline; } .kuiButton--secondary:enabled:active { color: #004d81 !important; - /* 1 */ - border: solid 1px #004d81; + border: solid 1px #004d81; background-color: rgba(0, 107, 180, 0.1); text-decoration: underline; } a.kuiButton--secondary:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #004d81 !important; - /* 1 */ - border: solid 1px #004d81; + color: #004d81 !important; + border: solid 1px #004d81; background-color: rgba(0, 107, 180, 0.1); text-decoration: underline; } @@ -900,66 +286,42 @@ main { display: inline-block; } .kuiCollapseButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; padding: 4px; border: none; line-height: 1; font-size: 16px; color: #343741 !important; - /* 1 */ - cursor: pointer; + cursor: pointer; opacity: 0.35; } .kuiCollapseButton:hover { opacity: 1; } -/** - * 1. Set inline-block so this wrapper shrinks to fit the input. - */ .kuiAssistedInput { display: inline-block; - /* 1 */ - position: relative; } + position: relative; } -/** - * 1. Vertically center the assistance, regardless of its height. - */ .kuiAssistedInput__assistance { position: absolute; right: 12px; top: 50%; - /* 1 */ - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - /* 1 */ } - -/** - * 1. Deliberately disable only webkit appearance. If we disable it in Firefox, we get a really - * ugly default appearance which we can't customize, so our best option is to give Firefox - * control over the checkbox's appearance. - * 2. Override default styles (possibly from Bootstrap). - */ + transform: translateY(-50%); + } + .kuiCheckBox { - -webkit-appearance: none; - appearance: none; - /* 1 */ - background-color: #fbfcfd; + appearance: none; + background-color: #fbfcfd; border: 1px solid rgba(15, 39, 118, 0.1); border-radius: 4px; width: 16px; height: 16px; - font: "var(--font-text)" !important; - /* 2 */ - line-height: 1.5 !important; - /* 2 */ - margin: 0 !important; - /* 2 */ - font-family: "var(--font-text)" !important; - /* 2 */ - font-size: 10px !important; - /* 2 */ - transition: background-color 0.1s linear; } + font: var(--font-text) !important; + line-height: 1.5 !important; + margin: 0 !important; + font-family: var(--font-text) !important; + font-size: 10px !important; + transition: background-color 0.1s linear; } .kuiCheckBox::before { position: relative; left: 0.25em; @@ -976,11 +338,9 @@ main { opacity: 1; } .kuiCheckBox:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #006BB4; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #006BB4; + } .kuiCheckBox:disabled { background-color: #eef2f7 !important; border-color: #eef2f7 !important; @@ -996,15 +356,12 @@ main { font-size: 16px; margin-left: 8px; } -/** - * 1. Override Bootstrap. - */ .kuiLabel { font-size: 16px; line-height: 1.5; font-weight: bold; margin-bottom: 0; - /* 1 */ } + } .kuiSearchInput { width: 180px; @@ -1022,14 +379,9 @@ main { font-size: 1em; color: #98A2B3; } -/** - * 1. Make space for search icon. - * 2. Expand to fill container. - */ .kuiSearchInput__input { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1040,11 +392,9 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-left: 28px; - /* 1 */ - width: 100%; - /* 2 */ } + padding-left: 28px; + width: 100%; + } .kuiSearchInput__input:invalid { border-color: #BD271E; } .kuiSearchInput__input:focus { @@ -1060,13 +410,9 @@ main { .kuiSearchInput--large { width: 400px; } -/** - * Avoid setting a width here, so that the width of the options can dynamically set the width. - */ .kuiSelect { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1077,15 +423,12 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-right: 30px; - /* 2 */ - background-image: url('data:image/svg+xml;utf8,'); - /* 1 */ - background-size: 14px; + padding-right: 30px; + background-image: url('data:image/svg+xml;utf8,'); + background-size: 14px; background-repeat: no-repeat; background-position: calc(100% - 8px); - /* 2 */ } + } .kuiSelect:invalid { border-color: #BD271E; } .kuiSelect:focus { @@ -1096,7 +439,7 @@ main { cursor: not-allowed; } .kuiSelect:-moz-focusring { text-shadow: 0 0 0; - /* 3 */ } + } .kuiSelect.kuiSelect-isInvalid { border-color: #BD271E; } .kuiSelect:focus { @@ -1113,28 +456,22 @@ main { .kuiSelect--large { width: 400px; } -/** - * 1. Have the same spatial footprint as the regular input. - */ .kuiStaticInput { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; line-height: 1.5; color: #343741; border: 1px solid transparent; - /* 1 */ - background-color: transparent; } + background-color: transparent; } .kuiTextArea { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1145,7 +482,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ } + } .kuiTextArea:invalid { border-color: #BD271E; } .kuiTextArea:focus { @@ -1172,9 +509,8 @@ main { .kuiTextInput { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1185,7 +521,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ } + } .kuiTextInput:invalid { border-color: #BD271E; } .kuiTextInput:focus { @@ -1203,13 +539,10 @@ main { .kuiTextInput--large { width: 400px; } -/** - * 1. We may want to put elements in here which have different heights. - */ .kuiFieldGroup { display: flex; align-items: center; - /* 1 */ } + } .kuiFieldGroup--alignTop { align-items: flex-start; } @@ -1224,23 +557,14 @@ main { .kuiFieldGroupSection--wide > * { width: 100%; } -/** - * 1. Copied from FontAwesome's .fa class. We use a custom class to make it easier to migrate away - * from FontAwesome someday. When we do migrate away, we can just update this definition. - */ .kuiIcon { display: inline-block; - /* 1 */ - font: normal normal normal 14px/1 FontAwesome, sans-serif; - /* 1 */ - font-size: inherit; - /* 1 */ - text-rendering: auto; - /* 1 */ - -webkit-font-smoothing: antialiased; - /* 1 */ - -moz-osx-font-smoothing: grayscale; - /* 1 */ } + font: normal normal normal 14px/1 FontAwesome, sans-serif; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } .kuiIcon--info { color: #006BB4; } @@ -1265,41 +589,26 @@ main { line-height: 1.5; border: 2px solid; } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--info { border-color: rgba(0, 107, 180, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--success { border-color: rgba(1, 125, 115, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--warning { border-color: rgba(245, 167, 0, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--error { border-color: rgba(189, 39, 30, 0.25); - /* 1 */ } + } -/** - * 1. Align with first line of title text if it wraps. - */ .kuiInfoPanelHeader { display: flex; align-items: baseline; - /* 1 */ } + } .kuiInfoPanelHeader__icon { margin-right: 10px; @@ -1324,34 +633,23 @@ main { color: #006BB4; text-decoration: none; cursor: pointer; - /* 1 */ - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: none; - /* 2 */ - font-size: inherit; - /* 2 */ - line-height: inherit; - /* 2 */ } + appearance: none; + background-color: transparent; + border: none; + font-size: inherit; + line-height: inherit; + } .kuiLink:visited, .kuiLink:active { color: #006BB4; } .kuiLink:hover { color: #004d81; text-decoration: underline; } -/** - * 1. Breadcrumbs are placed in the top-left corner and need to be bumped over - * a bit. - */ .kuiLocalBreadcrumbs { display: flex; align-items: center; padding: 12px 8px; - /* 1 */ - border-bottom: 1px solid #D3DAE6; + border-bottom: 1px solid #D3DAE6; flex-grow: 1; flex-basis: 100%; background-color: #FFF; } @@ -1364,33 +662,21 @@ main { margin-left: 6px; } .kuiLocalBreadcrumb + .kuiLocalBreadcrumb::before { content: "/"; - -webkit-user-select: none; - user-select: none; + user-select: none; margin-right: 4px; color: #D3DAE6; } -/** - * 1. Make it a bit darker to contrast with the gray background. - */ .kuiLocalBreadcrumb__link { color: #006BB4; text-decoration: none; cursor: pointer; - /* 1 */ - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: none; - /* 2 */ - font-size: inherit; - /* 2 */ - line-height: inherit; - /* 2 */ - color: #006BB4; - /* 1 */ - font-size: 16px; } + appearance: none; + background-color: transparent; + border: none; + font-size: inherit; + line-height: inherit; + color: #006BB4; + font-size: 16px; } .kuiLocalBreadcrumb__link:visited, .kuiLocalBreadcrumb__link:active { color: #006BB4; } .kuiLocalBreadcrumb__link:hover { @@ -1415,12 +701,8 @@ main { justify-content: space-between; margin-bottom: 4px; } -/** - * 1. Override inherited styles. - */ .kuiDatePickerNavigationButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; border: none; font-size: 14px; @@ -1433,13 +715,10 @@ main { background-color: #006BB4; } .kuiDatePickerNavigationButton:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4; - /* 3 */ - color: #343741; - /* 1 */ } + outline: none !important; + box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4; + color: #343741; + } .kuiDatePickerHeaderCell { padding: 9px 0; @@ -1452,22 +731,14 @@ main { .kuiDatePickerRowCell { padding: 0; text-align: center; - /** - * This state class exists to support weird angular-bootstrap datepicker functionality, - * in which you can't select a day on the "From" calendar if it falls after the selected day in - * the "To" calendar (and vice versa, you can't select a "To" day if it is before the "From" day). - */ } + } .kuiDatePickerRowCell.kuiDatePickerRowCell-isBlocked { cursor: not-allowed; } .kuiDatePickerRowCell.kuiDatePickerRowCell-isBlocked .kuiDatePickerRowCellContent { pointer-events: none; } -/** - * 1. Override inherited styles. - */ .kuiDatePickerRowCellContent { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; width: 100%; border: 1px solid transparent; @@ -1478,13 +749,10 @@ main { line-height: 1.2; } .kuiDatePickerRowCellContent:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4; - /* 3 */ - color: #343741; - /* 1 */ } + outline: none !important; + box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4; + color: #343741; + } .kuiDatePickerRowCellContent:disabled { pointer-events: none; opacity: 0.5; } @@ -1509,16 +777,14 @@ main { line-height: 20px; } .kuiLocalDropdownCloseButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; padding: 4px; border: none; line-height: 1; font-size: 16px; color: #343741 !important; - /* 1 */ - cursor: pointer; + cursor: pointer; opacity: 0.35; position: absolute; top: 1px; @@ -1538,13 +804,9 @@ main { .kuiLocalDropdownPanel--right { margin-left: 30px; } -/** - * 1. Override inherited styles. - */ .kuiLocalDropdownTitle { margin-top: 0; - /* 1 */ - margin-bottom: 12px; + margin-bottom: 12px; font-size: 18px; color: #343741; } @@ -1559,15 +821,11 @@ main { justify-content: space-between; margin-bottom: 6px; } -/** - * 1. Override inherited styles. - */ .kuiLocalDropdownHeader__label { font-size: 14px; font-weight: 700; margin-bottom: 0; - /* 1 */ - color: #343741; } + color: #343741; } .kuiLocalDropdownHeader__actions { display: flex; } @@ -1649,24 +907,16 @@ main { margin-right: 5px; margin-bottom: -1px; } -/** - * 1. Match height of logo in side bar, but allow it to expand to accommodate - * dropdown. - */ .kuiLocalNav { display: flex; flex-direction: column; justify-content: space-between; min-height: 69px; - /* 1 */ - color: #343741; + color: #343741; background-color: #FFF; line-height: 1.5; border-bottom: solid 1px #D3DAE6; } -/** - * 1. Allow row to expand if the content is so long that it wraps. - */ .kuiLocalNavRow { display: flex; align-items: stretch; @@ -1676,18 +926,10 @@ main { display: flex; align-items: stretch; } -/** - * 1. We make this row flex-start because it usually contains a search input, which may expand - * beyond the height of this container. We can't use `align-items: center`, because this would - * cause the search input to overflow both on the top and bottom; `align-items: flex-start` - * makes it only overflow on the bottom. But this means we need to manually center the content - * of this container using padding. - */ .kuiLocalNavRow--secondary { padding: 0 8px; - /* 1 */ - align-items: flex-start; - /* 1 */ } + align-items: flex-start; + } .kuiLocalSearch { display: flex; @@ -1695,9 +937,8 @@ main { margin-bottom: 8px; } .kuiLocalSearchInput { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1708,8 +949,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - flex: 1 1 100%; + flex: 1 1 100%; border-color: #FFF; border-color: #D3DAE6; border-radius: 4px 0 0 4px; } @@ -1732,33 +972,22 @@ main { border-radius: 0; border-left-width: 0; } -/** - * 1. em used for right padding so documentation link and query string - * won't overlap if the user increases their default browser font size - * This is sized for the 'Options' link - */ .kuiLocalSearchInput, .kuiLocalSearchAssistedInput__input { padding-right: 6em; - /* 1 */ } + } -/** - * 1. Vertically center the assistance, regardless of its height. - */ .kuiLocalSearchAssistedInput__assistance { position: absolute; right: 6px; top: 50%; - /* 1 */ - z-index: 2; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - /* 1 */ } + z-index: 2; + transform: translateY(-50%); + } .kuiLocalSearchSelect { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1769,16 +998,12 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-right: 30px; - /* 2 */ - background-image: url('data:image/svg+xml;utf8,'); - /* 1 */ - background-size: 14px; + padding-right: 30px; + background-image: url('data:image/svg+xml;utf8,'); + background-size: 14px; background-repeat: no-repeat; background-position: calc(100% - 8px); - /* 2 */ - border-left-width: 0; + border-left-width: 0; border-radius: 0; } .kuiLocalSearchSelect:invalid { border-color: #BD271E; } @@ -1790,40 +1015,28 @@ main { cursor: not-allowed; } .kuiLocalSearchSelect:-moz-focusring { text-shadow: 0 0 0; - /* 3 */ } + } -/** - * 1. Override inherited styles. - */ .kuiLocalSearchButton { width: 43px; height: 32px; font-size: 16px; line-height: 0; - /* 1 */ - color: #FFF; + color: #FFF; background-color: #006BB4; border: 0; border-radius: 0 4px 4px 0; } .kuiLocalSearchButton:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } -/** - * 1. We want the bottom border on selected tabs to be flush with the bottom of the container. - */ .kuiLocalTabs { display: flex; align-items: flex-end; height: 100%; } -/** - * 1. Override inherited typographic styles. - */ .kuiLocalTab { padding: 5px 0 6px; font-size: 18px; @@ -1832,13 +1045,8 @@ main { text-decoration: none; cursor: pointer; margin-top: 0 !important; - /* 1 */ - margin-bottom: 0 !important; - /* 1 */ - /** - * 1. We may want to show a tooltip to explain why the tab is disabled, so we will just show - * a regular cursor instead of setting pointer-events: none. - */ } + margin-bottom: 0 !important; + } .kuiLocalTab:hover:not(.kuiLocalTab-isDisabled), .kuiLocalTab:active:not(.kuiLocalTab-isDisabled) { color: #006BB4; } .kuiLocalTab.kuiLocalTab-isSelected { @@ -1848,7 +1056,7 @@ main { .kuiLocalTab.kuiLocalTab-isDisabled { opacity: 0.5; cursor: default; - /* 1 */ } + } .kuiLocalTab + .kuiLocalTab { margin-left: 15px; } @@ -1866,22 +1074,19 @@ main { padding: 0; display: none; } -/** - * 1. Put 10px of space between each child. - */ .kuiPager { display: flex; align-items: center; } .kuiPager > * + * { margin-left: 10px; - /* 1 */ } + } .kuiPagerText { font-size: 16px; line-height: 1.5; color: #69707D; white-space: nowrap; - /* 1 */ } + } .kuiPanel { box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); @@ -1917,62 +1122,44 @@ main { align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 50px; border-bottom: 1px solid #D3DAE6; } .kuiPanelHeader .kuiButton:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } a.kuiPanelHeader .kuiButton:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } .kuiPanelHeader .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; + } a.kuiPanelHeader .kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; + } .kuiPanelHeader .kuiSelect { border-color: #fbfcfd; } .kuiPanelHeader .kuiSelect:not(a):enabled:focus { outline: none; border-color: #006BB4; } a.kuiPanelHeader .kuiSelect:not(.kuiButton-isDisabled):focus { - /* 1 */ - outline: none; + outline: none; border-color: #006BB4; } -/** - * 1. This way we can use h1, h2, etc. - */ .kuiPanelHeader__title { font-size: 20px; line-height: 1.5; margin: 0; - /* 1 */ } + } -/** - * 1. Undo what barSection mixin does. - */ .kuiPanelHeaderSection { display: flex; align-items: center; @@ -1981,26 +1168,24 @@ main { margin-right: 25px; } .kuiPanelHeaderSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiPanelHeaderSection:first-child { margin-left: 0; } .kuiPanelHeaderSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiPanelHeaderSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiPanelHeaderSection > * + * { margin-left: 10px; - /* 1 */ } + } .kuiPanelHeaderSection:only-child { margin-left: 0; - /* 1 */ - margin-right: auto; - /* 1 */ } + margin-right: auto; + } .kuiPanelBody { padding: 10px; } @@ -2035,98 +1220,63 @@ main { .kuiStatusText--error { color: #BD271E; } -/** - * 1. Set the image to be the same size as a font icon at 14px. - * 2. We need to cap the height too, in case the icon was designed thin and tall. - */ .kuiStatusText__icon { margin-right: 6px; width: 1.15em; - /* 1 */ - max-height: 1.15em; - /* 2 */ } + max-height: 1.15em; + } -/** - * 1. Make seamless transition from ToolBar to Table header and contained Menu. - * 1. Make seamless transition from Table to ToolBarFooter header. - */ .kuiControlledTable { background: #FFF; } .kuiControlledTable .kuiTable { border-top: none; - /* 1 */ } + } .kuiControlledTable .kuiToolBarFooter { border-top: none; - /* 2 */ } + } .kuiControlledTable .kuiMenu--contained { border-top: none; - /* 1 */ } + } -/** - * 1. Prevent cells from expanding based on content size. This substitutes for table-layout: fixed. - */ -/** - * NOTE: table-layout: fixed causes a bug in IE11 and Edge (see #9929). It also prevents us from - * specifying a column width, e.g. the checkbox column. - */ .kuiTable { width: 100%; border: 1px solid #D3DAE6; border-collapse: collapse; background-color: #FFF; } -/** - * 1. Allow contents of cells to determine table's width. - */ .kuiTable--fluid { width: auto; - /* 1 */ } + } .kuiTable--fluid .kuiTableHeaderCell, .kuiTable--fluid .kuiTableRowCell { max-width: none; - /* 1 */ } + } .kuiTableHeaderCell { font-size: 16px; font-weight: 400; text-align: left; max-width: 20px; - /* 1 */ - line-height: 1.5; + line-height: 1.5; color: #69707D; } .kuiTableHeaderCell__liner { display: inline-block; padding: 7px 8px 8px; } -/** - * 1. Prevent rapid clicking from selecting text. - * 2. Remove native button element styles. - * 3. Make buttons look and behave like table header cells. - */ .kuiTableHeaderCellButton { - -webkit-user-select: none; - user-select: none; - /* 1 */ - cursor: pointer; + user-select: none; + cursor: pointer; width: 100%; - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: 0; - /* 2 */ - padding: 0; - /* 2 */ - color: inherit; - /* 3 */ - line-height: inherit; - /* 3 */ - font-size: inherit; - /* 3 */ - text-align: inherit; - /* 3 */ } + appearance: none; + background-color: transparent; + border: 0; + padding: 0; + color: inherit; + line-height: inherit; + font-size: inherit; + text-align: inherit; + } .kuiTableHeaderCellButton:hover .kuiTableSortIcon { display: block; opacity: 1; } @@ -2156,31 +1306,20 @@ main { font-weight: 400; text-align: left; max-width: 20px; - /* 1 */ - color: #343741; + color: #343741; border-top: 1px solid #D3DAE6; vertical-align: middle; } -/** - * 1. Vertically align all children. - * 2. The padding on this div allows the ellipsis to show if the content is truncated. If - * the padding was on the cell, the ellipsis would be cropped. - * 3. Truncate content with an ellipsis. - */ .kuiTableRowCell__liner { padding: 7px 8px 8px; - /* 2 */ - line-height: 1.5; - /* 1 */ - overflow: hidden; - /* 3 */ - text-overflow: ellipsis; - /* 3 */ - white-space: nowrap; - /* 3 */ } + line-height: 1.5; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } .kuiTableRowCell__liner > * { vertical-align: middle; - /* 1 */ } + } .kuiTableRowCell--wrap .kuiTableRowCell__liner { white-space: normal; } @@ -2189,34 +1328,24 @@ main { overflow: visible; white-space: normal; } -/** - * 1. We don't want to create too strong a disconnect between the original row and the row - * that contains its expanded details. - */ .kuiTableRowCell--expanded { border-top-color: #FFF; - /* 1 */ } + } .kuiTableRowCell--alignRight { text-align: right; } .kuiTableRowCell--alignRight .kuiTableRowCell__liner { text-align: right; } -/** - * 1. Rendered width of cell with checkbox inside of it. - * 2. Align checkbox with text in other cells. - * 3. Show the checkbox in Edge; otherwise it gets cropped. - */ .kuiTableHeaderCell--checkBox, .kuiTableRowCell--checkBox { width: 28px; - /* 1 */ - line-height: 1; - /* 2 */ } + line-height: 1; + } .kuiTableHeaderCell--checkBox .kuiTableRowCell__liner, .kuiTableRowCell--checkBox .kuiTableRowCell__liner { overflow: visible; - /* 3 */ } + } .kuiTableHeaderCell--checkBox .kuiTableHeaderCell__liner, .kuiTableHeaderCell--checkBox .kuiTableRowCell__liner, .kuiTableRowCell--checkBox .kuiTableHeaderCell__liner, @@ -2233,41 +1362,29 @@ main { display: flex; border-bottom: 1px solid #D3DAE6; } -/** - * 1. Override button styles (some of which are from Bootstrap). - * 2. Adding a border shifts tabs right by 1px, so we need to shift them back. - * 3. Move the tab down so that its bottom border covers the container's bottom border. - * 4. When the tab is focused, its bottom border changes to be 1px, so we need to add 1px more - * of padding to make sure the text doesn't shift down. - */ .kuiTab { - -webkit-appearance: none; - appearance: none; - /* 1 */ - cursor: pointer; + appearance: none; + cursor: pointer; padding: 10px 30px; font-size: 16px; color: #69707D; background-color: transparent; - /* 1 */ - border: 1px solid #D3DAE6; + border: 1px solid #D3DAE6; border-radius: 0; - /* 1 */ - margin-bottom: -1px; - /* 3 */ } + margin-bottom: -1px; + } .kuiTab + .kuiTab { border-left: none; } .kuiTab + .kuiTab:focus:not(.kuiTab-isSelected):not(:active) { margin-left: -1px; - /* 2 */ } + } .kuiTab:active { outline: none !important; - /* 1 */ - box-shadow: none; - /* 1 */ } + box-shadow: none; + } .kuiTab:focus { outline: none; - /* 1 */ } + } .kuiTab:focus:not(.kuiTab-isSelected):not(:active) { z-index: 1; color: #006BB4; @@ -2286,49 +1403,37 @@ main { align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 50px; background-color: transparent; border: solid 1px #D3DAE6; } .kuiToolBar .kuiButton:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } a.kuiToolBar .kuiButton:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } .kuiToolBar .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; + } a.kuiToolBar .kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; + } .kuiToolBar .kuiSelect { border-color: #fbfcfd; } .kuiToolBar .kuiSelect:not(a):enabled:focus { outline: none; border-color: #006BB4; } a.kuiToolBar .kuiSelect:not(.kuiButton-isDisabled):focus { - /* 1 */ - outline: none; + outline: none; border-color: #006BB4; } .kuiToolBarSection { @@ -2339,36 +1444,31 @@ main { margin-right: 25px; } .kuiToolBarSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiToolBarSection:first-child { margin-left: 0; } .kuiToolBarSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiToolBarSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiToolBarSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Override Bar styles and put Search on the left side. - */ .kuiToolBar--searchOnly .kuiToolBarSearch { margin-left: 0 !important; - /* 1 */ } + } .kuiToolBarFooter { display: flex; align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 40px; background-color: #FFF; } @@ -2380,27 +1480,21 @@ main { margin-right: 25px; } .kuiToolBarFooterSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiToolBarFooterSection:first-child { margin-left: 0; } .kuiToolBarFooterSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiToolBarFooterSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiToolBarFooterSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Put 10px of space between each child. - * 2. Fix IE11 bug which causes this item to grow too wide when there is only a single - * kuiToolBarSection sibling. - */ .kuiToolBarSearch { display: flex; align-items: center; @@ -2408,15 +1502,14 @@ main { margin-right: 25px; flex: 1 1 auto; max-width: 100%; - /* 2 */ - line-height: 1.5; } + line-height: 1.5; } .kuiToolBarSearch:first-child { margin-left: 0; } .kuiToolBarSearch:last-child { margin-right: 0; } .kuiToolBarSearch > * + * { margin-left: 10px; - /* 1 */ } + } .kuiToolBarSearchBox { flex: 1 1 auto; @@ -2431,85 +1524,55 @@ main { font-size: 1em; color: #acacac; } -/** - * 1. Fix inherited styles (possibly from Bootstrap). - */ .kuiToolBarSearchBox__input { width: 100%; min-width: 200px; padding: 4px 12px 5px 28px; - font-family: "var(--font-text)"; - /* 1 */ - background-color: #FFF; + font-family: var(--font-text); + background-color: #FFF; color: #343741; border-radius: 4px; font-size: 1em; border: 1px solid #D3DAE6; line-height: normal; - /* 1 */ - transition: border-color 0.1s linear; } + transition: border-color 0.1s linear; } .kuiToolBarSearchBox__input:focus { outline: none; border-color: #006BB4; } -/* - * 1. We don't want the text to take up two lines and overflow the ToolBar. - */ .kuiToolBarText { font-size: 16px; line-height: 1.5; color: #69707D; white-space: nowrap; - /* 1 */ } + } -/** - * 1. Override h1. - */ .kuiTitle { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - font-size: 24px; } + font-weight: 400; + font-size: 24px; } -/** - * 1. Override h2, h3, etc. - */ .kuiSubTitle { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - font-size: 20px; } + font-weight: 400; + font-size: 20px; } -/** - * 1. Override p. - */ .kuiTextTitle { margin: 0; - /* 1 */ - font-weight: 700; - /* 1 */ - line-height: 1.5; + font-weight: 700; + line-height: 1.5; font-size: 16px; } -/** - * 1. Override p. - */ .kuiText { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - line-height: 1.5; + font-weight: 400; + line-height: 1.5; font-size: 16px; } .kuiSubText { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - line-height: 1.5; + font-weight: 400; + line-height: 1.5; font-size: 14px; } .kuiSubduedText { diff --git a/packages/osd-ui-framework/dist/kui_next_dark.css b/packages/osd-ui-framework/dist/kui_next_dark.css index f547a9bd3e82..d424a8ee63f1 100644 --- a/packages/osd-ui-framework/dist/kui_next_dark.css +++ b/packages/osd-ui-framework/dist/kui_next_dark.css @@ -8,577 +8,17 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/** - * 1. Focus rings shouldn't be visible on scrollable regions, but a11y requires them to be focusable. - * Browser's supporting `:focus-visible` will still show outline on keyboard focus only. - * Others like Safari, won't show anything at all. - * 2. Force the `:focus-visible` when the `tabindex=0` (is tabbable) - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/** - * 1. Enforce pointer when there's no href. - * 2. Allow these styles to be applied to a button element. - */ -/** - * 1. Override Bootstrap styles. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :disabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * Nothing fancy, just the basics so we can use this for both regular and static controls. - */ -/** - * 1. Prevent Firefox users from being able to resize textareas to smaller than the min-height. - */ -/** - * We specifically don't include Angular's ng-${state} classes here because we don't want to be tightly - * coupled with Angular. - */ -/** - * 1. Embedded SVG of fa-caret-down - * (https://github.com/encharm/Font-Awesome-SVG-PNG/blob/master/black/svg/caret-down.svg). - * 2. Make room on right side for the caret. - * 3. Prevent Firefox from showing dotted line around text on focus. - */ -/** - * 1. Setting to inline-block guarantees the same height when applied to both - * button elements and anchor tags. - * 2. Fit MicroButton inside of Table rows without pushing them taller. - */ -/** - * 1. Give Bar a consistent height for when it contains shorter children, and therefore can't - * depend on them to give it the desired height. - */ -/** - * 1. Put 10px of space between each child. - * 2. If there is only one section, align it to the right. If you wanted it aligned right, you - * wouldn't use the Bar in the first place. - * 3. Children in the middle should center their content. - * 4. Fix an IE bug which causes the last child to overflow the container. - * 5. Fixing this bug means we now need to align the children to the right. - */ -/** - * 1. Required for IE11. - */ + main { display: block; - /* 1 */ } + } .kuiBar { display: flex; align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ } + } .kuiBarSection { display: flex; @@ -588,33 +28,24 @@ main { margin-right: 25px; } .kuiBarSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiBarSection:first-child { margin-left: 0; } .kuiBarSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiBarSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiBarSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Setting to inline-block guarantees the same height when applied to both - * button elements and anchor tags. - * 2. Links can be focused when they're "disabled" (since we're just faking this with a class), but - * at least make them look like they're not focused. - */ .kuiButton { display: inline-block; - /* 1 */ - -webkit-appearance: none; - appearance: none; + appearance: none; cursor: pointer; padding: 4px 12px 5px; font-size: 16px; @@ -631,21 +62,14 @@ main { cursor: not-allowed; opacity: 0.5; } .kuiButton:enabled:active { - -webkit-transform: translateY(1px); - transform: translateY(1px); } + transform: translateY(1px); } a.kuiButton:not(.kuiButton-isDisabled):active { - /* 1 */ - -webkit-transform: translateY(1px); - transform: translateY(1px); } + transform: translateY(1px); } -/** - * 1. Solves whitespace problems introduced by inline elements. - */ .kuiButton__inner { display: flex; - /* 1 */ - align-items: center; - /* 1 */ } + align-items: center; + } .kuiButton--small { font-size: 12px; @@ -668,122 +92,85 @@ main { .kuiButton--iconText.kuiButton--small .kuiButton__icon:last-child:not(:only-child) { margin-left: 4px; } -/** - * 1. Override Bootstrap. - */ .kuiButton--basic { color: #DFE5EF; background-color: #101B25; } .kuiButton--basic:not(a):enabled:focus { color: #DFE5EF; } a.kuiButton--basic:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #DFE5EF; } + color: #DFE5EF; } .kuiButton--basic:enabled:hover { background-color: #010101 !important; - /* 1 */ } + } a.kuiButton--basic:not(.kuiButton-isDisabled):hover { - /* 1 */ - background-color: #010101 !important; - /* 1 */ } + background-color: #010101 !important; + } .kuiButton--basic:enabled:active { background-color: #010101 !important; - /* 1 */ } + } a.kuiButton--basic:not(.kuiButton-isDisabled):active { - /* 1 */ - background-color: #010101 !important; - /* 1 */ } + background-color: #010101 !important; + } -/** - * 1. Override Bootstrap. - */ .kuiButton--primary { color: #FCFEFF; background-color: #159D8D; } .kuiButton--primary:not(a):enabled:focus { color: #FCFEFF; } a.kuiButton--primary:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #FCFEFF; } + color: #FCFEFF; } .kuiButton--primary:enabled:hover { color: #FCFEFF !important; - /* 1 */ - background-color: #0f7065; } + background-color: #0f7065; } a.kuiButton--primary:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FCFEFF !important; - /* 1 */ - background-color: #0f7065; } + color: #FCFEFF !important; + background-color: #0f7065; } .kuiButton--primary:enabled:active { color: #FCFEFF !important; - /* 1 */ - background-color: #0f7065; } + background-color: #0f7065; } a.kuiButton--primary:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FCFEFF !important; - /* 1 */ - background-color: #0f7065; } + color: #FCFEFF !important; + background-color: #0f7065; } -/** - * 1. Override Bootstrap. - */ .kuiButton--success { color: #FCFEFF; background-color: #7DE2D1; } .kuiButton--success:not(a):enabled:focus { color: #FCFEFF; } a.kuiButton--success:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #FCFEFF; } + color: #FCFEFF; } .kuiButton--success:enabled:hover { color: #FCFEFF !important; - /* 1 */ - background-color: #53d9c2; } + background-color: #53d9c2; } a.kuiButton--success:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FCFEFF !important; - /* 1 */ - background-color: #53d9c2; } + color: #FCFEFF !important; + background-color: #53d9c2; } .kuiButton--success:enabled:active { color: #FCFEFF !important; - /* 1 */ - background-color: #53d9c2; } + background-color: #53d9c2; } a.kuiButton--success:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FCFEFF !important; - /* 1 */ - background-color: #53d9c2; } + color: #FCFEFF !important; + background-color: #53d9c2; } -/** - * 1. Override Bootstrap. - */ .kuiButton--danger { color: #F66; border: solid 1px #F66; } .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #F66; - /* 3 */ - color: #F66; } + outline: none !important; + box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #F66; + color: #F66; } a.kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #F66; - /* 3 */ - color: #F66; } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #F66; + color: #F66; } .kuiButton--danger:enabled:hover { color: #ff3333 !important; border: solid 1px #ff3333; background-color: rgba(255, 102, 102, 0.1); } a.kuiButton--danger:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #ff3333 !important; + color: #ff3333 !important; border: solid 1px #ff3333; background-color: rgba(255, 102, 102, 0.1); } .kuiButton--danger:enabled:active { @@ -791,112 +178,77 @@ main { border: solid 1px #ff3333; background-color: rgba(255, 102, 102, 0.1); } a.kuiButton--danger:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #ff3333 !important; + color: #ff3333 !important; border: solid 1px #ff3333; background-color: rgba(255, 102, 102, 0.1); } -/** - * 1. Override Bootstrap. - */ .kuiButton--warning { color: #FCFEFF; background-color: #FFCE7A; } .kuiButton--warning:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #FFCE7A; - /* 3 */ - color: #FCFEFF; } + outline: none !important; + box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #FFCE7A; + color: #FCFEFF; } a.kuiButton--warning:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #FFCE7A; - /* 3 */ - color: #FCFEFF; } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #FFCE7A; + color: #FCFEFF; } .kuiButton--warning:enabled:hover { color: #FCFEFF !important; - /* 1 */ - background-color: #ffbb47; } + background-color: #ffbb47; } a.kuiButton--warning:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FCFEFF !important; - /* 1 */ - background-color: #ffbb47; } + color: #FCFEFF !important; + background-color: #ffbb47; } .kuiButton--warning:enabled:active { color: #FCFEFF !important; - /* 1 */ - background-color: #ffbb47; } + background-color: #ffbb47; } a.kuiButton--warning:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FCFEFF !important; - /* 1 */ - background-color: #ffbb47; } + color: #FCFEFF !important; + background-color: #ffbb47; } .kuiButton--warning:disabled { background-color: #ffe1ad; } a.kuiButton--warning.kuiButton-isDisabled { background-color: #ffe1ad; } -/** - * 1. Override Bootstrap. - * 2. Override either Bootstrap or Timeline styles. - */ .kuiButton--hollow { color: #159D8D !important; - /* 2 */ - background-color: transparent; } + background-color: transparent; } .kuiButton--hollow:enabled:hover { color: #0f7065 !important; - /* 1 */ - text-decoration: underline; } + text-decoration: underline; } a.kuiButton--hollow:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #0f7065 !important; - /* 1 */ - text-decoration: underline; } + color: #0f7065 !important; + text-decoration: underline; } .kuiButton--hollow:enabled:active { color: #0f7065 !important; - /* 1 */ - text-decoration: underline; } + text-decoration: underline; } a.kuiButton--hollow:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #0f7065 !important; - /* 1 */ - text-decoration: underline; } + color: #0f7065 !important; + text-decoration: underline; } .kuiButton--secondary { color: #159D8D !important; - /* 2 */ - border: solid 1px #159D8D; } + border: solid 1px #159D8D; } .kuiButton--secondary:enabled:hover { color: #0f7065 !important; - /* 1 */ - border: solid 1px #0f7065; + border: solid 1px #0f7065; background-color: rgba(21, 157, 141, 0.1); text-decoration: underline; } a.kuiButton--secondary:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #0f7065 !important; - /* 1 */ - border: solid 1px #0f7065; + color: #0f7065 !important; + border: solid 1px #0f7065; background-color: rgba(21, 157, 141, 0.1); text-decoration: underline; } .kuiButton--secondary:enabled:active { color: #0f7065 !important; - /* 1 */ - border: solid 1px #0f7065; + border: solid 1px #0f7065; background-color: rgba(21, 157, 141, 0.1); text-decoration: underline; } a.kuiButton--secondary:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #0f7065 !important; - /* 1 */ - border: solid 1px #0f7065; + color: #0f7065 !important; + border: solid 1px #0f7065; background-color: rgba(21, 157, 141, 0.1); text-decoration: underline; } @@ -934,66 +286,42 @@ main { display: inline-block; } .kuiCollapseButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; padding: 4px; border: none; line-height: 1; font-size: 16px; color: #DFE5EF !important; - /* 1 */ - cursor: pointer; + cursor: pointer; opacity: 0.35; } .kuiCollapseButton:hover { opacity: 1; } -/** - * 1. Set inline-block so this wrapper shrinks to fit the input. - */ .kuiAssistedInput { display: inline-block; - /* 1 */ - position: relative; } + position: relative; } -/** - * 1. Vertically center the assistance, regardless of its height. - */ .kuiAssistedInput__assistance { position: absolute; right: 12px; top: 50%; - /* 1 */ - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - /* 1 */ } - -/** - * 1. Deliberately disable only webkit appearance. If we disable it in Firefox, we get a really - * ugly default appearance which we can't customize, so our best option is to give Firefox - * control over the checkbox's appearance. - * 2. Override default styles (possibly from Bootstrap). - */ + transform: translateY(-50%); + } + .kuiCheckBox { - -webkit-appearance: none; - appearance: none; - /* 1 */ - background-color: #0e1721; + appearance: none; + background-color: #0e1721; border: 1px solid rgba(252, 254, 255, 0.1); border-radius: 4px; width: 16px; height: 16px; - font: "var(--font-text)" !important; - /* 2 */ - line-height: 1.5 !important; - /* 2 */ - margin: 0 !important; - /* 2 */ - font-family: "var(--font-text)" !important; - /* 2 */ - font-size: 10px !important; - /* 2 */ - transition: background-color 0.1s linear; } + font: var(--font-text) !important; + line-height: 1.5 !important; + margin: 0 !important; + font-family: var(--font-text) !important; + font-size: 10px !important; + transition: background-color 0.1s linear; } .kuiCheckBox::before { position: relative; left: 0.25em; @@ -1010,11 +338,9 @@ main { opacity: 1; } .kuiCheckBox:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #159D8D; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #0A121A, 0 0 0 2px #159D8D; + } .kuiCheckBox:disabled { background-color: #0d161e !important; border-color: #0d161e !important; @@ -1030,15 +356,12 @@ main { font-size: 16px; margin-left: 8px; } -/** - * 1. Override Bootstrap. - */ .kuiLabel { font-size: 16px; line-height: 1.5; font-weight: bold; margin-bottom: 0; - /* 1 */ } + } .kuiSearchInput { width: 180px; @@ -1056,14 +379,9 @@ main { font-size: 1em; color: #5B6875; } -/** - * 1. Make space for search icon. - * 2. Expand to fill container. - */ .kuiSearchInput__input { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1074,11 +392,9 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-left: 28px; - /* 1 */ - width: 100%; - /* 2 */ } + padding-left: 28px; + width: 100%; + } .kuiSearchInput__input:invalid { border-color: #F66; } .kuiSearchInput__input:focus { @@ -1094,13 +410,9 @@ main { .kuiSearchInput--large { width: 400px; } -/** - * Avoid setting a width here, so that the width of the options can dynamically set the width. - */ .kuiSelect { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1111,15 +423,12 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-right: 30px; - /* 2 */ - background-image: url('data:image/svg+xml;utf8,'); - /* 1 */ - background-size: 14px; + padding-right: 30px; + background-image: url('data:image/svg+xml;utf8,'); + background-size: 14px; background-repeat: no-repeat; background-position: calc(100% - 8px); - /* 2 */ } + } .kuiSelect:invalid { border-color: #F66; } .kuiSelect:focus { @@ -1130,7 +439,7 @@ main { cursor: not-allowed; } .kuiSelect:-moz-focusring { text-shadow: 0 0 0; - /* 3 */ } + } .kuiSelect.kuiSelect-isInvalid { border-color: #F66; } .kuiSelect:focus { @@ -1147,28 +456,22 @@ main { .kuiSelect--large { width: 400px; } -/** - * 1. Have the same spatial footprint as the regular input. - */ .kuiStaticInput { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; line-height: 1.5; color: #DFE5EF; border: 1px solid transparent; - /* 1 */ - background-color: transparent; } + background-color: transparent; } .kuiTextArea { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1179,7 +482,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ } + } .kuiTextArea:invalid { border-color: #F66; } .kuiTextArea:focus { @@ -1206,9 +509,8 @@ main { .kuiTextInput { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1219,7 +521,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ } + } .kuiTextInput:invalid { border-color: #F66; } .kuiTextInput:focus { @@ -1237,13 +539,10 @@ main { .kuiTextInput--large { width: 400px; } -/** - * 1. We may want to put elements in here which have different heights. - */ .kuiFieldGroup { display: flex; align-items: center; - /* 1 */ } + } .kuiFieldGroup--alignTop { align-items: flex-start; } @@ -1258,23 +557,14 @@ main { .kuiFieldGroupSection--wide > * { width: 100%; } -/** - * 1. Copied from FontAwesome's .fa class. We use a custom class to make it easier to migrate away - * from FontAwesome someday. When we do migrate away, we can just update this definition. - */ .kuiIcon { display: inline-block; - /* 1 */ - font: normal normal normal 14px/1 FontAwesome, sans-serif; - /* 1 */ - font-size: inherit; - /* 1 */ - text-rendering: auto; - /* 1 */ - -webkit-font-smoothing: antialiased; - /* 1 */ - -moz-osx-font-smoothing: grayscale; - /* 1 */ } + font: normal normal normal 14px/1 FontAwesome, sans-serif; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } .kuiIcon--info { color: #159D8D; } @@ -1299,41 +589,26 @@ main { line-height: 1.5; border: 2px solid; } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--info { border-color: rgba(21, 157, 141, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--success { border-color: rgba(125, 226, 209, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--warning { border-color: rgba(255, 206, 122, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--error { border-color: rgba(255, 102, 102, 0.25); - /* 1 */ } + } -/** - * 1. Align with first line of title text if it wraps. - */ .kuiInfoPanelHeader { display: flex; align-items: baseline; - /* 1 */ } + } .kuiInfoPanelHeader__icon { margin-right: 10px; @@ -1358,34 +633,23 @@ main { color: #159D8D; text-decoration: none; cursor: pointer; - /* 1 */ - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: none; - /* 2 */ - font-size: inherit; - /* 2 */ - line-height: inherit; - /* 2 */ } + appearance: none; + background-color: transparent; + border: none; + font-size: inherit; + line-height: inherit; + } .kuiLink:visited, .kuiLink:active { color: #159D8D; } .kuiLink:hover { color: #0f7065; text-decoration: underline; } -/** - * 1. Breadcrumbs are placed in the top-left corner and need to be bumped over - * a bit. - */ .kuiLocalBreadcrumbs { display: flex; align-items: center; padding: 12px 8px; - /* 1 */ - border-bottom: 1px solid #293847; + border-bottom: 1px solid #293847; flex-grow: 1; flex-basis: 100%; background-color: #0A121A; } @@ -1398,33 +662,21 @@ main { margin-left: 6px; } .kuiLocalBreadcrumb + .kuiLocalBreadcrumb::before { content: "/"; - -webkit-user-select: none; - user-select: none; + user-select: none; margin-right: 4px; color: #293847; } -/** - * 1. Make it a bit darker to contrast with the gray background. - */ .kuiLocalBreadcrumb__link { color: #159D8D; text-decoration: none; cursor: pointer; - /* 1 */ - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: none; - /* 2 */ - font-size: inherit; - /* 2 */ - line-height: inherit; - /* 2 */ - color: #159D8D; - /* 1 */ - font-size: 16px; } + appearance: none; + background-color: transparent; + border: none; + font-size: inherit; + line-height: inherit; + color: #159D8D; + font-size: 16px; } .kuiLocalBreadcrumb__link:visited, .kuiLocalBreadcrumb__link:active { color: #159D8D; } .kuiLocalBreadcrumb__link:hover { @@ -1449,12 +701,8 @@ main { justify-content: space-between; margin-bottom: 4px; } -/** - * 1. Override inherited styles. - */ .kuiDatePickerNavigationButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; border: none; font-size: 14px; @@ -1467,13 +715,10 @@ main { background-color: #159D8D; } .kuiDatePickerNavigationButton:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px transparent, 0 0 0 2px #159D8D; - /* 3 */ - color: #DFE5EF; - /* 1 */ } + outline: none !important; + box-shadow: 0 0 0 1px transparent, 0 0 0 2px #159D8D; + color: #DFE5EF; + } .kuiDatePickerHeaderCell { padding: 9px 0; @@ -1486,22 +731,14 @@ main { .kuiDatePickerRowCell { padding: 0; text-align: center; - /** - * This state class exists to support weird angular-bootstrap datepicker functionality, - * in which you can't select a day on the "From" calendar if it falls after the selected day in - * the "To" calendar (and vice versa, you can't select a "To" day if it is before the "From" day). - */ } + } .kuiDatePickerRowCell.kuiDatePickerRowCell-isBlocked { cursor: not-allowed; } .kuiDatePickerRowCell.kuiDatePickerRowCell-isBlocked .kuiDatePickerRowCellContent { pointer-events: none; } -/** - * 1. Override inherited styles. - */ .kuiDatePickerRowCellContent { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; width: 100%; border: 1px solid transparent; @@ -1512,13 +749,10 @@ main { line-height: 1.2; } .kuiDatePickerRowCellContent:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px transparent, 0 0 0 2px #159D8D; - /* 3 */ - color: #DFE5EF; - /* 1 */ } + outline: none !important; + box-shadow: 0 0 0 1px transparent, 0 0 0 2px #159D8D; + color: #DFE5EF; + } .kuiDatePickerRowCellContent:disabled { pointer-events: none; opacity: 0.5; } @@ -1543,16 +777,14 @@ main { line-height: 20px; } .kuiLocalDropdownCloseButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; padding: 4px; border: none; line-height: 1; font-size: 16px; color: #DFE5EF !important; - /* 1 */ - cursor: pointer; + cursor: pointer; opacity: 0.35; position: absolute; top: 1px; @@ -1572,13 +804,9 @@ main { .kuiLocalDropdownPanel--right { margin-left: 30px; } -/** - * 1. Override inherited styles. - */ .kuiLocalDropdownTitle { margin-top: 0; - /* 1 */ - margin-bottom: 12px; + margin-bottom: 12px; font-size: 18px; color: #DFE5EF; } @@ -1593,15 +821,11 @@ main { justify-content: space-between; margin-bottom: 6px; } -/** - * 1. Override inherited styles. - */ .kuiLocalDropdownHeader__label { font-size: 14px; font-weight: 700; margin-bottom: 0; - /* 1 */ - color: #DFE5EF; } + color: #DFE5EF; } .kuiLocalDropdownHeader__actions { display: flex; } @@ -1683,24 +907,16 @@ main { margin-right: 5px; margin-bottom: -1px; } -/** - * 1. Match height of logo in side bar, but allow it to expand to accommodate - * dropdown. - */ .kuiLocalNav { display: flex; flex-direction: column; justify-content: space-between; min-height: 69px; - /* 1 */ - color: #DFE5EF; + color: #DFE5EF; background-color: #0A121A; line-height: 1.5; border-bottom: solid 1px #293847; } -/** - * 1. Allow row to expand if the content is so long that it wraps. - */ .kuiLocalNavRow { display: flex; align-items: stretch; @@ -1710,18 +926,10 @@ main { display: flex; align-items: stretch; } -/** - * 1. We make this row flex-start because it usually contains a search input, which may expand - * beyond the height of this container. We can't use `align-items: center`, because this would - * cause the search input to overflow both on the top and bottom; `align-items: flex-start` - * makes it only overflow on the bottom. But this means we need to manually center the content - * of this container using padding. - */ .kuiLocalNavRow--secondary { padding: 0 8px; - /* 1 */ - align-items: flex-start; - /* 1 */ } + align-items: flex-start; + } .kuiLocalSearch { display: flex; @@ -1729,9 +937,8 @@ main { margin-bottom: 8px; } .kuiLocalSearchInput { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1742,8 +949,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - flex: 1 1 100%; + flex: 1 1 100%; border-color: #FCFEFF; border-color: #293847; border-radius: 4px 0 0 4px; } @@ -1766,33 +972,22 @@ main { border-radius: 0; border-left-width: 0; } -/** - * 1. em used for right padding so documentation link and query string - * won't overlap if the user increases their default browser font size - * This is sized for the 'Options' link - */ .kuiLocalSearchInput, .kuiLocalSearchAssistedInput__input { padding-right: 6em; - /* 1 */ } + } -/** - * 1. Vertically center the assistance, regardless of its height. - */ .kuiLocalSearchAssistedInput__assistance { position: absolute; right: 6px; top: 50%; - /* 1 */ - z-index: 2; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - /* 1 */ } + z-index: 2; + transform: translateY(-50%); + } .kuiLocalSearchSelect { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1803,16 +998,12 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-right: 30px; - /* 2 */ - background-image: url('data:image/svg+xml;utf8,'); - /* 1 */ - background-size: 14px; + padding-right: 30px; + background-image: url('data:image/svg+xml;utf8,'); + background-size: 14px; background-repeat: no-repeat; background-position: calc(100% - 8px); - /* 2 */ - border-left-width: 0; + border-left-width: 0; border-radius: 0; } .kuiLocalSearchSelect:invalid { border-color: #F66; } @@ -1824,40 +1015,28 @@ main { cursor: not-allowed; } .kuiLocalSearchSelect:-moz-focusring { text-shadow: 0 0 0; - /* 3 */ } + } -/** - * 1. Override inherited styles. - */ .kuiLocalSearchButton { width: 43px; height: 32px; font-size: 16px; line-height: 0; - /* 1 */ - color: #FCFEFF; + color: #FCFEFF; background-color: #159D8D; border: 0; border-radius: 0 4px 4px 0; } .kuiLocalSearchButton:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; + } -/** - * 1. We want the bottom border on selected tabs to be flush with the bottom of the container. - */ .kuiLocalTabs { display: flex; align-items: flex-end; height: 100%; } -/** - * 1. Override inherited typographic styles. - */ .kuiLocalTab { padding: 5px 0 6px; font-size: 18px; @@ -1866,13 +1045,8 @@ main { text-decoration: none; cursor: pointer; margin-top: 0 !important; - /* 1 */ - margin-bottom: 0 !important; - /* 1 */ - /** - * 1. We may want to show a tooltip to explain why the tab is disabled, so we will just show - * a regular cursor instead of setting pointer-events: none. - */ } + margin-bottom: 0 !important; + } .kuiLocalTab:hover:not(.kuiLocalTab-isDisabled), .kuiLocalTab:active:not(.kuiLocalTab-isDisabled) { color: #159D8D; } .kuiLocalTab.kuiLocalTab-isSelected { @@ -1882,7 +1056,7 @@ main { .kuiLocalTab.kuiLocalTab-isDisabled { opacity: 0.5; cursor: default; - /* 1 */ } + } .kuiLocalTab + .kuiLocalTab { margin-left: 15px; } @@ -1900,22 +1074,19 @@ main { padding: 0; display: none; } -/** - * 1. Put 10px of space between each child. - */ .kuiPager { display: flex; align-items: center; } .kuiPager > * + * { margin-left: 10px; - /* 1 */ } + } .kuiPagerText { font-size: 16px; line-height: 1.5; color: #8D98A3; white-space: nowrap; - /* 1 */ } + } .kuiPanel { box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.3), 0 1px 5px -2px rgba(0, 0, 0, 0.3); @@ -1951,62 +1122,44 @@ main { align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 50px; border-bottom: 1px solid #293847; } .kuiPanelHeader .kuiButton:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; + } a.kuiPanelHeader .kuiButton:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; + } .kuiPanelHeader .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #293847, 0 0 0 2px #F66; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #293847, 0 0 0 2px #F66; + } a.kuiPanelHeader .kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #293847, 0 0 0 2px #F66; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #293847, 0 0 0 2px #F66; + } .kuiPanelHeader .kuiSelect { border-color: #0e1721; } .kuiPanelHeader .kuiSelect:not(a):enabled:focus { outline: none; border-color: #159D8D; } a.kuiPanelHeader .kuiSelect:not(.kuiButton-isDisabled):focus { - /* 1 */ - outline: none; + outline: none; border-color: #159D8D; } -/** - * 1. This way we can use h1, h2, etc. - */ .kuiPanelHeader__title { font-size: 20px; line-height: 1.5; margin: 0; - /* 1 */ } + } -/** - * 1. Undo what barSection mixin does. - */ .kuiPanelHeaderSection { display: flex; align-items: center; @@ -2015,26 +1168,24 @@ main { margin-right: 25px; } .kuiPanelHeaderSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiPanelHeaderSection:first-child { margin-left: 0; } .kuiPanelHeaderSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiPanelHeaderSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiPanelHeaderSection > * + * { margin-left: 10px; - /* 1 */ } + } .kuiPanelHeaderSection:only-child { margin-left: 0; - /* 1 */ - margin-right: auto; - /* 1 */ } + margin-right: auto; + } .kuiPanelBody { padding: 10px; } @@ -2069,98 +1220,63 @@ main { .kuiStatusText--error { color: #F66; } -/** - * 1. Set the image to be the same size as a font icon at 14px. - * 2. We need to cap the height too, in case the icon was designed thin and tall. - */ .kuiStatusText__icon { margin-right: 6px; width: 1.15em; - /* 1 */ - max-height: 1.15em; - /* 2 */ } + max-height: 1.15em; + } -/** - * 1. Make seamless transition from ToolBar to Table header and contained Menu. - * 1. Make seamless transition from Table to ToolBarFooter header. - */ .kuiControlledTable { background: #0A121A; } .kuiControlledTable .kuiTable { border-top: none; - /* 1 */ } + } .kuiControlledTable .kuiToolBarFooter { border-top: none; - /* 2 */ } + } .kuiControlledTable .kuiMenu--contained { border-top: none; - /* 1 */ } + } -/** - * 1. Prevent cells from expanding based on content size. This substitutes for table-layout: fixed. - */ -/** - * NOTE: table-layout: fixed causes a bug in IE11 and Edge (see #9929). It also prevents us from - * specifying a column width, e.g. the checkbox column. - */ .kuiTable { width: 100%; border: 1px solid #293847; border-collapse: collapse; background-color: #0A121A; } -/** - * 1. Allow contents of cells to determine table's width. - */ .kuiTable--fluid { width: auto; - /* 1 */ } + } .kuiTable--fluid .kuiTableHeaderCell, .kuiTable--fluid .kuiTableRowCell { max-width: none; - /* 1 */ } + } .kuiTableHeaderCell { font-size: 16px; font-weight: 400; text-align: left; max-width: 20px; - /* 1 */ - line-height: 1.5; + line-height: 1.5; color: #8D98A3; } .kuiTableHeaderCell__liner { display: inline-block; padding: 7px 8px 8px; } -/** - * 1. Prevent rapid clicking from selecting text. - * 2. Remove native button element styles. - * 3. Make buttons look and behave like table header cells. - */ .kuiTableHeaderCellButton { - -webkit-user-select: none; - user-select: none; - /* 1 */ - cursor: pointer; + user-select: none; + cursor: pointer; width: 100%; - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: 0; - /* 2 */ - padding: 0; - /* 2 */ - color: inherit; - /* 3 */ - line-height: inherit; - /* 3 */ - font-size: inherit; - /* 3 */ - text-align: inherit; - /* 3 */ } + appearance: none; + background-color: transparent; + border: 0; + padding: 0; + color: inherit; + line-height: inherit; + font-size: inherit; + text-align: inherit; + } .kuiTableHeaderCellButton:hover .kuiTableSortIcon { display: block; opacity: 1; } @@ -2190,31 +1306,20 @@ main { font-weight: 400; text-align: left; max-width: 20px; - /* 1 */ - color: #DFE5EF; + color: #DFE5EF; border-top: 1px solid #293847; vertical-align: middle; } -/** - * 1. Vertically align all children. - * 2. The padding on this div allows the ellipsis to show if the content is truncated. If - * the padding was on the cell, the ellipsis would be cropped. - * 3. Truncate content with an ellipsis. - */ .kuiTableRowCell__liner { padding: 7px 8px 8px; - /* 2 */ - line-height: 1.5; - /* 1 */ - overflow: hidden; - /* 3 */ - text-overflow: ellipsis; - /* 3 */ - white-space: nowrap; - /* 3 */ } + line-height: 1.5; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } .kuiTableRowCell__liner > * { vertical-align: middle; - /* 1 */ } + } .kuiTableRowCell--wrap .kuiTableRowCell__liner { white-space: normal; } @@ -2223,34 +1328,24 @@ main { overflow: visible; white-space: normal; } -/** - * 1. We don't want to create too strong a disconnect between the original row and the row - * that contains its expanded details. - */ .kuiTableRowCell--expanded { border-top-color: #0A121A; - /* 1 */ } + } .kuiTableRowCell--alignRight { text-align: right; } .kuiTableRowCell--alignRight .kuiTableRowCell__liner { text-align: right; } -/** - * 1. Rendered width of cell with checkbox inside of it. - * 2. Align checkbox with text in other cells. - * 3. Show the checkbox in Edge; otherwise it gets cropped. - */ .kuiTableHeaderCell--checkBox, .kuiTableRowCell--checkBox { width: 28px; - /* 1 */ - line-height: 1; - /* 2 */ } + line-height: 1; + } .kuiTableHeaderCell--checkBox .kuiTableRowCell__liner, .kuiTableRowCell--checkBox .kuiTableRowCell__liner { overflow: visible; - /* 3 */ } + } .kuiTableHeaderCell--checkBox .kuiTableHeaderCell__liner, .kuiTableHeaderCell--checkBox .kuiTableRowCell__liner, .kuiTableRowCell--checkBox .kuiTableHeaderCell__liner, @@ -2267,41 +1362,29 @@ main { display: flex; border-bottom: 1px solid #293847; } -/** - * 1. Override button styles (some of which are from Bootstrap). - * 2. Adding a border shifts tabs right by 1px, so we need to shift them back. - * 3. Move the tab down so that its bottom border covers the container's bottom border. - * 4. When the tab is focused, its bottom border changes to be 1px, so we need to add 1px more - * of padding to make sure the text doesn't shift down. - */ .kuiTab { - -webkit-appearance: none; - appearance: none; - /* 1 */ - cursor: pointer; + appearance: none; + cursor: pointer; padding: 10px 30px; font-size: 16px; color: #8D98A3; background-color: transparent; - /* 1 */ - border: 1px solid #293847; + border: 1px solid #293847; border-radius: 0; - /* 1 */ - margin-bottom: -1px; - /* 3 */ } + margin-bottom: -1px; + } .kuiTab + .kuiTab { border-left: none; } .kuiTab + .kuiTab:focus:not(.kuiTab-isSelected):not(:active) { margin-left: -1px; - /* 2 */ } + } .kuiTab:active { outline: none !important; - /* 1 */ - box-shadow: none; - /* 1 */ } + box-shadow: none; + } .kuiTab:focus { outline: none; - /* 1 */ } + } .kuiTab:focus:not(.kuiTab-isSelected):not(:active) { z-index: 1; color: #159D8D; @@ -2320,49 +1403,37 @@ main { align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 50px; background-color: transparent; border: solid 1px #293847; } .kuiToolBar .kuiButton:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; + } a.kuiToolBar .kuiButton:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #293847, 0 0 0 2px #159D8D; + } .kuiToolBar .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #293847, 0 0 0 2px #F66; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #293847, 0 0 0 2px #F66; + } a.kuiToolBar .kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #293847, 0 0 0 2px #F66; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #293847, 0 0 0 2px #F66; + } .kuiToolBar .kuiSelect { border-color: #0e1721; } .kuiToolBar .kuiSelect:not(a):enabled:focus { outline: none; border-color: #159D8D; } a.kuiToolBar .kuiSelect:not(.kuiButton-isDisabled):focus { - /* 1 */ - outline: none; + outline: none; border-color: #159D8D; } .kuiToolBarSection { @@ -2373,36 +1444,31 @@ main { margin-right: 25px; } .kuiToolBarSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiToolBarSection:first-child { margin-left: 0; } .kuiToolBarSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiToolBarSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiToolBarSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Override Bar styles and put Search on the left side. - */ .kuiToolBar--searchOnly .kuiToolBarSearch { margin-left: 0 !important; - /* 1 */ } + } .kuiToolBarFooter { display: flex; align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 40px; background-color: #0A121A; } @@ -2414,27 +1480,21 @@ main { margin-right: 25px; } .kuiToolBarFooterSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiToolBarFooterSection:first-child { margin-left: 0; } .kuiToolBarFooterSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiToolBarFooterSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiToolBarFooterSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Put 10px of space between each child. - * 2. Fix IE11 bug which causes this item to grow too wide when there is only a single - * kuiToolBarSection sibling. - */ .kuiToolBarSearch { display: flex; align-items: center; @@ -2442,15 +1502,14 @@ main { margin-right: 25px; flex: 1 1 auto; max-width: 100%; - /* 2 */ - line-height: 1.5; } + line-height: 1.5; } .kuiToolBarSearch:first-child { margin-left: 0; } .kuiToolBarSearch:last-child { margin-right: 0; } .kuiToolBarSearch > * + * { margin-left: 10px; - /* 1 */ } + } .kuiToolBarSearchBox { flex: 1 1 auto; @@ -2465,85 +1524,55 @@ main { font-size: 1em; color: #acacac; } -/** - * 1. Fix inherited styles (possibly from Bootstrap). - */ .kuiToolBarSearchBox__input { width: 100%; min-width: 200px; padding: 4px 12px 5px 28px; - font-family: "var(--font-text)"; - /* 1 */ - background-color: #0A121A; + font-family: var(--font-text); + background-color: #0A121A; color: #DFE5EF; border-radius: 4px; font-size: 1em; border: 1px solid #293847; line-height: normal; - /* 1 */ - transition: border-color 0.1s linear; } + transition: border-color 0.1s linear; } .kuiToolBarSearchBox__input:focus { outline: none; border-color: #159D8D; } -/* - * 1. We don't want the text to take up two lines and overflow the ToolBar. - */ .kuiToolBarText { font-size: 16px; line-height: 1.5; color: #8D98A3; white-space: nowrap; - /* 1 */ } + } -/** - * 1. Override h1. - */ .kuiTitle { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - font-size: 24px; } + font-weight: 400; + font-size: 24px; } -/** - * 1. Override h2, h3, etc. - */ .kuiSubTitle { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - font-size: 20px; } + font-weight: 400; + font-size: 20px; } -/** - * 1. Override p. - */ .kuiTextTitle { margin: 0; - /* 1 */ - font-weight: 700; - /* 1 */ - line-height: 1.5; + font-weight: 700; + line-height: 1.5; font-size: 16px; } -/** - * 1. Override p. - */ .kuiText { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - line-height: 1.5; + font-weight: 400; + line-height: 1.5; font-size: 16px; } .kuiSubText { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - line-height: 1.5; + font-weight: 400; + line-height: 1.5; font-size: 14px; } .kuiSubduedText { diff --git a/packages/osd-ui-framework/dist/kui_next_light.css b/packages/osd-ui-framework/dist/kui_next_light.css index 80b31588660e..b6952eb159bb 100644 --- a/packages/osd-ui-framework/dist/kui_next_light.css +++ b/packages/osd-ui-framework/dist/kui_next_light.css @@ -8,543 +8,17 @@ * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/** - * 1. Focus rings shouldn't be visible on scrollable regions, but a11y requires them to be focusable. - * Browser's supporting `:focus-visible` will still show outline on keyboard focus only. - * Others like Safari, won't show anything at all. - * 2. Force the `:focus-visible` when the `tabindex=0` (is tabbable) - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/*! - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ -/* OUI -> EUI Aliases */ -/* End of Aliases */ -/** - * 1. Enforce pointer when there's no href. - * 2. Allow these styles to be applied to a button element. - */ -/** - * 1. Override Bootstrap styles. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :disabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * 1. Links can't have a disabled attribute, so they can't support :enabled. - */ -/** - * Nothing fancy, just the basics so we can use this for both regular and static controls. - */ -/** - * 1. Prevent Firefox users from being able to resize textareas to smaller than the min-height. - */ -/** - * We specifically don't include Angular's ng-${state} classes here because we don't want to be tightly - * coupled with Angular. - */ -/** - * 1. Embedded SVG of fa-caret-down - * (https://github.com/encharm/Font-Awesome-SVG-PNG/blob/master/black/svg/caret-down.svg). - * 2. Make room on right side for the caret. - * 3. Prevent Firefox from showing dotted line around text on focus. - */ -/** - * 1. Setting to inline-block guarantees the same height when applied to both - * button elements and anchor tags. - * 2. Fit MicroButton inside of Table rows without pushing them taller. - */ -/** - * 1. Give Bar a consistent height for when it contains shorter children, and therefore can't - * depend on them to give it the desired height. - */ -/** - * 1. Put 10px of space between each child. - * 2. If there is only one section, align it to the right. If you wanted it aligned right, you - * wouldn't use the Bar in the first place. - * 3. Children in the middle should center their content. - * 4. Fix an IE bug which causes the last child to overflow the container. - * 5. Fixing this bug means we now need to align the children to the right. - */ -/** - * 1. Required for IE11. - */ + main { display: block; - /* 1 */ } + } .kuiBar { display: flex; align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ } + } .kuiBarSection { display: flex; @@ -554,33 +28,24 @@ main { margin-right: 25px; } .kuiBarSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiBarSection:first-child { margin-left: 0; } .kuiBarSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiBarSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiBarSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Setting to inline-block guarantees the same height when applied to both - * button elements and anchor tags. - * 2. Links can be focused when they're "disabled" (since we're just faking this with a class), but - * at least make them look like they're not focused. - */ .kuiButton { display: inline-block; - /* 1 */ - -webkit-appearance: none; - appearance: none; + appearance: none; cursor: pointer; padding: 4px 12px 5px; font-size: 16px; @@ -597,21 +62,14 @@ main { cursor: not-allowed; opacity: 0.5; } .kuiButton:enabled:active { - -webkit-transform: translateY(1px); - transform: translateY(1px); } + transform: translateY(1px); } a.kuiButton:not(.kuiButton-isDisabled):active { - /* 1 */ - -webkit-transform: translateY(1px); - transform: translateY(1px); } + transform: translateY(1px); } -/** - * 1. Solves whitespace problems introduced by inline elements. - */ .kuiButton__inner { display: flex; - /* 1 */ - align-items: center; - /* 1 */ } + align-items: center; + } .kuiButton--small { font-size: 12px; @@ -634,122 +92,85 @@ main { .kuiButton--iconText.kuiButton--small .kuiButton__icon:last-child:not(:only-child) { margin-left: 4px; } -/** - * 1. Override Bootstrap. - */ .kuiButton--basic { color: #343741; background-color: #F5F7FA; } .kuiButton--basic:not(a):enabled:focus { color: #343741; } a.kuiButton--basic:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #343741; } + color: #343741; } .kuiButton--basic:enabled:hover { background-color: #d3dce9 !important; - /* 1 */ } + } a.kuiButton--basic:not(.kuiButton-isDisabled):hover { - /* 1 */ - background-color: #d3dce9 !important; - /* 1 */ } + background-color: #d3dce9 !important; + } .kuiButton--basic:enabled:active { background-color: #d3dce9 !important; - /* 1 */ } + } a.kuiButton--basic:not(.kuiButton-isDisabled):active { - /* 1 */ - background-color: #d3dce9 !important; - /* 1 */ } + background-color: #d3dce9 !important; + } -/** - * 1. Override Bootstrap. - */ .kuiButton--primary { color: #FFF; background-color: #006BB4; } .kuiButton--primary:not(a):enabled:focus { color: #FFF; } a.kuiButton--primary:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #FFF; } + color: #FFF; } .kuiButton--primary:enabled:hover { color: #FFF !important; - /* 1 */ - background-color: #004d81; } + background-color: #004d81; } a.kuiButton--primary:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #004d81; } + color: #FFF !important; + background-color: #004d81; } .kuiButton--primary:enabled:active { color: #FFF !important; - /* 1 */ - background-color: #004d81; } + background-color: #004d81; } a.kuiButton--primary:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #004d81; } + color: #FFF !important; + background-color: #004d81; } -/** - * 1. Override Bootstrap. - */ .kuiButton--success { color: #FFF; background-color: #017D73; } .kuiButton--success:not(a):enabled:focus { color: #FFF; } a.kuiButton--success:not(.kuiButton-isDisabled):focus { - /* 1 */ - color: #FFF; } + color: #FFF; } .kuiButton--success:enabled:hover { color: #FFF !important; - /* 1 */ - background-color: #014a44; } + background-color: #014a44; } a.kuiButton--success:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #014a44; } + color: #FFF !important; + background-color: #014a44; } .kuiButton--success:enabled:active { color: #FFF !important; - /* 1 */ - background-color: #014a44; } + background-color: #014a44; } a.kuiButton--success:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #014a44; } + color: #FFF !important; + background-color: #014a44; } -/** - * 1. Override Bootstrap. - */ .kuiButton--danger { color: #BD271E; border: solid 1px #BD271E; } .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #BD271E; - /* 3 */ - color: #BD271E; } + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #BD271E; + color: #BD271E; } a.kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #BD271E; - /* 3 */ - color: #BD271E; } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #BD271E; + color: #BD271E; } .kuiButton--danger:enabled:hover { color: #911e17 !important; border: solid 1px #911e17; background-color: rgba(189, 39, 30, 0.1); } a.kuiButton--danger:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #911e17 !important; + color: #911e17 !important; border: solid 1px #911e17; background-color: rgba(189, 39, 30, 0.1); } .kuiButton--danger:enabled:active { @@ -757,112 +178,77 @@ main { border: solid 1px #911e17; background-color: rgba(189, 39, 30, 0.1); } a.kuiButton--danger:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #911e17 !important; + color: #911e17 !important; border: solid 1px #911e17; background-color: rgba(189, 39, 30, 0.1); } -/** - * 1. Override Bootstrap. - */ .kuiButton--warning { color: #FFF; background-color: #F5A700; } .kuiButton--warning:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #F5A700; - /* 3 */ - color: #FFF; } + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #F5A700; + color: #FFF; } a.kuiButton--warning:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #F5A700; - /* 3 */ - color: #FFF; } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #F5A700; + color: #FFF; } .kuiButton--warning:enabled:hover { color: #FFF !important; - /* 1 */ - background-color: #c28400; } + background-color: #c28400; } a.kuiButton--warning:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #c28400; } + color: #FFF !important; + background-color: #c28400; } .kuiButton--warning:enabled:active { color: #FFF !important; - /* 1 */ - background-color: #c28400; } + background-color: #c28400; } a.kuiButton--warning:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #FFF !important; - /* 1 */ - background-color: #c28400; } + color: #FFF !important; + background-color: #c28400; } .kuiButton--warning:disabled { background-color: #ffbb29; } a.kuiButton--warning.kuiButton-isDisabled { background-color: #ffbb29; } -/** - * 1. Override Bootstrap. - * 2. Override either Bootstrap or Timeline styles. - */ .kuiButton--hollow { color: #006BB4 !important; - /* 2 */ - background-color: transparent; } + background-color: transparent; } .kuiButton--hollow:enabled:hover { color: #004d81 !important; - /* 1 */ - text-decoration: underline; } + text-decoration: underline; } a.kuiButton--hollow:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #004d81 !important; - /* 1 */ - text-decoration: underline; } + color: #004d81 !important; + text-decoration: underline; } .kuiButton--hollow:enabled:active { color: #004d81 !important; - /* 1 */ - text-decoration: underline; } + text-decoration: underline; } a.kuiButton--hollow:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #004d81 !important; - /* 1 */ - text-decoration: underline; } + color: #004d81 !important; + text-decoration: underline; } .kuiButton--secondary { color: #006BB4 !important; - /* 2 */ - border: solid 1px #006BB4; } + border: solid 1px #006BB4; } .kuiButton--secondary:enabled:hover { color: #004d81 !important; - /* 1 */ - border: solid 1px #004d81; + border: solid 1px #004d81; background-color: rgba(0, 107, 180, 0.1); text-decoration: underline; } a.kuiButton--secondary:not(.kuiButton-isDisabled):hover { - /* 1 */ - color: #004d81 !important; - /* 1 */ - border: solid 1px #004d81; + color: #004d81 !important; + border: solid 1px #004d81; background-color: rgba(0, 107, 180, 0.1); text-decoration: underline; } .kuiButton--secondary:enabled:active { color: #004d81 !important; - /* 1 */ - border: solid 1px #004d81; + border: solid 1px #004d81; background-color: rgba(0, 107, 180, 0.1); text-decoration: underline; } a.kuiButton--secondary:not(.kuiButton-isDisabled):active { - /* 1 */ - color: #004d81 !important; - /* 1 */ - border: solid 1px #004d81; + color: #004d81 !important; + border: solid 1px #004d81; background-color: rgba(0, 107, 180, 0.1); text-decoration: underline; } @@ -900,66 +286,42 @@ main { display: inline-block; } .kuiCollapseButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; padding: 4px; border: none; line-height: 1; font-size: 16px; color: #343741 !important; - /* 1 */ - cursor: pointer; + cursor: pointer; opacity: 0.35; } .kuiCollapseButton:hover { opacity: 1; } -/** - * 1. Set inline-block so this wrapper shrinks to fit the input. - */ .kuiAssistedInput { display: inline-block; - /* 1 */ - position: relative; } + position: relative; } -/** - * 1. Vertically center the assistance, regardless of its height. - */ .kuiAssistedInput__assistance { position: absolute; right: 12px; top: 50%; - /* 1 */ - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - /* 1 */ } - -/** - * 1. Deliberately disable only webkit appearance. If we disable it in Firefox, we get a really - * ugly default appearance which we can't customize, so our best option is to give Firefox - * control over the checkbox's appearance. - * 2. Override default styles (possibly from Bootstrap). - */ + transform: translateY(-50%); + } + .kuiCheckBox { - -webkit-appearance: none; - appearance: none; - /* 1 */ - background-color: #fbfcfd; + appearance: none; + background-color: #fbfcfd; border: 1px solid rgba(15, 39, 118, 0.1); border-radius: 4px; width: 16px; height: 16px; - font: "var(--font-text)" !important; - /* 2 */ - line-height: 1.5 !important; - /* 2 */ - margin: 0 !important; - /* 2 */ - font-family: "var(--font-text)" !important; - /* 2 */ - font-size: 10px !important; - /* 2 */ - transition: background-color 0.1s linear; } + font: var(--font-text) !important; + line-height: 1.5 !important; + margin: 0 !important; + font-family: var(--font-text) !important; + font-size: 10px !important; + transition: background-color 0.1s linear; } .kuiCheckBox::before { position: relative; left: 0.25em; @@ -976,11 +338,9 @@ main { opacity: 1; } .kuiCheckBox:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #006BB4; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #006BB4; + } .kuiCheckBox:disabled { background-color: #eef2f7 !important; border-color: #eef2f7 !important; @@ -996,15 +356,12 @@ main { font-size: 16px; margin-left: 8px; } -/** - * 1. Override Bootstrap. - */ .kuiLabel { font-size: 16px; line-height: 1.5; font-weight: bold; margin-bottom: 0; - /* 1 */ } + } .kuiSearchInput { width: 180px; @@ -1022,14 +379,9 @@ main { font-size: 1em; color: #98A2B3; } -/** - * 1. Make space for search icon. - * 2. Expand to fill container. - */ .kuiSearchInput__input { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1040,11 +392,9 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-left: 28px; - /* 1 */ - width: 100%; - /* 2 */ } + padding-left: 28px; + width: 100%; + } .kuiSearchInput__input:invalid { border-color: #BD271E; } .kuiSearchInput__input:focus { @@ -1060,13 +410,9 @@ main { .kuiSearchInput--large { width: 400px; } -/** - * Avoid setting a width here, so that the width of the options can dynamically set the width. - */ .kuiSelect { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1077,15 +423,12 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-right: 30px; - /* 2 */ - background-image: url('data:image/svg+xml;utf8,'); - /* 1 */ - background-size: 14px; + padding-right: 30px; + background-image: url('data:image/svg+xml;utf8,'); + background-size: 14px; background-repeat: no-repeat; background-position: calc(100% - 8px); - /* 2 */ } + } .kuiSelect:invalid { border-color: #BD271E; } .kuiSelect:focus { @@ -1096,7 +439,7 @@ main { cursor: not-allowed; } .kuiSelect:-moz-focusring { text-shadow: 0 0 0; - /* 3 */ } + } .kuiSelect.kuiSelect-isInvalid { border-color: #BD271E; } .kuiSelect:focus { @@ -1113,28 +456,22 @@ main { .kuiSelect--large { width: 400px; } -/** - * 1. Have the same spatial footprint as the regular input. - */ .kuiStaticInput { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; line-height: 1.5; color: #343741; border: 1px solid transparent; - /* 1 */ - background-color: transparent; } + background-color: transparent; } .kuiTextArea { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1145,7 +482,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ } + } .kuiTextArea:invalid { border-color: #BD271E; } .kuiTextArea:focus { @@ -1172,9 +509,8 @@ main { .kuiTextInput { width: 180px; - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1185,7 +521,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ } + } .kuiTextInput:invalid { border-color: #BD271E; } .kuiTextInput:focus { @@ -1203,13 +539,10 @@ main { .kuiTextInput--large { width: 400px; } -/** - * 1. We may want to put elements in here which have different heights. - */ .kuiFieldGroup { display: flex; align-items: center; - /* 1 */ } + } .kuiFieldGroup--alignTop { align-items: flex-start; } @@ -1224,23 +557,14 @@ main { .kuiFieldGroupSection--wide > * { width: 100%; } -/** - * 1. Copied from FontAwesome's .fa class. We use a custom class to make it easier to migrate away - * from FontAwesome someday. When we do migrate away, we can just update this definition. - */ .kuiIcon { display: inline-block; - /* 1 */ - font: normal normal normal 14px/1 FontAwesome, sans-serif; - /* 1 */ - font-size: inherit; - /* 1 */ - text-rendering: auto; - /* 1 */ - -webkit-font-smoothing: antialiased; - /* 1 */ - -moz-osx-font-smoothing: grayscale; - /* 1 */ } + font: normal normal normal 14px/1 FontAwesome, sans-serif; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } .kuiIcon--info { color: #006BB4; } @@ -1265,41 +589,26 @@ main { line-height: 1.5; border: 2px solid; } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--info { border-color: rgba(0, 107, 180, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--success { border-color: rgba(1, 125, 115, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--warning { border-color: rgba(245, 167, 0, 0.25); - /* 1 */ } + } -/** - * 1. TODO: Pick a hex value instead of making these colors translucent. - */ .kuiInfoPanel--error { border-color: rgba(189, 39, 30, 0.25); - /* 1 */ } + } -/** - * 1. Align with first line of title text if it wraps. - */ .kuiInfoPanelHeader { display: flex; align-items: baseline; - /* 1 */ } + } .kuiInfoPanelHeader__icon { margin-right: 10px; @@ -1324,34 +633,23 @@ main { color: #006BB4; text-decoration: none; cursor: pointer; - /* 1 */ - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: none; - /* 2 */ - font-size: inherit; - /* 2 */ - line-height: inherit; - /* 2 */ } + appearance: none; + background-color: transparent; + border: none; + font-size: inherit; + line-height: inherit; + } .kuiLink:visited, .kuiLink:active { color: #006BB4; } .kuiLink:hover { color: #004d81; text-decoration: underline; } -/** - * 1. Breadcrumbs are placed in the top-left corner and need to be bumped over - * a bit. - */ .kuiLocalBreadcrumbs { display: flex; align-items: center; padding: 12px 8px; - /* 1 */ - border-bottom: 1px solid #D3DAE6; + border-bottom: 1px solid #D3DAE6; flex-grow: 1; flex-basis: 100%; background-color: #FFF; } @@ -1364,33 +662,21 @@ main { margin-left: 6px; } .kuiLocalBreadcrumb + .kuiLocalBreadcrumb::before { content: "/"; - -webkit-user-select: none; - user-select: none; + user-select: none; margin-right: 4px; color: #D3DAE6; } -/** - * 1. Make it a bit darker to contrast with the gray background. - */ .kuiLocalBreadcrumb__link { color: #006BB4; text-decoration: none; cursor: pointer; - /* 1 */ - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: none; - /* 2 */ - font-size: inherit; - /* 2 */ - line-height: inherit; - /* 2 */ - color: #006BB4; - /* 1 */ - font-size: 16px; } + appearance: none; + background-color: transparent; + border: none; + font-size: inherit; + line-height: inherit; + color: #006BB4; + font-size: 16px; } .kuiLocalBreadcrumb__link:visited, .kuiLocalBreadcrumb__link:active { color: #006BB4; } .kuiLocalBreadcrumb__link:hover { @@ -1415,12 +701,8 @@ main { justify-content: space-between; margin-bottom: 4px; } -/** - * 1. Override inherited styles. - */ .kuiDatePickerNavigationButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; border: none; font-size: 14px; @@ -1433,13 +715,10 @@ main { background-color: #006BB4; } .kuiDatePickerNavigationButton:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4; - /* 3 */ - color: #343741; - /* 1 */ } + outline: none !important; + box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4; + color: #343741; + } .kuiDatePickerHeaderCell { padding: 9px 0; @@ -1452,22 +731,14 @@ main { .kuiDatePickerRowCell { padding: 0; text-align: center; - /** - * This state class exists to support weird angular-bootstrap datepicker functionality, - * in which you can't select a day on the "From" calendar if it falls after the selected day in - * the "To" calendar (and vice versa, you can't select a "To" day if it is before the "From" day). - */ } + } .kuiDatePickerRowCell.kuiDatePickerRowCell-isBlocked { cursor: not-allowed; } .kuiDatePickerRowCell.kuiDatePickerRowCell-isBlocked .kuiDatePickerRowCellContent { pointer-events: none; } -/** - * 1. Override inherited styles. - */ .kuiDatePickerRowCellContent { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; width: 100%; border: 1px solid transparent; @@ -1478,13 +749,10 @@ main { line-height: 1.2; } .kuiDatePickerRowCellContent:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4; - /* 3 */ - color: #343741; - /* 1 */ } + outline: none !important; + box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4; + color: #343741; + } .kuiDatePickerRowCellContent:disabled { pointer-events: none; opacity: 0.5; } @@ -1509,16 +777,14 @@ main { line-height: 20px; } .kuiLocalDropdownCloseButton { - -webkit-appearance: none; - appearance: none; + appearance: none; background-color: transparent; padding: 4px; border: none; line-height: 1; font-size: 16px; color: #343741 !important; - /* 1 */ - cursor: pointer; + cursor: pointer; opacity: 0.35; position: absolute; top: 1px; @@ -1538,13 +804,9 @@ main { .kuiLocalDropdownPanel--right { margin-left: 30px; } -/** - * 1. Override inherited styles. - */ .kuiLocalDropdownTitle { margin-top: 0; - /* 1 */ - margin-bottom: 12px; + margin-bottom: 12px; font-size: 18px; color: #343741; } @@ -1559,15 +821,11 @@ main { justify-content: space-between; margin-bottom: 6px; } -/** - * 1. Override inherited styles. - */ .kuiLocalDropdownHeader__label { font-size: 14px; font-weight: 700; margin-bottom: 0; - /* 1 */ - color: #343741; } + color: #343741; } .kuiLocalDropdownHeader__actions { display: flex; } @@ -1649,24 +907,16 @@ main { margin-right: 5px; margin-bottom: -1px; } -/** - * 1. Match height of logo in side bar, but allow it to expand to accommodate - * dropdown. - */ .kuiLocalNav { display: flex; flex-direction: column; justify-content: space-between; min-height: 69px; - /* 1 */ - color: #343741; + color: #343741; background-color: #FFF; line-height: 1.5; border-bottom: solid 1px #D3DAE6; } -/** - * 1. Allow row to expand if the content is so long that it wraps. - */ .kuiLocalNavRow { display: flex; align-items: stretch; @@ -1676,18 +926,10 @@ main { display: flex; align-items: stretch; } -/** - * 1. We make this row flex-start because it usually contains a search input, which may expand - * beyond the height of this container. We can't use `align-items: center`, because this would - * cause the search input to overflow both on the top and bottom; `align-items: flex-start` - * makes it only overflow on the bottom. But this means we need to manually center the content - * of this container using padding. - */ .kuiLocalNavRow--secondary { padding: 0 8px; - /* 1 */ - align-items: flex-start; - /* 1 */ } + align-items: flex-start; + } .kuiLocalSearch { display: flex; @@ -1695,9 +937,8 @@ main { margin-bottom: 8px; } .kuiLocalSearchInput { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1708,8 +949,7 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - flex: 1 1 100%; + flex: 1 1 100%; border-color: #FFF; border-color: #D3DAE6; border-radius: 4px 0 0 4px; } @@ -1732,33 +972,22 @@ main { border-radius: 0; border-left-width: 0; } -/** - * 1. em used for right padding so documentation link and query string - * won't overlap if the user increases their default browser font size - * This is sized for the 'Options' link - */ .kuiLocalSearchInput, .kuiLocalSearchAssistedInput__input { padding-right: 6em; - /* 1 */ } + } -/** - * 1. Vertically center the assistance, regardless of its height. - */ .kuiLocalSearchAssistedInput__assistance { position: absolute; right: 6px; top: 50%; - /* 1 */ - z-index: 2; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - /* 1 */ } + z-index: 2; + transform: translateY(-50%); + } .kuiLocalSearchSelect { - -webkit-appearance: none; - appearance: none; - font-family: "var(--font-text)"; + appearance: none; + font-family: var(--font-text); padding: 4px 12px 4px; font-size: 16px; font-weight: 400; @@ -1769,16 +998,12 @@ main { border-radius: 4px; transition: border-color 0.1s linear; min-height: 32px; - /* 1 */ - padding-right: 30px; - /* 2 */ - background-image: url('data:image/svg+xml;utf8,'); - /* 1 */ - background-size: 14px; + padding-right: 30px; + background-image: url('data:image/svg+xml;utf8,'); + background-size: 14px; background-repeat: no-repeat; background-position: calc(100% - 8px); - /* 2 */ - border-left-width: 0; + border-left-width: 0; border-radius: 0; } .kuiLocalSearchSelect:invalid { border-color: #BD271E; } @@ -1790,40 +1015,28 @@ main { cursor: not-allowed; } .kuiLocalSearchSelect:-moz-focusring { text-shadow: 0 0 0; - /* 3 */ } + } -/** - * 1. Override inherited styles. - */ .kuiLocalSearchButton { width: 43px; height: 32px; font-size: 16px; line-height: 0; - /* 1 */ - color: #FFF; + color: #FFF; background-color: #006BB4; border: 0; border-radius: 0 4px 4px 0; } .kuiLocalSearchButton:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } -/** - * 1. We want the bottom border on selected tabs to be flush with the bottom of the container. - */ .kuiLocalTabs { display: flex; align-items: flex-end; height: 100%; } -/** - * 1. Override inherited typographic styles. - */ .kuiLocalTab { padding: 5px 0 6px; font-size: 18px; @@ -1832,13 +1045,8 @@ main { text-decoration: none; cursor: pointer; margin-top: 0 !important; - /* 1 */ - margin-bottom: 0 !important; - /* 1 */ - /** - * 1. We may want to show a tooltip to explain why the tab is disabled, so we will just show - * a regular cursor instead of setting pointer-events: none. - */ } + margin-bottom: 0 !important; + } .kuiLocalTab:hover:not(.kuiLocalTab-isDisabled), .kuiLocalTab:active:not(.kuiLocalTab-isDisabled) { color: #006BB4; } .kuiLocalTab.kuiLocalTab-isSelected { @@ -1848,7 +1056,7 @@ main { .kuiLocalTab.kuiLocalTab-isDisabled { opacity: 0.5; cursor: default; - /* 1 */ } + } .kuiLocalTab + .kuiLocalTab { margin-left: 15px; } @@ -1866,22 +1074,19 @@ main { padding: 0; display: none; } -/** - * 1. Put 10px of space between each child. - */ .kuiPager { display: flex; align-items: center; } .kuiPager > * + * { margin-left: 10px; - /* 1 */ } + } .kuiPagerText { font-size: 16px; line-height: 1.5; color: #69707D; white-space: nowrap; - /* 1 */ } + } .kuiPanel { box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); @@ -1917,62 +1122,44 @@ main { align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 50px; border-bottom: 1px solid #D3DAE6; } .kuiPanelHeader .kuiButton:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } a.kuiPanelHeader .kuiButton:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } .kuiPanelHeader .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; + } a.kuiPanelHeader .kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; + } .kuiPanelHeader .kuiSelect { border-color: #fbfcfd; } .kuiPanelHeader .kuiSelect:not(a):enabled:focus { outline: none; border-color: #006BB4; } a.kuiPanelHeader .kuiSelect:not(.kuiButton-isDisabled):focus { - /* 1 */ - outline: none; + outline: none; border-color: #006BB4; } -/** - * 1. This way we can use h1, h2, etc. - */ .kuiPanelHeader__title { font-size: 20px; line-height: 1.5; margin: 0; - /* 1 */ } + } -/** - * 1. Undo what barSection mixin does. - */ .kuiPanelHeaderSection { display: flex; align-items: center; @@ -1981,26 +1168,24 @@ main { margin-right: 25px; } .kuiPanelHeaderSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiPanelHeaderSection:first-child { margin-left: 0; } .kuiPanelHeaderSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiPanelHeaderSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiPanelHeaderSection > * + * { margin-left: 10px; - /* 1 */ } + } .kuiPanelHeaderSection:only-child { margin-left: 0; - /* 1 */ - margin-right: auto; - /* 1 */ } + margin-right: auto; + } .kuiPanelBody { padding: 10px; } @@ -2035,98 +1220,63 @@ main { .kuiStatusText--error { color: #BD271E; } -/** - * 1. Set the image to be the same size as a font icon at 14px. - * 2. We need to cap the height too, in case the icon was designed thin and tall. - */ .kuiStatusText__icon { margin-right: 6px; width: 1.15em; - /* 1 */ - max-height: 1.15em; - /* 2 */ } + max-height: 1.15em; + } -/** - * 1. Make seamless transition from ToolBar to Table header and contained Menu. - * 1. Make seamless transition from Table to ToolBarFooter header. - */ .kuiControlledTable { background: #FFF; } .kuiControlledTable .kuiTable { border-top: none; - /* 1 */ } + } .kuiControlledTable .kuiToolBarFooter { border-top: none; - /* 2 */ } + } .kuiControlledTable .kuiMenu--contained { border-top: none; - /* 1 */ } + } -/** - * 1. Prevent cells from expanding based on content size. This substitutes for table-layout: fixed. - */ -/** - * NOTE: table-layout: fixed causes a bug in IE11 and Edge (see #9929). It also prevents us from - * specifying a column width, e.g. the checkbox column. - */ .kuiTable { width: 100%; border: 1px solid #D3DAE6; border-collapse: collapse; background-color: #FFF; } -/** - * 1. Allow contents of cells to determine table's width. - */ .kuiTable--fluid { width: auto; - /* 1 */ } + } .kuiTable--fluid .kuiTableHeaderCell, .kuiTable--fluid .kuiTableRowCell { max-width: none; - /* 1 */ } + } .kuiTableHeaderCell { font-size: 16px; font-weight: 400; text-align: left; max-width: 20px; - /* 1 */ - line-height: 1.5; + line-height: 1.5; color: #69707D; } .kuiTableHeaderCell__liner { display: inline-block; padding: 7px 8px 8px; } -/** - * 1. Prevent rapid clicking from selecting text. - * 2. Remove native button element styles. - * 3. Make buttons look and behave like table header cells. - */ .kuiTableHeaderCellButton { - -webkit-user-select: none; - user-select: none; - /* 1 */ - cursor: pointer; + user-select: none; + cursor: pointer; width: 100%; - -webkit-appearance: none; - appearance: none; - /* 2 */ - background-color: transparent; - /* 2 */ - border: 0; - /* 2 */ - padding: 0; - /* 2 */ - color: inherit; - /* 3 */ - line-height: inherit; - /* 3 */ - font-size: inherit; - /* 3 */ - text-align: inherit; - /* 3 */ } + appearance: none; + background-color: transparent; + border: 0; + padding: 0; + color: inherit; + line-height: inherit; + font-size: inherit; + text-align: inherit; + } .kuiTableHeaderCellButton:hover .kuiTableSortIcon { display: block; opacity: 1; } @@ -2156,31 +1306,20 @@ main { font-weight: 400; text-align: left; max-width: 20px; - /* 1 */ - color: #343741; + color: #343741; border-top: 1px solid #D3DAE6; vertical-align: middle; } -/** - * 1. Vertically align all children. - * 2. The padding on this div allows the ellipsis to show if the content is truncated. If - * the padding was on the cell, the ellipsis would be cropped. - * 3. Truncate content with an ellipsis. - */ .kuiTableRowCell__liner { padding: 7px 8px 8px; - /* 2 */ - line-height: 1.5; - /* 1 */ - overflow: hidden; - /* 3 */ - text-overflow: ellipsis; - /* 3 */ - white-space: nowrap; - /* 3 */ } + line-height: 1.5; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } .kuiTableRowCell__liner > * { vertical-align: middle; - /* 1 */ } + } .kuiTableRowCell--wrap .kuiTableRowCell__liner { white-space: normal; } @@ -2189,34 +1328,24 @@ main { overflow: visible; white-space: normal; } -/** - * 1. We don't want to create too strong a disconnect between the original row and the row - * that contains its expanded details. - */ .kuiTableRowCell--expanded { border-top-color: #FFF; - /* 1 */ } + } .kuiTableRowCell--alignRight { text-align: right; } .kuiTableRowCell--alignRight .kuiTableRowCell__liner { text-align: right; } -/** - * 1. Rendered width of cell with checkbox inside of it. - * 2. Align checkbox with text in other cells. - * 3. Show the checkbox in Edge; otherwise it gets cropped. - */ .kuiTableHeaderCell--checkBox, .kuiTableRowCell--checkBox { width: 28px; - /* 1 */ - line-height: 1; - /* 2 */ } + line-height: 1; + } .kuiTableHeaderCell--checkBox .kuiTableRowCell__liner, .kuiTableRowCell--checkBox .kuiTableRowCell__liner { overflow: visible; - /* 3 */ } + } .kuiTableHeaderCell--checkBox .kuiTableHeaderCell__liner, .kuiTableHeaderCell--checkBox .kuiTableRowCell__liner, .kuiTableRowCell--checkBox .kuiTableHeaderCell__liner, @@ -2233,41 +1362,29 @@ main { display: flex; border-bottom: 1px solid #D3DAE6; } -/** - * 1. Override button styles (some of which are from Bootstrap). - * 2. Adding a border shifts tabs right by 1px, so we need to shift them back. - * 3. Move the tab down so that its bottom border covers the container's bottom border. - * 4. When the tab is focused, its bottom border changes to be 1px, so we need to add 1px more - * of padding to make sure the text doesn't shift down. - */ .kuiTab { - -webkit-appearance: none; - appearance: none; - /* 1 */ - cursor: pointer; + appearance: none; + cursor: pointer; padding: 10px 30px; font-size: 16px; color: #69707D; background-color: transparent; - /* 1 */ - border: 1px solid #D3DAE6; + border: 1px solid #D3DAE6; border-radius: 0; - /* 1 */ - margin-bottom: -1px; - /* 3 */ } + margin-bottom: -1px; + } .kuiTab + .kuiTab { border-left: none; } .kuiTab + .kuiTab:focus:not(.kuiTab-isSelected):not(:active) { margin-left: -1px; - /* 2 */ } + } .kuiTab:active { outline: none !important; - /* 1 */ - box-shadow: none; - /* 1 */ } + box-shadow: none; + } .kuiTab:focus { outline: none; - /* 1 */ } + } .kuiTab:focus:not(.kuiTab-isSelected):not(:active) { z-index: 1; color: #006BB4; @@ -2286,49 +1403,37 @@ main { align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 50px; background-color: transparent; border: solid 1px #D3DAE6; } .kuiToolBar .kuiButton:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } a.kuiToolBar .kuiButton:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #006BB4; + } .kuiToolBar .kuiButton--danger:not(a):enabled:focus { z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; - /* 3 */ } + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; + } a.kuiToolBar .kuiButton--danger:not(.kuiButton-isDisabled):focus { - /* 1 */ - z-index: 1; - /* 1 */ - outline: none !important; - /* 2 */ - box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; - /* 3 */ } + z-index: 1; + outline: none !important; + box-shadow: 0 0 0 1px #D3DAE6, 0 0 0 2px #BD271E; + } .kuiToolBar .kuiSelect { border-color: #fbfcfd; } .kuiToolBar .kuiSelect:not(a):enabled:focus { outline: none; border-color: #006BB4; } a.kuiToolBar .kuiSelect:not(.kuiButton-isDisabled):focus { - /* 1 */ - outline: none; + outline: none; border-color: #006BB4; } .kuiToolBarSection { @@ -2339,36 +1444,31 @@ main { margin-right: 25px; } .kuiToolBarSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiToolBarSection:first-child { margin-left: 0; } .kuiToolBarSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiToolBarSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiToolBarSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Override Bar styles and put Search on the left side. - */ .kuiToolBar--searchOnly .kuiToolBarSearch { margin-left: 0 !important; - /* 1 */ } + } .kuiToolBarFooter { display: flex; align-items: center; justify-content: space-between; min-height: 30px; - /* 1 */ - padding: 10px; + padding: 10px; height: 40px; background-color: #FFF; } @@ -2380,27 +1480,21 @@ main { margin-right: 25px; } .kuiToolBarFooterSection:not(:first-child):not(:last-child):not(:only-child) { justify-content: center; - /* 3 */ } + } .kuiToolBarFooterSection:first-child { margin-left: 0; } .kuiToolBarFooterSection:last-child { margin-right: 0; flex: 0 1 auto; - /* 4 */ - justify-content: flex-end; - /* 5 */ } + justify-content: flex-end; + } .kuiToolBarFooterSection:only-child { margin-left: auto; - /* 2 */ } + } .kuiToolBarFooterSection > * + * { margin-left: 10px; - /* 1 */ } + } -/** - * 1. Put 10px of space between each child. - * 2. Fix IE11 bug which causes this item to grow too wide when there is only a single - * kuiToolBarSection sibling. - */ .kuiToolBarSearch { display: flex; align-items: center; @@ -2408,15 +1502,14 @@ main { margin-right: 25px; flex: 1 1 auto; max-width: 100%; - /* 2 */ - line-height: 1.5; } + line-height: 1.5; } .kuiToolBarSearch:first-child { margin-left: 0; } .kuiToolBarSearch:last-child { margin-right: 0; } .kuiToolBarSearch > * + * { margin-left: 10px; - /* 1 */ } + } .kuiToolBarSearchBox { flex: 1 1 auto; @@ -2431,85 +1524,55 @@ main { font-size: 1em; color: #acacac; } -/** - * 1. Fix inherited styles (possibly from Bootstrap). - */ .kuiToolBarSearchBox__input { width: 100%; min-width: 200px; padding: 4px 12px 5px 28px; - font-family: "var(--font-text)"; - /* 1 */ - background-color: #FFF; + font-family: var(--font-text); + background-color: #FFF; color: #343741; border-radius: 4px; font-size: 1em; border: 1px solid #D3DAE6; line-height: normal; - /* 1 */ - transition: border-color 0.1s linear; } + transition: border-color 0.1s linear; } .kuiToolBarSearchBox__input:focus { outline: none; border-color: #006BB4; } -/* - * 1. We don't want the text to take up two lines and overflow the ToolBar. - */ .kuiToolBarText { font-size: 16px; line-height: 1.5; color: #69707D; white-space: nowrap; - /* 1 */ } + } -/** - * 1. Override h1. - */ .kuiTitle { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - font-size: 24px; } + font-weight: 400; + font-size: 24px; } -/** - * 1. Override h2, h3, etc. - */ .kuiSubTitle { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - font-size: 20px; } + font-weight: 400; + font-size: 20px; } -/** - * 1. Override p. - */ .kuiTextTitle { margin: 0; - /* 1 */ - font-weight: 700; - /* 1 */ - line-height: 1.5; + font-weight: 700; + line-height: 1.5; font-size: 16px; } -/** - * 1. Override p. - */ .kuiText { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - line-height: 1.5; + font-weight: 400; + line-height: 1.5; font-size: 16px; } .kuiSubText { margin: 0; - /* 1 */ - font-weight: 400; - /* 1 */ - line-height: 1.5; + font-weight: 400; + line-height: 1.5; font-size: 14px; } .kuiSubduedText { diff --git a/packages/osd-ui-framework/package.json b/packages/osd-ui-framework/package.json index 1763e5511415..8375cc3b8295 100644 --- a/packages/osd-ui-framework/package.json +++ b/packages/osd-ui-framework/package.json @@ -26,6 +26,7 @@ "@elastic/eui": "npm:@opensearch-project/oui@1.3.0-alpha.2", "@osd/babel-preset": "1.0.0", "@osd/optimizer": "1.0.0", + "comment-stripper": "^0.0.4", "grunt": "^1.5.2", "grunt-babel": "^8.0.0", "grunt-contrib-clean": "^2.0.0", diff --git a/packages/osd-ui-shared-deps/package.json b/packages/osd-ui-shared-deps/package.json index 751a54d6d64b..3e73fa0c8575 100644 --- a/packages/osd-ui-shared-deps/package.json +++ b/packages/osd-ui-shared-deps/package.json @@ -42,10 +42,12 @@ "@osd/babel-preset": "1.0.0", "@osd/dev-utils": "1.0.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "comment-stripper": "^0.0.4", "css-loader": "^5.2.7", "del": "^6.1.1", "loader-utils": "^2.0.4", "node-sass": "npm:@amoo-miki/node-sass@9.0.0-libsass-3.6.5", + "sass-loader": "npm:@amoo-miki/sass-loader@10.4.1-node-sass-9.0.0-libsass-3.6.5", "val-loader": "^2.1.2", "webpack": "npm:@amoo-miki/webpack@4.46.0-rc.2" } diff --git a/packages/osd-ui-shared-deps/webpack.config.js b/packages/osd-ui-shared-deps/webpack.config.js index 8acc43fb1793..d9bfd81af523 100644 --- a/packages/osd-ui-shared-deps/webpack.config.js +++ b/packages/osd-ui-shared-deps/webpack.config.js @@ -76,7 +76,30 @@ exports.getWebpackConfig = ({ dev = false } = {}) => ({ }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, 'css-loader'], + use: [ + MiniCssExtractPlugin.loader, + 'css-loader', + { + loader: 'comment-stripper', + options: { + language: 'css', + }, + }, + ], + }, + { + test: /\.scss$/, + use: [ + MiniCssExtractPlugin.loader, + 'css-loader', + { + loader: 'comment-stripper', + options: { + language: 'css', + }, + }, + 'sass-loader', + ], }, { include: [require.resolve('./theme.ts')], diff --git a/release-notes/opensearch-dashboards.release-notes-1.3.10.md b/release-notes/opensearch-dashboards.release-notes-1.3.10.md new file mode 100644 index 000000000000..a307ac39903a --- /dev/null +++ b/release-notes/opensearch-dashboards.release-notes-1.3.10.md @@ -0,0 +1,33 @@ +# Version 1.3.10 Release Notes + +### 🛡 Security + +- [CVE-2020-15366][1.x] Bump ajv from 4.11.8 to 6.12.6 ([#4035](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4035)) +- [CVE-2022-48285][1.x] Bump jszip from 3.7.1 to 3.10.1 ([#4011](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4011)) +- [CVE-2021-35065][1.x] Bump glob-parent from 6.0.0 to 6.0.2 ([#4005](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4005)) +- [CVE-2022-25851][1.x] Bump jpeg-js from 0.4.1 to 0.4.4 ([#3860](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3860)) +- [CVE-2022-25858][1.x] Bump terser from 4.8.0 to 4.8.1 ([#3786](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3786)) +- [CVE-2021-23490][1.x] Bump parse-link-header from 1.0.1 to 2.0.0 ([#3820](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3820)) +- [CVE-2021-3765][1.x] Bump validator from 8.2.0 to 13.9.0 ([#3753](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3753)) +- [CVE-2022-25758][1.x] Bump scss-tokenizer from 0.3.0 to 0.4.3 ([#3789](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3789)) +- [CVE-2021-3803][1.x] Bump nth-check from 1.0.2 to 2.0.1 ([#3745](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3745)) +- Bump highlight.js from 9.18.5 to 10.7.3 to solve security concerns ([#4062](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4062)) + +### 📈 Features/Enhancements + +- Add tooltip to help icon ([#3872](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3872)) + +### 🐛 Bug Fixes + +- [TSVB] Fix the link to "serial differencing aggregation" documentation ([#3503](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3503)) + +### 📝 Documentation + +- Update jest documentation links ([#3939](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3939)) + +### 🛠 Maintenance + +- Add threshold to code coverage changes for project ([#4050](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4050)) +- Temporarily hardcode chromedriver to 112.0.0 to enable all ftr tests ([#4039]()) +- Update MAINTAINERS.md and CODEOWNERS ([#3938](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3938)) +- Add opensearch-dashboards-docker-dev to .gitignore ([#3781](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3781)) \ No newline at end of file diff --git a/release-notes/opensearch-dashboards.release-notes-1.3.11.md b/release-notes/opensearch-dashboards.release-notes-1.3.11.md new file mode 100644 index 000000000000..de618a878084 --- /dev/null +++ b/release-notes/opensearch-dashboards.release-notes-1.3.11.md @@ -0,0 +1,18 @@ +# Version 1.3.11 Release Notes + +### 🛡 Security + +- [CVE-2022-1537] Bump grunt from `1.5.2` to `1.5.3` ([#4276](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4276)) +- [CVE-2020-15366] Bump ajv from `4.11.8` to `6.12.6` ([#3769](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3769)) + +### 📈 Features/Enhancements + +### 🐛 Bug Fixes + +### 🚞 Infrastructure + +- Upgrade the backport workflow ([#4343](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4343)) + +### 📝 Documentation + +### 🛠 Maintenance \ No newline at end of file diff --git a/release-notes/opensearch-dashboards.release-notes-1.3.12.md b/release-notes/opensearch-dashboards.release-notes-1.3.12.md new file mode 100644 index 000000000000..927f6299a800 --- /dev/null +++ b/release-notes/opensearch-dashboards.release-notes-1.3.12.md @@ -0,0 +1,26 @@ +# Version 1.3.12 Release Notes + +### 🛡 Security + +- [CVE-2021-23382] Bump postcss from `8.2.10` to `8.4.24` ([#4403](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4403)) +- Bump `joi` to v14 to avoid the possibility of prototype poisoning in a nested dependency ([#3952](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3952)) +- [WS-2018-0347] Bump `sass-lint` from `1.12.1` to `1.13.0` to fix `eslint` security issue ([#4338](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4338)) +- [CVE-2022-25883] Resolve `semver` to `7.5.3` and remove unused package ([#4411](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4411), [#4686](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4686)) +- [CVE-2022-1537] Bump grunt from `1.4.1` to `1.5.3` ([#3723](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3723)) +- [CVE-2022-0436] Bump grunt from `1.4.1` to `1.5.3` ([#3723](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3723)) +- [CVE-2023-26136] Resolve `tough-cookie` to `4.1.3` ([#4682](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4682)) + +### 📈 Features/Enhancements + +### 🐛 Bug Fixes + +### 🚞 Infrastructure + +### 📝 Documentation + +### 🛠 Maintenance + +- Adding @ZilongX and @Flyingliuhub as maintainers. ([#4137](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4137)) +- Add new MAINTAINERS to CODEOWNERS file. ([#4199](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4199)) +- Adding @BSFishy as maintainer. ([#4469](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4469)) +- [Version] Increment version to 1.3.12 ([#4656](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4656)) \ No newline at end of file diff --git a/release-notes/opensearch-dashboards.release-notes-1.3.2.md b/release-notes/opensearch-dashboards.release-notes-1.3.2.md new file mode 100644 index 000000000000..84afc683c921 --- /dev/null +++ b/release-notes/opensearch-dashboards.release-notes-1.3.2.md @@ -0,0 +1,18 @@ +## Version 1.3.2 Release Notes + +### 🛡 Security +* [CVE-2022-24785] Bumps moment from 2.29.1 to 2.29.2 ([#1456](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1456)) +* [CVE-2020-8203] [CVE-2021-23337] [CVE-2020-28500] Bumps lodash-es from 4.17.15 to 4.17.21 ([#1343](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1343)) +* [CVE-2022-0436] Bumps grunt from v1.4.1 to v1.5.2 ([#1451](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1451)) +* [CVE-2021-3918] Bumps json-schema from 0.2.3 to 0.4.0 ([#1385](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1385)) +* [CVE-2022-29078] Bumps ejs from 3.1.6 to 3.1.7 ([#1512](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1512)) +* [CVE-2021-44906] Bumps minimist from 1.2.5 to 1.2.6 ([#1377](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1377)) +* [CVE-2021-23566] Bumps nanoid from 3.1.30 to 3.2.0 ([#1173](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1173)) + +### 🐛 Bug Fixes +* Updates re2 build for arm under node 10 ([#1482](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1482)) +* fix(actions): Better type checks for icons ([#1496](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1496)) + +### 🔩 Tests +* [Tests] Fixes inconsistent plugin installation tests ([#1346](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1346)) +* [Tests] Bumps chromedriver to v100 ([#1410](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1410)) \ No newline at end of file diff --git a/release-notes/opensearch-dashboards.release-notes-1.3.3.md b/release-notes/opensearch-dashboards.release-notes-1.3.3.md new file mode 100644 index 000000000000..0a482a68efba --- /dev/null +++ b/release-notes/opensearch-dashboards.release-notes-1.3.3.md @@ -0,0 +1,10 @@ +## Version 1.3.3 Release Notes + +### 🐛 Bug Fixes +* [Bug] Fixes missing discover context icon ([#1545](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1545)) +* [Bug] Fixes the header loading spinner position in Firefox ([#1570](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1570)) +* [Bug] Fixes metric vizualization cut off text ([#1650](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1650)) + +### 🛠 Maintenance +* Removes irrelevant upsell in the timeout message ([#1599](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1599)) +* Removes duplicate var in opensearch-dashboards-docker ([#1649](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1649)) \ No newline at end of file diff --git a/release-notes/opensearch-dashboards.release-notes-1.3.5.md b/release-notes/opensearch-dashboards.release-notes-1.3.5.md new file mode 100644 index 000000000000..5d86383302da --- /dev/null +++ b/release-notes/opensearch-dashboards.release-notes-1.3.5.md @@ -0,0 +1,14 @@ +## Version 1.3.5 Release Notes + +### 🛡 Security +* Bump moment from 2.29.2 to 2.29.4 ([#1931](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1931)) +* [CVE] Add resolution for url-parse ([#2181](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2181)) + +### 🐛 Bug Fixes +Fix WMS can't load when unable access maps services([#1550](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1550)) + +### 🔩 Tests +* Bump chrome driver version in PR check workflow ([#2186](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2186)) + +### 🛠 Maintenance +* Version increment to 1.3.5 ([#1901](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1901)) \ No newline at end of file diff --git a/release-notes/opensearch-dashboards.release-notes-1.3.6.md b/release-notes/opensearch-dashboards.release-notes-1.3.6.md new file mode 100644 index 000000000000..e254d36fe2de --- /dev/null +++ b/release-notes/opensearch-dashboards.release-notes-1.3.6.md @@ -0,0 +1,25 @@ +## Version 1.3.6 Release Notes + +### 📈 Features/Enhancements + +* Custom healthcheck with filters ([#2232](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2232), [#2277](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2277)). To configure see example in [config/opensearch_dashboards.yml](https://github.com/opensearch-project/OpenSearch-Dashboards/blob/6e2ec97459ae179c86201c611ce744c2c24ce150/config/opensearch_dashboards.yml#L44-L46) +### 🛡 Security + +* [CVE-2021-3807] Resolves ansi-regex to v5.0.1 ([#2425](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2425)) +* [CVE-2022-23713] Handle invalid query, index and date in vega charts filter handlers ([#1932](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/1932)) +* Use a forced CSP-compliant interpreter with Vega visualizations ([#2352](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2352)) +* Bump moment-timezone from 0.5.34 to 0.5.37 ([#2361](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2361)) +* [CVE-2022-0144] Bump shelljs from 0.8.4 to 0.8.5 ([#2511](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2511)) + +### 🚞 Infrastructure + +* Add CHANGELOG.md and related workflows ([#2414](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2414)) +* Extends plugin-helpers to be used for automating version changes ([#2398](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2398),[#2486](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2486)) + +### 🛠 Maintenance + +* Version Increment to 1.3.6 ([#2420](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2420)) + +### 🔩 Tests + +* Update caniuse to fix failed integration tests ([#2322](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2322)) \ No newline at end of file diff --git a/release-notes/opensearch-dashboards.release-notes-1.3.9.md b/release-notes/opensearch-dashboards.release-notes-1.3.9.md new file mode 100644 index 000000000000..6220b1da2fc7 --- /dev/null +++ b/release-notes/opensearch-dashboards.release-notes-1.3.9.md @@ -0,0 +1,31 @@ +# Version 1.3.9 Release Notes + +### 🛡 Security + +- [CVE-2022-2499] Resolve qs from 6.5.2 and 6.7.0 to 6.11.0 in 1.x ([#3451](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3451)) +- [CVE-2020-36632] [REQUIRES PLUGIN VALIDATION] Bump flat from 4.1.1 to 5.0.2 ([#3539](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3539)). To the best of our knowledge, this is a non-breaking change, but if your plugin relies on `mocha` tests, validate that they still work correctly (and plan to migrate them to `jest` [in preparation for `mocha` deprecation](https://github.com/opensearch-project/OpenSearch-Dashboards/issues/1572). +- [CVE-2023-25653] Bump node-jose to 2.2.0 ([#3445](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3445)) +- [CVE-2021-23807] Bump jsonpointer from 4.1.0 to 5.0.1 ([#3535](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3535)) +- [CVE-2021-23424] Bump ansi-html from 0.0.7 to 0.0.8 ([#3536](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3536)) +- [CVE-2022-24999] Bump express from 4.17.1 to 4.18.2 ([#3542](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3542)) + +### 📈 Features/Enhancements + +- [I18n] Register ru, ru-RU locale ([#2817](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2817)) + +### 🐛 Bug Fixes + +- [TSVB] Fix the link to "serial differencing aggregation" documentation ([#3503](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3503)) + +### 📝 Documentation + +- [TSVB] Fix a spelling error in the README file ([#3518](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3518)) +- Simplify the in-code instructions for upgrading `re2` ([#3328](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3328)) +- [Doc] Improve DEVELOPER_GUIDE to make first time setup quicker and easier ([#3421](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3421)) + +### 🛠 Maintenance + +- Update MAINTAINERS.md formatting and maintainer list ([#3338](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3338)) +- Remove `github-checks-reporter`, an unused dependency ([#3126](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3126)) +- [Version] Increment to 1.3.9 ([#3375](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3375)) +- Remove the unused `renovate.json5` file ([3489](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3489)) \ No newline at end of file diff --git a/scripts/bwc/opensearch_service.sh b/scripts/bwc/opensearch_service.sh index ecd95990de7e..09f3b5d50c8c 100755 --- a/scripts/bwc/opensearch_service.sh +++ b/scripts/bwc/opensearch_service.sh @@ -24,7 +24,12 @@ function setup_opensearch() { function run_opensearch() { echo "[ Attempting to start OpenSearch... ]" cd "$OPENSEARCH_DIR" - spawn_process_and_save_PID "./opensearch-tar-install.sh > ${LOGS_DIR}/opensearch.log 2>&1 &" + # Check if opensearch-tar-install.sh exists + if [ -f "./opensearch-tar-install.sh" ]; then + spawn_process_and_save_PID "./opensearch-tar-install.sh > ${LOGS_DIR}/opensearch.log 2>&1 &" + else + spawn_process_and_save_PID "./bin/opensearch > ${LOGS_DIR}/opensearch.log 2>&1 &" + fi } # Checks the running status of OpenSearch diff --git a/src/core/server/legacy/legacy_service.ts b/src/core/server/legacy/legacy_service.ts index a48ff12e859a..165a67aa1f83 100644 --- a/src/core/server/legacy/legacy_service.ts +++ b/src/core/server/legacy/legacy_service.ts @@ -276,6 +276,9 @@ export class LegacyService implements CoreService { registerType: setupDeps.core.savedObjects.registerType, getImportExportObjectLimit: setupDeps.core.savedObjects.getImportExportObjectLimit, setRepositoryFactoryProvider: setupDeps.core.savedObjects.setRepositoryFactoryProvider, + setStatus: () => { + throw new Error(`core.savedObjects.setStatus is unsupported in legacy`); + }, }, status: { isStatusPageAnonymous: setupDeps.core.status.isStatusPageAnonymous, diff --git a/src/core/server/plugins/plugin_context.ts b/src/core/server/plugins/plugin_context.ts index 7782fd93041e..ab028e169a71 100644 --- a/src/core/server/plugins/plugin_context.ts +++ b/src/core/server/plugins/plugin_context.ts @@ -205,6 +205,7 @@ export function createPluginSetupContext( registerType: deps.savedObjects.registerType, getImportExportObjectLimit: deps.savedObjects.getImportExportObjectLimit, setRepositoryFactoryProvider: deps.savedObjects.setRepositoryFactoryProvider, + setStatus: deps.savedObjects.setStatus, }, status: { core$: deps.status.core$, diff --git a/src/core/server/saved_objects/saved_objects_service.mock.ts b/src/core/server/saved_objects/saved_objects_service.mock.ts index 74168c436c3d..257b5048fc4a 100644 --- a/src/core/server/saved_objects/saved_objects_service.mock.ts +++ b/src/core/server/saved_objects/saved_objects_service.mock.ts @@ -80,6 +80,7 @@ const createSetupContractMock = () => { registerType: jest.fn(), getImportExportObjectLimit: jest.fn(), setRepositoryFactoryProvider: jest.fn(), + setStatus: jest.fn(), }; setupContract.getImportExportObjectLimit.mockReturnValue(100); diff --git a/src/core/server/saved_objects/saved_objects_service.test.ts b/src/core/server/saved_objects/saved_objects_service.test.ts index 98d1da393319..75b0d756f0cf 100644 --- a/src/core/server/saved_objects/saved_objects_service.test.ts +++ b/src/core/server/saved_objects/saved_objects_service.test.ts @@ -34,7 +34,8 @@ import { clientProviderInstanceMock, typeRegistryInstanceMock, } from './saved_objects_service.test.mocks'; -import { BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, of } from 'rxjs'; +import { first } from 'rxjs/operators'; import { ByteSizeValue } from '@osd/config-schema'; import { errors as opensearchErrors } from '@opensearch-project/opensearch'; @@ -50,6 +51,7 @@ import { SavedObjectsClientFactoryProvider } from './service/lib'; import { NodesVersionCompatibility } from '../opensearch/version_check/ensure_opensearch_version'; import { SavedObjectsRepository } from './service/lib/repository'; import { SavedObjectRepositoryFactoryProvider } from './service/lib/scoped_client_provider'; +import { ServiceStatusLevels } from '../status'; jest.mock('./service/lib/repository'); @@ -191,6 +193,31 @@ describe('SavedObjectsService', () => { ); }); }); + + describe('#setStatus', () => { + it('throws error if custom status is already set', async () => { + const coreContext = createCoreContext(); + const soService = new SavedObjectsService(coreContext); + const setup = await soService.setup(createSetupDeps()); + + const customStatus1$ = of({ + level: ServiceStatusLevels.available, + summary: 'Saved Object Service is using external storage and it is up', + }); + const customStatus2$ = of({ + level: ServiceStatusLevels.unavailable, + summary: 'Saved Object Service is not connected to external storage and it is down', + }); + + setup.setStatus(customStatus1$); + + expect(() => { + setup.setStatus(customStatus2$); + }).toThrowErrorMatchingInlineSnapshot( + `"custom saved object service status is already set, and can only be set once"` + ); + }); + }); }); describe('#start()', () => { @@ -312,6 +339,15 @@ describe('SavedObjectsService', () => { }).toThrowErrorMatchingInlineSnapshot( '"cannot call `setRepositoryFactoryProvider` after service startup."' ); + + const customStatus$ = of({ + level: ServiceStatusLevels.available, + summary: 'Saved Object Service is using external storage and it is up', + }); + + expect(() => { + setup.setStatus(customStatus$); + }).toThrowErrorMatchingInlineSnapshot('"cannot call `setStatus` after service startup."'); }); describe('#getTypeRegistry', () => { @@ -430,5 +466,39 @@ describe('SavedObjectsService', () => { expect(SavedObjectsRepository.createRepository as jest.Mocked).toHaveBeenCalled(); }); }); + + describe('#savedObjectServiceStatus', () => { + it('Saved objects service status should be custom when set using setStatus', async () => { + const coreContext = createCoreContext({}); + const soService = new SavedObjectsService(coreContext); + const coreSetup = createSetupDeps(); + const setup = await soService.setup(coreSetup); + + const customStatus$ = of({ + level: ServiceStatusLevels.available, + summary: 'Saved Object Service is using external storage and it is up', + }); + setup.setStatus(customStatus$); + const coreStart = createStartDeps(); + await soService.start(coreStart); + expect(await setup.status$.pipe(first()).toPromise()).toMatchObject({ + level: ServiceStatusLevels.available, + summary: 'Saved Object Service is using external storage and it is up', + }); + }); + + it('Saved objects service should be default when custom status is not set', async () => { + const coreContext = createCoreContext({}); + const soService = new SavedObjectsService(coreContext); + const coreSetup = createSetupDeps(); + const setup = await soService.setup(coreSetup); + const coreStart = createStartDeps(); + await soService.start(coreStart); + expect(await setup.status$.pipe(first()).toPromise()).toMatchObject({ + level: ServiceStatusLevels.available, + summary: 'SavedObjects service has completed migrations and is available', + }); + }); + }); }); }); diff --git a/src/core/server/saved_objects/saved_objects_service.ts b/src/core/server/saved_objects/saved_objects_service.ts index b6fc21617bcc..43296f340d85 100644 --- a/src/core/server/saved_objects/saved_objects_service.ts +++ b/src/core/server/saved_objects/saved_objects_service.ts @@ -28,8 +28,10 @@ * under the License. */ -import { Subject, Observable } from 'rxjs'; -import { first, filter, take, switchMap } from 'rxjs/operators'; +import { Subject, Observable, BehaviorSubject } from 'rxjs'; +import { first, filter, take, switchMap, map, distinctUntilChanged } from 'rxjs/operators'; +import { isDeepStrictEqual } from 'util'; + import { CoreService } from '../../types'; import { SavedObjectsClient, @@ -62,7 +64,7 @@ import { Logger } from '../logging'; import { SavedObjectTypeRegistry, ISavedObjectTypeRegistry } from './saved_objects_type_registry'; import { SavedObjectsSerializer } from './serialization'; import { registerRoutes } from './routes'; -import { ServiceStatus } from '../status'; +import { ServiceStatus, ServiceStatusLevels } from '../status'; import { calculateStatus$ } from './status'; import { createMigrationOpenSearchClient } from './migrations/core/'; /** @@ -175,6 +177,12 @@ export interface SavedObjectsServiceSetup { setRepositoryFactoryProvider: ( respositoryFactoryProvider: SavedObjectRepositoryFactoryProvider ) => void; + + /** + * Allows a plugin to specify a custom status dependent on its own criteria. + * Completely overrides the default status. + */ + setStatus(status$: Observable>): void; } /** @@ -301,6 +309,11 @@ export class SavedObjectsService private started = false; private respositoryFactoryProvider?: SavedObjectRepositoryFactoryProvider; + private savedObjectServiceCustomStatus$?: Observable>; + private savedObjectServiceStatus$ = new BehaviorSubject>({ + level: ServiceStatusLevels.unavailable, + summary: `waiting`, + }); constructor(private readonly coreContext: CoreContext) { this.logger = coreContext.logger.get('savedobjects-service'); @@ -329,10 +342,7 @@ export class SavedObjectsService }); return { - status$: calculateStatus$( - this.migrator$.pipe(switchMap((migrator) => migrator.getStatus$())), - setupDeps.opensearch.status$ - ), + status$: this.savedObjectServiceStatus$.asObservable(), setClientFactoryProvider: (provider) => { if (this.started) { throw new Error('cannot call `setClientFactoryProvider` after service startup.'); @@ -368,6 +378,17 @@ export class SavedObjectsService } this.respositoryFactoryProvider = repositoryProvider; }, + setStatus: (status$) => { + if (this.started) { + throw new Error('cannot call `setStatus` after service startup.'); + } + if (this.savedObjectServiceCustomStatus$) { + throw new Error( + 'custom saved object service status is already set, and can only be set once' + ); + } + this.savedObjectServiceCustomStatus$ = status$; + }, }; } @@ -381,6 +402,29 @@ export class SavedObjectsService this.logger.debug('Starting SavedObjects service'); + if (this.savedObjectServiceCustomStatus$) { + this.savedObjectServiceCustomStatus$ + .pipe( + map((savedObjectServiceCustomStatus) => { + return savedObjectServiceCustomStatus; + }), + distinctUntilChanged>(isDeepStrictEqual) + ) + .subscribe((value) => this.savedObjectServiceStatus$.next(value)); + } else { + calculateStatus$( + this.migrator$.pipe(switchMap((migrator) => migrator.getStatus$())), + this.setupDeps.opensearch.status$ + ) + .pipe( + map((defaultstatus) => { + return defaultstatus; + }), + distinctUntilChanged>(isDeepStrictEqual) + ) + .subscribe((value) => this.savedObjectServiceStatus$.next(value)); + } + const opensearchDashboardsConfig = await this.coreContext.configService .atPath('opensearchDashboards') .pipe(first()) @@ -492,7 +536,9 @@ export class SavedObjectsService }; } - public async stop() {} + public async stop() { + this.savedObjectServiceStatus$.unsubscribe(); + } private createMigrator( opensearchDashboardsConfig: OpenSearchDashboardsConfigType, diff --git a/src/plugins/dashboard/public/application/actions/add_to_library_action.test.tsx b/src/plugins/dashboard/public/application/actions/add_to_library_action.test.tsx index 58523582a501..c13688c73515 100644 --- a/src/plugins/dashboard/public/application/actions/add_to_library_action.test.tsx +++ b/src/plugins/dashboard/public/application/actions/add_to_library_action.test.tsx @@ -33,21 +33,22 @@ import { IContainer, ReferenceOrValueEmbeddable, EmbeddableInput, -} from '../../embeddable_plugin'; -import { DashboardContainer } from '../embeddable'; -import { getSampleDashboardInput } from '../test_helpers'; + ErrorEmbeddable, + ViewMode, +} from '../../../../embeddable/public'; +import { embeddablePluginMock } from '../../../../embeddable/public/mocks'; import { CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddableFactory, ContactCardEmbeddable, ContactCardEmbeddableInput, ContactCardEmbeddableOutput, -} from '../../embeddable_plugin_test_samples'; +} from '../../../../embeddable/public/lib/test_samples'; +import { DashboardContainer } from '../embeddable'; +import { getSampleDashboardInput } from '../test_helpers'; import { coreMock } from '../../../../../core/public/mocks'; import { CoreStart } from 'opensearch-dashboards/public'; import { AddToLibraryAction } from '.'; -import { embeddablePluginMock } from 'src/plugins/embeddable/public/mocks'; -import { ErrorEmbeddable, ViewMode } from '../../../../embeddable/public'; const { setup, doStart } = embeddablePluginMock.createInstance(); setup.registerEmbeddableFactory( diff --git a/src/plugins/dashboard/public/application/actions/add_to_library_action.tsx b/src/plugins/dashboard/public/application/actions/add_to_library_action.tsx index 1418cc65dc53..f687786cfe4e 100644 --- a/src/plugins/dashboard/public/application/actions/add_to_library_action.tsx +++ b/src/plugins/dashboard/public/application/actions/add_to_library_action.tsx @@ -32,13 +32,15 @@ import { i18n } from '@osd/i18n'; import _ from 'lodash'; import uuid from 'uuid'; import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; -import { ActionByType, IncompatibleActionError } from '../../ui_actions_plugin'; -import { ViewMode, PanelState, IEmbeddable } from '../../embeddable_plugin'; +import { ActionByType, IncompatibleActionError } from '../../../../ui_actions/public'; import { PanelNotFoundError, EmbeddableInput, isReferenceOrValueEmbeddable, isErrorEmbeddable, + ViewMode, + PanelState, + IEmbeddable, } from '../../../../embeddable/public'; import { DashboardPanelState, DASHBOARD_CONTAINER_TYPE, DashboardContainer } from '..'; diff --git a/src/plugins/dashboard/public/application/actions/clone_panel_action.test.tsx b/src/plugins/dashboard/public/application/actions/clone_panel_action.test.tsx index 6675d478eec5..bf2fb17e7df3 100644 --- a/src/plugins/dashboard/public/application/actions/clone_panel_action.test.tsx +++ b/src/plugins/dashboard/public/application/actions/clone_panel_action.test.tsx @@ -28,20 +28,20 @@ * under the License. */ -import { isErrorEmbeddable, IContainer, ErrorEmbeddable } from '../../embeddable_plugin'; -import { DashboardContainer, DashboardPanelState } from '../embeddable'; -import { getSampleDashboardInput, getSampleDashboardPanel } from '../test_helpers'; +import { isErrorEmbeddable, IContainer, ErrorEmbeddable } from '../../../../embeddable/public'; import { CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddableFactory, ContactCardEmbeddable, ContactCardEmbeddableInput, ContactCardEmbeddableOutput, -} from '../../embeddable_plugin_test_samples'; +} from '../../../../embeddable/public/lib/test_samples'; +import { embeddablePluginMock } from '../../../../embeddable/public/mocks'; +import { DashboardContainer, DashboardPanelState } from '../embeddable'; +import { getSampleDashboardInput, getSampleDashboardPanel } from '../test_helpers'; import { coreMock } from '../../../../../core/public/mocks'; import { CoreStart } from 'opensearch-dashboards/public'; import { ClonePanelAction } from '.'; -import { embeddablePluginMock } from 'src/plugins/embeddable/public/mocks'; const { setup, doStart } = embeddablePluginMock.createInstance(); setup.registerEmbeddableFactory( diff --git a/src/plugins/dashboard/public/application/actions/clone_panel_action.tsx b/src/plugins/dashboard/public/application/actions/clone_panel_action.tsx index 97b3792fcba7..8ef1e5a0cb2a 100644 --- a/src/plugins/dashboard/public/application/actions/clone_panel_action.tsx +++ b/src/plugins/dashboard/public/application/actions/clone_panel_action.tsx @@ -33,14 +33,16 @@ import { CoreStart } from 'src/core/public'; import uuid from 'uuid'; import _ from 'lodash'; import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; -import { ActionByType, IncompatibleActionError } from '../../ui_actions_plugin'; -import { ViewMode, PanelState, IEmbeddable } from '../../embeddable_plugin'; +import { ActionByType, IncompatibleActionError } from '../../../../ui_actions/public'; import { SavedObject } from '../../../../saved_objects/public'; import { PanelNotFoundError, EmbeddableInput, SavedObjectEmbeddableInput, isErrorEmbeddable, + ViewMode, + PanelState, + IEmbeddable, } from '../../../../embeddable/public'; import { placePanelBeside, diff --git a/src/plugins/dashboard/public/application/actions/expand_panel_action.test.tsx b/src/plugins/dashboard/public/application/actions/expand_panel_action.test.tsx index 73c57496c79f..5298dca2b97d 100644 --- a/src/plugins/dashboard/public/application/actions/expand_panel_action.test.tsx +++ b/src/plugins/dashboard/public/application/actions/expand_panel_action.test.tsx @@ -28,18 +28,18 @@ * under the License. */ -import { isErrorEmbeddable } from '../../embeddable_plugin'; -import { ExpandPanelAction } from './expand_panel_action'; -import { DashboardContainer } from '../embeddable'; -import { getSampleDashboardInput, getSampleDashboardPanel } from '../test_helpers'; +import { isErrorEmbeddable } from '../../../../embeddable/public'; import { CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddableFactory, ContactCardEmbeddable, ContactCardEmbeddableInput, ContactCardEmbeddableOutput, -} from '../../embeddable_plugin_test_samples'; -import { embeddablePluginMock } from 'src/plugins/embeddable/public/mocks'; +} from '../../../../embeddable/public/lib/test_samples'; +import { embeddablePluginMock } from '../../../../embeddable/public/mocks'; +import { ExpandPanelAction } from './expand_panel_action'; +import { DashboardContainer } from '../embeddable'; +import { getSampleDashboardInput, getSampleDashboardPanel } from '../test_helpers'; const { setup, doStart } = embeddablePluginMock.createInstance(); diff --git a/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx b/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx index 63a69e21b488..4cbdb471844f 100644 --- a/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx +++ b/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx @@ -30,8 +30,8 @@ import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { i18n } from '@osd/i18n'; -import { IEmbeddable } from '../../embeddable_plugin'; -import { ActionByType, IncompatibleActionError } from '../../ui_actions_plugin'; +import { IEmbeddable } from '../../../../embeddable/public'; +import { ActionByType, IncompatibleActionError } from '../../../../ui_actions/public'; import { DASHBOARD_CONTAINER_TYPE, DashboardContainer } from '../embeddable'; export const ACTION_EXPAND_PANEL = 'togglePanel'; diff --git a/src/plugins/dashboard/public/application/actions/library_notification_action.test.tsx b/src/plugins/dashboard/public/application/actions/library_notification_action.test.tsx index d9a45871e798..e9bb6c0c3ce2 100644 --- a/src/plugins/dashboard/public/application/actions/library_notification_action.test.tsx +++ b/src/plugins/dashboard/public/application/actions/library_notification_action.test.tsx @@ -28,21 +28,26 @@ * under the License. */ -import { isErrorEmbeddable, ReferenceOrValueEmbeddable } from '../../embeddable_plugin'; -import { DashboardContainer } from '../embeddable'; -import { getSampleDashboardInput } from '../test_helpers'; +import { + isErrorEmbeddable, + ReferenceOrValueEmbeddable, + ErrorEmbeddable, + IContainer, + ViewMode, +} from '../../../../embeddable/public'; import { CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddableFactory, ContactCardEmbeddable, ContactCardEmbeddableInput, ContactCardEmbeddableOutput, -} from '../../embeddable_plugin_test_samples'; +} from '../../../../embeddable/public/lib/test_samples'; +import { embeddablePluginMock } from '../../../../embeddable/public/mocks'; +import { DashboardContainer } from '../embeddable'; +import { getSampleDashboardInput } from '../test_helpers'; import { coreMock } from '../../../../../core/public/mocks'; import { CoreStart } from 'opensearch-dashboards/public'; import { LibraryNotificationAction } from '.'; -import { embeddablePluginMock } from 'src/plugins/embeddable/public/mocks'; -import { ErrorEmbeddable, IContainer, ViewMode } from '../../../../embeddable/public'; const { setup, doStart } = embeddablePluginMock.createInstance(); setup.registerEmbeddableFactory( diff --git a/src/plugins/dashboard/public/application/actions/library_notification_action.tsx b/src/plugins/dashboard/public/application/actions/library_notification_action.tsx index 0522d2a33740..2dc37a7526eb 100644 --- a/src/plugins/dashboard/public/application/actions/library_notification_action.tsx +++ b/src/plugins/dashboard/public/application/actions/library_notification_action.tsx @@ -37,8 +37,8 @@ import { ViewMode, isReferenceOrValueEmbeddable, isErrorEmbeddable, -} from '../../embeddable_plugin'; -import { ActionByType, IncompatibleActionError } from '../../ui_actions_plugin'; +} from '../../../../embeddable/public'; +import { ActionByType, IncompatibleActionError } from '../../../../ui_actions/public'; import { reactToUiComponent } from '../../../../opensearch_dashboards_react/public'; export const ACTION_LIBRARY_NOTIFICATION = 'ACTION_LIBRARY_NOTIFICATION'; diff --git a/src/plugins/dashboard/public/application/actions/open_replace_panel_flyout.tsx b/src/plugins/dashboard/public/application/actions/open_replace_panel_flyout.tsx index 66f5dc214719..d10f92ce7d5d 100644 --- a/src/plugins/dashboard/public/application/actions/open_replace_panel_flyout.tsx +++ b/src/plugins/dashboard/public/application/actions/open_replace_panel_flyout.tsx @@ -38,7 +38,7 @@ import { EmbeddableOutput, EmbeddableStart, IContainer, -} from '../../embeddable_plugin'; +} from '../../../../embeddable/public'; export async function openReplacePanelFlyout(options: { embeddable: IContainer; diff --git a/src/plugins/dashboard/public/application/actions/replace_panel_action.test.tsx b/src/plugins/dashboard/public/application/actions/replace_panel_action.test.tsx index b3ac183a6ee0..42e2f99f8a5e 100644 --- a/src/plugins/dashboard/public/application/actions/replace_panel_action.test.tsx +++ b/src/plugins/dashboard/public/application/actions/replace_panel_action.test.tsx @@ -28,20 +28,20 @@ * under the License. */ -import { isErrorEmbeddable } from '../../embeddable_plugin'; -import { ReplacePanelAction } from './replace_panel_action'; -import { DashboardContainer } from '../embeddable'; -import { getSampleDashboardInput, getSampleDashboardPanel } from '../test_helpers'; +import { isErrorEmbeddable } from '../../../../embeddable/public'; import { CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddableFactory, ContactCardEmbeddable, ContactCardEmbeddableInput, ContactCardEmbeddableOutput, -} from '../../embeddable_plugin_test_samples'; +} from '../../../../embeddable/public/lib/test_samples'; +import { embeddablePluginMock } from '../../../../embeddable/public/mocks'; +import { ReplacePanelAction } from './replace_panel_action'; +import { DashboardContainer } from '../embeddable'; +import { getSampleDashboardInput, getSampleDashboardPanel } from '../test_helpers'; import { coreMock } from '../../../../../core/public/mocks'; import { CoreStart } from 'opensearch-dashboards/public'; -import { embeddablePluginMock } from 'src/plugins/embeddable/public/mocks'; const { setup, doStart } = embeddablePluginMock.createInstance(); setup.registerEmbeddableFactory( diff --git a/src/plugins/dashboard/public/application/actions/replace_panel_action.tsx b/src/plugins/dashboard/public/application/actions/replace_panel_action.tsx index 933986967e9d..fa634a170e44 100644 --- a/src/plugins/dashboard/public/application/actions/replace_panel_action.tsx +++ b/src/plugins/dashboard/public/application/actions/replace_panel_action.tsx @@ -31,9 +31,9 @@ import { i18n } from '@osd/i18n'; import { CoreStart } from 'src/core/public'; import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; -import { IEmbeddable, ViewMode, EmbeddableStart } from '../../embeddable_plugin'; +import { IEmbeddable, ViewMode, EmbeddableStart } from '../../../../embeddable/public'; import { DASHBOARD_CONTAINER_TYPE, DashboardContainer } from '../embeddable'; -import { ActionByType, IncompatibleActionError } from '../../ui_actions_plugin'; +import { ActionByType, IncompatibleActionError } from '../../../../ui_actions/public'; import { openReplacePanelFlyout } from './open_replace_panel_flyout'; export const ACTION_REPLACE_PANEL = 'replacePanel'; diff --git a/src/plugins/dashboard/public/application/actions/replace_panel_flyout.tsx b/src/plugins/dashboard/public/application/actions/replace_panel_flyout.tsx index 2ec1db3f42fc..be994686cdec 100644 --- a/src/plugins/dashboard/public/application/actions/replace_panel_flyout.tsx +++ b/src/plugins/dashboard/public/application/actions/replace_panel_flyout.tsx @@ -40,7 +40,7 @@ import { IContainer, IEmbeddable, SavedObjectEmbeddableInput, -} from '../../embeddable_plugin'; +} from '../../../../embeddable/public'; interface Props { container: IContainer; diff --git a/src/plugins/dashboard/public/application/actions/unlink_from_library_action.test.tsx b/src/plugins/dashboard/public/application/actions/unlink_from_library_action.test.tsx index 11601b40200a..8f2511f8c3f5 100644 --- a/src/plugins/dashboard/public/application/actions/unlink_from_library_action.test.tsx +++ b/src/plugins/dashboard/public/application/actions/unlink_from_library_action.test.tsx @@ -28,25 +28,27 @@ * under the License. */ -import { isErrorEmbeddable, IContainer, ReferenceOrValueEmbeddable } from '../../embeddable_plugin'; -import { DashboardContainer } from '../embeddable'; -import { getSampleDashboardInput } from '../test_helpers'; +import { + isErrorEmbeddable, + IContainer, + ReferenceOrValueEmbeddable, + ViewMode, + SavedObjectEmbeddableInput, + ErrorEmbeddable, +} from '../../../../embeddable/public'; import { CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddableFactory, ContactCardEmbeddable, ContactCardEmbeddableInput, ContactCardEmbeddableOutput, -} from '../../embeddable_plugin_test_samples'; +} from '../../../../embeddable/public/lib/test_samples'; +import { embeddablePluginMock } from '../../../../embeddable/public/mocks'; +import { DashboardContainer } from '../embeddable'; +import { getSampleDashboardInput } from '../test_helpers'; import { coreMock } from '../../../../../core/public/mocks'; import { CoreStart } from 'opensearch-dashboards/public'; import { UnlinkFromLibraryAction } from '.'; -import { embeddablePluginMock } from 'src/plugins/embeddable/public/mocks'; -import { - ViewMode, - SavedObjectEmbeddableInput, - ErrorEmbeddable, -} from '../../../../embeddable/public'; const { setup, doStart } = embeddablePluginMock.createInstance(); setup.registerEmbeddableFactory( diff --git a/src/plugins/dashboard/public/application/actions/unlink_from_library_action.tsx b/src/plugins/dashboard/public/application/actions/unlink_from_library_action.tsx index 82a3b3fb5a08..67518066dd75 100644 --- a/src/plugins/dashboard/public/application/actions/unlink_from_library_action.tsx +++ b/src/plugins/dashboard/public/application/actions/unlink_from_library_action.tsx @@ -32,13 +32,15 @@ import { i18n } from '@osd/i18n'; import _ from 'lodash'; import uuid from 'uuid'; import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; -import { ActionByType, IncompatibleActionError } from '../../ui_actions_plugin'; -import { ViewMode, PanelState, IEmbeddable } from '../../embeddable_plugin'; +import { ActionByType, IncompatibleActionError } from '../../../../ui_actions/public'; import { PanelNotFoundError, EmbeddableInput, isReferenceOrValueEmbeddable, isErrorEmbeddable, + ViewMode, + PanelState, + IEmbeddable, } from '../../../../embeddable/public'; import { DashboardPanelState, DASHBOARD_CONTAINER_TYPE, DashboardContainer } from '..'; diff --git a/src/plugins/dashboard/public/application/listing/__snapshots__/create_button.test.tsx.snap b/src/plugins/dashboard/public/application/components/dashboard_listing/__snapshots__/create_button.test.tsx.snap similarity index 100% rename from src/plugins/dashboard/public/application/listing/__snapshots__/create_button.test.tsx.snap rename to src/plugins/dashboard/public/application/components/dashboard_listing/__snapshots__/create_button.test.tsx.snap diff --git a/src/plugins/dashboard/public/application/listing/create_button.test.tsx b/src/plugins/dashboard/public/application/components/dashboard_listing/create_button.test.tsx similarity index 97% rename from src/plugins/dashboard/public/application/listing/create_button.test.tsx rename to src/plugins/dashboard/public/application/components/dashboard_listing/create_button.test.tsx index 9521df8590e6..19c676b9e5b8 100644 --- a/src/plugins/dashboard/public/application/listing/create_button.test.tsx +++ b/src/plugins/dashboard/public/application/components/dashboard_listing/create_button.test.tsx @@ -15,7 +15,7 @@ import { findTestSubject } from '@elastic/eui/lib/test'; import React from 'react'; import { CreateButton } from './create_button'; -import { DashboardProvider } from '../../types'; +import { DashboardProvider } from '../../../types'; const provider = (type?: string, url?: string, text?: string): DashboardProvider => { return { diff --git a/src/plugins/dashboard/public/application/listing/create_button.tsx b/src/plugins/dashboard/public/application/components/dashboard_listing/create_button.tsx similarity index 98% rename from src/plugins/dashboard/public/application/listing/create_button.tsx rename to src/plugins/dashboard/public/application/components/dashboard_listing/create_button.tsx index 16d17c3568a3..2d6623096235 100644 --- a/src/plugins/dashboard/public/application/listing/create_button.tsx +++ b/src/plugins/dashboard/public/application/components/dashboard_listing/create_button.tsx @@ -11,7 +11,7 @@ import { EuiFlexItem, EuiPopover, } from '@elastic/eui'; -import type { DashboardProvider } from '../../types'; +import type { DashboardProvider } from '../../../types'; interface CreateButtonProps { dashboardProviders?: { [key: string]: DashboardProvider }; diff --git a/src/plugins/dashboard/public/application/listing/dashboard_listing.test.js b/src/plugins/dashboard/public/application/components/dashboard_listing/dashboard_listing.test.tsx similarity index 97% rename from src/plugins/dashboard/public/application/listing/dashboard_listing.test.js rename to src/plugins/dashboard/public/application/components/dashboard_listing/dashboard_listing.test.tsx index 23cfacd13fba..3d9c8404be5e 100644 --- a/src/plugins/dashboard/public/application/listing/dashboard_listing.test.js +++ b/src/plugins/dashboard/public/application/components/dashboard_listing/dashboard_listing.test.tsx @@ -36,8 +36,8 @@ jest.mock( () => ({ ...jest.requireActual('lodash'), // mock debounce to fire immediately with no internal timer - debounce: (func) => { - function debounced(...args) { + debounce: (func: any) => { + function debounced(this: any, ...args: any[]) { return func.apply(this, args); } return debounced; @@ -49,9 +49,9 @@ jest.mock( import React from 'react'; import { shallow } from 'enzyme'; -import { DashboardListing } from '../components/dashboard_listing'; +import { DashboardListing } from './dashboard_listing'; -const find = (num) => { +const find = (num: number) => { const hits = []; for (let i = 0; i < num; i++) { hits.push({ @@ -62,7 +62,7 @@ const find = (num) => { } return Promise.resolve({ total: num, - hits: hits, + hits, }); }; diff --git a/src/plugins/dashboard/public/application/components/dashboard_listing.tsx b/src/plugins/dashboard/public/application/components/dashboard_listing/dashboard_listing.tsx similarity index 94% rename from src/plugins/dashboard/public/application/components/dashboard_listing.tsx rename to src/plugins/dashboard/public/application/components/dashboard_listing/dashboard_listing.tsx index df3ff9099394..00ce5a713b7f 100644 --- a/src/plugins/dashboard/public/application/components/dashboard_listing.tsx +++ b/src/plugins/dashboard/public/application/components/dashboard_listing/dashboard_listing.tsx @@ -10,13 +10,13 @@ import { useLocation } from 'react-router-dom'; import { useOpenSearchDashboards, TableListView, -} from '../../../../opensearch_dashboards_react/public'; -import { CreateButton } from '../listing/create_button'; -import { DashboardConstants, createDashboardEditUrl } from '../../dashboard_constants'; -import { DashboardServices } from '../../types'; -import { getTableColumns } from '../utils/get_table_columns'; -import { getNoItemsMessage } from '../utils/get_no_items_message'; -import { syncQueryStateWithUrl } from '../../../../data/public'; +} from '../../../../../opensearch_dashboards_react/public'; +import { CreateButton } from './create_button'; +import { DashboardConstants, createDashboardEditUrl } from '../../../dashboard_constants'; +import { DashboardServices } from '../../../types'; +import { getTableColumns } from '../../utils/get_table_columns'; +import { getNoItemsMessage } from '../../utils/get_no_items_message'; +import { syncQueryStateWithUrl } from '../../../../../data/public'; export const EMPTY_FILTER = ''; diff --git a/src/plugins/dashboard/public/application/components/dashboard_listing/index.ts b/src/plugins/dashboard/public/application/components/dashboard_listing/index.ts new file mode 100644 index 000000000000..19ded8c611ac --- /dev/null +++ b/src/plugins/dashboard/public/application/components/dashboard_listing/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { CreateButton } from './create_button'; +export { DashboardListing } from './dashboard_listing'; diff --git a/src/plugins/dashboard/public/application/components/dashboard_top_nav.tsx b/src/plugins/dashboard/public/application/components/dashboard_top_nav/dashboard_top_nav.tsx similarity index 93% rename from src/plugins/dashboard/public/application/components/dashboard_top_nav.tsx rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/dashboard_top_nav.tsx index 157e9a01967e..1cc58c78ebc1 100644 --- a/src/plugins/dashboard/public/application/components/dashboard_top_nav.tsx +++ b/src/plugins/dashboard/public/application/components/dashboard_top_nav/dashboard_top_nav.tsx @@ -7,12 +7,12 @@ import React, { memo, useState, useEffect } from 'react'; import { IndexPattern } from 'src/plugins/data/public'; import { useCallback } from 'react'; import { useLocation } from 'react-router-dom'; -import { useOpenSearchDashboards } from '../../../../opensearch_dashboards_react/public'; -import { getTopNavConfig } from '../top_nav/get_top_nav_config'; -import { DashboardAppStateContainer, DashboardAppState, DashboardServices } from '../../types'; -import { getNavActions } from '../utils/get_nav_actions'; -import { DashboardContainer } from '../embeddable'; -import { Dashboard } from '../../dashboard'; +import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public'; +import { getTopNavConfig } from './top_nav'; +import { DashboardAppStateContainer, DashboardAppState, DashboardServices } from '../../../types'; +import { getNavActions } from '../../utils/get_nav_actions'; +import { DashboardContainer } from '../../embeddable'; +import { Dashboard } from '../../../dashboard'; interface DashboardTopNavProps { isChromeVisible: boolean; diff --git a/src/plugins/dashboard/public/application/components/dashboard_top_nav/index.ts b/src/plugins/dashboard/public/application/components/dashboard_top_nav/index.ts new file mode 100644 index 000000000000..3e50001bd673 --- /dev/null +++ b/src/plugins/dashboard/public/application/components/dashboard_top_nav/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './top_nav'; +export { DashboardTopNav, UrlParams } from './dashboard_top_nav'; diff --git a/src/plugins/dashboard/public/application/top_nav/__snapshots__/clone_modal.test.js.snap b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/__snapshots__/clone_modal.test.js.snap similarity index 100% rename from src/plugins/dashboard/public/application/top_nav/__snapshots__/clone_modal.test.js.snap rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/__snapshots__/clone_modal.test.js.snap diff --git a/src/plugins/dashboard/public/application/top_nav/__snapshots__/save_modal.test.js.snap b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/__snapshots__/save_modal.test.js.snap similarity index 100% rename from src/plugins/dashboard/public/application/top_nav/__snapshots__/save_modal.test.js.snap rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/__snapshots__/save_modal.test.js.snap diff --git a/src/plugins/dashboard/public/application/top_nav/clone_modal.test.js b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/clone_modal.test.js similarity index 100% rename from src/plugins/dashboard/public/application/top_nav/clone_modal.test.js rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/clone_modal.test.js diff --git a/src/plugins/dashboard/public/application/top_nav/clone_modal.tsx b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/clone_modal.tsx similarity index 100% rename from src/plugins/dashboard/public/application/top_nav/clone_modal.tsx rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/clone_modal.tsx diff --git a/src/plugins/dashboard/public/application/top_nav/get_top_nav_config.ts b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/get_top_nav_config.ts similarity index 98% rename from src/plugins/dashboard/public/application/top_nav/get_top_nav_config.ts rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/get_top_nav_config.ts index aa7c2e2e4255..f91f4d47a854 100644 --- a/src/plugins/dashboard/public/application/top_nav/get_top_nav_config.ts +++ b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/get_top_nav_config.ts @@ -29,9 +29,9 @@ */ import { i18n } from '@osd/i18n'; -import { ViewMode } from '../../embeddable_plugin'; +import { ViewMode } from '../../../../../../embeddable/public'; import { TopNavIds } from './top_nav_ids'; -import { NavAction } from '../../types'; +import { NavAction } from '../../../../types'; /** * @param actions - A mapping of TopNavIds to an action function that should run when the diff --git a/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/index.ts b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/index.ts new file mode 100644 index 000000000000..1fca9b941e4e --- /dev/null +++ b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/index.ts @@ -0,0 +1,12 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export * from './clone_modal'; +export * from './get_top_nav_config'; +export * from './options'; +export * from './save_modal'; +export * from './show_clone_modal'; +export * from './show_options_popover'; +export * from './top_nav_ids'; diff --git a/src/plugins/dashboard/public/application/top_nav/options.tsx b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/options.tsx similarity index 100% rename from src/plugins/dashboard/public/application/top_nav/options.tsx rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/options.tsx diff --git a/src/plugins/dashboard/public/application/top_nav/save_modal.test.js b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/save_modal.test.js similarity index 96% rename from src/plugins/dashboard/public/application/top_nav/save_modal.test.js rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/save_modal.test.js index 91bdaebe4dc1..daf1a8e351a5 100644 --- a/src/plugins/dashboard/public/application/top_nav/save_modal.test.js +++ b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/save_modal.test.js @@ -31,7 +31,7 @@ import React from 'react'; import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; -jest.mock('../../../../saved_objects/public', () => ({ +jest.mock('../../../../../../saved_objects/public', () => ({ SavedObjectSaveModal: () => null, })); diff --git a/src/plugins/dashboard/public/application/top_nav/save_modal.tsx b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/save_modal.tsx similarity index 98% rename from src/plugins/dashboard/public/application/top_nav/save_modal.tsx rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/save_modal.tsx index 205a8e2222fc..f8e0fe674df8 100644 --- a/src/plugins/dashboard/public/application/top_nav/save_modal.tsx +++ b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/save_modal.tsx @@ -32,7 +32,7 @@ import React, { Fragment } from 'react'; import { FormattedMessage } from '@osd/i18n/react'; import { EuiFormRow, EuiTextArea, EuiSwitch } from '@elastic/eui'; -import { SavedObjectSaveModal } from '../../../../saved_objects/public'; +import { SavedObjectSaveModal } from '../../../../../../saved_objects/public'; interface SaveOptions { newTitle: string; diff --git a/src/plugins/dashboard/public/application/top_nav/show_clone_modal.tsx b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/show_clone_modal.tsx similarity index 100% rename from src/plugins/dashboard/public/application/top_nav/show_clone_modal.tsx rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/show_clone_modal.tsx diff --git a/src/plugins/dashboard/public/application/top_nav/show_options_popover.tsx b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/show_options_popover.tsx similarity index 100% rename from src/plugins/dashboard/public/application/top_nav/show_options_popover.tsx rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/show_options_popover.tsx diff --git a/src/plugins/dashboard/public/application/top_nav/top_nav_ids.ts b/src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/top_nav_ids.ts similarity index 100% rename from src/plugins/dashboard/public/application/top_nav/top_nav_ids.ts rename to src/plugins/dashboard/public/application/components/dashboard_top_nav/top_nav/top_nav_ids.ts diff --git a/src/plugins/dashboard/public/application/components/index.ts b/src/plugins/dashboard/public/application/components/index.ts index 27f7e46ad74e..23eeb5e75314 100644 --- a/src/plugins/dashboard/public/application/components/index.ts +++ b/src/plugins/dashboard/public/application/components/index.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -export { DashboardListing } from './dashboard_listing'; +export { DashboardListing, CreateButton } from './dashboard_listing'; export { DashboardEditor } from './dashboard_editor'; export { DashboardNoMatch } from './dashboard_no_match'; export { DashboardTopNav } from './dashboard_top_nav'; diff --git a/src/plugins/dashboard/public/application/dashboard_strings.ts b/src/plugins/dashboard/public/application/dashboard_strings.ts index ead76e48da74..96713b3fe955 100644 --- a/src/plugins/dashboard/public/application/dashboard_strings.ts +++ b/src/plugins/dashboard/public/application/dashboard_strings.ts @@ -29,7 +29,7 @@ */ import { i18n } from '@osd/i18n'; -import { ViewMode } from '../embeddable_plugin'; +import { ViewMode } from '../../../embeddable/public'; /** * @param title {string} the current title of the dashboard diff --git a/src/plugins/dashboard/public/application/embeddable/_dashboard_container.scss b/src/plugins/dashboard/public/application/embeddable/_dashboard_container.scss index 30774d469b85..e72e52515efd 100644 --- a/src/plugins/dashboard/public/application/embeddable/_dashboard_container.scss +++ b/src/plugins/dashboard/public/application/embeddable/_dashboard_container.scss @@ -1,4 +1,5 @@ @import "../../../../embeddable/public/variables"; +@import "./empty/index"; @import "./grid/index"; @import "./panel/index"; @import "./viewport/index"; diff --git a/src/plugins/dashboard/public/application/embeddable/dashboard_container.test.tsx b/src/plugins/dashboard/public/application/embeddable/dashboard_container.test.tsx index 4daeb2767170..faed32d60d2d 100644 --- a/src/plugins/dashboard/public/application/embeddable/dashboard_container.test.tsx +++ b/src/plugins/dashboard/public/application/embeddable/dashboard_container.test.tsx @@ -28,18 +28,32 @@ * under the License. */ +import { I18nProvider } from '@osd/i18n/react'; import { nextTick } from 'test_utils/enzyme_helpers'; -import { isErrorEmbeddable, ViewMode } from '../../embeddable_plugin'; -import { DashboardContainer, DashboardContainerOptions } from './dashboard_container'; -import { getSampleDashboardInput, getSampleDashboardPanel } from '../test_helpers'; +import { + CONTEXT_MENU_TRIGGER, + EmbeddablePanel, + isErrorEmbeddable, + ViewMode, +} from '../../../../embeddable/public'; import { CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddableFactory, ContactCardEmbeddableInput, ContactCardEmbeddable, ContactCardEmbeddableOutput, -} from '../../embeddable_plugin_test_samples'; + createEditModeAction, +} from '../../../../embeddable/public/lib/test_samples'; import { embeddablePluginMock } from 'src/plugins/embeddable/public/mocks'; +import { DashboardContainer, DashboardContainerOptions } from './dashboard_container'; +import { getSampleDashboardInput, getSampleDashboardPanel } from '../test_helpers'; +import { inspectorPluginMock } from 'src/plugins/inspector/public/mocks'; +import { uiActionsPluginMock } from 'src/plugins/ui_actions/public/mocks'; +import { applicationServiceMock } from '../../../../../core/public/mocks'; +import React from 'react'; +import { OpenSearchDashboardsContextProvider } from 'src/plugins/opensearch_dashboards_react/public'; +import { mount } from 'enzyme'; +import { findTestSubject } from 'test_utils/helpers'; const options: DashboardContainerOptions = { application: {} as any, @@ -145,3 +159,88 @@ test('Container view mode change propagates to new children', async () => { expect(embeddable.getInput().viewMode).toBe(ViewMode.EDIT); }); + +test('DashboardContainer in edit mode shows edit mode actions', async () => { + const inspector = inspectorPluginMock.createStartContract(); + const { setup, doStart } = embeddablePluginMock.createInstance(); + const uiActionsSetup = uiActionsPluginMock.createSetupContract(); + + const editModeAction = createEditModeAction(); + uiActionsSetup.registerAction(editModeAction); + uiActionsSetup.addTriggerAction(CONTEXT_MENU_TRIGGER, editModeAction); + setup.registerEmbeddableFactory( + CONTACT_CARD_EMBEDDABLE, + new ContactCardEmbeddableFactory((() => null) as any, {} as any) + ); + + const start = doStart(); + + const initialInput = getSampleDashboardInput({ viewMode: ViewMode.VIEW }); + const containerOptions: DashboardContainerOptions = { + application: applicationServiceMock.createStartContract(), + embeddable: start, + notifications: {} as any, + overlays: {} as any, + inspector: {} as any, + SavedObjectFinder: () => null, + ExitFullScreenButton: () => null, + uiActions: {} as any, + }; + const container = new DashboardContainer(initialInput, containerOptions); + + const embeddable = await container.addNewEmbeddable< + ContactCardEmbeddableInput, + ContactCardEmbeddableOutput, + ContactCardEmbeddable + >(CONTACT_CARD_EMBEDDABLE, { + firstName: 'Bob', + }); + + const component = mount( + + + Promise.resolve([])} + getAllEmbeddableFactories={(() => []) as any} + getEmbeddableFactory={(() => null) as any} + notifications={{} as any} + application={containerOptions.application} + overlays={{} as any} + inspector={inspector} + SavedObjectFinder={() => null} + /> + + + ); + + const button = findTestSubject(component, 'embeddablePanelToggleMenuIcon'); + + expect(button.length).toBe(1); + findTestSubject(component, 'embeddablePanelToggleMenuIcon').simulate('click'); + + expect(findTestSubject(component, `embeddablePanelContextMenuOpen`).length).toBe(1); + + const editAction = findTestSubject(component, `embeddablePanelAction-${editModeAction.id}`); + + expect(editAction.length).toBe(0); + + container.updateInput({ viewMode: ViewMode.EDIT }); + await nextTick(); + component.update(); + findTestSubject(component, 'embeddablePanelToggleMenuIcon').simulate('click'); + await nextTick(); + component.update(); + expect(findTestSubject(component, 'embeddablePanelContextMenuOpen').length).toBe(0); + findTestSubject(component, 'embeddablePanelToggleMenuIcon').simulate('click'); + await nextTick(); + component.update(); + expect(findTestSubject(component, 'embeddablePanelContextMenuOpen').length).toBe(1); + + await nextTick(); + component.update(); + + // TODO: Address this. + // const action = findTestSubject(component, `embeddablePanelAction-${editModeAction.id}`); + // expect(action.length).toBe(1); +}); diff --git a/src/plugins/dashboard/public/application/embeddable/dashboard_container.tsx b/src/plugins/dashboard/public/application/embeddable/dashboard_container.tsx index c87c3478558c..db647c2760a7 100644 --- a/src/plugins/dashboard/public/application/embeddable/dashboard_container.tsx +++ b/src/plugins/dashboard/public/application/embeddable/dashboard_container.tsx @@ -37,7 +37,6 @@ import { RefreshInterval, TimeRange, Query, Filter } from 'src/plugins/data/publ import { CoreStart } from 'src/core/public'; import { Start as InspectorStartContract } from 'src/plugins/inspector/public'; import uuid from 'uuid'; -import { UiActionsStart } from '../../ui_actions_plugin'; import { Container, ContainerInput, @@ -47,7 +46,10 @@ import { IEmbeddable, EmbeddableStart, PanelState, -} from '../../embeddable_plugin'; + EmbeddableStateTransfer, + EmbeddableOutput, +} from '../../../../embeddable/public'; +import { UiActionsStart } from '../../../../ui_actions/public'; import { DASHBOARD_CONTAINER_TYPE } from './dashboard_constants'; import { createPanelState } from './panel'; import { DashboardPanelState } from './types'; @@ -59,7 +61,6 @@ import { } from '../../../../opensearch_dashboards_react/public'; import { PLACEHOLDER_EMBEDDABLE } from './placeholder'; import { PanelPlacementMethod, IPanelPlacementArgs } from './panel/dashboard_panel_placement'; -import { EmbeddableStateTransfer, EmbeddableOutput } from '../../../../embeddable/public'; export interface DashboardContainerInput extends ContainerInput { viewMode: ViewMode; diff --git a/src/plugins/dashboard/public/application/embeddable/dashboard_container_factory.tsx b/src/plugins/dashboard/public/application/embeddable/dashboard_container_factory.tsx index bbfd0f30dd34..b50f561ddab8 100644 --- a/src/plugins/dashboard/public/application/embeddable/dashboard_container_factory.tsx +++ b/src/plugins/dashboard/public/application/embeddable/dashboard_container_factory.tsx @@ -32,13 +32,14 @@ import { i18n } from '@osd/i18n'; import { UiActionsStart } from 'src/plugins/ui_actions/public'; import { CoreStart, ScopedHistory } from 'src/core/public'; import { Start as InspectorStartContract } from 'src/plugins/inspector/public'; -import { EmbeddableFactory, EmbeddableStart } from '../../../../embeddable/public'; import { ContainerOutput, EmbeddableFactoryDefinition, ErrorEmbeddable, Container, -} from '../../embeddable_plugin'; + EmbeddableFactory, + EmbeddableStart, +} from '../../../../embeddable/public'; import { DashboardContainer, DashboardContainerInput } from './dashboard_container'; import { DASHBOARD_CONTAINER_TYPE } from './dashboard_constants'; diff --git a/src/plugins/dashboard/public/application/__snapshots__/dashboard_empty_screen.test.tsx.snap b/src/plugins/dashboard/public/application/embeddable/empty/__snapshots__/dashboard_empty_screen.test.tsx.snap similarity index 100% rename from src/plugins/dashboard/public/application/__snapshots__/dashboard_empty_screen.test.tsx.snap rename to src/plugins/dashboard/public/application/embeddable/empty/__snapshots__/dashboard_empty_screen.test.tsx.snap diff --git a/src/plugins/dashboard/public/application/embeddable/empty/_index.scss b/src/plugins/dashboard/public/application/embeddable/empty/_index.scss new file mode 100644 index 000000000000..e6977a94c5b7 --- /dev/null +++ b/src/plugins/dashboard/public/application/embeddable/empty/_index.scss @@ -0,0 +1 @@ +@import "./dashboard_empty_screen"; diff --git a/src/plugins/dashboard/public/application/dashboard_empty_screen.scss b/src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen.scss similarity index 100% rename from src/plugins/dashboard/public/application/dashboard_empty_screen.scss rename to src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen.scss diff --git a/src/plugins/dashboard/public/application/dashboard_empty_screen.test.tsx b/src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen.test.tsx similarity index 96% rename from src/plugins/dashboard/public/application/dashboard_empty_screen.test.tsx rename to src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen.test.tsx index fd4291b29455..b2c04284ad09 100644 --- a/src/plugins/dashboard/public/application/dashboard_empty_screen.test.tsx +++ b/src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen.test.tsx @@ -31,8 +31,8 @@ import React from 'react'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import { DashboardEmptyScreen, DashboardEmptyScreenProps } from './dashboard_empty_screen'; -import { findTestSubject } from '@elastic/eui/lib/test'; -import { coreMock } from '../../../../core/public/mocks'; +import { findTestSubject } from 'test_utils/helpers'; +import { coreMock } from '../../../../../../core/public/mocks'; describe('DashboardEmptyScreen', () => { const setupMock = coreMock.createSetup(); diff --git a/src/plugins/dashboard/public/application/dashboard_empty_screen.tsx b/src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen.tsx similarity index 99% rename from src/plugins/dashboard/public/application/dashboard_empty_screen.tsx rename to src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen.tsx index d7f4a725a6fc..558fe0af5f62 100644 --- a/src/plugins/dashboard/public/application/dashboard_empty_screen.tsx +++ b/src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen.tsx @@ -28,7 +28,6 @@ * under the License. */ -import './dashboard_empty_screen.scss'; import React from 'react'; import { I18nProvider } from '@osd/i18n/react'; import { diff --git a/src/plugins/dashboard/public/application/dashboard_empty_screen_constants.tsx b/src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen_constants.tsx similarity index 100% rename from src/plugins/dashboard/public/application/dashboard_empty_screen_constants.tsx rename to src/plugins/dashboard/public/application/embeddable/empty/dashboard_empty_screen_constants.tsx diff --git a/src/plugins/dashboard/public/application/embeddable/empty/index.ts b/src/plugins/dashboard/public/application/embeddable/empty/index.ts new file mode 100644 index 000000000000..16a579e89bc0 --- /dev/null +++ b/src/plugins/dashboard/public/application/embeddable/empty/index.ts @@ -0,0 +1,6 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { DashboardEmptyScreen, DashboardEmptyScreenProps } from './dashboard_empty_screen'; diff --git a/src/plugins/dashboard/public/application/embeddable/grid/dashboard_grid.test.tsx b/src/plugins/dashboard/public/application/embeddable/grid/dashboard_grid.test.tsx index 48d1a4adc512..ce2dfec622a4 100644 --- a/src/plugins/dashboard/public/application/embeddable/grid/dashboard_grid.test.tsx +++ b/src/plugins/dashboard/public/application/embeddable/grid/dashboard_grid.test.tsx @@ -40,9 +40,9 @@ import { getSampleDashboardInput } from '../../test_helpers'; import { CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddableFactory, -} from '../../../embeddable_plugin_test_samples'; +} from '../../../../../embeddable/public/lib/test_samples'; +import { embeddablePluginMock } from '../../../../../embeddable/public/mocks'; import { OpenSearchDashboardsContextProvider } from '../../../../../opensearch_dashboards_react/public'; -import { embeddablePluginMock } from 'src/plugins/embeddable/public/mocks'; let dashboardContainer: DashboardContainer | undefined; diff --git a/src/plugins/dashboard/public/application/embeddable/grid/dashboard_grid.tsx b/src/plugins/dashboard/public/application/embeddable/grid/dashboard_grid.tsx index 064a1c5f4085..374e20e715d4 100644 --- a/src/plugins/dashboard/public/application/embeddable/grid/dashboard_grid.tsx +++ b/src/plugins/dashboard/public/application/embeddable/grid/dashboard_grid.tsx @@ -39,8 +39,8 @@ import _ from 'lodash'; import React from 'react'; import { Subscription } from 'rxjs'; import ReactGridLayout, { Layout, ReactGridLayoutProps } from 'react-grid-layout'; +import { ViewMode, EmbeddableChildPanel, EmbeddableStart } from '../../../../../embeddable/public'; import { GridData } from '../../../../common'; -import { ViewMode, EmbeddableChildPanel, EmbeddableStart } from '../../../embeddable_plugin'; import { DASHBOARD_GRID_COLUMN_COUNT, DASHBOARD_GRID_HEIGHT } from '../dashboard_constants'; import { DashboardPanelState } from '../types'; import { withOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public'; diff --git a/src/plugins/dashboard/public/application/embeddable/index.ts b/src/plugins/dashboard/public/application/embeddable/index.ts index 1b5017bee941..b3a8b4cc8d75 100644 --- a/src/plugins/dashboard/public/application/embeddable/index.ts +++ b/src/plugins/dashboard/public/application/embeddable/index.ts @@ -36,6 +36,7 @@ export { DashboardContainer, DashboardContainerInput } from './dashboard_contain export { createPanelState } from './panel'; export * from './types'; +export * from './empty'; export { DASHBOARD_GRID_COLUMN_COUNT, diff --git a/src/plugins/dashboard/public/application/embeddable/panel/create_panel_state.test.ts b/src/plugins/dashboard/public/application/embeddable/panel/create_panel_state.test.ts index 43d15e2d3774..b6bfdc1c004d 100644 --- a/src/plugins/dashboard/public/application/embeddable/panel/create_panel_state.test.ts +++ b/src/plugins/dashboard/public/application/embeddable/panel/create_panel_state.test.ts @@ -31,8 +31,8 @@ import { DEFAULT_PANEL_HEIGHT, DEFAULT_PANEL_WIDTH } from '../dashboard_constants'; import { DashboardPanelState } from '../types'; import { createPanelState } from './create_panel_state'; -import { EmbeddableInput } from '../../../embeddable_plugin'; -import { CONTACT_CARD_EMBEDDABLE } from '../../../embeddable_plugin_test_samples'; +import { EmbeddableInput } from '../../../../../embeddable/public'; +import { CONTACT_CARD_EMBEDDABLE } from '../../../../../embeddable/public/lib/test_samples'; interface TestInput extends EmbeddableInput { test: string; diff --git a/src/plugins/dashboard/public/application/embeddable/panel/create_panel_state.ts b/src/plugins/dashboard/public/application/embeddable/panel/create_panel_state.ts index b99548a3e89c..6fba7b8397c4 100644 --- a/src/plugins/dashboard/public/application/embeddable/panel/create_panel_state.ts +++ b/src/plugins/dashboard/public/application/embeddable/panel/create_panel_state.ts @@ -28,7 +28,7 @@ * under the License. */ -import { PanelState, EmbeddableInput } from '../../../embeddable_plugin'; +import { PanelState, EmbeddableInput } from '../../../../../embeddable/public'; import { DEFAULT_PANEL_HEIGHT, DEFAULT_PANEL_WIDTH } from '../dashboard_constants'; import { DashboardPanelState } from '../types'; import { diff --git a/src/plugins/dashboard/public/application/embeddable/panel/dashboard_panel_placement.ts b/src/plugins/dashboard/public/application/embeddable/panel/dashboard_panel_placement.ts index 8cf277890cb1..690c2e2b75c7 100644 --- a/src/plugins/dashboard/public/application/embeddable/panel/dashboard_panel_placement.ts +++ b/src/plugins/dashboard/public/application/embeddable/panel/dashboard_panel_placement.ts @@ -29,7 +29,7 @@ */ import _ from 'lodash'; -import { PanelNotFoundError } from '../../../embeddable_plugin'; +import { PanelNotFoundError } from '../../../../../embeddable/public'; import { GridData } from '../../../../common'; import { DashboardPanelState, DASHBOARD_GRID_COLUMN_COUNT } from '..'; diff --git a/src/plugins/dashboard/public/application/embeddable/placeholder/placeholder_embeddable.tsx b/src/plugins/dashboard/public/application/embeddable/placeholder/placeholder_embeddable.tsx index 57ecde6b5ceb..60882b179214 100644 --- a/src/plugins/dashboard/public/application/embeddable/placeholder/placeholder_embeddable.tsx +++ b/src/plugins/dashboard/public/application/embeddable/placeholder/placeholder_embeddable.tsx @@ -32,7 +32,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { EuiLoadingChart } from '@elastic/eui'; import classNames from 'classnames'; -import { Embeddable, EmbeddableInput, IContainer } from '../../../embeddable_plugin'; +import { Embeddable, EmbeddableInput, IContainer } from '../../../../../embeddable/public'; export const PLACEHOLDER_EMBEDDABLE = 'placeholder'; diff --git a/src/plugins/dashboard/public/application/embeddable/placeholder/placeholder_embeddable_factory.ts b/src/plugins/dashboard/public/application/embeddable/placeholder/placeholder_embeddable_factory.ts index 9cf936443072..e89a8efbfa04 100644 --- a/src/plugins/dashboard/public/application/embeddable/placeholder/placeholder_embeddable_factory.ts +++ b/src/plugins/dashboard/public/application/embeddable/placeholder/placeholder_embeddable_factory.ts @@ -34,7 +34,7 @@ import { EmbeddableFactoryDefinition, EmbeddableInput, IContainer, -} from '../../../embeddable_plugin'; +} from '../../../../../embeddable/public'; import { PlaceholderEmbeddable, PLACEHOLDER_EMBEDDABLE } from './placeholder_embeddable'; export class PlaceholderEmbeddableFactory implements EmbeddableFactoryDefinition { diff --git a/src/plugins/dashboard/public/application/embeddable/types.ts b/src/plugins/dashboard/public/application/embeddable/types.ts index ed4f90bc6eb6..ffa810b6bc05 100644 --- a/src/plugins/dashboard/public/application/embeddable/types.ts +++ b/src/plugins/dashboard/public/application/embeddable/types.ts @@ -28,9 +28,12 @@ * under the License. */ -import { SavedObjectEmbeddableInput } from 'src/plugins/embeddable/public'; +import { + SavedObjectEmbeddableInput, + PanelState, + EmbeddableInput, +} from '../../../../embeddable/public'; import { GridData } from '../../../common'; -import { PanelState, EmbeddableInput } from '../../embeddable_plugin'; export type PanelId = string; export type SavedObjectId = string; diff --git a/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.test.tsx b/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.test.tsx index bc1b56b64bf8..f03ed95c9a37 100644 --- a/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.test.tsx +++ b/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.test.tsx @@ -41,9 +41,9 @@ import { getSampleDashboardInput } from '../../test_helpers'; import { CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddableFactory, -} from '../../../embeddable_plugin_test_samples'; +} from '../../../../../embeddable/public/lib/test_samples'; +import { embeddablePluginMock } from '../../../../../embeddable/public/mocks'; import { OpenSearchDashboardsContextProvider } from '../../../../../opensearch_dashboards_react/public'; -import { embeddablePluginMock } from 'src/plugins/embeddable/public/mocks'; import { applicationServiceMock } from '../../../../../../core/public/mocks'; sizeMe.noPlaceholders = true; diff --git a/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.tsx b/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.tsx index 2a98046b4d2c..f89c1179cad5 100644 --- a/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.tsx +++ b/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.tsx @@ -30,7 +30,7 @@ import React from 'react'; import { Subscription } from 'rxjs'; -import { PanelState, EmbeddableStart } from '../../../embeddable_plugin'; +import { PanelState, EmbeddableStart } from '../../../../../embeddable/public'; import { DashboardContainer, DashboardReactContextValue } from '../dashboard_container'; import { DashboardGrid } from '../grid'; import { context } from '../../../../../opensearch_dashboards_react/public'; diff --git a/src/plugins/dashboard/public/application/embeddable/viewport/index.ts b/src/plugins/dashboard/public/application/embeddable/viewport/index.ts new file mode 100644 index 000000000000..62b87a159113 --- /dev/null +++ b/src/plugins/dashboard/public/application/embeddable/viewport/index.ts @@ -0,0 +1,6 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +export { DashboardViewport, DashboardViewportProps } from './dashboard_viewport'; diff --git a/src/plugins/dashboard/public/application/index.scss b/src/plugins/dashboard/public/application/index.scss index bc959543e406..c3d13ce48307 100644 --- a/src/plugins/dashboard/public/application/index.scss +++ b/src/plugins/dashboard/public/application/index.scss @@ -3,9 +3,6 @@ @import "./embeddable/panel/index"; @import "./embeddable/viewport/index"; -// Temporary hacks -@import "./hacks"; - // Prefix all styles with "dsh" to avoid conflicts. // Examples // dshChart diff --git a/src/plugins/dashboard/public/application/index.tsx b/src/plugins/dashboard/public/application/index.tsx index 366366eb83d8..4b46fd058a3f 100644 --- a/src/plugins/dashboard/public/application/index.tsx +++ b/src/plugins/dashboard/public/application/index.tsx @@ -8,7 +8,7 @@ import ReactDOM from 'react-dom'; import { Router } from 'react-router-dom'; import { AppMountParameters } from 'opensearch-dashboards/public'; import { OpenSearchDashboardsContextProvider } from '../../../opensearch_dashboards_react/public'; -import { addHelpMenuToAppChrome } from './help_menu/help_menu_util'; +import { addHelpMenuToAppChrome } from './utils'; import { DashboardApp } from './app'; import { DashboardServices } from '../types'; export * from './embeddable'; diff --git a/src/plugins/dashboard/public/application/lib/index.ts b/src/plugins/dashboard/public/application/lib/index.ts deleted file mode 100644 index e64b0d4c0c49..000000000000 --- a/src/plugins/dashboard/public/application/lib/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Any modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ - -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export { saveDashboard } from './save_dashboard'; -export { getAppStateDefaults } from './get_app_state_defaults'; -export { migrateAppState } from './migrate_app_state'; -export { getDashboardIdFromUrl } from './url'; diff --git a/src/plugins/dashboard/public/application/listing/__snapshots__/dashboard_listing.test.js.snap b/src/plugins/dashboard/public/application/listing/__snapshots__/dashboard_listing.test.js.snap deleted file mode 100644 index 8ad036fc120c..000000000000 --- a/src/plugins/dashboard/public/application/listing/__snapshots__/dashboard_listing.test.js.snap +++ /dev/null @@ -1,743 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`after fetch hideWriteControls 1`] = ` - - - - - - } - /> - - } - tableColumns={ - Array [ - Object { - "field": "title", - "name": "Title", - "render": [Function], - "sortable": true, - }, - Object { - "dataType": "string", - "field": "type", - "name": "Type", - "sortable": true, - }, - Object { - "dataType": "string", - "field": "description", - "name": "Description", - "sortable": true, - }, - Object { - "data-test-subj": "updated-at", - "dataType": "date", - "description": "Last update of the saved object", - "field": "updated_at", - "name": "Last updated", - "render": [Function], - "sortable": true, - }, - ] - } - tableListTitle="Dashboards" - toastNotifications={Object {}} - uiSettings={ - Object { - "get": [MockFunction] { - "calls": Array [ - Array [ - "dateFormat", - ], - ], - "results": Array [ - Object { - "type": "return", - "value": 10, - }, - ], - }, - } - } - viewItem={null} - /> - -`; - -exports[`after fetch initialFilter 1`] = ` - - } - createItem={[Function]} - deleteItems={[Function]} - editItem={[Function]} - entityName="dashboard" - entityNamePlural="dashboards" - findItems={[Function]} - headingId="dashboardListingHeading" - initialFilter="my dashboard" - initialPageSize={10} - listingLimit={1000} - noItemsFragment={ -
- - - - } - body={ - -

- -

-

- - - , - } - } - /> -

-
- } - iconType="dashboardApp" - title={ -

- -

- } - /> -
- } - tableColumns={ - Array [ - Object { - "field": "title", - "name": "Title", - "render": [Function], - "sortable": true, - }, - Object { - "dataType": "string", - "field": "type", - "name": "Type", - "sortable": true, - }, - Object { - "dataType": "string", - "field": "description", - "name": "Description", - "sortable": true, - }, - Object { - "data-test-subj": "updated-at", - "dataType": "date", - "description": "Last update of the saved object", - "field": "updated_at", - "name": "Last updated", - "render": [Function], - "sortable": true, - }, - ] - } - tableListTitle="Dashboards" - toastNotifications={Object {}} - uiSettings={ - Object { - "get": [MockFunction] { - "calls": Array [ - Array [ - "dateFormat", - ], - ], - "results": Array [ - Object { - "type": "return", - "value": 10, - }, - ], - }, - } - } - viewItem={[Function]} - /> -
-`; - -exports[`after fetch renders call to action when no dashboards exist 1`] = ` - - } - createItem={[Function]} - deleteItems={[Function]} - editItem={[Function]} - entityName="dashboard" - entityNamePlural="dashboards" - findItems={[Function]} - headingId="dashboardListingHeading" - initialFilter="" - initialPageSize={10} - listingLimit={1} - noItemsFragment={ -
- - - - } - body={ - -

- -

-

- - - , - } - } - /> -

-
- } - iconType="dashboardApp" - title={ -

- -

- } - /> -
- } - tableColumns={ - Array [ - Object { - "field": "title", - "name": "Title", - "render": [Function], - "sortable": true, - }, - Object { - "dataType": "string", - "field": "type", - "name": "Type", - "sortable": true, - }, - Object { - "dataType": "string", - "field": "description", - "name": "Description", - "sortable": true, - }, - Object { - "data-test-subj": "updated-at", - "dataType": "date", - "description": "Last update of the saved object", - "field": "updated_at", - "name": "Last updated", - "render": [Function], - "sortable": true, - }, - ] - } - tableListTitle="Dashboards" - toastNotifications={Object {}} - uiSettings={ - Object { - "get": [MockFunction] { - "calls": Array [ - Array [ - "dateFormat", - ], - ], - "results": Array [ - Object { - "type": "return", - "value": 10, - }, - ], - }, - } - } - viewItem={[Function]} - /> -
-`; - -exports[`after fetch renders table rows 1`] = ` - - } - createItem={[Function]} - deleteItems={[Function]} - editItem={[Function]} - entityName="dashboard" - entityNamePlural="dashboards" - findItems={[Function]} - headingId="dashboardListingHeading" - initialFilter="" - initialPageSize={10} - listingLimit={1000} - noItemsFragment={ -
- - - - } - body={ - -

- -

-

- - - , - } - } - /> -

-
- } - iconType="dashboardApp" - title={ -

- -

- } - /> -
- } - tableColumns={ - Array [ - Object { - "field": "title", - "name": "Title", - "render": [Function], - "sortable": true, - }, - Object { - "dataType": "string", - "field": "type", - "name": "Type", - "sortable": true, - }, - Object { - "dataType": "string", - "field": "description", - "name": "Description", - "sortable": true, - }, - Object { - "data-test-subj": "updated-at", - "dataType": "date", - "description": "Last update of the saved object", - "field": "updated_at", - "name": "Last updated", - "render": [Function], - "sortable": true, - }, - ] - } - tableListTitle="Dashboards" - toastNotifications={Object {}} - uiSettings={ - Object { - "get": [MockFunction] { - "calls": Array [ - Array [ - "dateFormat", - ], - ], - "results": Array [ - Object { - "type": "return", - "value": 10, - }, - ], - }, - } - } - viewItem={[Function]} - /> -
-`; - -exports[`after fetch renders warning when listingLimit is exceeded 1`] = ` - - } - createItem={[Function]} - deleteItems={[Function]} - editItem={[Function]} - entityName="dashboard" - entityNamePlural="dashboards" - findItems={[Function]} - headingId="dashboardListingHeading" - initialFilter="" - initialPageSize={10} - listingLimit={1} - noItemsFragment={ -
- - - - } - body={ - -

- -

-

- - - , - } - } - /> -

-
- } - iconType="dashboardApp" - title={ -

- -

- } - /> -
- } - tableColumns={ - Array [ - Object { - "field": "title", - "name": "Title", - "render": [Function], - "sortable": true, - }, - Object { - "dataType": "string", - "field": "type", - "name": "Type", - "sortable": true, - }, - Object { - "dataType": "string", - "field": "description", - "name": "Description", - "sortable": true, - }, - Object { - "data-test-subj": "updated-at", - "dataType": "date", - "description": "Last update of the saved object", - "field": "updated_at", - "name": "Last updated", - "render": [Function], - "sortable": true, - }, - ] - } - tableListTitle="Dashboards" - toastNotifications={Object {}} - uiSettings={ - Object { - "get": [MockFunction] { - "calls": Array [ - Array [ - "dateFormat", - ], - ], - "results": Array [ - Object { - "type": "return", - "value": 10, - }, - ], - }, - } - } - viewItem={[Function]} - /> -
-`; - -exports[`renders empty page in before initial fetch to avoid flickering 1`] = ` - - } - createItem={[Function]} - deleteItems={[Function]} - editItem={[Function]} - entityName="dashboard" - entityNamePlural="dashboards" - findItems={[Function]} - headingId="dashboardListingHeading" - initialFilter="" - initialPageSize={10} - listingLimit={1000} - noItemsFragment={ -
- - - - } - body={ - -

- -

-

- - - , - } - } - /> -

-
- } - iconType="dashboardApp" - title={ -

- -

- } - /> -
- } - tableColumns={ - Array [ - Object { - "field": "title", - "name": "Title", - "render": [Function], - "sortable": true, - }, - Object { - "dataType": "string", - "field": "type", - "name": "Type", - "sortable": true, - }, - Object { - "dataType": "string", - "field": "description", - "name": "Description", - "sortable": true, - }, - Object { - "data-test-subj": "updated-at", - "dataType": "date", - "description": "Last update of the saved object", - "field": "updated_at", - "name": "Last updated", - "render": [Function], - "sortable": true, - }, - ] - } - tableListTitle="Dashboards" - toastNotifications={Object {}} - uiSettings={ - Object { - "get": [MockFunction] { - "calls": Array [ - Array [ - "dateFormat", - ], - ], - "results": Array [ - Object { - "type": "return", - "value": 10, - }, - ], - }, - } - } - viewItem={[Function]} - /> -
-`; diff --git a/src/plugins/dashboard/public/application/test_helpers/get_sample_dashboard_input.ts b/src/plugins/dashboard/public/application/test_helpers/get_sample_dashboard_input.ts index 931c2395cd50..1cfddf2a571f 100644 --- a/src/plugins/dashboard/public/application/test_helpers/get_sample_dashboard_input.ts +++ b/src/plugins/dashboard/public/application/test_helpers/get_sample_dashboard_input.ts @@ -28,7 +28,7 @@ * under the License. */ -import { ViewMode, EmbeddableInput } from '../../embeddable_plugin'; +import { ViewMode, EmbeddableInput } from '../../../../embeddable/public'; import { DashboardContainerInput, DashboardPanelState } from '../embeddable'; export function getSampleDashboardInput( diff --git a/src/plugins/dashboard/public/application/tests/dashboard_container.test.tsx b/src/plugins/dashboard/public/application/tests/dashboard_container.test.tsx deleted file mode 100644 index d3198f6e1e31..000000000000 --- a/src/plugins/dashboard/public/application/tests/dashboard_container.test.tsx +++ /dev/null @@ -1,136 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Any modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ - -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { findTestSubject } from '@elastic/eui/lib/test'; -import React from 'react'; -import { mount } from 'enzyme'; -import { nextTick } from 'test_utils/enzyme_helpers'; -import { I18nProvider } from '@osd/i18n/react'; -import { ViewMode, CONTEXT_MENU_TRIGGER, EmbeddablePanel } from '../../embeddable_plugin'; -import { DashboardContainer, DashboardContainerOptions } from '../embeddable/dashboard_container'; -import { getSampleDashboardInput } from '../test_helpers'; -import { - CONTACT_CARD_EMBEDDABLE, - ContactCardEmbeddableFactory, - ContactCardEmbeddableInput, - ContactCardEmbeddable, - ContactCardEmbeddableOutput, - createEditModeAction, -} from '../../embeddable_plugin_test_samples'; -import { embeddablePluginMock } from '../../../../embeddable/public/mocks'; -import { inspectorPluginMock } from '../../../../inspector/public/mocks'; -import { OpenSearchDashboardsContextProvider } from '../../../../opensearch_dashboards_react/public'; -import { uiActionsPluginMock } from '../../../../ui_actions/public/mocks'; -import { applicationServiceMock } from '../../../../../core/public/mocks'; - -test('DashboardContainer in edit mode shows edit mode actions', async () => { - const inspector = inspectorPluginMock.createStartContract(); - const { setup, doStart } = embeddablePluginMock.createInstance(); - const uiActionsSetup = uiActionsPluginMock.createSetupContract(); - - const editModeAction = createEditModeAction(); - uiActionsSetup.registerAction(editModeAction); - uiActionsSetup.addTriggerAction(CONTEXT_MENU_TRIGGER, editModeAction); - setup.registerEmbeddableFactory( - CONTACT_CARD_EMBEDDABLE, - new ContactCardEmbeddableFactory((() => null) as any, {} as any) - ); - - const start = doStart(); - - const initialInput = getSampleDashboardInput({ viewMode: ViewMode.VIEW }); - const options: DashboardContainerOptions = { - application: applicationServiceMock.createStartContract(), - embeddable: start, - notifications: {} as any, - overlays: {} as any, - inspector: {} as any, - SavedObjectFinder: () => null, - ExitFullScreenButton: () => null, - uiActions: {} as any, - }; - const container = new DashboardContainer(initialInput, options); - - const embeddable = await container.addNewEmbeddable< - ContactCardEmbeddableInput, - ContactCardEmbeddableOutput, - ContactCardEmbeddable - >(CONTACT_CARD_EMBEDDABLE, { - firstName: 'Bob', - }); - - const component = mount( - - - Promise.resolve([])} - getAllEmbeddableFactories={(() => []) as any} - getEmbeddableFactory={(() => null) as any} - notifications={{} as any} - application={options.application} - overlays={{} as any} - inspector={inspector} - SavedObjectFinder={() => null} - /> - - - ); - - const button = findTestSubject(component, 'embeddablePanelToggleMenuIcon'); - - expect(button.length).toBe(1); - findTestSubject(component, 'embeddablePanelToggleMenuIcon').simulate('click'); - - expect(findTestSubject(component, `embeddablePanelContextMenuOpen`).length).toBe(1); - - const editAction = findTestSubject(component, `embeddablePanelAction-${editModeAction.id}`); - - expect(editAction.length).toBe(0); - - container.updateInput({ viewMode: ViewMode.EDIT }); - await nextTick(); - component.update(); - findTestSubject(component, 'embeddablePanelToggleMenuIcon').simulate('click'); - await nextTick(); - component.update(); - expect(findTestSubject(component, 'embeddablePanelContextMenuOpen').length).toBe(0); - findTestSubject(component, 'embeddablePanelToggleMenuIcon').simulate('click'); - await nextTick(); - component.update(); - expect(findTestSubject(component, 'embeddablePanelContextMenuOpen').length).toBe(1); - - await nextTick(); - component.update(); - - // TODO: Address this. - // const action = findTestSubject(component, `embeddablePanelAction-${editModeAction.id}`); - // expect(action.length).toBe(1); -}); diff --git a/src/plugins/dashboard/public/application/utils/breadcrumbs.ts b/src/plugins/dashboard/public/application/utils/breadcrumbs.ts index 55934ead7f3d..fa9cef188e57 100644 --- a/src/plugins/dashboard/public/application/utils/breadcrumbs.ts +++ b/src/plugins/dashboard/public/application/utils/breadcrumbs.ts @@ -5,7 +5,7 @@ import { i18n } from '@osd/i18n'; import { DashboardConstants } from '../../dashboard_constants'; -import { ViewMode } from '../../embeddable_plugin'; +import { ViewMode } from '../../../../embeddable/public'; export function getLandingBreadcrumbs() { return [ diff --git a/src/plugins/dashboard/public/application/utils/create_dashboard_app_state.tsx b/src/plugins/dashboard/public/application/utils/create_dashboard_app_state.tsx index 09b541a5e29b..bd6d55b8bc03 100644 --- a/src/plugins/dashboard/public/application/utils/create_dashboard_app_state.tsx +++ b/src/plugins/dashboard/public/application/utils/create_dashboard_app_state.tsx @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { migrateAppState } from '../lib/migrate_app_state'; +import { migrateAppState } from '../utils/migrate_app_state'; import { IOsdUrlStateStorage, createStateContainer, @@ -15,8 +15,8 @@ import { DashboardAppStateInUrl, DashboardServices, } from '../../types'; -import { ViewMode } from '../../embeddable_plugin'; -import { getDashboardIdFromUrl } from '../lib'; +import { ViewMode } from '../../../../embeddable/public'; +import { getDashboardIdFromUrl } from '../utils'; import { syncQueryStateWithUrl } from '../../../../data/public'; import { SavedObjectDashboard } from '../../saved_dashboards'; diff --git a/src/plugins/dashboard/public/application/utils/create_dashboard_container.tsx b/src/plugins/dashboard/public/application/utils/create_dashboard_container.tsx index 42ec3460ce24..1c5b06f54e57 100644 --- a/src/plugins/dashboard/public/application/utils/create_dashboard_container.tsx +++ b/src/plugins/dashboard/public/application/utils/create_dashboard_container.tsx @@ -24,6 +24,8 @@ import { DashboardContainer, DashboardContainerInput, DashboardPanelState, + DashboardEmptyScreen, + DashboardEmptyScreenProps, } from '../embeddable'; import { ContainerOutput, @@ -32,12 +34,11 @@ import { ViewMode, isErrorEmbeddable, openAddPanelFlyout, -} from '../../embeddable_plugin'; +} from '../../../../embeddable/public'; import { convertPanelStateToSavedDashboardPanel, convertSavedDashboardPanelToPanelState, -} from '../lib/embeddable_saved_object_converters'; -import { DashboardEmptyScreen, DashboardEmptyScreenProps } from '../dashboard_empty_screen'; +} from '../utils/embeddable_saved_object_converters'; import { DashboardAppState, DashboardAppStateContainer, @@ -47,7 +48,7 @@ import { import { getSavedObjectFinder } from '../../../../saved_objects/public'; import { DashboardConstants } from '../../dashboard_constants'; import { SavedObjectDashboard } from '../../saved_dashboards'; -import { migrateLegacyQuery } from '../lib/migrate_legacy_query'; +import { migrateLegacyQuery } from '../utils/migrate_legacy_query'; import { Dashboard } from '../../dashboard'; export const createDashboardContainer = async ({ diff --git a/src/plugins/dashboard/public/application/lib/embeddable_saved_object_converters.test.ts b/src/plugins/dashboard/public/application/utils/embeddable_saved_object_converters.test.ts similarity index 100% rename from src/plugins/dashboard/public/application/lib/embeddable_saved_object_converters.test.ts rename to src/plugins/dashboard/public/application/utils/embeddable_saved_object_converters.test.ts diff --git a/src/plugins/dashboard/public/application/lib/embeddable_saved_object_converters.ts b/src/plugins/dashboard/public/application/utils/embeddable_saved_object_converters.ts similarity index 97% rename from src/plugins/dashboard/public/application/lib/embeddable_saved_object_converters.ts rename to src/plugins/dashboard/public/application/utils/embeddable_saved_object_converters.ts index 24630e40500d..8087d236097d 100644 --- a/src/plugins/dashboard/public/application/lib/embeddable_saved_object_converters.ts +++ b/src/plugins/dashboard/public/application/utils/embeddable_saved_object_converters.ts @@ -31,7 +31,7 @@ import { omit } from 'lodash'; import { SavedDashboardPanel } from '../../types'; import { DashboardPanelState } from '../embeddable'; -import { SavedObjectEmbeddableInput } from '../../embeddable_plugin'; +import { SavedObjectEmbeddableInput } from '../../../../embeddable/public'; export function convertSavedDashboardPanelToPanelState( savedDashboardPanel: SavedDashboardPanel diff --git a/src/plugins/dashboard/public/application/lib/filter_utils.ts b/src/plugins/dashboard/public/application/utils/filter_utils.ts similarity index 100% rename from src/plugins/dashboard/public/application/lib/filter_utils.ts rename to src/plugins/dashboard/public/application/utils/filter_utils.ts diff --git a/src/plugins/dashboard/public/application/lib/get_app_state_defaults.ts b/src/plugins/dashboard/public/application/utils/get_app_state_defaults.ts similarity index 96% rename from src/plugins/dashboard/public/application/lib/get_app_state_defaults.ts rename to src/plugins/dashboard/public/application/utils/get_app_state_defaults.ts index 95e5d70be438..a5bd1b0a1bd0 100644 --- a/src/plugins/dashboard/public/application/lib/get_app_state_defaults.ts +++ b/src/plugins/dashboard/public/application/utils/get_app_state_defaults.ts @@ -28,7 +28,7 @@ * under the License. */ -import { ViewMode } from '../../embeddable_plugin'; +import { ViewMode } from '../../../../embeddable/public'; import { SavedObjectDashboard } from '../../saved_dashboards'; import { DashboardAppStateDefaults } from '../../types'; diff --git a/src/plugins/dashboard/public/application/utils/get_nav_actions.tsx b/src/plugins/dashboard/public/application/utils/get_nav_actions.tsx index 748e593ac377..3f823f52676d 100644 --- a/src/plugins/dashboard/public/application/utils/get_nav_actions.tsx +++ b/src/plugins/dashboard/public/application/utils/get_nav_actions.tsx @@ -14,22 +14,24 @@ import { showSaveModal, } from '../../../../saved_objects/public'; import { DashboardAppStateContainer, DashboardServices, NavAction } from '../../types'; -import { DashboardSaveModal } from '../top_nav/save_modal'; -import { TopNavIds } from '../top_nav/top_nav_ids'; +import { + DashboardSaveModal, + TopNavIds, + showCloneModal, + showOptionsPopover, + UrlParams, +} from '../components/dashboard_top_nav'; import { EmbeddableFactoryNotFoundError, EmbeddableInput, ViewMode, isErrorEmbeddable, openAddPanelFlyout, -} from '../../embeddable_plugin'; -import { showCloneModal } from '../top_nav/show_clone_modal'; -import { showOptionsPopover } from '../top_nav/show_options_popover'; -import { saveDashboard } from '../lib'; +} from '../../../../embeddable/public'; +import { saveDashboard } from '../utils'; import { DashboardContainer } from '../embeddable/dashboard_container'; import { DashboardConstants, createDashboardEditUrl } from '../../dashboard_constants'; import { unhashUrl } from '../../../../opensearch_dashboards_utils/public'; -import { UrlParams } from '../components/dashboard_top_nav'; import { Dashboard } from '../../dashboard'; interface UrlParamsSelectedMap { diff --git a/src/plugins/dashboard/public/application/help_menu/help_menu_util.ts b/src/plugins/dashboard/public/application/utils/help_menu_util.ts similarity index 100% rename from src/plugins/dashboard/public/application/help_menu/help_menu_util.ts rename to src/plugins/dashboard/public/application/utils/help_menu_util.ts diff --git a/src/plugins/dashboard/public/application/utils/index.ts b/src/plugins/dashboard/public/application/utils/index.ts index 3f96a94264bb..c39da5a9e6be 100644 --- a/src/plugins/dashboard/public/application/utils/index.ts +++ b/src/plugins/dashboard/public/application/utils/index.ts @@ -8,3 +8,9 @@ export * from './get_nav_actions'; export * from './get_no_items_message'; export * from './get_table_columns'; export * from './use'; + +export { addHelpMenuToAppChrome } from './help_menu_util'; +export { saveDashboard } from './save_dashboard'; +export { getAppStateDefaults } from './get_app_state_defaults'; +export { migrateAppState } from './migrate_app_state'; +export { getDashboardIdFromUrl } from './url'; diff --git a/src/plugins/dashboard/public/application/lib/migrate_app_state.test.ts b/src/plugins/dashboard/public/application/utils/migrate_app_state.test.ts similarity index 100% rename from src/plugins/dashboard/public/application/lib/migrate_app_state.test.ts rename to src/plugins/dashboard/public/application/utils/migrate_app_state.test.ts diff --git a/src/plugins/dashboard/public/application/lib/migrate_app_state.ts b/src/plugins/dashboard/public/application/utils/migrate_app_state.ts similarity index 100% rename from src/plugins/dashboard/public/application/lib/migrate_app_state.ts rename to src/plugins/dashboard/public/application/utils/migrate_app_state.ts diff --git a/src/plugins/dashboard/public/application/lib/migrate_legacy_query.ts b/src/plugins/dashboard/public/application/utils/migrate_legacy_query.ts similarity index 100% rename from src/plugins/dashboard/public/application/lib/migrate_legacy_query.ts rename to src/plugins/dashboard/public/application/utils/migrate_legacy_query.ts diff --git a/src/plugins/dashboard/public/application/lib/save_dashboard.ts b/src/plugins/dashboard/public/application/utils/save_dashboard.ts similarity index 100% rename from src/plugins/dashboard/public/application/lib/save_dashboard.ts rename to src/plugins/dashboard/public/application/utils/save_dashboard.ts diff --git a/src/plugins/dashboard/public/application/utils/stubs.ts b/src/plugins/dashboard/public/application/utils/stubs.ts index c101f30f4f10..6ed04ea2b00d 100644 --- a/src/plugins/dashboard/public/application/utils/stubs.ts +++ b/src/plugins/dashboard/public/application/utils/stubs.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { ViewMode } from '../../embeddable_plugin'; +import { ViewMode } from '../../../../embeddable/public'; import { DashboardAppState } from '../../types'; export const dashboardAppStateStub: DashboardAppState = { diff --git a/src/plugins/dashboard/public/application/lib/update_saved_dashboard.ts b/src/plugins/dashboard/public/application/utils/update_saved_dashboard.ts similarity index 100% rename from src/plugins/dashboard/public/application/lib/update_saved_dashboard.ts rename to src/plugins/dashboard/public/application/utils/update_saved_dashboard.ts diff --git a/src/plugins/dashboard/public/application/lib/url.test.ts b/src/plugins/dashboard/public/application/utils/url.test.ts similarity index 100% rename from src/plugins/dashboard/public/application/lib/url.test.ts rename to src/plugins/dashboard/public/application/utils/url.test.ts diff --git a/src/plugins/dashboard/public/application/lib/url.ts b/src/plugins/dashboard/public/application/utils/url.ts similarity index 100% rename from src/plugins/dashboard/public/application/lib/url.ts rename to src/plugins/dashboard/public/application/utils/url.ts diff --git a/src/plugins/dashboard/public/application/utils/use/use_dashboard_app_state.tsx b/src/plugins/dashboard/public/application/utils/use/use_dashboard_app_state.tsx index e8655a889e4b..84be8484023e 100644 --- a/src/plugins/dashboard/public/application/utils/use/use_dashboard_app_state.tsx +++ b/src/plugins/dashboard/public/application/utils/use/use_dashboard_app_state.tsx @@ -9,11 +9,11 @@ import { cloneDeep } from 'lodash'; import { map } from 'rxjs/operators'; import { Subscription, merge } from 'rxjs'; import { IndexPattern, connectToQueryState, opensearchFilters } from '../../../../../data/public'; -import { migrateLegacyQuery } from '../../lib/migrate_legacy_query'; +import { migrateLegacyQuery } from '../../utils/migrate_legacy_query'; import { DashboardServices } from '../../../types'; import { DashboardAppStateContainer } from '../../../types'; -import { migrateAppState, getAppStateDefaults } from '../../lib'; +import { migrateAppState, getAppStateDefaults } from '../../utils'; import { createDashboardGlobalAndAppState, updateStateUrl } from '../create_dashboard_app_state'; import { SavedObjectDashboard } from '../../../saved_dashboards'; import { diff --git a/src/plugins/dashboard/public/application/utils/use/use_editor_updates.test.ts b/src/plugins/dashboard/public/application/utils/use/use_editor_updates.test.ts index 35ef05c74452..0e19a01d9ce9 100644 --- a/src/plugins/dashboard/public/application/utils/use/use_editor_updates.test.ts +++ b/src/plugins/dashboard/public/application/utils/use/use_editor_updates.test.ts @@ -14,7 +14,7 @@ import { createDashboardServicesMock } from '../mocks'; import { Dashboard } from '../../../dashboard'; import { convertToSerializedDashboard } from '../../../saved_dashboards/_saved_dashboard'; import { setBreadcrumbsForExistingDashboard, setBreadcrumbsForNewDashboard } from '../breadcrumbs'; -import { ViewMode } from '../../../embeddable_plugin'; +import { ViewMode } from '../../../../../embeddable/public'; describe('useEditorUpdates', () => { const eventEmitter = new EventEmitter(); diff --git a/src/plugins/dashboard/public/attribute_service/attribute_service.tsx b/src/plugins/dashboard/public/attribute_service/attribute_service.tsx index 2588793fe7f7..2690ebc5e2e3 100644 --- a/src/plugins/dashboard/public/attribute_service/attribute_service.tsx +++ b/src/plugins/dashboard/public/attribute_service/attribute_service.tsx @@ -39,7 +39,7 @@ import { Container, EmbeddableStart, EmbeddableFactoryNotFoundError, -} from '../embeddable_plugin'; +} from '../../../embeddable/public'; import { I18nStart, NotificationsStart } from '../../../../core/public'; import { SavedObjectSaveModal, OnSaveProps, SaveResult } from '../../../saved_objects/public'; diff --git a/src/plugins/dashboard/public/embeddable_plugin.ts b/src/plugins/dashboard/public/embeddable_plugin.ts deleted file mode 100644 index 3ede8156ee81..000000000000 --- a/src/plugins/dashboard/public/embeddable_plugin.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Any modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ - -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export * from '../../../plugins/embeddable/public'; diff --git a/src/plugins/dashboard/public/embeddable_plugin_test_samples.ts b/src/plugins/dashboard/public/embeddable_plugin_test_samples.ts deleted file mode 100644 index a3fc916e8308..000000000000 --- a/src/plugins/dashboard/public/embeddable_plugin_test_samples.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Any modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ - -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export * from '../../../plugins/embeddable/public/lib/test_samples'; diff --git a/src/plugins/dashboard/public/types.ts b/src/plugins/dashboard/public/types.ts index c888eb87c599..d8eaada6d627 100644 --- a/src/plugins/dashboard/public/types.ts +++ b/src/plugins/dashboard/public/types.ts @@ -52,8 +52,8 @@ import { SharePluginStart } from 'src/plugins/share/public'; import { UsageCollectionSetup } from 'src/plugins/usage_collection/public'; import { UrlForwardingStart } from 'src/plugins/url_forwarding/public'; import { History } from 'history'; +import { EmbeddableStart, ViewMode } from '../../embeddable/public'; import { NavigationPublicPluginStart as NavigationStart } from '../../navigation/public'; -import { EmbeddableStart, ViewMode } from './embeddable_plugin'; import { SavedDashboardPanel730ToLatest } from '../common'; export interface DashboardCapabilities { diff --git a/src/plugins/dashboard/public/ui_actions_plugin.ts b/src/plugins/dashboard/public/ui_actions_plugin.ts deleted file mode 100644 index 7e4578a641e5..000000000000 --- a/src/plugins/dashboard/public/ui_actions_plugin.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Any modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ - -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export * from '../../../plugins/ui_actions/public'; diff --git a/src/plugins/home/server/services/sample_data/data_sets/ecommerce/saved_objects.ts b/src/plugins/home/server/services/sample_data/data_sets/ecommerce/saved_objects.ts index 81fb2fa21256..3f00636e022b 100644 --- a/src/plugins/home/server/services/sample_data/data_sets/ecommerce/saved_objects.ts +++ b/src/plugins/home/server/services/sample_data/data_sets/ecommerce/saved_objects.ts @@ -131,7 +131,7 @@ export const getSavedObjects = (): SavedObject[] => [ defaultMessage: '[eCommerce] Promotion Tracking', }), visState: - '{"title":"[eCommerce] Promotion Tracking","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"timeseries","series":[{"id":"ea20ae70-b88d-11e8-a451-f37365e9f268","color":"rgba(240,138,217,1)","split_mode":"everything","metrics":[{"id":"ea20ae71-b88d-11e8-a451-f37365e9f268","type":"sum","field":"taxful_total_price"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":"0.7","stacked":"none","filter":"products.product_name:*trouser*","label":"Revenue Trousers","value_template":"${{value}}"},{"id":"062d77b0-b88e-11e8-a451-f37365e9f268","color":"rgba(191,240,129,1)","split_mode":"everything","metrics":[{"id":"062d77b1-b88e-11e8-a451-f37365e9f268","type":"sum","field":"taxful_total_price"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":"0.7","stacked":"none","filter":"products.product_name:*watch*","label":"Revenue Watches","value_template":"${{value}}"},{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"rgba(23,233,230,1)","split_mode":"everything","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"sum","field":"taxful_total_price"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":"0.7","stacked":"none","filter":"products.product_name:*bag*","label":"Revenue Bags","value_template":"${{value}}"},{"id":"faa2c170-b88d-11e8-a451-f37365e9f268","color":"rgba(235,186,180,1)","split_mode":"everything","metrics":[{"id":"faa2c171-b88d-11e8-a451-f37365e9f268","type":"sum","field":"taxful_total_price"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":"0.7","stacked":"none","filter":"products.product_name:*cocktail dress*","label":"Revenue Cocktail Dresses","value_template":"${{value}}"}],"time_field":"order_date","index_pattern":"opensearch_dashboards_sample_data_ecommerce","interval":">=12h","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"legend_position":"bottom","annotations":[{"fields":"taxful_total_price","template":"Ring the bell! ${{taxful_total_price}}","index_pattern":"opensearch_dashboards_sample_data_ecommerce","query_string":"taxful_total_price:>250","id":"c8c30be0-b88f-11e8-a451-f37365e9f268","color":"rgba(25,77,51,1)","time_field":"order_date","icon":"fa-bell","ignore_global_filters":1,"ignore_panel_filters":1}]},"aggs":[]}', + '{"title":"[eCommerce] Promotion Tracking","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"timeseries","series":[{"id":"ea20ae70-b88d-11e8-a451-f37365e9f268","color":"#54B399","split_mode":"everything","metrics":[{"id":"ea20ae71-b88d-11e8-a451-f37365e9f268","type":"sum","field":"taxful_total_price"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":"0.7","stacked":"none","filter":"products.product_name:*trouser*","label":"Revenue Trousers","value_template":"${{value}}"},{"id":"062d77b0-b88e-11e8-a451-f37365e9f268","color":"#6092C0","split_mode":"everything","metrics":[{"id":"062d77b1-b88e-11e8-a451-f37365e9f268","type":"sum","field":"taxful_total_price"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":"0.7","stacked":"none","filter":"products.product_name:*watch*","label":"Revenue Watches","value_template":"${{value}}"},{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#D36086","split_mode":"everything","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"sum","field":"taxful_total_price"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":"0.7","stacked":"none","filter":"products.product_name:*bag*","label":"Revenue Bags","value_template":"${{value}}"},{"id":"faa2c170-b88d-11e8-a451-f37365e9f268","color":"#9170B8","split_mode":"everything","metrics":[{"id":"faa2c171-b88d-11e8-a451-f37365e9f268","type":"sum","field":"taxful_total_price"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":"0.7","stacked":"none","filter":"products.product_name:*cocktail dress*","label":"Revenue Cocktail Dresses","value_template":"${{value}}"}],"time_field":"order_date","index_pattern":"opensearch_dashboards_sample_data_ecommerce","interval":">=12h","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"legend_position":"bottom","annotations":[{"fields":"taxful_total_price","template":"Ring the bell! ${{taxful_total_price}}","index_pattern":"opensearch_dashboards_sample_data_ecommerce","query_string":"taxful_total_price:>250","id":"c8c30be0-b88f-11e8-a451-f37365e9f268","color":"#E7664C","time_field":"order_date","icon":"fa-bell","ignore_global_filters":1,"ignore_panel_filters":1}]},"aggs":[]}', uiStateJSON: '{}', description: '', version: 1, @@ -174,7 +174,7 @@ export const getSavedObjects = (): SavedObject[] => [ defaultMessage: '[eCommerce] Sold Products per Day', }), visState: - '{"title":"[eCommerce] Sold Products per Day","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"gauge","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#68BC00","split_mode":"everything","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"count"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Trxns / day"}],"time_field":"order_date","index_pattern":"opensearch_dashboards_sample_data_ecommerce","interval":"1d","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"gauge_color_rules":[{"value":150,"id":"6da070c0-b891-11e8-b645-195edeb9de84","gauge":"rgba(104,188,0,1)","operator":"gte"},{"value":150,"id":"9b0cdbc0-b891-11e8-b645-195edeb9de84","gauge":"rgba(244,78,59,1)","operator":"lt"}],"gauge_width":"15","gauge_inner_width":10,"gauge_style":"half","filter":"","gauge_max":"300"},"aggs":[]}', + '{"title":"[eCommerce] Sold Products per Day","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"gauge","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"count"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Trxns / day"}],"time_field":"order_date","index_pattern":"opensearch_dashboards_sample_data_ecommerce","interval":"1d","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"gauge_color_rules":[{"value":150,"id":"6da070c0-b891-11e8-b645-195edeb9de84","gauge":"#54B399","operator":"gte"},{"value":150,"id":"9b0cdbc0-b891-11e8-b645-195edeb9de84","gauge":"#E7664C","operator":"lt"}],"gauge_width":"15","gauge_inner_width":10,"gauge_style":"half","filter":"","gauge_max":"300"},"aggs":[]}', uiStateJSON: '{}', description: '', version: 1, @@ -196,8 +196,7 @@ export const getSavedObjects = (): SavedObject[] => [ }), visState: '{"title":"[eCommerce] Average Sales Price","type":"gauge","params":{"type":"gauge","addTooltip":true,"addLegend":true,"isDisplayWarning":false,"gauge":{"verticalSplit":false,"extendRange":true,"percentageMode":false,"gaugeType":"Circle","gaugeStyle":"Full","backStyle":"Full","orientation":"vertical","colorSchema":"Green to Red","gaugeColorMode":"Labels","colorsRange":[{"from":0,"to":50},{"from":50,"to":75},{"from":75,"to":100}],"invertColors":true,"labels":{"show":true,"color":"black"},"scale":{"show":false,"labels":false,"color":"#333"},"type":"meter","style":{"bgWidth":0.9,"width":0.9,"mask":false,"bgMask":false,"maskBars":50,"bgFill":"#eee","bgColor":false,"subText":"per order","fontSize":60,"labelColor":true},"minAngle":0,"maxAngle":6.283185307179586}},"aggs":[{"id":"1","enabled":true,"type":"avg","schema":"metric","params":{"field":"taxful_total_price","customLabel":"average spend"}}]}', - uiStateJSON: - '{"vis":{"defaultColors":{"0 - 50":"rgb(165,0,38)","50 - 75":"rgb(255,255,190)","75 - 100":"rgb(0,104,55)"}}}', + uiStateJSON: '{}', description: '', version: 1, kibanaSavedObjectMeta: { @@ -219,8 +218,7 @@ export const getSavedObjects = (): SavedObject[] => [ }), visState: '{"title":"[eCommerce] Average Sold Quantity","type":"gauge","params":{"type":"gauge","addTooltip":true,"addLegend":true,"isDisplayWarning":false,"gauge":{"verticalSplit":false,"extendRange":true,"percentageMode":false,"gaugeType":"Circle","gaugeStyle":"Full","backStyle":"Full","orientation":"vertical","colorSchema":"Green to Red","gaugeColorMode":"Labels","colorsRange":[{"from":0,"to":2},{"from":2,"to":3},{"from":3,"to":4}],"invertColors":true,"labels":{"show":true,"color":"black"},"scale":{"show":false,"labels":false,"color":"#333"},"type":"meter","style":{"bgWidth":0.9,"width":0.9,"mask":false,"bgMask":false,"maskBars":50,"bgFill":"#eee","bgColor":false,"subText":"per order","fontSize":60,"labelColor":true},"minAngle":0,"maxAngle":6.283185307179586}},"aggs":[{"id":"1","enabled":true,"type":"avg","schema":"metric","params":{"field":"total_quantity","customLabel":"average items"}}]}', - uiStateJSON: - '{"vis":{"defaultColors":{"0 - 2":"rgb(165,0,38)","2 - 3":"rgb(255,255,190)","3 - 4":"rgb(0,104,55)"}}}', + uiStateJSON: '{}', description: '', version: 1, kibanaSavedObjectMeta: { @@ -263,7 +261,7 @@ export const getSavedObjects = (): SavedObject[] => [ defaultMessage: '[eCommerce] Sales Count Map', }), visState: - '{"title":"[eCommerce] Sales Count Map","type":"vega","aggs":[],"params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega/v5.json\\n config: {\\n kibana: {type: \\"map\\", latitude: 25, longitude: -40, zoom: 3}\\n }\\n data: [\\n {\\n name: table\\n url: {\\n index: opensearch_dashboards_sample_data_ecommerce\\n %context%: true\\n %timefield%: order_date\\n body: {\\n size: 0\\n aggs: {\\n gridSplit: {\\n geotile_grid: {field: \\"geoip.location\\", precision: 4, size: 10000}\\n aggs: {\\n gridCentroid: {\\n geo_centroid: {\\n field: \\"geoip.location\\"\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n format: {property: \\"aggregations.gridSplit.buckets\\"}\\n transform: [\\n {\\n type: geopoint\\n projection: projection\\n fields: [\\n gridCentroid.location.lon\\n gridCentroid.location.lat\\n ]\\n }\\n ]\\n }\\n ]\\n scales: [\\n {\\n name: gridSize\\n type: linear\\n domain: {data: \\"table\\", field: \\"doc_count\\"}\\n range: [\\n 50\\n 1000\\n ]\\n }\\n ]\\n marks: [\\n {\\n name: gridMarker\\n type: symbol\\n from: {data: \\"table\\"}\\n encode: {\\n update: {\\n size: {scale: \\"gridSize\\", field: \\"doc_count\\"}\\n xc: {signal: \\"datum.x\\"}\\n yc: {signal: \\"datum.y\\"}\\n }\\n }\\n },\\n {\\n name: gridLabel\\n type: text\\n from: {data: \\"table\\"}\\n encode: {\\n enter: {\\n fill: {value: \\"firebrick\\"}\\n text: {signal: \\"datum.doc_count\\"}\\n }\\n update: {\\n x: {signal: \\"datum.x\\"}\\n y: {signal: \\"datum.y\\"}\\n dx: {value: -6}\\n dy: {value: 6}\\n fontSize: {value: 18}\\n fontWeight: {value: \\"bold\\"}\\n }\\n }\\n }\\n ]\\n}"}}', + '{"title":"[eCommerce] Sales Count Map","type":"vega","aggs":[],"params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega/v5.json\\n config: {\\n kibana: {type: \\"map\\", latitude: 25, longitude: -40, zoom: 3}\\n }\\n data: [\\n {\\n name: table\\n url: {\\n index: opensearch_dashboards_sample_data_ecommerce\\n %context%: true\\n %timefield%: order_date\\n body: {\\n size: 0\\n aggs: {\\n gridSplit: {\\n geotile_grid: {field: \\"geoip.location\\", precision: 4, size: 10000}\\n aggs: {\\n gridCentroid: {\\n geo_centroid: {\\n field: \\"geoip.location\\"\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n format: {property: \\"aggregations.gridSplit.buckets\\"}\\n transform: [\\n {\\n type: geopoint\\n projection: projection\\n fields: [\\n gridCentroid.location.lon\\n gridCentroid.location.lat\\n ]\\n }\\n ]\\n }\\n ]\\n scales: [\\n {\\n name: gridSize\\n type: linear\\n domain: {data: \\"table\\", field: \\"doc_count\\"}\\n range: [\\n 50\\n 1000\\n ]\\n }\\n ]\\n marks: [\\n {\\n name: gridMarker\\n type: symbol\\n from: {data: \\"table\\"}\\n encode: {\\n update: {\\n size: {scale: \\"gridSize\\", field: \\"doc_count\\"}\\n xc: {signal: \\"datum.x\\"}\\n yc: {signal: \\"datum.y\\"}\\n }\\n }\\n },\\n {\\n name: gridLabel\\n type: text\\n from: {data: \\"table\\"}\\n encode: {\\n enter: {\\n fill: {value: \\"#E7664C\\"}\\n text: {signal: \\"datum.doc_count\\"}\\n }\\n update: {\\n x: {signal: \\"datum.x\\"}\\n y: {signal: \\"datum.y\\"}\\n dx: {value: -6}\\n dy: {value: 6}\\n fontSize: {value: 18}\\n fontWeight: {value: \\"bold\\"}\\n }\\n }\\n }\\n ]\\n}"}}', uiStateJSON: '{}', description: '', version: 1, @@ -390,7 +388,7 @@ export const getSavedObjects = (): SavedObject[] => [ defaultMessage: 'Analyze mock eCommerce orders and revenue', }), panelsJSON: - '[{"embeddableConfig":{"vis":{"colors":{"Men\'s Accessories":"#82B5D8","Men\'s Clothing":"#F9BA8F","Men\'s Shoes":"#F29191","Women\'s Accessories":"#F4D598","Women\'s Clothing":"#70DBED","Women\'s Shoes":"#B7DBAB"}}},"gridData":{"x":12,"y":18,"w":36,"h":10,"i":"1"},"panelIndex":"1","version":"7.0.0-alpha1","panelRefName":"panel_0"},{"embeddableConfig":{"vis":{"colors":{"FEMALE":"#6ED0E0","MALE":"#447EBC"},"legendOpen":false}},"gridData":{"x":12,"y":7,"w":12,"h":11,"i":"2"},"panelIndex":"2","version":"7.0.0-alpha1","panelRefName":"panel_1"},{"embeddableConfig":{},"gridData":{"x":0,"y":0,"w":18,"h":7,"i":"3"},"panelIndex":"3","version":"7.0.0-alpha1","panelRefName":"panel_2"},{"embeddableConfig":{},"gridData":{"x":18,"y":0,"w":30,"h":7,"i":"4"},"panelIndex":"4","version":"7.0.0-alpha1","panelRefName":"panel_3"},{"embeddableConfig":{},"gridData":{"x":0,"y":28,"w":48,"h":11,"i":"5"},"panelIndex":"5","version":"7.0.0-alpha1","panelRefName":"panel_4"},{"embeddableConfig":{},"gridData":{"x":0,"y":18,"w":12,"h":10,"i":"6"},"panelIndex":"6","version":"7.0.0-alpha1","panelRefName":"panel_5"},{"embeddableConfig":{},"gridData":{"x":0,"y":7,"w":12,"h":11,"i":"7"},"panelIndex":"7","version":"7.0.0-alpha1","panelRefName":"panel_6"},{"embeddableConfig":{"vis":{"colors":{"0 - 50":"#E24D42","50 - 75":"#EAB839","75 - 100":"#7EB26D"},"defaultColors":{"0 - 50":"rgb(165,0,38)","50 - 75":"rgb(255,255,190)","75 - 100":"rgb(0,104,55)"},"legendOpen":false}},"gridData":{"x":24,"y":7,"w":12,"h":11,"i":"8"},"panelIndex":"8","version":"7.0.0-alpha1","panelRefName":"panel_7"},{"embeddableConfig":{"vis":{"colors":{"0 - 2":"#E24D42","2 - 3":"#F2C96D","3 - 4":"#9AC48A"},"defaultColors":{"0 - 2":"rgb(165,0,38)","2 - 3":"rgb(255,255,190)","3 - 4":"rgb(0,104,55)"},"legendOpen":false}},"gridData":{"x":36,"y":7,"w":12,"h":11,"i":"9"},"panelIndex":"9","version":"7.0.0-alpha1","panelRefName":"panel_8"},{"embeddableConfig":{},"gridData":{"x":0,"y":54,"w":48,"h":18,"i":"10"},"panelIndex":"10","version":"7.0.0-alpha1","panelRefName":"panel_9"},{"embeddableConfig":{"mapZoom":2,"mapCenter":[28.304380682962783,-22.148437500000004]},"gridData":{"x":0,"y":39,"w":24,"h":15,"i":"11"},"panelIndex":"11","version":"7.0.0-alpha1","panelRefName":"panel_10"},{"embeddableConfig":{},"gridData":{"x":24,"y":39,"w":24,"h":15,"i":"12"},"panelIndex":"12","version":"7.0.0-alpha1","panelRefName":"panel_11"}]', + '[{"embeddableConfig":{},"gridData":{"x":12,"y":18,"w":36,"h":10,"i":"1"},"panelIndex":"1","version":"7.0.0-alpha1","panelRefName":"panel_0"},{"embeddableConfig":{"vis":{"legendOpen":false}},"gridData":{"x":12,"y":7,"w":12,"h":11,"i":"2"},"panelIndex":"2","version":"7.0.0-alpha1","panelRefName":"panel_1"},{"embeddableConfig":{},"gridData":{"x":0,"y":0,"w":18,"h":7,"i":"3"},"panelIndex":"3","version":"7.0.0-alpha1","panelRefName":"panel_2"},{"embeddableConfig":{},"gridData":{"x":18,"y":0,"w":30,"h":7,"i":"4"},"panelIndex":"4","version":"7.0.0-alpha1","panelRefName":"panel_3"},{"embeddableConfig":{},"gridData":{"x":0,"y":28,"w":48,"h":11,"i":"5"},"panelIndex":"5","version":"7.0.0-alpha1","panelRefName":"panel_4"},{"embeddableConfig":{},"gridData":{"x":0,"y":18,"w":12,"h":10,"i":"6"},"panelIndex":"6","version":"7.0.0-alpha1","panelRefName":"panel_5"},{"embeddableConfig":{},"gridData":{"x":0,"y":7,"w":12,"h":11,"i":"7"},"panelIndex":"7","version":"7.0.0-alpha1","panelRefName":"panel_6"},{"embeddableConfig":{"vis":{"legendOpen":false}},"gridData":{"x":24,"y":7,"w":12,"h":11,"i":"8"},"panelIndex":"8","version":"7.0.0-alpha1","panelRefName":"panel_7"},{"embeddableConfig":{"vis":{"legendOpen":false}},"gridData":{"x":36,"y":7,"w":12,"h":11,"i":"9"},"panelIndex":"9","version":"7.0.0-alpha1","panelRefName":"panel_8"},{"embeddableConfig":{},"gridData":{"x":0,"y":54,"w":48,"h":18,"i":"10"},"panelIndex":"10","version":"7.0.0-alpha1","panelRefName":"panel_9"},{"embeddableConfig":{"mapZoom":2,"mapCenter":[28.304380682962783,-22.148437500000004]},"gridData":{"x":0,"y":39,"w":24,"h":15,"i":"11"},"panelIndex":"11","version":"7.0.0-alpha1","panelRefName":"panel_10"},{"embeddableConfig":{},"gridData":{"x":24,"y":39,"w":24,"h":15,"i":"12"},"panelIndex":"12","version":"7.0.0-alpha1","panelRefName":"panel_11"}]', optionsJSON: '{"hidePanelTitles":false,"useMargins":true}', version: 1, timeRestore: true, diff --git a/src/plugins/home/server/services/sample_data/data_sets/flights/saved_objects.ts b/src/plugins/home/server/services/sample_data/data_sets/flights/saved_objects.ts index a31d76e535cb..36bb8c6d02e4 100644 --- a/src/plugins/home/server/services/sample_data/data_sets/flights/saved_objects.ts +++ b/src/plugins/home/server/services/sample_data/data_sets/flights/saved_objects.ts @@ -69,7 +69,7 @@ export const getSavedObjects = (): SavedObject[] => [ visState: '{"title":"[Flights] Flight Count and Average Ticket Price","type":"area","params":{"type":"area","grid":{"categoryLines":false,"style":{"color":"#eee"}},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Average Ticket Price"}},{"id":"ValueAxis-2","name":"RightAxis-1","type":"value","position":"right","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Flight Count"}}],"seriesParams":[{"show":true,"mode":"stacked","type":"area","drawLinesBetweenPoints":true,"showCircles":false,"interpolate":"linear","lineWidth":2,"data":{"id":"5","label":"Flight Count"},"valueAxis":"ValueAxis-2"},{"show":true,"mode":"stacked","type":"line","drawLinesBetweenPoints":false,"showCircles":true,"interpolate":"linear","data":{"id":"4","label":"Average Ticket Price"},"valueAxis":"ValueAxis-1","lineWidth":2}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false,"radiusRatio":13},"aggs":[{"id":"3","enabled":true,"type":"date_histogram","schema":"segment","params":{"field":"timestamp","interval":"auto","customInterval":"2h","min_doc_count":1,"extended_bounds":{}}},{"id":"5","enabled":true,"type":"count","schema":"metric","params":{"customLabel":"Flight Count"}},{"id":"4","enabled":true,"type":"avg","schema":"metric","params":{"field":"AvgTicketPrice","customLabel":"Average Ticket Price"}},{"id":"2","enabled":true,"type":"avg","schema":"radius","params":{"field":"AvgTicketPrice"}}]}', uiStateJSON: - '{"vis":{"legendOpen":true,"colors":{"Average Ticket Price":"#629E51","Flight Count":"#AEA2E0"}}}', + '{}', description: '', version: 1, kibanaSavedObjectMeta: { @@ -166,7 +166,7 @@ export const getSavedObjects = (): SavedObject[] => [ defaultMessage: '[Flights] Delays & Cancellations', }), visState: - '{"title":"[Flights] Delays & Cancellations","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"timeseries","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"rgba(0,156,224,1)","split_mode":"everything","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"filter_ratio","numerator":"FlightDelay:true"}],"separate_axis":0,"axis_position":"right","formatter":"percent","chart_type":"line","line_width":"2","point_size":"0","fill":0.5,"stacked":"none","label":"Percent Delays"}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_flights","interval":">=1h","axis_position":"left","axis_formatter":"number","show_legend":1,"show_grid":1,"annotations":[{"fields":"FlightDelay,Cancelled,Carrier","template":"{{Carrier}}: Flight Delayed and Cancelled!","index_pattern":"opensearch_dashboards_sample_data_flights","query_string":"FlightDelay:true AND Cancelled:true","id":"53b7dff0-4c89-11e8-a66a-6989ad5a0a39","color":"rgba(0,98,177,1)","time_field":"timestamp","icon":"fa-exclamation-triangle","ignore_global_filters":1,"ignore_panel_filters":1}],"legend_position":"bottom"},"aggs":[]}', + '{"title":"[Flights] Delays & Cancellations","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"timeseries","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"filter_ratio","numerator":"FlightDelay:true"}],"separate_axis":0,"axis_position":"right","formatter":"percent","chart_type":"line","line_width":"2","point_size":"0","fill":0.5,"stacked":"none","label":"Percent Delays"}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_flights","interval":">=1h","axis_position":"left","axis_formatter":"number","show_legend":1,"show_grid":1,"annotations":[{"fields":"FlightDelay,Cancelled,Carrier","template":"{{Carrier}}: Flight Delayed and Cancelled!","index_pattern":"opensearch_dashboards_sample_data_flights","query_string":"FlightDelay:true AND Cancelled:true","id":"53b7dff0-4c89-11e8-a66a-6989ad5a0a39","color":"#E7664C","time_field":"timestamp","icon":"fa-exclamation-triangle","ignore_global_filters":1,"ignore_panel_filters":1}],"legend_position":"bottom"},"aggs":[]}', uiStateJSON: '{}', description: '', version: 1, @@ -319,7 +319,7 @@ export const getSavedObjects = (): SavedObject[] => [ visState: '{"title":"[Flights] Total Flight Delays","type":"gauge","params":{"type":"gauge","addTooltip":true,"addLegend":true,"isDisplayWarning":false,"gauge":{"verticalSplit":false,"extendRange":true,"percentageMode":false,"gaugeType":"Arc","gaugeStyle":"Full","backStyle":"Full","orientation":"vertical","colorSchema":"Blues","gaugeColorMode":"Labels","colorsRange":[{"from":0,"to":75},{"from":75,"to":150},{"from":150,"to":225},{"from":225,"to":300}],"invertColors":true,"labels":{"show":false,"color":"black"},"scale":{"show":false,"labels":false,"color":"#333"},"type":"meter","style":{"bgWidth":0.9,"width":0.9,"mask":false,"bgMask":false,"maskBars":50,"bgFill":"#eee","bgColor":false,"subText":"","fontSize":60,"labelColor":true}}},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{"customLabel":"Total Delays"}}]}', uiStateJSON: - '{"vis":{"defaultColors":{"0 - 75":"rgb(8,48,107)","75 - 150":"rgb(55,135,192)","150 - 225":"rgb(171,208,230)","225 - 300":"rgb(247,251,255)"}}}', + '{}', description: '', version: 1, kibanaSavedObjectMeta: { @@ -342,7 +342,7 @@ export const getSavedObjects = (): SavedObject[] => [ visState: '{"title":"[Flights] Total Flight Cancellations","type":"gauge","params":{"type":"gauge","addTooltip":true,"addLegend":true,"isDisplayWarning":false,"gauge":{"verticalSplit":false,"extendRange":true,"percentageMode":false,"gaugeType":"Arc","gaugeStyle":"Full","backStyle":"Full","orientation":"vertical","colorSchema":"Blues","gaugeColorMode":"Labels","colorsRange":[{"from":0,"to":75},{"from":75,"to":150},{"from":150,"to":225},{"from":225,"to":300}],"invertColors":true,"labels":{"show":false,"color":"black"},"scale":{"show":false,"labels":false,"color":"#333"},"type":"meter","style":{"bgWidth":0.9,"width":0.9,"mask":false,"bgMask":false,"maskBars":50,"bgFill":"#eee","bgColor":false,"subText":"","fontSize":60,"labelColor":true}}},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{"customLabel":"Total Cancellations"}}]}', uiStateJSON: - '{"vis":{"defaultColors":{"0 - 75":"rgb(8,48,107)","75 - 150":"rgb(55,135,192)","150 - 225":"rgb(171,208,230)","225 - 300":"rgb(247,251,255)"}}}', + '{}', description: '', version: 1, kibanaSavedObjectMeta: { @@ -365,7 +365,7 @@ export const getSavedObjects = (): SavedObject[] => [ visState: '{"title":"[Flights] Origin Country vs. Destination Country","type":"heatmap","params":{"type":"heatmap","addTooltip":true,"addLegend":true,"enableHover":false,"legendPosition":"right","times":[],"colorsNumber":5,"colorSchema":"Blues","setColorRange":false,"colorsRange":[],"invertColors":false,"percentageMode":false,"valueAxes":[{"show":false,"id":"ValueAxis-1","type":"value","scale":{"type":"linear","defaultYExtents":false},"labels":{"show":false,"rotate":0,"overwriteColor":false,"color":"#555"}}]},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"group","params":{"field":"OriginCountry","size":5,"order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","customLabel":"Origin Country"}},{"id":"3","enabled":true,"type":"terms","schema":"segment","params":{"field":"DestCountry","size":5,"order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","customLabel":"Destination Country"}}]}', uiStateJSON: - '{"vis":{"defaultColors":{"0 - 22":"rgb(247,251,255)","22 - 44":"rgb(208,225,242)","44 - 66":"rgb(148,196,223)","66 - 88":"rgb(74,152,201)","88 - 110":"rgb(23,100,171)"}}}', + '{}', description: '', version: 1, kibanaSavedObjectMeta: { @@ -569,7 +569,7 @@ export const getSavedObjects = (): SavedObject[] => [ } ), panelsJSON: - '[{"panelIndex":"1","gridData":{"x":0,"y":0,"w":32,"h":7,"i":"1"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_0"},{"panelIndex":"3","gridData":{"x":17,"y":7,"w":23,"h":12,"i":"3"},"embeddableConfig":{"vis":{"colors":{"Average Ticket Price":"#0A50A1","Flight Count":"#82B5D8"},"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_1"},{"panelIndex":"4","gridData":{"x":0,"y":85,"w":48,"h":15,"i":"4"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_2"},{"panelIndex":"5","gridData":{"x":0,"y":7,"w":17,"h":12,"i":"5"},"embeddableConfig":{"vis":{"colors":{"OpenSearch-Air":"#447EBC","BeatsWest":"#65C5DB","OpenSearch Dashboards Airlines":"#BA43A9","Logstash Airways":"#E5AC0E"},"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_3"},{"panelIndex":"6","gridData":{"x":24,"y":33,"w":24,"h":14,"i":"6"},"embeddableConfig":{"vis":{"colors":{"Carrier Delay":"#5195CE","Late Aircraft Delay":"#1F78C1","NAS Delay":"#70DBED","No Delay":"#BADFF4","Security Delay":"#052B51","Weather Delay":"#6ED0E0"}}},"version":"6.3.0","panelRefName":"panel_4"},{"panelIndex":"7","gridData":{"x":24,"y":19,"w":24,"h":14,"i":"7"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_5"},{"panelIndex":"10","gridData":{"x":0,"y":35,"w":24,"h":12,"i":"10"},"embeddableConfig":{"vis":{"colors":{"Count":"#1F78C1"},"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_6"},{"panelIndex":"13","gridData":{"x":10,"y":19,"w":14,"h":8,"i":"13"},"embeddableConfig":{"vis":{"colors":{"Count":"#1F78C1"},"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_7"},{"panelIndex":"14","gridData":{"x":10,"y":27,"w":14,"h":8,"i":"14"},"embeddableConfig":{"vis":{"colors":{"Count":"#1F78C1"},"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_8"},{"panelIndex":"21","gridData":{"x":0,"y":62,"w":48,"h":8,"i":"21"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_10"},{"panelIndex":"22","gridData":{"x":32,"y":0,"w":16,"h":7,"i":"22"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_11"},{"panelIndex":"23","gridData":{"x":0,"y":70,"w":48,"h":15,"i":"23"},"embeddableConfig":{"mapCenter":[42.19556096274418,9.536742995308601e-7],"mapZoom":1},"version":"6.3.0","panelRefName":"panel_12"},{"panelIndex":"25","gridData":{"x":0,"y":19,"w":10,"h":8,"i":"25"},"embeddableConfig":{"vis":{"defaultColors":{"0 - 50":"rgb(247,251,255)","100 - 150":"rgb(107,174,214)","150 - 200":"rgb(33,113,181)","200 - 250":"rgb(8,48,107)","50 - 100":"rgb(198,219,239)"},"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_13"},{"panelIndex":"27","gridData":{"x":0,"y":27,"w":10,"h":8,"i":"27"},"embeddableConfig":{"vis":{"defaultColors":{"0 - 50":"rgb(247,251,255)","100 - 150":"rgb(107,174,214)","150 - 200":"rgb(33,113,181)","200 - 250":"rgb(8,48,107)","50 - 100":"rgb(198,219,239)"},"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_14"},{"panelIndex":"28","gridData":{"x":0,"y":47,"w":24,"h":15,"i":"28"},"embeddableConfig":{"vis":{"defaultColors":{"0 - 11":"rgb(247,251,255)","11 - 22":"rgb(208,225,242)","22 - 33":"rgb(148,196,223)","33 - 44":"rgb(74,152,201)","44 - 55":"rgb(23,100,171)"},"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_15"},{"panelIndex":"29","gridData":{"x":40,"y":7,"w":8,"h":6,"i":"29"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_16"},{"panelIndex":"30","gridData":{"x":40,"y":13,"w":8,"h":6,"i":"30"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_17"},{"panelIndex":"31","gridData":{"x":24,"y":47,"w":24,"h":15,"i":"31"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_18"}]', + '[{"panelIndex":"1","gridData":{"x":0,"y":0,"w":32,"h":7,"i":"1"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_0"},{"panelIndex":"3","gridData":{"x":17,"y":7,"w":23,"h":12,"i":"3"},"embeddableConfig":{"vis":{"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_1"},{"panelIndex":"4","gridData":{"x":0,"y":85,"w":48,"h":15,"i":"4"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_2"},{"panelIndex":"5","gridData":{"x":0,"y":7,"w":17,"h":12,"i":"5"},"embeddableConfig":{"vis":{"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_3"},{"panelIndex":"6","gridData":{"x":24,"y":33,"w":24,"h":14,"i":"6"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_4"},{"panelIndex":"7","gridData":{"x":24,"y":19,"w":24,"h":14,"i":"7"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_5"},{"panelIndex":"10","gridData":{"x":0,"y":35,"w":24,"h":12,"i":"10"},"embeddableConfig":{"vis":{"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_6"},{"panelIndex":"13","gridData":{"x":10,"y":19,"w":14,"h":8,"i":"13"},"embeddableConfig":{"vis":{"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_7"},{"panelIndex":"14","gridData":{"x":10,"y":27,"w":14,"h":8,"i":"14"},"embeddableConfig":{"vis":{"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_8"},{"panelIndex":"21","gridData":{"x":0,"y":62,"w":48,"h":8,"i":"21"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_10"},{"panelIndex":"22","gridData":{"x":32,"y":0,"w":16,"h":7,"i":"22"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_11"},{"panelIndex":"23","gridData":{"x":0,"y":70,"w":48,"h":15,"i":"23"},"embeddableConfig":{"mapCenter":[42.19556096274418,9.536742995308601e-7],"mapZoom":1},"version":"6.3.0","panelRefName":"panel_12"},{"panelIndex":"25","gridData":{"x":0,"y":19,"w":10,"h":8,"i":"25"},"embeddableConfig":{"vis":{"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_13"},{"panelIndex":"27","gridData":{"x":0,"y":27,"w":10,"h":8,"i":"27"},"embeddableConfig":{"vis":{"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_14"},{"panelIndex":"28","gridData":{"x":0,"y":47,"w":24,"h":15,"i":"28"},"embeddableConfig":{"vis":{"legendOpen":false}},"version":"6.3.0","panelRefName":"panel_15"},{"panelIndex":"29","gridData":{"x":40,"y":7,"w":8,"h":6,"i":"29"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_16"},{"panelIndex":"30","gridData":{"x":40,"y":13,"w":8,"h":6,"i":"30"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_17"},{"panelIndex":"31","gridData":{"x":24,"y":47,"w":24,"h":15,"i":"31"},"embeddableConfig":{},"version":"6.3.0","panelRefName":"panel_18"}]', optionsJSON: '{"hidePanelTitles":false,"useMargins":true}', version: 1, timeRestore: true, diff --git a/src/plugins/home/server/services/sample_data/data_sets/logs/saved_objects.ts b/src/plugins/home/server/services/sample_data/data_sets/logs/saved_objects.ts index 46a1f3b6c5ef..ae881354e333 100644 --- a/src/plugins/home/server/services/sample_data/data_sets/logs/saved_objects.ts +++ b/src/plugins/home/server/services/sample_data/data_sets/logs/saved_objects.ts @@ -45,7 +45,7 @@ export const getSavedObjects = (): SavedObject[] => [ }), visState: '{"title":"[Logs] Unique Visitors vs. Average Bytes","type":"area","params":{"type":"area","grid":{"categoryLines":false,"style":{"color":"#eee"}},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Avg. Bytes"}},{"id":"ValueAxis-2","name":"RightAxis-1","type":"value","position":"right","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Unique Visitors"}}],"seriesParams":[{"show":"true","type":"histogram","mode":"stacked","data":{"label":"Avg. Bytes","id":"1"},"drawLinesBetweenPoints":true,"showCircles":true,"interpolate":"linear","valueAxis":"ValueAxis-1"},{"show":true,"mode":"stacked","type":"line","drawLinesBetweenPoints":false,"showCircles":true,"interpolate":"linear","data":{"id":"2","label":"Unique Visitors"},"valueAxis":"ValueAxis-2"}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false,"radiusRatio":17},"aggs":[{"id":"1","enabled":true,"type":"avg","schema":"metric","params":{"field":"bytes","customLabel":"Avg. Bytes"}},{"id":"2","enabled":true,"type":"cardinality","schema":"metric","params":{"field":"clientip","customLabel":"Unique Visitors"}},{"id":"3","enabled":true,"type":"date_histogram","schema":"segment","params":{"field":"timestamp","interval":"auto","time_zone":"America/Los_Angeles","customInterval":"2h","min_doc_count":1,"extended_bounds":{}}},{"id":"4","enabled":true,"type":"count","schema":"radius","params":{}}]}', - uiStateJSON: '{"vis":{"colors":{"Avg. Bytes":"#70DBED","Unique Visitors":"#0A437C"}}}', + uiStateJSON: '{}', description: '', version: 1, kibanaSavedObjectMeta: { @@ -66,7 +66,7 @@ export const getSavedObjects = (): SavedObject[] => [ defaultMessage: '[Logs] Visitors Map', }), visState: - '{"title":"[Logs] Visitors Map","type":"vega","aggs":[],"params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega/v5.json\\n config: {\\n kibana: {type: \\"map\\", latitude: 30, longitude: -120, zoom: 3}\\n }\\n data: [\\n {\\n name: table\\n url: {\\n index: opensearch_dashboards_sample_data_logs\\n %context%: true\\n %timefield%: timestamp\\n body: {\\n size: 0\\n aggs: {\\n gridSplit: {\\n geotile_grid: {field: \\"geo.coordinates\\", precision: 5, size: 10000}\\n aggs: {\\n gridCentroid: {\\n geo_centroid: {\\n field: \\"geo.coordinates\\"\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n format: {property: \\"aggregations.gridSplit.buckets\\"}\\n transform: [\\n {\\n type: geopoint\\n projection: projection\\n fields: [\\n gridCentroid.location.lon\\n gridCentroid.location.lat\\n ]\\n }\\n ]\\n }\\n ]\\n scales: [\\n {\\n name: gridSize\\n type: linear\\n domain: {data: \\"table\\", field: \\"doc_count\\"}\\n range: [\\n 50\\n 1000\\n ]\\n }\\n {\\n name: bubbleColor\\n type: linear\\n domain: {\\n data: table\\n field: doc_count\\n }\\n range: [\\"rgb(249, 234, 197)\\",\\"rgb(243, 200, 154)\\",\\"rgb(235, 166, 114)\\", \\"rgb(231, 102, 76)\\"]\\n }\\n ]\\n marks: [\\n {\\n name: gridMarker\\n type: symbol\\n from: {data: \\"table\\"}\\n encode: {\\n update: {\\n fill: {\\n scale: bubbleColor\\n field: doc_count\\n }\\n size: {scale: \\"gridSize\\", field: \\"doc_count\\"}\\n xc: {signal: \\"datum.x\\"}\\n yc: {signal: \\"datum.y\\"}\\n tooltip: {\\n signal: \\"{flights: datum.doc_count}\\"\\n }\\n }\\n }\\n }\\n ]\\n}"}}', + '{"title":"[Logs] Visitors Map","type":"vega","aggs":[],"params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega/v5.json\\n config: {\\n kibana: {type: \\"map\\", latitude: 30, longitude: -120, zoom: 3}\\n }\\n data: [\\n {\\n name: table\\n url: {\\n index: opensearch_dashboards_sample_data_logs\\n %context%: true\\n %timefield%: timestamp\\n body: {\\n size: 0\\n aggs: {\\n gridSplit: {\\n geotile_grid: {field: \\"geo.coordinates\\", precision: 5, size: 10000}\\n aggs: {\\n gridCentroid: {\\n geo_centroid: {\\n field: \\"geo.coordinates\\"\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n format: {property: \\"aggregations.gridSplit.buckets\\"}\\n transform: [\\n {\\n type: geopoint\\n projection: projection\\n fields: [\\n gridCentroid.location.lon\\n gridCentroid.location.lat\\n ]\\n }\\n ]\\n }\\n ]\\n scales: [\\n {\\n name: gridSize\\n type: linear\\n domain: {data: \\"table\\", field: \\"doc_count\\"}\\n range: [\\n 50\\n 1000\\n ]\\n }\\n {\\n name: bubbleColor\\n type: linear\\n domain: {\\n data: table\\n field: doc_count\\n }\\n range: [\\"rgb(255, 255, 255)\\",\\"rgb(249, 212, 204)\\",\\"rgb(238, 170, 156)\\", \\"rgb(223, 129, 110)\\"]\\n }\\n ]\\n marks: [\\n {\\n name: gridMarker\\n type: symbol\\n from: {data: \\"table\\"}\\n encode: {\\n update: {\\n fill: {\\n scale: bubbleColor\\n field: doc_count\\n }\\n size: {scale: \\"gridSize\\", field: \\"doc_count\\"}\\n xc: {signal: \\"datum.x\\"}\\n yc: {signal: \\"datum.y\\"}\\n tooltip: {\\n signal: \\"{flights: datum.doc_count}\\"\\n }\\n }\\n }\\n }\\n ]\\n}"}}', uiStateJSON: '{}', description: '', version: 1, @@ -89,8 +89,7 @@ export const getSavedObjects = (): SavedObject[] => [ }), visState: '{"title":"[Logs] Heatmap","type":"heatmap","params":{"type":"heatmap","addTooltip":true,"addLegend":true,"enableHover":true,"legendPosition":"right","times":[],"colorsNumber":10,"colorSchema":"Reds","setColorRange":false,"colorsRange":[],"invertColors":false,"percentageMode":false,"valueAxes":[{"show":false,"id":"ValueAxis-1","type":"value","scale":{"type":"linear","defaultYExtents":false},"labels":{"show":false,"rotate":0,"color":"#555","overwriteColor":false}}]},"aggs":[{"id":"1","enabled":true,"type":"cardinality","schema":"metric","params":{"field":"clientip"}},{"id":"3","enabled":true,"type":"terms","schema":"group","params":{"field":"geo.src","size":5,"order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","customLabel":"Country Source"}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"hour_of_day","size":25,"order":"asc","orderBy":"_key","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","customLabel":"Hour of Day"}}]}', - uiStateJSON: - '{"vis":{"defaultColors":{"0 - 4":"rgb(255,245,240)","4 - 8":"rgb(254,228,216)","8 - 12":"rgb(253,202,181)","12 - 16":"rgb(252,171,142)","16 - 20":"rgb(252,138,106)","20 - 24":"rgb(251,106,74)","24 - 28":"rgb(241,68,50)","28 - 32":"rgb(217,38,35)","32 - 36":"rgb(188,20,26)","36 - 40":"rgb(152,12,19)"}}}', + uiStateJSON: '{}', description: '', version: 1, kibanaSavedObjectMeta: { @@ -111,7 +110,7 @@ export const getSavedObjects = (): SavedObject[] => [ defaultMessage: '[Logs] Host, Visits and Bytes Table', }), visState: - '{"title":"[Logs] Host, Visits and Bytes Table","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"table","series":[{"id":"bd09d600-e5b1-11e7-bfc2-a1f7e71965a1","color":"#68BC00","split_mode":"everything","metrics":[{"id":"bd09d601-e5b1-11e7-bfc2-a1f7e71965a1","type":"sum","field":"bytes"},{"sigma":"","id":"c9514c90-e5b1-11e7-bfc2-a1f7e71965a1","type":"sum_bucket","field":"bd09d601-e5b1-11e7-bfc2-a1f7e71965a1"}],"seperate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"c0c668d0-e5b1-11e7-bfc2-a1f7e71965a1"}],"label":"Bytes (Total)"},{"id":"b7672c30-a6df-11e8-8b18-1da1dfc50975","color":"#68BC00","split_mode":"everything","metrics":[{"id":"b7672c31-a6df-11e8-8b18-1da1dfc50975","type":"sum","field":"bytes"}],"seperate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"c0c668d0-e5b1-11e7-bfc2-a1f7e71965a1"}],"label":"Bytes (Last Hour)"},{"id":"f2c20700-a6df-11e8-8b18-1da1dfc50975","color":"#68BC00","split_mode":"everything","metrics":[{"id":"f2c20701-a6df-11e8-8b18-1da1dfc50975","type":"cardinality","field":"ip"},{"sigma":"","id":"f46333e0-a6df-11e8-8b18-1da1dfc50975","type":"sum_bucket","field":"f2c20701-a6df-11e8-8b18-1da1dfc50975"}],"seperate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Unique Visits (Total)","color_rules":[{"value":1000,"id":"2e963080-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(211,49,21,1)","operator":"lt"},{"value":1000,"id":"3d4fb880-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(252,196,0,1)","operator":"gte"},{"value":1500,"id":"435f8a20-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(104,188,0,1)","operator":"gte"}],"offset_time":"","value_template":"","trend_arrows":1},{"id":"46fd7fc0-e5b1-11e7-bfc2-a1f7e71965a1","color":"#68BC00","split_mode":"everything","metrics":[{"id":"46fd7fc1-e5b1-11e7-bfc2-a1f7e71965a1","type":"cardinality","field":"ip"}],"seperate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Unique Visits (Last Hour)","color_rules":[{"value":10,"id":"4e90aeb0-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(211,49,21,1)","operator":"lt"},{"value":10,"id":"6d59b1c0-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(252,196,0,1)","operator":"gte"},{"value":25,"id":"77578670-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(104,188,0,1)","operator":"gte"}],"offset_time":"","value_template":"","trend_arrows":1}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":"1h","axis_position":"left","axis_formatter":"number","show_legend":1,"show_grid":1,"bar_color_rules":[{"id":"e9b4e490-e1c6-11e7-b4f6-0f68c45f7387"}],"pivot_id":"extension.keyword","pivot_label":"Type","drilldown_url":"","axis_scale":"normal"},"aggs":[]}', + '{"title":"[Logs] Host, Visits and Bytes Table","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"table","series":[{"id":"bd09d600-e5b1-11e7-bfc2-a1f7e71965a1","color":"#54B399","split_mode":"everything","metrics":[{"id":"bd09d601-e5b1-11e7-bfc2-a1f7e71965a1","type":"sum","field":"bytes"},{"sigma":"","id":"c9514c90-e5b1-11e7-bfc2-a1f7e71965a1","type":"sum_bucket","field":"bd09d601-e5b1-11e7-bfc2-a1f7e71965a1"}],"seperate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"c0c668d0-e5b1-11e7-bfc2-a1f7e71965a1"}],"label":"Bytes (Total)"},{"id":"b7672c30-a6df-11e8-8b18-1da1dfc50975","color":"#54B399","split_mode":"everything","metrics":[{"id":"b7672c31-a6df-11e8-8b18-1da1dfc50975","type":"sum","field":"bytes"}],"seperate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"c0c668d0-e5b1-11e7-bfc2-a1f7e71965a1"}],"label":"Bytes (Last Hour)"},{"id":"f2c20700-a6df-11e8-8b18-1da1dfc50975","color":"#54B399","split_mode":"everything","metrics":[{"id":"f2c20701-a6df-11e8-8b18-1da1dfc50975","type":"cardinality","field":"ip"},{"sigma":"","id":"f46333e0-a6df-11e8-8b18-1da1dfc50975","type":"sum_bucket","field":"f2c20701-a6df-11e8-8b18-1da1dfc50975"}],"seperate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Unique Visits (Total)","color_rules":[{"value":1000,"id":"2e963080-a6e0-11e8-8b18-1da1dfc50975","text":"#E7664C","operator":"lt"},{"value":1000,"id":"3d4fb880-a6e0-11e8-8b18-1da1dfc50975","text":"#D6BF57","operator":"gte"},{"value":1500,"id":"435f8a20-a6e0-11e8-8b18-1da1dfc50975","text":"#54B399","operator":"gte"}],"offset_time":"","value_template":"","trend_arrows":1},{"id":"46fd7fc0-e5b1-11e7-bfc2-a1f7e71965a1","color":"#54B399","split_mode":"everything","metrics":[{"id":"46fd7fc1-e5b1-11e7-bfc2-a1f7e71965a1","type":"cardinality","field":"ip"}],"seperate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Unique Visits (Last Hour)","color_rules":[{"value":10,"id":"4e90aeb0-a6e0-11e8-8b18-1da1dfc50975","text":"#E7664C","operator":"lt"},{"value":10,"id":"6d59b1c0-a6e0-11e8-8b18-1da1dfc50975","text":"#D6BF57","operator":"gte"},{"value":25,"id":"77578670-a6e0-11e8-8b18-1da1dfc50975","text":"#54B399","operator":"gte"}],"offset_time":"","value_template":"","trend_arrows":1}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":"1h","axis_position":"left","axis_formatter":"number","show_legend":1,"show_grid":1,"bar_color_rules":[{"id":"e9b4e490-e1c6-11e7-b4f6-0f68c45f7387"}],"pivot_id":"extension.keyword","pivot_label":"Type","drilldown_url":"","axis_scale":"normal"},"aggs":[]}', uiStateJSON: '{}', description: '', version: 1, @@ -133,8 +132,7 @@ export const getSavedObjects = (): SavedObject[] => [ }), visState: '{"title":"[Logs] Goals","type":"gauge","params":{"type":"gauge","addTooltip":true,"addLegend":false,"gauge":{"verticalSplit":false,"extendRange":true,"percentageMode":false,"gaugeType":"Arc","gaugeStyle":"Full","backStyle":"Full","orientation":"vertical","colorSchema":"Green to Red","gaugeColorMode":"Labels","colorsRange":[{"from":0,"to":500},{"from":500,"to":1000},{"from":1000,"to":1500}],"invertColors":true,"labels":{"show":false,"color":"black"},"scale":{"show":true,"labels":false,"color":"#333"},"type":"meter","style":{"bgWidth":0.9,"width":0.9,"mask":false,"bgMask":false,"maskBars":50,"bgFill":"#eee","bgColor":false,"subText":"visitors","fontSize":60,"labelColor":true}},"isDisplayWarning":false},"aggs":[{"id":"1","enabled":true,"type":"cardinality","schema":"metric","params":{"field":"clientip","customLabel":"Unique Visitors"}}]}', - uiStateJSON: - '{"vis":{"defaultColors":{"0 - 500":"rgb(165,0,38)","500 - 1000":"rgb(255,255,190)","1000 - 1500":"rgb(0,104,55)"},"colors":{"75 - 100":"#629E51","50 - 75":"#EAB839","0 - 50":"#E24D42","0 - 100":"#E24D42","200 - 300":"#7EB26D","500 - 1000":"#E5AC0E","0 - 500":"#E24D42","1000 - 1500":"#7EB26D"},"legendOpen":true}}', + uiStateJSON: '{}', description: '', version: 1, kibanaSavedObjectMeta: { @@ -197,7 +195,7 @@ export const getSavedObjects = (): SavedObject[] => [ defaultMessage: '[Logs] Response Codes Over Time + Annotations', }), visState: - '{"title":"[Logs] Response Codes Over Time + Annotations","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"timeseries","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"rgba(115,216,255,1)","split_mode":"terms","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"cardinality","field":"ip"}],"seperate_axis":0,"axis_position":"right","formatter":"percent","chart_type":"line","line_width":"2","point_size":"0","fill":"0.5","stacked":"percent","terms_field":"response.keyword","terms_order_by":"61ca57f2-469d-11e7-af02-69e470af7417","label":"Response Code Count","split_color_mode":"gradient"}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":">=4h","axis_position":"left","axis_formatter":"number","show_legend":1,"show_grid":1,"annotations":[{"fields":"geo.src, host","template":"Security Error from {{geo.src}} on {{host}}","index_pattern":"opensearch_dashboards_sample_data_logs","query_string":"tags:error AND tags:security","id":"bd7548a0-2223-11e8-832f-d5027f3c8a47","color":"rgba(211,49,21,1)","time_field":"timestamp","icon":"fa-asterisk","ignore_global_filters":1,"ignore_panel_filters":1}],"legend_position":"bottom","axis_scale":"normal","drop_last_bucket":0},"aggs":[]}', + '{"title":"[Logs] Response Codes Over Time + Annotations","type":"metrics","params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"timeseries","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"terms","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"cardinality","field":"ip"}],"seperate_axis":0,"axis_position":"right","formatter":"percent","chart_type":"line","line_width":"2","point_size":"0","fill":"0.5","stacked":"percent","terms_field":"response.keyword","terms_order_by":"61ca57f2-469d-11e7-af02-69e470af7417","label":"Response Code Count","split_color_mode":"gradient"}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":">=4h","axis_position":"left","axis_formatter":"number","show_legend":1,"show_grid":1,"annotations":[{"fields":"geo.src, host","template":"Security Error from {{geo.src}} on {{host}}","index_pattern":"opensearch_dashboards_sample_data_logs","query_string":"tags:error AND tags:security","id":"bd7548a0-2223-11e8-832f-d5027f3c8a47","color":"#E7664C","time_field":"timestamp","icon":"fa-asterisk","ignore_global_filters":1,"ignore_panel_filters":1}],"legend_position":"bottom","axis_scale":"normal","drop_last_bucket":0},"aggs":[]}', uiStateJSON: '{}', description: '', version: 1, @@ -360,7 +358,7 @@ export const getSavedObjects = (): SavedObject[] => [ defaultMessage: "Analyze mock web traffic log data for OpenSearch's website", }), panelsJSON: - '[{"embeddableConfig":{"vis":{"colors":{"Avg. Bytes":"#6ED0E0","Unique Visitors":"#0A437C"},"legendOpen":false}},"gridData":{"x":27,"y":11,"w":21,"h":13,"i":"2"},"panelIndex":"2","version":"7.0.0-alpha1","panelRefName":"panel_0"},{"gridData":{"x":0,"y":49,"w":24,"h":18,"i":"4"},"panelIndex":"4","version":"7.0.0-alpha1","panelRefName":"panel_1"},{"embeddableConfig":{"vis":{"defaultColors":{"0 - 22":"rgb(247,251,255)","22 - 44":"rgb(208,225,242)","44 - 66":"rgb(148,196,223)","66 - 88":"rgb(74,152,201)","88 - 110":"rgb(23,100,171)"},"legendOpen":false}},"gridData":{"x":0,"y":36,"w":24,"h":13,"i":"7"},"panelIndex":"7","version":"6.3.0","panelRefName":"panel_2"},{"embeddableConfig":{"mapCenter":[36.8092847020594,-96.94335937500001],"vis":{"params":{"sort":{"columnIndex":null,"direction":null}}}},"gridData":{"x":27,"y":24,"w":21,"h":12,"i":"9"},"panelIndex":"9","version":"6.3.0","panelRefName":"panel_3"},{"embeddableConfig":{"vis":{"colors":{"0 - 500":"#BF1B00","1000 - 1500":"#7EB26D","500 - 1000":"#F2C96D"},"defaultColors":{"0 - 500":"rgb(165,0,38)","1000 - 1500":"rgb(0,104,55)","500 - 1000":"rgb(255,255,190)"},"legendOpen":false}},"gridData":{"x":10,"y":0,"w":9,"h":11,"i":"11"},"panelIndex":"11","title":"","version":"6.3.0","panelRefName":"panel_4"},{"gridData":{"x":0,"y":24,"w":27,"h":12,"i":"13"},"panelIndex":"13","version":"6.3.0","panelRefName":"panel_5"},{"gridData":{"x":24,"y":36,"w":24,"h":31,"i":"14"},"panelIndex":"14","version":"6.3.0","panelRefName":"panel_6"},{"gridData":{"x":0,"y":11,"w":27,"h":13,"i":"15"},"panelIndex":"15","version":"6.3.0","panelRefName":"panel_7"},{"gridData":{"x":19,"y":0,"w":15,"h":11,"i":"16"},"panelIndex":"16","title":"","version":"6.3.0","panelRefName":"panel_8"},{"embeddableConfig":{"vis":{"legendOpen":false}},"gridData":{"x":34,"y":0,"w":14,"h":11,"i":"17"},"panelIndex":"17","version":"6.3.0","panelRefName":"panel_9"},{"embeddableConfig":{},"gridData":{"x":0,"y":0,"w":10,"h":11,"i":"18"},"panelIndex":"18","title":"","version":"7.0.0-alpha1","panelRefName":"panel_10"}]', + '[{"embeddableConfig":{"vis":{"legendOpen":false}},"gridData":{"x":27,"y":11,"w":21,"h":13,"i":"2"},"panelIndex":"2","version":"7.0.0-alpha1","panelRefName":"panel_0"},{"gridData":{"x":0,"y":49,"w":24,"h":18,"i":"4"},"panelIndex":"4","version":"7.0.0-alpha1","panelRefName":"panel_1"},{"embeddableConfig":{"vis":{"legendOpen":false}},"gridData":{"x":0,"y":36,"w":24,"h":13,"i":"7"},"panelIndex":"7","version":"6.3.0","panelRefName":"panel_2"},{"embeddableConfig":{"mapCenter":[36.8092847020594,-96.94335937500001],"vis":{"params":{"sort":{"columnIndex":null,"direction":null}}}},"gridData":{"x":27,"y":24,"w":21,"h":12,"i":"9"},"panelIndex":"9","version":"6.3.0","panelRefName":"panel_3"},{"embeddableConfig":{"vis":{"legendOpen":false}},"gridData":{"x":10,"y":0,"w":9,"h":11,"i":"11"},"panelIndex":"11","title":"","version":"6.3.0","panelRefName":"panel_4"},{"gridData":{"x":0,"y":24,"w":27,"h":12,"i":"13"},"panelIndex":"13","version":"6.3.0","panelRefName":"panel_5"},{"gridData":{"x":24,"y":36,"w":24,"h":31,"i":"14"},"panelIndex":"14","version":"6.3.0","panelRefName":"panel_6"},{"gridData":{"x":0,"y":11,"w":27,"h":13,"i":"15"},"panelIndex":"15","version":"6.3.0","panelRefName":"panel_7"},{"gridData":{"x":19,"y":0,"w":15,"h":11,"i":"16"},"panelIndex":"16","title":"","version":"6.3.0","panelRefName":"panel_8"},{"embeddableConfig":{"vis":{"legendOpen":false}},"gridData":{"x":34,"y":0,"w":14,"h":11,"i":"17"},"panelIndex":"17","version":"6.3.0","panelRefName":"panel_9"},{"embeddableConfig":{},"gridData":{"x":0,"y":0,"w":10,"h":11,"i":"18"},"panelIndex":"18","title":"","version":"7.0.0-alpha1","panelRefName":"panel_10"}]', optionsJSON: '{"hidePanelTitles":false,"useMargins":true}', version: 1, timeRestore: true, @@ -873,7 +871,7 @@ export const getSavedObjects = (): SavedObject[] => [ uiStateJSON: '{}', version: 1, visState: - '{"title":"(TSVB) Top destinations count","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"top_n","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"terms","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"count"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","terms_size":"5","terms_field":"geo.dest"}],"time_field":"","index_pattern":"","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"bar_color_rules":[{"id":"51d02a70-227c-11ee-89b9-a9479e055b94"}],"time_range_mode":"entire_time_range"}}', + '{"title":"(TSVB) Top destinations count","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"top_n","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"terms","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"count"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","terms_size":"5","terms_field":"geo.dest"}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"bar_color_rules":[{"id":"51d02a70-227c-11ee-89b9-a9479e055b94"}],"time_range_mode":"entire_time_range"}}', }, id: '80e9a930-227c-11ee-b88b-47a93b5c527c', migrationVersion: { visualization: '7.10.0' }, @@ -1045,7 +1043,7 @@ export const getSavedObjects = (): SavedObject[] => [ uiStateJSON: '{"table":{"sort":{"column":"_default_","order":"asc"}}}', version: 1, visState: - '{"title":"(TSVB) Bytes by request stats summary","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"table","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","split_color_mode":"opensearchDashboards","metrics":[{"id":"c75df350-22a7-11ee-8c33-437692f62ad1","type":"count"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"dd26dcd0-2a61-11ee-9b78-47d8b94a8b48"}]},{"id":"c9296480-22a7-11ee-8c33-437692f62ad1","color":"#68BC00","split_mode":"everything","metrics":[{"id":"c9296481-22a7-11ee-8c33-437692f62ad1","type":"avg","field":"bytes"}],"separate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"ed1dcca0-22a7-11ee-8c33-437692f62ad1"}]},{"id":"caa3cf80-22a7-11ee-8c33-437692f62ad1","color":"#68BC00","split_mode":"everything","metrics":[{"id":"caa3cf81-22a7-11ee-8c33-437692f62ad1","type":"min","field":"bytes"}],"separate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"eab16080-22a7-11ee-8c33-437692f62ad1"}]},{"id":"cc20d290-22a7-11ee-8c33-437692f62ad1","color":"#68BC00","split_mode":"everything","metrics":[{"id":"cc20d291-22a7-11ee-8c33-437692f62ad1","type":"max","field":"bytes"}],"separate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"e6051680-22a7-11ee-8c33-437692f62ad1"}]}],"time_field":"","index_pattern":"","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"bar_color_rules":[{"id":"bdf75590-22a7-11ee-8c33-437692f62ad1"}],"pivot_id":"request.keyword","pivot_type":"string","pivot_rows":"20","time_range_mode":"entire_time_range"}}', + '{"title":"(TSVB) Bytes by request stats summary","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"table","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","split_color_mode":"opensearchDashboards","metrics":[{"id":"c75df350-22a7-11ee-8c33-437692f62ad1","type":"count"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"dd26dcd0-2a61-11ee-9b78-47d8b94a8b48"}]},{"id":"c9296480-22a7-11ee-8c33-437692f62ad1","color":"#54B399","split_mode":"everything","metrics":[{"id":"c9296481-22a7-11ee-8c33-437692f62ad1","type":"avg","field":"bytes"}],"separate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"ed1dcca0-22a7-11ee-8c33-437692f62ad1"}]},{"id":"caa3cf80-22a7-11ee-8c33-437692f62ad1","color":"#54B399","split_mode":"everything","metrics":[{"id":"caa3cf81-22a7-11ee-8c33-437692f62ad1","type":"min","field":"bytes"}],"separate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"eab16080-22a7-11ee-8c33-437692f62ad1"}]},{"id":"cc20d290-22a7-11ee-8c33-437692f62ad1","color":"#54B399","split_mode":"everything","metrics":[{"id":"cc20d291-22a7-11ee-8c33-437692f62ad1","type":"max","field":"bytes"}],"separate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"e6051680-22a7-11ee-8c33-437692f62ad1"}]}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"bar_color_rules":[{"id":"bdf75590-22a7-11ee-8c33-437692f62ad1"}],"pivot_id":"request.keyword","pivot_type":"string","pivot_rows":"20","time_range_mode":"entire_time_range"}}', }, id: '009fd930-22a8-11ee-b88b-47a93b5c527c', migrationVersion: { visualization: '7.10.0' }, @@ -1154,7 +1152,7 @@ export const getSavedObjects = (): SavedObject[] => [ uiStateJSON: '{}', version: 1, visState: - '{"title":"(TSVB) Unique visitors","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"metric","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"cardinality","field":"clientip"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":""}],"time_field":"","index_pattern":"","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"background_color_rules":[{"id":"470e09a0-22a3-11ee-9154-c7376b9c3c25"}],"bar_color_rules":[{"id":"4819fb60-22a3-11ee-9154-c7376b9c3c25"}],"time_range_mode":"entire_time_range"}}', + '{"title":"(TSVB) Unique visitors","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"metric","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"cardinality","field":"clientip"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":""}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"background_color_rules":[{"id":"470e09a0-22a3-11ee-9154-c7376b9c3c25"}],"bar_color_rules":[{"id":"4819fb60-22a3-11ee-9154-c7376b9c3c25"}],"time_range_mode":"entire_time_range"}}', }, id: '9a5e50b0-22a3-11ee-b88b-47a93b5c527c', migrationVersion: { visualization: '7.10.0' }, @@ -1282,7 +1280,7 @@ export const getSavedObjects = (): SavedObject[] => [ uiStateJSON: '{}', version: 1, visState: - '{"title":"(TSVB) Average bytes by extension","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"gauge","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"terms","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"avg","field":"bytes"}],"separate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"","var_name":"","terms_order_by":"61ca57f2-469d-11e7-af02-69e470af7417","terms_field":"extension.keyword","terms_size":"5"}],"time_field":"","index_pattern":"","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"markdown":"# Average bytes by extension\\n\\n{{#each _all}}\\n- {{ label }}\\n{{/each}}\\n\\nText that is not a quote\\n\\n> Text that is a quote\\n\\n## A second-level heading\\n\\nUse `git status` to list all new or modified files that haven\'t yet been committed.\\n\\nSome basic Git commands are:\\n```\\ngit status\\ngit add\\ngit commit\\n```\\n\\n### A third-level heading\\n\\nTest out the [OpenSearch Dashboards Playground](https://playground.opensearch.org).\\n\\nNavigate to [home](/).\\n\\n![Screenshot of sample data UI in OpenSearch Dashboards](https://opensearch.org/docs/latest/images/dashboards/add-sample-data.png)\\n\\n- list item\\n- list item\\n- list item\\n\\n1. list item\\n2. list item\\n3. list item{{# count.data.formatted }}{{/ count.data.formatted }}{{ count.label }}","time_range_mode":"entire_time_range","bar_color_rules":[{"id":"459b7790-2287-11ee-9154-c7376b9c3c25"}],"gauge_color_rules":[{"value":0,"id":"489a1190-2287-11ee-9154-c7376b9c3c25","gauge":"rgba(1,125,115,1)","operator":"gt"},{"value":6000,"id":"adbd7cb0-2287-11ee-9154-c7376b9c3c25","gauge":"rgba(245,167,0,1)","operator":"gt"},{"value":6500,"id":"b1022060-2287-11ee-9154-c7376b9c3c25","gauge":"rgba(189,39,30,1)","operator":"gt"}],"gauge_width":10,"gauge_inner_width":10,"gauge_style":"half","gauge_max":"7000","filter":{"query":"","language":"kuery"},"gauge_inner_color":null}}', + '{"title":"(TSVB) Average bytes by extension","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"gauge","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"terms","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"avg","field":"bytes"}],"separate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"","var_name":"","terms_order_by":"61ca57f2-469d-11e7-af02-69e470af7417","terms_field":"extension.keyword","terms_size":"5"}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"markdown":"# Average bytes by extension\\n\\n{{#each _all}}\\n- {{ label }}\\n{{/each}}\\n\\nText that is not a quote\\n\\n> Text that is a quote\\n\\n## A second-level heading\\n\\nUse `git status` to list all new or modified files that haven\'t yet been committed.\\n\\nSome basic Git commands are:\\n```\\ngit status\\ngit add\\ngit commit\\n```\\n\\n### A third-level heading\\n\\nTest out the [OpenSearch Dashboards Playground](https://playground.opensearch.org).\\n\\nNavigate to [home](/).\\n\\n![Screenshot of sample data UI in OpenSearch Dashboards](https://opensearch.org/docs/latest/images/dashboards/add-sample-data.png)\\n\\n- list item\\n- list item\\n- list item\\n\\n1. list item\\n2. list item\\n3. list item{{# count.data.formatted }}{{/ count.data.formatted }}{{ count.label }}","time_range_mode":"entire_time_range","bar_color_rules":[{"id":"459b7790-2287-11ee-9154-c7376b9c3c25"}],"gauge_color_rules":[{"value":0,"id":"489a1190-2287-11ee-9154-c7376b9c3c25","gauge":"rgba(1,125,115,1)","operator":"gt"},{"value":6000,"id":"adbd7cb0-2287-11ee-9154-c7376b9c3c25","gauge":"rgba(245,167,0,1)","operator":"gt"},{"value":6500,"id":"b1022060-2287-11ee-9154-c7376b9c3c25","gauge":"rgba(189,39,30,1)","operator":"gt"}],"gauge_width":10,"gauge_inner_width":10,"gauge_style":"half","gauge_max":"7000","filter":{"query":"","language":"kuery"},"gauge_inner_color":null}}', }, id: '4ec31b10-2288-11ee-b88b-47a93b5c527c', migrationVersion: { visualization: '7.10.0' }, @@ -1346,7 +1344,7 @@ export const getSavedObjects = (): SavedObject[] => [ uiStateJSON: '{}', version: 1, visState: - '{"title":"(TSVB) Average machine RAM","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"gauge","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"avg","field":"machine.ram"},{"id":"333bb4d0-2290-11ee-9154-c7376b9c3c25","type":"math","variables":[{"id":"3643ebc0-2290-11ee-9154-c7376b9c3c25","name":"ram","field":"61ca57f2-469d-11e7-af02-69e470af7417"}],"script":"params.ram/20000000000"}],"separate_axis":0,"axis_position":"right","formatter":"percent","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Average RAM","value_template":"","filter":{"query":"","language":"kuery"}}],"time_field":"","index_pattern":"","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"gauge_color_rules":[{"value":0,"id":"e17166f0-228e-11ee-9154-c7376b9c3c25","gauge":"rgba(189,39,30,1)","operator":"gt"}],"gauge_width":10,"gauge_inner_width":10,"gauge_style":"half","time_range_mode":"entire_time_range","gauge_max":"1","filter":{"query":"","language":"kuery"}}}', + '{"title":"(TSVB) Average machine RAM","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"gauge","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"avg","field":"machine.ram"},{"id":"333bb4d0-2290-11ee-9154-c7376b9c3c25","type":"math","variables":[{"id":"3643ebc0-2290-11ee-9154-c7376b9c3c25","name":"ram","field":"61ca57f2-469d-11e7-af02-69e470af7417"}],"script":"params.ram/20000000000"}],"separate_axis":0,"axis_position":"right","formatter":"percent","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Average RAM","value_template":"","filter":{"query":"","language":"kuery"}}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"gauge_color_rules":[{"value":0,"id":"e17166f0-228e-11ee-9154-c7376b9c3c25","gauge":"rgba(189,39,30,1)","operator":"gt"}],"gauge_width":10,"gauge_inner_width":10,"gauge_style":"half","time_range_mode":"entire_time_range","gauge_max":"1","filter":{"query":"","language":"kuery"}}}', }, id: '19717e00-228f-11ee-b88b-47a93b5c527c', migrationVersion: { visualization: '7.10.0' }, @@ -1474,7 +1472,7 @@ export const getSavedObjects = (): SavedObject[] => [ uiStateJSON: '{}', version: 1, visState: - '{"title":"(TSVB) Sample static markdown","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"markdown","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"count"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none"}],"time_field":"","index_pattern":"","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"markdown":"# A first-level heading\\n\\n- **This is bold text**\\n- _This text is italicized_\\n- ~~This was mistaken text~~\\n- **This text is _extremely_ important**\\n- ***All this text is important***\\n\\nText that is not a quote\\n\\n> Text that is a quote\\n\\n## A second-level heading\\n\\nUse `git status` to list all new or modified files that haven\'t yet been committed.\\n\\nSome basic Git commands are:\\n```\\ngit status\\ngit add\\ngit commit\\n```\\n\\n### A third-level heading\\n\\nTest out the [OpenSearch Dashboards Playground](https://playground.opensearch.org).\\n\\nNavigate to [home](/).\\n\\n![Screenshot of sample data UI in OpenSearch Dashboards](https://opensearch.org/docs/latest/images/dashboards/add-sample-data.png)\\n\\n- list item\\n- list item\\n- list item\\n\\n1. list item\\n2. list item\\n3. list item"}}', + '{"title":"(TSVB) Sample static markdown","type":"metrics","aggs":[],"params":{"id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"markdown","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"#54B399","split_mode":"everything","split_color_mode":"opensearchDashboards","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"count"}],"separate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none"}],"time_field":"timestamp","index_pattern":"opensearch_dashboards_sample_data_logs","interval":"","axis_position":"left","axis_formatter":"number","axis_scale":"normal","show_legend":1,"show_grid":1,"tooltip_mode":"show_all","default_index_pattern":"opensearch_dashboards_sample_data_logs","default_timefield":"timestamp","isModelInvalid":false,"markdown":"# A first-level heading\\n\\n- **This is bold text**\\n- _This text is italicized_\\n- ~~This was mistaken text~~\\n- **This text is _extremely_ important**\\n- ***All this text is important***\\n\\nText that is not a quote\\n\\n> Text that is a quote\\n\\n## A second-level heading\\n\\nUse `git status` to list all new or modified files that haven\'t yet been committed.\\n\\nSome basic Git commands are:\\n```\\ngit status\\ngit add\\ngit commit\\n```\\n\\n### A third-level heading\\n\\nTest out the [OpenSearch Dashboards Playground](https://playground.opensearch.org).\\n\\nNavigate to [home](/).\\n\\n![Screenshot of sample data UI in OpenSearch Dashboards](https://opensearch.org/docs/latest/images/dashboards/add-sample-data.png)\\n\\n- list item\\n- list item\\n- list item\\n\\n1. list item\\n2. list item\\n3. list item"}}', }, id: '4c6a47e0-2291-11ee-b88b-47a93b5c527c', migrationVersion: { visualization: '7.10.0' }, diff --git a/src/plugins/vis_default_editor/public/_default.scss b/src/plugins/vis_default_editor/public/_default.scss index 8a71ee4f04c9..7b563b907164 100644 --- a/src/plugins/vis_default_editor/public/_default.scss +++ b/src/plugins/vis_default_editor/public/_default.scss @@ -12,7 +12,6 @@ */ .visEditor__collapsibleSidebar { - background: $euiColorLightestShade; min-width: $vis-editor-sidebar-min-width; max-width: 100%; position: relative; diff --git a/src/plugins/vis_type_vega/public/data_model/vega_parser.test.js b/src/plugins/vis_type_vega/public/data_model/vega_parser.test.js index f9b9f99741c3..6d35ae717429 100644 --- a/src/plugins/vis_type_vega/public/data_model/vega_parser.test.js +++ b/src/plugins/vis_type_vega/public/data_model/vega_parser.test.js @@ -106,6 +106,9 @@ describe(`VegaParser._setDefaultColors`, () => { fill: euiThemeVars.euiColorDarkestShade, }, }, + text: { + fill: euiThemeVars.euiTextColor, + }, title: { color: euiThemeVars.euiColorDarkestShade, }, @@ -132,6 +135,7 @@ describe(`VegaParser._setDefaultColors`, () => { rule: { stroke: '#54B399' }, shape: { stroke: '#54B399' }, symbol: { fill: '#54B399' }, + text: { fill: euiThemeVars.euiTextColor }, trail: { fill: '#54B399' }, style: { 'group-title': { diff --git a/src/plugins/vis_type_vega/public/data_model/vega_parser.ts b/src/plugins/vis_type_vega/public/data_model/vega_parser.ts index 4bdd724dbead..0f0f9b32bb4b 100644 --- a/src/plugins/vis_type_vega/public/data_model/vega_parser.ts +++ b/src/plugins/vis_type_vega/public/data_model/vega_parser.ts @@ -749,6 +749,8 @@ The URL is an identifier only. OpenSearch Dashboards and your browser will never if (this.isVegaLite) { // Vega-Lite: set default color, works for fill and strike -- config: { mark: { color: '#54B399' }} this._setDefaultValue(defaultColor, 'config', 'mark', 'color'); + // By default text marks should use theme-aware text color + this._setDefaultValue(euiThemeVars.euiTextColor, 'config', 'text', 'fill'); } else { // Vega - global mark has very strange behavior, must customize each mark type individually // https://github.com/vega/vega/issues/1083 @@ -765,6 +767,8 @@ The URL is an identifier only. OpenSearch Dashboards and your browser will never this._setDefaultValue(defaultColor, 'config', 'rule', 'stroke'); this._setDefaultValue(defaultColor, 'config', 'shape', 'stroke'); this._setDefaultValue(defaultColor, 'config', 'symbol', 'fill'); + // By default text marks should use theme-aware text color + this._setDefaultValue(euiThemeVars.euiTextColor, 'config', 'text', 'fill'); this._setDefaultValue(defaultColor, 'config', 'trail', 'fill'); } } diff --git a/yarn.lock b/yarn.lock index 6dcb4f4b7426..60e975802839 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6151,6 +6151,13 @@ commander@^5.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +comment-stripper@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/comment-stripper/-/comment-stripper-0.0.4.tgz#e8d61366d362779ea225c764f05cca6c950f8a2c" + integrity sha512-4K87KyAmZtZmAUznIJuVsBB7v328V4GBL2wVhno71aunUymMfYBVaAWITH4jrH6uI7NbxpczSdl7NysHx+XfYg== + dependencies: + loader-utils "^2.0.0" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -17104,10 +17111,10 @@ tinycolor2@^1.0.0, tinycolor2@^1.4.1: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== -tinygradient@0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tinygradient/-/tinygradient-0.4.3.tgz#0a8dfde56f8865deec4c435a51bd5b0c0dec59fa" - integrity sha512-tBPYQSs6eWukzzAITBSmqcOwZCKACvRa/XjPPh1mj4mnx4G3Drm51HxyCTU/TKnY8kG4hmTe5QlOh9O82aNtJQ== +tinygradient@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/tinygradient/-/tinygradient-1.1.5.tgz#0fb855ceb18d96b21ba780b51a8012033b2530ef" + integrity sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw== dependencies: "@types/tinycolor2" "^1.4.0" tinycolor2 "^1.0.0"