diff --git a/frappe/public/scss/common/global.scss b/frappe/public/scss/common/global.scss index 20778176d4..726b3a98a6 100644 --- a/frappe/public/scss/common/global.scss +++ b/frappe/public/scss/common/global.scss @@ -16,69 +16,62 @@ } } +$check-icon: url("data:image/svg+xml, "); + input[type="checkbox"] { position: relative; - width: 0 !important; - height: var(--custom-checkbox-size); - margin-right: calc(var(--custom-checkbox-size) + var(--checkbox-right-margin)) !important; - font-size: calc(var(--custom-checkbox-size) - 1px); + width: var(--checkbox-size) !important; + height: var(--checkbox-size); + margin-right: var(--checkbox-right-margin) !important; + background-repeat: no-repeat; + background-position: center; + border: 1px solid var(--gray-400); + box-sizing: border-box; + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1); + border-radius: 4px; - &:before { - width: var(--custom-checkbox-size); - height: var(--custom-checkbox-size); - position: absolute; - top: 0; - display: inline-block; - line-height: 1; - text-align: center; - content: ' '; - border: 1px solid var(--gray-400); - box-sizing: border-box; - box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1); - border-radius: 4px; + // Reset browser behavior + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + + -webkit-print-color-adjust: exact; + color-adjust: exact; + + .grid-static-col & { + margin-right: 0 !important; } - &:checked:before { - content: url("data: image/svg+xml;utf8, "); - background: linear-gradient(180deg, #4AC3F8 -124.51%, #2490EF 100%); + &:checked { + background-color: #2490EF; + background-image: $check-icon, linear-gradient(180deg, #4AC3F8 -124.51%, #2490EF 100%); + background-size: 57%, 100%; box-shadow: none; border: none; } + &:focus { + outline: none; // Prevent browser behavior + box-shadow: var(--checkbox-focus-shadow); + } - &.disabled-deselected:before, &:disabled:not([checked])::before { - background: var(--disabled-control-bg); - border: 0.5px solid var(--gray-300); - box-sizing: border-box; + &.disabled-deselected, &:disabled { + background-color: var(--disabled-control-bg); box-shadow: inset 0px 1px 7px rgba(0, 0, 0, 0.1); - border-radius: 4px; + border: 0.5px solid var(--gray-300); pointer-events: none; } - &.disabled-selected:before, &:disabled:checked::before { - content: url("data: image/svg+xml;utf8, "); - background: var(--gray-500); - box-sizing: border-box; + &.disabled-selected, &:disabled:checked { + background-color: var(--gray-500); + background-image: $check-icon; + background-size: 57%; box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.1); - border-radius: 4px; - line-height: 10px; + border: none; pointer-events: none; } } -// Firefox doesn't support -// pseudo elements on checkbox -html.firefox, html.safari { - :root { - --custom-checkbox-size: 0px; - } - input[type="checkbox"] { - width: var(--base-checkbox-size) !important; - height: var(--base-checkbox-size); - margin-right: var(--checkbox-right-margin) !important; - } -} - .frappe-card { @include card(); } diff --git a/frappe/public/scss/desk/css_variables.scss b/frappe/public/scss/desk/css_variables.scss index 5aca23a0b0..135bb7a9f5 100644 --- a/frappe/public/scss/desk/css_variables.scss +++ b/frappe/public/scss/desk/css_variables.scss @@ -31,9 +31,6 @@ $input-height: 28px !default; --modal-bg: white; --toast-bg: var(--modal-bg); --popover-bg: white; - --checkbox-right-margin: var(--margin-xs); - --base-checkbox-size: 14px; - --custom-checkbox-size: 14px; --appreciation-color: var(--dark-green-600); --appreciation-bg: var(--dark-green-100); @@ -52,6 +49,11 @@ $input-height: 28px !default; --input-height: #{$input-height}; --input-disabled-bg: var(--gray-200); + // checkbox + --checkbox-right-margin: var(--margin-xs); + --checkbox-size: 14px; + --checkbox-focus-shadow: 0 0 0 2px var(--gray-300); + // timeline --timeline-item-icon-size: 34px; --timeline-item-left-margin: var(--margin-xl); diff --git a/frappe/public/scss/desk/dark.scss b/frappe/public/scss/desk/dark.scss index 4e83f4db47..76dcf90bc3 100644 --- a/frappe/public/scss/desk/dark.scss +++ b/frappe/public/scss/desk/dark.scss @@ -78,6 +78,9 @@ // input --input-disabled-bg: none; + // checkbox + --checkbox-focus-shadow: 0 0 0 2px var(--gray-600); + color-scheme: dark; .frappe-card { diff --git a/frappe/public/scss/desk/list.scss b/frappe/public/scss/desk/list.scss index 0230138e8f..72fdf2c0f2 100644 --- a/frappe/public/scss/desk/list.scss +++ b/frappe/public/scss/desk/list.scss @@ -197,8 +197,7 @@ $level-margin-right: 8px; input.list-check-all, input.list-row-checkbox { margin-top: 0px; - margin-left: calc(var(--custom-checkbox-size) / 2); - --checkbox-right-margin: #{$level-margin-right}; + --checkbox-right-margin: calc(var(--checkbox-size) / 2 + #{$level-margin-right}); } .filterable {