@plone/components
Version:
ReactJS components for Plone
170 lines (148 loc) • 4.37 kB
CSS
@layer plone-components.quanta {
.q.react-aria-TextField,
.q.react-aria-TextAreaField {
position: relative;
.react-aria-Label {
color: var(--quanta-sapphire);
pointer-events: none;
touch-action: none;
transition:
margin-top 0.15s ease-in-out,
margin-left 0.15s ease-in-out,
transform 0.15s ease-in-out;
user-select: none;
}
.react-aria-Label:has(+ .react-aria-Input, + .react-aria-TextArea) {
position: absolute;
top: 10px;
left: 12px;
}
.react-aria-Label:has(
+ .react-aria-Input[data-focused],
+ .react-aria-TextArea[data-focused]
),
.react-aria-Label:has(
+ .react-aria-Input:not(:placeholder-shown),
+ .react-aria-TextArea:not(:placeholder-shown)
) {
margin-top: -30px;
margin-left: -12px;
transform: scale(0.8571428571, 0.8571428571);
transform-origin: 0 0;
}
.react-aria-Label:has(
+ .react-aria-Input:not(:placeholder-shown):not(:hover):not(
:active
):not(:focus),
+ .react-aria-TextArea:not(:placeholder-shown):not(:hover):not(
:active
):not(:focus)
) {
color: var(--basic-500);
}
.react-aria-Label:has(
+ .react-aria-Input[required],
+ .react-aria-TextArea[required]
)::after {
/* https://yoksel.github.io/url-encoder/ */
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24'%3E%3Cpath fill='hsl(7, 90%25, 59%25)' d='M12 18a6 6 0 100-12 6 6 0 000 12z'/%3E%3C/svg%3E");
}
.react-aria-Label:has(
+ .react-aria-Input[required]:not(:placeholder-shown):not(:hover):not(
:active
):not(:focus),
+ .react-aria-TextArea[required]:not(:placeholder-shown):not(
:hover
):not(:active):not(:focus)
)::after {
filter: grayscale(1);
}
.react-aria-Label:has(
+ .react-aria-Input[data-invalid],
+ .react-aria-TextArea[data-invalid]
) {
color: var(--quanta-candy) ;
&::after {
filter: none ;
}
}
.react-aria-Label:has(
+ .react-aria-Input[data-disabled],
+ .react-aria-TextArea[data-disabled]
) {
color: var(--basic-400) ;
}
.react-aria-Label:has(
+ .react-aria-Input[readonly],
+ .react-aria-TextArea[readonly]
) {
color: var(--basic-500);
}
}
.q.react-aria-TextField,
.q.react-aria-TextAreaField {
.react-aria-Input,
.react-aria-TextArea {
width: 100%;
padding: 12px;
border: 0;
border-radius: 6px;
background-color: var(--basic-200);
box-shadow: 0 0 0 rgba(2, 19, 34, 0);
caret-color: var(--quanta-cobalt);
color: var(--text-color);
cursor: text;
text-overflow: ellipsis;
transition:
background-color 0.15s ease-in-out,
box-shadow 0.15s ease-in-out;
&[data-hovered] {
background-color: var(--basic-300);
}
&[data-focused] {
background-color: var(--basic-50);
box-shadow: inset 0 0 0 2px var(--quanta-cobalt);
outline: 0;
}
&[data-invalid] {
background-color: var(--quanta-ballet);
outline: 0;
&[data-focused] {
background-color: var(--basic-50);
box-shadow: inset 0 0 0 2px var(--quanta-rose);
}
}
&[data-disabled] {
background-color: var(--basic-50);
box-shadow: inset 0 0 0 1px var(--basic-300);
color: var(--basic-300);
pointer-events: none;
& + .react-aria-Text {
color: var(--basic-300);
}
}
&[readonly] {
border: 1px dashed var(--basic-400);
background-color: var(--basic-50);
box-shadow: none;
}
&::placeholder {
color: var(--basic-400);
opacity: 0;
transition: opacity $time-tiny ease-in-out;
}
&:active::placeholder,
&:focus::placeholder {
opacity: 1;
}
}
.react-aria-Text {
padding-top: 3px;
color: var(--basic-500);
font-size: 0.9rem;
font-weight: 500;
letter-spacing: 0.012em;
line-height: 1.714285714285;
}
}
}