diff --git a/src/components/Deselect.vue b/src/components/Deselect.vue deleted file mode 100644 index 1c4dacf..0000000 --- a/src/components/Deselect.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue deleted file mode 100644 index c2ccd40..0000000 --- a/src/components/HelloWorld.vue +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - diff --git a/src/components/OpenIndicator.vue b/src/components/OpenIndicator.vue deleted file mode 100644 index ae1e7d6..0000000 --- a/src/components/OpenIndicator.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/src/components/Select.vue b/src/components/Select.vue deleted file mode 100644 index 7a24694..0000000 --- a/src/components/Select.vue +++ /dev/null @@ -1,1150 +0,0 @@ - - - diff --git a/src/components/childComponents.js b/src/components/childComponents.js deleted file mode 100644 index 41ab96d..0000000 --- a/src/components/childComponents.js +++ /dev/null @@ -1,7 +0,0 @@ -import Deselect from "./Deselect"; -import OpenIndicator from "./OpenIndicator"; - -export default { - Deselect, - OpenIndicator -}; diff --git a/src/scss/global/_animations.scss b/src/css/global/_animations.css similarity index 67% rename from src/scss/global/_animations.scss rename to src/css/global/_animations.css index 3d994e2..94359f0 100644 --- a/src/scss/global/_animations.scss +++ b/src/css/global/_animations.css @@ -1,5 +1,7 @@ -$transition-timing-function: cubic-bezier(1.0, 0.5, 0.8, 1.0); -$transition-duration: .15s; +:root { + --vs-transition-timing-function: cubic-bezier(1, 0.5, 0.8, 1); + --vs-transition-duration: 0.15s; +} /* KeyFrames */ @-webkit-keyframes vSelectSpinner { @@ -24,7 +26,8 @@ $transition-duration: .15s; .vs__fade-enter-active, .vs__fade-leave-active { pointer-events: none; - transition: opacity $transition-duration $transition-timing-function; + transition: opacity var(--vs-transition-duration) + var(--vs-transition-timing-function); } .vs__fade-enter, .vs__fade-leave-to { diff --git a/src/css/global/_states.css b/src/css/global/_states.css new file mode 100644 index 0000000..3b32494 --- /dev/null +++ b/src/css/global/_states.css @@ -0,0 +1,50 @@ +/** Component States */ + +/* + * Disabled + * + * When the component is disabled, all interaction + * should be prevented. Here we modify the bg color, + * and change the cursor displayed on the interactive + * components. + */ + +:root { + --vs-disabled-bg: var(--vs-state-disabled-bg); + --vs-disabled-color: var(--vs-state-disabled-color); + --vs-disabled-cursor: var(--vs-state-disabled-cursor); +} +.vs--disabled.vs__dropdown-toggle, +.vs--disabled.vs__clear, +.vs--disabled.vs__search, +.vs--disabled.vs__selected, +.vs--disabled.vs__open-indicator { + cursor: var(--vs-disabled-cursor); + background-color: var(--vs-disabled-bg); +} + +/* + * RTL - Right to Left Support + * + * Because we're using a flexbox layout, the `dir="rtl"` + * HTML attribute does most of the work for us by + * rearranging the child elements visually. + */ + +.v-select[dir="rtl"].vs__actions { + padding: 0 3px 0 6px; +} + +.v-select[dir="rtl"].vs__clear { + margin-left: 6px; + margin-right: 0; +} + +.v-select[dir="rtl"].vs__deselect { + margin-left: 0; + margin-right: 2px; +} + +.v-select[dir="rtl"].vs__dropdown-menu { + text-align: right; +} diff --git a/src/css/global/_variables.css b/src/css/global/_variables.css new file mode 100644 index 0000000..9fc8b9f --- /dev/null +++ b/src/css/global/_variables.css @@ -0,0 +1,44 @@ +:root { + --vs-colors-lightest: rgba(60, 60, 60, 0.26); + --vs-colors-light: rgba(60, 60, 60, 0.5); + --vs-colors-dark: #333; + --vs-colors-darkest: rgba(0, 0, 0, 0.15); + + /* Global Component Variables*/ + --vs-component-line-height: 1.4; + --vs-component-placeholder-color: inherit; + + /* Active State*/ + --vs-state-active-bg: #5897fb; + --vs-state-active-color: #fff; + + /* Disabled State*/ + --vs-state-disabled-bg: rgb(248, 248, 248); + --vs-state-disabled-color: var(--vs-colors-light); + --vs-state-disabled-controls-color: var(--vs-colors-light); + --vs-state-disabled-cursor: not-allowed; + + /* Borders*/ + --vs-border-width: 1px; + --vs-border-style: solid; + --vs-border-radius: 4px; + --vs-border-color: var(--vs-colors-lightest); + + /* Component Controls: Clear, Open Indicator*/ + --vs-controls-color: var(--vs-colors-light); + --vs-controls-size: 1; + --vs-controls-deselect-text-shadow: 0 1px 0 #fff; + + /* Selected*/ + --vs-selected-bg: #f0f0f0; + --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-z-index: 1000; + --vs-dropdown-min-width: 160px; + --vs-dropdown-max-height: 350px; + --vs-dropdown-box-shadow: 0px 3px 6px 0px var(--vs-colors-darkest); + --vs-dropdown-bg: #fff; +} diff --git a/src/css/vue-select.css b/src/css/vue-select.css new file mode 100644 index 0000000..6df4abc --- /dev/null +++ b/src/css/vue-select.css @@ -0,0 +1,3 @@ +@import "global/_variables.css"; +@import "global/_animations.css"; +@import "global/_states.css"; diff --git a/src/scss/global/_component.scss b/src/scss/global/_component.scss deleted file mode 100644 index 29be497..0000000 --- a/src/scss/global/_component.scss +++ /dev/null @@ -1,9 +0,0 @@ -.v-select { - position: relative; - font-family: inherit; -} - -.v-select, -.v-select * { - box-sizing: border-box; -} diff --git a/src/scss/global/_states.scss b/src/scss/global/_states.scss deleted file mode 100644 index 8a5def2..0000000 --- a/src/scss/global/_states.scss +++ /dev/null @@ -1,53 +0,0 @@ -/** Component States */ - -/* - * Disabled - * - * When the component is disabled, all interaction - * should be prevented. Here we modify the bg color, - * and change the cursor displayed on the interactive - * components. - */ - -$disabled-bg: $vs-state-disabled-bg; -$disabled-color: $vs-state-disabled-color; -$disabled-cursor: $vs-state-disabled-cursor; - -.vs--disabled { - .vs__dropdown-toggle, - .vs__clear, - .vs__search, - .vs__selected, - .vs__open-indicator { - cursor: $disabled-cursor; - background-color: $disabled-bg; - } -} - -/* - * RTL - Right to Left Support - * - * Because we're using a flexbox layout, the `dir="rtl"` - * HTML attribute does most of the work for us by - * rearranging the child elements visually. - */ - -.v-select[dir="rtl"] { - .vs__actions { - padding: 0 3px 0 6px; - } - - .vs__clear { - margin-left: 6px; - margin-right: 0; - } - - .vs__deselect { - margin-left: 0; - margin-right: 2px; - } - - .vs__dropdown-menu { - text-align: right; - } -} diff --git a/src/scss/global/_variables.scss b/src/scss/global/_variables.scss deleted file mode 100644 index 42c6774..0000000 --- a/src/scss/global/_variables.scss +++ /dev/null @@ -1,44 +0,0 @@ -$vs-colors: ( - lightest: rgba(60, 60, 60, 0.26), - light: rgba(60, 60, 60, 0.5), - dark: #333, - darkest: rgba(0, 0, 0, .15), -) !default; - -// Global Component Variables -$vs-component-line-height: 1.4 !default; -$vs-component-placeholder-color: inherit !default; - -// Active State -$vs-state-active-bg: #5897fb !default; -$vs-state-active-color: #fff !default; - -// Disabled State -$vs-state-disabled-bg: rgb(248, 248, 248) !default; -$vs-state-disabled-color: map_get($vs-colors, 'light') !default; -$vs-state-disabled-controls-color: map_get($vs-colors, 'light') !default; -$vs-state-disabled-cursor: not-allowed !default; - -// Borders -$vs-border-width: 1px !default; -$vs-border-style: solid !default; -$vs-border-radius: 4px !default; -$vs-border-color: map_get($vs-colors, 'lightest') !default; - -// Component Controls: Clear, Open Indicator -$vs-controls-color: map_get($vs-colors, 'light') !default; -$vs-controls-size: 1 !default; -$vs-controls-deselect-text-shadow: 0 1px 0 #fff; - -// Selected -$vs-selected-bg: #f0f0f0 !default; -$vs-selected-border-color: $vs-border-color !default; -$vs-selected-border-style: $vs-border-style !default; -$vs-selected-border-width: $vs-border-width !default; - -// Dropdown -$vs-dropdown-z-index: 1000 !default; -$vs-dropdown-min-width: 160px !default; -$vs-dropdown-max-height: 350px !default; -$vs-dropdown-box-shadow: 0px 3px 6px 0px map_get($vs-colors, 'darkest') !default; -$vs-dropdown-bg: #fff !default; diff --git a/src/scss/modules/_clear.scss b/src/scss/modules/_clear.scss deleted file mode 100644 index 8d307a7..0000000 --- a/src/scss/modules/_clear.scss +++ /dev/null @@ -1,10 +0,0 @@ -/* Clear Button */ - -.vs__clear { - fill: $vs-controls-color; - padding: 0; - border: 0; - background-color: transparent; - cursor: pointer; - margin-right: 8px; -} diff --git a/src/scss/modules/_dropdown-menu.scss b/src/scss/modules/_dropdown-menu.scss deleted file mode 100644 index 3e1af38..0000000 --- a/src/scss/modules/_dropdown-menu.scss +++ /dev/null @@ -1,38 +0,0 @@ -/* Dropdown Menu */ - -$border-width: $vs-border-width; -$border-style: solid; -$border-color: $vs-border-color; -$border-radius: $vs-border-radius; -$box-shadow: $vs-dropdown-box-shadow; - -$bg-color: $vs-dropdown-bg; -$z-index: $vs-dropdown-z-index; -$min-width: $vs-dropdown-min-width; -$max-height: $vs-dropdown-max-height; - -.vs__dropdown-menu { - display: block; - box-sizing: border-box; - position: absolute; - top: calc(100% - #{$border-width}); // -{#$border-width} here ensures the left and right borders of the dropdown appear flush with the toggle. - left: 0; - z-index: $z-index; - padding: 5px 0; - margin: 0; - width: 100%; - max-height: $max-height; - min-width: $min-width; - overflow-y: auto; - box-shadow: $box-shadow; - border: $border-width $border-style $border-color; - border-top-style: none; - border-radius: 0 0 $border-radius $border-radius; - text-align: left; - list-style: none; - background: $bg-color; -} - -.vs__no-options { - text-align: center; -} diff --git a/src/scss/modules/_dropdown-option.scss b/src/scss/modules/_dropdown-option.scss deleted file mode 100644 index 474746d..0000000 --- a/src/scss/modules/_dropdown-option.scss +++ /dev/null @@ -1,27 +0,0 @@ -/* List Items */ -.vs__dropdown-option { - line-height: 1.42857143; /* Normalize line height */ - display: block; - padding: 3px 20px; - clear: both; - color: #333; /* Overrides most CSS frameworks */ - white-space: nowrap; - - &:hover { - cursor: pointer; - } -} - -.vs__dropdown-option--highlight { - background: $vs-state-active-bg; - color: $vs-state-active-color; -} - -.vs__dropdown-option--disabled { - background: inherit; - color: $vs-state-disabled-color; - - &:hover { - cursor: inherit; - } -} diff --git a/src/scss/modules/_dropdown-toggle.scss b/src/scss/modules/_dropdown-toggle.scss deleted file mode 100644 index 5d5ddeb..0000000 --- a/src/scss/modules/_dropdown-toggle.scss +++ /dev/null @@ -1,54 +0,0 @@ -/** - Dropdown Toggle - - The dropdown toggle is the primary wrapper of the component. It - has two direct descendants: .vs__selected-options, and .vs__actions. - - .vs__selected-options holds the .vs__selected's as well as the - main search input. - - .vs__actions holds the clear button and dropdown toggle. - */ - -$border-width: $vs-border-width; -$border-style: $vs-border-style; -$border-color: $vs-border-color; -$border-radius: $vs-border-radius; - -.vs__dropdown-toggle { - appearance: none; - display: flex; - padding: 0 0 4px 0; - background: none; - border: $border-width $border-style $border-color; - border-radius: $border-radius; - white-space: normal; -} - -.vs__selected-options { - display: flex; - flex-basis: 100%; - flex-grow: 1; - flex-wrap: wrap; - padding: 0 2px; - position: relative; -} - -.vs__actions { - display: flex; - align-items: center; - padding: 4px 6px 0 3px; -} - -/* Dropdown Toggle States */ -.vs--searchable .vs__dropdown-toggle { - cursor: text; -} -.vs--unsearchable .vs__dropdown-toggle { - cursor: pointer; -} -.vs--open .vs__dropdown-toggle { - border-bottom-color: transparent; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} diff --git a/src/scss/modules/_open-indicator.scss b/src/scss/modules/_open-indicator.scss deleted file mode 100644 index 74c8b3c..0000000 --- a/src/scss/modules/_open-indicator.scss +++ /dev/null @@ -1,29 +0,0 @@ -// Open Indicator - -// The open indicator appears as a down facing -// caret on the right side of the select. - -$transition-timing-function: cubic-bezier(1.000, -0.115, 0.975, 0.855); -$transition-duration: 150ms; - -$open-indicator-color: $vs-controls-color; -$open-indicator-size: $vs-controls-size; - -.vs__open-indicator { - fill: $open-indicator-color; - transform: scale($open-indicator-size); - transition: transform $transition-duration $transition-timing-function; - transition-timing-function: $transition-timing-function; -} - -// Open State - -.vs--open .vs__open-indicator { - transform: rotate(180deg) scale($open-indicator-size); -} - -// Loading State - -.vs--loading .vs__open-indicator { - opacity: 0; -} diff --git a/src/scss/modules/_search-input.scss b/src/scss/modules/_search-input.scss deleted file mode 100644 index 119cfd5..0000000 --- a/src/scss/modules/_search-input.scss +++ /dev/null @@ -1,62 +0,0 @@ -/* Search Input */ - -$line-height: $vs-component-line-height; -$font-size: 1em; - -/** - * Super weird bug... If this declaration is grouped - * below, the cancel button will still appear in chrome. - * If it's up here on it's own, it'll hide it. - */ -.vs__search::-webkit-search-cancel-button { - display: none; -} - -.vs__search::-webkit-search-decoration, -.vs__search::-webkit-search-results-button, -.vs__search::-webkit-search-results-decoration, -.vs__search::-ms-clear { - display: none; -} - -.vs__search, -.vs__search:focus { - appearance: none; - line-height: $line-height; - font-size: $font-size; - border: 1px solid transparent; - border-left: none; - outline: none; - margin: 4px 0 0 0; - padding: 0 7px; - background: none; - box-shadow: none; - width: 0; - max-width: 100%; - flex-grow: 1; - z-index: 1; -} - -.vs__search::placeholder { - color: $vs-component-placeholder-color; -} - -/** - States - */ - -// Unsearchable -.vs--unsearchable { - .vs__search { - opacity: 1; - } - &:not(.vs--disabled) .vs__search:hover { - cursor: pointer; - } -} -// Single, when searching but not loading or open -.vs--single.vs--searching:not(.vs--open):not(.vs--loading) { - .vs__search { - opacity: .2; - } -} diff --git a/src/scss/modules/_selected.scss b/src/scss/modules/_selected.scss deleted file mode 100644 index 9e3b879..0000000 --- a/src/scss/modules/_selected.scss +++ /dev/null @@ -1,41 +0,0 @@ -/* Selected Tags */ -.vs__selected { - display: flex; - align-items: center; - background-color: $vs-selected-bg; - border: $vs-selected-border-width $vs-selected-border-style $vs-selected-border-color; - border-radius: $vs-border-radius; - color: map_get($vs-colors, 'dark'); - line-height: $vs-component-line-height; - margin: 4px 2px 0px 2px; - padding: 0 0.25em; - z-index: 0; -} - -.vs__deselect { - display: inline-flex; - appearance: none; - margin-left: 4px; - padding: 0; - border: 0; - cursor: pointer; - background: none; - fill: $vs-controls-color; - text-shadow: $vs-controls-deselect-text-shadow; -} - -/* States */ - -.vs--single { - .vs__selected { - background-color: transparent; - border-color: transparent; - } - &.vs--open .vs__selected { - position: absolute; - opacity: .4; - } - &.vs--searching .vs__selected { - display: none; - } -} diff --git a/src/scss/modules/_spinner.scss b/src/scss/modules/_spinner.scss deleted file mode 100644 index 1f8e536..0000000 --- a/src/scss/modules/_spinner.scss +++ /dev/null @@ -1,26 +0,0 @@ -/* Loading Spinner */ -.vs__spinner { - align-self: center; - opacity: 0; - font-size: 5px; - text-indent: -9999em; - overflow: hidden; - border-top: .9em solid rgba(100, 100, 100, .1); - border-right: .9em solid rgba(100, 100, 100, .1); - border-bottom: .9em solid rgba(100, 100, 100, .1); - border-left: .9em solid rgba(60, 60, 60, .45); - transform: translateZ(0); - animation: vSelectSpinner 1.1s infinite linear; - transition: opacity .1s; -} -.vs__spinner, -.vs__spinner:after { - border-radius: 50%; - width: 5em; - height: 5em; -} - -/* Loading Spinner States */ -.vs--loading .vs__spinner { - opacity: 1; -} diff --git a/src/scss/vue-select.scss b/src/scss/vue-select.scss deleted file mode 100644 index f3c25a7..0000000 --- a/src/scss/vue-select.scss +++ /dev/null @@ -1,13 +0,0 @@ -@import "global/variables"; -@import "global/component"; -@import "global/animations"; -@import "global/states"; - -@import "modules/dropdown-toggle"; -@import "modules/open-indicator"; -@import "modules/clear"; -@import "modules/dropdown-menu"; -@import "modules/dropdown-option"; -@import "modules/selected"; -@import "modules/search-input"; -@import "modules/spinner";