2d9842e496b575979cbab937ac93e2e473739a1eb1d1e03393338b71a3eaf5ebc0e8f06219e5297d4de6e1f13d61ba164c79a85e5874687fe084c60c4600a6-exec 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147
  1. /**
  2. * Dependencies
  3. */
  4. @import "~material-colors/dist/colors.less";
  5. @import "~easings-css/easings.less";
  6. /**
  7. * Variables
  8. */
  9. @treeselect-font-size: 1em;
  10. @treeselect-font-size-sm: 12px;
  11. @treeselect-padding: 5px;
  12. @treeselect-border-radius-lg: 5px;
  13. @treeselect-border-radius-sm: 2px;
  14. @treeselect-narrow-cell-width: 20px;
  15. @treeselect-wide-cell-width: 100%;
  16. @treeselect-icon-size: 12px;
  17. @treeselect-transition-duration: 200ms;
  18. @treeselect-transition-duration-slow: 400ms;
  19. @treeselect-max-level: 8;
  20. @treeselect-control-height: 36px;
  21. @treeselect-control-inner-height: @treeselect-control-height - @treeselect-control-border-width * 2;
  22. @treeselect-control-border-width: 1px;
  23. @treeselect-control-border-color: #ddd;
  24. @treeselect-control-border-color-hover: #cfcfcf;
  25. @treeselect-control-border-color-active: @treeselect-control-border-color-hover;
  26. @treeselect-control-border-color-focus: @md-light-blue-600;
  27. @treeselect-control-border-radius: @treeselect-border-radius-lg;
  28. @treeselect-control-bg: #fff;
  29. @treeselect-control-box-shadow-focus: 0 0 0 3px fade(@treeselect-control-border-color-focus, 10%);
  30. @treeselect-control-bg-disabled: #f9f9f9;
  31. @treeselect-placeholder-font-color: @md-grey-400;
  32. @treeselect-single-value-font-color: #333;
  33. @treeselect-single-value-font-color-focused: @treeselect-placeholder-font-color;
  34. @treeselect-multi-value-margin-x: 0;
  35. @treeselect-multi-value-margin-y: 2px;
  36. @treeselect-multi-value-padding-x: @treeselect-padding;
  37. @treeselect-multi-value-padding-y: 0;
  38. @treeselect-multi-value-font-size: @treeselect-font-size-sm;
  39. @treeselect-multi-value-font-color: @md-light-blue-600;
  40. @treeselect-multi-value-item-bg: @md-blue-50;
  41. @treeselect-multi-value-item-bg-new: @md-green-50;
  42. @treeselect-multi-value-item-border-width: 1px;
  43. @treeselect-multi-value-item-border-color: transparent;
  44. @treeselect-multi-value-font-color-hover: @treeselect-multi-value-font-color;
  45. @treeselect-multi-value-item-bg-hover: @treeselect-multi-value-item-bg;
  46. @treeselect-multi-value-item-bg-new-hover: @treeselect-multi-value-item-bg-new;
  47. @treeselect-multi-value-font-color-disabled: @md-grey-600;
  48. @treeselect-multi-value-item-bg-disabled: @md-grey-100;
  49. @treeselect-multi-value-item-font-color-control-disabled: #555;
  50. @treeselect-multi-value-item-bg-control-disabled: #fff;
  51. @treeselect-multi-value-item-border-color-control-disabled: #e5e5e5;
  52. @treeselect-multi-value-remove-color: @treeselect-multi-value-font-color;
  53. @treeselect-multi-value-remove-color-hover: @md-red-600;
  54. @treeselect-multi-value-remove-size: 6px;
  55. @treeselect-multi-value-divider-color: #fff;
  56. @treeselect-limit-tip-font-color: @md-grey-400;
  57. @treeselect-limit-tip-font-size: @treeselect-multi-value-font-size;
  58. @treeselect-limit-tip-font-weight: 600;
  59. @treeselect-single-input-font-size: inherit;
  60. @treeselect-multi-input-font-size: @treeselect-multi-value-font-size;
  61. @treeselect-menu-bg: #fff;
  62. @treeselect-menu-padding-y: @treeselect-padding;
  63. @treeselect-menu-line-height: 180%;
  64. @treeselect-menu-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);
  65. @treeselect-control-menu-divider-color: #f2f2f2;
  66. @treeselect-arrow-size: 9px;
  67. @treeselect-arrow-color: #ccc;
  68. @treeselect-arrow-color-hover: @md-grey-700;
  69. @treeselect-arrow-transition-timing-function: @ease-out-expo;
  70. @treeselect-x-size: 8px;
  71. @treeselect-x-color: @treeselect-arrow-color;
  72. @treeselect-x-color-hover: @md-red-600;
  73. @treeselect-option-bg-highlight: @md-grey-100;
  74. @treeselect-option-selected-bg: @md-blue-50;
  75. @treeselect-option-selected-bg-hover: @treeselect-option-selected-bg;
  76. @treeselect-checkbox-size: @treeselect-icon-size;
  77. @treeselect-checkbox-border-radius: @treeselect-border-radius-sm;
  78. @treeselect-checkbox-color: @md-grey-300;
  79. @treeselect-checkbox-color-highlight: @md-light-blue-600;
  80. @treeselect-checkbox-border-color: @treeselect-checkbox-color;
  81. @treeselect-checkbox-bg: #fff;
  82. @treeselect-checkbox-border-color-hover: @treeselect-checkbox-color-highlight;
  83. @treeselect-checkbox-bg-hover: @treeselect-checkbox-bg;
  84. @treeselect-checkbox-indeterminate-border-color: @treeselect-checkbox-color-highlight;
  85. @treeselect-checkbox-indeterminate-bg: @treeselect-checkbox-color-highlight;
  86. @treeselect-checkbox-indeterminate-icon: "./assets/checkbox-indeterminate.png";
  87. @treeselect-checkbox-indeterminate-border-color-hover: @treeselect-checkbox-color-highlight;
  88. @treeselect-checkbox-indeterminate-bg-hover: @treeselect-checkbox-color-highlight;
  89. @treeselect-checkbox-checked-border-color: @treeselect-checkbox-color-highlight;
  90. @treeselect-checkbox-checked-bg: @treeselect-checkbox-color-highlight;
  91. @treeselect-checkbox-checked-icon: "./assets/checkbox-checked.png";
  92. @treeselect-checkbox-checked-border-color-hover: @treeselect-checkbox-color-highlight;
  93. @treeselect-checkbox-checked-bg-hover: @treeselect-checkbox-color-highlight;
  94. @treeselect-checkbox-disabled-border-color: @treeselect-checkbox-border-color;
  95. @treeselect-checkbox-disabled-bg-color: darken(@treeselect-checkbox-bg, 3%);
  96. @treeselect-checkbox-disabled-indeterminate-icon: "./assets/checkbox-indeterminate-disabled.png";
  97. @treeselect-checkbox-disabled-checked-icon: "./assets/checkbox-checked-disabled.png";
  98. @treeselect-option-label-color: inherit;
  99. @treeselect-option-label-color-disabled: rgba(0, 0, 0, 0.25);
  100. @treeselect-loader-color-dark: @md-light-blue-600;
  101. @treeselect-loader-color-light: @md-light-blue-100;
  102. @treeselect-loader-animation-duration: 1.6s;
  103. @treeselect-warning-icon-bg: @md-orange-600;
  104. @treeselect-error-icon-bg: @md-red-600;
  105. @treeselect-tip-color: @md-grey-600;
  106. @treeselect-tip-font-size: @treeselect-font-size-sm;
  107. @treeselect-retry-text-color: @md-light-blue-600;
  108. /**
  109. * Mixins
  110. */
  111. .clickable() {
  112. cursor: pointer;
  113. }
  114. .inputtable() {
  115. cursor: text;
  116. }
  117. .forbidden() {
  118. cursor: not-allowed;
  119. }
  120. .reset-cursor() {
  121. cursor: default;
  122. }
  123. .rounded() {
  124. border-radius: 50%;
  125. }
  126. .border-radius-top(@size) {
  127. border-top-left-radius: @size;
  128. border-top-right-radius: @size;
  129. }
  130. .border-radius-bottom(@size) {
  131. border-bottom-left-radius: @size;
  132. border-bottom-right-radius: @size;
  133. }
  134. .text-truncate() {
  135. overflow: hidden;
  136. text-overflow: ellipsis;
  137. white-space: nowrap;
  138. }
  139. .horizontal-padding(@value) {
  140. padding-left: @value;
  141. padding-right: @value;
  142. }
  143. .vertical-padding(@value) {
  144. padding-top: @value;
  145. padding-bottom: @value;
  146. }
  147. .icon() {
  148. display: block;
  149. margin: auto;
  150. }
  151. .row() {
  152. .horizontal-padding(@treeselect-padding);
  153. display: table;
  154. table-layout: fixed;
  155. width: 100%;
  156. }
  157. .cell() {
  158. display: table-cell;
  159. vertical-align: middle;
  160. }
  161. .wide-cell() {
  162. .cell();
  163. .horizontal-padding(@treeselect-padding);
  164. .text-truncate();
  165. width: @treeselect-wide-cell-width;
  166. }
  167. .narrow-cell() {
  168. .cell();
  169. width: @treeselect-narrow-cell-width;
  170. text-align: center;
  171. line-height: 0;
  172. }
  173. // based on: https://github.com/strues/retinajs/blob/master/dist/retina.less
  174. .retina(@path, @cap: 2) { // stylelint-disable-line selector-class-pattern
  175. @lowretina: ~"(min-resolution: 1.5dppx)";
  176. @2xpath: replace(@path, "(\.\w+)$", "@2x$1");
  177. background-image: url(@path);
  178. @media @lowretina {
  179. background-image: url(@2xpath);
  180. }
  181. .create-queries() when (@cap >= 2) {
  182. .loop(@env) when (@env <= @cap) {
  183. @retinapath: replace(@path, "(\.\w+)$", "@@{env}x$1");
  184. @media (min-resolution: @env * 96dpi) {
  185. background-image: url(@retinapath);
  186. }
  187. .loop((@env + 1));
  188. }
  189. .loop(2);
  190. }
  191. .create-queries();
  192. }
  193. /**
  194. * Helpers
  195. */
  196. .vue-treeselect-helper-hide {
  197. display: none;
  198. }
  199. .vue-treeselect-helper-zoom-effect-off {
  200. transform: none !important; // stylelint-disable-line declaration-no-important
  201. }
  202. /**
  203. * Animations
  204. */
  205. @keyframes vue-treeselect-animation-fade-in {
  206. 0% {
  207. opacity: 0;
  208. }
  209. }
  210. @keyframes vue-treeselect-animation-bounce {
  211. 0%, 100% {
  212. transform: scale(0);
  213. }
  214. 50% {
  215. transform: scale(1);
  216. }
  217. }
  218. @keyframes vue-treeselect-animation-rotate {
  219. 100% {
  220. transform: rotate(360deg);
  221. }
  222. }
  223. /**
  224. * Transitions
  225. */
  226. .vue-treeselect__multi-value-item--transition {
  227. &-enter-active,
  228. &-leave-active {
  229. transition-duration: @treeselect-transition-duration;
  230. transition-property: transform, opacity;
  231. }
  232. &-enter-active {
  233. transition-timing-function: @ease-out-circ;
  234. }
  235. &-leave-active {
  236. transition-timing-function: @ease-out-cubic;
  237. // trigger animation when element is removed
  238. position: absolute;
  239. }
  240. &-enter,
  241. &-leave-to {
  242. transform: scale(0.7);
  243. opacity: 0;
  244. }
  245. &-move {
  246. transition: @treeselect-transition-duration transform @ease-out-quart;
  247. }
  248. }
  249. .vue-treeselect__menu--transition {
  250. &-enter-active,
  251. &-leave-active {
  252. // to be overriden
  253. }
  254. &-enter,
  255. &-leave-to {
  256. // to be overriden
  257. }
  258. }
  259. .vue-treeselect__list--transition {
  260. &-enter-active,
  261. &-leave-active {
  262. // to be overriden
  263. }
  264. &-enter,
  265. &-leave-to {
  266. // to be overriden
  267. }
  268. }
  269. /**
  270. * Namespace
  271. */
  272. .vue-treeselect {
  273. position: relative;
  274. text-align: left;
  275. [dir="rtl"] & {
  276. text-align: right;
  277. }
  278. div,
  279. span {
  280. box-sizing: border-box;
  281. }
  282. svg {
  283. fill: currentColor;
  284. }
  285. }
  286. /**
  287. * Control
  288. */
  289. .vue-treeselect__control {
  290. .row();
  291. height: @treeselect-control-height;
  292. border: @treeselect-control-border-width solid @treeselect-control-border-color;
  293. border-radius: @treeselect-control-border-radius;
  294. background: @treeselect-control-bg;
  295. transition-duration: @treeselect-transition-duration;
  296. transition-property: border-color, box-shadow, width, height, background-color, opacity;
  297. transition-timing-function: @ease-out-cubic;
  298. .vue-treeselect:not(.vue-treeselect--disabled):not(.vue-treeselect--focused) &:hover {
  299. border-color: @treeselect-control-border-color-hover;
  300. }
  301. .vue-treeselect--focused:not(.vue-treeselect--open) & {
  302. border-color: @treeselect-control-border-color-focus;
  303. box-shadow: @treeselect-control-box-shadow-focus;
  304. }
  305. .vue-treeselect--disabled & {
  306. background-color: @treeselect-control-bg-disabled;
  307. }
  308. .vue-treeselect--open & {
  309. border-color: @treeselect-control-border-color-active;
  310. }
  311. .vue-treeselect--open.vue-treeselect--open-below & {
  312. .border-radius-bottom(0);
  313. }
  314. .vue-treeselect--open.vue-treeselect--open-above & {
  315. .border-radius-top(0);
  316. }
  317. }
  318. .vue-treeselect__value-container,
  319. .vue-treeselect__multi-value {
  320. width: 100%;
  321. vertical-align: middle;
  322. }
  323. .vue-treeselect__value-container {
  324. display: table-cell;
  325. position: relative;
  326. .vue-treeselect--searchable:not(.vue-treeselect--disabled) & {
  327. // The real input is small and not covering the whole control.
  328. // We show an I-shape cursor to give user a hint that
  329. // clicking anywhere in the control will make the input focused.
  330. .inputtable();
  331. }
  332. }
  333. .vue-treeselect__multi-value {
  334. display: inline-block;
  335. .vue-treeselect--has-value & {
  336. margin-bottom: @treeselect-padding;
  337. }
  338. }
  339. .vue-treeselect__placeholder,
  340. .vue-treeselect__single-value {
  341. .text-truncate();
  342. .horizontal-padding(@treeselect-padding);
  343. position: absolute;
  344. top: 0;
  345. right: 0;
  346. bottom: 0;
  347. left: 0;
  348. line-height: @treeselect-control-inner-height;
  349. user-select: none;
  350. pointer-events: none;
  351. }
  352. .vue-treeselect__placeholder {
  353. color: @treeselect-placeholder-font-color;
  354. }
  355. .vue-treeselect__single-value {
  356. color: @treeselect-single-value-font-color;
  357. .vue-treeselect--focused.vue-treeselect--searchable & {
  358. color: @treeselect-single-value-font-color-focused;
  359. }
  360. .vue-treeselect--disabled & {
  361. // #274 Fix for IE
  362. position: static;
  363. }
  364. }
  365. .vue-treeselect__multi-value-item-container {
  366. display: inline-block;
  367. padding-top: @treeselect-padding;
  368. padding-right: @treeselect-padding;
  369. vertical-align: top;
  370. [dir="rtl"] & {
  371. padding-right: 0;
  372. padding-left: @treeselect-padding;
  373. }
  374. }
  375. .vue-treeselect__multi-value-item {
  376. .clickable();
  377. display: inline-table;
  378. background: @treeselect-multi-value-item-bg;
  379. // Table elements do not have margin, so we set at the container element.
  380. padding: @treeselect-multi-value-margin-y @treeselect-multi-value-margin-x;
  381. border: @treeselect-multi-value-item-border-width solid @treeselect-multi-value-item-border-color;
  382. border-radius: @treeselect-border-radius-sm;
  383. color: @treeselect-multi-value-font-color;
  384. font-size: @treeselect-multi-value-font-size;
  385. vertical-align: top; // stylelint-disable-line plugin/declaration-block-no-ignored-properties
  386. .vue-treeselect:not(.vue-treeselect--disabled) &:not(.vue-treeselect__multi-value-item-disabled):hover &:not(.vue-treeselect__multi-value-item-new) &:not(.vue-treeselect__multi-value-item-new):hover {
  387. .clickable();
  388. background: @treeselect-multi-value-item-bg-hover;
  389. color: @treeselect-multi-value-font-color-hover;
  390. }
  391. &.vue-treeselect__multi-value-item-disabled {
  392. .reset-cursor();
  393. background: @treeselect-multi-value-item-bg-disabled;
  394. color: @treeselect-multi-value-font-color-disabled;
  395. }
  396. .vue-treeselect--disabled & {
  397. .reset-cursor();
  398. background: @treeselect-multi-value-item-bg-control-disabled;
  399. border-color: @treeselect-multi-value-item-border-color-control-disabled;
  400. color: @treeselect-multi-value-item-font-color-control-disabled;
  401. }
  402. &.vue-treeselect__multi-value-item-new {
  403. background: @treeselect-multi-value-item-bg-new;
  404. &:hover {
  405. background: @treeselect-multi-value-item-bg-new;
  406. }
  407. }
  408. }
  409. .vue-treeselect__value-remove,
  410. .vue-treeselect__multi-value-label {
  411. display: table-cell;
  412. padding: @treeselect-multi-value-padding-y @treeselect-multi-value-padding-x;
  413. vertical-align: middle;
  414. }
  415. .vue-treeselect__value-remove {
  416. color: @treeselect-multi-value-remove-color;
  417. padding-left: @treeselect-multi-value-padding-x;
  418. border-left: 1px solid @treeselect-multi-value-divider-color;
  419. line-height: 0;
  420. [dir="rtl"] & {
  421. border-left: 0 none;
  422. border-right: 1px solid @treeselect-multi-value-divider-color;
  423. }
  424. .vue-treeselect__multi-value-item:hover & {
  425. color: @treeselect-multi-value-remove-color-hover;
  426. }
  427. .vue-treeselect--disabled &,
  428. .vue-treeselect__multi-value-item-disabled & {
  429. display: none;
  430. }
  431. > svg {
  432. width: @treeselect-multi-value-remove-size;
  433. height: @treeselect-multi-value-remove-size;
  434. }
  435. }
  436. .vue-treeselect__multi-value-label {
  437. padding-right: @treeselect-multi-value-padding-x;
  438. white-space: pre-line;
  439. user-select: none;
  440. }
  441. .vue-treeselect__limit-tip {
  442. display: inline-block;
  443. padding-top: @treeselect-padding;
  444. padding-right: @treeselect-padding;
  445. vertical-align: top;
  446. [dir="rtl"] & {
  447. padding-right: 0;
  448. padding-left: @treeselect-padding;
  449. }
  450. }
  451. .vue-treeselect__limit-tip-text {
  452. .reset-cursor();
  453. display: block;
  454. margin: @treeselect-multi-value-margin-y @treeselect-multi-value-margin-x;
  455. padding: (@treeselect-multi-value-padding-y + @treeselect-multi-value-item-border-width) 0;
  456. color: @treeselect-limit-tip-font-color;
  457. font-size: @treeselect-limit-tip-font-size;
  458. font-weight: @treeselect-limit-tip-font-weight;
  459. }
  460. .vue-treeselect__input-container {
  461. display: block;
  462. max-width: 100%;
  463. outline: none;
  464. .vue-treeselect--single & {
  465. font-size: @treeselect-single-input-font-size;
  466. height: 100%;
  467. }
  468. .vue-treeselect--multi & {
  469. display: inline-block;
  470. font-size: @treeselect-multi-input-font-size;
  471. vertical-align: top;
  472. }
  473. .vue-treeselect--searchable & {
  474. .horizontal-padding(@treeselect-padding);
  475. }
  476. .vue-treeselect--searchable.vue-treeselect--multi.vue-treeselect--has-value & {
  477. padding-top: @treeselect-padding;
  478. padding-left: 0;
  479. [dir="rtl"] & {
  480. padding-left: @treeselect-padding;
  481. padding-right: 0;
  482. }
  483. }
  484. .vue-treeselect--disabled & {
  485. display: none;
  486. }
  487. }
  488. .vue-treeselect__input,
  489. .vue-treeselect__sizer {
  490. margin: 0;
  491. line-height: inherit;
  492. font-family: inherit;
  493. font-size: inherit;
  494. }
  495. .vue-treeselect__input {
  496. max-width: 100%;
  497. margin: 0;
  498. padding: 0;
  499. border: 0;
  500. outline: none;
  501. box-sizing: content-box;
  502. box-shadow: none;
  503. background: none transparent;
  504. line-height: 1;
  505. vertical-align: middle;
  506. &::-ms-clear {
  507. display: none;
  508. }
  509. .vue-treeselect--single & {
  510. width: 100%;
  511. height: 100%;
  512. }
  513. .vue-treeselect--multi & {
  514. .vertical-padding(@treeselect-multi-value-margin-y + @treeselect-multi-value-item-border-width);
  515. }
  516. .vue-treeselect--has-value & {
  517. line-height: inherit;
  518. vertical-align: top;
  519. }
  520. }
  521. .vue-treeselect__sizer {
  522. position: absolute;
  523. top: 0;
  524. left: 0;
  525. visibility: hidden;
  526. height: 0;
  527. overflow: scroll;
  528. white-space: pre;
  529. }
  530. .vue-treeselect__x-container {
  531. .narrow-cell();
  532. .clickable();
  533. color: @treeselect-x-color;
  534. animation: @treeselect-transition-duration vue-treeselect-animation-fade-in @ease-out-circ;
  535. &:hover {
  536. color: @treeselect-x-color-hover;
  537. }
  538. }
  539. .vue-treeselect__x {
  540. width: @treeselect-x-size;
  541. height: @treeselect-x-size;
  542. }
  543. .vue-treeselect__control-arrow-container {
  544. .narrow-cell();
  545. .clickable();
  546. .vue-treeselect--disabled & {
  547. .reset-cursor();
  548. }
  549. }
  550. .vue-treeselect__control-arrow {
  551. width: @treeselect-arrow-size;
  552. height: @treeselect-arrow-size;
  553. color: @treeselect-arrow-color;
  554. .vue-treeselect:not(.vue-treeselect--disabled) .vue-treeselect__control-arrow-container:hover & {
  555. color: @treeselect-arrow-color-hover;
  556. }
  557. .vue-treeselect--disabled & {
  558. opacity: 0.35;
  559. }
  560. }
  561. .vue-treeselect__control-arrow--rotated {
  562. transform: rotateZ(180deg);
  563. }
  564. /**
  565. * Menu
  566. */
  567. .vue-treeselect__menu-container {
  568. position: absolute;
  569. left: 0;
  570. width: 100%;
  571. overflow: visible;
  572. transition: 0s;
  573. .vue-treeselect--open-below:not(.vue-treeselect--append-to-body) & {
  574. top: 100%;
  575. }
  576. .vue-treeselect--open-above:not(.vue-treeselect--append-to-body) & {
  577. bottom: 100%;
  578. }
  579. }
  580. .vue-treeselect__menu {
  581. .reset-cursor(); // set to normal cursor since text is unselectable
  582. .vertical-padding(@treeselect-menu-padding-y);
  583. display: block;
  584. position: absolute;
  585. overflow-x: hidden;
  586. overflow-y: auto;
  587. // IE9 does not properly handle `width: 100%` with scrollbar when `box-sizing: border-box`
  588. width: auto;
  589. border: 1px solid @treeselect-control-border-color-active;
  590. background: @treeselect-menu-bg;
  591. line-height: @treeselect-menu-line-height;
  592. // https://css-tricks.com/snippets/css/momentum-scrolling-on-ios-overflow-elements/
  593. -webkit-overflow-scrolling: touch;
  594. .vue-treeselect--open-below & {
  595. .border-radius-bottom(@treeselect-border-radius-lg);
  596. top: 0;
  597. margin-top: (-@treeselect-control-border-width);
  598. border-top-color: @treeselect-control-menu-divider-color;
  599. box-shadow: @treeselect-menu-box-shadow;
  600. }
  601. .vue-treeselect--open-above & {
  602. .border-radius-top(@treeselect-border-radius-lg);
  603. bottom: 0;
  604. margin-bottom: (-@treeselect-control-border-width);
  605. border-bottom-color: @treeselect-control-menu-divider-color;
  606. }
  607. }
  608. .generate-level-indentations(@i) when (@i >= 0) {
  609. .generate-level-indentations((@i - 1));
  610. .vue-treeselect__indent-level-@{i} {
  611. .vue-treeselect__option {
  612. padding-left: @treeselect-padding + @i * @treeselect-narrow-cell-width;
  613. [dir="rtl"] & {
  614. padding-left: @treeselect-padding;
  615. padding-right: @treeselect-padding + @i * @treeselect-narrow-cell-width;
  616. }
  617. }
  618. .vue-treeselect__tip {
  619. padding-left: @treeselect-padding + (@i + 1) * @treeselect-narrow-cell-width;
  620. [dir="rtl"] & {
  621. padding-left: @treeselect-padding;
  622. padding-right: @treeselect-padding + (@i + 1) * @treeselect-narrow-cell-width;
  623. }
  624. }
  625. }
  626. }
  627. .generate-level-indentations(@treeselect-max-level);
  628. .vue-treeselect__option {
  629. .row();
  630. }
  631. .vue-treeselect__option--highlight {
  632. background: @treeselect-option-bg-highlight;
  633. }
  634. .vue-treeselect__option--selected {
  635. // note that these should override `.vue-treeselect__option--highlight`
  636. .vue-treeselect--single & {
  637. background: @treeselect-option-selected-bg;
  638. font-weight: 600;
  639. &:hover {
  640. background: @treeselect-option-selected-bg-hover;
  641. }
  642. }
  643. }
  644. .vue-treeselect__option--hide {
  645. display: none;
  646. }
  647. .vue-treeselect__option-arrow-container,
  648. .vue-treeselect__option-arrow-placeholder {
  649. .narrow-cell();
  650. }
  651. .vue-treeselect__option-arrow-container {
  652. .clickable();
  653. }
  654. .vue-treeselect__option-arrow {
  655. display: inline-block;
  656. width: @treeselect-arrow-size;
  657. height: @treeselect-arrow-size;
  658. color: @treeselect-arrow-color;
  659. vertical-align: middle;
  660. transition: @treeselect-transition-duration transform @treeselect-arrow-transition-timing-function;
  661. transform: rotateZ(-90deg);
  662. [dir="rtl"] & {
  663. transform: rotateZ(90deg);
  664. }
  665. .vue-treeselect__option-arrow-container:hover &,
  666. .vue-treeselect--branch-nodes-disabled .vue-treeselect__option:hover & {
  667. color: @treeselect-arrow-color-hover;
  668. }
  669. }
  670. .vue-treeselect__option-arrow--rotated {
  671. transform: rotateZ(0);
  672. [dir="rtl"] & {
  673. transform: rotateZ(0);
  674. }
  675. &.vue-treeselect__option-arrow--prepare-enter {
  676. transform: rotateZ(-90deg) !important; // stylelint-disable-line declaration-no-important
  677. [dir="rtl"] & {
  678. transform: rotateZ(90deg) !important; // stylelint-disable-line declaration-no-important
  679. }
  680. }
  681. }
  682. .vue-treeselect__label-container {
  683. .cell();
  684. .clickable();
  685. display: table;
  686. width: 100%;
  687. table-layout: fixed;
  688. color: @treeselect-option-label-color;
  689. .vue-treeselect__option--disabled & {
  690. .forbidden();
  691. color: @treeselect-option-label-color-disabled;
  692. }
  693. }
  694. .vue-treeselect__checkbox-container {
  695. display: table-cell;
  696. width: @treeselect-narrow-cell-width;
  697. min-width: @treeselect-narrow-cell-width;
  698. height: 100%;
  699. text-align: center;
  700. vertical-align: middle;
  701. }
  702. .vue-treeselect__checkbox {
  703. display: block;
  704. margin: auto;
  705. width: @treeselect-checkbox-size;
  706. height: @treeselect-checkbox-size;
  707. border-width: 1px;
  708. border-style: solid;
  709. border-radius: @treeselect-border-radius-sm;
  710. position: relative;
  711. transition: @treeselect-transition-duration all @ease-out-circ;
  712. }
  713. .vue-treeselect__check-mark,
  714. .vue-treeselect__minus-mark {
  715. display: block;
  716. position: absolute;
  717. left: 1px;
  718. top: 1px;
  719. background-repeat: no-repeat;
  720. opacity: 0;
  721. transition: @treeselect-transition-duration all ease;
  722. }
  723. .vue-treeselect__minus-mark {
  724. width: image-width(@treeselect-checkbox-indeterminate-icon);
  725. height: image-height(@treeselect-checkbox-indeterminate-icon);
  726. // Svg icons are rendered differently in different browsers thus unacceptable.
  727. // Png provides the best consistency with a drawback that
  728. // its color can't be controlled by CSS.
  729. .retina(@treeselect-checkbox-indeterminate-icon, 3);
  730. background-size: image-size(@treeselect-checkbox-indeterminate-icon);
  731. .vue-treeselect__checkbox--indeterminate > & {
  732. opacity: 1;
  733. }
  734. .vue-treeselect__checkbox--disabled & {
  735. .retina(@treeselect-checkbox-disabled-indeterminate-icon, 3);
  736. }
  737. }
  738. .vue-treeselect__check-mark {
  739. width: image-width(@treeselect-checkbox-checked-icon);
  740. height: image-height(@treeselect-checkbox-checked-icon);
  741. .retina(@treeselect-checkbox-checked-icon, 3);
  742. background-size: image-size(@treeselect-checkbox-checked-icon);
  743. // Set initial height to 1px.
  744. transform: scaleY(1 / unit(image-height(@treeselect-checkbox-checked-icon)));
  745. .vue-treeselect__checkbox--checked > & {
  746. opacity: 1;
  747. transform: scaleY(1);
  748. }
  749. .vue-treeselect__checkbox--disabled & {
  750. .retina(@treeselect-checkbox-disabled-checked-icon, 3);
  751. }
  752. }
  753. .vue-treeselect__checkbox--unchecked {
  754. border-color: @treeselect-checkbox-border-color;
  755. background: @treeselect-checkbox-bg;
  756. .vue-treeselect__label-container:hover & {
  757. border-color: @treeselect-checkbox-border-color-hover;
  758. background: @treeselect-checkbox-bg-hover;
  759. }
  760. }
  761. .vue-treeselect__checkbox--indeterminate {
  762. border-color: @treeselect-checkbox-indeterminate-border-color;
  763. background: @treeselect-checkbox-indeterminate-bg;
  764. .vue-treeselect__label-container:hover & {
  765. border-color: @treeselect-checkbox-indeterminate-border-color-hover;
  766. background: @treeselect-checkbox-indeterminate-bg-hover;
  767. }
  768. }
  769. .vue-treeselect__checkbox--checked {
  770. border-color: @treeselect-checkbox-checked-border-color;
  771. background: @treeselect-checkbox-checked-bg;
  772. .vue-treeselect__label-container:hover & {
  773. border-color: @treeselect-checkbox-checked-border-color-hover;
  774. background: @treeselect-checkbox-checked-bg-hover;
  775. }
  776. }
  777. .vue-treeselect__checkbox--disabled {
  778. border-color: @treeselect-checkbox-disabled-border-color;
  779. background-color: @treeselect-checkbox-disabled-bg-color;
  780. .vue-treeselect__label-container:hover & {
  781. border-color: @treeselect-checkbox-disabled-border-color;
  782. background-color: @treeselect-checkbox-disabled-bg-color;
  783. }
  784. }
  785. .vue-treeselect__label {
  786. .text-truncate();
  787. display: table-cell;
  788. padding-left: @treeselect-padding;
  789. max-width: 100%;
  790. vertical-align: middle;
  791. cursor: inherit; // override user agent style
  792. [dir="rtl"] & {
  793. padding-left: 0;
  794. padding-right: @treeselect-padding;
  795. }
  796. }
  797. .vue-treeselect__count {
  798. margin-left: @treeselect-padding;
  799. font-weight: 400;
  800. opacity: 0.6;
  801. [dir="rtl"] & {
  802. margin-left: 0;
  803. margin-right: @treeselect-padding;
  804. }
  805. }
  806. .vue-treeselect__tip {
  807. .row();
  808. color: @treeselect-tip-color;
  809. }
  810. .vue-treeselect__tip-text {
  811. .wide-cell();
  812. font-size: @treeselect-tip-font-size;
  813. }
  814. .vue-treeselect__retry {
  815. .vue-treeselect__error-tip & {
  816. .clickable();
  817. margin-left: @treeselect-padding;
  818. font-style: normal;
  819. font-weight: 600;
  820. text-decoration: none;
  821. color: @treeselect-retry-text-color;
  822. [dir="rtl"] & {
  823. margin-left: 0;
  824. margin-right: @treeselect-padding;
  825. }
  826. }
  827. }
  828. .vue-treeselect__icon-container {
  829. .narrow-cell();
  830. .vue-treeselect--single & {
  831. padding-left: @treeselect-padding;
  832. [dir="rtl"] & {
  833. padding-left: 0;
  834. padding-right: @treeselect-padding;
  835. }
  836. }
  837. }
  838. .vue-treeselect__icon-warning {
  839. .icon();
  840. .rounded();
  841. position: relative;
  842. width: @treeselect-icon-size;
  843. height: @treeselect-icon-size;
  844. background: @treeselect-warning-icon-bg;
  845. &::after {
  846. display: block;
  847. position: absolute;
  848. content: "";
  849. left: 5px;
  850. top: 2.5px;
  851. width: 2px;
  852. height: 1px;
  853. border: 0 solid #fff;
  854. border-top-width: 5px;
  855. border-bottom-width: 1px;
  856. }
  857. }
  858. .vue-treeselect__icon-error {
  859. .icon();
  860. .rounded();
  861. @stroke-length: 6px;
  862. position: relative;
  863. width: @treeselect-icon-size;
  864. height: @treeselect-icon-size;
  865. background: @treeselect-error-icon-bg;
  866. &::before,
  867. &::after {
  868. display: block;
  869. position: absolute;
  870. content: "";
  871. background: #fff;
  872. transform: rotate(45deg);
  873. }
  874. &::before {
  875. width: @stroke-length;
  876. height: 2px;
  877. left: 3px;
  878. top: 5px;
  879. }
  880. &::after {
  881. width: 2px;
  882. height: @stroke-length;
  883. left: 5px;
  884. top: 3px;
  885. }
  886. }
  887. .vue-treeselect__icon-loader {
  888. .icon();
  889. position: relative;
  890. width: @treeselect-icon-size;
  891. height: @treeselect-icon-size;
  892. text-align: center;
  893. animation: @treeselect-loader-animation-duration vue-treeselect-animation-rotate linear infinite;
  894. &::before,
  895. &::after {
  896. .rounded();
  897. position: absolute;
  898. content: "";
  899. left: 0;
  900. top: 0;
  901. display: block;
  902. width: 100%;
  903. height: 100%;
  904. opacity: 0.6;
  905. animation: @treeselect-loader-animation-duration vue-treeselect-animation-bounce ease-in-out infinite;
  906. }
  907. &::before {
  908. background: @treeselect-loader-color-dark;
  909. }
  910. &::after {
  911. background: @treeselect-loader-color-light;
  912. animation-delay: -(@treeselect-loader-animation-duration / 2);
  913. }
  914. }
  915. /**
  916. * Menu Portal
  917. */
  918. .vue-treeselect__menu-placeholder {
  919. display: none;
  920. }
  921. .vue-treeselect__portal-target {
  922. position: absolute;
  923. display: block;
  924. left: 0;
  925. top: 0;
  926. height: 0;
  927. width: 0;
  928. padding: 0;
  929. margin: 0;
  930. border: 0;
  931. overflow: visible;
  932. box-sizing: border-box;
  933. }