@salt-ds/lab 1.0.0-alpha.61 → 1.0.0-alpha.63

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 (250) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/css/salt-lab.css +623 -324
  3. package/dist-cjs/date-picker/DatePicker.js +4 -3
  4. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  5. package/dist-cjs/date-picker/DatePickerActions.js +1 -1
  6. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
  7. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  8. package/dist-cjs/date-picker/DatePickerOverlay.js +0 -4
  9. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
  10. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +65 -43
  11. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  12. package/dist-cjs/date-picker/DatePickerRangeInput.js +10 -26
  13. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  14. package/dist-cjs/date-picker/DatePickerSingleInput.js +8 -14
  15. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  16. package/dist-cjs/date-picker/useDatePicker.js +10 -7
  17. package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
  18. package/dist-cjs/date-picker/useKeyboard.js +23 -0
  19. package/dist-cjs/date-picker/useKeyboard.js.map +1 -0
  20. package/dist-cjs/index.js +19 -8
  21. package/dist-cjs/index.js.map +1 -1
  22. package/dist-cjs/number-input/NumberInput.css.js +6 -0
  23. package/dist-cjs/number-input/NumberInput.css.js.map +1 -0
  24. package/dist-cjs/{stepper-input/StepperInput.js → number-input/NumberInput.js} +15 -15
  25. package/dist-cjs/number-input/NumberInput.js.map +1 -0
  26. package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js.map +1 -0
  27. package/dist-cjs/number-input/internal/useInterval.js.map +1 -0
  28. package/dist-cjs/number-input/internal/utils.js.map +1 -0
  29. package/dist-cjs/{stepper-input/useStepperInput.js → number-input/useNumberInput.js} +3 -3
  30. package/dist-cjs/number-input/useNumberInput.js.map +1 -0
  31. package/dist-cjs/slider/RangeSlider.js +161 -0
  32. package/dist-cjs/slider/RangeSlider.js.map +1 -0
  33. package/dist-cjs/slider/Slider.js +104 -70
  34. package/dist-cjs/slider/Slider.js.map +1 -1
  35. package/dist-cjs/slider/internal/SliderThumb.css.js +6 -0
  36. package/dist-cjs/slider/internal/SliderThumb.css.js.map +1 -0
  37. package/dist-cjs/slider/internal/SliderThumb.js +136 -70
  38. package/dist-cjs/slider/internal/SliderThumb.js.map +1 -1
  39. package/dist-cjs/slider/internal/SliderTooltip.css.js +6 -0
  40. package/dist-cjs/slider/internal/SliderTooltip.css.js.map +1 -0
  41. package/dist-cjs/slider/internal/SliderTooltip.js +43 -0
  42. package/dist-cjs/slider/internal/SliderTooltip.js.map +1 -0
  43. package/dist-cjs/slider/internal/SliderTrack.css.js +6 -0
  44. package/dist-cjs/slider/internal/SliderTrack.css.js.map +1 -0
  45. package/dist-cjs/slider/internal/SliderTrack.js +160 -80
  46. package/dist-cjs/slider/internal/SliderTrack.js.map +1 -1
  47. package/dist-cjs/slider/internal/useRangeSliderThumb.js +194 -0
  48. package/dist-cjs/slider/internal/useRangeSliderThumb.js.map +1 -0
  49. package/dist-cjs/slider/internal/useSliderThumb.js +123 -0
  50. package/dist-cjs/slider/internal/useSliderThumb.js.map +1 -0
  51. package/dist-cjs/slider/internal/utils.js +97 -72
  52. package/dist-cjs/slider/internal/utils.js.map +1 -1
  53. package/dist-cjs/splitter/SplitHandle.css.js +6 -0
  54. package/dist-cjs/splitter/SplitHandle.css.js.map +1 -0
  55. package/dist-cjs/splitter/SplitHandle.js +60 -0
  56. package/dist-cjs/splitter/SplitHandle.js.map +1 -0
  57. package/dist-cjs/splitter/SplitPanel.css.js +6 -0
  58. package/dist-cjs/splitter/SplitPanel.css.js.map +1 -0
  59. package/dist-cjs/splitter/SplitPanel.js +37 -0
  60. package/dist-cjs/splitter/SplitPanel.js.map +1 -0
  61. package/dist-cjs/splitter/Splitter.js +31 -0
  62. package/dist-cjs/splitter/Splitter.js.map +1 -0
  63. package/dist-cjs/splitter/utils.js +18 -0
  64. package/dist-cjs/splitter/utils.js.map +1 -0
  65. package/dist-cjs/stepped-tracker/stepReducer.js +127 -81
  66. package/dist-cjs/stepped-tracker/stepReducer.js.map +1 -1
  67. package/dist-cjs/stepped-tracker/useStepReducer.js +6 -4
  68. package/dist-cjs/stepped-tracker/useStepReducer.js.map +1 -1
  69. package/dist-cjs/stepped-tracker/utils.js +44 -9
  70. package/dist-cjs/stepped-tracker/utils.js.map +1 -1
  71. package/dist-cjs/tabs-next/TabListNext.css.js +1 -1
  72. package/dist-cjs/tabs-next/TabListNext.js +10 -16
  73. package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
  74. package/dist-cjs/tabs-next/TabOverflowList.css.js +1 -1
  75. package/dist-cjs/tabs-next/TabOverflowList.js +3 -2
  76. package/dist-cjs/tabs-next/TabOverflowList.js.map +1 -1
  77. package/dist-cjs/tabs-next/TabsNext.js +4 -51
  78. package/dist-cjs/tabs-next/TabsNext.js.map +1 -1
  79. package/dist-cjs/tabs-next/TabsNextContext.js +1 -1
  80. package/dist-cjs/tabs-next/TabsNextContext.js.map +1 -1
  81. package/dist-cjs/tabs-next/hooks/useCollection.js.map +1 -1
  82. package/dist-cjs/tabs-next/hooks/useOverflow.js +48 -5
  83. package/dist-cjs/tabs-next/hooks/useOverflow.js.map +1 -1
  84. package/dist-cjs/tabs-next/hooks/useRestoreActiveTab.js +93 -0
  85. package/dist-cjs/tabs-next/hooks/useRestoreActiveTab.js.map +1 -0
  86. package/dist-es/date-picker/DatePicker.js +4 -3
  87. package/dist-es/date-picker/DatePicker.js.map +1 -1
  88. package/dist-es/date-picker/DatePickerActions.js +1 -1
  89. package/dist-es/date-picker/DatePickerActions.js.map +1 -1
  90. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  91. package/dist-es/date-picker/DatePickerOverlay.js +0 -4
  92. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
  93. package/dist-es/date-picker/DatePickerOverlayProvider.js +67 -45
  94. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  95. package/dist-es/date-picker/DatePickerRangeInput.js +10 -26
  96. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  97. package/dist-es/date-picker/DatePickerSingleInput.js +8 -14
  98. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  99. package/dist-es/date-picker/useDatePicker.js +10 -7
  100. package/dist-es/date-picker/useDatePicker.js.map +1 -1
  101. package/dist-es/date-picker/useKeyboard.js +21 -0
  102. package/dist-es/date-picker/useKeyboard.js.map +1 -0
  103. package/dist-es/index.js +9 -4
  104. package/dist-es/index.js.map +1 -1
  105. package/dist-es/number-input/NumberInput.css.js +4 -0
  106. package/dist-es/number-input/NumberInput.css.js.map +1 -0
  107. package/dist-es/{stepper-input/StepperInput.js → number-input/NumberInput.js} +14 -14
  108. package/dist-es/number-input/NumberInput.js.map +1 -0
  109. package/dist-es/number-input/internal/useActivateWhileMouseDown.js.map +1 -0
  110. package/dist-es/number-input/internal/useInterval.js.map +1 -0
  111. package/dist-es/number-input/internal/utils.js.map +1 -0
  112. package/dist-es/{stepper-input/useStepperInput.js → number-input/useNumberInput.js} +3 -3
  113. package/dist-es/number-input/useNumberInput.js.map +1 -0
  114. package/dist-es/slider/RangeSlider.js +159 -0
  115. package/dist-es/slider/RangeSlider.js.map +1 -0
  116. package/dist-es/slider/Slider.js +107 -73
  117. package/dist-es/slider/Slider.js.map +1 -1
  118. package/dist-es/slider/internal/SliderThumb.css.js +4 -0
  119. package/dist-es/slider/internal/SliderThumb.css.js.map +1 -0
  120. package/dist-es/slider/internal/SliderThumb.js +138 -72
  121. package/dist-es/slider/internal/SliderThumb.js.map +1 -1
  122. package/dist-es/slider/internal/SliderTooltip.css.js +4 -0
  123. package/dist-es/slider/internal/SliderTooltip.css.js.map +1 -0
  124. package/dist-es/slider/internal/SliderTooltip.js +41 -0
  125. package/dist-es/slider/internal/SliderTooltip.js.map +1 -0
  126. package/dist-es/slider/internal/SliderTrack.css.js +4 -0
  127. package/dist-es/slider/internal/SliderTrack.css.js.map +1 -0
  128. package/dist-es/slider/internal/SliderTrack.js +164 -84
  129. package/dist-es/slider/internal/SliderTrack.js.map +1 -1
  130. package/dist-es/slider/internal/useRangeSliderThumb.js +192 -0
  131. package/dist-es/slider/internal/useRangeSliderThumb.js.map +1 -0
  132. package/dist-es/slider/internal/useSliderThumb.js +121 -0
  133. package/dist-es/slider/internal/useSliderThumb.js.map +1 -0
  134. package/dist-es/slider/internal/utils.js +91 -63
  135. package/dist-es/slider/internal/utils.js.map +1 -1
  136. package/dist-es/splitter/SplitHandle.css.js +4 -0
  137. package/dist-es/splitter/SplitHandle.css.js.map +1 -0
  138. package/dist-es/splitter/SplitHandle.js +58 -0
  139. package/dist-es/splitter/SplitHandle.js.map +1 -0
  140. package/dist-es/splitter/SplitPanel.css.js +4 -0
  141. package/dist-es/splitter/SplitPanel.css.js.map +1 -0
  142. package/dist-es/splitter/SplitPanel.js +35 -0
  143. package/dist-es/splitter/SplitPanel.js.map +1 -0
  144. package/dist-es/splitter/Splitter.js +27 -0
  145. package/dist-es/splitter/Splitter.js.map +1 -0
  146. package/dist-es/splitter/utils.js +15 -0
  147. package/dist-es/splitter/utils.js.map +1 -0
  148. package/dist-es/stepped-tracker/stepReducer.js +128 -82
  149. package/dist-es/stepped-tracker/stepReducer.js.map +1 -1
  150. package/dist-es/stepped-tracker/useStepReducer.js +7 -5
  151. package/dist-es/stepped-tracker/useStepReducer.js.map +1 -1
  152. package/dist-es/stepped-tracker/utils.js +43 -9
  153. package/dist-es/stepped-tracker/utils.js.map +1 -1
  154. package/dist-es/tabs-next/TabListNext.css.js +1 -1
  155. package/dist-es/tabs-next/TabListNext.js +11 -17
  156. package/dist-es/tabs-next/TabListNext.js.map +1 -1
  157. package/dist-es/tabs-next/TabOverflowList.css.js +1 -1
  158. package/dist-es/tabs-next/TabOverflowList.js +4 -3
  159. package/dist-es/tabs-next/TabOverflowList.js.map +1 -1
  160. package/dist-es/tabs-next/TabsNext.js +5 -52
  161. package/dist-es/tabs-next/TabsNext.js.map +1 -1
  162. package/dist-es/tabs-next/TabsNextContext.js +1 -1
  163. package/dist-es/tabs-next/TabsNextContext.js.map +1 -1
  164. package/dist-es/tabs-next/hooks/useCollection.js.map +1 -1
  165. package/dist-es/tabs-next/hooks/useOverflow.js +49 -6
  166. package/dist-es/tabs-next/hooks/useOverflow.js.map +1 -1
  167. package/dist-es/tabs-next/hooks/useRestoreActiveTab.js +91 -0
  168. package/dist-es/tabs-next/hooks/useRestoreActiveTab.js.map +1 -0
  169. package/dist-types/date-picker/DatePicker.d.ts +6 -1
  170. package/dist-types/date-picker/DatePickerContext.d.ts +2 -1
  171. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +18 -4
  172. package/dist-types/date-picker/DatePickerRangeInput.d.ts +1 -1
  173. package/dist-types/date-picker/index.d.ts +1 -0
  174. package/dist-types/date-picker/useKeyboard.d.ts +14 -0
  175. package/dist-types/index.d.ts +5 -4
  176. package/dist-types/{stepper-input/StepperInput.d.ts → number-input/NumberInput.d.ts} +7 -7
  177. package/dist-types/number-input/index.d.ts +2 -0
  178. package/dist-types/{stepper-input/useStepperInput.d.ts → number-input/useNumberInput.d.ts} +2 -2
  179. package/dist-types/slider/RangeSlider.d.ts +91 -0
  180. package/dist-types/slider/Slider.d.ts +74 -15
  181. package/dist-types/slider/index.d.ts +1 -1
  182. package/dist-types/slider/internal/SliderThumb.d.ts +20 -7
  183. package/dist-types/slider/internal/SliderTooltip.d.ts +6 -0
  184. package/dist-types/slider/internal/SliderTrack.d.ts +23 -3
  185. package/dist-types/slider/internal/useRangeSliderThumb.d.ts +26 -0
  186. package/dist-types/slider/internal/useSliderThumb.d.ts +24 -0
  187. package/dist-types/slider/internal/utils.d.ts +17 -15
  188. package/dist-types/splitter/SplitHandle.d.ts +21 -0
  189. package/dist-types/splitter/SplitPanel.d.ts +10 -0
  190. package/dist-types/splitter/Splitter.d.ts +22 -0
  191. package/dist-types/splitter/index.d.ts +4 -0
  192. package/dist-types/splitter/utils.d.ts +4 -0
  193. package/dist-types/stepped-tracker/Step.types.d.ts +2 -4
  194. package/dist-types/stepped-tracker/stepReducer.types.d.ts +6 -4
  195. package/dist-types/stepped-tracker/utils.d.ts +6 -3
  196. package/dist-types/tabs/drag-drop/drag-utils.d.ts +6 -6
  197. package/dist-types/tabs-next/TabsNextContext.d.ts +1 -1
  198. package/dist-types/tabs-next/hooks/useOverflow.d.ts +1 -1
  199. package/dist-types/tabs-next/hooks/useRestoreActiveTab.d.ts +10 -0
  200. package/package.json +4 -3
  201. package/dist-cjs/slider/Slider.css.js +0 -6
  202. package/dist-cjs/slider/Slider.css.js.map +0 -1
  203. package/dist-cjs/slider/internal/SliderContext.js +0 -19
  204. package/dist-cjs/slider/internal/SliderContext.js.map +0 -1
  205. package/dist-cjs/slider/internal/SliderMarks.js +0 -29
  206. package/dist-cjs/slider/internal/SliderMarks.js.map +0 -1
  207. package/dist-cjs/slider/internal/SliderSelection.js +0 -33
  208. package/dist-cjs/slider/internal/SliderSelection.js.map +0 -1
  209. package/dist-cjs/slider/internal/useKeyDownThumb.js +0 -50
  210. package/dist-cjs/slider/internal/useKeyDownThumb.js.map +0 -1
  211. package/dist-cjs/stepper-input/StepperInput.css.js +0 -6
  212. package/dist-cjs/stepper-input/StepperInput.css.js.map +0 -1
  213. package/dist-cjs/stepper-input/StepperInput.js.map +0 -1
  214. package/dist-cjs/stepper-input/internal/useActivateWhileMouseDown.js.map +0 -1
  215. package/dist-cjs/stepper-input/internal/useInterval.js.map +0 -1
  216. package/dist-cjs/stepper-input/internal/utils.js.map +0 -1
  217. package/dist-cjs/stepper-input/useStepperInput.js.map +0 -1
  218. package/dist-es/slider/Slider.css.js +0 -4
  219. package/dist-es/slider/Slider.css.js.map +0 -1
  220. package/dist-es/slider/internal/SliderContext.js +0 -16
  221. package/dist-es/slider/internal/SliderContext.js.map +0 -1
  222. package/dist-es/slider/internal/SliderMarks.js +0 -27
  223. package/dist-es/slider/internal/SliderMarks.js.map +0 -1
  224. package/dist-es/slider/internal/SliderSelection.js +0 -31
  225. package/dist-es/slider/internal/SliderSelection.js.map +0 -1
  226. package/dist-es/slider/internal/useKeyDownThumb.js +0 -48
  227. package/dist-es/slider/internal/useKeyDownThumb.js.map +0 -1
  228. package/dist-es/stepper-input/StepperInput.css.js +0 -4
  229. package/dist-es/stepper-input/StepperInput.css.js.map +0 -1
  230. package/dist-es/stepper-input/StepperInput.js.map +0 -1
  231. package/dist-es/stepper-input/internal/useActivateWhileMouseDown.js.map +0 -1
  232. package/dist-es/stepper-input/internal/useInterval.js.map +0 -1
  233. package/dist-es/stepper-input/internal/utils.js.map +0 -1
  234. package/dist-es/stepper-input/useStepperInput.js.map +0 -1
  235. package/dist-types/slider/internal/SliderContext.d.ts +0 -11
  236. package/dist-types/slider/internal/SliderMarks.d.ts +0 -7
  237. package/dist-types/slider/internal/SliderSelection.d.ts +0 -4
  238. package/dist-types/slider/internal/index.d.ts +0 -3
  239. package/dist-types/slider/internal/useKeyDownThumb.d.ts +0 -2
  240. package/dist-types/slider/types.d.ts +0 -4
  241. package/dist-types/stepper-input/index.d.ts +0 -2
  242. /package/dist-cjs/{stepper-input → number-input}/internal/useActivateWhileMouseDown.js +0 -0
  243. /package/dist-cjs/{stepper-input → number-input}/internal/useInterval.js +0 -0
  244. /package/dist-cjs/{stepper-input → number-input}/internal/utils.js +0 -0
  245. /package/dist-es/{stepper-input → number-input}/internal/useActivateWhileMouseDown.js +0 -0
  246. /package/dist-es/{stepper-input → number-input}/internal/useInterval.js +0 -0
  247. /package/dist-es/{stepper-input → number-input}/internal/utils.js +0 -0
  248. /package/dist-types/{stepper-input → number-input}/internal/useActivateWhileMouseDown.d.ts +0 -0
  249. /package/dist-types/{stepper-input → number-input}/internal/useInterval.d.ts +0 -0
  250. /package/dist-types/{stepper-input → number-input}/internal/utils.d.ts +0 -0
