skillgrid 0.0.26 → 0.0.28-dev-41308-avatar-group.1182116

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.
@@ -87,5 +87,7 @@ export interface AvatarGroupProps {
87
87
  overflowProps?: Omit<AvatarProps, 'size' | 'name' | 'icon' | 'shape'>;
88
88
  /** Степень перекрытия аватаров (0.25 | 0.3 | 0.5) */
89
89
  overlap?: 0.5 | 0.4 | 0.3 | 0.25 | 0.2 | 0.1;
90
+ /** Цвет обводки аватаров (по умолчанию берется из фона контейнера) */
91
+ cutoutBackground?: CSSProperties['color'];
90
92
  }
91
93
  export {};
@@ -1,85 +1,12 @@
1
- export type LinkSizeType = 'l' | 'm' | 's';
2
- /**
3
- * Link style variants - buttonStyle and mode combinations
4
- */
5
- type LinkStyleProps = {
6
- /**
7
- * Button style type
8
- * @default 'neutral'
9
- */
10
- buttonStyle?: 'neutral';
11
- /**
12
- * Button variant
13
- * @default 'primary'
14
- */
15
- mode?: 'primary' | 'secondary' | 'tertiary';
16
- } | {
17
- /**
18
- * Button style type
19
- * @default 'accent'
20
- */
21
- buttonStyle?: 'accent' | 'positive' | 'negative' | 'contrast' | 'warning';
22
- /**
23
- * Button variant
24
- * @default 'primary'
25
- */
26
- mode?: 'primary' | 'secondary';
27
- };
28
- /**
29
- * Link icon variants
30
- * - With icons: size is required
31
- * - Without icons: size is optional
32
- */
33
- type LinkIconVariant = {
34
- /**
35
- * Icons render only when size is provided.
36
- * @default 'm'
37
- */
38
- size: LinkSizeType;
39
- iconLeft?: React.ReactNode;
40
- iconRight?: React.ReactNode;
41
- } | {
42
- /** No icons in this variant */
43
- size?: LinkSizeType;
44
- iconLeft?: never;
45
- iconRight?: never;
46
- };
47
- /**
48
- * Base properties common to all link variants
49
- */
50
- type LinkBaseProps = Omit<ButtonBaseProps, 'mode' | 'iconRight'> & LinkStyleProps & {
51
- /**
52
- * Display variant
53
- */
54
- displayAs: 'link';
55
- /**
56
- * Underline setting (only for displayAs='link')
57
- * @default false
58
- */
59
- showUnderline?: boolean;
60
- postfix?: never;
61
- subcaption?: never;
62
- loading?: never;
63
- stretched?: never;
64
- };
65
1
  /**
66
2
  * Base properties common to all button variants
67
3
  */
