@cloud-ru/ds-stepper 1.0.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 (124) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +214 -0
  4. package/dist/cjs/components/Stepper/Stepper.d.ts +10 -0
  5. package/dist/cjs/components/Stepper/Stepper.js +17 -0
  6. package/dist/cjs/components/Stepper/index.d.ts +1 -0
  7. package/dist/cjs/components/Stepper/index.js +17 -0
  8. package/dist/cjs/components/index.d.ts +1 -0
  9. package/dist/cjs/components/index.js +20 -0
  10. package/dist/cjs/constants.d.ts +16 -0
  11. package/dist/cjs/constants.js +25 -0
  12. package/dist/cjs/context.d.ts +3 -0
  13. package/dist/cjs/context.js +18 -0
  14. package/dist/cjs/helperComponents/DesktopStep/DesktopStep.d.ts +12 -0
  15. package/dist/cjs/helperComponents/DesktopStep/DesktopStep.js +25 -0
  16. package/dist/cjs/helperComponents/DesktopStep/index.d.ts +1 -0
  17. package/dist/cjs/helperComponents/DesktopStep/index.js +17 -0
  18. package/dist/cjs/helperComponents/DesktopStep/styles.module.css +169 -0
  19. package/dist/cjs/helperComponents/DesktopStepper/DesktopStepper.d.ts +5 -0
  20. package/dist/cjs/helperComponents/DesktopStepper/DesktopStepper.js +35 -0
  21. package/dist/cjs/helperComponents/DesktopStepper/index.d.ts +1 -0
  22. package/dist/cjs/helperComponents/DesktopStepper/index.js +17 -0
  23. package/dist/cjs/helperComponents/DesktopStepper/styles.module.css +6 -0
  24. package/dist/cjs/helperComponents/MobileStep/MobileStep.d.ts +8 -0
  25. package/dist/cjs/helperComponents/MobileStep/MobileStep.js +28 -0
  26. package/dist/cjs/helperComponents/MobileStep/index.d.ts +1 -0
  27. package/dist/cjs/helperComponents/MobileStep/index.js +17 -0
  28. package/dist/cjs/helperComponents/MobileStep/styles.module.css +114 -0
  29. package/dist/cjs/helperComponents/MobileStepper/MobileStepper.d.ts +5 -0
  30. package/dist/cjs/helperComponents/MobileStepper/MobileStepper.js +37 -0
  31. package/dist/cjs/helperComponents/MobileStepper/index.d.ts +1 -0
  32. package/dist/cjs/helperComponents/MobileStepper/index.js +17 -0
  33. package/dist/cjs/helperComponents/MobileStepper/styles.module.css +32 -0
  34. package/dist/cjs/helperComponents/StepIcon/StepIcon.d.ts +10 -0
  35. package/dist/cjs/helperComponents/StepIcon/StepIcon.js +30 -0
  36. package/dist/cjs/helperComponents/StepIcon/index.d.ts +1 -0
  37. package/dist/cjs/helperComponents/StepIcon/index.js +17 -0
  38. package/dist/cjs/helperComponents/StepIcon/styles.module.css +35 -0
  39. package/dist/cjs/helperComponents/index.d.ts +5 -0
  40. package/dist/cjs/helperComponents/index.js +21 -0
  41. package/dist/cjs/hooks/useStepperController.d.ts +25 -0
  42. package/dist/cjs/hooks/useStepperController.js +124 -0
  43. package/dist/cjs/index.d.ts +5 -0
  44. package/dist/cjs/index.js +21 -0
  45. package/dist/cjs/package.json +3 -0
  46. package/dist/cjs/style.css +356 -0
  47. package/dist/cjs/types.d.ts +51 -0
  48. package/dist/cjs/types.js +2 -0
  49. package/dist/cjs/utils.d.ts +6 -0
  50. package/dist/cjs/utils.js +10 -0
  51. package/dist/esm/components/Stepper/Stepper.d.ts +10 -0
  52. package/dist/esm/components/Stepper/Stepper.js +14 -0
  53. package/dist/esm/components/Stepper/index.d.ts +1 -0
  54. package/dist/esm/components/Stepper/index.js +1 -0
  55. package/dist/esm/components/index.d.ts +1 -0
  56. package/dist/esm/components/index.js +4 -0
  57. package/dist/esm/constants.d.ts +16 -0
  58. package/dist/esm/constants.js +20 -0
  59. package/dist/esm/context.d.ts +3 -0
  60. package/dist/esm/context.js +14 -0
  61. package/dist/esm/helperComponents/DesktopStep/DesktopStep.d.ts +12 -0
  62. package/dist/esm/helperComponents/DesktopStep/DesktopStep.js +19 -0
  63. package/dist/esm/helperComponents/DesktopStep/index.d.ts +1 -0
  64. package/dist/esm/helperComponents/DesktopStep/index.js +1 -0
  65. package/dist/esm/helperComponents/DesktopStep/styles.module.css +169 -0
  66. package/dist/esm/helperComponents/DesktopStepper/DesktopStepper.d.ts +5 -0
  67. package/dist/esm/helperComponents/DesktopStepper/DesktopStepper.js +29 -0
  68. package/dist/esm/helperComponents/DesktopStepper/index.d.ts +1 -0
  69. package/dist/esm/helperComponents/DesktopStepper/index.js +1 -0
  70. package/dist/esm/helperComponents/DesktopStepper/styles.module.css +6 -0
  71. package/dist/esm/helperComponents/MobileStep/MobileStep.d.ts +8 -0
  72. package/dist/esm/helperComponents/MobileStep/MobileStep.js +22 -0
  73. package/dist/esm/helperComponents/MobileStep/index.d.ts +1 -0
  74. package/dist/esm/helperComponents/MobileStep/index.js +1 -0
  75. package/dist/esm/helperComponents/MobileStep/styles.module.css +114 -0
  76. package/dist/esm/helperComponents/MobileStepper/MobileStepper.d.ts +5 -0
  77. package/dist/esm/helperComponents/MobileStepper/MobileStepper.js +31 -0
  78. package/dist/esm/helperComponents/MobileStepper/index.d.ts +1 -0
  79. package/dist/esm/helperComponents/MobileStepper/index.js +1 -0
  80. package/dist/esm/helperComponents/MobileStepper/styles.module.css +32 -0
  81. package/dist/esm/helperComponents/StepIcon/StepIcon.d.ts +10 -0
  82. package/dist/esm/helperComponents/StepIcon/StepIcon.js +24 -0
  83. package/dist/esm/helperComponents/StepIcon/index.d.ts +1 -0
  84. package/dist/esm/helperComponents/StepIcon/index.js +1 -0
  85. package/dist/esm/helperComponents/StepIcon/styles.module.css +35 -0
  86. package/dist/esm/helperComponents/index.d.ts +5 -0
  87. package/dist/esm/helperComponents/index.js +5 -0
  88. package/dist/esm/hooks/useStepperController.d.ts +25 -0
  89. package/dist/esm/hooks/useStepperController.js +121 -0
  90. package/dist/esm/index.d.ts +5 -0
  91. package/dist/esm/index.js +5 -0
  92. package/dist/esm/style.css +356 -0
  93. package/dist/esm/types.d.ts +51 -0
  94. package/dist/esm/types.js +1 -0
  95. package/dist/esm/utils.d.ts +6 -0
  96. package/dist/esm/utils.js +6 -0
  97. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  98. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  99. package/package.json +47 -0
  100. package/src/components/Stepper/Stepper.tsx +18 -0
  101. package/src/components/Stepper/index.ts +1 -0
  102. package/src/components/index.ts +4 -0
  103. package/src/constants.ts +23 -0
  104. package/src/context.tsx +18 -0
  105. package/src/helperComponents/DesktopStep/DesktopStep.tsx +73 -0
  106. package/src/helperComponents/DesktopStep/index.ts +1 -0
  107. package/src/helperComponents/DesktopStep/styles.module.scss +103 -0
  108. package/src/helperComponents/DesktopStepper/DesktopStepper.tsx +52 -0
  109. package/src/helperComponents/DesktopStepper/index.ts +1 -0
  110. package/src/helperComponents/DesktopStepper/styles.module.scss +6 -0
  111. package/src/helperComponents/MobileStep/MobileStep.tsx +46 -0
  112. package/src/helperComponents/MobileStep/index.ts +1 -0
  113. package/src/helperComponents/MobileStep/styles.module.scss +156 -0
  114. package/src/helperComponents/MobileStepper/MobileStepper.tsx +71 -0
  115. package/src/helperComponents/MobileStepper/index.ts +1 -0
  116. package/src/helperComponents/MobileStepper/styles.module.scss +36 -0
  117. package/src/helperComponents/StepIcon/StepIcon.tsx +47 -0
  118. package/src/helperComponents/StepIcon/index.ts +1 -0
  119. package/src/helperComponents/StepIcon/styles.module.scss +54 -0
  120. package/src/helperComponents/index.ts +5 -0
  121. package/src/hooks/useStepperController.ts +201 -0
  122. package/src/index.ts +5 -0
  123. package/src/types.ts +59 -0
  124. package/src/utils.ts +9 -0
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './components';
2
+ export * from './constants';
3
+ export * from './context';
4
+ export * from './types';
5
+ export * from './utils';
package/src/types.ts ADDED
@@ -0,0 +1,59 @@
1
+ import { ValueOf } from '@cloud-ru/ds-utils';
2
+ import { ReactElement } from 'react';
3
+
4
+ import { STEP_STATE } from './constants';
5
+
6
+ export type StepState = ValueOf<typeof STEP_STATE>;
7
+
8
+ export type StepsValidator = (prevStepIndex: number, newStepIndex: number) => Promise<boolean>;
9
+
10
+ export type StepData = {
11
+ title: string;
12
+ description?: string;
13
+ };
14
+
15
+ export type StepViewData = StepData & {
16
+ onClick?: () => void;
17
+ state: StepState;
18
+ number: number;
19
+ };
20
+
21
+ export type StepperApi = {
22
+ stepper: ReactElement;
23
+ goNext: (stepIndex?: number) => void;
24
+ goPrev: (stepIndex?: number) => void;
25
+ resetValidation: () => void;
26
+ setValidator: (validator: StepsValidator) => void;
27
+ isCompleted: boolean;
28
+ currentStepIndex: number;
29
+ stepCount: number;
30
+ };
31
+
32
+ /** Псевдоним `StepperApi` для обратной совместимости. */
33
+ export type StepperState = StepperApi;
34
+
35
+ /** Публичные пропсы адаптивного `Stepper` (единые для desktop/mobile поверхностей). */
36
+ export type StepperProps = {
37
+ /** Массив шагов */
38
+ steps: StepData[];
39
+ /** Индекс текущего шага по-дефолту */
40
+ defaultCurrentStepIndex?: number;
41
+ /** Валидатор шагов. Выполняется при смене шага. Принимает первым аргументом индекс текущего, вторым — индекс нового шага. Возвращает Promise<boolean>: false → шаг помечается как Rejected. */
42
+ validator?: StepsValidator;
43
+ /** CSS-класс */
44
+ className?: string;
45
+ /**
46
+ * Render function. Принимает `stepper` — JSX-элемент степпера, а также api:
47
+ * `goNext`, `goPrev`, `resetValidation`, `setValidator`, `isCompleted`,
48
+ * `currentStepIndex`, `stepCount`.
49
+ */
50
+ children: (params: StepperApi) => ReactElement;
51
+ /** Колбек смены текущего степа */
52
+ onChangeCurrentStep?: (newValue: number, prevValue: number) => void;
53
+ /** Колбек изменения завершённости */
54
+ onCompleteChange?: (isCompleted: boolean) => void;
55
+ /** data-test-id */
56
+ 'data-test-id'?: string;
57
+ /** Позволяет свободно переключаться между разными шагами без валидации */
58
+ allowFreeNavigation?: boolean;
59
+ };
package/src/utils.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Собирает data-test-id для вложенных элементов: `${root}${postfix}`.
3
+ * Возвращает undefined если либо postfix, либо testId пустые — так родитель
4
+ * может передать атрибут только когда сам получил тест-ид.
5
+ */
6
+ export const getTestIdBuilder =
7
+ (postfix?: string) =>
8
+ (testId?: string): string | undefined =>
9
+ postfix && testId ? `${testId}${postfix}` : undefined;