From 6b28474362ebe5f812ad0338a659baf70bf5a63d Mon Sep 17 00:00:00 2001 From: Noah Talerman <47070608+noahtalerman@users.noreply.github.com> Date: Fri, 22 Mar 2024 12:51:03 -0400 Subject: [PATCH 1/6] Update product design handbook (#17790) - Only notify channel if there are changes. Why? Less noise --- handbook/product-design/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handbook/product-design/README.md b/handbook/product-design/README.md index 21e61fe871c3..835982d97007 100644 --- a/handbook/product-design/README.md +++ b/handbook/product-design/README.md @@ -170,7 +170,7 @@ Every week, a member of the product team looks up whether there is: 4. a release of CIS Benchmarks for [macOS 14 Sonoma](https://workbench.cisecurity.org/community/20/benchmarks?q=sonoma&status=&sortBy=version&type=desc) 5. a new major or minor version of [ChromeOS](https://chromereleases.googleblog.com/search/label/Chrome%20OS) -The DRI should record the latest versions in the [maintenance tracker](https://docs.google.com/spreadsheets/d/1IWfQtSkOQgm_JIQZ0i2y3A8aaK5vQW1ayWRk6-4FOp0/edit#gid=0) and then notify the [#help-product-design Slack channel](https://fleetdm.slack.com/archives/C02A8BRABB5) with an update, noting the current versions and highlighting any changes. +The DRI should record the latest versions in the [maintenance tracker](https://docs.google.com/spreadsheets/d/1IWfQtSkOQgm_JIQZ0i2y3A8aaK5vQW1ayWRk6-4FOp0/edit#gid=0). If there are any changes, the DRI sends an update in the [#help-product-design Slack channel](https://fleetdm.slack.com/archives/C02A8BRABB5). ### View Fleet usage statistics In order to understand the usage of the Fleet product, we [collect statistics](https://fleetdm.com/docs/using-fleet/usage-statistics) from installations where this functionality is enabled. From 0d8b51a5b3adfc7adaf63dd5cacdffc4cb4e25c0 Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 22 Mar 2024 11:54:23 -0500 Subject: [PATCH 2/6] Website: Remove /upgrade page. (#17754) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes: #17477 Changes: - Removed the /upgrade page - Added a redirect: `/upgrade` » `/pricing` --- .../deliver-premium-upgrade-form.js | 72 ------ website/api/controllers/view-upgrade.js | 27 -- .../images/premium-landing-feature-1.svg | 72 ------ .../images/premium-landing-feature-2.svg | 148 ----------- .../images/premium-landing-feature-3.svg | 231 ------------------ .../images/premium-landing-feature-4.svg | 123 ---------- .../images/premium-landing-feature-5.svg | 74 ------ website/assets/js/pages/upgrade.page.js | 64 ----- website/assets/styles/importer.less | 1 - website/assets/styles/pages/upgrade.less | 199 --------------- website/config/policies.js | 2 - website/config/routes.js | 11 +- website/views/layouts/layout.ejs | 1 - website/views/pages/upgrade.ejs | 109 --------- 14 files changed, 1 insertion(+), 1133 deletions(-) delete mode 100644 website/api/controllers/deliver-premium-upgrade-form.js delete mode 100644 website/api/controllers/view-upgrade.js delete mode 100644 website/assets/images/premium-landing-feature-1.svg delete mode 100644 website/assets/images/premium-landing-feature-2.svg delete mode 100644 website/assets/images/premium-landing-feature-3.svg delete mode 100644 website/assets/images/premium-landing-feature-4.svg delete mode 100644 website/assets/images/premium-landing-feature-5.svg delete mode 100644 website/assets/js/pages/upgrade.page.js delete mode 100644 website/assets/styles/pages/upgrade.less delete mode 100644 website/views/pages/upgrade.ejs diff --git a/website/api/controllers/deliver-premium-upgrade-form.js b/website/api/controllers/deliver-premium-upgrade-form.js deleted file mode 100644 index 783191f13eef..000000000000 --- a/website/api/controllers/deliver-premium-upgrade-form.js +++ /dev/null @@ -1,72 +0,0 @@ -module.exports = { - - - friendlyName: 'Deliver premium upgrade form', - - - description: 'Delivers a Fleet Premium upgrade form submission to a Zapier webhook', - - - inputs: { - organization: { - type: 'string', - required: true, - }, - - monthsUsingFleetFree: { - type: 'string', - required: true, - example: '1 - 3 months' - }, - - emailAddress: { - type: 'string', - isEmail: true, - required: true, - }, - - numberOfHosts: { - type: 'number', - required: true, - isInteger: true, - } - }, - - - exits: { - success: { - description: 'The Fleet Premium upgrade form submission was sent to Zapier successfully.' - } - }, - - - fn: async function ({organization, monthsUsingFleetFree, emailAddress, numberOfHosts}) { - - if(!sails.config.custom.zapierSandboxWebhookSecret) { - throw new Error('Message not delivered: zapierSandboxWebhookSecret needs to be configured in sails.config.custom.'); - } - - // Send a POST request to Zapier - await sails.helpers.http.post( - 'https://hooks.zapier.com/hooks/catch/3627242/bvxxkjf/', - { - 'emailAddress': emailAddress, - 'organization': organization, - 'numberOfHosts': numberOfHosts, - 'monthsUsingFleetFree': monthsUsingFleetFree, - 'webhookSecret': sails.config.custom.zapierSandboxWebhookSecret - } - ) - .timeout(5000) - .tolerate(['non200Response', 'requestFailed', {name: 'TimeoutError'}], (err)=>{ - // Note that Zapier responds with a 2xx status code even if something goes wrong, so just because this message is not logged doesn't mean everything is hunky dory. More info: https://github.com/fleetdm/fleet/pull/6380#issuecomment-1204395762 - sails.log.warn(`When a user submitted the Fleet Premium upgrade form, an error occurred while sending a request to Zapier. Raw error: ${require('util').inspect(err)}`); - return; - });//∞ - - // All done. - return; - } - - -}; diff --git a/website/api/controllers/view-upgrade.js b/website/api/controllers/view-upgrade.js deleted file mode 100644 index e946b027004f..000000000000 --- a/website/api/controllers/view-upgrade.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - - - friendlyName: 'View upgrade', - - - description: 'Display "Upgrade" page.', - - - exits: { - - success: { - viewTemplatePath: 'pages/upgrade' - } - - }, - - - fn: async function () { - - // Respond with view. - return {}; - - } - - -}; diff --git a/website/assets/images/premium-landing-feature-1.svg b/website/assets/images/premium-landing-feature-1.svg deleted file mode 100644 index 39945d4cfddb..000000000000 --- a/website/assets/images/premium-landing-feature-1.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/assets/images/premium-landing-feature-2.svg b/website/assets/images/premium-landing-feature-2.svg deleted file mode 100644 index 61e48c60d3f1..000000000000 --- a/website/assets/images/premium-landing-feature-2.svg +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/assets/images/premium-landing-feature-3.svg b/website/assets/images/premium-landing-feature-3.svg deleted file mode 100644 index 28a0ffeaea4a..000000000000 --- a/website/assets/images/premium-landing-feature-3.svg +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/assets/images/premium-landing-feature-4.svg b/website/assets/images/premium-landing-feature-4.svg deleted file mode 100644 index 239a1cc75c0c..000000000000 --- a/website/assets/images/premium-landing-feature-4.svg +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/assets/images/premium-landing-feature-5.svg b/website/assets/images/premium-landing-feature-5.svg deleted file mode 100644 index 50ddd2e529a5..000000000000 --- a/website/assets/images/premium-landing-feature-5.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/assets/js/pages/upgrade.page.js b/website/assets/js/pages/upgrade.page.js deleted file mode 100644 index 9281c1a9b774..000000000000 --- a/website/assets/js/pages/upgrade.page.js +++ /dev/null @@ -1,64 +0,0 @@ -parasails.registerPage('upgrade', { - // ╦╔╗╔╦╔╦╗╦╔═╗╦ ╔═╗╔╦╗╔═╗╔╦╗╔═╗ - // ║║║║║ ║ ║╠═╣║ ╚═╗ ║ ╠═╣ ║ ║╣ - // ╩╝╚╝╩ ╩ ╩╩ ╩╩═╝ ╚═╝ ╩ ╩ ╩ ╩ ╚═╝ - data: { - formData: { - monthsUsingFleetFree: 'Please select one', - }, - - // For tracking client-side validation errors in our form. - // > Has property set to `true` for each invalid property in `formData`. - formErrors: { /* … */ }, - - // Form rules - formRules: { - organization: {required: true }, - monthsUsingFleetFree: { - required: true, - isIn:[ - '1 - 3 months', - '3 - 6 months', - '6 - 12 months', - '12+ months', - ] - }, - emailAddress: {required: true, isEmail: true}, - numberOfHosts: {required: true }, - }, - cloudError: '', - // Syncing / loading state - syncing: false, - cloudSuccess: false, - }, - - // ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗ - // ║ ║╠╣ ║╣ ║ ╚╦╝║ ║ ║╣ - // ╩═╝╩╚ ╚═╝╚═╝ ╩ ╚═╝╩═╝╚═╝ - beforeMount: function() { - //… - }, - mounted: async function() { - //… - }, - - // ╦╔╗╔╔╦╗╔═╗╦═╗╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗ - // ║║║║ ║ ║╣ ╠╦╝╠═╣║ ║ ║║ ║║║║╚═╗ - // ╩╝╚╝ ╩ ╚═╝╩╚═╩ ╩╚═╝ ╩ ╩╚═╝╝╚╝╚═╝ - methods: { - typeClearOneFormError: async function(field) { - if(this.formErrors[field]){ - this.formErrors = _.omit(this.formErrors, field); - } - }, - submittedForm: function() { - this.cloudSuccess = true; - }, - _resetForms: async function() { - this.cloudError = ''; - this.formData = {}; - this.formErrors = {}; - await this.forceRender(); - }, - } -}); diff --git a/website/assets/styles/importer.less b/website/assets/styles/importer.less index 7d4131d5cf6d..0d2f94d67817 100644 --- a/website/assets/styles/importer.less +++ b/website/assets/styles/importer.less @@ -65,7 +65,6 @@ @import 'pages/vanta-authorization.less'; @import 'pages/admin/generate-license.less'; @import 'pages/device-management.less'; -@import 'pages/upgrade.less'; @import 'pages/endpoint-ops.less'; @import 'pages/transparency.less'; @import 'pages/press-kit.less'; diff --git a/website/assets/styles/pages/upgrade.less b/website/assets/styles/pages/upgrade.less deleted file mode 100644 index e883a27e38a8..000000000000 --- a/website/assets/styles/pages/upgrade.less +++ /dev/null @@ -1,199 +0,0 @@ -#upgrade { - background: linear-gradient(180deg, rgba(232, 241, 246, 0.5) 4.75%, rgba(255, 255, 255, 0) 37.29%); - [purpose='page-container'] { - padding-top: 100px; - padding-bottom: 120px; - max-width: 1200px; - margin-left: auto; - margin-right: auto; - padding-left: 40px; - padding-right: 40px; - } - h1 { - font-weight: 800; - font-size: 40px; - line-height: 48px; - text-align: left; - margin-bottom: 80px; - } - h2 { - font-weight: 800; - font-size: 28px; - line-height: 38px; - } - h3 { - font-weight: 700; - font-size: 20px; - line-height: 24px; - margin-bottom: 16px; - } - a { - font-size: 14px; - color: @core-vibrant-blue; - text-decoration: underline; - } - - [purpose='feature'] { - img { - margin-left: auto; - margin-right: auto; - } - [purpose='feature-image'] { - min-width: 160px; - margin-right: 40px; - } - margin-bottom: 80px; - } - [purpose='upgrade-form'] { - margin-left: 80px; - padding: 40px; - background: #F9FAFC; - box-shadow: 0px 0px 0px 1px #E2E4EA; - border-radius: 8px; - width: 480px; - input { - border: 1px solid #C5C7D1; - border-radius: 6px; - height: 48px; - font-size: 16px; - color: @core-fleet-black; - -webkit-appearance: none; - } - select { - // for hiding the -
Please enter the name of your company.
- -
- - -
Please select an option
-
-
- - -
This doesn’t appear to be a valid email address
-
-
- - -
Please enter a number of devices.
-
- -
- Submit -
- -

We will never spam you.

- - <%// Form success state %> -
-

We’ll be in touch soon!

-

A member of our team will be in touch within one business day.

-
- - - - -<%- /* Expose server-rendered data as window.SAILS_LOCALS :: */ exposeLocalsToBrowser() %> From 413107b93a9b615370e24c47630a485d4a6a0c23 Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 22 Mar 2024 12:01:15 -0500 Subject: [PATCH 3/6] Vuln dashboard: Update Okta SSO hook (#17773) Closes: #17772 More context: https://github.com/fleetdm/fleet/pull/17601#issuecomment-2013383611 Changes: - Updated the order of the vulnerability dashboard's HTTP middleware if Okta SSO is enabled. --- .../api/hooks/{OktaSSO => okta-sso}/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename ee/vulnerability-dashboard/api/hooks/{OktaSSO => okta-sso}/index.js (96%) diff --git a/ee/vulnerability-dashboard/api/hooks/OktaSSO/index.js b/ee/vulnerability-dashboard/api/hooks/okta-sso/index.js similarity index 96% rename from ee/vulnerability-dashboard/api/hooks/OktaSSO/index.js rename to ee/vulnerability-dashboard/api/hooks/okta-sso/index.js index d66c67db1e4a..d50c580c981a 100644 --- a/ee/vulnerability-dashboard/api/hooks/OktaSSO/index.js +++ b/ee/vulnerability-dashboard/api/hooks/okta-sso/index.js @@ -35,6 +35,7 @@ module.exports = function (sails){ } // Clone the existing routes + // NOTE: Changing sails.config after the app lifts goes against Sails.js conventions and this code should not be reproduced. let appRoutes = Object.assign({}, sails.config.routes); // Remove the routes for the built-in login page.. delete appRoutes['GET /login']; @@ -45,9 +46,9 @@ module.exports = function (sails){ 'bodyParser', 'compress', 'poweredBy', + 'www',// Note: This changes the conventions of Sails.js. Don't ever replicate this or use Passport.js. 'oktaSSO', 'router', - 'www', 'favicon', ]; // Specify a custom http middleware order, placing the Okta middleware before the router. This is so the routes generated by Okta will take precedence over the sails router. From b5a81f93d948428823f051e299e8a7b7e072e4bf Mon Sep 17 00:00:00 2001 From: Luke Heath Date: Fri, 22 Mar 2024 12:29:07 -0500 Subject: [PATCH 4/6] Add myself as codeowner to all engineering workflows (#17800) --- CODEOWNERS | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index ead9ee8a62e8..4c3dcb908ebb 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -132,30 +132,30 @@ go.mod @fleetdm/go /.github/workflows/trivy-scan.yml @lukeheath /.github/workflows/goreleaser-snapshot-fleet.yaml @lukeheath /.github/workflows/build-and-push-fleetctl-docker.yml @lukeheath -/.github/workflows/fleetd-tuf.yml @lucasmrod -/.github/workflows/generate-desktop-targets.yml @lucasmrod -/.github/workflows/test-yml-specs.yml @lucasmrod -/.github/workflows/build-binaries.yaml @lucasmrod -/.github/workflows/fleet-and-orbit.yml @lucasmrod -/.github/workflows/build-orbit.yaml @lucasmrod -/.github/workflows/generate-osqueryd-targets.yml @lucasmrod -/.github/workflows/test-packaging.yml @lucasmrod -/.github/workflows/release-helm.yaml @rfairburn -/.github/workflows/pr-helm.yaml @rfairburn -/.github/workflows/tfvalidate.yml @rfairburn -/.github/workflows/dogfood-deploy.yml @rfairburn -/.github/workflows/test-db-changes.yml @roperzh -/.github/workflows/test-go.yaml @roperzh -/.github/workflows/golangci-lint.yml @roperzh -/.github/workflows/test-native-tooling-packaging.yml @roperzh -/.github/workflows/check-tuf-timestamps.yml @roperzh -/.github/workflows/test-puppet.yml @roperzh -/.github/workflows/generate-nudge-targets.yml @roperzh -/.github/workflows/test-js.yml @ghernandez345 -/.github/workflows/dogfood-gitops.yml @getvictor -/.github/workflows/test-fleetd-chrome.yml @getvictor -/.github/workflows/release-fleetd-chrome.yml @getvictor -/.github/workflows/release-fleetd-chrome-beta.yml @getvictor +/.github/workflows/fleetd-tuf.yml @lucasmrod @lukeheath +/.github/workflows/generate-desktop-targets.yml @lucasmrod @lukeheath +/.github/workflows/test-yml-specs.yml @lucasmrod @lukeheath +/.github/workflows/build-binaries.yaml @lucasmrod @lukeheath +/.github/workflows/fleet-and-orbit.yml @lucasmrod @lukeheath +/.github/workflows/build-orbit.yaml @lucasmrod @lukeheath +/.github/workflows/generate-osqueryd-targets.yml @lucasmrod @lukeheath +/.github/workflows/test-packaging.yml @lucasmrod @lukeheath +/.github/workflows/release-helm.yaml @rfairburn @lukeheath +/.github/workflows/pr-helm.yaml @rfairburn @lukeheath +/.github/workflows/tfvalidate.yml @rfairburn @lukeheath +/.github/workflows/dogfood-deploy.yml @rfairburn @lukeheath +/.github/workflows/test-db-changes.yml @roperzh @lukeheath +/.github/workflows/test-go.yaml @roperzh @lukeheath +/.github/workflows/golangci-lint.yml @roperzh @lukeheath +/.github/workflows/test-native-tooling-packaging.yml @roperzh @lukeheath +/.github/workflows/check-tuf-timestamps.yml @roperzh @lukeheath +/.github/workflows/test-puppet.yml @roperzh @lukeheath +/.github/workflows/generate-nudge-targets.yml @roperzh @lukeheath +/.github/workflows/test-js.yml @ghernandez345 @lukeheath +/.github/workflows/dogfood-gitops.yml @getvictor @lukeheath +/.github/workflows/test-fleetd-chrome.yml @getvictor @lukeheath +/.github/workflows/release-fleetd-chrome.yml @getvictor @lukeheath +/.github/workflows/release-fleetd-chrome-beta.yml @getvictor @lukeheath # ℹ️ But wait, there's more! # See the comments up top to learn where else DRIs and maintainers are configured. From 644dddce4f692c1116cb83e92debad50852d40ca Mon Sep 17 00:00:00 2001 From: RachelElysia <71795832+RachelElysia@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:12:19 -0400 Subject: [PATCH 5/6] =?UTF-8?q?[released=20bug]=20Fleet=20UI:=20standard?= =?UTF-8?q?=20query=20library=20platforms=20render=20prop=E2=80=A6=20(#177?= =?UTF-8?q?12)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changes/17662-render-standard-query-platforms-correctly | 1 + .../queries/edit/components/EditQueryForm/EditQueryForm.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changes/17662-render-standard-query-platforms-correctly diff --git a/changes/17662-render-standard-query-platforms-correctly b/changes/17662-render-standard-query-platforms-correctly new file mode 100644 index 000000000000..c625264580fa --- /dev/null +++ b/changes/17662-render-standard-query-platforms-correctly @@ -0,0 +1 @@ +- Fixes UI bug to render the query platform correctly for queries imported from the standard query library diff --git a/frontend/pages/queries/edit/components/EditQueryForm/EditQueryForm.tsx b/frontend/pages/queries/edit/components/EditQueryForm/EditQueryForm.tsx index e6ac26e7c293..c5b70d70a963 100644 --- a/frontend/pages/queries/edit/components/EditQueryForm/EditQueryForm.tsx +++ b/frontend/pages/queries/edit/components/EditQueryForm/EditQueryForm.tsx @@ -724,7 +724,7 @@ const EditQueryForm = ({ placeholder="Select" label="Platform" onChange={onChangeSelectPlatformOptions} - value={lastEditedQueryPlatforms} + value={lastEditedQueryPlatforms.replace(/\s/g, "")} // NOTE: FE requires no whitespace to render UI multi wrapperClassName={`${baseClass}__form-field form-field--platform`} helpText="By default, your query collects data on all compatible platforms." From d5df23964b0b52f1d442b66ffe4451dc2a9ef969 Mon Sep 17 00:00:00 2001 From: RachelElysia <71795832+RachelElysia@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:26:09 -0400 Subject: [PATCH 6/6] Fleet UI: Clickable elements include cursor hover state (#17688) --- changes/17208-hover-states | 1 + .../forms/fields/Checkbox/_styles.scss | 23 +++++++++++++++++++ .../forms/fields/Dropdown/_styles.scss | 2 ++ .../pages/DashboardPage/cards/MDM/MDM.tsx | 1 + .../components/LabelFilterSelect/_styles.scss | 4 ++++ 5 files changed, 31 insertions(+) create mode 100644 changes/17208-hover-states diff --git a/changes/17208-hover-states b/changes/17208-hover-states new file mode 100644 index 000000000000..5ae0c7f17a04 --- /dev/null +++ b/changes/17208-hover-states @@ -0,0 +1 @@ +Fleet UI: Add hover states to clickable elements diff --git a/frontend/components/forms/fields/Checkbox/_styles.scss b/frontend/components/forms/fields/Checkbox/_styles.scss index 1bd81b1e2a21..3aa8725df128 100644 --- a/frontend/components/forms/fields/Checkbox/_styles.scss +++ b/frontend/components/forms/fields/Checkbox/_styles.scss @@ -22,6 +22,13 @@ border: solid 2px $core-vibrant-blue; } + &:hover { + &::after { + background-color: $core-vibrant-blue-over; + border: solid 2px $core-vibrant-blue-over; + } + } + &::before { @include position(absolute, 50% null null 50%); transform: rotate(45deg); @@ -42,6 +49,7 @@ @include size(20px); @include position(absolute, 0 null null 0); display: inline-block; + cursor: pointer; &::after { @include size(20px); @@ -54,11 +62,17 @@ background-color: $core-white; visibility: visible; } + &:hover { + &::after { + border: solid 2px $core-vibrant-blue-over; + } + } &--disabled { &::after { background-color: $ui-fleet-black-25; } + cursor: default; } &--indeterminate { @@ -67,6 +81,15 @@ border: solid 1px $core-vibrant-blue; } + &:hover { + &::after { + &::after { + background-color: $core-vibrant-blue-over; + border: solid 1px $core-vibrant-blue-over; + } + } + } + &::before { @include position(absolute, 50% null null 50%); box-sizing: border-box; diff --git a/frontend/components/forms/fields/Dropdown/_styles.scss b/frontend/components/forms/fields/Dropdown/_styles.scss index d955d357f2d7..5523158b09e2 100644 --- a/frontend/components/forms/fields/Dropdown/_styles.scss +++ b/frontend/components/forms/fields/Dropdown/_styles.scss @@ -75,6 +75,8 @@ background-color: $ui-light-grey; border: 0; border-radius: $border-radius; + cursor: pointer; + .Select-value { font-size: $small; background-color: $ui-light-grey; diff --git a/frontend/pages/DashboardPage/cards/MDM/MDM.tsx b/frontend/pages/DashboardPage/cards/MDM/MDM.tsx index e102869a4d1a..2e79bd874926 100644 --- a/frontend/pages/DashboardPage/cards/MDM/MDM.tsx +++ b/frontend/pages/DashboardPage/cards/MDM/MDM.tsx @@ -166,6 +166,7 @@ const Mdm = ({ isAllPagesSelected={false} disableCount disablePagination + disableMultiRowSelect onClickRow={handleSolutionRowClick} /> )} diff --git a/frontend/pages/hosts/ManageHostsPage/components/LabelFilterSelect/_styles.scss b/frontend/pages/hosts/ManageHostsPage/components/LabelFilterSelect/_styles.scss index 0c1ed6fac543..72ab4f59e942 100644 --- a/frontend/pages/hosts/ManageHostsPage/components/LabelFilterSelect/_styles.scss +++ b/frontend/pages/hosts/ManageHostsPage/components/LabelFilterSelect/_styles.scss @@ -26,6 +26,10 @@ border-radius: $border-radius; height: 40px; + :hover { + cursor: pointer; + } + &--is-focused, &--menu-is-open, &:hover {