@@ -4,105 +4,151 @@ var utils = require('./utils.js');
4
4
 
5
5
  function stepReducer(state, action) {
6
6
  var _a, _b;
7
- if (action.type === "next") {
8
- if (((_a = state.activeStep) == null ? void 0 : _a.status) === "error") {
9
- return state;
10
- }
11
- const steps = utils.resetSteps(state.steps);
12
- const flatSteps = utils.flattenSteps(steps);
13
- if (state.nextStep) {
14
- const activeStepIndex2 = state.activeStepIndex + 1;
15
- const activeStep2 = flatSteps[activeStepIndex2];
16
- const previousStep2 = flatSteps[activeStepIndex2 - 1] || null;
17
- const nextStep2 = flatSteps[activeStepIndex2 + 1] || null;
18
- if (activeStep2) {
19
- activeStep2.stage = "active";
7
+ switch (action.type) {
8
+ case "next": {
9
+ if (((_a = state.activeStep) == null ? void 0 : _a.status) === "error") {
10
+ return state;
11
+ }
12
+ const activeStepIndex = state.activeStepIndex + 1;
13
+ const lastStepIndex = state.flatSteps.length - 1;
14
+ if (activeStepIndex > lastStepIndex) {
15
+ const steps2 = utils.assignStepsStage(state.steps, "completed");
16
+ const flatSteps2 = utils.flattenSteps(steps2);
17
+ return {
18
+ steps: steps2,
19
+ flatSteps: flatSteps2,
20
+ activeStepIndex: lastStepIndex + 1,
21
+ activeStep: null,
22
+ previousStep: flatSteps2[lastStepIndex],
23
+ nextStep: null,
24
+ started: true,
25
+ ended: true
26
+ };
20
27
  }
28
+ const activeStepId = state.flatSteps[activeStepIndex].id;
29
+ const steps = utils.autoStageSteps(utils.resetSteps(state.steps), { activeStepId });
30
+ const flatSteps = utils.flattenSteps(steps);
21
31
  return {
22
- steps: utils.autoStageSteps(steps),
32
+ steps,
23
33
  flatSteps,
24
- activeStepIndex: activeStepIndex2,
25
- activeStep: activeStep2,
26
- previousStep: previousStep2,
27
- nextStep: nextStep2,
34
+ activeStepIndex,
35
+ activeStep: flatSteps[activeStepIndex],
36
+ previousStep: flatSteps[activeStepIndex - 1],
37
+ nextStep: flatSteps[activeStepIndex + 1] ?? null,
28
38
  started: true,
29
39
  ended: false
30
40
  };
31
41
  }
32
- const activeStepIndex = flatSteps.length;
33
- const previousStep = flatSteps.at(-1);
34
- const activeStep = null;
35
- const nextStep = null;
36
- return {
37
- steps: utils.assignSteps(steps, "completed"),
38
- flatSteps,
39
- activeStepIndex,
40
- activeStep,
41
- previousStep,
42
- nextStep,
43
- started: true,
44
- ended: true
45
- };
46
- }
47
- if (action.type === "previous") {
48
- if (((_b = state.activeStep) == null ? void 0 : _b.status) === "error") {
49
- return state;
50
- }
51
- const steps = utils.resetSteps(state.steps);
52
- const flatSteps = utils.flattenSteps(steps);
53
- if (state.previousStep) {
54
- const activeStepIndex2 = state.activeStepIndex - 1;
55
- const activeStep2 = flatSteps[activeStepIndex2];
56
- const previousStep2 = flatSteps[activeStepIndex2 - 1] || null;
57
- const nextStep2 = flatSteps[activeStepIndex2 + 1] || null;
58
- if (activeStep2) {
59
- activeStep2.stage = "active";
42
+ case "previous": {
43
+ if (((_b = state.activeStep) == null ? void 0 : _b.status) === "error") {
44
+ return state;
60
45
  }
46
+ const activeStepIndex = state.activeStepIndex - 1;
47
+ if (activeStepIndex < 0) {
48
+ const steps2 = utils.assignStepsStage(state.steps, "pending");
49
+ const flatSteps2 = utils.flattenSteps(steps2);
50
+ return {
51
+ steps: steps2,
52
+ flatSteps: flatSteps2,
53
+ activeStepIndex: -1,
54
+ activeStep: null,
55
+ previousStep: null,
56
+ nextStep: flatSteps2[0],
57
+ started: false,
58
+ ended: false
59
+ };
60
+ }
61
+ const activeStepId = state.flatSteps[activeStepIndex].id;
62
+ const steps = utils.autoStageSteps(utils.resetSteps(state.steps), { activeStepId });
63
+ const flatSteps = utils.flattenSteps(steps);
61
64
  return {
62
- steps: utils.autoStageSteps(steps),
65
+ steps,
63
66
  flatSteps,
64
- activeStepIndex: activeStepIndex2,
65
- activeStep: activeStep2,
66
- previousStep: previousStep2,
67
- nextStep: nextStep2,
67
+ activeStepIndex,
68
+ activeStep: flatSteps[activeStepIndex],
69
+ previousStep: flatSteps[activeStepIndex - 1] ?? null,
70
+ nextStep: flatSteps[activeStepIndex + 1],
68
71
  started: true,
69
72
  ended: false
70
73
  };
71
74
  }
72
- const activeStepIndex = -1;
73
- const activeStep = null;
74
- const previousStep = null;
75
- const nextStep = flatSteps.at(0);
76
- return {
77
- steps: utils.assignSteps(steps, "pending"),
78
- flatSteps,
79
- activeStepIndex,
80
- activeStep,
81
- previousStep,
82
- nextStep,
83
- ended: false,
84
- started: false
85
- };
86
- }
87
- if (action.type === "error") {
88
- if (state.activeStep) {
89
- state.activeStep.status = "error";
90
- return { ...state };
75
+ case "status/error": {
76
+ const { activeStep, activeStepIndex } = state;
77
+ if (!activeStep) {
78
+ return state;
79
+ }
80
+ const activeStepId = activeStep.id;
81
+ const steps = utils.assignStepStatus(state.steps, activeStepId, "error");
82
+ const flatSteps = utils.flattenSteps(steps);
83
+ return {
84
+ ...state,
85
+ steps,
86
+ flatSteps,
87
+ activeStepIndex,
88
+ activeStep: flatSteps[activeStepIndex],
89
+ previousStep: flatSteps[activeStepIndex - 1] ?? null,
90
+ nextStep: flatSteps[activeStepIndex + 1]
91
+ };
91
92
  }
92
- }
93
- if (action.type === "warning") {
94
- if (state.activeStep) {
95
- state.activeStep.status = "warning";
96
- return { ...state };
93
+ case "status/warning": {
94
+ const { activeStep, activeStepIndex } = state;
95
+ if (!activeStep) {
96
+ return state;
97
+ }
98
+ const activeStepId = activeStep.id;
99
+ const steps = utils.assignStepStatus(state.steps, activeStepId, "warning");
100
+ const flatSteps = utils.flattenSteps(steps);
101
+ return {
102
+ ...state,
103
+ steps,
104
+ flatSteps,
105
+ activeStepIndex,
106
+ activeStep: flatSteps[activeStepIndex],
107
+ previousStep: flatSteps[activeStepIndex - 1] ?? null,
108
+ nextStep: flatSteps[activeStepIndex + 1]
109
+ };
97
110
  }
98
- }
99
- if (action.type === "clear") {
100
- if (state.activeStep) {
101
- state.activeStep.status = void 0;
102
- return { ...state };
111
+ case "status/clear": {
112
+ const { activeStep, activeStepIndex } = state;
113
+ if (!activeStep) {
114
+ return state;
115
+ }
116
+ const activeStepId = activeStep.id;
117
+ const steps = utils.assignStepStatus(state.steps, activeStepId, void 0);
118
+ const flatSteps = utils.flattenSteps(steps);
119
+ return {
120
+ ...state,
121
+ steps,
122
+ flatSteps,
123
+ activeStepIndex,
124
+ activeStep: flatSteps[activeStepIndex],
125
+ previousStep: flatSteps[activeStepIndex - 1] ?? null,
126
+ nextStep: flatSteps[activeStepIndex + 1]
127
+ };
128
+ }
129
+ case "reset": {
130
+ const firstStepId = state.flatSteps[0].id;
131
+ const steps = utils.autoStageSteps(
132
+ utils.resetSteps(state.steps, { resetStatus: true }),
133
+ { activeStepId: firstStepId }
134
+ );
135
+ const flatSteps = utils.flattenSteps(steps);
136
+ return {
137
+ steps,
138
+ flatSteps,
139
+ activeStepIndex: 0,
140
+ activeStep: flatSteps[0],
141
+ previousStep: null,
142
+ nextStep: flatSteps[1],
143
+ started: true,
144
+ ended: false
145
+ };
146
+ }
147
+ default: {
148
+ const exhaustiveCheck = action;
149
+ throw new Error(`Unhandled action: ${exhaustiveCheck}`);
103
150
  }
104
151
  }
105
- return state;
106
152
  }
107
153
 
108
154
  module.exports = stepReducer;
@@ -1 +1 @@
1
- {"version":3,"file":"stepReducer.js","sources":["../src/stepped-tracker/stepReducer.ts"],"sourcesContent":["import type { StepReducerAction, StepReducerState } from \"./stepReducer.types\";\nimport { assignSteps, autoStageSteps, flattenSteps, resetSteps } from \"./utils\";\n\nexport default function stepReducer(\n state: StepReducerState,\n action: StepReducerAction,\n) {\n if (action.type === \"next\") {\n if (state.activeStep?.status === \"error\") {\n return state;\n }\n\n const steps = resetSteps(state.steps);\n const flatSteps = flattenSteps(steps);\n\n if (state.nextStep) {\n const activeStepIndex = state.activeStepIndex + 1;\n const activeStep = flatSteps[activeStepIndex];\n const previousStep = flatSteps[activeStepIndex - 1] || null;\n const nextStep = flatSteps[activeStepIndex + 1] || null;\n\n if (activeStep) {\n activeStep.stage = \"active\";\n }\n\n return {\n steps: autoStageSteps(steps),\n flatSteps,\n activeStepIndex,\n activeStep,\n previousStep,\n nextStep,\n started: true,\n ended: false,\n };\n }\n\n const activeStepIndex = flatSteps.length;\n const previousStep = flatSteps.at(-1);\n const activeStep = null;\n const nextStep = null;\n\n return {\n steps: assignSteps(steps, \"completed\"),\n flatSteps,\n activeStepIndex,\n activeStep,\n previousStep,\n nextStep,\n started: true,\n ended: true,\n } as StepReducerState;\n }\n\n if (action.type === \"previous\") {\n if (state.activeStep?.status === \"error\") {\n return state;\n }\n\n const steps = resetSteps(state.steps);\n const flatSteps = flattenSteps(steps);\n\n if (state.previousStep) {\n const activeStepIndex = state.activeStepIndex - 1;\n const activeStep = flatSteps[activeStepIndex];\n const previousStep = flatSteps[activeStepIndex - 1] || null;\n const nextStep = flatSteps[activeStepIndex + 1] || null;\n\n if (activeStep) {\n activeStep.stage = \"active\";\n }\n\n return {\n steps: autoStageSteps(steps),\n flatSteps,\n activeStepIndex,\n activeStep,\n previousStep,\n nextStep,\n started: true,\n ended: false,\n } as StepReducerState;\n }\n\n const activeStepIndex = -1;\n const activeStep = null;\n const previousStep = null;\n const nextStep = flatSteps.at(0);\n\n return {\n steps: assignSteps(steps, \"pending\"),\n flatSteps,\n activeStepIndex,\n activeStep,\n previousStep,\n nextStep,\n ended: false,\n started: false,\n } as StepReducerState;\n }\n\n if (action.type === \"error\") {\n if (state.activeStep) {\n state.activeStep.status = \"error\";\n return { ...state };\n }\n }\n\n if (action.type === \"warning\") {\n if (state.activeStep) {\n state.activeStep.status = \"warning\";\n return { ...state };\n }\n }\n\n if (action.type === \"clear\") {\n if (state.activeStep) {\n state.activeStep.status = undefined;\n return { ...state };\n }\n }\n\n return state;\n}\n"],"names":["resetSteps","flattenSteps","activeStepIndex","activeStep","previousStep","nextStep","autoStageSteps","assignSteps"],"mappings":"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"}
1
+ {"version":3,"file":"stepReducer.js","sources":["../src/stepped-tracker/stepReducer.ts"],"sourcesContent":["import type { StepReducerAction, StepReducerState } from \"./stepReducer.types\";\nimport {\n assignStepStatus,\n assignStepsStage,\n autoStageSteps,\n flattenSteps,\n resetSteps,\n} from \"./utils\";\n\nexport default function stepReducer(\n state: StepReducerState,\n action: StepReducerAction,\n): StepReducerState {\n switch (action.type) {\n case \"next\": {\n if (state.activeStep?.status === \"error\") {\n return state;\n }\n\n const activeStepIndex = state.activeStepIndex + 1;\n const lastStepIndex = state.flatSteps.length - 1;\n\n if (activeStepIndex > lastStepIndex) {\n const steps = assignStepsStage(state.steps, \"completed\");\n const flatSteps = flattenSteps(steps);\n\n return {\n steps,\n flatSteps,\n activeStepIndex: lastStepIndex + 1,\n activeStep: null,\n previousStep: flatSteps[lastStepIndex],\n nextStep: null,\n started: true,\n ended: true,\n };\n }\n\n const activeStepId = state.flatSteps[activeStepIndex].id;\n const steps = autoStageSteps(resetSteps(state.steps), { activeStepId });\n const flatSteps = flattenSteps(steps);\n\n return {\n steps,\n flatSteps,\n activeStepIndex,\n activeStep: flatSteps[activeStepIndex],\n previousStep: flatSteps[activeStepIndex - 1],\n nextStep: flatSteps[activeStepIndex + 1] ?? null,\n started: true,\n ended: false,\n };\n }\n\n case \"previous\": {\n if (state.activeStep?.status === \"error\") {\n return state;\n }\n\n const activeStepIndex = state.activeStepIndex - 1;\n\n if (activeStepIndex < 0) {\n const steps = assignStepsStage(state.steps, \"pending\");\n const flatSteps = flattenSteps(steps);\n\n return {\n steps,\n flatSteps,\n activeStepIndex: -1,\n activeStep: null,\n previousStep: null,\n nextStep: flatSteps[0],\n started: false,\n ended: false,\n };\n }\n\n const activeStepId = state.flatSteps[activeStepIndex].id;\n const steps = autoStageSteps(resetSteps(state.steps), { activeStepId });\n const flatSteps = flattenSteps(steps);\n\n return {\n steps,\n flatSteps,\n activeStepIndex,\n activeStep: flatSteps[activeStepIndex],\n previousStep: flatSteps[activeStepIndex - 1] ?? null,\n nextStep: flatSteps[activeStepIndex + 1],\n started: true,\n ended: false,\n };\n }\n\n case \"status/error\": {\n const { activeStep, activeStepIndex } = state;\n\n if (!activeStep) {\n return state;\n }\n\n const activeStepId = activeStep.id;\n\n const steps = assignStepStatus(state.steps, activeStepId, \"error\");\n const flatSteps = flattenSteps(steps);\n\n return {\n ...state,\n steps,\n flatSteps,\n activeStepIndex,\n activeStep: flatSteps[activeStepIndex],\n previousStep: flatSteps[activeStepIndex - 1] ?? null,\n nextStep: flatSteps[activeStepIndex + 1],\n };\n }\n\n case \"status/warning\": {\n const { activeStep, activeStepIndex } = state;\n\n if (!activeStep) {\n return state;\n }\n\n const activeStepId = activeStep.id;\n\n const steps = assignStepStatus(state.steps, activeStepId, \"warning\");\n const flatSteps = flattenSteps(steps);\n\n return {\n ...state,\n steps,\n flatSteps,\n activeStepIndex,\n activeStep: flatSteps[activeStepIndex],\n previousStep: flatSteps[activeStepIndex - 1] ?? null,\n nextStep: flatSteps[activeStepIndex + 1],\n };\n }\n\n case \"status/clear\": {\n const { activeStep, activeStepIndex } = state;\n\n if (!activeStep) {\n return state;\n }\n\n const activeStepId = activeStep.id;\n\n const steps = assignStepStatus(state.steps, activeStepId, undefined);\n const flatSteps = flattenSteps(steps);\n\n return {\n ...state,\n steps,\n flatSteps,\n activeStepIndex,\n activeStep: flatSteps[activeStepIndex],\n previousStep: flatSteps[activeStepIndex - 1] ?? null,\n nextStep: flatSteps[activeStepIndex + 1],\n };\n }\n\n case \"reset\": {\n const firstStepId = state.flatSteps[0].id;\n\n const steps = autoStageSteps(\n resetSteps(state.steps, { resetStatus: true }),\n { activeStepId: firstStepId },\n );\n const flatSteps = flattenSteps(steps);\n\n return {\n steps,\n flatSteps,\n activeStepIndex: 0,\n activeStep: flatSteps[0],\n previousStep: null,\n nextStep: flatSteps[1],\n started: true,\n ended: false,\n };\n }\n\n default: {\n const exhaustiveCheck: never = action;\n throw new Error(`Unhandled action: ${exhaustiveCheck}`);\n }\n }\n}\n"],"names":["steps","assignStepsStage","flatSteps","flattenSteps","autoStageSteps","resetSteps","assignStepStatus"],"mappings":"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"}
@@ -5,11 +5,13 @@ var stepReducer = require('./stepReducer.js');
5
5
  var utils = require('./utils.js');
6
6
 
7
7
  function useStepReducer(initialSteps, options) {
8
- const state = react.useMemo(
9
- () => utils.initStepReducerState(initialSteps, options),
10
- [initialSteps, options]
8
+ const initializer = react.useCallback(
9
+ (initialSteps2) => {
10
+ return utils.initStepReducerState(initialSteps2, options);
11
+ },
12
+ [options]
11
13
  );
12
- return react.useReducer(stepReducer, state);
14
+ return react.useReducer(stepReducer, initialSteps, initializer);
13
15
  }
14
16
 
15
17
  exports.useStepReducer = useStepReducer;
@@ -1 +1 @@
1
- {"version":3,"file":"useStepReducer.js","sources":["../src/stepped-tracker/useStepReducer.ts"],"sourcesContent":["import { useMemo, useReducer } from \"react\";\n\nimport stepReducer from \"./stepReducer\";\nimport { initStepReducerState } from \"./utils\";\n\nimport type { StepRecord } from \"./Step.types\";\nimport type { StepReducerOptions } from \"./stepReducer.types\";\n\nexport function useStepReducer(\n initialSteps: StepRecord[],\n options?: StepReducerOptions,\n) {\n const state = useMemo(\n () => initStepReducerState(initialSteps, options),\n [initialSteps, options],\n );\n\n return useReducer(stepReducer, state);\n}\n"],"names":["useMemo","initStepReducerState","useReducer"],"mappings":";;;;;;AAQgB,SAAA,cAAA,CACd,cACA,OACA,EAAA;AACA,EAAA,MAAM,KAAQ,GAAAA,aAAA;AAAA,IACZ,MAAMC,0BAAqB,CAAA,YAAA,EAAc,OAAO,CAAA;AAAA,IAChD,CAAC,cAAc,OAAO;AAAA,GACxB;AAEA,EAAO,OAAAC,gBAAA,CAAW,aAAa,KAAK,CAAA;AACtC;;;;"}
1
+ {"version":3,"file":"useStepReducer.js","sources":["../src/stepped-tracker/useStepReducer.ts"],"sourcesContent":["import { useCallback, useReducer } from \"react\";\n\nimport stepReducer from \"./stepReducer\";\n\nimport type { StepRecord } from \"./Step.types\";\nimport type { StepReducerOptions } from \"./stepReducer.types\";\nimport { initStepReducerState } from \"./utils\";\n\nexport function useStepReducer(\n initialSteps: StepRecord[],\n options?: StepReducerOptions,\n) {\n const initializer = useCallback(\n (initialSteps: StepRecord[]) => {\n return initStepReducerState(initialSteps, options);\n },\n [options],\n );\n\n return useReducer(stepReducer, initialSteps, initializer);\n}\n"],"names":["useCallback","initialSteps","initStepReducerState","useReducer"],"mappings":";;;;;;AAQgB,SAAA,cAAA,CACd,cACA,OACA,EAAA;AACA,EAAA,MAAM,WAAc,GAAAA,iBAAA;AAAA,IAClB,CAACC,aAA+B,KAAA;AAC9B,MAAO,OAAAC,0BAAA,CAAqBD,eAAc,OAAO,CAAA;AAAA,KACnD;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAO,OAAAE,gBAAA,CAAW,WAAa,EAAA,YAAA,EAAc,WAAW,CAAA;AAC1D;;;;"}
@@ -1,16 +1,47 @@
1
1
  'use strict';
2
2
 
3
- function assignSteps(steps, stage) {
3
+ function assignStepsStage(steps, stage) {
4
4
  return steps.map((step) => {
5
- step.stage = stage;
5
+ if (!step.substeps) {
6
+ return { ...step, stage };
7
+ }
8
+ return {
9
+ ...step,
10
+ stage,
11
+ substeps: assignStepsStage(step.substeps, stage)
12
+ };
13
+ });
14
+ }
15
+ function assignStepStatus(steps, stepId, status) {
16
+ return steps.map((step) => {
17
+ if (step.id === stepId) {
18
+ return { ...step, status };
19
+ }
6
20
  if (step.substeps) {
7
- step.substeps = assignSteps(step.substeps, stage);
21
+ return {
22
+ ...step,
23
+ substeps: assignStepStatus(step.substeps, stepId, status)
24
+ };
8
25
  }
9
26
  return step;
10
27
  });
11
28
  }
12
- function resetSteps(steps) {
13
- return assignSteps(steps, void 0);
29
+ function resetSteps(steps, options = { resetStatus: false }) {
30
+ const { resetStatus } = options;
31
+ return steps.map((step) => {
32
+ if (!step.substeps) {
33
+ return {
34
+ ...step,
35
+ stage: void 0,
36
+ status: !resetStatus ? step.status : void 0
37
+ };
38
+ }
39
+ return {
40
+ ...step,
41
+ stage: void 0,
42
+ substeps: resetSteps(step.substeps, options)
43
+ };
44
+ });
14
45
  }
15
46
  function autoStageSteps(steps, options) {
16
47
  function autoStageHelper(steps2) {
@@ -20,11 +51,14 @@ function autoStageSteps(steps, options) {
20
51
  if (pivotIndex !== -1) {
21
52
  const activeStep = steps2[pivotIndex];
22
53
  activeStep.stage ||= "active";
23
- const previousSteps = assignSteps(
54
+ const previousSteps = assignStepsStage(
24
55
  steps2.slice(0, pivotIndex),
25
56
  "completed"
26
57
  );
27
- const nextSteps = assignSteps(steps2.slice(pivotIndex + 1), "pending");
58
+ const nextSteps = assignStepsStage(
59
+ steps2.slice(pivotIndex + 1),
60
+ "pending"
61
+ );
28
62
  return [...previousSteps, activeStep, ...nextSteps];
29
63
  }
30
64
  return steps2.reduce(
@@ -42,7 +76,7 @@ function autoStageSteps(steps, options) {
42
76
  null
43
77
  );
44
78
  }
45
- return autoStageHelper(steps) || assignSteps(steps, steps[0].stage || "pending");
79
+ return autoStageHelper(steps) || assignStepsStage(steps, steps[0].stage || "pending");
46
80
  }
47
81
  function flattenSteps(steps) {
48
82
  return steps.reduce((acc, step) => {
@@ -78,7 +112,8 @@ function initStepReducerState(initialSteps, options) {
78
112
  };
79
113
  }
80
114
 
81
- exports.assignSteps = assignSteps;
115
+ exports.assignStepStatus = assignStepStatus;
116
+ exports.assignStepsStage = assignStepsStage;
82
117
  exports.autoStageSteps = autoStageSteps;
83
118
  exports.flattenSteps = flattenSteps;
84
119
  exports.initStepReducerState = initStepReducerState;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../src/stepped-tracker/utils.ts"],"sourcesContent":["import type { StepRecord, StepStage } from \"./Step.types\";\nimport type { StepReducerOptions, StepReducerState } from \"./stepReducer.types\";\n\nexport function assignSteps(\n steps: StepRecord[],\n stage?: StepStage,\n): StepRecord[] {\n return steps.map((step) => {\n step.stage = stage;\n if (step.substeps) {\n step.substeps = assignSteps(step.substeps, stage);\n }\n\n return step;\n });\n}\n\nexport function resetSteps(steps: StepRecord[]): StepRecord[] {\n return assignSteps(steps, undefined);\n}\n\nexport function autoStageSteps(\n steps: StepRecord[],\n options?: StepReducerOptions,\n): StepRecord[] {\n function autoStageHelper(steps: StepRecord[]): StepRecord[] | null {\n const pivotIndex = steps.findIndex(\n (step) =>\n (step?.id &&\n options?.activeStepId &&\n step.id === options.activeStepId) ||\n step.stage === \"active\" ||\n step.stage === \"inprogress\",\n );\n\n if (pivotIndex !== -1) {\n const activeStep = steps[pivotIndex];\n\n activeStep.stage ||= \"active\";\n\n const previousSteps = assignSteps(\n steps.slice(0, pivotIndex),\n \"completed\",\n );\n const nextSteps = assignSteps(steps.slice(pivotIndex + 1), \"pending\");\n\n return [...previousSteps, activeStep, ...nextSteps] as StepRecord[];\n }\n\n return steps.reduce(\n (acc, step, index) => {\n if (step.substeps) {\n const substeps = autoStageHelper(step.substeps);\n\n if (substeps) {\n steps[index].substeps = substeps;\n steps[index].stage = \"inprogress\";\n\n return autoStageHelper(steps);\n }\n }\n\n return acc;\n },\n null as StepRecord[] | null,\n );\n }\n\n return (\n autoStageHelper(steps) || assignSteps(steps, steps[0].stage || \"pending\")\n );\n}\n\nexport function flattenSteps(steps: StepRecord[]): StepRecord[] {\n return steps.reduce((acc, step) => {\n if (step.substeps) {\n acc.push(...flattenSteps(step.substeps));\n\n return acc;\n }\n\n acc.push(step);\n\n return acc;\n }, [] as StepRecord[]);\n}\n\nexport function initStepReducerState(\n initialSteps: StepRecord[],\n options?: StepReducerOptions,\n) {\n const steps = autoStageSteps(initialSteps, options);\n const flatSteps = flattenSteps(steps);\n const started = !flatSteps.every((step) => step.stage === \"pending\");\n const ended = flatSteps.every((step) => step.stage === \"completed\");\n\n let activeStepIndex = flatSteps.findIndex((step) => step.stage === \"active\");\n\n if (activeStepIndex === -1 && ended) {\n activeStepIndex = flatSteps.length;\n }\n\n const activeStep = flatSteps[activeStepIndex] || null;\n const previousStep = flatSteps[activeStepIndex - 1] || null;\n const nextStep = flatSteps[activeStepIndex + 1] || null;\n\n return {\n steps,\n flatSteps,\n activeStep,\n previousStep,\n nextStep,\n activeStepIndex,\n ended,\n started,\n } as StepReducerState;\n}\n"],"names":["steps"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../src/stepped-tracker/utils.ts"],"sourcesContent":["import type { StepRecord, StepStage, StepStatus } from \"./Step.types\";\nimport type { StepReducerOptions, StepReducerState } from \"./stepReducer.types\";\n\nexport function assignStepsStage(\n steps: StepRecord[],\n stage?: StepStage,\n): StepRecord[] {\n return steps.map((step) => {\n if (!step.substeps) {\n return { ...step, stage };\n }\n\n return {\n ...step,\n stage,\n substeps: assignStepsStage(step.substeps, stage),\n };\n });\n}\n\nexport function assignStepStatus(\n steps: StepRecord[],\n stepId: string,\n status: StepStatus | undefined,\n): StepRecord[] {\n return steps.map((step) => {\n if (step.id === stepId) {\n return { ...step, status };\n }\n\n if (step.substeps) {\n return {\n ...step,\n substeps: assignStepStatus(step.substeps, stepId, status),\n };\n }\n\n return step;\n });\n}\n\nexport function resetSteps(\n steps: StepRecord[],\n options = { resetStatus: false },\n): StepRecord[] {\n const { resetStatus } = options;\n\n return steps.map((step) => {\n if (!step.substeps) {\n return {\n ...step,\n stage: undefined,\n status: !resetStatus ? step.status : undefined,\n };\n }\n\n return {\n ...step,\n stage: undefined,\n substeps: resetSteps(step.substeps, options),\n };\n });\n}\n\nexport function autoStageSteps(\n steps: StepRecord[],\n options?: StepReducerOptions,\n): StepRecord[] {\n function autoStageHelper(steps: StepRecord[]): StepRecord[] | null {\n const pivotIndex = steps.findIndex(\n (step) =>\n (step?.id &&\n options?.activeStepId &&\n step.id === options.activeStepId) ||\n step.stage === \"active\" ||\n step.stage === \"inprogress\",\n );\n\n if (pivotIndex !== -1) {\n const activeStep = steps[pivotIndex];\n\n activeStep.stage ||= \"active\";\n\n const previousSteps = assignStepsStage(\n steps.slice(0, pivotIndex),\n \"completed\",\n );\n const nextSteps = assignStepsStage(\n steps.slice(pivotIndex + 1),\n \"pending\",\n );\n\n return [...previousSteps, activeStep, ...nextSteps] as StepRecord[];\n }\n\n return steps.reduce(\n (acc, step, index) => {\n if (step.substeps) {\n const substeps = autoStageHelper(step.substeps);\n\n if (substeps) {\n steps[index].substeps = substeps;\n steps[index].stage = \"inprogress\";\n\n return autoStageHelper(steps);\n }\n }\n\n return acc;\n },\n null as StepRecord[] | null,\n );\n }\n\n return (\n autoStageHelper(steps) ||\n assignStepsStage(steps, steps[0].stage || \"pending\")\n );\n}\n\nexport function flattenSteps(steps: StepRecord[]): StepRecord[] {\n return steps.reduce((acc, step) => {\n if (step.substeps) {\n acc.push(...flattenSteps(step.substeps));\n\n return acc;\n }\n\n acc.push(step);\n\n return acc;\n }, [] as StepRecord[]);\n}\n\nexport function initStepReducerState(\n initialSteps: StepRecord[],\n options?: StepReducerOptions,\n) {\n const steps = autoStageSteps(initialSteps, options);\n const flatSteps = flattenSteps(steps);\n const started = !flatSteps.every((step) => step.stage === \"pending\");\n const ended = flatSteps.every((step) => step.stage === \"completed\");\n\n let activeStepIndex = flatSteps.findIndex((step) => step.stage === \"active\");\n\n if (activeStepIndex === -1 && ended) {\n activeStepIndex = flatSteps.length;\n }\n\n const activeStep = flatSteps[activeStepIndex] || null;\n const previousStep = flatSteps[activeStepIndex - 1] || null;\n const nextStep = flatSteps[activeStepIndex + 1] || null;\n\n return {\n steps,\n flatSteps,\n activeStep,\n previousStep,\n nextStep,\n activeStepIndex,\n ended,\n started,\n } as StepReducerState;\n}\n"],"names":["steps"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Component class applied to the root element */\n.saltTabListNext {\n display: flex;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n position: relative;\n background: transparent;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n gap: var(--salt-spacing-100);\n max-width: 100%;\n}\n\n.saltTabListNext-center {\n justify-content: center;\n}\n\n.saltTabListNext-right {\n justify-content: flex-end;\n}\n\n.saltTabListNext-activeColorPrimary {\n --saltTabListNext-activeColor: var(--salt-container-primary-background);\n}\n\n.saltTabListNext-activeColorSecondary {\n --saltTabListNext-activeColor: var(--salt-container-secondary-background);\n}\n\n.saltTabListNext-activeColorTertiary {\n --saltTabListNext-activeColor: var(--salt-container-tertiary-background);\n}\n\n.saltTabListNext-overflowWarning {\n display: none;\n}\n";
3
+ var css_248z = "/* Component class applied to the root element */\n.saltTabListNext {\n display: flex;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n position: relative;\n background: transparent;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n gap: var(--salt-spacing-100);\n max-width: 100%;\n width: 100%;\n}\n\n.saltTabListNext-center {\n justify-content: center;\n}\n\n.saltTabListNext-right {\n justify-content: flex-end;\n}\n\n.saltTabListNext-activeColorPrimary {\n --saltTabListNext-activeColor: var(--salt-container-primary-background);\n}\n\n.saltTabListNext-activeColorSecondary {\n --saltTabListNext-activeColor: var(--salt-container-secondary-background);\n}\n\n.saltTabListNext-activeColorTertiary {\n --saltTabListNext-activeColor: var(--salt-container-tertiary-background);\n}\n\n.saltTabListNext-overflowWarning {\n display: none;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=TabListNext.css.js.map
@@ -10,6 +10,7 @@ var TabListNext$1 = require('./TabListNext.css.js');
10
10
  var TabOverflowList = require('./TabOverflowList.js');
11
11
  var TabsNextContext = require('./TabsNextContext.js');
12
12
  var useOverflow = require('./hooks/useOverflow.js');
13
+ var useRestoreActiveTab = require('./hooks/useRestoreActiveTab.js');
13
14
 
14
15
  const withBaseName = core.makePrefixer("saltTabListNext");
15
16
  const TabListNext = react.forwardRef(
@@ -39,18 +40,24 @@ const TabListNext = react.forwardRef(
39
40
  activeTab,
40
41
  menuOpen,
41
42
  setMenuOpen,
42
- returnFocus
43
+ removedActiveTabRef
43
44
  } = TabsNextContext.useTabsNext();
44
45
  const tabstripRef = react.useRef(null);
45
46
  const handleRef = core.useForkRef(tabstripRef, ref);
46
47
  const overflowButtonRef = react.useRef(null);
47
- const [visible, hidden, isMeasuring] = useOverflow.useOverflow({
48
+ const [visible, hidden, isMeasuring, realSelectedIndexRef] = useOverflow.useOverflow({
48
49
  container: tabstripRef,
49
50
  tabs: items,
50
51
  children,
51
52
  selected,
52
53
  overflowButton: overflowButtonRef
53
54
  });
55
+ useRestoreActiveTab.useRestoreActiveTab({
56
+ container: tabstripRef,
57
+ tabs: items,
58
+ realSelectedIndex: realSelectedIndexRef,
59
+ removedActiveTabRef
60
+ });
54
61
  const handleKeyDown = (event) => {
55
62
  var _a, _b, _c;
56
63
  onKeyDown == null ? void 0 : onKeyDown(event);
@@ -77,19 +84,6 @@ const TabListNext = react.forwardRef(
77
84
  }
78
85
  }
79
86
  };
80
- core.useIsomorphicLayoutEffect(() => {
81
- var _a;
82
- if (!returnFocus.current || visible.length < 1 || selected === void 0)
83
- return;
84
- const itemToFocus = items.find((i) => i.value === returnFocus.current);
85
- (_a = itemToFocus == null ? void 0 : itemToFocus.element) == null ? void 0 : _a.focus({ preventScroll: true });
86
- requestAnimationFrame(() => {
87
- var _a2;
88
- if (((_a2 = targetWindow == null ? void 0 : targetWindow.document) == null ? void 0 : _a2.activeElement) === (itemToFocus == null ? void 0 : itemToFocus.element)) {
89
- returnFocus.current = void 0;
90
- }
91
- });
92
- }, [visible, returnFocus, targetWindow, items, selected]);
93
87
  const warningId = core.useId();
94
88
  return /* @__PURE__ */ jsxRuntime.jsxs(
95
89
  "div",
@@ -108,7 +102,7 @@ const TabListNext = react.forwardRef(
108
102
  "aria-describedby": clsx.clsx(ariaDescribedBy, warningId),
109
103
  ...rest,
110
104
  children: [
111
- hidden.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { id: warningId, className: withBaseName("overflowWarning"), children: "Note: This tab list includes overflow; tab positions may be inaccurate or change when a tab is selected" }),
105
+ !isMeasuring && hidden.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { id: warningId, className: withBaseName("overflowWarning"), children: "Note: This tab list includes overflow; tab positions may be inaccurate or change when a tab is selected" }),
112
106
  visible,
113
107
  /* @__PURE__ */ jsxRuntime.jsx(
114
108
  TabOverflowList.TabOverflowList,
@@ -1 +1 @@
1
- {"version":3,"file":"TabListNext.js","sources":["../src/tabs-next/TabListNext.tsx"],"sourcesContent":["import {\n capitalize,\n makePrefixer,\n useForkRef,\n useId,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n forwardRef,\n useRef,\n} from \"react\";\n\nimport tablistNextCss from \"./TabListNext.css\";\nimport { TabOverflowList } from \"./TabOverflowList\";\nimport { useTabsNext } from \"./TabsNextContext\";\nimport { useOverflow } from \"./hooks/useOverflow\";\n\nconst withBaseName = makePrefixer(\"saltTabListNext\");\n\nexport interface TabListNextProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * Styling active color variant. Defaults to \"primary\".\n */\n activeColor?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * The appearance of the tabs. Defaults to \"bordered\".\n */\n appearance?: \"bordered\" | \"transparent\";\n}\n\nexport const TabListNext = forwardRef<HTMLDivElement, TabListNextProps>(\n function TabstripNext(props, ref) {\n const {\n appearance = \"bordered\",\n activeColor = \"primary\",\n \"aria-describedby\": ariaDescribedBy,\n children,\n className,\n onKeyDown,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tablist-next\",\n css: tablistNextCss,\n window: targetWindow,\n });\n\n const {\n selected,\n getNext,\n getPrevious,\n getFirst,\n getLast,\n items,\n activeTab,\n menuOpen,\n setMenuOpen,\n returnFocus,\n } = useTabsNext();\n\n const tabstripRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(tabstripRef, ref);\n const overflowButtonRef = useRef<HTMLButtonElement>(null);\n\n const [visible, hidden, isMeasuring] = useOverflow({\n container: tabstripRef,\n tabs: items,\n children,\n selected,\n overflowButton: overflowButtonRef,\n });\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n const actionMap = {\n ArrowRight: getNext,\n ArrowLeft: getPrevious,\n Home: getFirst,\n End: getLast,\n ArrowUp: menuOpen ? getPrevious : undefined,\n ArrowDown: menuOpen ? getNext : undefined,\n };\n\n const action = actionMap[event.key as keyof typeof actionMap];\n\n if (action) {\n event.preventDefault();\n const activeTabId = activeTab.current?.id;\n if (!activeTabId) return;\n const nextItem = action(activeTabId);\n if (nextItem) {\n nextItem.element?.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\",\n });\n nextItem.element?.focus({ preventScroll: true });\n }\n }\n };\n\n useIsomorphicLayoutEffect(() => {\n if (!returnFocus.current || visible.length < 1 || selected === undefined)\n return;\n\n const itemToFocus = items.find((i) => i.value === returnFocus.current);\n itemToFocus?.element?.focus({ preventScroll: true });\n\n requestAnimationFrame(() => {\n if (targetWindow?.document?.activeElement === itemToFocus?.element) {\n returnFocus.current = undefined;\n }\n });\n }, [visible, returnFocus, targetWindow, items, selected]);\n\n const warningId = useId();\n\n return (\n <div\n role=\"tablist\"\n className={clsx(\n withBaseName(),\n withBaseName(appearance),\n withBaseName(\"horizontal\"),\n withBaseName(`activeColor${capitalize(activeColor)}`),\n className,\n )}\n data-ismeasuring={isMeasuring ? true : undefined}\n ref={handleRef}\n onKeyDown={handleKeyDown}\n aria-describedby={clsx(ariaDescribedBy, warningId)}\n {...rest}\n >\n {hidden.length > 0 && (\n <span id={warningId} className={withBaseName(\"overflowWarning\")}>\n Note: This tab list includes overflow; tab positions may be\n inaccurate or change when a tab is selected\n </span>\n )}\n {visible}\n <TabOverflowList\n isMeasuring={isMeasuring}\n buttonRef={overflowButtonRef}\n tabstripRef={tabstripRef}\n open={menuOpen}\n setOpen={setMenuOpen}\n >\n {hidden}\n </TabOverflowList>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useWindow","useComponentCssInjection","tablistNextCss","useTabsNext","useRef","useForkRef","useOverflow","useIsomorphicLayoutEffect","_a","useId","jsxs","clsx","capitalize","jsx","TabOverflowList"],"mappings":"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"}
1
+ {"version":3,"file":"TabListNext.js","sources":["../src/tabs-next/TabListNext.tsx"],"sourcesContent":["import { capitalize, makePrefixer, useForkRef, useId } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n forwardRef,\n useRef,\n} from \"react\";\n\nimport tablistNextCss from \"./TabListNext.css\";\nimport { TabOverflowList } from \"./TabOverflowList\";\nimport { useTabsNext } from \"./TabsNextContext\";\nimport { useOverflow } from \"./hooks/useOverflow\";\nimport { useRestoreActiveTab } from \"./hooks/useRestoreActiveTab\";\n\nconst withBaseName = makePrefixer(\"saltTabListNext\");\n\nexport interface TabListNextProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * Styling active color variant. Defaults to \"primary\".\n */\n activeColor?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * The appearance of the tabs. Defaults to \"bordered\".\n */\n appearance?: \"bordered\" | \"transparent\";\n}\n\nexport const TabListNext = forwardRef<HTMLDivElement, TabListNextProps>(\n function TabstripNext(props, ref) {\n const {\n appearance = \"bordered\",\n activeColor = \"primary\",\n \"aria-describedby\": ariaDescribedBy,\n children,\n className,\n onKeyDown,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tablist-next\",\n css: tablistNextCss,\n window: targetWindow,\n });\n\n const {\n selected,\n getNext,\n getPrevious,\n getFirst,\n getLast,\n items,\n activeTab,\n menuOpen,\n setMenuOpen,\n removedActiveTabRef,\n } = useTabsNext();\n\n const tabstripRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(tabstripRef, ref);\n const overflowButtonRef = useRef<HTMLButtonElement>(null);\n\n const [visible, hidden, isMeasuring, realSelectedIndexRef] = useOverflow({\n container: tabstripRef,\n tabs: items,\n children,\n selected,\n overflowButton: overflowButtonRef,\n });\n\n useRestoreActiveTab({\n container: tabstripRef,\n tabs: items,\n realSelectedIndex: realSelectedIndexRef,\n removedActiveTabRef,\n });\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n const actionMap = {\n ArrowRight: getNext,\n ArrowLeft: getPrevious,\n Home: getFirst,\n End: getLast,\n ArrowUp: menuOpen ? getPrevious : undefined,\n ArrowDown: menuOpen ? getNext : undefined,\n };\n\n const action = actionMap[event.key as keyof typeof actionMap];\n\n if (action) {\n event.preventDefault();\n const activeTabId = activeTab.current?.id;\n if (!activeTabId) return;\n const nextItem = action(activeTabId);\n if (nextItem) {\n nextItem.element?.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\",\n });\n nextItem.element?.focus({ preventScroll: true });\n }\n }\n };\n\n const warningId = useId();\n\n return (\n <div\n role=\"tablist\"\n className={clsx(\n withBaseName(),\n withBaseName(appearance),\n withBaseName(\"horizontal\"),\n withBaseName(`activeColor${capitalize(activeColor)}`),\n className,\n )}\n data-ismeasuring={isMeasuring ? true : undefined}\n ref={handleRef}\n onKeyDown={handleKeyDown}\n aria-describedby={clsx(ariaDescribedBy, warningId)}\n {...rest}\n >\n {!isMeasuring && hidden.length > 0 && (\n <span id={warningId} className={withBaseName(\"overflowWarning\")}>\n Note: This tab list includes overflow; tab positions may be\n inaccurate or change when a tab is selected\n </span>\n )}\n {visible}\n <TabOverflowList\n isMeasuring={isMeasuring}\n buttonRef={overflowButtonRef}\n tabstripRef={tabstripRef}\n open={menuOpen}\n setOpen={setMenuOpen}\n >\n {hidden}\n </TabOverflowList>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useWindow","useComponentCssInjection","tablistNextCss","useTabsNext","useRef","useForkRef","useOverflow","useRestoreActiveTab","useId","jsxs","clsx","capitalize","jsx","TabOverflowList"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltTabOverflow {\n position: relative;\n}\n\n.saltTabOverflow-list {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-border) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n position: absolute;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n border-radius: var(--salt-palette-corner, 0);\n}\n\n.saltTabOverflow-listContainer {\n display: flex;\n flex-direction: column;\n gap: var(--salt-size-border);\n max-height: inherit;\n min-height: inherit;\n}\n\n.saltTabOverflow-list[data-hidden=\"true\"] {\n opacity: 0;\n pointer-events: none;\n}\n\n.saltTabOverflow-list .saltTabNext {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n padding-left: var(--salt-spacing-100);\n padding-right: var(--salt-spacing-100);\n display: flex;\n gap: var(--salt-spacing-100);\n position: relative;\n align-items: center;\n cursor: var(--salt-selectable-cursor-hover);\n box-sizing: border-box;\n flex-shrink: 0;\n justify-content: flex-start;\n}\n\n.saltTabOverflow-list .saltTabNext .saltTabNextTrigger {\n justify-content: start;\n}\n\n.saltTabOverflow-list .saltTabNext::after {\n display: none;\n}\n\n.saltTabOverflow-list .saltTabNext[aria-disabled=\"true\"] {\n color: var(--salt-content-primary-foreground-disabled);\n cursor: var(--salt-selectable-cursor-disabled);\n}\n\n.saltTabOverflow-list .saltTabNext-focusVisible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-border) * -2);\n}\n\n.saltTabOverflow-list .saltTabNext:hover {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltTabOverflow-list .saltTabNext:active {\n background: var(--salt-selectable-background-selected);\n box-shadow: 0 calc(var(--salt-size-border) * -1) 0 0 var(--salt-selectable-borderColor-selected), 0 var(--salt-size-border) 0 0 var(--salt-selectable-borderColor-selected);\n}\n";
3
+ var css_248z = ".saltTabOverflow {\n position: relative;\n}\n\n.saltTabOverflow-list {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-border) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n position: absolute;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n border-radius: var(--salt-palette-corner, 0);\n}\n\n.saltTabOverflow-listContainer {\n display: flex;\n flex-direction: column;\n gap: var(--salt-size-border);\n max-height: inherit;\n min-height: inherit;\n}\n\n.saltTabOverflow-list[data-hidden=\"true\"] {\n opacity: 0;\n pointer-events: none;\n /* Avoid causing page to overflow with the hidden elements */\n width: 1px;\n height: 1px;\n}\n\n.saltTabOverflow-list .saltTabNext {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n padding-left: var(--salt-spacing-100);\n padding-right: var(--salt-spacing-100);\n display: flex;\n gap: var(--salt-spacing-100);\n position: relative;\n align-items: center;\n cursor: var(--salt-selectable-cursor-hover);\n box-sizing: border-box;\n flex-shrink: 0;\n justify-content: flex-start;\n}\n\n.saltTabOverflow-list .saltTabNext .saltTabNextTrigger {\n justify-content: start;\n}\n\n.saltTabOverflow-list .saltTabNext::after {\n display: none;\n}\n\n.saltTabOverflow-list .saltTabNext[aria-disabled=\"true\"] {\n color: var(--salt-content-primary-foreground-disabled);\n cursor: var(--salt-selectable-cursor-disabled);\n}\n\n.saltTabOverflow-list .saltTabNext-focusVisible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-border) * -2);\n}\n\n.saltTabOverflow-list .saltTabNext:hover {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltTabOverflow-list .saltTabNext:active {\n background: var(--salt-selectable-background-selected);\n box-shadow: 0 calc(var(--salt-size-border) * -1) 0 0 var(--salt-selectable-borderColor-selected), 0 var(--salt-size-border) 0 0 var(--salt-selectable-borderColor-selected);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=TabOverflowList.css.js.map
@@ -54,7 +54,8 @@ const TabOverflowList = react.forwardRef(
54
54
  maxHeight: `max(calc((var(--salt-size-base) + var(--salt-spacing-100)) * 5), calc(${availableHeight}px - var(--salt-spacing-100)))`
55
55
  });
56
56
  }
57
- })
57
+ }),
58
+ react$1.flip()
58
59
  ]
59
60
  });
60
61
  const { getFloatingProps } = react$1.useInteractions([react$1.useDismiss(context)]);
@@ -89,7 +90,7 @@ const TabOverflowList = react.forwardRef(
89
90
  const listId = core.useId();
90
91
  const childCount = react.Children.count(children);
91
92
  if (childCount === 0 && !isMeasuring) return null;
92
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: withBaseName(), ref: handleRootRef, children: [
93
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: withBaseName(), ref: handleRootRef, "data-overflow": true, children: [
93
94
  /* @__PURE__ */ jsxRuntime.jsx(
94
95
  core.Button,
95
96
  {