@skbkontur/react-ui 5.3.1 → 5.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +1 -6
  3. package/cjs/components/Autocomplete/Autocomplete.md +0 -113
  4. package/cjs/components/Button/Button.md +0 -261
  5. package/cjs/components/Calendar/Calendar.md +0 -276
  6. package/cjs/components/Calendar/CalendarDay.md +0 -70
  7. package/cjs/components/Center/Center.md +0 -26
  8. package/cjs/components/Checkbox/Checkbox.md +0 -171
  9. package/cjs/components/ComboBox/ComboBox.md +0 -574
  10. package/cjs/components/CurrencyInput/CurrencyInput.md +0 -39
  11. package/cjs/components/CurrencyLabel/CurrencyLabel.md +0 -29
  12. package/cjs/components/DateInput/DateInput.md +0 -111
  13. package/cjs/components/DatePicker/DatePicker.md +0 -368
  14. package/cjs/components/Dropdown/Dropdown.md +0 -45
  15. package/cjs/components/DropdownMenu/DropdownMenu.md +0 -290
  16. package/cjs/components/FileUploader/FileUploader.md +0 -131
  17. package/cjs/components/FxInput/FxInput.md +0 -31
  18. package/cjs/components/Gapped/Gapped.md +0 -44
  19. package/cjs/components/GlobalLoader/GlobalLoader.md +0 -97
  20. package/cjs/components/Group/Group.md +0 -19
  21. package/cjs/components/Hint/Hint.md +0 -86
  22. package/cjs/components/Input/Input.md +0 -86
  23. package/cjs/components/Kebab/Kebab.md +0 -306
  24. package/cjs/components/Link/Link.md +0 -182
  25. package/cjs/components/Loader/Loader.md +0 -33
  26. package/cjs/components/MaskedInput/MaskedInput.md +0 -114
  27. package/cjs/components/MenuFooter/MenuFooter.md +0 -27
  28. package/cjs/components/MenuHeader/MenuHeader.md +0 -35
  29. package/cjs/components/MenuItem/MenuItem.md +0 -139
  30. package/cjs/components/MenuSeparator/MenuSeparator.md +0 -14
  31. package/cjs/components/MiniModal/MiniModal.md +0 -231
  32. package/cjs/components/Modal/Modal.md +0 -56
  33. package/cjs/components/Paging/Paging.md +0 -57
  34. package/cjs/components/PasswordInput/PasswordInput.md +0 -29
  35. package/cjs/components/Radio/Radio.md +0 -57
  36. package/cjs/components/RadioGroup/RadioGroup.md +0 -44
  37. package/cjs/components/ResponsiveLayout/ResponsiveLayout.md +0 -75
  38. package/cjs/components/ScrollContainer/ScrollContainer.md +0 -224
  39. package/cjs/components/Select/Select.md +0 -113
  40. package/cjs/components/SidePage/SidePage.md +0 -65
  41. package/cjs/components/SingleToast/SingleToast.md +0 -36
  42. package/cjs/components/Spinner/Spinner.md +0 -36
  43. package/cjs/components/Sticky/Sticky.md +0 -28
  44. package/cjs/components/Switcher/Switcher.md +0 -111
  45. package/cjs/components/Tabs/Tab.md +0 -73
  46. package/cjs/components/Tabs/Tabs.md +0 -54
  47. package/cjs/components/Textarea/Textarea.md +0 -58
  48. package/cjs/components/Toast/Toast.md +0 -69
  49. package/cjs/components/Toggle/Toggle.md +0 -110
  50. package/cjs/components/Token/Token.md +0 -48
  51. package/cjs/components/TokenInput/TokenInput.md +0 -277
  52. package/cjs/components/Tooltip/Tooltip.md +0 -322
  53. package/cjs/components/TooltipMenu/TooltipMenu.md +0 -241
  54. package/cjs/internal/DataTids/DATATIDS.md +0 -12
  55. package/cjs/internal/DataTids/DataTids.d.ts +0 -12
  56. package/cjs/internal/DataTids/DataTids.js +0 -50
  57. package/cjs/internal/DataTids/DataTids.js.map +0 -1
  58. package/cjs/internal/DataTids/DataTids.styles.d.ts +0 -7
  59. package/cjs/internal/DataTids/DataTids.styles.js +0 -42
  60. package/cjs/internal/DataTids/DataTids.styles.js.map +0 -1
  61. package/cjs/internal/DataTids/componentsDataTids.d.ts +0 -5
  62. package/cjs/internal/DataTids/componentsDataTids.js +0 -15
  63. package/cjs/internal/DataTids/componentsDataTids.js.map +0 -1
  64. package/cjs/internal/ThemePlayground/Playground.md +0 -7
  65. package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -64
  66. package/cjs/lib/locale/LOCALECONTEXT.md +0 -222
  67. package/cjs/lib/theming/ThemeContext.md +0 -265
  68. package/components/Autocomplete/Autocomplete.md +0 -113
  69. package/components/Button/Button.md +0 -261
  70. package/components/Calendar/Calendar.md +0 -276
  71. package/components/Calendar/CalendarDay.md +0 -70
  72. package/components/Center/Center.md +0 -26
  73. package/components/Checkbox/Checkbox.md +0 -171
  74. package/components/ComboBox/ComboBox.md +0 -574
  75. package/components/CurrencyInput/CurrencyInput.md +0 -39
  76. package/components/CurrencyLabel/CurrencyLabel.md +0 -29
  77. package/components/DateInput/DateInput.md +0 -111
  78. package/components/DatePicker/DatePicker.md +0 -368
  79. package/components/Dropdown/Dropdown.md +0 -45
  80. package/components/DropdownMenu/DropdownMenu.md +0 -290
  81. package/components/FileUploader/FileUploader.md +0 -131
  82. package/components/FxInput/FxInput.md +0 -31
  83. package/components/Gapped/Gapped.md +0 -44
  84. package/components/GlobalLoader/GlobalLoader.md +0 -97
  85. package/components/Group/Group.md +0 -19
  86. package/components/Hint/Hint.md +0 -86
  87. package/components/Input/Input.md +0 -86
  88. package/components/Kebab/Kebab.md +0 -306
  89. package/components/Link/Link.md +0 -182
  90. package/components/Loader/Loader.md +0 -33
  91. package/components/MaskedInput/MaskedInput.md +0 -114
  92. package/components/MenuFooter/MenuFooter.md +0 -27
  93. package/components/MenuHeader/MenuHeader.md +0 -35
  94. package/components/MenuItem/MenuItem.md +0 -139
  95. package/components/MenuSeparator/MenuSeparator.md +0 -14
  96. package/components/MiniModal/MiniModal.md +0 -231
  97. package/components/Modal/Modal.md +0 -56
  98. package/components/Paging/Paging.md +0 -57
  99. package/components/PasswordInput/PasswordInput.md +0 -29
  100. package/components/Radio/Radio.md +0 -57
  101. package/components/RadioGroup/RadioGroup.md +0 -44
  102. package/components/ResponsiveLayout/ResponsiveLayout.md +0 -75
  103. package/components/ScrollContainer/ScrollContainer.md +0 -224
  104. package/components/Select/Select.md +0 -113
  105. package/components/SidePage/SidePage.md +0 -65
  106. package/components/SingleToast/SingleToast.md +0 -36
  107. package/components/Spinner/Spinner.md +0 -36
  108. package/components/Sticky/Sticky.md +0 -28
  109. package/components/Switcher/Switcher.md +0 -111
  110. package/components/Tabs/Tab.md +0 -73
  111. package/components/Tabs/Tabs.md +0 -54
  112. package/components/Textarea/Textarea.md +0 -58
  113. package/components/Toast/Toast.md +0 -69
  114. package/components/Toggle/Toggle.md +0 -110
  115. package/components/Token/Token.md +0 -48
  116. package/components/TokenInput/TokenInput.md +0 -277
  117. package/components/Tooltip/Tooltip.md +0 -322
  118. package/components/TooltipMenu/TooltipMenu.md +0 -241
  119. package/internal/DataTids/DATATIDS.md +0 -12
  120. package/internal/DataTids/DataTids/DataTids.js +0 -69
  121. package/internal/DataTids/DataTids/DataTids.js.map +0 -1
  122. package/internal/DataTids/DataTids/package.json +0 -6
  123. package/internal/DataTids/DataTids.d.ts +0 -12
  124. package/internal/DataTids/DataTids.styles/DataTids.styles.js +0 -20
  125. package/internal/DataTids/DataTids.styles/DataTids.styles.js.map +0 -1
  126. package/internal/DataTids/DataTids.styles/package.json +0 -6
  127. package/internal/DataTids/DataTids.styles.d.ts +0 -7
  128. package/internal/DataTids/componentsDataTids/componentsDataTids.js +0 -12
  129. package/internal/DataTids/componentsDataTids/componentsDataTids.js.map +0 -1
  130. package/internal/DataTids/componentsDataTids/package.json +0 -6
  131. package/internal/DataTids/componentsDataTids.d.ts +0 -5
  132. package/internal/ThemePlayground/Playground.md +0 -7
  133. package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -64
  134. package/lib/locale/LOCALECONTEXT.md +0 -222
  135. package/lib/theming/ThemeContext.md +0 -265
