3.1.79 • Published 10 months ago

@che-ins-ui/theme v3.1.79

Weekly downloads
-
License
MIT
Repository
-
Last release
10 months ago

Theme

Стилизация через ThemeProvider от "react-jss"

для стилизации компонентов необходимо передать тему в провайдер вида

const theme = {
  components: {
    [INPUT_COMPONENT_NAMESPACE]: {
      // component theme
    },
    [BUTTON_COMPONENT_NAMESPACE]: {
      // component theme
    },
  },
};

Внутри каждого компонента можно описать несколько видов стилей (далее - appearance) для каждого используемого компонента, например.

const theme = {
  components: {
    [INPUT_COMPONENT_NAMESPACE]: {
      // base - стили на всё приложение для всех компонентов этого типа
      base: {
        [INPUT_COMPONENTS_NAMES.wrapper]: {
          fontSize: "12px",
          // во всех аппирансах возможно добавление медиазапросов
          [theme.breakpoints.up("md")]: {
            fontSize: "14px",
          },
        },
      },
      big: {
        [INPUT_COMPONENTS_NAMES.wrapper]: {
          padding: "20px",
          [theme.breakpoints.up("md")]: {
            fontSize: "25px",
          },
          }
      },
      red: {
        [INPUT_COMPONENTS_NAMES.wrapper]: {
          background: 'red'
        }
        [INPUT_COMPONENTS_NAMES.input]: {
          color: "red",
        }
      },

      // пример стилизации кастомного аппиранса и состояний инпута по модификаторам
      appearanceName: {
        [INPUT_COMPONENTS_NAMES.wrapper]: {
          '&[data-focused="true"]': {
            alignItems: "center",
          },
          '&[data-hasvalue="true"]': {
            alignItems: "center",
          },
        },
        [INPUT_COMPONENTS_NAMES.input]: {
          padding: "12px",
          '&[data-focused="true"]': {
            padding: "12px",
          },
          '&[data-hasvalue="true"]': {
            padding: "12px",
          },
          "&:not(:focus)::placeholder": {
            opacity: 1,
          },
        },
      },
    },
  },
};

Каждый аппиранс стоит воспринимать как отдельный класс, который применится при передаче параметра в компонент. Пример использования компонента:

Обычный инпут (принимает стили только base):

<Input value={value} onChange={onChange} />

Big инпут (принимает стили base + big):

<Input value={value} onChange={onChange} appearance="big" />

Red инпут (принимает стили base + red):

<Input value={value} onChange={onChange} appearance="red" />

Big Red инпут (принимает стили base + big + red):

<Input
  value={value}
  onChange={onChange}
  baseAppearance="big"
  appearance="red"
/>

Как и в обычном css, приоритет отдаётся свойствам описанным в css ниже, а не в порядке добавления классов. По этому разделение на base / appearance не всегда может работать как ожидаем. Если свойства пересекаются, то следует передвинуть baseAppearance в описании выше чем appearance, проверив нигде ли не используется такое же сочетание baseAppearance + appearance в этом типе компонентов. Кейс очень редкий.

Так же у каждого компонента есть модификаторы, которые начинаются на data-. Полный список модификаторов для каждого блока конкретного компонента и их блоков можно посмотреть в исходниках компонента.

По итогу тема генерирует максимум 4 класса, это сознательное ограничение для того что бы избежать их большого количества. Классы генерируются по следующему принципу:

classNamePrefix - сам компонент blockName - описаны в объектах с константами вида INPUT_COMPONENTS_NAMES.wrapper. Все изменения в теме делаем только с использованием констант. appearance - то что мы передаём как appearance / baseAppearance

{classNamePrefix}-{blockName}
{classNamePrefix}-{blockName}-base
{classNamePrefix}-{blockName}-{baseAppearance}
{classNamePrefix}-{blockName}-{appearance}

При отсутствии чего либо описанного в приложении класс с модификатором класс будет отсутствовать из за ненадобности.

3.1.78

10 months ago

3.1.79

10 months ago

3.1.77

1 year ago

3.1.72

1 year ago

3.1.74

1 year ago

3.1.73

1 year ago

3.1.76

1 year ago

3.1.75

1 year ago

3.1.71

1 year ago

3.1.70

1 year ago

3.1.67

1 year ago

3.1.69

1 year ago

3.1.68

1 year ago

3.1.66

1 year ago

3.1.65

1 year ago

3.1.64

1 year ago

3.1.63

1 year ago

3.1.62

2 years ago

3.1.58

2 years ago

3.1.57

2 years ago

3.1.59

2 years ago

3.1.61

2 years ago

3.1.60

2 years ago

3.1.56

2 years ago

3.1.55

2 years ago

3.1.54

2 years ago

3.1.53

2 years ago

3.1.50

2 years ago

3.1.52

2 years ago

3.1.51

2 years ago

3.1.38

2 years ago

3.1.37

2 years ago

3.1.39

2 years ago

3.1.45

2 years ago

3.1.44

2 years ago

3.1.47

2 years ago

3.1.46

2 years ago

3.1.49

2 years ago

3.1.48

2 years ago

3.1.41

2 years ago

3.1.40

2 years ago

3.1.43

2 years ago

3.1.42

2 years ago

3.1.34

2 years ago

3.1.33

2 years ago

3.1.36

2 years ago

3.1.35

2 years ago

3.1.32

2 years ago

3.1.29

2 years ago

3.1.30

2 years ago

3.1.31

2 years ago

3.1.23

2 years ago

3.1.22

2 years ago

3.1.25

2 years ago

3.1.24

2 years ago

3.1.27

2 years ago

3.1.26

2 years ago

3.1.28

2 years ago

3.1.21

2 years ago

3.1.20

2 years ago

3.1.19

2 years ago

3.1.14

2 years ago

3.1.13

2 years ago

3.1.16

2 years ago

3.1.15

2 years ago

3.1.18

2 years ago

3.1.17

2 years ago

3.1.12

2 years ago

3.1.11

2 years ago

3.1.10

2 years ago

3.1.9

2 years ago

3.1.8

2 years ago

3.1.3

2 years ago

3.1.7

2 years ago

3.1.6

2 years ago

3.1.5

2 years ago

3.1.4

2 years ago

3.0.23

3 years ago

3.1.2

2 years ago

3.1.1

2 years ago

3.1.0

3 years ago

3.0.21

3 years ago

3.0.22

3 years ago

3.0.20

3 years ago

1.2.1

3 years ago

2.1.2

3 years ago

2.0.3

3 years ago

2.2.0

3 years ago

2.1.1

3 years ago

2.0.2

3 years ago

2.0.5

3 years ago

2.1.3

3 years ago

2.0.4

3 years ago

2.0.7

3 years ago

2.0.6

3 years ago

2.0.8

3 years ago

3.0.18

3 years ago

3.0.19

3 years ago

3.0.9

3 years ago

2.1.0

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

3.0.12

3 years ago

3.0.4

3 years ago

3.0.13

3 years ago

3.0.3

3 years ago

3.0.10

3 years ago

3.0.2

3 years ago

3.0.11

3 years ago

3.0.1

3 years ago

3.0.16

3 years ago

3.0.8

3 years ago

3.0.17

3 years ago

3.0.7

3 years ago

3.0.14

3 years ago

3.0.6

3 years ago

3.0.15

3 years ago

3.0.5

3 years ago

3.0.0

3 years ago

1.2.0

3 years ago

1.1.0

3 years ago