主题
@cloud-ru/ds-theme —— ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————.
@cloud-ru/ds-theme {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}======================================================================================================================================================================================================================================= sn-* эмитится DOMграницу. RootThemeProvider {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢colorScheme, (中文(简体) ), brand, (中文(简体) ), platform, (中文(简体) ), density, (中文(简体) ), acrylic), эмитя sn-* на rootRef 页:1 <html>) (中文(简体) ). {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 ChildThemeProvider、 а 、 ось 、 себя useThemeClassnames。 。 。 .
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 @cloud-ru/ds-theme {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 种子 种子 种子 种子 (白色标签): --sn-brand-color-primary-*, \ \ \ \ \ \ \ \.
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ————————————————————。 。 。 .
Когда
- {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
RootThemeProvider value={{ colorScheme, brand, density }}页:1storeдля多根/MFEчерезgetGlobalThemeStore().store) (中文(简体) ). - 轻/暗
useColorScheme(单位:千美元)prefers-color-scheme# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #value.colorScheme。 。 。 . - /плотность/схему-
ChildThemeProvider{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢. - Компонент фиксирует ось (
density: 'comfort'(b) ——useThemeClassnames({ density }){\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你喜欢什么. - {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}(白色标签) {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}(白色标签)
RootThemeProvider brandColor='#RRGGBB'(декларативно)либоuseApplyCustomTheme({ color })(императивно.
Полный
sn-*(原始内容存档于2018-10-29). QQ: классы CSS-каскад. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢sn-comfort{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? СтарыйThemeProvider编号 :useThemeConfig(произвольныеthemeMap——遗产————————————————————————————————————————RootThemeProvider。 。 。 .
Установка
pnpm add @cloud-ru/ds-theme
import {
RootThemeProvider,
ChildThemeProvider,
useThemeClassnames,
useColorScheme,
useApplyCustomTheme,
getGlobalThemeStore,
} from '@cloud-ru/ds-theme'
Примеры
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
ChildThemeProvider сливает brand {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 sn-* на.
import { Block } from '@cloud-ru/ds-block';
import { Button } from '@cloud-ru/ds-button';
import { Counter } from '@cloud-ru/ds-counter';
import { SegmentControl } from '@cloud-ru/ds-segment-control';
import { Tag } from '@cloud-ru/ds-tag';
import { BRAND, Brand, ChildThemeProvider } from '@cloud-ru/ds-theme';
import { Flex } from '@cloud-ru/ds-uikit-product-flex';
import { useState } from 'react';
const BRAND_ITEMS = [BRAND.CloudConsole, BRAND.SnackUI, BRAND.Gitverse, BRAND.HrGreen, BRAND.SiteBlue].map(value => ({
value,
label: value,
}));
export function BrandSwitch() {
const [brand, setBrand] = useState<Brand>(BRAND.CloudConsole);
return (
<Flex direction='column' gap='2m' align='flex-start'>
<SegmentControl items={BRAND_ITEMS} value={brand} onChange={value => setBrand(value as Brand)} />
{/* ChildThemeProvider сливает ось `brand` с ближайшим контекстом и реэмитит полный набор
sn-* на своей границе — акцентные цвета компонентов ниже меняются вслед за брендом. */}
<ChildThemeProvider value={{ brand }}>
<Block>
<Flex gap='2m' align='center' wrap>
<Button appearance='primary' label='Действие' />
<Tag appearance='primary' label='Бренд' />
<Counter value={8} appearance='primary' />
</Flex>
</Block>
</ChildThemeProvider>
</Flex>
);
}
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢sn-light 编号 : sn-dark) (中文(简体) ). В useColorScheme。 。 。 .
import { Block } from '@cloud-ru/ds-block';
import { Button } from '@cloud-ru/ds-button';
import { SegmentControl } from '@cloud-ru/ds-segment-control';
import { Tag } from '@cloud-ru/ds-tag';
import { ChildThemeProvider, COLOR_SCHEME, ColorScheme } from '@cloud-ru/ds-theme';
import { Flex } from '@cloud-ru/ds-uikit-product-flex';
import { useState } from 'react';
const SCHEME_ITEMS = [
{ value: COLOR_SCHEME.Light, label: 'Светлая' },
{ value: COLOR_SCHEME.Dark, label: 'Тёмная' },
];
export function ColorSchemeToggle() {
const [colorScheme, setColorScheme] = useState<ColorScheme>(COLOR_SCHEME.Light);
return (
<Flex direction='column' gap='2m' align='flex-start'>
<SegmentControl
items={SCHEME_ITEMS}
value={colorScheme}
onChange={value => setColorScheme(value as ColorScheme)}
/>
{/* В приложении colorScheme — источник истины `useColorScheme` (cookie + prefers-color-scheme),
а корень держит RootThemeProvider. Здесь ChildThemeProvider переключает схему для поддерева:
материал-подложка Block и компоненты на ней перекрашиваются вслед за схемой. */}
<ChildThemeProvider value={{ colorScheme }}>
<Block>
<Flex gap='2m' align='center' wrap>
<Button appearance='primary' label='Действие' />
<Button appearance='neutral' view='outline' label='Отмена' />
<Tag appearance='blue' label='Метка' />
</Flex>
</Block>
</ChildThemeProvider>
</Flex>
);
}
Локальная
Компонент density через useThemeClassnames({ density }) -=YTET -伊甸园字幕组=- 翻译:.
import { Button } from '@cloud-ru/ds-button';
import { SegmentControl } from '@cloud-ru/ds-segment-control';
import { Tag } from '@cloud-ru/ds-tag';
import { DENSITY, Density, useThemeClassnames } from '@cloud-ru/ds-theme';
import { Flex } from '@cloud-ru/ds-uikit-product-flex';
import { useState } from 'react';
const DENSITY_ITEMS = Object.values(DENSITY).map(value => ({ value, label: value }));
function DensitySurface({ density }: { density: Density }) {
// useThemeClassnames({ density }) подмешивает текущие colorScheme/brand из контекста и навешивает
// ПОЛНЫЙ набор sn-* (а не одиночный sn-comfort) — внутренние отступы компонентов меняются вслед
// за плотностью, а тёмная тема при этом не ломается.
const className = useThemeClassnames({ density });
return (
<div className={className}>
<Flex gap='2m' align='center' wrap>
<Button appearance='primary' label='Кнопка' />
<Button appearance='neutral' view='outline' label='Ещё' />
<Tag appearance='primary' label='Тег' />
</Flex>
</div>
);
}
export function LocalDensity() {
const [density, setDensity] = useState<Density>(DENSITY.Compact);
return (
<Flex direction='column' gap='2m' align='flex-start'>
<SegmentControl items={DENSITY_ITEMS} value={density} onChange={value => setDensity(value as Density)} />
<DensitySurface density={density} />
</Flex>
);
}
道具
根主题
根主题
| Prop | 类型 | 默认 | 说明 |
|---|---|---|---|
brandColor | string | —— 说 | -=YTET -伊甸园字幕组=- 翻译: #rrggbb{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 种子 - ======================================================================================================================================================================================================== - ================== - ============================== <style> на:"классы也. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 {\fn黑体\fs20\shad2\2ah82\3ah20\4ah33\fscx95\3ch592001\be1}你觉得怎样 sn-* вложенными(表и, {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? Глобальная {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 useApplyCustomTheme。 。 。 . |
children | string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined | —— 说 | |
className | string | —— 说 | 包装..<div> (паддинги/фон. # # # # # # # # 包装 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # rootRef) (中文(简体) ). |
nonce | string | —— 说 | 社区支助方案nonce для <style> {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢. |
rootRef | RefObject<HTMLElement | null> | —— 说 | {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 sn-* 页:1 <html>编号 :<body>) (中文(简体) ). . . . . 儿童节 <div> с набором. |
store | ThemeAppearanceStore | —— 说 | {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢getGlobalThemeStore().store) (中文(简体) ). . . . value; ; ; ; ; ; ; ; ; Так {\fn华文仿宋\fs16\1cHD1D1D1}好! 贝壳.. getGlobalThemeStore().setAppearance。 。 。 . |
value | ThemeAppearance | —— 说 | Оформление. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}=================================================================================================================================================================== (=================================================================== {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢. colorScheme из useColorScheme) (中文(简体) ). Для多根 (单-spa)——-. store。 。 。 . |
相关类型
-
Brand=:"agents-space"|"cloudConsole"|"giga-id"|"gitverse"|"hrBlue"|"hrGraphite"|"hrGreen"|"hrPurple"|"hrYellow"|"siteBlue"|"siteGraphite"|"siteGreen"|"sitePurple"|"siteYellow"|"snackUI" -
ColorScheme=:"dark"|"light" -
Density=:"comfort"|"compact"|"spacious" -
Platform=:"webDesktop"|"webMobile"
主题附录
| Prop | 类型 | 默认 | 说明 |
|---|---|---|---|
acrylic | boolean | undefined | —— 说 | ——(blur-материал sn-yes при true时 sn-no。 。 。 . |
brand | "agents-space" | "cloudConsole" | "giga-id" | "gitverse" | "hrBlue" | "hrGraphite" | "hrGreen" | "hrPurple" | "hrYellow" | "siteBlue" | "siteGraphite" | "siteGreen" | "sitePurple" | "siteYellow" | "snackUI" | —— 说 | Бренд- sn-cloudConsole 编号 : sn-hrBlue . |
colorScheme | "dark" | "light" | —— 说 | – Цветовая – sn-light 编号 : sn-dark。 。 。 . |
density | "comfort" | "compact" | "spacious" | —— 说 | Плотность- sn-comfort 编号 : sn-compact 编号 : sn-spacious。 。 。 . |
platform | "webDesktop" | "webMobile" | —— 说 | Платформа- sn-webDesktop 编号 : sn-webMobile。 。 。 webDesktop。 。 。 @cloud-ru/ds-adaptive {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 AdaptiveProvider{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢. |
主题助理
| Prop | 类型 | 默认 | 说明 |
|---|---|---|---|
getServerSnapshot | (() => ThemeAppearanceContextValue) | undefined | —— 说 | (原始内容存档于2018-09-29) (英语). SSR/. . . . . getSnapshot。 。 。 . |
getSnapshot | () => ThemeAppearanceContextValue | —— 说 | Текущее. {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}你觉得怎样 Object.isссылку,пока也. |
subscribe | (onStoreChange: () => void) => () => void | —— 说 | {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢. |
儿童主题
儿童主题 提供工具
| Prop | 类型 | 默认 | 说明 |
|---|---|---|---|
children | string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined | —— 说 | |
className | string | —— 说 | 包装..<div> (паддинги/фон. # # # # # # # # 包装 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # rootRef) (中文(简体) ). |
rootRef | RefObject<HTMLElement | null> | —— 说 | {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 sn-*. не 儿童节 <div> с набором. |
value | ThemeAppearance | —— 说 | {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得怎样. |
相关类型
-
Brand=:"agents-space"|"cloudConsole"|"giga-id"|"gitverse"|"hrBlue"|"hrGraphite"|"hrGreen"|"hrPurple"|"hrYellow"|"siteBlue"|"siteGraphite"|"siteGreen"|"sitePurple"|"siteYellow"|"snackUI" -
ColorScheme=:"dark"|"light" -
Density=:"comfort"|"compact"|"spacious" -
Platform=:"webDesktop"|"webMobile"
主题附录
| Prop | 类型 | 默认 | 说明 |
|---|---|---|---|
acrylic | boolean | undefined | —— 说 | ——(blur-материал sn-yes при true时 sn-no。 。 。 . |
brand | "agents-space" | "cloudConsole" | "giga-id" | "gitverse" | "hrBlue" | "hrGraphite" | "hrGreen" | "hrPurple" | "hrYellow" | "siteBlue" | "siteGraphite" | "siteGreen" | "sitePurple" | "siteYellow" | "snackUI" | —— 说 | Бренд- sn-cloudConsole 编号 : sn-hrBlue . |
colorScheme | "dark" | "light" | —— 说 | – Цветовая – sn-light 编号 : sn-dark。 。 。 . |
density | "comfort" | "compact" | "spacious" | —— 说 | Плотность- sn-comfort 编号 : sn-compact 编号 : sn-spacious。 。 。 . |
platform | "webDesktop" | "webMobile" | —— 说 | Платформа- sn-webDesktop 编号 : sn-webMobile。 。 。 webDesktop。 。 。 @cloud-ru/ds-adaptive {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 AdaptiveProvider{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢. |
Смотри
- ———————————————————— - полная подключения темы темы темы.
- 适应性 . . . . .
layoutType{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢. - 语言 ——рантайм.
- 门户连接 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢.
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
Помимо(предустановленных)agents-space, (中文(简体) ), cloudConsole, (中文(简体) ), giga-id, (中文(简体) ), gitverse, (中文(简体) ), snackUI时 hr* и site*(中文(简体) ) @cloud-ru/ds-theme -=YTET -伊甸园字幕组=- 翻译: 种子 种子 种子 --sn-brand-color-primary-* (OKLCH: ? ? ? ? ? ? ? ? ? ? --sn-theme-color-primary-* каскадит. {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}♪############################### #####################################################################################################################################################################################################.
Палитра CSS - правилом - классы (单位:千美元).sn-cloudConsole, (中文(简体) ), .sn-hrBlue {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}你觉得怎样? {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}你觉得怎么样 Это:компоненты也 sn-* {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}♪ {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}♪ {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}♪ {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}♪ useThemeClassnames),"бренд"("бренд"),"бренд"("бренд"),"бренд"("бренд")等. 说吧
-
Декларативно . . . . .
brandColorуRootThemeProvider。 。 。<RootThemeProvider value={{ colorScheme }} brandColor={brand.primaryColor}> {app} </RootThemeProvider> -
Императивно . . . . .
useApplyCustomTheme。 。 。scopeдобавляет глобальное - правилоscopeограничивает. # # # # # # # # # # # # # # # # # ## ## ###########################################################################################################################################################################################################################################useApplyCustomTheme({ color: brand.primaryColor, enabled: Boolean(brand), nonce }){\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}你觉得呢 глобальный
useApplyCustomTheme# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #scope), ^ 范围 -brandColor。 。 。 .
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 colorScheme{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 校对:Soup generateBrandPalette(color) 编号 : buildBrandPaletteVars(color) из @cloud-ru/ds-theme/ssr (===================================================================================================== (=============================================================.
Бренд-цвет-种子
brandColor генерирует --sn-brand-color-primary-* {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得怎么样.
import { Block } from '@cloud-ru/ds-block';
import { Button } from '@cloud-ru/ds-button';
import { Counter } from '@cloud-ru/ds-counter';
import { SegmentControl } from '@cloud-ru/ds-segment-control';
import { Tag } from '@cloud-ru/ds-tag';
import { RootThemeProvider } from '@cloud-ru/ds-theme';
import { Flex } from '@cloud-ru/ds-uikit-product-flex';
import { useState } from 'react';
const COLOR_ITEMS = [
{ value: '#ff7a00', label: 'Оранжевый' },
{ value: '#8a2be2', label: 'Фиолетовый' },
{ value: '#0077ff', label: 'Синий' },
{ value: '#e5006e', label: 'Розовый' },
];
export function CustomBrandColor() {
const [color, setColor] = useState('#ff7a00');
return (
<Flex direction='column' gap='2m' align='flex-start'>
<SegmentControl items={COLOR_ITEMS} value={color} onChange={value => setColor(String(value))} />
{/* brandColor генерирует палитру `--sn-brand-color-primary-*` из одного seed-цвета — акцент
компонентов ниже перекрашивается вслед за выбором. */}
<RootThemeProvider value={{ colorScheme: 'light', brand: 'cloudConsole' }} brandColor={color}>
<Block>
<Flex gap='2m' align='center' wrap>
<Button appearance='primary' label='Действие' />
<Tag appearance='primary' label='Бренд' />
<Counter value={8} appearance='primary' />
</Flex>
</Block>
</RootThemeProvider>
</Flex>
);
}
范围
useApplyCustomTheme({ color, scope }) инжектит,скоупленное也 #brand-hook-scope . . . . . . Без scope {\fn黑体\fs20\shad2\2ah82\3ah20\4ah33\fscx95\3ch592001\be1}你觉得呢.
import { Block } from '@cloud-ru/ds-block';
import { Button } from '@cloud-ru/ds-button';
import { Counter } from '@cloud-ru/ds-counter';
import { SegmentControl } from '@cloud-ru/ds-segment-control';
import { Tag } from '@cloud-ru/ds-tag';
import { RootThemeProvider, useApplyCustomTheme } from '@cloud-ru/ds-theme';
import { Flex } from '@cloud-ru/ds-uikit-product-flex';
import { useState } from 'react';
const COLOR_ITEMS = [
{ value: '#8a2be2', label: 'Фиолетовый' },
{ value: '#ff7a00', label: 'Оранжевый' },
{ value: '#0077ff', label: 'Синий' },
];
// `scope` — CSS-селектор корня поддерева. Здесь правило скоуплено на `#brand-hook-scope`, поэтому
// бренд-акцент перекрашивается только внутри этого блока (и во всех компонентах ниже по дереву — Button,
// Tag, Counter). Без `scope` правило было бы глобальным и перекрасило бы всю страницу, включая порталы.
const SCOPE_ID = 'brand-hook-scope';
export function CustomBrandColorHook() {
const [color, setColor] = useState('#8a2be2');
useApplyCustomTheme({ color, scope: `#${SCOPE_ID}` });
return (
<Flex direction='column' gap='2m' align='flex-start'>
<SegmentControl items={COLOR_ITEMS} value={color} onChange={value => setColor(String(value))} />
<div id={SCOPE_ID}>
<RootThemeProvider value={{ colorScheme: 'light', brand: 'cloudConsole' }}>
<Block>
<Flex gap='2m' align='center' wrap>
<Button appearance='primary' label='Внутри scope' />
<Tag appearance='primary' label='Бренд' />
<Counter value={8} appearance='primary' />
</Flex>
</Block>
</RootThemeProvider>
</div>
</Flex>
);
}