3.1.71 • Published 26 days ago

@che-ins-ui/theme v3.1.71

Weekly downloads
-
License
MIT
Repository
-
Last release
26 days 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.71

26 days ago

3.1.70

2 months ago

3.1.67

2 months ago

3.1.69

2 months ago

3.1.68

2 months ago

3.1.66

3 months ago

3.1.65

3 months ago

3.1.64

3 months ago

3.1.63

4 months ago

3.1.62

5 months ago

3.1.58

5 months ago

3.1.57

5 months ago

3.1.59

5 months ago

3.1.61

5 months ago

3.1.60

5 months ago

3.1.56

5 months ago

3.1.55

5 months ago

3.1.54

5 months ago

3.1.53

5 months ago

3.1.50

6 months ago

3.1.52

6 months ago

3.1.51

6 months ago

3.1.38

9 months ago

3.1.37

9 months ago

3.1.39

9 months ago

3.1.45

6 months ago

3.1.44

6 months ago

3.1.47

6 months ago

3.1.46

6 months ago

3.1.49

6 months ago

3.1.48

6 months ago

3.1.41

7 months ago

3.1.40

9 months ago

3.1.43

6 months ago

3.1.42

6 months ago

3.1.34

12 months ago

3.1.33

12 months ago

3.1.36

12 months ago

3.1.35

12 months ago

3.1.32

1 year ago

3.1.29

1 year ago

3.1.30

1 year ago

3.1.31

1 year ago

3.1.23

1 year ago

3.1.22

1 year ago

3.1.25

1 year ago

3.1.24

1 year ago

3.1.27

1 year ago

3.1.26

1 year ago

3.1.28

1 year ago

3.1.21

1 year ago

3.1.20

1 year ago

3.1.19

1 year ago

3.1.14

1 year ago

3.1.13

1 year ago

3.1.16

1 year ago

3.1.15

1 year ago

3.1.18

1 year ago

3.1.17

1 year ago

3.1.12

1 year ago

3.1.11

1 year ago

3.1.10

1 year ago

3.1.9

1 year ago

3.1.8

1 year ago

3.1.3

1 year ago

3.1.7

1 year ago

3.1.6

1 year ago

3.1.5

1 year ago

3.1.4

1 year ago

3.0.23

1 year ago

3.1.2

1 year ago

3.1.1

1 year ago

3.1.0

1 year ago

3.0.21

1 year ago

3.0.22

1 year ago

3.0.20

1 year ago

1.2.1

2 years ago

2.1.2

1 year ago

2.0.3

1 year ago

2.2.0

1 year ago

2.1.1

1 year ago

2.0.2

2 years ago

2.0.5

1 year ago

2.1.3

1 year ago

2.0.4

1 year ago

2.0.7

1 year ago

2.0.6

1 year ago

2.0.8

1 year ago

3.0.18

1 year ago

3.0.19

1 year ago

3.0.9

1 year ago

2.1.0

1 year ago

2.0.1

2 years ago

2.0.0

2 years ago

3.0.12

1 year ago

3.0.4

1 year ago

3.0.13

1 year ago

3.0.3

1 year ago

3.0.10

1 year ago

3.0.2

1 year ago

3.0.11

1 year ago

3.0.1

1 year ago

3.0.16

1 year ago

3.0.8

1 year ago

3.0.17

1 year ago

3.0.7

1 year ago

3.0.14

1 year ago

3.0.6

1 year ago

3.0.15

1 year ago

3.0.5

1 year ago

3.0.0

1 year ago

1.2.0

2 years ago

1.1.0

2 years ago