@astral/ui 4.49.0 → 4.51.0

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 (151) hide show
  1. package/components/NewStepper/NewStepper.d.ts +2 -0
  2. package/components/NewStepper/NewStepper.js +30 -0
  3. package/components/NewStepper/Step/Description/Description.d.ts +7 -0
  4. package/components/NewStepper/Step/Description/Description.js +8 -0
  5. package/components/NewStepper/Step/Description/index.d.ts +1 -0
  6. package/components/NewStepper/Step/Description/index.js +1 -0
  7. package/components/NewStepper/Step/Description/styles.d.ts +11 -0
  8. package/components/NewStepper/Step/Description/styles.js +18 -0
  9. package/components/NewStepper/Step/Label/Label.d.ts +7 -0
  10. package/components/NewStepper/Step/Label/Label.js +9 -0
  11. package/components/NewStepper/Step/Label/index.d.ts +1 -0
  12. package/components/NewStepper/Step/Label/index.js +1 -0
  13. package/components/NewStepper/Step/Label/styles.d.ts +25 -0
  14. package/components/NewStepper/Step/Label/styles.js +23 -0
  15. package/components/NewStepper/Step/Step.d.ts +2 -0
  16. package/components/NewStepper/Step/Step.js +80 -0
  17. package/components/NewStepper/Step/constants.d.ts +28 -0
  18. package/components/NewStepper/Step/constants.js +25 -0
  19. package/components/NewStepper/Step/index.d.ts +3 -0
  20. package/components/NewStepper/Step/index.js +2 -0
  21. package/components/NewStepper/Step/styles.d.ts +38 -0
  22. package/components/NewStepper/Step/styles.js +312 -0
  23. package/components/NewStepper/Step/types.d.ts +44 -0
  24. package/components/NewStepper/Step/types.js +1 -0
  25. package/components/NewStepper/Step/useLogic/index.d.ts +1 -0
  26. package/components/NewStepper/Step/useLogic/index.js +1 -0
  27. package/components/NewStepper/Step/useLogic/useLogic.d.ts +23 -0
  28. package/components/NewStepper/Step/useLogic/useLogic.js +55 -0
  29. package/components/NewStepper/StepIcon/StepIcon.d.ts +28 -0
  30. package/components/NewStepper/StepIcon/StepIcon.js +34 -0
  31. package/components/NewStepper/StepIcon/constants.d.ts +7 -0
  32. package/components/NewStepper/StepIcon/constants.js +8 -0
  33. package/components/NewStepper/StepIcon/index.d.ts +2 -0
  34. package/components/NewStepper/StepIcon/index.js +2 -0
  35. package/components/NewStepper/StepperContext/StepperContext.d.ts +10 -0
  36. package/components/NewStepper/StepperContext/StepperContext.js +9 -0
  37. package/components/NewStepper/StepperContext/StepperContextProvider/StepperContextProvider.d.ts +7 -0
  38. package/components/NewStepper/StepperContext/StepperContextProvider/StepperContextProvider.js +21 -0
  39. package/components/NewStepper/StepperContext/StepperContextProvider/index.d.ts +1 -0
  40. package/components/NewStepper/StepperContext/StepperContextProvider/index.js +1 -0
  41. package/components/NewStepper/StepperContext/index.d.ts +2 -0
  42. package/components/NewStepper/StepperContext/index.js +2 -0
  43. package/components/NewStepper/constants.d.ts +13 -0
  44. package/components/NewStepper/constants.js +14 -0
  45. package/components/NewStepper/index.d.ts +4 -0
  46. package/components/NewStepper/index.js +3 -0
  47. package/components/NewStepper/public.d.ts +4 -0
  48. package/components/NewStepper/public.js +3 -0
  49. package/components/NewStepper/styles.d.ts +5 -0
  50. package/components/NewStepper/styles.js +44 -0
  51. package/components/NewStepper/types.d.ts +33 -0
  52. package/components/NewStepper/types.js +1 -0
  53. package/components/NewStepper/useLogic/index.d.ts +1 -0
  54. package/components/NewStepper/useLogic/index.js +1 -0
  55. package/components/NewStepper/useLogic/useLogic.d.ts +15 -0
  56. package/components/NewStepper/useLogic/useLogic.js +47 -0
  57. package/components/NewStepper/useLogic/utils/index.d.ts +1 -0
  58. package/components/NewStepper/useLogic/utils/index.js +1 -0
  59. package/components/NewStepper/useLogic/utils/validateStepperProps/index.d.ts +1 -0
  60. package/components/NewStepper/useLogic/utils/validateStepperProps/index.js +1 -0
  61. package/components/NewStepper/useLogic/utils/validateStepperProps/validateStepperProps.d.ts +5 -0
  62. package/components/NewStepper/useLogic/utils/validateStepperProps/validateStepperProps.js +16 -0
  63. package/components/Stepper/Stepper.d.ts +3 -0
  64. package/components/Stepper/Stepper.js +3 -0
  65. package/components/StepperWizard/StepperWizard.d.ts +3 -0
  66. package/components/StepperWizard/StepperWizard.js +3 -0
  67. package/components/Typography/Typography.js +1 -1
  68. package/components/Typography/constants.d.ts +1 -0
  69. package/components/Typography/constants.js +2 -0
  70. package/hook-form/FormWizard/FormWizard.js +4 -3
  71. package/hook-form/FormWizard/styles.d.ts +1 -4
  72. package/hook-form/FormWizard/styles.js +4 -6
  73. package/hook-form/FormWizard/useLogic/useLogic.d.ts +5 -6
  74. package/hook-form/FormWizard/useLogic/useLogic.js +4 -5
  75. package/hook-form/useFormWizard/useFormWizard.js +4 -2
  76. package/node/components/NewStepper/NewStepper.d.ts +2 -0
  77. package/node/components/NewStepper/NewStepper.js +34 -0
  78. package/node/components/NewStepper/Step/Description/Description.d.ts +7 -0
  79. package/node/components/NewStepper/Step/Description/Description.js +12 -0
  80. package/node/components/NewStepper/Step/Description/index.d.ts +1 -0
  81. package/node/components/NewStepper/Step/Description/index.js +17 -0
  82. package/node/components/NewStepper/Step/Description/styles.d.ts +11 -0
  83. package/node/components/NewStepper/Step/Description/styles.js +21 -0
  84. package/node/components/NewStepper/Step/Label/Label.d.ts +7 -0
  85. package/node/components/NewStepper/Step/Label/Label.js +13 -0
  86. package/node/components/NewStepper/Step/Label/index.d.ts +1 -0
  87. package/node/components/NewStepper/Step/Label/index.js +5 -0
  88. package/node/components/NewStepper/Step/Label/styles.d.ts +25 -0
  89. package/node/components/NewStepper/Step/Label/styles.js +26 -0
  90. package/node/components/NewStepper/Step/Step.d.ts +2 -0
  91. package/node/components/NewStepper/Step/Step.js +84 -0
  92. package/node/components/NewStepper/Step/constants.d.ts +28 -0
  93. package/node/components/NewStepper/Step/constants.js +28 -0
  94. package/node/components/NewStepper/Step/index.d.ts +3 -0
  95. package/node/components/NewStepper/Step/index.js +7 -0
  96. package/node/components/NewStepper/Step/styles.d.ts +38 -0
  97. package/node/components/NewStepper/Step/styles.js +315 -0
  98. package/node/components/NewStepper/Step/types.d.ts +44 -0
  99. package/node/components/NewStepper/Step/types.js +2 -0
  100. package/node/components/NewStepper/Step/useLogic/index.d.ts +1 -0
  101. package/node/components/NewStepper/Step/useLogic/index.js +17 -0
  102. package/node/components/NewStepper/Step/useLogic/useLogic.d.ts +23 -0
  103. package/node/components/NewStepper/Step/useLogic/useLogic.js +59 -0
  104. package/node/components/NewStepper/StepIcon/StepIcon.d.ts +28 -0
  105. package/node/components/NewStepper/StepIcon/StepIcon.js +38 -0
  106. package/node/components/NewStepper/StepIcon/constants.d.ts +7 -0
  107. package/node/components/NewStepper/StepIcon/constants.js +11 -0
  108. package/node/components/NewStepper/StepIcon/index.d.ts +2 -0
  109. package/node/components/NewStepper/StepIcon/index.js +7 -0
  110. package/node/components/NewStepper/StepperContext/StepperContext.d.ts +10 -0
  111. package/node/components/NewStepper/StepperContext/StepperContext.js +12 -0
  112. package/node/components/NewStepper/StepperContext/StepperContextProvider/StepperContextProvider.d.ts +7 -0
  113. package/node/components/NewStepper/StepperContext/StepperContextProvider/StepperContextProvider.js +25 -0
  114. package/node/components/NewStepper/StepperContext/StepperContextProvider/index.d.ts +1 -0
  115. package/node/components/NewStepper/StepperContext/StepperContextProvider/index.js +17 -0
  116. package/node/components/NewStepper/StepperContext/index.d.ts +2 -0
  117. package/node/components/NewStepper/StepperContext/index.js +18 -0
  118. package/node/components/NewStepper/constants.d.ts +13 -0
  119. package/node/components/NewStepper/constants.js +17 -0
  120. package/node/components/NewStepper/index.d.ts +4 -0
  121. package/node/components/NewStepper/index.js +10 -0
  122. package/node/components/NewStepper/public.d.ts +4 -0
  123. package/node/components/NewStepper/public.js +10 -0
  124. package/node/components/NewStepper/styles.d.ts +5 -0
  125. package/node/components/NewStepper/styles.js +47 -0
  126. package/node/components/NewStepper/types.d.ts +33 -0
  127. package/node/components/NewStepper/types.js +2 -0
  128. package/node/components/NewStepper/useLogic/index.d.ts +1 -0
  129. package/node/components/NewStepper/useLogic/index.js +17 -0
  130. package/node/components/NewStepper/useLogic/useLogic.d.ts +15 -0
  131. package/node/components/NewStepper/useLogic/useLogic.js +51 -0
  132. package/node/components/NewStepper/useLogic/utils/index.d.ts +1 -0
  133. package/node/components/NewStepper/useLogic/utils/index.js +17 -0
  134. package/node/components/NewStepper/useLogic/utils/validateStepperProps/index.d.ts +1 -0
  135. package/node/components/NewStepper/useLogic/utils/validateStepperProps/index.js +17 -0
  136. package/node/components/NewStepper/useLogic/utils/validateStepperProps/validateStepperProps.d.ts +5 -0
  137. package/node/components/NewStepper/useLogic/utils/validateStepperProps/validateStepperProps.js +20 -0
  138. package/node/components/Stepper/Stepper.d.ts +3 -0
  139. package/node/components/Stepper/Stepper.js +3 -0
  140. package/node/components/StepperWizard/StepperWizard.d.ts +3 -0
  141. package/node/components/StepperWizard/StepperWizard.js +3 -0
  142. package/node/components/Typography/Typography.js +1 -1
  143. package/node/components/Typography/constants.d.ts +1 -0
  144. package/node/components/Typography/constants.js +2 -0
  145. package/node/hook-form/FormWizard/FormWizard.js +3 -2
  146. package/node/hook-form/FormWizard/styles.d.ts +1 -4
  147. package/node/hook-form/FormWizard/styles.js +5 -7
  148. package/node/hook-form/FormWizard/useLogic/useLogic.d.ts +5 -6
  149. package/node/hook-form/FormWizard/useLogic/useLogic.js +4 -5
  150. package/node/hook-form/useFormWizard/useFormWizard.js +4 -2
  151. package/package.json +1 -1
