@salt-ds/lab 1.0.0-alpha.57 → 1.0.0-alpha.58

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 (175) hide show
  1. package/CHANGELOG.md +232 -0
  2. package/css/salt-lab.css +216 -143
  3. package/dist-cjs/date-picker/DatePicker.js +3 -2
  4. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  5. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +5 -2
  6. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  7. package/dist-cjs/date-picker/DatePickerRangeInput.js +1 -1
  8. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  9. package/dist-cjs/date-picker/DatePickerSingleInput.js +1 -1
  10. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  11. package/dist-cjs/index.js +4 -6
  12. package/dist-cjs/index.js.map +1 -1
  13. package/dist-cjs/skip-link/SkipLink.css.js +1 -1
  14. package/dist-cjs/skip-link/SkipLink.js +25 -8
  15. package/dist-cjs/skip-link/SkipLink.js.map +1 -1
  16. package/dist-cjs/skip-link/internal/useManageFocusOnTarget.js +54 -37
  17. package/dist-cjs/skip-link/internal/useManageFocusOnTarget.js.map +1 -1
  18. package/dist-cjs/stepped-tracker/Step.Connector.css.js +6 -0
  19. package/dist-cjs/stepped-tracker/Step.Connector.css.js.map +1 -0
  20. package/dist-cjs/stepped-tracker/Step.Connector.js +21 -0
  21. package/dist-cjs/stepped-tracker/Step.Connector.js.map +1 -0
  22. package/dist-cjs/stepped-tracker/Step.Description.css.js +6 -0
  23. package/dist-cjs/stepped-tracker/Step.Description.css.js.map +1 -0
  24. package/dist-cjs/stepped-tracker/Step.Description.js +35 -0
  25. package/dist-cjs/stepped-tracker/Step.Description.js.map +1 -0
  26. package/dist-cjs/stepped-tracker/Step.ExpandTrigger.css.js +6 -0
  27. package/dist-cjs/stepped-tracker/Step.ExpandTrigger.css.js.map +1 -0
  28. package/dist-cjs/stepped-tracker/Step.ExpandTrigger.js +38 -0
  29. package/dist-cjs/stepped-tracker/Step.ExpandTrigger.js.map +1 -0
  30. package/dist-cjs/stepped-tracker/Step.Icon.css.js +6 -0
  31. package/dist-cjs/stepped-tracker/Step.Icon.css.js.map +1 -0
  32. package/dist-cjs/stepped-tracker/Step.Icon.js +57 -0
  33. package/dist-cjs/stepped-tracker/Step.Icon.js.map +1 -0
  34. package/dist-cjs/stepped-tracker/Step.Label.css.js +6 -0
  35. package/dist-cjs/stepped-tracker/Step.Label.css.js.map +1 -0
  36. package/dist-cjs/stepped-tracker/Step.Label.js +37 -0
  37. package/dist-cjs/stepped-tracker/Step.Label.js.map +1 -0
  38. package/dist-cjs/stepped-tracker/Step.SROnly.css.js +6 -0
  39. package/dist-cjs/stepped-tracker/Step.SROnly.css.js.map +1 -0
  40. package/dist-cjs/stepped-tracker/Step.SROnly.js +21 -0
  41. package/dist-cjs/stepped-tracker/Step.SROnly.js.map +1 -0
  42. package/dist-cjs/stepped-tracker/Step.css.js +6 -0
  43. package/dist-cjs/stepped-tracker/Step.css.js.map +1 -0
  44. package/dist-cjs/stepped-tracker/Step.js +161 -0
  45. package/dist-cjs/stepped-tracker/Step.js.map +1 -0
  46. package/dist-cjs/stepped-tracker/SteppedTracker.Provider.js +19 -0
  47. package/dist-cjs/stepped-tracker/SteppedTracker.Provider.js.map +1 -0
  48. package/dist-cjs/stepped-tracker/SteppedTracker.css.js +1 -1
  49. package/dist-cjs/stepped-tracker/SteppedTracker.js +10 -33
  50. package/dist-cjs/stepped-tracker/SteppedTracker.js.map +1 -1
  51. package/dist-cjs/stepped-tracker/stepReducer.js +109 -0
  52. package/dist-cjs/stepped-tracker/stepReducer.js.map +1 -0
  53. package/dist-cjs/stepped-tracker/useStepReducer.js +16 -0
  54. package/dist-cjs/stepped-tracker/useStepReducer.js.map +1 -0
  55. package/dist-cjs/stepped-tracker/utils.js +86 -0
  56. package/dist-cjs/stepped-tracker/utils.js.map +1 -0
  57. package/dist-es/date-picker/DatePicker.js +3 -2
  58. package/dist-es/date-picker/DatePicker.js.map +1 -1
  59. package/dist-es/date-picker/DatePickerOverlayProvider.js +5 -2
  60. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  61. package/dist-es/date-picker/DatePickerRangeInput.js +1 -1
  62. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  63. package/dist-es/date-picker/DatePickerSingleInput.js +1 -1
  64. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  65. package/dist-es/index.js +2 -3
  66. package/dist-es/index.js.map +1 -1
  67. package/dist-es/skip-link/SkipLink.css.js +1 -1
  68. package/dist-es/skip-link/SkipLink.js +27 -10
  69. package/dist-es/skip-link/SkipLink.js.map +1 -1
  70. package/dist-es/skip-link/internal/useManageFocusOnTarget.js +55 -38
  71. package/dist-es/skip-link/internal/useManageFocusOnTarget.js.map +1 -1
  72. package/dist-es/stepped-tracker/Step.Connector.css.js +4 -0
  73. package/dist-es/stepped-tracker/Step.Connector.css.js.map +1 -0
  74. package/dist-es/stepped-tracker/Step.Connector.js +19 -0
  75. package/dist-es/stepped-tracker/Step.Connector.js.map +1 -0
  76. package/dist-es/stepped-tracker/Step.Description.css.js +4 -0
  77. package/dist-es/stepped-tracker/Step.Description.css.js.map +1 -0
  78. package/dist-es/stepped-tracker/Step.Description.js +33 -0
  79. package/dist-es/stepped-tracker/Step.Description.js.map +1 -0
  80. package/dist-es/stepped-tracker/Step.ExpandTrigger.css.js +4 -0
  81. package/dist-es/stepped-tracker/Step.ExpandTrigger.css.js.map +1 -0
  82. package/dist-es/stepped-tracker/Step.ExpandTrigger.js +36 -0
  83. package/dist-es/stepped-tracker/Step.ExpandTrigger.js.map +1 -0
  84. package/dist-es/stepped-tracker/Step.Icon.css.js +4 -0
  85. package/dist-es/stepped-tracker/Step.Icon.css.js.map +1 -0
  86. package/dist-es/stepped-tracker/Step.Icon.js +55 -0
  87. package/dist-es/stepped-tracker/Step.Icon.js.map +1 -0
  88. package/dist-es/stepped-tracker/Step.Label.css.js +4 -0
  89. package/dist-es/stepped-tracker/Step.Label.css.js.map +1 -0
  90. package/dist-es/stepped-tracker/Step.Label.js +35 -0
  91. package/dist-es/stepped-tracker/Step.Label.js.map +1 -0
  92. package/dist-es/stepped-tracker/Step.SROnly.css.js +4 -0
  93. package/dist-es/stepped-tracker/Step.SROnly.css.js.map +1 -0
  94. package/dist-es/stepped-tracker/Step.SROnly.js +19 -0
  95. package/dist-es/stepped-tracker/Step.SROnly.js.map +1 -0
  96. package/dist-es/stepped-tracker/Step.css.js +4 -0
  97. package/dist-es/stepped-tracker/Step.css.js.map +1 -0
  98. package/dist-es/stepped-tracker/Step.js +159 -0
  99. package/dist-es/stepped-tracker/Step.js.map +1 -0
  100. package/dist-es/stepped-tracker/SteppedTracker.Provider.js +15 -0
  101. package/dist-es/stepped-tracker/SteppedTracker.Provider.js.map +1 -0
  102. package/dist-es/stepped-tracker/SteppedTracker.css.js +1 -1
  103. package/dist-es/stepped-tracker/SteppedTracker.js +11 -34
  104. package/dist-es/stepped-tracker/SteppedTracker.js.map +1 -1
  105. package/dist-es/stepped-tracker/stepReducer.js +107 -0
  106. package/dist-es/stepped-tracker/stepReducer.js.map +1 -0
  107. package/dist-es/stepped-tracker/useStepReducer.js +14 -0
  108. package/dist-es/stepped-tracker/useStepReducer.js.map +1 -0
  109. package/dist-es/stepped-tracker/utils.js +80 -0
  110. package/dist-es/stepped-tracker/utils.js.map +1 -0
  111. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +4 -0
  112. package/dist-types/skip-link/SkipLink.d.ts +6 -11
  113. package/dist-types/skip-link/index.d.ts +0 -1
  114. package/dist-types/skip-link/internal/useManageFocusOnTarget.d.ts +13 -8
  115. package/dist-types/stepped-tracker/Step.Connector.d.ts +1 -0
  116. package/dist-types/stepped-tracker/Step.Description.d.ts +4 -0
  117. package/dist-types/stepped-tracker/Step.ExpandTrigger.d.ts +5 -0
  118. package/dist-types/stepped-tracker/Step.Icon.d.ts +8 -0
  119. package/dist-types/stepped-tracker/Step.Label.d.ts +4 -0
  120. package/dist-types/stepped-tracker/Step.SROnly.d.ts +5 -0
  121. package/dist-types/stepped-tracker/Step.d.ts +2 -0
  122. package/dist-types/stepped-tracker/Step.types.d.ts +21 -0
  123. package/dist-types/stepped-tracker/SteppedTracker.Provider.d.ts +9 -0
  124. package/dist-types/stepped-tracker/SteppedTracker.d.ts +2 -16
  125. package/dist-types/stepped-tracker/SteppedTracker.types.d.ts +6 -0
  126. package/dist-types/stepped-tracker/index.d.ts +5 -2
  127. package/dist-types/stepped-tracker/stepReducer.d.ts +2 -0
  128. package/dist-types/stepped-tracker/stepReducer.types.d.ts +25 -0
  129. package/dist-types/stepped-tracker/useStepReducer.d.ts +3 -0
  130. package/dist-types/stepped-tracker/utils.d.ts +7 -0
  131. package/package.json +14 -12
  132. package/dist-cjs/skip-link/SkipLinks.css.js +0 -6
  133. package/dist-cjs/skip-link/SkipLinks.css.js.map +0 -1
  134. package/dist-cjs/skip-link/SkipLinks.js +0 -24
  135. package/dist-cjs/skip-link/SkipLinks.js.map +0 -1
  136. package/dist-cjs/stepped-tracker/StepLabel/StepLabel.css.js +0 -6
  137. package/dist-cjs/stepped-tracker/StepLabel/StepLabel.css.js.map +0 -1
  138. package/dist-cjs/stepped-tracker/StepLabel/StepLabel.js +0 -25
  139. package/dist-cjs/stepped-tracker/StepLabel/StepLabel.js.map +0 -1
  140. package/dist-cjs/stepped-tracker/SteppedTrackerContext.js +0 -43
  141. package/dist-cjs/stepped-tracker/SteppedTrackerContext.js.map +0 -1
  142. package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.css.js +0 -6
  143. package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.css.js.map +0 -1
  144. package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.js +0 -22
  145. package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.js.map +0 -1
  146. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js +0 -6
  147. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js.map +0 -1
  148. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +0 -96
  149. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +0 -1
  150. package/dist-es/skip-link/SkipLinks.css.js +0 -4
  151. package/dist-es/skip-link/SkipLinks.css.js.map +0 -1
  152. package/dist-es/skip-link/SkipLinks.js +0 -22
  153. package/dist-es/skip-link/SkipLinks.js.map +0 -1
  154. package/dist-es/stepped-tracker/StepLabel/StepLabel.css.js +0 -4
  155. package/dist-es/stepped-tracker/StepLabel/StepLabel.css.js.map +0 -1
  156. package/dist-es/stepped-tracker/StepLabel/StepLabel.js +0 -23
  157. package/dist-es/stepped-tracker/StepLabel/StepLabel.js.map +0 -1
  158. package/dist-es/stepped-tracker/SteppedTrackerContext.js +0 -38
  159. package/dist-es/stepped-tracker/SteppedTrackerContext.js.map +0 -1
  160. package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.css.js +0 -4
  161. package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.css.js.map +0 -1
  162. package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.js +0 -20
  163. package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.js.map +0 -1
  164. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js +0 -4
  165. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js.map +0 -1
  166. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +0 -94
  167. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +0 -1
  168. package/dist-types/skip-link/SkipLinks.d.ts +0 -2
  169. package/dist-types/stepped-tracker/StepLabel/StepLabel.d.ts +0 -9
  170. package/dist-types/stepped-tracker/StepLabel/index.d.ts +0 -1
  171. package/dist-types/stepped-tracker/SteppedTrackerContext.d.ts +0 -18
  172. package/dist-types/stepped-tracker/TrackerConnector/TrackerConnector.d.ts +0 -9
  173. package/dist-types/stepped-tracker/TrackerConnector/index.d.ts +0 -1
  174. package/dist-types/stepped-tracker/TrackerStep/TrackerStep.d.ts +0 -18
  175. package/dist-types/stepped-tracker/TrackerStep/index.d.ts +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Step.js","sources":["../src/stepped-tracker/Step.tsx"],"sourcesContent":["import { makePrefixer, useControlled, useId } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport clsx from \"clsx\";\nimport { type CSSProperties, useContext, useEffect } from \"react\";\n\nimport { StepConnector } from \"./Step.Connector\";\nimport { StepDescription } from \"./Step.Description\";\nimport { StepExpandTrigger } from \"./Step.ExpandTrigger\";\nimport { StepIcon } from \"./Step.Icon\";\nimport { StepLabel } from \"./Step.Label\";\nimport { StepSROnly } from \"./Step.SROnly\";\nimport stepCSS from \"./Step.css\";\nimport { SteppedTracker } from \"./SteppedTracker\";\nimport { DepthContext } from \"./SteppedTracker.Provider\";\n\nimport type { StepProps } from \"./Step.types\";\n\nconst withBaseName = makePrefixer(\"saltStep\");\n\nexport function Step({\n id: idProp,\n label,\n description,\n status,\n stage = \"pending\",\n expanded: expandedProp,\n defaultExpanded,\n onToggle,\n className,\n style,\n substeps,\n children,\n ...props\n}: StepProps) {\n const id = useId(idProp);\n const targetWindow = useWindow();\n const depth = useContext(DepthContext);\n\n const [expanded, setExpanded] = useControlled({\n name: \"Step\",\n state: \"expanded\",\n controlled: expandedProp,\n default: Boolean(defaultExpanded),\n });\n\n useComponentCssInjection({\n testId: \"salt-step\",\n css: stepCSS,\n window: targetWindow,\n });\n\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n if (depth === -1) {\n console.warn(\n \"<Step /> should be used within a <SteppedTracker /> component!\",\n );\n }\n\n if (depth > 2) {\n console.warn(\"<Step /> should not be nested more than 2 levels deep!\");\n }\n }\n }, [depth]);\n\n const ariaCurrent = stage === \"active\" ? \"step\" : undefined;\n const iconSizeMultiplier = depth === 0 ? 1.5 : 1;\n const hasNestedSteps = !!children || !!substeps;\n const state = status || stage;\n\n const labelId = `${id}-label`;\n const descriptionId = `${id}-description`;\n const expandTriggerId = `${id}-expand-trigger`;\n const nestedSteppedTrackerId = `${id}-nested-stepped-tracker`;\n\n const srOnly = {\n stateId: `${id}-sr-only-state`,\n stateText: state !== \"active\" ? state : undefined,\n substepsId: `${id}-sr-only-substeps`,\n substepsText: \"substeps\",\n toggleSubstepsId: `${id}-sr-only-toggle-substeps`,\n toggleSubstepsText: \"toggle substeps\",\n };\n\n return (\n <li\n id={id}\n data-stage={stage}\n data-status={status}\n data-depth={depth}\n aria-current={ariaCurrent}\n className={clsx(\n withBaseName(),\n withBaseName(`stage-${stage}`),\n withBaseName(`depth-${depth}`),\n status && withBaseName(`status-${status}`),\n !hasNestedSteps && withBaseName(\"terminal\"),\n hasNestedSteps && expanded && withBaseName(\"expanded\"),\n hasNestedSteps && !expanded && withBaseName(\"collapsed\"),\n className,\n )}\n style={\n {\n \"--saltStep-depth\": depth,\n ...style,\n } as CSSProperties\n }\n {...props}\n >\n <StepSROnly>\n {label} {description} {srOnly.stateText}\n </StepSROnly>\n <StepSROnly id={srOnly.toggleSubstepsId} aria-hidden>\n {srOnly.toggleSubstepsText}\n </StepSROnly>\n <StepSROnly id={srOnly.substepsId} aria-hidden>\n {srOnly.substepsText}\n </StepSROnly>\n <StepSROnly id={srOnly.stateId} aria-hidden>\n {srOnly.stateText}\n </StepSROnly>\n <StepConnector />\n <StepIcon\n stage={stage}\n status={status}\n sizeMultiplier={iconSizeMultiplier}\n aria-hidden\n />\n {label && (\n <StepLabel id={labelId} aria-hidden>\n {label}\n </StepLabel>\n )}\n {description && (\n <StepDescription id={descriptionId} aria-hidden>\n {description}\n </StepDescription>\n )}\n {hasNestedSteps && (\n <StepExpandTrigger\n id={expandTriggerId}\n aria-expanded={expanded}\n aria-controls={nestedSteppedTrackerId}\n aria-labelledby={[\n labelId,\n descriptionId,\n srOnly.stateId,\n srOnly.toggleSubstepsId,\n ].join(\" \")}\n expanded={expanded}\n onClick={(event) => {\n onToggle?.(event);\n setExpanded(!expanded);\n }}\n />\n )}\n {hasNestedSteps && (\n <SteppedTracker\n id={nestedSteppedTrackerId}\n aria-labelledby={[labelId, srOnly.substepsId].join(\" \")}\n aria-hidden={!expanded}\n hidden={!expanded}\n >\n {children}\n {substeps?.map((step) => (\n <Step key={step.id} {...step} />\n ))}\n </SteppedTracker>\n )}\n </li>\n );\n}\n"],"names":["stepCSS"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { createContext, useContext } from 'react';
3
+
4
+ const DepthContext = createContext(-1);
5
+ const OrientationContext = createContext("horizontal");
6
+ function SteppedTrackerProvider({
7
+ orientation: orientationProp,
8
+ children
9
+ }) {
10
+ const depth = useContext(DepthContext);
11
+ return /* @__PURE__ */ jsx(OrientationContext.Provider, { value: orientationProp, children: /* @__PURE__ */ jsx(DepthContext.Provider, { value: depth + 1, children }) });
12
+ }
13
+
14
+ export { DepthContext, OrientationContext, SteppedTrackerProvider };
15
+ //# sourceMappingURL=SteppedTracker.Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SteppedTracker.Provider.js","sources":["../src/stepped-tracker/SteppedTracker.Provider.tsx"],"sourcesContent":["import { type ReactNode, createContext, useContext } from \"react\";\n\nimport type { StepDepth } from \"./Step.types\";\nimport type { SteppedTrackerOrientation } from \"./SteppedTracker.types\";\n\nexport const DepthContext = createContext<StepDepth>(-1);\nexport const OrientationContext =\n createContext<SteppedTrackerOrientation>(\"horizontal\");\n\nexport interface SteppedTrackerProviderProps {\n orientation: SteppedTrackerOrientation;\n children: ReactNode;\n}\n\nexport function SteppedTrackerProvider({\n orientation: orientationProp,\n children,\n}: SteppedTrackerProviderProps) {\n const depth = useContext(DepthContext);\n\n return (\n <OrientationContext.Provider value={orientationProp}>\n <DepthContext.Provider value={depth + 1}>\n {children}\n </DepthContext.Provider>\n </OrientationContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;AAKa,MAAA,YAAA,GAAe,cAAyB,CAAE,CAAA;AAC1C,MAAA,kBAAA,GACX,cAAyC,YAAY;AAOhD,SAAS,sBAAuB,CAAA;AAAA,EACrC,WAAa,EAAA,eAAA;AAAA,EACb;AACF,CAAgC,EAAA;AAC9B,EAAM,MAAA,KAAA,GAAQ,WAAW,YAAY,CAAA;AAErC,EAAA,uBACG,GAAA,CAAA,kBAAA,CAAmB,QAAnB,EAAA,EAA4B,OAAO,eAClC,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,KAAQ,GAAA,CAAA,EACnC,UACH,CACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltSteppedTracker {\n margin: 0;\n padding: 0;\n text-indent: 0;\n list-style-type: none;\n display: flex;\n width: 100%;\n position: relative;\n}\n\n.saltSteppedTracker.saltSteppedTracker-horizontal {\n flex-direction: row;\n}\n\n.saltSteppedTracker.saltSteppedTracker-vertical {\n flex-direction: column;\n}\n";
1
+ var css_248z = ".saltSteppedTracker {\n grid-area: stepped-tracker;\n width: 100%;\n height: 100%;\n\n margin: 0;\n padding: 0;\n list-style-type: none;\n transition-duration: var(--salt-duration-perceptible);\n transition-timing-function: ease-in-out;\n transition-property: opacity, visibility;\n}\n\n@media (prefers-reduced-motion) {\n .saltSteppedTracker {\n transition-duration: var(--salt-duration-instant);\n }\n}\n\n.saltSteppedTracker-horizontal {\n display: flex;\n flex-direction: row;\n}\n\n.saltSteppedTracker-vertical {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.saltSteppedTracker-vertical > .saltStep.saltStep-expanded > .saltSteppedTracker {\n opacity: 1;\n visibility: visible;\n}\n\n.saltSteppedTracker-vertical > .saltStep.saltStep-collapsed > .saltSteppedTracker {\n opacity: 0;\n visibility: hidden;\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=SteppedTracker.css.js.map
@@ -3,51 +3,28 @@ import { makePrefixer } from '@salt-ds/core';
3
3
  import { useComponentCssInjection } from '@salt-ds/styles';
4
4
  import { useWindow } from '@salt-ds/window';
5
5
  import { clsx } from 'clsx';
6
- import { forwardRef, Children, useEffect, isValidElement } from 'react';
7
- import { SteppedTrackerProvider, TrackerStepProvider } from './SteppedTrackerContext.js';
6
+ import { forwardRef, useContext } from 'react';
7
+ import { OrientationContext, SteppedTrackerProvider } from './SteppedTracker.Provider.js';
8
8
  import css_248z from './SteppedTracker.css.js';
9
9
 
10
10
  const withBaseName = makePrefixer("saltSteppedTracker");
11
- const useCheckInvalidChildren = (children) => {
12
- useEffect(() => {
13
- if (process.env.NODE_ENV !== "production") {
14
- let hasInvalidChild = false;
15
- Children.forEach(children, (child) => {
16
- if (!isValidElement(child)) {
17
- hasInvalidChild = true;
18
- }
19
- });
20
- if (hasInvalidChild) {
21
- console.error(
22
- "Invalid child: children of SteppedTracker must be a TrackerStep component"
23
- );
24
- }
25
- }
26
- }, [children]);
27
- };
28
11
  const SteppedTracker = forwardRef(
29
- function SteppedTracker2({
30
- children,
31
- className,
32
- activeStep,
33
- orientation = "horizontal",
34
- ...restProps
35
- }, ref) {
12
+ function SteppedTracker2({ orientation: orientationProp, children, className, ...props }, ref) {
36
13
  const targetWindow = useWindow();
14
+ const orientationContext = useContext(OrientationContext);
15
+ const orientation = orientationProp || orientationContext;
37
16
  useComponentCssInjection({
38
- testId: "salt-stepped-tracker",
17
+ testId: "salt-SteppedTracker",
39
18
  css: css_248z,
40
19
  window: targetWindow
41
20
  });
42
- useCheckInvalidChildren(children);
43
- const totalSteps = Children.count(children);
44
- return /* @__PURE__ */ jsx(SteppedTrackerProvider, { totalSteps, activeStep, children: /* @__PURE__ */ jsx(
45
- "ul",
21
+ return /* @__PURE__ */ jsx(SteppedTrackerProvider, { orientation, children: /* @__PURE__ */ jsx(
22
+ "ol",
46
23
  {
47
- className: clsx(withBaseName(), className, withBaseName(orientation)),
24
+ className: clsx(withBaseName(), withBaseName(orientation), className),
48
25
  ref,
49
- ...restProps,
50
- children: Children.map(children, (child, i) => /* @__PURE__ */ jsx(TrackerStepProvider, { stepNumber: i, children: child }))
26
+ ...props,
27
+ children
51
28
  }
52
29
  ) });
53
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SteppedTracker.js","sources":["../src/stepped-tracker/SteppedTracker.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n Children,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type ReactNode,\n forwardRef,\n isValidElement,\n useEffect,\n} from \"react\";\n\nimport {\n SteppedTrackerProvider,\n TrackerStepProvider,\n} from \"./SteppedTrackerContext\";\n\nimport steppedTrackerCss from \"./SteppedTracker.css\";\n\nconst withBaseName = makePrefixer(\"saltSteppedTracker\");\n\nexport interface SteppedTrackerProps extends ComponentPropsWithoutRef<\"ul\"> {\n /**\n * The index of the current activeStep\n */\n activeStep: number;\n /**\n * Should be one or more TrackerStep components\n */\n children: ReactNode;\n /**\n * The orientation of the SteppedTracker. Defaults to `horizontal`\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nconst useCheckInvalidChildren = (children: ReactNode) => {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n let hasInvalidChild = false;\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n hasInvalidChild = true;\n }\n });\n\n if (hasInvalidChild) {\n console.error(\n \"Invalid child: children of SteppedTracker must be a TrackerStep component\",\n );\n }\n }\n }, [children]);\n};\n\nexport const SteppedTracker = forwardRef<HTMLUListElement, SteppedTrackerProps>(\n function SteppedTracker(\n {\n children,\n className,\n activeStep,\n orientation = \"horizontal\",\n ...restProps\n },\n ref,\n ): ReactElement<SteppedTrackerProps> {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-stepped-tracker\",\n css: steppedTrackerCss,\n window: targetWindow,\n });\n useCheckInvalidChildren(children);\n\n const totalSteps = Children.count(children);\n\n return (\n <SteppedTrackerProvider totalSteps={totalSteps} activeStep={activeStep}>\n <ul\n className={clsx(withBaseName(), className, withBaseName(orientation))}\n ref={ref}\n {...restProps}\n >\n {Children.map(children, (child, i) => (\n <TrackerStepProvider stepNumber={i}>{child}</TrackerStepProvider>\n ))}\n </ul>\n </SteppedTrackerProvider>\n );\n },\n);\n"],"names":["SteppedTracker","steppedTrackerCss"],"mappings":";;;;;;;;;AAqBA,MAAM,YAAA,GAAe,aAAa,oBAAoB,CAAA;AAiBtD,MAAM,uBAAA,GAA0B,CAAC,QAAwB,KAAA;AACvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,MAAA,IAAI,eAAkB,GAAA,KAAA;AACtB,MAAS,QAAA,CAAA,OAAA,CAAQ,QAAU,EAAA,CAAC,KAAU,KAAA;AACpC,QAAI,IAAA,CAAC,cAAe,CAAA,KAAK,CAAG,EAAA;AAC1B,UAAkB,eAAA,GAAA,IAAA;AAAA;AACpB,OACD,CAAA;AAED,MAAA,IAAI,eAAiB,EAAA;AACnB,QAAQ,OAAA,CAAA,KAAA;AAAA,UACN;AAAA,SACF;AAAA;AACF;AACF,GACF,EAAG,CAAC,QAAQ,CAAC,CAAA;AACf,CAAA;AAEO,MAAM,cAAiB,GAAA,UAAA;AAAA,EAC5B,SAASA,eACP,CAAA;AAAA,IACE,QAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAc,GAAA,YAAA;AAAA,IACd,GAAG;AAAA,KAEL,GACmC,EAAA;AACnC,IAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,sBAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AACD,IAAA,uBAAA,CAAwB,QAAQ,CAAA;AAEhC,IAAM,MAAA,UAAA,GAAa,QAAS,CAAA,KAAA,CAAM,QAAQ,CAAA;AAE1C,IACE,uBAAA,GAAA,CAAC,sBAAuB,EAAA,EAAA,UAAA,EAAwB,UAC9C,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,WAAW,IAAK,CAAA,YAAA,IAAgB,SAAW,EAAA,YAAA,CAAa,WAAW,CAAC,CAAA;AAAA,QACpE,GAAA;AAAA,QACC,GAAG,SAAA;AAAA,QAEH,QAAA,EAAA,QAAA,CAAS,GAAI,CAAA,QAAA,EAAU,CAAC,KAAA,EAAO,CAC9B,qBAAA,GAAA,CAAC,mBAAoB,EAAA,EAAA,UAAA,EAAY,CAAI,EAAA,QAAA,EAAA,KAAA,EAAM,CAC5C;AAAA;AAAA,KAEL,EAAA,CAAA;AAAA;AAGN;;;;"}
1
+ {"version":3,"file":"SteppedTracker.js","sources":["../src/stepped-tracker/SteppedTracker.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, useContext } from \"react\";\n\nimport {\n OrientationContext,\n SteppedTrackerProvider,\n} from \"./SteppedTracker.Provider\";\nimport SteppedTrackerCSS from \"./SteppedTracker.css\";\nimport type { SteppedTrackerProps } from \"./SteppedTracker.types\";\n\nconst withBaseName = makePrefixer(\"saltSteppedTracker\");\n\nexport const SteppedTracker = forwardRef<HTMLOListElement, SteppedTrackerProps>(\n function SteppedTracker(\n { orientation: orientationProp, children, className, ...props },\n ref,\n ) {\n const targetWindow = useWindow();\n const orientationContext = useContext(OrientationContext);\n const orientation = orientationProp || orientationContext;\n\n useComponentCssInjection({\n testId: \"salt-SteppedTracker\",\n css: SteppedTrackerCSS,\n window: targetWindow,\n });\n\n return (\n <SteppedTrackerProvider orientation={orientation}>\n <ol\n className={clsx(withBaseName(), withBaseName(orientation), className)}\n ref={ref}\n {...props}\n >\n {children}\n </ol>\n </SteppedTrackerProvider>\n );\n },\n);\n"],"names":["SteppedTracker","SteppedTrackerCSS"],"mappings":";;;;;;;;;AAaA,MAAM,YAAA,GAAe,aAAa,oBAAoB,CAAA;AAE/C,MAAM,cAAiB,GAAA,UAAA;AAAA,EAC5B,SAASA,eACP,CAAA,EAAE,WAAa,EAAA,eAAA,EAAiB,UAAU,SAAW,EAAA,GAAG,KAAM,EAAA,EAC9D,GACA,EAAA;AACA,IAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,IAAM,MAAA,kBAAA,GAAqB,WAAW,kBAAkB,CAAA;AACxD,IAAA,MAAM,cAAc,eAAmB,IAAA,kBAAA;AAEvC,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,qBAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IACE,uBAAA,GAAA,CAAC,0BAAuB,WACtB,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,WAAW,IAAK,CAAA,YAAA,IAAgB,YAAa,CAAA,WAAW,GAAG,SAAS,CAAA;AAAA,QACpE,GAAA;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KAEL,EAAA,CAAA;AAAA;AAGN;;;;"}
@@ -0,0 +1,107 @@
1
+ import { resetSteps, flattenSteps, autoStageSteps, assignSteps } from './utils.js';
2
+
3
+ function stepReducer(state, action) {
4
+ var _a, _b;
5
+ if (action.type === "next") {
6
+ if (((_a = state.activeStep) == null ? void 0 : _a.status) === "error") {
7
+ return state;
8
+ }
9
+ const steps = resetSteps(state.steps);
10
+ const flatSteps = flattenSteps(steps);
11
+ if (state.nextStep) {
12
+ const activeStepIndex2 = state.activeStepIndex + 1;
13
+ const activeStep2 = flatSteps[activeStepIndex2];
14
+ const previousStep2 = flatSteps[activeStepIndex2 - 1] || null;
15
+ const nextStep2 = flatSteps[activeStepIndex2 + 1] || null;
16
+ if (activeStep2) {
17
+ activeStep2.stage = "active";
18
+ }
19
+ return {
20
+ steps: autoStageSteps(steps),
21
+ flatSteps,
22
+ activeStepIndex: activeStepIndex2,
23
+ activeStep: activeStep2,
24
+ previousStep: previousStep2,
25
+ nextStep: nextStep2,
26
+ started: true,
27
+ ended: false
28
+ };
29
+ }
30
+ const activeStepIndex = flatSteps.length;
31
+ const previousStep = flatSteps.at(-1);
32
+ const activeStep = null;
33
+ const nextStep = null;
34
+ return {
35
+ steps: assignSteps(steps, "completed"),
36
+ flatSteps,
37
+ activeStepIndex,
38
+ activeStep,
39
+ previousStep,
40
+ nextStep,
41
+ started: true,
42
+ ended: true
43
+ };
44
+ }
45
+ if (action.type === "previous") {
46
+ if (((_b = state.activeStep) == null ? void 0 : _b.status) === "error") {
47
+ return state;
48
+ }
49
+ const steps = resetSteps(state.steps);
50
+ const flatSteps = flattenSteps(steps);
51
+ if (state.previousStep) {
52
+ const activeStepIndex2 = state.activeStepIndex - 1;
53
+ const activeStep2 = flatSteps[activeStepIndex2];
54
+ const previousStep2 = flatSteps[activeStepIndex2 - 1] || null;
55
+ const nextStep2 = flatSteps[activeStepIndex2 + 1] || null;
56
+ if (activeStep2) {
57
+ activeStep2.stage = "active";
58
+ }
59
+ return {
60
+ steps: autoStageSteps(steps),
61
+ flatSteps,
62
+ activeStepIndex: activeStepIndex2,
63
+ activeStep: activeStep2,
64
+ previousStep: previousStep2,
65
+ nextStep: nextStep2,
66
+ started: true,
67
+ ended: false
68
+ };
69
+ }
70
+ const activeStepIndex = -1;
71
+ const activeStep = null;
72
+ const previousStep = null;
73
+ const nextStep = flatSteps.at(0);
74
+ return {
75
+ steps: assignSteps(steps, "pending"),
76
+ flatSteps,
77
+ activeStepIndex,
78
+ activeStep,
79
+ previousStep,
80
+ nextStep,
81
+ ended: false,
82
+ started: false
83
+ };
84
+ }
85
+ if (action.type === "error") {
86
+ if (state.activeStep) {
87
+ state.activeStep.status = "error";
88
+ return { ...state };
89
+ }
90
+ }
91
+ if (action.type === "warning") {
92
+ if (state.activeStep) {
93
+ state.activeStep.status = "warning";
94
+ return { ...state };
95
+ }
96
+ }
97
+ if (action.type === "clear") {
98
+ if (state.activeStep) {
99
+ state.activeStep.status = void 0;
100
+ return { ...state };
101
+ }
102
+ }
103
+ return state;
104
+ }
105
+
106
+ export { stepReducer as default };
107
+ //# sourceMappingURL=stepReducer.js.map
@@ -0,0 +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":["activeStepIndex","activeStep","previousStep","nextStep"],"mappings":";;AAGwB,SAAA,WAAA,CACtB,OACA,MACA,EAAA;AANF,EAAA,IAAA,EAAA,EAAA,EAAA;AAOE,EAAI,IAAA,MAAA,CAAO,SAAS,MAAQ,EAAA;AAC1B,IAAA,IAAA,CAAA,CAAI,EAAM,GAAA,KAAA,CAAA,UAAA,KAAN,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,MAAW,OAAS,EAAA;AACxC,MAAO,OAAA,KAAA;AAAA;AAGT,IAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,KAAA,CAAM,KAAK,CAAA;AACpC,IAAM,MAAA,SAAA,GAAY,aAAa,KAAK,CAAA;AAEpC,IAAA,IAAI,MAAM,QAAU,EAAA;AAClB,MAAMA,MAAAA,gBAAAA,GAAkB,MAAM,eAAkB,GAAA,CAAA;AAChD,MAAMC,MAAAA,WAAAA,GAAa,UAAUD,gBAAe,CAAA;AAC5C,MAAA,MAAME,aAAe,GAAA,SAAA,CAAUF,gBAAkB,GAAA,CAAC,CAAK,IAAA,IAAA;AACvD,MAAA,MAAMG,SAAW,GAAA,SAAA,CAAUH,gBAAkB,GAAA,CAAC,CAAK,IAAA,IAAA;AAEnD,MAAA,IAAIC,WAAY,EAAA;AACd,QAAAA,YAAW,KAAQ,GAAA,QAAA;AAAA;AAGrB,MAAO,OAAA;AAAA,QACL,KAAA,EAAO,eAAe,KAAK,CAAA;AAAA,QAC3B,SAAA;AAAA,QACA,eAAAD,EAAAA,gBAAAA;AAAA,QACA,UAAAC,EAAAA,WAAAA;AAAA,QACA,YAAAC,EAAAA,aAAAA;AAAA,QACA,QAAAC,EAAAA,SAAAA;AAAA,QACA,OAAS,EAAA,IAAA;AAAA,QACT,KAAO,EAAA;AAAA,OACT;AAAA;AAGF,IAAA,MAAM,kBAAkB,SAAU,CAAA,MAAA;AAClC,IAAM,MAAA,YAAA,GAAe,SAAU,CAAA,EAAA,CAAG,CAAE,CAAA,CAAA;AACpC,IAAA,MAAM,UAAa,GAAA,IAAA;AACnB,IAAA,MAAM,QAAW,GAAA,IAAA;AAEjB,IAAO,OAAA;AAAA,MACL,KAAA,EAAO,WAAY,CAAA,KAAA,EAAO,WAAW,CAAA;AAAA,MACrC,SAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAS,EAAA,IAAA;AAAA,MACT,KAAO,EAAA;AAAA,KACT;AAAA;AAGF,EAAI,IAAA,MAAA,CAAO,SAAS,UAAY,EAAA;AAC9B,IAAA,IAAA,CAAA,CAAI,EAAM,GAAA,KAAA,CAAA,UAAA,KAAN,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,MAAW,OAAS,EAAA;AACxC,MAAO,OAAA,KAAA;AAAA;AAGT,IAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,KAAA,CAAM,KAAK,CAAA;AACpC,IAAM,MAAA,SAAA,GAAY,aAAa,KAAK,CAAA;AAEpC,IAAA,IAAI,MAAM,YAAc,EAAA;AACtB,MAAMH,MAAAA,gBAAAA,GAAkB,MAAM,eAAkB,GAAA,CAAA;AAChD,MAAMC,MAAAA,WAAAA,GAAa,UAAUD,gBAAe,CAAA;AAC5C,MAAA,MAAME,aAAe,GAAA,SAAA,CAAUF,gBAAkB,GAAA,CAAC,CAAK,IAAA,IAAA;AACvD,MAAA,MAAMG,SAAW,GAAA,SAAA,CAAUH,gBAAkB,GAAA,CAAC,CAAK,IAAA,IAAA;AAEnD,MAAA,IAAIC,WAAY,EAAA;AACd,QAAAA,YAAW,KAAQ,GAAA,QAAA;AAAA;AAGrB,MAAO,OAAA;AAAA,QACL,KAAA,EAAO,eAAe,KAAK,CAAA;AAAA,QAC3B,SAAA;AAAA,QACA,eAAAD,EAAAA,gBAAAA;AAAA,QACA,UAAAC,EAAAA,WAAAA;AAAA,QACA,YAAAC,EAAAA,aAAAA;AAAA,QACA,QAAAC,EAAAA,SAAAA;AAAA,QACA,OAAS,EAAA,IAAA;AAAA,QACT,KAAO,EAAA;AAAA,OACT;AAAA;AAGF,IAAA,MAAM,eAAkB,GAAA,CAAA,CAAA;AACxB,IAAA,MAAM,UAAa,GAAA,IAAA;AACnB,IAAA,MAAM,YAAe,GAAA,IAAA;AACrB,IAAM,MAAA,QAAA,GAAW,SAAU,CAAA,EAAA,CAAG,CAAC,CAAA;AAE/B,IAAO,OAAA;AAAA,MACL,KAAA,EAAO,WAAY,CAAA,KAAA,EAAO,SAAS,CAAA;AAAA,MACnC,SAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAO,EAAA,KAAA;AAAA,MACP,OAAS,EAAA;AAAA,KACX;AAAA;AAGF,EAAI,IAAA,MAAA,CAAO,SAAS,OAAS,EAAA;AAC3B,IAAA,IAAI,MAAM,UAAY,EAAA;AACpB,MAAA,KAAA,CAAM,WAAW,MAAS,GAAA,OAAA;AAC1B,MAAO,OAAA,EAAE,GAAG,KAAM,EAAA;AAAA;AACpB;AAGF,EAAI,IAAA,MAAA,CAAO,SAAS,SAAW,EAAA;AAC7B,IAAA,IAAI,MAAM,UAAY,EAAA;AACpB,MAAA,KAAA,CAAM,WAAW,MAAS,GAAA,SAAA;AAC1B,MAAO,OAAA,EAAE,GAAG,KAAM,EAAA;AAAA;AACpB;AAGF,EAAI,IAAA,MAAA,CAAO,SAAS,OAAS,EAAA;AAC3B,IAAA,IAAI,MAAM,UAAY,EAAA;AACpB,MAAA,KAAA,CAAM,WAAW,MAAS,GAAA,KAAA,CAAA;AAC1B,MAAO,OAAA,EAAE,GAAG,KAAM,EAAA;AAAA;AACpB;AAGF,EAAO,OAAA,KAAA;AACT;;;;"}
@@ -0,0 +1,14 @@
1
+ import { useMemo, useReducer } from 'react';
2
+ import stepReducer from './stepReducer.js';
3
+ import { initStepReducerState } from './utils.js';
4
+
5
+ function useStepReducer(initialSteps, options) {
6
+ const state = useMemo(
7
+ () => initStepReducerState(initialSteps, options),
8
+ [initialSteps, options]
9
+ );
10
+ return useReducer(stepReducer, state);
11
+ }
12
+
13
+ export { useStepReducer };
14
+ //# sourceMappingURL=useStepReducer.js.map
@@ -0,0 +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":[],"mappings":";;;;AAQgB,SAAA,cAAA,CACd,cACA,OACA,EAAA;AACA,EAAA,MAAM,KAAQ,GAAA,OAAA;AAAA,IACZ,MAAM,oBAAqB,CAAA,YAAA,EAAc,OAAO,CAAA;AAAA,IAChD,CAAC,cAAc,OAAO;AAAA,GACxB;AAEA,EAAO,OAAA,UAAA,CAAW,aAAa,KAAK,CAAA;AACtC;;;;"}
@@ -0,0 +1,80 @@
1
+ function assignSteps(steps, stage) {
2
+ return steps.map((step) => {
3
+ step.stage = stage;
4
+ if (step.substeps) {
5
+ step.substeps = assignSteps(step.substeps, stage);
6
+ }
7
+ return step;
8
+ });
9
+ }
10
+ function resetSteps(steps) {
11
+ return assignSteps(steps, void 0);
12
+ }
13
+ function autoStageSteps(steps, options) {
14
+ function autoStageHelper(steps2) {
15
+ const pivotIndex = steps2.findIndex(
16
+ (step) => (step == null ? void 0 : step.id) && (options == null ? void 0 : options.activeStepId) && step.id === options.activeStepId || step.stage === "active" || step.stage === "inprogress"
17
+ );
18
+ if (pivotIndex !== -1) {
19
+ const activeStep = steps2[pivotIndex];
20
+ activeStep.stage ||= "active";
21
+ const previousSteps = assignSteps(
22
+ steps2.slice(0, pivotIndex),
23
+ "completed"
24
+ );
25
+ const nextSteps = assignSteps(steps2.slice(pivotIndex + 1), "pending");
26
+ return [...previousSteps, activeStep, ...nextSteps];
27
+ }
28
+ return steps2.reduce(
29
+ (acc, step, index) => {
30
+ if (step.substeps) {
31
+ const substeps = autoStageHelper(step.substeps);
32
+ if (substeps) {
33
+ steps2[index].substeps = substeps;
34
+ steps2[index].stage = "inprogress";
35
+ return autoStageHelper(steps2);
36
+ }
37
+ }
38
+ return acc;
39
+ },
40
+ null
41
+ );
42
+ }
43
+ return autoStageHelper(steps) || assignSteps(steps, steps[0].stage || "pending");
44
+ }
45
+ function flattenSteps(steps) {
46
+ return steps.reduce((acc, step) => {
47
+ if (step.substeps) {
48
+ acc.push(...flattenSteps(step.substeps));
49
+ return acc;
50
+ }
51
+ acc.push(step);
52
+ return acc;
53
+ }, []);
54
+ }
55
+ function initStepReducerState(initialSteps, options) {
56
+ const steps = autoStageSteps(initialSteps, options);
57
+ const flatSteps = flattenSteps(steps);
58
+ const started = !flatSteps.every((step) => step.stage === "pending");
59
+ const ended = flatSteps.every((step) => step.stage === "completed");
60
+ let activeStepIndex = flatSteps.findIndex((step) => step.stage === "active");
61
+ if (activeStepIndex === -1 && ended) {
62
+ activeStepIndex = flatSteps.length;
63
+ }
64
+ const activeStep = flatSteps[activeStepIndex] || null;
65
+ const previousStep = flatSteps[activeStepIndex - 1] || null;
66
+ const nextStep = flatSteps[activeStepIndex + 1] || null;
67
+ return {
68
+ steps,
69
+ flatSteps,
70
+ activeStep,
71
+ previousStep,
72
+ nextStep,
73
+ activeStepIndex,
74
+ ended,
75
+ started
76
+ };
77
+ }
78
+
79
+ export { assignSteps, autoStageSteps, flattenSteps, initStepReducerState, resetSteps };
80
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +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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"}
@@ -71,6 +71,10 @@ interface DatePickerOverlayProviderProps {
71
71
  * The content to be rendered inside the overlay provider.
72
72
  */
73
73
  children: ReactNode;
74
+ /**
75
+ * When true, shouldn't open the overlay.
76
+ */
77
+ readOnly?: boolean;
74
78
  }
75
79
  export declare const DatePickerOverlayProvider: React.FC<DatePickerOverlayProviderProps>;
76
80
  export declare const useDatePickerOverlay: () => DatePickerOverlayContextType;
@@ -1,15 +1,10 @@
1
- import { type LinkProps } from "@salt-ds/core";
2
- import { type RefObject } from "react";
3
- interface SkipLinkProps extends LinkProps {
1
+ import { type ComponentPropsWithoutRef } from "react";
2
+ interface SkipLinkProps extends ComponentPropsWithoutRef<"a"> {
4
3
  /**
5
- * This is a ref that has access to the target element.
6
- *
7
- * This will be used to apply focus to that element
8
- *
9
- * Refs are referentially stable so if this changes it won't be picked up
10
- * will need to find a better way of passing in the target element to apply the attributes
4
+ * The ID of the target element to apply focus when the link is clicked.
5
+ * If the element with this ID is not found, the SkipLink will not be rendered.
11
6
  */
12
- targetRef?: RefObject<HTMLElement>;
7
+ targetId: string;
13
8
  }
14
- export declare const SkipLink: import("react").ForwardRefExoticComponent<Omit<SkipLinkProps, "ref"> & import("react").RefAttributes<HTMLAnchorElement>>;
9
+ export declare const SkipLink: import("react").ForwardRefExoticComponent<SkipLinkProps & import("react").RefAttributes<HTMLAnchorElement>>;
15
10
  export {};
@@ -1,2 +1 @@
1
1
  export * from "./SkipLink";
2
- export * from "./SkipLinks";
@@ -1,10 +1,15 @@
1
- /// <reference types="cypress" />
2
- /// <reference types="node" />
3
- import { type RefObject } from "react";
4
- export declare const useManageFocusOnTarget: ({ targetRef, targetClass, }: {
1
+ import { type FocusEventHandler, type KeyboardEventHandler, type MouseEventHandler, type RefObject } from "react";
2
+ interface ManageFocusOnTargetProps {
3
+ onBlur?: FocusEventHandler;
4
+ onClick?: MouseEventHandler;
5
+ onKeyUp?: KeyboardEventHandler;
5
6
  targetRef: RefObject<HTMLElement> | undefined;
6
7
  targetClass: string;
7
- }) => {
8
- onBlur: () => NodeJS.Timeout;
9
- onClick: () => void;
10
- } | Record<string, undefined>;
8
+ }
9
+ interface ManageFocusOnTargetResult {
10
+ onBlur?: FocusEventHandler<HTMLAnchorElement>;
11
+ onClick?: MouseEventHandler<HTMLAnchorElement>;
12
+ onKeyUp?: KeyboardEventHandler<HTMLAnchorElement>;
13
+ }
14
+ export declare const useManageFocusOnTarget: ({ onKeyUp, onBlur, onClick, targetRef, targetClass, }: ManageFocusOnTargetProps) => ManageFocusOnTargetResult;
15
+ export {};
@@ -0,0 +1 @@
1
+ export declare function StepConnector(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { type TextProps } from "@salt-ds/core";
2
+ export interface StepDescriptionProps extends TextProps<"div"> {
3
+ }
4
+ export declare function StepDescription({ id, className, styleAs, ...props }: StepDescriptionProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { type ButtonProps } from "@salt-ds/core";
2
+ export interface StepExpandTriggerProps extends ButtonProps {
3
+ expanded: boolean;
4
+ }
5
+ export declare function StepExpandTrigger({ id, expanded, className, ...props }: StepExpandTriggerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import type { IconProps } from "@salt-ds/icons";
2
+ import type { StepStage, StepStatus } from "./Step.types";
3
+ export interface StepIconProps extends IconProps {
4
+ stage: StepStage;
5
+ status?: StepStatus;
6
+ sizeMultiplier?: IconProps["size"];
7
+ }
8
+ export declare function StepIcon({ status, stage, size, sizeMultiplier, className, ...props }: StepIconProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { type TextProps } from "@salt-ds/core";
2
+ export interface StepLabelProps extends TextProps<"div"> {
3
+ }
4
+ export declare function StepLabel({ id, className, styleAs, children, ...props }: StepLabelProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from "react";
2
+ export interface StepSROnlyProps extends ComponentPropsWithoutRef<"div"> {
3
+ children?: ReactNode;
4
+ }
5
+ export declare function StepSROnly({ children, ...props }: StepSROnlyProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { StepProps } from "./Step.types";
2
+ export declare function Step({ id: idProp, label, description, status, stage, expanded: expandedProp, defaultExpanded, onToggle, className, style, substeps, children, ...props }: StepProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import type { ButtonProps } from "@salt-ds/core";
2
+ import type { ComponentPropsWithoutRef, ReactNode } from "react";
3
+ export interface StepProps extends Omit<ComponentPropsWithoutRef<"li">, "onToggle"> {
4
+ label?: ReactNode;
5
+ description?: ReactNode;
6
+ status?: StepStatus;
7
+ stage?: StepStage;
8
+ expanded?: boolean;
9
+ defaultExpanded?: boolean;
10
+ onToggle?: ButtonProps["onClick"];
11
+ substeps?: StepRecord[];
12
+ children?: ReactNode;
13
+ }
14
+ export declare type StepRecord = (Omit<StepProps, "children"> & {
15
+ id: string;
16
+ }) | (Omit<StepProps, "children"> & {
17
+ key: string;
18
+ });
19
+ export declare type StepStatus = "warning" | "error";
20
+ export declare type StepStage = "pending" | "locked" | "completed" | "inprogress" | "active";
21
+ export declare type StepDepth = number;
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from "react";
2
+ import type { SteppedTrackerOrientation } from "./SteppedTracker.types";
3
+ export declare const DepthContext: import("react").Context<number>;
4
+ export declare const OrientationContext: import("react").Context<SteppedTrackerOrientation>;
5
+ export interface SteppedTrackerProviderProps {
6
+ orientation: SteppedTrackerOrientation;
7
+ children: ReactNode;
8
+ }
9
+ export declare function SteppedTrackerProvider({ orientation: orientationProp, children, }: SteppedTrackerProviderProps): import("react/jsx-runtime").JSX.Element;
@@ -1,16 +1,2 @@
1
- import { type ComponentPropsWithoutRef, type ReactNode } from "react";
2
- export interface SteppedTrackerProps extends ComponentPropsWithoutRef<"ul"> {
3
- /**
4
- * The index of the current activeStep
5
- */
6
- activeStep: number;
7
- /**
8
- * Should be one or more TrackerStep components
9
- */
10
- children: ReactNode;
11
- /**
12
- * The orientation of the SteppedTracker. Defaults to `horizontal`
13
- */
14
- orientation?: "horizontal" | "vertical";
15
- }
16
- export declare const SteppedTracker: import("react").ForwardRefExoticComponent<SteppedTrackerProps & import("react").RefAttributes<HTMLUListElement>>;
1
+ import type { SteppedTrackerProps } from "./SteppedTracker.types";
2
+ export declare const SteppedTracker: import("react").ForwardRefExoticComponent<Omit<SteppedTrackerProps, "ref"> & import("react").RefAttributes<HTMLOListElement>>;
@@ -0,0 +1,6 @@
1
+ import type { ComponentProps, ReactNode } from "react";
2
+ export interface SteppedTrackerProps extends ComponentProps<"ol"> {
3
+ orientation?: SteppedTrackerOrientation;
4
+ children: ReactNode;
5
+ }
6
+ export declare type SteppedTrackerOrientation = "horizontal" | "vertical";
@@ -1,3 +1,6 @@
1
1
  export * from "./SteppedTracker";
2
- export * from "./TrackerStep";
3
- export * from "./StepLabel";
2
+ export * from "./SteppedTracker.types";
3
+ export * from "./Step";
4
+ export * from "./Step.types";
5
+ export * from "./useStepReducer";
6
+ export * from "./stepReducer.types";
@@ -0,0 +1,2 @@
1
+ import type { StepReducerAction, StepReducerState } from "./stepReducer.types";
2
+ export default function stepReducer(state: StepReducerState, action: StepReducerAction): StepReducerState;
@@ -0,0 +1,25 @@
1
+ import type { StepRecord } from ".";
2
+ export interface StepReducerState {
3
+ steps: StepRecord[];
4
+ flatSteps: StepRecord[];
5
+ activeStep: StepRecord | null;
6
+ previousStep: StepRecord | null;
7
+ nextStep: StepRecord | null;
8
+ activeStepIndex: number;
9
+ started: boolean;
10
+ ended: boolean;
11
+ }
12
+ export declare type StepReducerAction = {
13
+ type: "next";
14
+ } | {
15
+ type: "previous";
16
+ } | {
17
+ type: "error";
18
+ } | {
19
+ type: "warning";
20
+ } | {
21
+ type: "clear";
22
+ };
23
+ export interface StepReducerOptions {
24
+ activeStepId?: string;
25
+ }
@@ -0,0 +1,3 @@
1
+ import type { StepRecord } from "./Step.types";
2
+ import type { StepReducerOptions } from "./stepReducer.types";
3
+ export declare function useStepReducer(initialSteps: StepRecord[], options?: StepReducerOptions): [import("./stepReducer.types").StepReducerState, import("react").Dispatch<import("./stepReducer.types").StepReducerAction>];
@@ -0,0 +1,7 @@
1
+ import type { StepRecord, StepStage } from "./Step.types";
2
+ import type { StepReducerOptions, StepReducerState } from "./stepReducer.types";
3
+ export declare function assignSteps(steps: StepRecord[], stage?: StepStage): StepRecord[];
4
+ export declare function resetSteps(steps: StepRecord[]): StepRecord[];
5
+ export declare function autoStageSteps(steps: StepRecord[], options?: StepReducerOptions): StepRecord[];
6
+ export declare function flattenSteps(steps: StepRecord[]): StepRecord[];
7
+ export declare function initStepReducerState(initialSteps: StepRecord[], options?: StepReducerOptions): StepReducerState;