PromoTagPredefined
Один компонент с преднастроенными пресетами промо-тега: PromoTag + Tooltip. Текст локализуется через @cloud-ru/ds-locale; для части вариантов tooltip задаётся потребителем.
Демо
Preview
Prop
Type
Value
contextservice | functional
data-test-idtext
variantpreview | connecting | partner | freeTier | soon | default | latest | private | public
tooltipTiptext
Code
<PromoTagPredefined variant="preview" context="service" tooltipTip="Demo content, for replacement, use the property: ◆Slot...\nConnect your local component with unique content to this property" />Когда использовать
- Нужен стандартный product-тег (Preview, Connecting, Partner, Free tier и др.) без ручной сборки текста и внешнего вида.
- В карточках сервисов, виджетах и списках продуктов Cloud.ru.
Когда не нужен PromoTagPredefined:
- Произвольный текст и цвет — используйте
PromoTagнапрямую.
Анатомия
variant (обязательный)
preview— синий тег «Preview»; tooltip зависит отcontext.connecting— neutral «Подключается»; обязательныйtooltip.onSupportClick, фраза «обратитесь в поддержку» всегда ссылка.partner— orange «Partner».freeTier— синий «Free tier».soon— violet «Скоро»; опциональный кастомныйtooltip.tip.default— primary «По умолчанию»; без tooltip.latest— primary «Latest»; опциональный кастомныйtooltip.tip.private— green «Приватный»; опциональный кастомныйtooltip.tip.public— синий «Публичный»; опциональный кастомныйtooltip.tip.
context (default service, только для variant='preview')
service— tooltip про сервис в Preview.functional— tooltip про функциональность в Preview.
tooltip
- Для
partner/preview/freeTier— опциональныеplacement,trigger,open,onOpenChange; текст tooltip встроенный. - Для
connecting—tooltipобязателен; обязательныйonSupportClick(фраза поддержки всегдаLink). - Для
soon/latest/private/public—tooltipопционален; если передан —tipобязателен. Безtooltipтултип не рендерится. - Для
default— проп недоступен (tooltip не рендерится).
Установка
pnpm add @cloud-ru/ds-uikit-product-promo-tag-predefined
import { PromoTagPredefined } from '@cloud-ru/ds-uikit-product-promo-tag-predefined'
Примеры использования
Preview (service)
Preview
tsx
import { PREVIEW_CONTEXT, PromoTagPredefined, VARIANTS } from '@cloud-ru/ds-uikit-product-promo-tag-predefined';
export function PreviewService() {
return <PromoTagPredefined variant={VARIANTS.Preview} context={PREVIEW_CONTEXT.Service} />;
}Preview (functional)
Preview
tsx
import { PREVIEW_CONTEXT, PromoTagPredefined, VARIANTS } from '@cloud-ru/ds-uikit-product-promo-tag-predefined';
export function PreviewFunctional() {
return <PromoTagPredefined variant={VARIANTS.Preview} context={PREVIEW_CONTEXT.Functional} />;
}Connecting
Connecting
tsx
import { PromoTagPredefined, VARIANTS } from '@cloud-ru/ds-uikit-product-promo-tag-predefined';
import { MouseEvent } from 'react';
function handleSupportClick(e: MouseEvent) {
e.preventDefault();
}
export function Connecting() {
return <PromoTagPredefined variant={VARIANTS.Connecting} tooltip={{ onSupportClick: handleSupportClick }} />;
}Partner
Partner
tsx
import { PromoTagPredefined, VARIANTS } from '@cloud-ru/ds-uikit-product-promo-tag-predefined';
export function Partner() {
return <PromoTagPredefined variant={VARIANTS.Partner} />;
}Free tier
Free tier
tsx
import { PromoTagPredefined, VARIANTS } from '@cloud-ru/ds-uikit-product-promo-tag-predefined';
export function FreeTier() {
return <PromoTagPredefined variant={VARIANTS.FreeTier} />;
}Default (без tooltip)
Default
tsx
import { PromoTagPredefined, VARIANTS } from '@cloud-ru/ds-uikit-product-promo-tag-predefined';
export function Default() {
return <PromoTagPredefined variant={VARIANTS.Default} />;
}Кастомный tip
Без тултипа
С тултипом
Soon
Soon
Latest
Latest
Private
Private
Public
Public
tsx
import { Link } from '@cloud-ru/ds-link';
import { Typography } from '@cloud-ru/ds-typography';
import { PromoTagPredefined, VARIANTS } from '@cloud-ru/ds-uikit-product-promo-tag-predefined';
import { Fragment, MouseEvent } from 'react';
const CUSTOM_TOOLTIP_CONTENT = `Demo content, for replacement, use the property: ◆Slot...
Connect your local component with unique content to this property`;
const customTipVariants = [VARIANTS.Soon, VARIANTS.Latest, VARIANTS.Private, VARIANTS.Public] as const;
function handleLinkClick(e: MouseEvent) {
e.preventDefault();
}
function CustomTooltipTip() {
return (
<>
<Typography variant='body' size='s' style={{ whiteSpace: 'pre-line' }}>
{CUSTOM_TOOLTIP_CONTENT}
</Typography>
<Link underlined insideText appearance='invertNeutral' label='Link text' onClick={handleLinkClick} />
</>
);
}
export function CustomTip() {
return (
<div
style={{
display: 'grid',
gridTemplateColumns: 'auto auto',
gap: 12,
alignItems: 'center',
justifyContent: 'start',
}}
>
<Typography variant='body' size='s'>
Без тултипа
</Typography>
<Typography variant='body' size='s'>
С тултипом
</Typography>
{customTipVariants.map(variant => (
<Fragment key={variant}>
<div>
<PromoTagPredefined variant={variant} />
</div>
<div>
<PromoTagPredefined variant={variant} tooltip={{ tip: <CustomTooltipTip /> }} />
</div>
</Fragment>
))}
</div>
);
}Props
Types
Props
PromoTagPredefinedProps| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
context | "functional" | "service" | — | no | Контекст тега с вариантом "preview" |
data-test-id | string | — | no | |
tooltip | TooltipSettings | (TooltipSettings & { onSupportClick(e: MouseEvent<Element, MouseEvent>): void; }) | (TooltipSettings & { ...; }) | — | no | Настройки тултипа Настройки тултипа; если передан — `tip` обязателен. Без `tooltip` тултип не рендерится |
variant | "connecting" | "default" | "freeTier" | "latest" | "partner" | "preview" | "private" | "public" | "soon" | — | yes | Вариант промо-тега |