Files
openfoodnetwork/app/webpacker/css/admin_v3/components/tom_select.scss
krisztin 49bf5997b7 Update all borders for inputs
Inputs include custom made ones such as tags, select2s and tom selects.
Some border radii were using mixins but not utilising it, hence they
are now variables.
2025-02-07 14:29:27 +00:00

211 lines
4.2 KiB
SCSS

.ts-wrapper.single,
.ts-wrapper.multi {
min-height: 40px;
&.input-active {
.ts-control {
border-color: $orient;
background-color: $lighter-grey;
input {
&::placeholder {
color: $medium-light-grey;
}
}
}
}
.ts-control {
box-shadow: none;
border: $border-input;
border-radius: $border-radius;
background-image: none;
input {
font-size: $body-font-size;
height: auto;
&::placeholder {
color: $near-black;
}
}
.item {
margin-top: 2px; // Ensure it lines up with the input. I have no idea why it's necessary.
}
}
.ts-dropdown {
// Unstyled, we style the dropdown-content instead
margin: 0;
background: none;
border: none;
box-shadow: none;
min-width: 10em; // Ensure content doesn't wrap too much
// We could consider always stretching to fit with width: max-content;
}
.ts-dropdown-content {
margin-top: 4px;
color: $near-black;
background-color: $color-body-bg;
@include border-radius($border-radius);
box-shadow: $shadow-dropdown;
max-height: 21em; // Show up to 8 items without scrolling
.option {
padding: 8px;
border-left: 3px solid transparent;
line-height: 20px;
&.selected,
&.active {
border-left: 3px solid $orient;
background-color: $lighter-grey;
color: $near-black;
}
}
}
}
.plugin-dropdown_input {
.ts-dropdown {
// Cover up the control with the input
top: 0;
}
.dropdown-input-wrap::after {
position: absolute;
content: "\f077"; // chevron-up
font-family: FontAwesome;
border: none;
top: 0.7em;
right: 0.7em;
font-size: 13px;
}
.dropdown-input {
background-color: $color-body-bg;
border: 1px solid $lighter-grey;
box-shadow: none;
padding: 0.6em 0.75em;
&:focus {
border: 1px solid $orient;
}
}
}
// For the "single" tom_select, be as close as possible to native select boxes
// without too many options
.ts-wrapper.single {
max-height: 40px;
max-width: 100%;
.ts-control {
padding: 0.5em 0.75em;
padding-right: 1em !important; // ts has a clever variable-based rule here, but it doesn't seem to work right.
overflow: hidden;
// Icon: Override TS icon with icon-chevron-down
&::after {
content: "\f078";
font-family: FontAwesome;
border: none;
top: 1em;
}
&:not(.rtl)::after {
right: 1.9em;
}
.item {
margin-right: 1em;
// Hide overflow with an ellipsis if a width has been set
overflow: hidden;
text-overflow: ellipsis;
text-wrap: nowrap;
}
}
&.dropdown-active .ts-control {
&::after {
content: "\f077"; // chevron-up
}
}
}
// 'no-input' mode, like a native select (hide text input).
.ts-wrapper.single.no-input {
.ts-control input {
// Hide input, while keeping it focusable for keyboard events.
height: 0;
}
.ts-dropdown {
position: absolute;
top: 0; // we don't need to see the currently selected option, because it's visible in the dropdown
}
.ts-dropdown-content {
margin-top: 0;
}
}
// Appears just like other text on the page.
// See table.products tr:hover for example of revealing them
.naked_inputs .ts-wrapper {
height: auto;
min-height: 0;
.ts-control {
padding: ($vpadding-txt - 1px) ($hpadding-txt - 1px); // Minus 1px for border
height: auto;
min-height: 0;
font-size: inherit;
font-weight: inherit;
border-color: transparent;
line-height: 22px;
background-color: $color-body-bg;
&::after {
display: none; // hide until hover
top: 0.8em;
right: 1em;
font-size: 0.75em;
}
.item {
margin-top: 0;
margin-right: 0; // full width until hover
}
&:hover {
&::after {
display: block;
}
.item {
margin-right: 1em;
}
}
}
}
// Errors
.field_with_errors .ts-wrapper {
.ts-control {
border-color: $color-error;
}
}
// Display as "changed" if sibling select is marked as changed.
select.changed + .ts-wrapper {
&.single, &.multi {
.ts-control {
border-color: $color-txt-changed-brd;
}
}
}