# _stylebase.styl

Глобальный медиатор стилей собирает не компилируемые /utils, компилируемые /core сущности и необходимые глобально кастомизации используемых сторонних модулей /libs (но, те которые позволяют это сделать без scoped - стоит разместить в SFC-обертках).

@/src/stylus/_stylebase.styl библиотеки:

// utils
@import "utils/_variables";
@import "utils/_placeholders";
@import "utils/_mixins";
@import "utils/_typography";

// core
@import "core/_base"; // normalize
@import "core/_animations";

Теперь можно использовать всю эту кухню на компонентах:

<style lang="stylus" scoped>
@import "~/src/stylus/_stylebase.styl";

...
</style>

Это можно назвать «глобальными стилями-невидимками», что-то такое - они, с одной стороны - участвуют в правильном оформлении везде, но, при этом, «их не видно». Мы предоставляем глобальные константы гайдлайна и всю прочую мощь препроцессора всем компонентным системам - библиотеке и всем ее «читателям».

# Mixins and placeholders

UI Library Starter дает надежду на то, что в вашей разметке код будет полностью оптимальный и консистентный. Это способно сделать даже крупную систему из нескольких проектов базирующихся на одном визуальном языке - и полностью управляемой, и, в тоже время - гибкой.

WARNING

Не копируйте код кусками по компонентам - оптимизируйте очевидно одинаковые наборы в миксинах и плейсхолдерах!

@/src/stylus/utils/_placeholders.styl

@import "./_mixins";
@import "./_typography";

// Project placeholders
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////

// Utilities
//////////////////////////////////////////////////////

$flex--center
  display flex
  align-items center
  justify-content center

// Ellipsis to long string
$lineOverflow
  display block
  white-space nowrap
  overflow hidden
  text-overflow ellipsis

// Защита для больших блоков текста, например в гридах
$longLettersProtection
  -ms-word-break break-all
  word-break break-all
  word-break break-word
  -webkit-hyphens auto
  -moz-hyphens auto
  -ms-hyphens auto
  hyphens auto


// Elements
//////////////////////////////////////////////////////

// Buttons
$button
  user-select none
  cursor pointer
  border none
  text-decoration none
  white-space nowrap
  outline none
  text-align center
  transition background $effects.duration


// Forms

$input__background($background)
  background $background

  &:hover
    background lighten($background, $effects.amount)

  &:active,
  &:focus
    background darken($background, $effects.amount)

$input
  width 100%
  appearance none
  -webkit-appearance inherit
  border none
  padding-left $inputs.padding
  padding-right $inputs.padding
  $border-radius("swimming")
  $text("alena")
  $input__background($inputs.background--default)

  &__wrapper
    position relative
    width 100%
    padding-bottom 32px

    &--disabled
      pointer-events none
      cursor default
      user-select none
      $opacity("psy")

    &--error
      .input__control,
      .textarea__control
        color $colors.prestige
        $input__background($inputs.background--error)

      .vs__dropdown-toggle
        $input__background($inputs.background--error)

      .vs__selected
        color $colors.bird

  &__error
    @extend $lineOverflow
    position absolute
    left $inputs.padding
    max-width "calc(100% - %s)" % $inputs.padding
    color $colors.bird
    $text("natasha")


// Shadows
$shadow
  box-shadow 0 10px 32px $colors.shadows

Или вы можете делать примеси без параметров для того чтобы - забегая вперед (см. раздел Breakpoints) - такой же пассаж стал доступен внутри медиа-миксинов:

@/src/stylus/utils/_mixins.styl

// Utilities
//////////////////////////////////////////////////////
// Mixins without arguments duplicate placeholders,
// so it can be passed to media mixins

$flex--center()
  display flex
  align-items center
  justify-content center

Теперь:

.selector
  +$tablet()
    $flex--center()