@@ -0,0 +1,44 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { StepIconProps } from '../StepIcon';
3
+ export type StepProps = {
4
+ /**
5
+ * Название шага
6
+ */
7
+ label: ReactNode;
8
+ /**
9
+ * Флаг ошибки шага
10
+ */
11
+ isError?: boolean;
12
+ /**
13
+ * Завершённость шага. Если не передан — считается по `activeStep` (как раньше: пройдены шаги с меньшим `stepId`).
14
+ */
15
+ isCompleted?: boolean;
16
+ /**
17
+ * Флаг предупреждения шага
18
+ */
19
+ isWarning?: boolean;
20
+ /**
21
+ * Флаг блокировки шага
22
+ */
23
+ isDisabled?: boolean;
24
+ /**
25
+ * Дополнительный текст шага
26
+ */
27
+ children?: ReactNode;
28
+ /**
29
+ * Функция вызываемая при клике на шаг
30
+ */
31
+ onClick?: (stepId: number) => void;
32
+ /**
33
+ * Кастомный компонент иконки
34
+ */
35
+ icon?: (props: Omit<StepIconProps, 'icon'>) => ReactNode;
36
+ /**
37
+ * Класс применяемый к корневому элементу
38
+ */
39
+ className?: string;
40
+ /**
41
+ * ID шага
42
+ */
43
+ stepId: number;
44
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from './useLogic';
@@ -0,0 +1 @@
1
+ export * from './useLogic';
@@ -0,0 +1,23 @@
1
+ /// <reference types="react" />
2
+ import type { StepProps } from '../types';
3
+ type UseLogicParams = StepProps;
4
+ export declare const useLogic: ({ stepId, isCompleted, onClick, children, isError, isWarning, icon, label, isDisabled, className, }: UseLogicParams) => {
5
+ isCompletedStep: boolean;
6
+ isRenderButton: boolean;
7
+ handleClick: () => void;
8
+ connectorVariant: "line" | "arrow";
9
+ alternativeLabel: boolean;
10
+ orientation: "horizontal" | "vertical";
11
+ stepId: number;
12
+ children: import("react").ReactNode;
13
+ isError: boolean | undefined;
14
+ isWarning: boolean | undefined;
15
+ icon: ((props: Omit<import("../../StepIcon").StepIconProps, "icon">) => import("react").ReactNode) | undefined;
16
+ className: string | undefined;
17
+ label: import("react").ReactNode;
18
+ isRenderVerticalLineConnector: boolean;
19
+ isRenderHorizontalLineConnector: boolean;
20
+ isDisabled: boolean;
21
+ isActiveStep: boolean;
22
+ };
23
+ export {};
@@ -0,0 +1,55 @@
1
+ import { useContext, useEffect } from 'react';
2
+ import { StepperContext } from '../../StepperContext';
3
+ export const useLogic = ({ stepId, isCompleted, onClick, children, isError, isWarning, icon, label, isDisabled, className, }) => {
4
+ const { connector, activeStep, orientation, alternativeLabel, onClickPrevStep, onClickStep, } = useContext(StepperContext);
5
+ useEffect(() => {
6
+ const hasDescription = Boolean(children);
7
+ const isValidForDescription = orientation === 'vertical' &&
8
+ connector === 'line' &&
9
+ alternativeLabel === false;
10
+ if (hasDescription && !isValidForDescription) {
11
+ // biome-ignore lint/suspicious/noConsole: Сообщение для интеграторов
12
+ console.error('Stepper: description можно использовать только с комбинацией:\n' +
13
+ 'orientation="vertical", connector="line", alternativeLabel=false');
14
+ }
15
+ }, []);
16
+ const isCompletedStep = isCompleted !== undefined ? isCompleted : activeStep > stepId;
17
+ const isClickableStep = Boolean(onClick) ||
18
+ Boolean(onClickStep) ||
19
+ (Boolean(onClickPrevStep) && isCompletedStep);
20
+ const isDisabledFromPrevOnlyMode = Boolean(onClickPrevStep) && !isClickableStep;
21
+ const isDisabledStep = Boolean(isDisabled) || isDisabledFromPrevOnlyMode;
22
+ const isRenderButton = Boolean(onClick) || Boolean(onClickPrevStep) || Boolean(onClickStep);
23
+ const handleClick = () => {
24
+ if (isDisabledStep) {
25
+ return;
26
+ }
27
+ if (isCompletedStep && onClickPrevStep) {
28
+ onClickPrevStep(stepId);
29
+ }
30
+ onClickStep?.(stepId);
31
+ onClick?.(stepId);
32
+ };
33
+ const isRenderVerticalLineConnector = connector === 'line' && orientation === 'vertical' && !children;
34
+ const isRenderHorizontalLineConnector = connector === 'line' && orientation === 'horizontal' && alternativeLabel;
35
+ const isActiveStep = activeStep === stepId;
36
+ return {
37
+ isCompletedStep,
38
+ isRenderButton,
39
+ handleClick,
40
+ connectorVariant: connector,
41
+ alternativeLabel,
42
+ orientation,
43
+ stepId,
44
+ children,
45
+ isError,
46
+ isWarning,
47
+ icon,
48
+ className,
49
+ label,
50
+ isRenderVerticalLineConnector,
51
+ isRenderHorizontalLineConnector,
52
+ isDisabled: isDisabledStep,
53
+ isActiveStep,
54
+ };
55
+ };
@@ -0,0 +1,28 @@
1
+ import type { ReactNode } from 'react';
2
+ export type StepIconProps = {
3
+ /**
4
+ * Флаг активности шага
5
+ */
6
+ isActive?: boolean;
7
+ /**
8
+ * Флаг завершенности шага
9
+ */
10
+ isCompleted?: boolean;
11
+ /**
12
+ * Флаг ошибки шага
13
+ */
14
+ isError?: boolean;
15
+ /**
16
+ * Флаг предупреждения шага
17
+ */
18
+ isWarning?: boolean;
19
+ /**
20
+ * Класс применяемый к корневому элементу
21
+ */
22
+ className?: string;
23
+ /**
24
+ * Кастомный компонент иконки
25
+ */
26
+ icon?: (props: Omit<StepIconProps, 'icon'>) => ReactNode;
27
+ };
28
+ export declare const StepIcon: ({ icon: Icon, isActive, isCompleted, isError, isWarning, }: StepIconProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { StepDefaultFillMd } from '../../../icons/StepDefaultFillMd';
3
+ import { StepErrorFillMd } from '../../../icons/StepErrorFillMd';
4
+ import { StepSuccessFillMd } from '../../../icons/StepSuccessFillMd';
5
+ import { cva } from '../../utils/cva';
6
+ import { stepIconClassnames } from './constants';
7
+ const stepIcon = cva(stepIconClassnames.root, {
8
+ variants: {
9
+ isActive: {
10
+ true: stepIconClassnames.active,
11
+ },
12
+ isCompleted: {
13
+ true: stepIconClassnames.success,
14
+ },
15
+ isError: {
16
+ true: stepIconClassnames.error,
17
+ },
18
+ isWarning: {
19
+ true: stepIconClassnames.warning,
20
+ },
21
+ },
22
+ });
23
+ export const StepIcon = ({ icon: Icon, isActive, isCompleted, isError, isWarning, }) => {
24
+ if (Icon) {
25
+ return (_jsx(Icon, { isActive: isActive, isCompleted: isCompleted, isError: isError, isWarning: isWarning, className: stepIcon({ isActive, isCompleted, isError, isWarning }) }));
26
+ }
27
+ if (isError && !isActive) {
28
+ return _jsx(StepErrorFillMd, { className: stepIcon({ isError: true }) });
29
+ }
30
+ if ((isCompleted && !isActive) || (isCompleted && isWarning && !isActive)) {
31
+ return (_jsx(StepSuccessFillMd, { className: stepIcon({ isCompleted: true, isWarning }) }));
32
+ }
33
+ return (_jsx(StepDefaultFillMd, { className: stepIcon({ isActive, isCompleted, isError, isWarning }) }));
34
+ };
@@ -0,0 +1,7 @@
1
+ export declare const stepIconClassnames: {
2
+ root: string;
3
+ active: string;
4
+ error: string;
5
+ warning: string;
6
+ success: string;
7
+ };
@@ -0,0 +1,8 @@
1
+ import { createUIKitClassname } from '../../utils/createUIKitClassname';
2
+ export const stepIconClassnames = {
3
+ root: createUIKitClassname('step__icon'),
4
+ active: createUIKitClassname('step__icon_active'),
5
+ error: createUIKitClassname('step__icon_error'),
6
+ warning: createUIKitClassname('step__icon_warning'),
7
+ success: createUIKitClassname('step__icon_success'),
8
+ };
@@ -0,0 +1,2 @@
1
+ export { StepIcon, type StepIconProps } from './StepIcon';
2
+ export { stepIconClassnames } from './constants';
@@ -0,0 +1,2 @@
1
+ export { StepIcon } from './StepIcon';
2
+ export { stepIconClassnames } from './constants';
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ export type StepperContextProps = {
3
+ activeStep: number;
4
+ orientation: 'horizontal' | 'vertical';
5
+ connector: 'arrow' | 'line';
6
+ alternativeLabel: boolean;
7
+ onClickPrevStep?: (index: number) => void;
8
+ onClickStep?: (index: number) => void;
9
+ };
10
+ export declare const StepperContext: import("react").Context<StepperContextProps>;
@@ -0,0 +1,9 @@
1
+ import { createContext } from 'react';
2
+ export const StepperContext = createContext({
3
+ activeStep: 0,
4
+ orientation: 'horizontal',
5
+ connector: 'line',
6
+ alternativeLabel: false,
7
+ onClickPrevStep: () => undefined,
8
+ onClickStep: () => undefined,
9
+ });
@@ -0,0 +1,7 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type StepperContextProps } from '../StepperContext';
3
+ type Props = StepperContextProps & {
4
+ children: ReactNode;
5
+ };
6
+ export declare const StepperContextProvider: ({ children, orientation, activeStep, connector, alternativeLabel, onClickPrevStep, onClickStep, }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { StepperContext } from '../StepperContext';
4
+ export const StepperContextProvider = ({ children, orientation, activeStep, connector, alternativeLabel, onClickPrevStep, onClickStep, }) => {
5
+ const contextValue = useMemo(() => ({
6
+ activeStep,
7
+ orientation,
8
+ connector,
9
+ alternativeLabel,
10
+ onClickPrevStep,
11
+ onClickStep,
12
+ }), [
13
+ activeStep,
14
+ orientation,
15
+ connector,
16
+ alternativeLabel,
17
+ onClickPrevStep,
18
+ onClickStep,
19
+ ]);
20
+ return (_jsx(StepperContext.Provider, { value: contextValue, children: children }));
21
+ };
@@ -0,0 +1 @@
1
+ export * from './StepperContextProvider';
@@ -0,0 +1 @@
1
+ export * from './StepperContextProvider';
@@ -0,0 +1,2 @@
1
+ export * from './StepperContext';
2
+ export * from './StepperContextProvider';
@@ -0,0 +1,2 @@
1
+ export * from './StepperContext';
2
+ export * from './StepperContextProvider';
@@ -0,0 +1,13 @@
1
+ export declare const stepperClassnames: {
2
+ root: string;
3
+ lineConnector: string;
4
+ arrowConnector: string;
5
+ orientationHorizontal: string;
6
+ orientationVertical: string;
7
+ alternativeLabel: string;
8
+ };
9
+ export declare const STEPPER_ORDER_COUNTER_NAME = "astral-ui-stepper-order";
10
+ /**
11
+ * Задержка перед scrollIntoView после смены activeStep, что бы анимация появления текста завершилась
12
+ */
13
+ export declare const MOBILE_ACTIVE_STEP_SCROLL_DEFER_MS = 300;
@@ -0,0 +1,14 @@
1
+ import { createUIKitClassname } from '../utils/createUIKitClassname';
2
+ export const stepperClassnames = {
3
+ root: createUIKitClassname('stepper'),
4
+ lineConnector: createUIKitClassname('stepper_connector-line'),
5
+ arrowConnector: createUIKitClassname('stepper_connector-arrow'),
6
+ orientationHorizontal: createUIKitClassname('stepper_orientation-horizontal'),
7
+ orientationVertical: createUIKitClassname('stepper_orientation-vertical'),
8
+ alternativeLabel: createUIKitClassname('stepper_alternative-label'),
9
+ };
10
+ export const STEPPER_ORDER_COUNTER_NAME = 'astral-ui-stepper-order';
11
+ /**
12
+ * Задержка перед scrollIntoView после смены activeStep, что бы анимация появления текста завершилась
13
+ */
14
+ export const MOBILE_ACTIVE_STEP_SCROLL_DEFER_MS = 300;
@@ -0,0 +1,4 @@
1
+ export { NewStepper } from './NewStepper';
2
+ export { Step, type StepProps, stepClassnames } from './Step';
3
+ export type { StepperProps } from './types';
4
+ export { stepIconClassnames } from './StepIcon';
@@ -0,0 +1,3 @@
1
+ export { NewStepper } from './NewStepper';
2
+ export { Step, stepClassnames } from './Step';
3
+ export { stepIconClassnames } from './StepIcon';
@@ -0,0 +1,4 @@
1
+ export { NewStepper } from './NewStepper';
2
+ export { Step, type StepProps, stepClassnames } from './Step';
3
+ export { stepIconClassnames } from './StepIcon';
4
+ export type { StepperProps } from './types';
@@ -0,0 +1,3 @@
1
+ export { NewStepper } from './NewStepper';
2
+ export { Step, stepClassnames } from './Step';
3
+ export { stepIconClassnames } from './StepIcon';
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare const Wrapper: import("../styled").StyledComponent<{
3
+ theme?: import("@emotion/react").Theme | undefined;
4
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
5
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -0,0 +1,44 @@
1
+ import { styled } from '../styled';
2
+ import { STEPPER_ORDER_COUNTER_NAME, stepperClassnames } from './constants';
3
+ export const Wrapper = styled.div `
4
+ counter-reset: ${STEPPER_ORDER_COUNTER_NAME} 0;
5
+
6
+ display: flex;
7
+ align-items: flex-start;
8
+
9
+ &.${stepperClassnames.orientationHorizontal} {
10
+ flex-direction: row;
11
+
12
+ &.${stepperClassnames.arrowConnector} {
13
+ align-items: center;
14
+ }
15
+
16
+ &.${stepperClassnames.lineConnector} {
17
+ &:not(.${stepperClassnames.alternativeLabel}) {
18
+ align-items: center;
19
+ }
20
+ }
21
+ }
22
+
23
+ &.${stepperClassnames.orientationVertical} {
24
+ flex-direction: column;
25
+
26
+ &.${stepperClassnames.lineConnector} {
27
+ gap: ${({ theme }) => theme.microSpacing(1)};
28
+ }
29
+ }
30
+
31
+ ${({ theme }) => theme.breakpoints.down('sm')} {
32
+ /* Убираем видимую полосу прокрутки в firefox */
33
+ scrollbar-width: none;
34
+
35
+ overflow-x: auto;
36
+
37
+ width: 100%;
38
+
39
+ /* Убираем видимую полосу прокрутки в chrome */
40
+ &::-webkit-scrollbar {
41
+ display: none;
42
+ }
43
+ }
44
+ `;
@@ -0,0 +1,33 @@
1
+ import type { ReactNode } from 'react';
2
+ export type StepperProps = {
3
+ activeStep?: number;
4
+ className?: string;
5
+ /**
6
+ * Тип соединителя между шагами
7
+ */
8
+ connector?: 'arrow' | 'line';
9
+ orientation?: 'horizontal' | 'vertical';
10
+ /**
11
+ * Отображение названия шага под иконкой
12
+ *
13
+ * Работает только с `orientation="horizontal"` и типом `connector: "line"`.
14
+ */
15
+ alternativeLabel?: boolean;
16
+ /**
17
+ * Функция вызываемая при клике на предыдущий шаг. Делает кликабельными только предыдущие шаги.
18
+ */
19
+ onClickPrevStep?: (index: number) => void;
20
+ /**
21
+ * Функция вызываемая при клике на шаг. Делает все шаги кликабельными.
22
+ */
23
+ onClickStep?: (index: number) => void;
24
+ /**
25
+ * @example
26
+ * <NewStepper>
27
+ * <Step label="Step 1" stepId={1} />
28
+ * <Step label="Step 2" stepId={2} />
29
+ * <Step label="Step 3" stepId={3} />
30
+ * </NewStepper>
31
+ */
32
+ children: ReactNode;
33
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from './useLogic';
@@ -0,0 +1 @@
1
+ export * from './useLogic';
@@ -0,0 +1,15 @@
1
+ /// <reference types="react" />
2
+ import type { StepperProps } from '../types';
3
+ type UseLogicParams = StepperProps;
4
+ export declare const useLogic: ({ orientation, connector, alternativeLabel, activeStep, onClickPrevStep, onClickStep, className, children, }: UseLogicParams) => {
5
+ containerRef: import("react").RefObject<HTMLDivElement | null>;
6
+ stepperConnector: "line" | "arrow";
7
+ stepperAlternativeLabel: boolean;
8
+ activeStep: number;
9
+ onClickPrevStep: ((index: number) => void) | undefined;
10
+ orientation: "horizontal" | "vertical";
11
+ onClickStep: ((index: number) => void) | undefined;
12
+ className: string | undefined;
13
+ children: import("react").ReactNode;
14
+ };
15
+ export {};
@@ -0,0 +1,47 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { useViewportType } from '../../useViewportType';
3
+ import { MOBILE_ACTIVE_STEP_SCROLL_DEFER_MS } from '../constants';
4
+ import { validateStepperProps } from './utils';
5
+ export const useLogic = ({ orientation = 'horizontal', connector = 'line', alternativeLabel = false, activeStep = 0, onClickPrevStep, onClickStep, className, children, }) => {
6
+ useEffect(() => {
7
+ validateStepperProps({ orientation, connector, alternativeLabel });
8
+ }, []);
9
+ const { isMobile } = useViewportType();
10
+ // На разрешении sm и ниже connector line + alternativeLabel выглядит как connector arrow без alternativeLabel
11
+ const isMobileDisplayStepper = isMobile && orientation === 'horizontal' && connector === 'line';
12
+ const stepperConnector = isMobileDisplayStepper ? 'arrow' : connector;
13
+ const stepperAlternativeLabel = isMobileDisplayStepper
14
+ ? false
15
+ : alternativeLabel;
16
+ const containerRef = useRef(null);
17
+ useEffect(() => {
18
+ if (!isMobile || !containerRef.current) {
19
+ return;
20
+ }
21
+ const container = containerRef.current;
22
+ const runScroll = () => {
23
+ const activeStepElement = container.querySelector('[data-active-step="true"]');
24
+ if (activeStepElement) {
25
+ activeStepElement.scrollIntoView({
26
+ behavior: 'smooth',
27
+ block: 'nearest',
28
+ inline: 'center',
29
+ });
30
+ }
31
+ };
32
+ setTimeout(() => {
33
+ runScroll();
34
+ }, MOBILE_ACTIVE_STEP_SCROLL_DEFER_MS);
35
+ }, [activeStep, isMobile, orientation]);
36
+ return {
37
+ containerRef,
38
+ stepperConnector,
39
+ stepperAlternativeLabel,
40
+ activeStep,
41
+ onClickPrevStep,
42
+ orientation,
43
+ onClickStep,
44
+ className,
45
+ children,
46
+ };
47
+ };
@@ -0,0 +1 @@
1
+ export * from './validateStepperProps';
@@ -0,0 +1 @@
1
+ export * from './validateStepperProps';
@@ -0,0 +1 @@
1
+ export * from './validateStepperProps';
@@ -0,0 +1 @@
1
+ export * from './validateStepperProps';
@@ -0,0 +1,5 @@
1
+ /** biome-ignore-all lint/suspicious/noConsole: Сообщение для интеграторов */
2
+ import type { StepperProps } from '../../../types';
3
+ type ValidateStepperPropsParams = Pick<StepperProps, 'orientation' | 'connector' | 'alternativeLabel'>;
4
+ export declare const validateStepperProps: ({ orientation, connector, alternativeLabel, }: ValidateStepperPropsParams) => void;
5
+ export {};
@@ -0,0 +1,16 @@
1
+ const VALID_COMBINATIONS = [
2
+ { orientation: 'horizontal', connector: 'line', alternativeLabel: true },
3
+ { orientation: 'vertical', connector: 'line', alternativeLabel: false },
4
+ { orientation: 'horizontal', connector: 'arrow', alternativeLabel: false },
5
+ ];
6
+ export const validateStepperProps = ({ orientation, connector, alternativeLabel, }) => {
7
+ const isValid = VALID_COMBINATIONS.some((combo) => combo.orientation === orientation &&
8
+ combo.connector === connector &&
9
+ combo.alternativeLabel === alternativeLabel);
10
+ if (!isValid) {
11
+ console.error('Stepper: Неподдерживаемая комбинация параметров. Допустимые варианты:\n' +
12
+ '1) orientation="horizontal", connector="line", alternativeLabel=true\n' +
13
+ '2) orientation="vertical", connector="line", alternativeLabel=false\n' +
14
+ '3) orientation="horizontal", connector="arrow", alternativeLabel=false');
15
+ }
16
+ };
@@ -8,5 +8,8 @@ type ConnectorProp = `${ConnectorTypes}` | ReactElement<StepConnectorProps> | nu
8
8
  export type StepperProps = Omit<StepperPropsWithoutEmotionSpecific, 'connector'> & {
9
9
  connector?: ConnectorProp;
10
10
  };
11
+ /**
12
+ * @deprecated Причина отказа от поддержки: Отказ от MUI. Используйте компонент `NewStepper`.
13
+ */
11
14
  export declare const Stepper: (props: StepperProps) => import("react/jsx-runtime").JSX.Element;
12
15
  export {};
@@ -2,6 +2,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useMemo } from 'react';
3
3
  import { ArrowConnector } from './ArrowConnector';
4
4
  import { StyledStepper } from './styles';
5
+ /**
6
+ * @deprecated Причина отказа от поддержки: Отказ от MUI. Используйте компонент `NewStepper`.
7
+ */
5
8
  export const Stepper = (props) => {
6
9
  const { connector, ...restProps } = props;
7
10
  const connectorMemo = useMemo(() => {
@@ -1,2 +1,5 @@
1
1
  import { type StepperWizardProps } from './types';
2
+ /**
3
+ * @deprecated Причина отказа от поддержки: Отказ от MUI. Используйте компонент `NewStepper`.
4
+ */
2
5
  export declare const StepperWizard: (props: StepperWizardProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Step, StepButton, StepLabel, Stepper } from '../Stepper';
3
3
  import { useLogic } from './useLogic';
4
+ /**
5
+ * @deprecated Причина отказа от поддержки: Отказ от MUI. Используйте компонент `NewStepper`.
6
+ */
4
7
  export const StepperWizard = (props) => {
5
8
  const { clickableSteps, normalSteps, getStepButtonProps, getStepLabelProps } = useLogic(props);
6
9
  const { steps, onClickPrevStep, ...stepperProps } = props;
@@ -6,7 +6,7 @@ import { useTypographyColor } from './hooks';
6
6
  import { TypographyWrapper } from './styles';
7
7
  export const Typography = forwardRef(({ children, color, colorIntensity = '800', component, withoutCalt, className, ...props }, ref) => {
8
8
  const typographyColor = useTypographyColor({ color, colorIntensity });
9
- return (_jsx(TypographyWrapper, { ref: ref, ...props, component: component, color: typographyColor, className: classNames(className, {
9
+ return (_jsx(TypographyWrapper, { ref: ref, ...props, component: component, color: typographyColor, className: classNames(typographyClassnames.root, className, {
10
10
  [typographyClassnames.withoutCalt]: withoutCalt,
11
11
  }), children: children }));
12
12
  });
@@ -1,3 +1,4 @@
1
1
  export declare const typographyClassnames: {
2
+ root: string;
2
3
  withoutCalt: string;
3
4
  };
@@ -1,3 +1,5 @@
1
+ import { createUIKitClassname } from '../utils/createUIKitClassname';
1
2
  export const typographyClassnames = {
3
+ root: createUIKitClassname('typography'),
2
4
  withoutCalt: 'typography_without-calt',
3
5
  };
@@ -1,14 +1,15 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { ContentState } from '../../components/ContentState';
3
+ import { Step } from '../../components/NewStepper';
3
4
  import { Form } from '../Form';
4
5
  import { Footer } from './Footer';
5
- import { BeforeContentWrapper, FormContent, StyledStepperWizard, Wrapper, } from './styles';
6
+ import { BeforeContentWrapper, FormContent, StyledNewStepper, Wrapper, } from './styles';
6
7
  import { useLogic } from './useLogic';
7
8
  /**
8
9
  * FormWizard предназначен для построения форм со степпером.
9
10
  */
10
11
  export const FormWizard = (props) => {
11
- const { Component, footerProps, stepWizardProps } = useLogic(props);
12
+ const { Component, footerProps, activeStep, steps } = useLogic(props);
12
13
  const { className, isFirstStep, isLastStep, isDisabled, isLoading, isError, form, customFooter, errorMsg, onRetry, onClickStep, onPrevStep, onSubmit, onSubmitError, beforeContent, } = props;
13
14
  const renderFooter = () => {
14
15
  if (customFooter) {
@@ -22,7 +23,7 @@ export const FormWizard = (props) => {
22
23
  }
23
24
  return (_jsx(Footer, { isDisabled: isDisabled, isFirstStep: isFirstStep, isLastStep: isLastStep, onPrevStep: onPrevStep, ...footerProps }));
24
25
  };
25
- return (_jsxs(Wrapper, { className: className, children: [beforeContent && (_jsx(BeforeContentWrapper, { children: beforeContent })), _jsx(StyledStepperWizard, { connector: "arrow", onClickPrevStep: onClickStep, ...stepWizardProps }), _jsx(ContentState, { isLoading: isLoading, isError: isError,
26
+ return (_jsxs(Wrapper, { className: className, children: [beforeContent && (_jsx(BeforeContentWrapper, { children: beforeContent })), _jsx(StyledNewStepper, { connector: "arrow", onClickPrevStep: onClickStep, activeStep: activeStep, children: steps.map((step) => (_jsx(Step, { ...step }, step.stepId))) }), _jsx(ContentState, { isLoading: isLoading, isError: isError,
26
27
  // biome-ignore lint/suspicious/noTsIgnore: onRetry не требуется, если форма не инициализируется данными, получаемыми с backend
27
28
  // @ts-ignore
28
29
  errorState: { errorList: [errorMsg || ''], onRetry }, children: _jsxs(Form, { form: form, isDisabled: isDisabled, onSubmit: form.handleSubmit(onSubmit, onSubmitError), children: [_jsx(FormContent, { children: _jsx(Component, {}) }), renderFooter()] }) })] }));