68
- type ButtonBaseProps = {
69
- /**
70
- * Button variant
71
- * @default 'primary'
72
- */
73
- mode?: 'primary' | 'secondary' | 'tertiary';
4
+ type BaseProps = {
74
5
  /**
75
6
  * Disables the button
76
7
  * @default false
77
8
  */
78
9
  disabled?: boolean;
79
- /**
80
- * Button icon (right side)
81
- */
82
- iconRight?: React.ReactNode;
83
10
  /**
84
11
  * Additional CSS class
85
12
  */
@@ -97,7 +24,16 @@ type ButtonBaseProps = {
97
24
  */
98
25
  'data-testid'?: string;
99
26
  };
100
- type CommonProps = (ButtonBaseProps & {
27
+ type ButtonBaseProps = BaseProps & {
28
+ /**
29
+ * Button variant
30
+ * @default 'primary'
31
+ */
32
+ mode?: 'primary' | 'secondary' | 'tertiary';
33
+ /**
34
+ * Button icon (right side)
35
+ */
36
+ iconRight?: React.ReactNode;
101
37
  /**
102
38
  * Button style type
103
39
  * @default 'neutral'
@@ -138,17 +74,81 @@ type CommonProps = (ButtonBaseProps & {
138
74
  };
139
75
  iconLeft?: never;
140
76
  showUnderline?: never;
141
- }) | (LinkBaseProps & LinkIconVariant);
77
+ };
78
+ export type LinkSizeType = 'l' | 'm' | 's';
79
+ /**
80
+ * Link style variants - buttonStyle and mode combinations
81
+ */
82
+ type LinkStyleProps = {
83
+ /**
84
+ * Button style type
85
+ * @default 'neutral'
86
+ */
87
+ buttonStyle?: 'neutral';
88
+ /**
89
+ * Button variant
90
+ * @default 'primary'
91
+ */
92
+ mode?: 'primary' | 'secondary' | 'tertiary';
93
+ } | {
94
+ /**
95
+ * Button style type
96
+ * @default 'accent'
97
+ */
98
+ buttonStyle?: 'accent' | 'positive' | 'negative' | 'contrast' | 'warning';
99
+ /**
100
+ * Button variant
101
+ * @default 'primary'
102
+ */
103
+ mode?: 'primary' | 'secondary';
104
+ };
105
+ /**
106
+ * Link icon variants
107
+ * - With icons: size is required
108
+ * - Without icons: size is optional
109
+ */
110
+ type LinkIconVariant = {
111
+ /**
112
+ * Icons render only when size is provided.
113
+ * @default 'm'
114
+ */
115
+ size: LinkSizeType;
116
+ iconLeft?: React.ReactNode;
117
+ iconRight?: React.ReactNode;
118
+ } | {
119
+ /** No icons in this variant */
120
+ size?: LinkSizeType;
121
+ iconLeft?: never;
122
+ iconRight?: never;
123
+ };
124
+ /**
125
+ * Base properties common to all link variants
126
+ */
127
+ type LinkBaseProps = BaseProps & LinkStyleProps & {
128
+ /**
129
+ * Display variant
130
+ */
131
+ displayAs: 'link';
132
+ /**
133
+ * Underline setting (only for displayAs='link')
134
+ * @default false
135
+ */
136
+ showUnderline?: boolean;
137
+ postfix?: never;
138
+ subcaption?: never;
139
+ loading?: never;
140
+ stretched?: never;
141
+ };
142
142
  /**
143
143
  * Props when rendered as a native HTMLButtonElement (default behaviour).
144
144
  */
145
- export type ButtonAsNativeButtonProps = CommonProps & React.ButtonHTMLAttributes<HTMLButtonElement> & {
145
+ export type ButtonAsNativeButtonProps = ButtonBaseProps & React.ButtonHTMLAttributes<HTMLButtonElement> & {
146
146
  as?: 'button';
147
147
  };
148
148
  /**
149
149
  * Props when rendered as an anchor (HTMLAnchorElement).
150
150
  */
151
- export type ButtonAsAnchorProps = CommonProps & React.AnchorHTMLAttributes<HTMLAnchorElement> & {
151
+ export type ButtonAsAnchorProps = LinkBaseProps & LinkIconVariant & React.AnchorHTMLAttributes<HTMLAnchorElement> & {
152
152
  as: 'a';
153
153
  /**
154
154
  * External link default. If target/rel are not provided, sets target="_blank"
@@ -0,0 +1,5 @@
1
+ import { SegmentedControlProps } from './SegmentedControl.type';
2
+ /**
3
+ * SegmentedControl component
4
+ */
5
+ export declare const SegmentedControl: <T>(props: SegmentedControlProps<T>) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,38 @@
1
+ import { ReactNode } from 'react';
2
+ type Segment<T> = {
3
+ value: T;
4
+ label?: ReactNode;
5
+ };
6
+ export interface SegmentedControlProps<T> {
7
+ className?: string;
8
+ /**
9
+ * Размер компонента
10
+ */
11
+ size?: 's' | 'm' | 'l';
12
+ /**
13
+ * Должен ли компонент растягиваться на всю ширину контейнера
14
+ */
15
+ stretched?: boolean;
16
+ /**
17
+ * Значение
18
+ */
19
+ value?: T;
20
+ /**
21
+ * Массив сегментов
22
+ */
23
+ segments: Array<Segment<T>>;
24
+ /**
25
+ * Значение по умолчанию
26
+ */
27
+ defaultValue?: T;
28
+ /** Режим отображения сегментов
29
+ * * icon - только иконка
30
+ * * text - текстовый лейбл
31
+ */
32
+ mode?: 'icon' | 'label';
33
+ /**
34
+ * Хэндлер изменения активного сегмента
35
+ */
36
+ onChange?: (value: T) => void;
37
+ }
38
+ export {};
@@ -0,0 +1,2 @@
1
+ export { SegmentedControl } from './SegmentedControl';
2
+ export type { SegmentedControlProps } from './SegmentedControl.type';
@@ -1,12 +1,8 @@
1
1
  import { FC, ReactNode } from 'react';
2
2
  interface ScrollWrapperProps {
3
- /** дочерние элементы внутри скролл-бара */
4
3
  children: ReactNode;
5
- /** size - размер компонента (элементов управления скроллом) */
6
4
  size: 'sm' | 'md' | 'xs';
7
- /** включить контролы/маски (обычно на десктопе) */
8
5
  withControls?: boolean;
9
- /** className для внешнего враппера (ячейка сетки) */
10
6
  className?: string;
11
7
  }
12
8
  export declare const ScrollWrapper: FC<ScrollWrapperProps>;
@@ -1,5 +1,43 @@
1
1
  import { default as React, FC } from 'react';
2
- import { TabsBarProps, TabPanelProps, TabsContentProps, TabsProviderProps } from './Tabs.type';
2
+ import { TabsBarProps, TabPanelProps, TabsContentProps, TabsContextType, TabsProviderProps } from './Tabs.type';
3
+ /**
4
+ * useTabs - кастомный хук для доступа к контексту вкладок
5
+ *
6
+ * Должен использоваться внутри TabsProvider для доступа к активной вкладке и функции её изменения
7
+ * Бросает ошибку, если используется вне контекста TabsProvider
8
+ *
9
+ * @returns {TabsContextType} Объект контекста с activeTab и функцией setTab
10
+ * @throws {Error} Если хук используется вне TabsProvider
11
+ *
12
+ * @example
13
+ * const { activeTab, setTab } = useTabs();
14
+ */
15
+ export declare const useTabs: () => TabsContextType;
16
+ /**
17
+ * TabsProvider - провайдер контекста для управления состоянием вкладок.
18
+ *
19
+ * Хранит текущую активную вкладку и предоставляет метод (`setTab`)
20
+ * для её изменения, доступный всем дочерним компонентам через контекст.
21
+ *
22
+ * Поддерживает как контролируемый, так и неконтролируемый режим:
23
+ * - Неконтролируемый: использует `defaultActiveTab`
24
+ * - Контролируемый: использует `activeTab` и колбэк `onChange`
25
+ *
26
+ * @param defaultActiveTab - вкладка, выбранная по умолчанию (неконтролируемый режим)
27
+ * @param activeTab - текущая активная вкладка (контролируемый режим)
28
+ * @param onChange - колбэк, вызываемый при изменении активной вкладки
29
+ * @param children - дочерние компоненты, которые будут иметь доступ к TabsContext
30
+ *
31
+ * @example
32
+ * <Tabs.Provider defaultActiveTab="tab1" onChange={(val) => console.log(val)}>
33
+ * <Tabs.Bar mode="primary" items={tabItems} />
34
+ * <Tabs.Content>
35
+ * <Tabs.Panel tabValue="tab1">Content 1</Tabs.Panel>
36
+ * <Tabs.Panel tabValue="tab2">Content 2</Tabs.Panel>
37
+ * </Tabs.Content>
38
+ * </Tabs.Provider>
39
+ */
40
+ export declare const TabsProvider: FC<TabsProviderProps>;
3
41
  /**
4
42
  * Bar - компонент для отображения списка вкладок.
5
43
  *
@@ -17,7 +55,41 @@ import { TabsBarProps, TabPanelProps, TabsContentProps, TabsProviderProps } from
17
55
  * ]}/>
18
56
  * </Tabs.Provider>
19
57
  */
20
- declare const Bar: FC<TabsBarProps>;
58
+ export declare const Bar: FC<TabsBarProps>;
59
+ /** ====================== Секция контента ====================== */
60
+ /**
61
+ * TabPanel - рендерит контент для конкретной вкладки внутри TabsContent.
62
+ * Отображается только панель активной вкладки.
63
+ * @param tabValue - идентификатор панели вкладки
64
+ * @param children - содержимое панели вкладки
65
+ * @param restProps - дополнительные пропсы, передаваемые в контейнерный div
66
+ *
67
+ * @example
68
+ * <TabPanel tabValue="tab1" className="p-4">
69
+ * Контент для Вкладки 1
70
+ * </TabPanel>
71
+ */
72
+ export declare const TabPanel: FC<TabPanelProps>;
73
+ /**
74
+ * TabsContent - компонент для отображения панелей вкладок,
75
+ * связанных с активной вкладкой.
76
+ *
77
+ * Принимает дочерние элементы 'TabPanel' и отображает только тот,
78
+ * который соответствует текущей активной вкладке
79
+ *
80
+ * @param children - один или несколько компонентов 'TabPanel'.
81
+ * @param restProps - дополнительные пропсы, передаваемые в контейнерный div.
82
+ *
83
+ * @example
84
+ * <TabsProvider defaultActiveTab="tab1">
85
+ * <TabsContent className="tab-content">
86
+ * <TabPanel tabValue="tab1">Контент для Вкладки 1</TabPanel>
87
+ * <TabPanel tabValue="tab2">Контент для Вкладки 2</TabPanel>
88
+ * </TabsContent>
89
+ * </TabsProvider>
90
+ */
91
+ export declare const TabsContent: FC<TabsContentProps>;
92
+ /** ====================== Экспорт ====================== */
21
93
  export declare const Tabs: {
22
94
  Provider: React.FC<TabsProviderProps>;
23
95
  Content: React.FC<TabsContentProps>;
@@ -1,5 +1,5 @@
1
1
  import { ReactNode, HTMLAttributes } from 'react';
2
- import { Nullable } from '../../types/index.ts';
2
+ import { Nullable } from '../../../../../../src/types';
3
3
  import { BadgeProps } from '../Badge';
4
4
  /**
5
5
  * Tabs визуальный режим табов
@@ -0,0 +1,8 @@
1
+ import { BuildInPlacements } from '@rc-component/trigger';
2
+ import { TooltipButtonConfig } from './Tooltip.type';
3
+ export declare const TOOLTIP_PLACEMENTS_M: BuildInPlacements;
4
+ export declare const TOOLTIP_PLACEMENTS_SMALL: BuildInPlacements;
5
+ /**
6
+ * Дефолтные пресеты кнопок для каждого варианта тултипа и количества кнопок
7
+ */
8
+ export declare const BUTTON_PRESETS: Record<'neutral' | 'contrast' | 'accent', Record<number, TooltipButtonConfig[]>>;
@@ -0,0 +1,5 @@
1
+ import { TooltipProps } from './Tooltip.type';
2
+ /**
3
+ * Tooltip component to render tooltip
4
+ */
5
+ export declare const Tooltip: ({ customContent, children, placement, contentClassNames, mouseEnterDelay, mouseLeaveDelay, showArrow, showClose, trigger, variant, size, text, title, media, buttons, buttonProps, onClose, ...props }: TooltipProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,92 @@
1
+ import { ReactNode } from 'react';
2
+ import { default as RcTooltip } from 'rc-tooltip';
3
+ import { ButtonAsNativeButtonProps } from '../Button/Button.type';
4
+ export type TooltipVariant = 'neutral' | 'contrast' | 'accent';
5
+ export type TooltipSize = 'xs' | 's' | 'm';
6
+ type OneToThree<T> = [T] | [T, T] | [T, T, T];
7
+ export type TooltipContentClassNames = {
8
+ mediaWrapper?: string;
9
+ textWrapper?: string;
10
+ typography?: string;
11
+ title?: string;
12
+ text?: string;
13
+ closeButton?: string;
14
+ };
15
+ export type TooltipButtonConfig = ButtonAsNativeButtonProps & {
16
+ closeOnClick?: boolean;
17
+ };
18
+ export interface TooltipCommonProps {
19
+ /**
20
+ * Вариант цветовой схемы тултипа
21
+ * @default 'neutral'
22
+ */
23
+ variant?: TooltipVariant;
24
+ /**
25
+ * Размер тултипа
26
+ * @default 's'
27
+ */
28
+ size?: TooltipSize;
29
+ /**
30
+ * Основной текст тултипа
31
+ */
32
+ text?: string;
33
+ /**
34
+ * Дополнительные CSS классы для содержимого тултипа
35
+ */
36
+ contentClassNames?: TooltipContentClassNames;
37
+ /**
38
+ * Функция закрытия тултипа
39
+ */
40
+ onClose?: () => void;
41
+ }
42
+ export interface TooltipSmallProps extends TooltipCommonProps {
43
+ size?: 'xs' | 's';
44
+ title?: never;
45
+ media?: never;
46
+ buttons?: never;
47
+ buttonProps?: never;
48
+ showClose?: never;
49
+ }
50
+ export interface TooltipMediumProps extends TooltipCommonProps {
51
+ size: 'm';
52
+ /**
53
+ * Заголовок тултипа (для размера m)
54
+ */
55
+ title?: string;
56
+ /**
57
+ * Медиа контент тултипа (для размера m)
58
+ */
59
+ media?: ReactNode;
60
+ /**
61
+ * Показывать кнопку закрытия тултипа (для размера m)
62
+ * Если выбран размер m и не переданы кнопки, то кнопка закрытия отображается по умолчанию.
63
+ * @default true
64
+ */
65
+ showClose?: boolean;
66
+ /**
67
+ * Конфигурация кнопок действия, можно передать от 1 до 3 кнопок (для размера m).
68
+ * Каждый элемент — полноценные пропсы `Button` с возможностью переопределить любые свойства.
69
+ * По умолчанию используются дефолтные пресеты кнопок для каждого варианта тултипа и количества кнопок в соответствии с дизайн-системой.
70
+ */
71
+ buttons?: OneToThree<TooltipButtonConfig>;
72
+ /**
73
+ * Общие пропсы для всех кнопок (для размера m). Применяются ко всем элементам `buttons`
74
+ * и могут быть переопределены индивидуальными пропсами конкретной кнопки.
75
+ * Помогает избежать разрастания пропсов при необходимости сменить стиль у всех сразу.
76
+ */
77
+ buttonProps?: Partial<TooltipButtonConfig>;
78
+ }
79
+ export type TooltipBaseProps = TooltipSmallProps | TooltipMediumProps;
80
+ export type TooltipProps = TooltipBaseProps & Omit<React.ComponentProps<typeof RcTooltip>, 'overlay'> & {
81
+ /**
82
+ * Кастомное содержимое тултипа (полностью заменяет все элементы внутри тултипа)
83
+ */
84
+ customContent?: ReactNode;
85
+ };
86
+ export type TooltipContentProps = TooltipBaseProps & {
87
+ /**
88
+ * Дополнительные CSS классы для содержимого тултипа
89
+ */
90
+ classNames?: TooltipContentClassNames;
91
+ };
92
+ export {};
@@ -0,0 +1 @@
1
+ export { CrossOutlinedIcon, TooltipArrowIcon } from './react-svg-icons';
@@ -0,0 +1,3 @@
1
+ declare const CrossOutlinedIcon: () => import("react/jsx-runtime").JSX.Element;
2
+ declare const TooltipArrowIcon: () => import("react/jsx-runtime").JSX.Element;
3
+ export { CrossOutlinedIcon, TooltipArrowIcon };
@@ -0,0 +1,2 @@
1
+ export { Tooltip } from './Tooltip';
2
+ export type { TooltipProps } from './Tooltip.type';
@@ -1 +1 @@
1
- export declare function useWindowEvent<K extends string>(type: K, listener: K extends keyof WindowEventMap ? (this: Window, ev: WindowEventMap[K]) => void : (this: Window, ev: CustomEvent) => void, options?: boolean | AddEventListenerOptions): void;
1
+ export declare function useWindowEvent<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;