@@ -1,222 +0,0 @@
1
- Локализации компонентов через контекст `React.Context<LocaleContextProps>`
2
-
3
- ```typescript static
4
- interface LocaleContextProps {
5
- locale?: LocaleControls;
6
- langCode?: LangCodes;
7
- }
8
- ```
9
-
10
- Доступные языки
11
-
12
- ```typescript static
13
- enum LangCodes {
14
- ru_RU = 'ru_RU',
15
- en_GB = 'en_GB',
16
- }
17
- ```
18
-
19
- LocaleControls
20
-
21
- ```typescript static
22
- interface LocaleControls {
23
- Autocomplete?: AutocompleteLocale;
24
- Spinner?: SpinnerLocale;
25
- TokenInput?: TokenInputLocale;
26
- ComboBox?: ComboBoxLocale;
27
- Select?: SelectLocale;
28
- Paging?: PagingLocale;
29
- DatePicker?: DatePickerLocale;
30
- }
31
- ```
32
-
33
- ### Использование
34
-
35
- Дефолтная локализация `<TokenInput />`
36
-
37
- ```jsx harmony
38
- import { LangCodes, LocaleContext, TokenInput, TokenInputType } from '@skbkontur/react-ui';
39
-
40
- const delay = time => args => new Promise(resolve => setTimeout(resolve, time, args));
41
-
42
- <LocaleContext.Provider value={{ langCode: LangCodes.en_GB }}>
43
- <TokenInput type={TokenInputType.Combined} getItems={() => Promise.resolve([]).then(delay(500))} />
44
- </LocaleContext.Provider>;
45
- ```
46
-
47
- Кастомная локализация `<TokenInput />`
48
-
49
- ```jsx harmony
50
- import { LocaleContext, TokenInput, TokenInputType } from '@skbkontur/react-ui';
51
-
52
- const delay = time => args => new Promise(resolve => setTimeout(resolve, time, args));
53
-
54
- const customLocale = {
55
- TokenInput: {
56
- addButtonComment: 'Press Enter or type Spacebar',
57
- },
58
- };
59
-
60
- <LocaleContext.Provider value={{ locale: customLocale }}>
61
- <TokenInput type={TokenInputType.Combined} delimiters={[' ']} getItems={() => Promise.resolve([]).then(delay(500))} />
62
- </LocaleContext.Provider>;
63
- ```
64
-
65
- Некоторые контролы используют компоненты других контролов.
66
- <br/>
67
- Для инкапсуляции локализации можно использовать несколько контекстов.
68
-
69
- ```jsx harmony
70
- import { Gapped, LangCodes, LocaleContext, Spinner, TokenInput } from '@skbkontur/react-ui';
71
-
72
- const delay = time => args => new Promise(resolve => setTimeout(resolve, time, args));
73
-
74
- const customLocale = {
75
- Spinner: {
76
- loading: 'awaiting...',
77
- },
78
- };
79
-
80
- <LocaleContext.Provider value={{ langCode: LangCodes.en_GB }}>
81
- <Gapped vertical gap={10}>
82
- <LocaleContext.Provider value={{ locale: customLocale }}>
83
- <TokenInput getItems={() => Promise.resolve([]).then(delay(1500))} />
84
- </LocaleContext.Provider>
85
- <TokenInput getItems={() => Promise.resolve([]).then(delay(1500))} />
86
- <Spinner />
87
- </Gapped>
88
- </LocaleContext.Provider>;
89
- ```
90
-
91
- Локализация функционального компонента через useContext.
92
-
93
- ```jsx harmony
94
- import { useContext } from 'react';
95
- import { LangCodes, LocaleContext } from '@skbkontur/react-ui';
96
-
97
- const languages = {
98
- [LangCodes.ru_RU]: 'Русский',
99
- [LangCodes.en_GB]: 'English',
100
- };
101
-
102
- function LocalizedByHook() {
103
- const { langCode } = useContext(LocaleContext);
104
- return <div>{languages[langCode]}</div>;
105
- }
106
-
107
- <LocaleContext.Provider value={{ langCode: LangCodes.en_GB }}>
108
- <LocalizedByHook />
109
- </LocaleContext.Provider>;
110
- ```
111
-
112
- ### Обзор всех доступных контролов
113
-
114
- ```jsx harmony
115
- import {
116
- ComboBox,
117
- DateInput,
118
- DatePicker,
119
- Gapped,
120
- LocaleContext,
121
- Paging,
122
- Select,
123
- Spinner,
124
- TokenInput,
125
- LangCodes,
126
- } from '@skbkontur/react-ui';
127
- import { TokenInputType } from '@skbkontur/react-ui/components/TokenInput';
128
-
129
- const delay = time => args => new Promise(resolve => setTimeout(resolve, time, args));
130
-
131
- const items = [
132
- { label: 'aaa', value: 1 },
133
- { label: 'bbb', value: 2 },
134
- { label: 'ccc', value: 3 },
135
- ];
136
-
137
- const LocalizationControlNames = {
138
- ComboBox: 'ComboBox',
139
- Spinner: 'Spinner',
140
- TokenInput: 'TokenInput',
141
- Select: 'Select',
142
- Paging: 'Paging',
143
- DatePicker: 'DatePicker',
144
- DateInput: 'DateInput',
145
- };
146
-
147
- class LocalizationControls extends React.Component {
148
- constructor(props) {
149
- super(props);
150
- this.state = {
151
- langCode: LangCodes.ru_RU,
152
- controlName: null,
153
- };
154
- }
155
-
156
- render() {
157
- // попробуйте кастомизировать локаль любого контрола
158
- const customLocaleRU = {};
159
- const customLocaleEN = {};
160
-
161
- const locale = this.state.langCode === LangCodes.en_GB ? customLocaleEN : customLocaleRU;
162
-
163
- return (
164
- <Gapped vertical gap={10}>
165
- <Select
166
- value={this.state.langCode}
167
- placeholder="Выбрать язык"
168
- items={Object.values(LangCodes)}
169
- onValueChange={langCode => this.setState({ langCode })}
170
- />
171
- <Select
172
- value={this.state.controlName}
173
- placeholder="Выбрать контрол"
174
- items={Object.values(LocalizationControlNames)}
175
- onValueChange={controlName => this.setState({ controlName })}
176
- />
177
- <LocaleContext.Provider value={{ langCode: this.state.langCode, locale: locale }}>
178
- {this.getControl(this.state.controlName)}
179
- </LocaleContext.Provider>
180
- </Gapped>
181
- );
182
- }
183
-
184
- getControl(controlName) {
185
- switch (controlName) {
186
- case LocalizationControlNames.ComboBox:
187
- return (
188
- <ComboBox
189
- getItems={str => Promise.resolve(items.filter(({ label }) => label.includes(str))).then(delay(500))}
190
- onValueChange={({ label: langCode }) => this.setState({ langCode })}
191
- />
192
- );
193
-
194
- case LocalizationControlNames.TokenInput:
195
- return <TokenInput type={TokenInputType.Combined} getItems={() => Promise.resolve([]).then(delay(500))} />;
196
-
197
- case LocalizationControlNames.Spinner:
198
- return <Spinner />;
199
-
200
- case LocalizationControlNames.DatePicker:
201
- return <DatePicker value="30.12.2012" />;
202
-
203
- case LocalizationControlNames.DateInput:
204
- return <DateInput value="30.12.2012" />;
205
-
206
- case LocalizationControlNames.Select:
207
- return <Select />;
208
-
209
- case LocalizationControlNames.Paging:
210
- return <Paging activePage={1} pagesCount={12} onPageChange={value => value} />;
211
- }
212
- return null;
213
- }
214
- }
215
-
216
- <LocalizationControls />;
217
- ```
218
-
219
- ### Локализация @skbkontur/react-ui-addons
220
-
221
- Компоненты `@skbkontur/react-ui-addons` так же поддерживают локализацию через `LocaleContext` из `@skbkontur/react-ui`.
222
- См. пример с кастомной локализацией. Дефолтные локали описаны для каждого компонента в [докумендации аддонов](https://ui.gitlab-pages.kontur.host/docs/#/react-ui-addons).
@@ -1,265 +0,0 @@
1
- Для кастомизации компонентов используется ThemeContext, реализуемый через `React.Context<Theme>`
2
-
3
- Механизм работы: динамические стили генерируются в зависимости от темы в процессе render'а с помощью <a href="https://www.npmjs.com/package/emotion" target="_blank">emotion</a>, полученные классы добавляются в `className` соответствующих элементов.
4
-
5
- Тема задается с помощью `ThemeContext.Provider`:
6
-
7
- ```jsx static
8
- import { ThemeContext } from '@skbkontur/react-ui';
9
-
10
- <ThemeContext.Provider value={theme}>{/* ... */}</ThemeContext.Provider>;
11
- ```
12
-
13
- Использовать тему в компоненте можно через `ThemeContext.Consumer`:
14
-
15
- ```jsx static
16
- import { ThemeContext, Button } from '@skbkontur/react-ui';
17
-
18
- <ThemeContext.Consumer>
19
- {theme => /* ... */ }
20
- </ThemeContext.Consumer>
21
- ```
22
-
23
- `useContext` в функциональных компонентах:
24
-
25
- ```typescript static
26
- const theme = useContext(ThemeContext);
27
- ```
28
-
29
- или задать `contextType` для класса:
30
-
31
- ```typescript static
32
- public static contextType = ThemeContext;
33
- public context: Theme = this.context;
34
- ```
35
-
36
- Список существующих тем:
37
-
38
- | Имя | Описание |
39
- |-------------------------|---------------------------------------------------|
40
- | `LIGHT_THEME` | Текущая светлая тема, включена по умолчанию. Всегда включает в себя актуальные визуальные обновления. |
41
- | `DARK_THEME` | Текущая тёмная тема. Всегда включает в себя актуальные визуальные обновления. |
42
- | `LIGHT_THEME_2022_0` | Вариант светлой темы без актуальных визуальных обновлений. |
43
- | `DARK_THEME_2022_0` | Вариант тёмной темы без актуальных визуальных обновлений. |
44
-
45
- Если не нужны постоянные визуальные изменения, то можно использовать вариант `_2022_N`. В будущем, новые варианты с постфиксом `_2022_N` будут появлятся при обновлении дизайн системы.
46
-
47
- ## Примеры использования
48
-
49
- ### Создание собственной темы
50
-
51
- Собственные значения нужно передать в `ThemeFactory.create` и получившуюся тему можно использовать в `ThemeContext.Provider`. `ThemeFactory` расширяет переданный объект, задавая в качестве прототипа объект темы по умолчанию.
52
-
53
- ```jsx harmony
54
- import { ThemeContext, ThemeFactory } from '@skbkontur/react-ui';
55
- import { ShowcaseGroup } from '@skbkontur/react-ui/internal/ThemePlayground/ShowcaseGroup';
56
-
57
- const myTheme = ThemeFactory.create({ btnBorderRadiusSmall: '10px' });
58
-
59
- <ThemeContext.Provider value={myTheme}>
60
- <div style={{height: '100%', background: '#fff', padding: '16px'}}>
61
- <ShowcaseGroup title="My Theme" />
62
- </div>
63
- </ThemeContext.Provider>;
64
- ```
65
-
66
- Вторым аргументом `ThemeFactory.create` может принимать объект, который будет использован в качестве базовой темы.
67
-
68
- ```jsx static
69
- import { ThemeFactory, LIGHT_THEME } from '@skbkontur/react-ui';
70
-
71
- const myFlatTheme = ThemeFactory.create({ btnBorderRadiusSmall: '10px' }, LIGHT_THEME);
72
- ```
73
-
74
- ### Использование темы в своих компонентах
75
-
76
- ```jsx harmony
77
- import { useContext } from 'react';
78
- import { ThemeContext, Button } from '@skbkontur/react-ui';
79
-
80
- function ButtonLinkWrapper(props) {
81
- const theme = useContext(ThemeContext);
82
-
83
- return (
84
- <Button use="link" {...props}>
85
- {props.children}
86
- <span style={{ color: theme.textColorDefault }}> ↗</span>
87
- </Button>
88
- );
89
- }
90
-
91
- <ButtonLinkWrapper>ButtonLinkWrapper</ButtonLinkWrapper>;
92
- ```
93
-
94
- ### Добавление своих переменных
95
-
96
- Если вы хотите дополнить одну из тем новыми переменными для своих компонентов, то вы можете использовать отдельный контекст в расширенным объектом темы.
97
-
98
- ```jsx harmony
99
- import { useContext } from 'react';
100
- import { ThemeFactory, Button } from '@skbkontur/react-ui';
101
-
102
- const MyThemeContext = React.createContext(ThemeFactory.create({ myTextColor: 'orange' }));
103
-
104
- MyThemeContext.displayName = 'MyThemeContext';
105
-
106
- function ButtonLinkWrapper(props) {
107
- const theme = useContext(MyThemeContext);
108
-
109
- return (
110
- <Button use="link" {...props}>
111
- {props.children}
112
- <span style={{ color: theme.myTextColor }}> ↗</span>
113
- </Button>
114
- );
115
- }
116
-
117
- <ButtonLinkWrapper>ButtonLinkWrapper</ButtonLinkWrapper>;
118
- ```
119
-
120
- ### Кастомизация в legacy-приложениях
121
-
122
- В случае, если контролы рендерятся через какую-то общую обертку, достаточно добавить в нее `ThemeContext.Provider` с вашей темой. В противном случае, вам подойдет метод `ThemeFactory.overrideDefaultTheme()`.
123
-
124
- ```typescript static
125
- import theme from './theme/theme';
126
- import { ThemeFactory } from '@skbkontur/react-ui/lib/theming/ThemeFactory';
127
-
128
- ThemeFactory.overrideDefaultTheme(theme);
129
- ```
130
-
131
- ### Варианты кастомизации:
132
-
133
- Несколько тем одновременно:
134
- <br/>
135
-
136
- ```jsx harmony
137
- import { ThemeContext, LIGHT_THEME, DARK_THEME } from '@skbkontur/react-ui';
138
- import { ShowcaseGroup } from '@skbkontur/react-ui/internal/ThemePlayground/ShowcaseGroup';
139
-
140
- const CombinedComponents = () => (
141
- <>
142
- <div style={{height: '100%', background: '#fff', padding: '16px'}}>
143
- <ThemeContext.Provider value={LIGHT_THEME}>
144
- <div>
145
- <ShowcaseGroup title="LIGHT_THEME" />
146
- </div>
147
- </ThemeContext.Provider>
148
- </div>
149
- <div style={{height: '100%', background: '#000', padding: '16px'}}>
150
- <ThemeContext.Provider value={DARK_THEME}>
151
- <div>
152
- <ShowcaseGroup title="DARK_THEME" />
153
- </div>
154
- </ThemeContext.Provider>
155
- </div>
156
- </ >
157
- );
158
-
159
- <CombinedComponents />;
160
- ```
161
-
162
- Вложенные темы:
163
- <br/>
164
-
165
- ```jsx harmony
166
- import { ThemeContext, LIGHT_THEME, DARK_THEME } from '@skbkontur/react-ui';
167
- import { ShowcaseGroup } from '@skbkontur/react-ui/internal/ThemePlayground/ShowcaseGroup';
168
-
169
- const wrapperStyles = {
170
- border: '1px solid rgb(188, 187, 187)',
171
- padding: '0 15px 15px',
172
- marginTop: 25,
173
- };
174
-
175
- const NestedThemes = () => (
176
- <ThemeContext.Provider value={ LIGHT_THEME }>
177
- <div style={{ ...wrapperStyles, width: 750, background: '#fff' }}>
178
- <ShowcaseGroup title="LIGHT_THEME" />
179
- <ThemeContext.Provider value={ DARK_THEME }>
180
- <div style={{ ...wrapperStyles, background: '#000', color: '#fff' }}>
181
- <ShowcaseGroup title="DARK_THEME" />
182
- </div>
183
- </ThemeContext.Provider>
184
- </div>
185
- </ThemeContext.Provider>
186
- );
187
-
188
- <NestedThemes />;
189
- ```
190
-
191
- ## Кастомизация @skbkontur/react-ui-addons
192
-
193
- Компоненты `@skbkontur/react-ui-addons` так же поддерживают кастомизацию через `ThemeContext` из `@skbkontur/react-ui`. Достаточно переопределить нужные переменные, которые перечислены на страницах компонентов в [докумендации аддонов](https://ui.gitlab-pages.kontur.host/docs/#/react-ui-addons).
194
-
195
- ```tsx static
196
- import { ThemeContext, ThemeFactory } from '@skbkontur/react-ui';
197
- import { Logotype, AddonsThemeIn } from '@skbkontur/react-ui-addons';
198
-
199
- const myTheme = ThemeFactory.create<AddonsThemeIn>({
200
- logoColor: 'black',
201
- });
202
-
203
- <ThemeContext.Provider value={myTheme}>
204
- <Logotype />
205
- </ThemeContext.Provider>;
206
- ```
207
-
208
- ## Дополнительно
209
-
210
- ### ColorFunctions.ts / DimensionFunctions.ts
211
-
212
- Несколько функций по работе с цветом вынесены из less в js, их можно использовать в своих темах (_ColorFunctions.ts_):
213
-
214
- ```typescript static
215
- import { ColorFunctions } from '@skbkontur/react-ui'
216
-
217
- ColorFunctions.lighten(colorString: string, amount: number | string, method?: 'absolute' | 'relative'): string
218
- ColorFunctions.darken(colorString: string, amount: number | string, method?: 'absolute' | 'relative'): string
219
- ColorFunctions.contrast(colorString: string, darkString?: string, lightString?: string, threshold: number = 0.43): string
220
- ColorFunctions.red(colorString: string): string
221
- ColorFunctions.green(colorString: string): string
222
- ColorFunctions.blue(colorString: string): string
223
- ColorFunctions.alpha(colorString: string): string
224
- ColorFunctions.isValid(colorString: string): boolean // проверяет, можно ли распарсить строку в цвет
225
- ```
226
-
227
- Документацию по их работе можно найти на сайте [less](http://lesscss.org/functions/#color-operations).
228
- В качестве colorString можно передать цвет в одном из форматов: `keyword`, `hex`, `rgb(r, g, b)`, `rgba(r, g, b, a)`, `hsl(h, s, l)`, `hsla(h, s, l, a)`.
229
- В качестве `amount` можно передать строку вида 'N%' или число от 0 до 1.
230
- Все значения больше или меньше возможных обрезаются. Например, для `rgba(300, -100, 123, 20)` `r=255, g=0, b=123, a=1`.
231
- Если распарсить `colorString` не получилось - выбрасывается исключение.
232
- Если это возможно, результат возвращается в том же виде, что и входная строка:
233
-
234
- ```typescript static
235
- import { ColorFunctions } from '@skbkontur/react-ui'
236
-
237
- ColorFunctions.lighten('hsl(90, 0.8, 0.2)', '20%') === 'hsl(90, 0.8, 0.4)';
238
- ColorFunctions.lighten('rgba(50, 50, 50, 0.2)', '20%') === 'rgba(102, 102, 102, 0.2)';
239
- ColorFunctions.lighten('#80e619', 0.2) === '#b3f075';
240
- ColorFunctions.lighten('crimson', '20%') === '#f16581';
241
- ```
242
-
243
- Для работы с размерами предусмотрена одна функция (_DimensionFunctions.ts_):
244
-
245
- ```typescript static
246
- shift(value: string, shift: string): string
247
-
248
- // пример
249
- import { DimensionFunctions } from '@skbkontur/react-ui'
250
-
251
- DimensionFunctions.shift('100%', '-20') === '80%'
252
- DimensionFunctions.shift('2em', '+2') === '4em'
253
- DimensionFunctions.shift('12', '+1') === '13px' //если единица измерения не указана - используется px
254
- DimensionFunctions.shift('10.2', '12.333451') === '22.5335px' //дробная часть округляется до 4 знаков
255
- ```
256
-
257
- ### Список кастомизируемых компонентов
258
-
259
- Посмотреть, какие компоненты можно кастомизировать, а также увидеть, какие переменные используются в каждом из них, можно в [таблице](#/Customization/ThemeShowcase)
260
- Информация собирается в рантайме с помощью `Proxy`, поэтому в IE таблица не отображается.
261
-
262
- ### Playground
263
-
264
- Внутренний компонент `Playground` (_components/internal/ThemePlayground/Playground.tsx_) можно использовать для построения своей темы.
265
- Для удобства в редакторе добавлено действие "вывести тему в консоль".