UNPKG

@nextcloud/vue

Version:
397 lines (396 loc) 15.7 kB
/** * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ /** * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ /* * Ensure proper alignment of the vue material icons */ .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } /*! * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ /** * Similar as inputBorder but without active styles. */ /** * Create a consistent border for an input element. * With Nextcloud 32+ there is no real border anymore but we use a box-shadow. */ .nc-select.v-select.select .select__helper-text { display: flex; align-items: center; margin: 0; padding-block: 4px; padding-inline: var(--border-radius-element); color: var(--color-text-maxcontrast); font-size: var(--default-font-size); overflow-wrap: anywhere; } .nc-select.v-select.select .select__helper-text--error { color: var(--color-text-error); } .nc-select.v-select.select .select__helper-text--success { color: var(--color-text-success); } .nc-select.v-select.select .select__helper-text .select__helper-text-icon { margin-inline-end: 8px; } .nc-select.v-select.select { /* Custom vue-select CSS variables scoped to NcSelect */ /* Search Input */ --vs-search-input-color: var(--color-main-text); --vs-search-input-bg: var(--color-main-background); --vs-search-input-placeholder-color: var(--color-text-maxcontrast); /* Font */ --vs-font-size: var(--default-font-size); --vs-line-height: var(--default-line-height); /* Disabled State */ --vs-state-disabled-bg: var(--color-background-hover); --vs-state-disabled-color: var(--color-text-maxcontrast); --vs-state-disabled-controls-color: var(--color-text-maxcontrast); --vs-state-disabled-cursor: not-allowed; --vs-disabled-bg: var(--color-background-hover); --vs-disabled-color: var(--color-text-maxcontrast); --vs-disabled-cursor: not-allowed; /* Borders */ --vs-border-color: var(--color-border-maxcontrast); --vs-border-width: var(--border-width-input, 2px) !important; --vs-border-style: solid; --vs-border-radius: var(--border-radius-element); /* Component Controls: Clear, Open Indicator */ --vs-controls-color: var(--color-main-text); /* Selected */ --vs-selected-bg: var(--color-background-hover); --vs-selected-color: var(--color-main-text); --vs-selected-border-color: var(--vs-border-color); --vs-selected-border-style: var(--vs-border-style); --vs-selected-border-width: var(--vs-border-width); /* Dropdown */ --vs-dropdown-bg: var(--color-main-background); --vs-dropdown-color: var(--color-main-text); --vs-dropdown-z-index: 9999; --vs-dropdown-box-shadow: 0px 2px 2px 0px var(--color-box-shadow); /* Options */ --vs-dropdown-option-padding: 8px 20px; /* Active State */ --vs-dropdown-option--active-bg: var(--color-background-hover); --vs-dropdown-option--active-color: var(--color-main-text); /* Keyboard Focus State */ --vs-dropdown-option--kb-focus-box-shadow: inset 0px 0px 0px 2px var(--vs-border-color); /* Deselect State */ --vs-dropdown-option--deselect-bg: var(--color-error); --vs-dropdown-option--deselect-color: #fff; /* Transitions */ --vs-transition-duration: 0ms; /* Actions */ --vs-actions-padding: 0 8px 0 8px; /* Override default vue-select styles */ min-height: calc(var(--default-clickable-area) - 2 * var(--border-width-input, 2px)); min-width: 260px; margin: 6px 0 var(--default-grid-baseline); } .nc-select.v-select.select.vs--open { --vs-border-width: var(--border-width-input-focused, 2px); } .nc-select.v-select.select .vs__selected { min-height: calc(var(--default-clickable-area) - 2 * var(--vs-border-width) - var(--default-grid-baseline)); min-width: 0; max-width: 100%; margin: calc(var(--default-grid-baseline) / 2); padding-block: 0; padding-inline: 12px 8px; border-radius: 16px !important; background: var(--color-primary-element-light); border: none; } .nc-select.v-select.select .vs__search { width: 100%; --input-padding-end: calc(var(--default-clickable-area) + var(--default-grid-baseline)); border: none !important; margin: 0 !important; padding: 0 !important; height: auto !important; } .nc-select.v-select.select .vs__selected-options:has(.vs__selected) .vs__search .input-field__input + .input-field__label { --input-label-font-size: var(--font-size-small, 13px); line-height: 1.5; inset-block-start: calc(-1.5 * var(--input-label-font-size) / 2); font-weight: 500; border-radius: var(--default-grid-baseline) var(--default-grid-baseline) 0 0; background-color: var(--color-main-background); padding-inline: var(--default-grid-baseline); margin-inline: calc(var(--input-padding-start) - var(--default-grid-baseline)) calc(var(--input-padding-end) - var(--default-grid-baseline)); transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick); } .nc-select.v-select.select:not(.vs--multiple) .vs__dropdown-toggle { padding: 0; overflow: visible; border: none !important; box-shadow: none !important; background: transparent; } .nc-select.v-select.select .vs__dropdown-toggle { position: relative; } .nc-select.v-select.select .vs__actions { position: absolute; z-index: 999; inset-inline-end: 0; top: 50%; transform: translateY(-50%); height: 100%; margin-block-start: 1px; display: flex; align-items: center; } .nc-select.v-select.select .vs__clear { margin-inline-end: 2px; } .nc-select.v-select.select.vs--open .vs__search .input-field__input { border-end-start-radius: 0 !important; border-end-end-radius: 0 !important; } .nc-select.v-select.select.vs--disabled .vs__clear, .nc-select.v-select.select.vs--disabled .vs__dropdown-toggle, .nc-select.v-select.select.vs--disabled .vs__open-indicator, .nc-select.v-select.select.vs--disabled .vs__open-indicator-button, .nc-select.v-select.select.vs--disabled .vs__search, .nc-select.v-select.select.vs--disabled .vs__selected { background-color: transparent; color: var(--color-text-maxcontrast); } .nc-select.v-select.select.vs--disabled .vs__dropdown-toggle { --input-border-box-shadow-light: 0 -1px var(--color-border-dark), 0 0 0 1px color-mix(in srgb, var(--color-border-dark), 65% transparent); --input-border-box-shadow-dark: 0 1px var(--color-border-dark), 0 0 0 1px color-mix(in srgb, var(--color-border-dark), 65% transparent); } .nc-select.v-select.select.vs--disabled .vs__clear, .nc-select.v-select.select.vs--disabled .vs__deselect { display: none; } .nc-select.v-select.select--no-wrap .vs__dropdown-toggle { overflow: hidden; } .nc-select.v-select.select--no-wrap .vs__selected-options { flex-wrap: nowrap; overflow: auto !important; min-width: unset; } .nc-select.v-select.select--no-wrap .vs__selected-options .vs__selected { min-width: unset; } .nc-select.v-select.select--drop-up.vs--open .vs__search .input-field__input { border-end-start-radius: var(--border-radius-element) !important; border-end-end-radius: var(--border-radius-element) !important; } .nc-select.v-select.select--drop-up.vs--open.vs--multiple .vs__dropdown-toggle { border-end-start-radius: var(--border-radius-element) !important; border-end-end-radius: var(--border-radius-element) !important; border-block-end-color: var(--color-main-text) !important; } .nc-select.v-select.select .vs__selected-options { min-height: unset; } .nc-select.v-select.select .vs__selected-options .vs__selected ~ .vs__search:has(.input-field__input[readonly]) { position: absolute; } .nc-select.v-select.select .vs__selected-options { padding: 0; border: none; overflow: visible; } .nc-select.v-select.select.vs--multiple { margin-inline: 1px; } .nc-select.v-select.select.vs--multiple .vs__dropdown-toggle { border: var(--border-width-input-focused, 2px) solid transparent; box-shadow: var(--input-border-box-shadow); padding-block: calc(var(--default-grid-baseline) * 1.5) 0; padding-inline: var(--default-grid-baseline) calc(var(--default-clickable-area) + var(--default-grid-baseline)); overflow: visible; background: var(--color-main-background); } .nc-select.v-select.select.vs--multiple:has(.vs__clear) .vs__dropdown-toggle { padding-inline-end: calc(2 * var(--default-clickable-area)); } .nc-select.v-select.select.vs--multiple.vs--open .vs__dropdown-toggle { box-shadow: none !important; border-color: var(--color-main-text); border-block-end-color: var(--color-border-maxcontrast); border-end-start-radius: 0; border-end-end-radius: 0; outline: 2px solid var(--color-main-background); } .nc-select.v-select.select.vs--multiple .vs__search .input-field__input { box-shadow: none !important; background: transparent; } .nc-select.v-select.select.vs--multiple .vs__search { width: 0; flex-grow: 1; min-width: 0; } .nc-select.v-select.select.vs--multiple.select--no-wrap .vs__dropdown-toggle { overflow: hidden; } .nc-select.v-select.select.vs--multiple.select--no-wrap .vs__actions { background: linear-gradient(90deg, transparent, var(--color-main-background) 10%, var(--color-main-background) 100%); margin-block: 0px; margin-inline-end: 2px; border-radius: var(--border-radius-element); height: calc(100% - 6px); } .nc-select.v-select.select.vs--multiple .vs__search .input-field { margin-block-start: 0; } .nc-select.v-select.select.vs--multiple .vs__search .input-field__main-wrapper { height: calc(var(--default-clickable-area) - 2 * var(--vs-border-width) - var(--default-grid-baseline)); margin: calc(var(--default-grid-baseline) / 2) 0; } .nc-select.v-select.select.vs--multiple .select__label { position: absolute; z-index: 1; inset-inline-start: var(--border-width-input-focused, 2px); top: 50%; transform: translateY(-50%); font-size: var(--default-font-size); margin-inline: var(--border-radius-element); color: var(--color-text-maxcontrast); pointer-events: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - var(--clickable-area-large)); transition: top var(--animation-quick), transform var(--animation-quick), font-size var(--animation-quick), font-weight var(--animation-quick), background-color var(--animation-quick) var(--animation-slow); } .nc-select.v-select.select.vs--multiple:has(.vs__selected) .select__label, .nc-select.v-select.select.vs--multiple.vs--open .select__label { --input-label-font-size: var(--font-size-small, 13px); font-size: var(--input-label-font-size); line-height: 1.5; top: calc(-1.5 * var(--input-label-font-size) / 2); transform: none; font-weight: 500; border-radius: var(--default-grid-baseline) var(--default-grid-baseline) 0 0; background-color: var(--color-main-background); padding-inline: var(--default-grid-baseline); margin-inline: calc(var(--border-radius-element) - var(--default-grid-baseline)); transition: top var(--animation-quick), transform var(--animation-quick), font-size var(--animation-quick), font-weight var(--animation-quick), background-color var(--animation-quick); } .nc-select.v-select.select.vs--single .vs__selected-options { position: relative; flex-wrap: nowrap; min-height: var(--default-clickable-area); } .nc-select.v-select.select.vs--single .vs__selected { position: absolute; inset-block: 6px 0; inset-inline-start: 0; inset-inline-end: 0; margin: 0; z-index: 2; pointer-events: none; display: flex; align-items: center; padding-block: 0; padding-inline: calc(var(--border-radius-element) + var(--border-width-input-focused, 2px)) var(--input-padding-end, calc(var(--default-clickable-area) + var(--default-grid-baseline))); background: unset !important; border: none; border-radius: 0; height: unset; min-height: unset; font-size: var(--default-font-size); color: var(--color-main-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .nc-select.v-select.select.vs--single:has(.input-field--label-outside) .vs__selected { inset-block-start: 0; } .nc-select.v-select.select.vs--single:has(.vs__clear) .vs__selected { padding-inline-end: calc(2 * var(--default-clickable-area)); } .nc-select.v-select.select.vs--single.vs--loading .vs__selected, .nc-select.v-select.select.vs--single.vs--open .vs__selected { opacity: 0.4; } .nc-select.v-select.select.vs--single.vs--searching .vs__selected { display: none; } .nc-select__dropdown.vs__dropdown-menu { --vs-border-color: var(--color-border-maxcontrast); --vs-border-style: solid; --vs-border-radius: var(--border-radius-element); --vs-dropdown-bg: var(--color-main-background); --vs-dropdown-color: var(--color-main-text); --vs-dropdown-option-padding: 8px 20px; --vs-dropdown-option--active-bg: var(--color-background-hover); --vs-dropdown-option--active-color: var(--color-main-text); --vs-dropdown-option--kb-focus-box-shadow: inset 0px 0px 0px 2px var(--color-border-maxcontrast); --vs-dropdown-option--deselect-bg: var(--color-error); --vs-dropdown-option--deselect-color: #fff; border-width: var(--border-width-input-focused) !important; border-color: var(--color-main-text) !important; outline: none !important; box-shadow: -2px 0 0 var(--color-main-background), 0 2px 0 var(--color-main-background), 2px 0 0 var(--color-main-background), !important; padding: 4px !important; } .nc-select__dropdown.vs__dropdown-menu--floating { /* Fallback styles overidden by programmatically set inline styles */ width: max-content; position: absolute; top: 0; inset-inline-start: 0; } .nc-select__dropdown.vs__dropdown-menu--floating-placement-top { border-radius: var(--vs-border-radius) !important; border-top-style: var(--vs-border-style) !important; box-shadow: 0 -2px 0 var(--color-main-background), -2px 0 0 var(--color-main-background), 0 2px 0 var(--color-main-background), 2px 0 0 var(--color-main-background), !important; } .nc-select__dropdown.vs__dropdown-menu .vs__dropdown-option { border-radius: 6px !important; } .nc-select__dropdown.vs__dropdown-menu .vs__no-options { color: var(--color-text-maxcontrast) !important; } .nc-select.v-select.select .vs__dropdown-toggle { --input-border-box-shadow-light: 0 -1px var(--vs-border-color), 0 0 0 1px color-mix(in srgb, var(--vs-border-color), 65% transparent); --input-border-box-shadow-dark: 0 -1px var(--vs-border-color), 0 0 0 1px color-mix(in srgb, var(--vs-border-color), 65% transparent); --input-border-box-shadow: var(--input-border-box-shadow-light); border: none; border-radius: var(--border-radius-element); box-shadow: var(--input-border-box-shadow); } .nc-select.v-select.select:not(.vs--disabled) .vs__dropdown-toggle:hover { box-shadow: 0 0 0 1px var(--vs-border-color); } @media (prefers-color-scheme: dark) { .nc-select.v-select.select .vs__dropdown-toggle { --input-border-box-shadow: var(--input-border-box-shadow-dark); } } [data-theme-dark] .nc-select.v-select.select .vs__dropdown-toggle { --input-border-box-shadow: var(--input-border-box-shadow-dark); } [data-theme-light] .nc-select.v-select.select .vs__dropdown-toggle { --input-border-box-shadow: var(--input-border-box-shadow-light); } .select--legacy.nc-select.v-select.select .vs__dropdown-toggle { box-shadow: 0 0 0 1px var(--vs-border-color); } .select--legacy.nc-select.v-select.select .vs__dropdown-toggle:hover:not([disabled]) { box-shadow: 0 0 0 2px var(--vs-border-color); }