@terrazzo/react-color-picker
Version:
React color picker that supports Color Module 4, wide color gamut (WCG), and Display-P3 using WebGL for monitor-accurate colors. Powered by Culori.
165 lines (143 loc) • 4.67 kB
CSS
.tz-color-channel-slider-wrapper {
height: var(--tz-color-channel-slider-track-height);
position: relative;
transform: translate3d(0, 0, 0);
width: 100%;
&::after {
border-radius: var(--tz-color-channel-slider-track-height);
box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.2);
content: "";
inset: 0;
pointer-events: none;
position: absolute;
z-index: 2;
}
}
.tz-color-channel-slider-bg {
height: 100%;
width: 100%;
}
.tz-color-channel-slider-bg__alpha {
--tz-square-color: var(--tz-color-base-gray-800);
--tz-square-size: calc(0.625 * var(--tz-color-channel-slider-track-height));
background-image:
linear-gradient(to right, var(--left-color), var(--right-color)),
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'><rect fill='%23dad9d6' width='32' height='32'/><rect fill='%23dad9d6' x='32' y='32' width='32' height='32'/></svg>");
background-repeat: no-repeat, repeat;
background-size:
100% 100%,
var(--tz-square-size) var(--tz-square-size);
}
.tz-color-channel-slider-bg-wrapper {
border-radius: var(--tz-radius-1000);
display: flex;
height: 100%;
left: 0;
overflow: hidden;
position: absolute;
top: 0;
width: 100%;
z-index: 1;
}
.tz-color-channel-slider-overlay {
--overlay-offset: calc(0.75 * var(--tz-color-channel-slider-track-height));
background-color: color(srgb 0 0 0 / 0.5);
display: flex;
height: 100%;
pointer-events: none;
position: absolute;
width: calc(var(--width) - var(--overlay-offset));
z-index: 2;
}
.tz-color-channel-slider-overlay__min {
left: 0;
&::after {
background-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path d="m256 512c-141.4 0-256-114.6-256-256s114.6-256 256-256h-256v512z" fill="rgb(0, 0, 0, 0.5)"/></svg>');
background-repeat: no-repeat;
content: "";
display: block;
flex-shrink: 0;
height: var(--tz-color-channel-slider-track-height);
left: 100%;
position: absolute;
top: 0;
width: calc(0.5 * var(--tz-color-channel-slider-track-height));
}
}
.tz-color-channel-slider-overlay__max {
right: 0;
&::before {
background-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path d="m0 0c141.4 0 256 114.6 256 256s-114.6 256-256 256h256v-512z" fill="rgb(0, 0, 0, 0.5)"/></svg>');
background-repeat: no-repeat;
content: "";
display: block;
flex-shrink: 0;
height: var(--tz-color-channel-slider-track-height);
position: absolute;
right: 100%;
top: 0;
width: calc(0.5 * var(--tz-color-channel-slider-track-height));
}
}
.tz-color-picker {
background-color: var(--tz-color-bg-1);
color: var(--tz-text-primary);
display: flex;
flex-direction: column;
gap: var(--tz-space-200);
}
.tz-color-picker-code {
--copy-btn-width: 2rem;
display: flex;
padding: 0;
position: relative;
}
.tz-color-picker-code-input {
--tz-color-picker-input-bg: var(--tz-color-bg-1);
--tz-color-picker-input-border: var(--tz-color-border-3);
--tz-color-picker-input-text: var(--tz-color-text-1);
background-color: var(--tz-color-picker-input-bg);
border: 1px solid var(--tz-color-picker-input-border);
border-radius: var(--tz-radius-300);
color: var(--tz-color-picker-input);
flex: 1 0 auto;
font-family: var(--tz-font-mono);
font-size: var(--tz-font-label-small-font-size);
font-variant-ligatures: none;
font-weight: var(--tz-font-label-small-font-weight);
height: var(--tz-space-control-m);
letter-spacing: 0;
line-height: var(--tz-space-control-m);
outline: none;
padding: 0;
text-indent: var(--tz-space-200);
&:focus {
--tz-color-picker-input-border: var(--tz-color-control-border-focus);
}
}
.tz-color-picker-preview {
border: 1px solid var(--tz-button-secondary-border);
border-radius: var(--tz-radius-300);
display: flex;
flex-direction: column;
}
.tz-color-picker-sliders {
display: flex;
flex-direction: column;
gap: var(--tz-space-200);
}
.tz-color-picker-swatch {
background-image:
linear-gradient(var(--current-color), var(--current-color)),
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'><rect fill='%23dad9d6' width='32' height='32'/><rect fill='%23dad9d6' x='32' y='32' width='32' height='32'/></svg>");
background-repeat: no-repeat, repeat;
background-size:
100% 100%,
10px;
border-top-left-radius: var(--tz-radius-300);
border-top-right-radius: var(--tz-radius-300);
height: 6rem;
}
.tz-color-picker-tooltip-icon {
color: var(--tz-color-base-gray-900);
}