@chrome-consulting/krit-ui 0.0.49
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.
- package/README.md +69 -0
- package/dist/assets/index.d.ts +201 -0
- package/dist/components/ui/attachmentsSection.d.ts +54 -0
- package/dist/components/ui/badge.d.ts +32 -0
- package/dist/components/ui/badgeVariants.d.ts +6 -0
- package/dist/components/ui/banner.d.ts +60 -0
- package/dist/components/ui/bottom-menu.d.ts +41 -0
- package/dist/components/ui/button.d.ts +27 -0
- package/dist/components/ui/buttonVariants.d.ts +4 -0
- package/dist/components/ui/calendar.d.ts +18 -0
- package/dist/components/ui/card.d.ts +87 -0
- package/dist/components/ui/carousel.d.ts +52 -0
- package/dist/components/ui/checkbox.d.ts +30 -0
- package/dist/components/ui/collapsible-section.d.ts +37 -0
- package/dist/components/ui/collapsible.d.ts +18 -0
- package/dist/components/ui/command.d.ts +102 -0
- package/dist/components/ui/confirm-modal.d.ts +33 -0
- package/dist/components/ui/data-table.d.ts +94 -0
- package/dist/components/ui/date-picker.d.ts +69 -0
- package/dist/components/ui/dialog.d.ts +66 -0
- package/dist/components/ui/dot.d.ts +10 -0
- package/dist/components/ui/dropdown-menu.d.ts +67 -0
- package/dist/components/ui/file-input.d.ts +36 -0
- package/dist/components/ui/filters-column-header.d.ts +28 -0
- package/dist/components/ui/form.d.ts +86 -0
- package/dist/components/ui/form.lib.d.ts +23 -0
- package/dist/components/ui/header.d.ts +39 -0
- package/dist/components/ui/input.d.ts +30 -0
- package/dist/components/ui/label.d.ts +23 -0
- package/dist/components/ui/multi-select.d.ts +100 -0
- package/dist/components/ui/nav-panel.d.ts +52 -0
- package/dist/components/ui/nav.d.ts +52 -0
- package/dist/components/ui/network-error-message.d.ts +46 -0
- package/dist/components/ui/notification.d.ts +34 -0
- package/dist/components/ui/notificationVariants.d.ts +4 -0
- package/dist/components/ui/number-input.d.ts +149 -0
- package/dist/components/ui/page-layout.d.ts +28 -0
- package/dist/components/ui/page-view-mode-toggle.d.ts +22 -0
- package/dist/components/ui/pagination.d.ts +121 -0
- package/dist/components/ui/popover.d.ts +36 -0
- package/dist/components/ui/post-card.d.ts +273 -0
- package/dist/components/ui/preloader.d.ts +23 -0
- package/dist/components/ui/previewFull.d.ts +40 -0
- package/dist/components/ui/previews.d.ts +69 -0
- package/dist/components/ui/previewsCompactList.d.ts +18 -0
- package/dist/components/ui/previewsShared.d.ts +8 -0
- package/dist/components/ui/profile.d.ts +41 -0
- package/dist/components/ui/radio-group.d.ts +48 -0
- package/dist/components/ui/resizable.d.ts +65 -0
- package/dist/components/ui/scroll-area.d.ts +5 -0
- package/dist/components/ui/secondary-panel-section.d.ts +20 -0
- package/dist/components/ui/segmented-control.d.ts +35 -0
- package/dist/components/ui/select-header-filter.d.ts +23 -0
- package/dist/components/ui/select.d.ts +91 -0
- package/dist/components/ui/separator.d.ts +34 -0
- package/dist/components/ui/sheet.d.ts +118 -0
- package/dist/components/ui/skeleton.d.ts +24 -0
- package/dist/components/ui/sort-component.d.ts +46 -0
- package/dist/components/ui/sortable-header.d.ts +12 -0
- package/dist/components/ui/switch.d.ts +25 -0
- package/dist/components/ui/table.d.ts +104 -0
- package/dist/components/ui/tabs.d.ts +52 -0
- package/dist/components/ui/tabsVariants.d.ts +6 -0
- package/dist/components/ui/text-area.d.ts +37 -0
- package/dist/components/ui/theme-provider.d.ts +136 -0
- package/dist/components/ui/time-picker.d.ts +29 -0
- package/dist/components/ui/time-picker.lib.d.ts +6 -0
- package/dist/components/ui/toast.d.ts +80 -0
- package/dist/components/ui/toaster.d.ts +22 -0
- package/dist/components/ui/tooltip.d.ts +65 -0
- package/dist/components/ui/tree-view.d.ts +96 -0
- package/dist/components/ui/widget-plan-fact.d.ts +86 -0
- package/dist/date.d.ts +8 -0
- package/dist/hooks/useColumnFilters.d.ts +6 -0
- package/dist/hooks/useColumnSizing.d.ts +20 -0
- package/dist/hooks/useCombinedRefs.d.ts +1 -0
- package/dist/hooks/useConfirm.d.ts +49 -0
- package/dist/hooks/useNotify.d.ts +28 -0
- package/dist/hooks/usePreviewsFilePicker.d.ts +40 -0
- package/dist/hooks/useSidebar.d.ts +10 -0
- package/dist/hooks/useStoredExpand.d.ts +18 -0
- package/dist/hooks/useStoredFields.d.ts +4 -0
- package/dist/hooks/useStoredTabs.d.ts +4 -0
- package/dist/hooks/useTableStates.d.ts +26 -0
- package/dist/hooks/useTheme.d.ts +1 -0
- package/dist/hooks/useToast.d.ts +44 -0
- package/dist/hooks/useTranslation.d.ts +4 -0
- package/dist/krit-ui.d.ts +2 -0
- package/dist/krit-ui.js +27485 -0
- package/dist/krit-ui.umd.cjs +140 -0
- package/dist/lib/attachments.d.ts +245 -0
- package/dist/lib/cookies.d.ts +1 -0
- package/dist/lib/file.d.ts +52 -0
- package/dist/lib/infinite-scroll.d.ts +13 -0
- package/dist/lib/selectUtils.d.ts +14 -0
- package/dist/lib/text.d.ts +1 -0
- package/dist/lib/zod.d.ts +27 -0
- package/dist/main.d.ts +85 -0
- package/dist/style.css +1 -0
- package/dist/utils.d.ts +2 -0
- package/package.json +122 -0
- package/tailwind.config.cjs +273 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Компонент NumberInput для ввода числовых значений со строгой валидацией
|
|
3
|
+
*
|
|
4
|
+
* Этот файл содержит реализацию компонента NumberInput, который предоставляет
|
|
5
|
+
* безопасную альтернативу обычному `<input type="number">`. Компонент обеспечивает:
|
|
6
|
+
* - Строгую валидацию только числовых символов
|
|
7
|
+
* - Автоматическую замену запятых на точки как десятичного разделителя
|
|
8
|
+
* - Контроль количества десятичных знаков
|
|
9
|
+
* - Предотвращение ввода множественных разделителей
|
|
10
|
+
* - Настраиваемую поддержку отрицательных чисел
|
|
11
|
+
*/
|
|
12
|
+
import * as React from 'react';
|
|
13
|
+
/**
|
|
14
|
+
* Пропсы для компонента NumberInput
|
|
15
|
+
*
|
|
16
|
+
* @interface NumberInputProps
|
|
17
|
+
* @extends {Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'value'>}
|
|
18
|
+
*/
|
|
19
|
+
export type NumberInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'value'> & {
|
|
20
|
+
/** Иконка, отображаемая справа от поля ввода */
|
|
21
|
+
icon?: React.ReactNode;
|
|
22
|
+
/** Текущее значение поля. Может быть числом или строкой */
|
|
23
|
+
value?: number | string;
|
|
24
|
+
/**
|
|
25
|
+
* Колбэк, вызываемый при изменении значения
|
|
26
|
+
* @param value - новое числовое значение или null, если значение невалидно
|
|
27
|
+
*/
|
|
28
|
+
onChange?: (value: number | null) => void;
|
|
29
|
+
/**
|
|
30
|
+
* Алиас для onChange. Используется для совместимости с другими компонентами
|
|
31
|
+
* @param value - новое числовое значение или null, если значение невалидно
|
|
32
|
+
*/
|
|
33
|
+
onValueChange?: (value: number | null) => void;
|
|
34
|
+
/**
|
|
35
|
+
* Колбэк, вызываемый при нажатии клавиши Enter
|
|
36
|
+
* @param e - событие нажатия клавиши
|
|
37
|
+
*/
|
|
38
|
+
onEnter?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
39
|
+
/**
|
|
40
|
+
* Количество знаков после десятичной точки.
|
|
41
|
+
* При значении 0 десятичная точка не разрешена.
|
|
42
|
+
* @default 0
|
|
43
|
+
*/
|
|
44
|
+
decimalPlaces?: number;
|
|
45
|
+
/**
|
|
46
|
+
* Разрешить ввод отрицательных чисел
|
|
47
|
+
* @default false
|
|
48
|
+
*/
|
|
49
|
+
allowNegative?: boolean;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Компонент для ввода только числовых значений с строгой валидацией.
|
|
53
|
+
*
|
|
54
|
+
* Предоставляет безопасную альтернативу обычному `<input type="number">` с более
|
|
55
|
+
* предсказуемым поведением валидации и обработки десятичных разделителей.
|
|
56
|
+
* Автоматически заменяет запятые на точки для удобства пользователей.
|
|
57
|
+
*
|
|
58
|
+
* @component
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* // Целые числа
|
|
62
|
+
* <NumberInput
|
|
63
|
+
* value={count}
|
|
64
|
+
* onChange={(value) => setCount(value)}
|
|
65
|
+
* decimalPlaces={0}
|
|
66
|
+
* />
|
|
67
|
+
*
|
|
68
|
+
* // Денежные суммы (2 знака после запятой)
|
|
69
|
+
* // Пользователь может ввести как "12.34", так и "12,34" - оба варианта будут работать
|
|
70
|
+
* <NumberInput
|
|
71
|
+
* value={price}
|
|
72
|
+
* onChange={(value) => setPrice(value)}
|
|
73
|
+
* decimalPlaces={2}
|
|
74
|
+
* placeholder="0.00"
|
|
75
|
+
* />
|
|
76
|
+
*
|
|
77
|
+
* // Только положительные числа
|
|
78
|
+
* <NumberInput
|
|
79
|
+
* value={quantity}
|
|
80
|
+
* onChange={(value) => setQuantity(value)}
|
|
81
|
+
* allowNegative={false}
|
|
82
|
+
* decimalPlaces={0}
|
|
83
|
+
* />
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* @param props - Пропсы компонента NumberInput
|
|
87
|
+
* @param ref - Ref для доступа к HTML input элементу
|
|
88
|
+
* @returns JSX элемент поля ввода для чисел
|
|
89
|
+
*
|
|
90
|
+
* @see {@link NumberInputProps} для описания всех доступных пропсов
|
|
91
|
+
*
|
|
92
|
+
* @public
|
|
93
|
+
*/
|
|
94
|
+
declare const NumberInput: React.ForwardRefExoticComponent<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "type" | "value"> & {
|
|
95
|
+
/** Иконка, отображаемая справа от поля ввода */
|
|
96
|
+
icon?: React.ReactNode;
|
|
97
|
+
/** Текущее значение поля. Может быть числом или строкой */
|
|
98
|
+
value?: number | string;
|
|
99
|
+
/**
|
|
100
|
+
* Колбэк, вызываемый при изменении значения
|
|
101
|
+
* @param value - новое числовое значение или null, если значение невалидно
|
|
102
|
+
*/
|
|
103
|
+
onChange?: (value: number | null) => void;
|
|
104
|
+
/**
|
|
105
|
+
* Алиас для onChange. Используется для совместимости с другими компонентами
|
|
106
|
+
* @param value - новое числовое значение или null, если значение невалидно
|
|
107
|
+
*/
|
|
108
|
+
onValueChange?: (value: number | null) => void;
|
|
109
|
+
/**
|
|
110
|
+
* Колбэк, вызываемый при нажатии клавиши Enter
|
|
111
|
+
* @param e - событие нажатия клавиши
|
|
112
|
+
*/
|
|
113
|
+
onEnter?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
114
|
+
/**
|
|
115
|
+
* Количество знаков после десятичной точки.
|
|
116
|
+
* При значении 0 десятичная точка не разрешена.
|
|
117
|
+
* @default 0
|
|
118
|
+
*/
|
|
119
|
+
decimalPlaces?: number;
|
|
120
|
+
/**
|
|
121
|
+
* Разрешить ввод отрицательных чисел
|
|
122
|
+
* @default false
|
|
123
|
+
*/
|
|
124
|
+
allowNegative?: boolean;
|
|
125
|
+
} & React.RefAttributes<HTMLInputElement>>;
|
|
126
|
+
/**
|
|
127
|
+
* Экспортируемый компонент для ввода числовых значений.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```tsx
|
|
131
|
+
* import { NumberInput } from '@/shared/ui';
|
|
132
|
+
*
|
|
133
|
+
* function App() {
|
|
134
|
+
* const [amount, setAmount] = useState<number | null>(null);
|
|
135
|
+
*
|
|
136
|
+
* return (
|
|
137
|
+
* <NumberInput
|
|
138
|
+
* value={amount}
|
|
139
|
+
* onChange={setAmount}
|
|
140
|
+
* decimalPlaces={2}
|
|
141
|
+
* placeholder="Введите сумму"
|
|
142
|
+
* />
|
|
143
|
+
* );
|
|
144
|
+
* }
|
|
145
|
+
* ```
|
|
146
|
+
*
|
|
147
|
+
* @public
|
|
148
|
+
*/
|
|
149
|
+
export { NumberInput };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
interface PageLayoutProps {
|
|
3
|
+
/** Слот для заголовка страницы */
|
|
4
|
+
headerSlot?: ReactNode;
|
|
5
|
+
/** Слот для фильтров */
|
|
6
|
+
filterSlot?: ReactNode;
|
|
7
|
+
/** Слот для основного контента */
|
|
8
|
+
contentSlot?: ReactNode;
|
|
9
|
+
/** Ограничить contentSlot по высоте (overflow-hidden) для внутренней прокрутки контента */
|
|
10
|
+
contentSlotOverflowHidden?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Компонент макета страницы с предустановленными отступами и расположением элементов.
|
|
14
|
+
* Обеспечивает единообразную структуру страниц с заголовком, фильтрами и контентом.
|
|
15
|
+
*
|
|
16
|
+
* @component
|
|
17
|
+
* @param {PageLayoutProps} props - Пропсы компонента
|
|
18
|
+
* @returns {JSX.Element}
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* <PageLayout
|
|
22
|
+
* headerSlot={<PageHeader title="Заголовок" />}
|
|
23
|
+
* filterSlot={<Filters />}
|
|
24
|
+
* contentSlot={<Table />}
|
|
25
|
+
* />
|
|
26
|
+
*/
|
|
27
|
+
export declare const PageLayout: ({ headerSlot, filterSlot, contentSlot, contentSlotOverflowHidden, }: PageLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Значения вкладок переключения вида «список с панелью» / «таблица».
|
|
3
|
+
*/
|
|
4
|
+
export declare const PAGE_VIEW_TAB: {
|
|
5
|
+
readonly LIST: "list";
|
|
6
|
+
readonly TABLE: "table";
|
|
7
|
+
};
|
|
8
|
+
export type PageViewTab = (typeof PAGE_VIEW_TAB)[keyof typeof PAGE_VIEW_TAB];
|
|
9
|
+
export interface PageViewModeToggleProps {
|
|
10
|
+
/** Дополнительные классы для `TabsList` */
|
|
11
|
+
className?: string;
|
|
12
|
+
/** Подписи для доступности; по умолчанию ключи `listView` / `tableView` из ThemeProvider */
|
|
13
|
+
listAriaLabel?: string;
|
|
14
|
+
tableAriaLabel?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Переключатель вида «список с панелью» / «таблица» для экранов с {@link PAGE_VIEW_TAB}.
|
|
18
|
+
* Размещается внутри родительского `Tabs` с соответствующим `value` и `onValueChange`.
|
|
19
|
+
*
|
|
20
|
+
* @component
|
|
21
|
+
*/
|
|
22
|
+
export declare const PageViewModeToggle: ({ className, listAriaLabel, tableAriaLabel, }: PageViewModeToggleProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
export declare const DEFAULT_PAGE_SIZE_OPTIONS: number[];
|
|
2
|
+
/**
|
|
3
|
+
* Свойства компонента пагинации
|
|
4
|
+
*/
|
|
5
|
+
export interface PaginationProps {
|
|
6
|
+
/** Горизонтальные отступы компонента */
|
|
7
|
+
horizontalPadding?: 'small' | 'medium' | 'large';
|
|
8
|
+
/** Дополнительные CSS-классы для контейнера */
|
|
9
|
+
className?: string;
|
|
10
|
+
/** Количество элементов на странице */
|
|
11
|
+
pageSize?: number;
|
|
12
|
+
/** Общее количество страниц */
|
|
13
|
+
pageCount?: number;
|
|
14
|
+
/** Индекс текущей страницы (начиная с 0) */
|
|
15
|
+
pageIndex?: number;
|
|
16
|
+
/** Возможность перейти на предыдущую страницу */
|
|
17
|
+
canPreviousPage?: boolean;
|
|
18
|
+
/** Возможность перейти на следующую страницу */
|
|
19
|
+
canNextPage?: boolean;
|
|
20
|
+
/** Количество выбранных элементов */
|
|
21
|
+
selectedCount?: number;
|
|
22
|
+
/** Общее количество элементов */
|
|
23
|
+
totalCount?: number;
|
|
24
|
+
/** Компактный режим без кнопок первой/последней страницы */
|
|
25
|
+
compact?: boolean;
|
|
26
|
+
/** Скрыть селектор размера страницы */
|
|
27
|
+
hideDisplayBy?: boolean;
|
|
28
|
+
/** Варианты количества элементов на странице для селектора «Показывать по» */
|
|
29
|
+
pageSizeOptions?: number[];
|
|
30
|
+
/** Обработчик перехода на предыдущую страницу */
|
|
31
|
+
previousPage?: () => void;
|
|
32
|
+
/** Обработчик перехода на следующую страницу */
|
|
33
|
+
nextPage?: () => void;
|
|
34
|
+
/** Обработчик изменения размера страницы */
|
|
35
|
+
setPageSize?: (value: number) => void;
|
|
36
|
+
/** Обработчик изменения индекса страницы */
|
|
37
|
+
setPageIndex?: (value: number) => void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Компонент пагинации для навигации по страницам данных
|
|
41
|
+
* Поддерживает выбор размера страницы, отображение выбранных элементов и различные варианты отображения
|
|
42
|
+
*
|
|
43
|
+
* @component
|
|
44
|
+
* @param {PaginationProps} props - Параметры компонента
|
|
45
|
+
* @param {'small' | 'medium' | 'large'} [props.horizontalPadding='medium'] - Горизонтальные отступы компонента
|
|
46
|
+
* @param {string} [props.className] - Дополнительные CSS-классы для контейнера
|
|
47
|
+
* @param {number} [props.pageSize] - Количество элементов на странице
|
|
48
|
+
* @param {number} [props.pageCount=0] - Общее количество страниц
|
|
49
|
+
* @param {number} [props.pageIndex=0] - Индекс текущей страницы (начиная с 0)
|
|
50
|
+
* @param {boolean} [props.canPreviousPage] - Возможность перейти на предыдущую страницу
|
|
51
|
+
* @param {boolean} [props.canNextPage] - Возможность перейти на следующую страницу
|
|
52
|
+
* @param {number} [props.selectedCount] - Количество выбранных элементов
|
|
53
|
+
* @param {number} [props.totalCount] - Общее количество элементов
|
|
54
|
+
* @param {boolean} [props.compact=false] - Компактный режим без кнопок первой/последней страницы
|
|
55
|
+
* @param {boolean} [props.hideDisplayBy=false] - Скрыть селектор размера страницы
|
|
56
|
+
* @param {number[]} [props.pageSizeOptions=DEFAULT_PAGE_SIZE_OPTIONS] - Варианты размера страницы
|
|
57
|
+
* @param {function} [props.previousPage] - Обработчик перехода на предыдущую страницу
|
|
58
|
+
* @param {function} [props.nextPage] - Обработчик перехода на следующую страницу
|
|
59
|
+
* @param {function} [props.setPageSize] - Обработчик изменения размера страницы
|
|
60
|
+
* @param {function} [props.setPageIndex] - Обработчик изменения индекса страницы
|
|
61
|
+
* @returns {React.ReactElement} Компонент пагинации
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* // Базовое использование
|
|
65
|
+
* <Pagination
|
|
66
|
+
* pageSize={20}
|
|
67
|
+
* pageCount={10}
|
|
68
|
+
* pageIndex={0}
|
|
69
|
+
* canPreviousPage={false}
|
|
70
|
+
* canNextPage={true}
|
|
71
|
+
* setPageSize={(size) => setPageSize(size)}
|
|
72
|
+
* setPageIndex={(index) => setPageIndex(index)}
|
|
73
|
+
* previousPage={() => setPageIndex(pageIndex - 1)}
|
|
74
|
+
* nextPage={() => setPageIndex(pageIndex + 1)}
|
|
75
|
+
* />
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* // С выбранными элементами
|
|
79
|
+
* <Pagination
|
|
80
|
+
* pageSize={20}
|
|
81
|
+
* pageCount={10}
|
|
82
|
+
* pageIndex={2}
|
|
83
|
+
* canPreviousPage={true}
|
|
84
|
+
* canNextPage={true}
|
|
85
|
+
* selectedCount={5}
|
|
86
|
+
* totalCount={200}
|
|
87
|
+
* setPageSize={(size) => setPageSize(size)}
|
|
88
|
+
* setPageIndex={(index) => setPageIndex(index)}
|
|
89
|
+
* previousPage={() => setPageIndex(pageIndex - 1)}
|
|
90
|
+
* nextPage={() => setPageIndex(pageIndex + 1)}
|
|
91
|
+
* />
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* // Компактный режим
|
|
95
|
+
* <Pagination
|
|
96
|
+
* pageSize={20}
|
|
97
|
+
* pageCount={10}
|
|
98
|
+
* pageIndex={4}
|
|
99
|
+
* canPreviousPage={true}
|
|
100
|
+
* canNextPage={true}
|
|
101
|
+
* compact={true}
|
|
102
|
+
* setPageSize={(size) => setPageSize(size)}
|
|
103
|
+
* setPageIndex={(index) => setPageIndex(index)}
|
|
104
|
+
* previousPage={() => setPageIndex(pageIndex - 1)}
|
|
105
|
+
* nextPage={() => setPageIndex(pageIndex + 1)}
|
|
106
|
+
* />
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* // Кастомные варианты размера страницы
|
|
110
|
+
* <Pagination
|
|
111
|
+
* pageSize={15}
|
|
112
|
+
* pageSizeOptions={[5, 15, 25, 100]}
|
|
113
|
+
* pageCount={10}
|
|
114
|
+
* pageIndex={0}
|
|
115
|
+
* canPreviousPage={false}
|
|
116
|
+
* canNextPage={true}
|
|
117
|
+
* setPageSize={(size) => setPageSize(size)}
|
|
118
|
+
* setPageIndex={(index) => setPageIndex(index)}
|
|
119
|
+
* />
|
|
120
|
+
*/
|
|
121
|
+
export declare function Pagination({ horizontalPadding, className, pageSize, pageCount, pageIndex, canPreviousPage, canNextPage, selectedCount, totalCount, compact, hideDisplayBy, pageSizeOptions, previousPage, nextPage, setPageSize, setPageIndex, }: PaginationProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
3
|
+
/**
|
|
4
|
+
* Popover компонент на основе Radix UI
|
|
5
|
+
* @see https://www.radix-ui.com/docs/primitives/components/popover
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Основной контейнер Popover
|
|
9
|
+
* @component
|
|
10
|
+
*/
|
|
11
|
+
declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
|
|
12
|
+
/**
|
|
13
|
+
* Триггер для открытия/закрытия Popover
|
|
14
|
+
* @component
|
|
15
|
+
*/
|
|
16
|
+
declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
17
|
+
/**
|
|
18
|
+
* Кнопка закрытия Popover (должна находиться внутри контекста Popover)
|
|
19
|
+
*/
|
|
20
|
+
declare const PopoverClose: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
21
|
+
/**
|
|
22
|
+
* Кастомная точка привязки для позиционирования содержимого (например, когда триггер шире видимой области).
|
|
23
|
+
* @see https://www.radix-ui.com/primitives/docs/components/popover#anchor
|
|
24
|
+
*/
|
|
25
|
+
declare const PopoverAnchor: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
|
|
26
|
+
/**
|
|
27
|
+
* Содержимое Popover
|
|
28
|
+
* @component
|
|
29
|
+
* @param {Object} props - Свойства компонента
|
|
30
|
+
* @param {string} [props.className] - Дополнительные CSS-классы
|
|
31
|
+
* @param {'start'|'center'|'end'} [props.align='center'] - Выравнивание содержимого относительно триггера
|
|
32
|
+
* @param {number} [props.sideOffset=4] - Отступ от стороны триггера
|
|
33
|
+
* @param {React.Ref} ref - Ref для содержимого Popover
|
|
34
|
+
*/
|
|
35
|
+
declare const PopoverContent: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
36
|
+
export { Popover, PopoverAnchor, PopoverClose, PopoverTrigger, PopoverContent };
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface DropdownAction {
|
|
3
|
+
/** Текст действия */
|
|
4
|
+
text: string;
|
|
5
|
+
/** Обработчик клика */
|
|
6
|
+
onClick: () => void;
|
|
7
|
+
/** Отключено ли действие */
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface PostCardHeaderProps {
|
|
11
|
+
/** Префикс заголовка (отображается серым цветом) */
|
|
12
|
+
titlePrefix?: string;
|
|
13
|
+
/** Основной текст заголовка (отображается основным цветом, с обрезкой при переполнении) */
|
|
14
|
+
titleText?: string;
|
|
15
|
+
/** Слот для кнопок действий (может содержать одну или несколько кнопок) */
|
|
16
|
+
buttonsSlot?: React.ReactNode;
|
|
17
|
+
/** Массив действий для выпадающего меню */
|
|
18
|
+
dropDownButtons?: DropdownAction[];
|
|
19
|
+
/** Callback-функция для кнопки "Назад" */
|
|
20
|
+
onBack?: () => void;
|
|
21
|
+
/** Дополнительные CSS-классы для корневого элемента */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Компонент заголовка карточки поста с поддержкой заголовка и кнопок действий.
|
|
26
|
+
* Используется для отображения заголовка карточки с действиями в правой части.
|
|
27
|
+
*
|
|
28
|
+
* @component
|
|
29
|
+
* @param {PostCardHeaderProps} props - Пропсы компонента
|
|
30
|
+
* @param {string} [props.titlePrefix] - Префикс заголовка (отображается серым цветом)
|
|
31
|
+
* @param {string} [props.titleText] - Основной текст заголовка (отображается основным цветом, с обрезкой при переполнении)
|
|
32
|
+
* @param {React.ReactNode} [props.buttonsSlot] - Слот для кнопок действий
|
|
33
|
+
* @param {DropdownAction[]} [props.dropDownButtons] - Массив действий для выпадающего меню
|
|
34
|
+
* @param {() => void} [props.onBack] - Callback-функция для кнопки "Назад"
|
|
35
|
+
* @param {string} [props.className] - Дополнительные CSS-классы
|
|
36
|
+
* @returns {JSX.Element}
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* <PostCardHeader
|
|
40
|
+
* titlePrefix="223-CR"
|
|
41
|
+
* titleText="Title"
|
|
42
|
+
* onBack={() => console.log('back')}
|
|
43
|
+
* buttonsSlot={
|
|
44
|
+
* <Button variant="theme-filled">Кнопка</Button>
|
|
45
|
+
* }
|
|
46
|
+
* dropDownButtons={[
|
|
47
|
+
* { text: 'Редактировать', onClick: () => console.log('edit') },
|
|
48
|
+
* { text: 'Удалить', onClick: () => console.log('delete') },
|
|
49
|
+
* ]}
|
|
50
|
+
* />
|
|
51
|
+
*/
|
|
52
|
+
declare const PostCardHeader: {
|
|
53
|
+
({ titlePrefix, titleText, buttonsSlot, dropDownButtons, onBack, className, }: PostCardHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
54
|
+
displayName: string;
|
|
55
|
+
};
|
|
56
|
+
export interface PostCardBodyField {
|
|
57
|
+
/** Метка поля */
|
|
58
|
+
label: string;
|
|
59
|
+
/** Значение поля (может быть строкой или React-элементом) */
|
|
60
|
+
value: string | React.ReactNode;
|
|
61
|
+
}
|
|
62
|
+
export interface PostCardBodySection {
|
|
63
|
+
/** Массив полей в секции */
|
|
64
|
+
fields: PostCardBodyField[];
|
|
65
|
+
}
|
|
66
|
+
interface PostCardBodyProps {
|
|
67
|
+
/** Массив секций с полями */
|
|
68
|
+
sections?: PostCardBodySection[];
|
|
69
|
+
/** Дополнительные CSS-классы для корневого элемента */
|
|
70
|
+
className?: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Компонент тела карточки поста для отображения структурированной информации в формате ключ-значение.
|
|
74
|
+
* Поддерживает группировку полей в секции с разделителями.
|
|
75
|
+
*
|
|
76
|
+
* @component
|
|
77
|
+
* @param {PostCardBodyProps} props - Пропсы компонента
|
|
78
|
+
* @param {PostCardBodySection[]} [props.sections] - Массив секций с полями
|
|
79
|
+
* @param {string} [props.className] - Дополнительные CSS-классы
|
|
80
|
+
* @returns {JSX.Element}
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* <PostCardBody
|
|
84
|
+
* sections={[
|
|
85
|
+
* {
|
|
86
|
+
* fields: [
|
|
87
|
+
* { label: 'Статус', value: <Badge>Выполнен</Badge> },
|
|
88
|
+
* { label: 'Приоритет', value: 'Неотложный' },
|
|
89
|
+
* { label: 'Название', value: 'Ремонт конвейерной ленты' },
|
|
90
|
+
* ],
|
|
91
|
+
* },
|
|
92
|
+
* {
|
|
93
|
+
* fields: [
|
|
94
|
+
* { label: 'Описание', value: 'Длинное описание...' },
|
|
95
|
+
* ],
|
|
96
|
+
* },
|
|
97
|
+
* ]}
|
|
98
|
+
* />
|
|
99
|
+
*/
|
|
100
|
+
declare const PostCardBody: {
|
|
101
|
+
({ sections, className }: PostCardBodyProps): import("react/jsx-runtime").JSX.Element | null;
|
|
102
|
+
displayName: string;
|
|
103
|
+
};
|
|
104
|
+
interface PostCardSidebarProps {
|
|
105
|
+
/** Дочерние элементы сайдбара (вертикально расположенные компоненты) */
|
|
106
|
+
children?: React.ReactNode;
|
|
107
|
+
/** Дополнительные CSS-классы для корневого элемента */
|
|
108
|
+
className?: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Компонент сайдбара карточки поста для вертикального расположения элементов.
|
|
112
|
+
* Используется для отображения дополнительных компонентов (карусель, виджеты и т.д.) в боковой панели.
|
|
113
|
+
*
|
|
114
|
+
* @component
|
|
115
|
+
* @param {PostCardSidebarProps} props - Пропсы компонента
|
|
116
|
+
* @param {React.ReactNode} [props.children] - Дочерние элементы сайдбара
|
|
117
|
+
* @param {string} [props.className] - Дополнительные CSS-классы
|
|
118
|
+
* @returns {JSX.Element}
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* <PostCardSidebar>
|
|
122
|
+
* <Carousel>...</Carousel>
|
|
123
|
+
* <WidgetPlanFact rows={[...]} />
|
|
124
|
+
* </PostCardSidebar>
|
|
125
|
+
*/
|
|
126
|
+
declare const PostCardSidebar: {
|
|
127
|
+
({ children, className }: PostCardSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
128
|
+
displayName: string;
|
|
129
|
+
};
|
|
130
|
+
interface PostCardLeftPanelItemProps {
|
|
131
|
+
/** Слот для заголовка элемента (flex с gap 16px и space-between) */
|
|
132
|
+
headerSlot?: React.ReactNode;
|
|
133
|
+
/** Слот для основного контента элемента */
|
|
134
|
+
contentSlot?: React.ReactNode;
|
|
135
|
+
/** Слот для футера элемента (flex с gap 16px и space-between) */
|
|
136
|
+
footerSlot?: React.ReactNode;
|
|
137
|
+
/** Выбран ли элемент */
|
|
138
|
+
selected?: boolean;
|
|
139
|
+
/** Обработчик клика */
|
|
140
|
+
onClick?: () => void;
|
|
141
|
+
/** Дополнительные CSS-классы */
|
|
142
|
+
className?: string;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Элемент списка левой панели карточки поста.
|
|
146
|
+
* Используется для отображения отдельного элемента в списке PostCardLeftPanel.
|
|
147
|
+
*
|
|
148
|
+
* @component
|
|
149
|
+
* @param {PostCardLeftPanelItemProps} props - Пропсы компонента
|
|
150
|
+
* @param {React.ReactNode} [props.headerSlot] - Слот для заголовка элемента
|
|
151
|
+
* @param {React.ReactNode} [props.contentSlot] - Слот для основного контента элемента
|
|
152
|
+
* @param {React.ReactNode} [props.footerSlot] - Слот для футера элемента
|
|
153
|
+
* @param {boolean} [props.selected] - Выбран ли элемент
|
|
154
|
+
* @param {() => void} [props.onClick] - Обработчик клика
|
|
155
|
+
* @param {string} [props.className] - Дополнительные CSS-классы
|
|
156
|
+
* @returns {JSX.Element}
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* <PostCardLeftPanelItem
|
|
160
|
+
* selected
|
|
161
|
+
* onClick={() => console.log('clicked')}
|
|
162
|
+
* headerSlot={<div>223-CR</div>}
|
|
163
|
+
* contentSlot={<div>Ремонт конвейерной ленты</div>}
|
|
164
|
+
* footerSlot={<div>РМ01—Плановый заказ...</div>}
|
|
165
|
+
* />
|
|
166
|
+
*/
|
|
167
|
+
declare const PostCardLeftPanelItem: {
|
|
168
|
+
({ headerSlot, contentSlot, footerSlot, selected, onClick, className, }: PostCardLeftPanelItemProps): import("react/jsx-runtime").JSX.Element | null;
|
|
169
|
+
displayName: string;
|
|
170
|
+
};
|
|
171
|
+
interface PostCardLeftPanelProps {
|
|
172
|
+
/** Слот для сортировки (отображается сверху) */
|
|
173
|
+
sortSlot?: React.ReactNode;
|
|
174
|
+
/** Дочерние элементы списка (PostCardLeftPanelItem) */
|
|
175
|
+
children?: React.ReactNode;
|
|
176
|
+
/** Слот для пагинации (отображается снизу) */
|
|
177
|
+
paginationSlot?: React.ReactNode;
|
|
178
|
+
/** Дополнительные CSS-классы для корневого элемента */
|
|
179
|
+
className?: string;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Левая панель карточки поста со списком элементов.
|
|
183
|
+
* Используется для отображения списка элементов с поддержкой сортировки и пагинации.
|
|
184
|
+
*
|
|
185
|
+
* @component
|
|
186
|
+
* @param {PostCardLeftPanelProps} props - Пропсы компонента
|
|
187
|
+
* @param {React.ReactNode} [props.sortSlot] - Слот для сортировки (отображается сверху)
|
|
188
|
+
* @param {React.ReactNode} [props.children] - Дочерние элементы списка
|
|
189
|
+
* @param {React.ReactNode} [props.paginationSlot] - Слот для пагинации (отображается снизу)
|
|
190
|
+
* @param {string} [props.className] - Дополнительные CSS-классы
|
|
191
|
+
* @returns {JSX.Element}
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* <PostCardLeftPanel
|
|
195
|
+
* sortSlot={<div>Сортировка</div>}
|
|
196
|
+
* paginationSlot={<Pagination />}
|
|
197
|
+
* >
|
|
198
|
+
* <PostCardLeftPanelItem selected>Элемент 1</PostCardLeftPanelItem>
|
|
199
|
+
* <PostCardLeftPanelItem>Элемент 2</PostCardLeftPanelItem>
|
|
200
|
+
* </PostCardLeftPanel>
|
|
201
|
+
*/
|
|
202
|
+
declare const PostCardLeftPanel: {
|
|
203
|
+
({ sortSlot, children, paginationSlot, className, }: PostCardLeftPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
204
|
+
displayName: string;
|
|
205
|
+
};
|
|
206
|
+
export interface PostCardLeftPanelResizableConfig {
|
|
207
|
+
/** Размер левой панели по умолчанию в процентах */
|
|
208
|
+
defaultSize?: number;
|
|
209
|
+
/** Минимальный размер левой панели в процентах */
|
|
210
|
+
minSize?: number;
|
|
211
|
+
/** Максимальный размер левой панели в процентах */
|
|
212
|
+
maxSize?: number;
|
|
213
|
+
/** ID для автоматического сохранения размера панели */
|
|
214
|
+
autoSaveId?: string;
|
|
215
|
+
}
|
|
216
|
+
interface PostCardProps {
|
|
217
|
+
/** Слот для левой панели (отображается слева, высота равна headerSlot + bodySlot/sidebarSlot) */
|
|
218
|
+
leftPanelSlot?: React.ReactNode;
|
|
219
|
+
/** Конфигурация для изменения размера левой панели. Если передана, левая панель становится изменяемой */
|
|
220
|
+
leftPanelResizable?: PostCardLeftPanelResizableConfig;
|
|
221
|
+
/** Слот для заголовка карточки (отображается сверху на всю ширину) */
|
|
222
|
+
headerSlot?: React.ReactNode;
|
|
223
|
+
/** Слот для основного контента карточки (отображается слева) */
|
|
224
|
+
bodySlot?: React.ReactNode;
|
|
225
|
+
/** Слот для сайдбара карточки (отображается справа, фиксированная ширина 340px) */
|
|
226
|
+
sidebarSlot?: React.ReactNode;
|
|
227
|
+
/** Слот для дополнительного контента карточки (отображается под bodySlot и sidebarSlot) */
|
|
228
|
+
contentSlot?: React.ReactNode;
|
|
229
|
+
/** Дополнительные CSS-классы для корневого элемента */
|
|
230
|
+
className?: string;
|
|
231
|
+
/** Отображать ли верхнюю границу */
|
|
232
|
+
withTopBorder?: boolean;
|
|
233
|
+
/** Фиксированная высота с внутренней прокруткой панелей (для list/detail layout) */
|
|
234
|
+
fixedHeight?: boolean;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Обертка карточки поста с поддержкой левой панели, заголовка, основного контента и сайдбара.
|
|
238
|
+
* Используется для отображения структурированной информации в виде карточки.
|
|
239
|
+
*
|
|
240
|
+
* @component
|
|
241
|
+
* @param {PostCardProps} props - Пропсы компонента
|
|
242
|
+
* @param {React.ReactNode} [props.leftPanelSlot] - Слот для левой панели (отображается слева)
|
|
243
|
+
* @param {PostCardLeftPanelResizableConfig} [props.leftPanelResizable] - Конфигурация для изменения размера левой панели
|
|
244
|
+
* @param {React.ReactNode} [props.headerSlot] - Слот для заголовка карточки
|
|
245
|
+
* @param {React.ReactNode} [props.bodySlot] - Слот для основного контента
|
|
246
|
+
* @param {React.ReactNode} [props.sidebarSlot] - Слот для сайдбара
|
|
247
|
+
* @param {React.ReactNode} [props.contentSlot] - Слот для дополнительного контента (отображается под bodySlot и sidebarSlot)
|
|
248
|
+
* @param {string} [props.className] - Дополнительные CSS-классы
|
|
249
|
+
* @param {boolean} [props.withTopBorder] - Отображать ли верхнюю границу
|
|
250
|
+
* @returns {JSX.Element}
|
|
251
|
+
*
|
|
252
|
+
* @example
|
|
253
|
+
* <PostCard
|
|
254
|
+
* leftPanelSlot={<PostCardLeftPanel>...</PostCardLeftPanel>}
|
|
255
|
+
* headerSlot={<PostCardHeader titlePrefix="223-CR" titleText="Title" />}
|
|
256
|
+
* bodySlot={<PostCardBody sections={[...]} />}
|
|
257
|
+
* sidebarSlot={<PostCardSidebar>...</PostCardSidebar>}
|
|
258
|
+
* contentSlot={<div>Дополнительный контент</div>}
|
|
259
|
+
* />
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* <PostCard
|
|
263
|
+
* leftPanelSlot={<PostCardLeftPanel>...</PostCardLeftPanel>}
|
|
264
|
+
* leftPanelResizable={{ defaultSize: 25, minSize: 15, maxSize: 50, autoSaveId: 'machinery-panel' }}
|
|
265
|
+
* headerSlot={<PostCardHeader titlePrefix="223-CR" titleText="Title" />}
|
|
266
|
+
* bodySlot={<PostCardBody sections={[...]} />}
|
|
267
|
+
* />
|
|
268
|
+
*/
|
|
269
|
+
declare const PostCard: {
|
|
270
|
+
({ leftPanelSlot, leftPanelResizable, headerSlot, bodySlot, sidebarSlot, contentSlot, className, withTopBorder, fixedHeight, }: PostCardProps): import("react/jsx-runtime").JSX.Element | null;
|
|
271
|
+
displayName: string;
|
|
272
|
+
};
|
|
273
|
+
export { PostCardHeader, PostCardBody, PostCardSidebar, PostCard, PostCardLeftPanel, PostCardLeftPanelItem, };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
export interface PreloaderProps {
|
|
3
|
+
style?: CSSProperties;
|
|
4
|
+
className?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Компонент индикатора загрузки с анимацией вращения.
|
|
8
|
+
* Использует иконку Loader2 из библиотеки lucide-react с применением анимации spin.
|
|
9
|
+
*
|
|
10
|
+
* @component
|
|
11
|
+
* @param {PreloaderProps} props - Параметры компонента
|
|
12
|
+
* @param {CSSProperties} [props.style] - Объект со стилями для контейнера
|
|
13
|
+
* @param {string} [props.className] - Дополнительные CSS-классы для контейнера
|
|
14
|
+
* @returns {React.ReactElement} Компонент индикатора загрузки
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* <Preloader />
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* <Preloader className="my-custom-class" style={{ background: 'white' }} />
|
|
21
|
+
*/
|
|
22
|
+
declare const Preloader: ({ style, className }: PreloaderProps) => import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export { Preloader };
|