@redis-ui/components 41.4.1 → 41.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +330 -0
  2. package/dist/Button/TextButton/TextButton.cjs +2 -0
  3. package/dist/Button/TextButton/TextButton.js +2 -0
  4. package/dist/Button/TextButton/TextButton.style.cjs +9 -3
  5. package/dist/Button/TextButton/TextButton.style.d.ts +1 -1
  6. package/dist/Button/TextButton/TextButton.style.js +9 -3
  7. package/dist/Button/TextButton/TextButton.types.d.ts +2 -0
  8. package/dist/Button/ToggleButton/ToggleButton.style.cjs +1 -1
  9. package/dist/Button/ToggleButton/ToggleButton.style.js +1 -1
  10. package/dist/ChipList/Components/ExtraItem.cjs +8 -7
  11. package/dist/ChipList/Components/ExtraItem.js +8 -7
  12. package/dist/Filters/components/MultiSelectFilter/MultiSelectFilter.cjs +2 -2
  13. package/dist/Filters/components/MultiSelectFilter/MultiSelectFilter.js +2 -2
  14. package/dist/Filters/components/MultiTreeSelectFilter/MultiTreeSelectFilter.cjs +2 -2
  15. package/dist/Filters/components/MultiTreeSelectFilter/MultiTreeSelectFilter.js +2 -2
  16. package/dist/FormField/FormField.context.cjs +4 -0
  17. package/dist/FormField/FormField.context.d.ts +3 -0
  18. package/dist/FormField/FormField.context.js +4 -0
  19. package/dist/FormField/components/Nested/Nested.cjs +4 -2
  20. package/dist/FormField/components/Nested/Nested.js +5 -3
  21. package/dist/Helpers/css.utils.cjs +4 -0
  22. package/dist/Helpers/css.utils.js +4 -0
  23. package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.cjs +6 -2
  24. package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.js +7 -3
  25. package/dist/Inputs/components/Compose/CommonCompose.cjs +16 -14
  26. package/dist/Inputs/components/Compose/CommonCompose.js +17 -15
  27. package/dist/Inputs/components/Context/InputValue.context.cjs +13 -9
  28. package/dist/Inputs/components/Context/InputValue.context.d.ts +270 -4
  29. package/dist/Inputs/components/Context/InputValue.context.js +13 -9
  30. package/dist/Inputs/components/Context/InputValueProvider.cjs +7 -2
  31. package/dist/Inputs/components/Context/InputValueProvider.js +8 -3
  32. package/dist/Inputs/components/Context/NumericInputValueProvider.cjs +6 -1
  33. package/dist/Inputs/components/Context/NumericInputValueProvider.js +7 -2
  34. package/dist/Inputs/components/InputTag/InputTag.cjs +6 -3
  35. package/dist/Inputs/components/InputTag/InputTag.js +7 -4
  36. package/dist/Inputs/components/InputTag/InputTag.style.cjs +1 -1
  37. package/dist/Inputs/components/InputTag/InputTag.style.js +1 -1
  38. package/dist/Inputs/components/ResetButton/ResetButton.cjs +7 -4
  39. package/dist/Inputs/components/ResetButton/ResetButton.js +7 -4
  40. package/dist/Label/components/Required/Required.cjs +8 -8
  41. package/dist/Label/components/Required/Required.js +8 -8
  42. package/dist/Layouts/FlexDivider/FlexDivider.cjs +22 -0
  43. package/dist/Layouts/FlexDivider/FlexDivider.d.ts +2 -0
  44. package/dist/Layouts/FlexDivider/FlexDivider.js +22 -0
  45. package/dist/Layouts/FlexDivider/FlexDivider.style.cjs +46 -0
  46. package/dist/Layouts/FlexDivider/FlexDivider.style.d.ts +6 -0
  47. package/dist/Layouts/FlexDivider/FlexDivider.style.js +44 -0
  48. package/dist/Layouts/FlexDivider/FlexDivider.types.d.ts +15 -0
  49. package/dist/Layouts/FlexGroup/FlexGroup.cjs +20 -0
  50. package/dist/Layouts/FlexGroup/FlexGroup.d.ts +2 -0
  51. package/dist/Layouts/FlexGroup/FlexGroup.js +20 -0
  52. package/dist/Layouts/FlexGroup/FlexGroup.style.cjs +20 -0
  53. package/dist/Layouts/FlexGroup/FlexGroup.style.d.ts +9 -0
  54. package/dist/Layouts/FlexGroup/FlexGroup.style.js +18 -0
  55. package/dist/Layouts/FlexGroup/FlexGroup.types.d.ts +19 -0
  56. package/dist/Layouts/FlexItem/FlexItem.cjs +16 -0
  57. package/dist/Layouts/FlexItem/FlexItem.d.ts +2 -0
  58. package/dist/Layouts/FlexItem/FlexItem.js +16 -0
  59. package/dist/Layouts/FlexItem/FlexItem.style.cjs +14 -0
  60. package/dist/Layouts/FlexItem/FlexItem.style.d.ts +5 -0
  61. package/dist/Layouts/FlexItem/FlexItem.style.js +12 -0
  62. package/dist/Layouts/FlexItem/FlexItem.types.d.ts +14 -0
  63. package/dist/Layouts/FlexSplit/FlexSplit.cjs +10 -0
  64. package/dist/Layouts/FlexSplit/FlexSplit.d.ts +2 -0
  65. package/dist/Layouts/FlexSplit/FlexSplit.js +10 -0
  66. package/dist/Layouts/FlexSplit/FlexSplit.style.cjs +27 -0
  67. package/dist/Layouts/FlexSplit/FlexSplit.style.d.ts +8 -0
  68. package/dist/Layouts/FlexSplit/FlexSplit.style.js +25 -0
  69. package/dist/Layouts/FlexSplit/FlexSplit.types.d.ts +8 -0
  70. package/dist/Layouts/index.d.ts +8 -0
  71. package/dist/MidBar/MidBar.cjs +30 -0
  72. package/dist/MidBar/MidBar.d.ts +22 -0
  73. package/dist/MidBar/MidBar.js +30 -0
  74. package/dist/MidBar/MidBar.types.d.ts +6 -0
  75. package/dist/MidBar/components/Header/Header.cjs +32 -0
  76. package/dist/MidBar/components/Header/Header.d.ts +15 -0
  77. package/dist/MidBar/components/Header/Header.js +32 -0
  78. package/dist/MidBar/components/Header/Header.types.d.ts +13 -0
  79. package/dist/MidBar/components/Header/components/Compose/Compose.cjs +8 -0
  80. package/dist/MidBar/components/Header/components/Compose/Compose.d.ts +3 -0
  81. package/dist/MidBar/components/Header/components/Compose/Compose.js +8 -0
  82. package/dist/MidBar/components/Header/components/Compose/Compose.style.cjs +31 -0
  83. package/dist/MidBar/components/Header/components/Compose/Compose.style.d.ts +1 -0
  84. package/dist/MidBar/components/Header/components/Compose/Compose.style.js +29 -0
  85. package/dist/MidBar/components/Header/components/Compose/Compose.types.d.ts +2 -0
  86. package/dist/MidBar/components/Header/components/Group/Group.cjs +12 -0
  87. package/dist/MidBar/components/Header/components/Group/Group.d.ts +3 -0
  88. package/dist/MidBar/components/Header/components/Group/Group.js +12 -0
  89. package/dist/MidBar/components/Header/components/Group/Group.style.cjs +22 -0
  90. package/dist/MidBar/components/Header/components/Group/Group.style.d.ts +4 -0
  91. package/dist/MidBar/components/Header/components/Group/Group.style.js +20 -0
  92. package/dist/MidBar/components/Header/components/Group/Group.types.d.ts +5 -0
  93. package/dist/MidBar/index.d.ts +2 -0
  94. package/dist/MoreInfoIcon/MoreInfoIcon.style.cjs +1 -1
  95. package/dist/MoreInfoIcon/MoreInfoIcon.style.js +1 -1
  96. package/dist/SearchBar/components/SearchSection/components/Actions/components/ColumnSelector/ColumnSelector.cjs +5 -7
  97. package/dist/SearchBar/components/SearchSection/components/Actions/components/ColumnSelector/ColumnSelector.js +5 -7
  98. package/dist/SearchBar/components/SearchSection/components/Actions/components/FiltersToggle/FiltersToggle.cjs +11 -9
  99. package/dist/SearchBar/components/SearchSection/components/Actions/components/FiltersToggle/FiltersToggle.js +11 -9
  100. package/dist/Select/components/Context/Context.cjs +6 -4
  101. package/dist/Select/components/Context/Context.js +7 -5
  102. package/dist/Select/components/Trigger/components/Compose/Compose.cjs +5 -0
  103. package/dist/Select/components/Trigger/components/Compose/Compose.js +6 -1
  104. package/dist/Select/components/Trigger/components/Compose/Compose.style.cjs +5 -0
  105. package/dist/Select/components/Trigger/components/Compose/Compose.style.js +5 -0
  106. package/dist/Stepper/Stepper.context.cjs +5 -10
  107. package/dist/Stepper/Stepper.context.d.ts +1 -2
  108. package/dist/Stepper/Stepper.context.js +5 -10
  109. package/dist/Stepper/Stepper.d.ts +4 -4
  110. package/dist/Stepper/components/Compose/Compose.cjs +6 -1
  111. package/dist/Stepper/components/Compose/Compose.d.ts +2 -2
  112. package/dist/Stepper/components/Compose/Compose.js +7 -2
  113. package/dist/Stepper/components/Step/Step.context.cjs +5 -10
  114. package/dist/Stepper/components/Step/Step.context.d.ts +1 -2
  115. package/dist/Stepper/components/Step/Step.context.js +5 -10
  116. package/dist/Stepper/components/Step/Step.d.ts +2 -3
  117. package/dist/Stepper/components/Step/components/Compose/Compose.cjs +1 -3
  118. package/dist/Stepper/components/Step/components/Compose/Compose.d.ts +1 -1
  119. package/dist/Stepper/components/Step/components/Compose/Compose.js +2 -4
  120. package/dist/Stepper/components/Step/components/Compose/Compose.style.cjs +2 -5
  121. package/dist/Stepper/components/Step/components/Compose/Compose.style.js +4 -7
  122. package/dist/Stepper/hooks/useStepperFocusing.cjs +31 -0
  123. package/dist/Stepper/hooks/useStepperFocusing.d.ts +16 -0
  124. package/dist/Stepper/hooks/useStepperFocusing.js +31 -0
  125. package/dist/Stepper/hooks/useStepperInteractive.cjs +30 -37
  126. package/dist/Stepper/hooks/useStepperInteractive.d.ts +2 -3
  127. package/dist/Stepper/hooks/useStepperInteractive.js +30 -37
  128. package/dist/ThemeModeSwitch/ThemeModeSwitch.cjs +64 -0
  129. package/dist/ThemeModeSwitch/ThemeModeSwitch.d.ts +2 -0
  130. package/dist/ThemeModeSwitch/ThemeModeSwitch.js +64 -0
  131. package/dist/ThemeModeSwitch/ThemeModeSwitch.style.cjs +38 -0
  132. package/dist/ThemeModeSwitch/ThemeModeSwitch.style.d.ts +4 -0
  133. package/dist/ThemeModeSwitch/ThemeModeSwitch.style.js +36 -0
  134. package/dist/ThemeModeSwitch/ThemeModeSwitch.types.d.ts +7 -0
  135. package/dist/ThemeModeSwitch/index.d.ts +3 -0
  136. package/dist/ThemeModeSwitch/useThemeModeSwitch.cjs +37 -0
  137. package/dist/ThemeModeSwitch/useThemeModeSwitch.d.ts +8 -0
  138. package/dist/ThemeModeSwitch/useThemeModeSwitch.js +37 -0
  139. package/dist/Toast/Toaster.cjs +4 -6
  140. package/dist/Toast/Toaster.d.ts +2 -1
  141. package/dist/Toast/Toaster.js +4 -6
  142. package/dist/Toast/Toaster.style.cjs +2 -2
  143. package/dist/Toast/Toaster.style.d.ts +2 -2
  144. package/dist/Toast/Toaster.style.js +3 -3
  145. package/dist/Toast/core/core.d.ts +3 -3
  146. package/dist/Toast/core/mapping.helpers.cjs +18 -2
  147. package/dist/Toast/core/mapping.helpers.d.ts +4 -3
  148. package/dist/Toast/core/mapping.helpers.js +22 -6
  149. package/dist/Toast/core/mapping.types.d.ts +3 -2
  150. package/dist/index.cjs +1092 -1
  151. package/dist/index.d.ts +3 -0
  152. package/dist/index.js +1139 -48
  153. package/dist/node_modules/clsx/dist/clsx.cjs +17 -0
  154. package/dist/node_modules/clsx/dist/clsx.js +17 -0
  155. package/dist/packages/components/node_modules/react-toastify/dist/react-toastify.esm.cjs +320 -0
  156. package/dist/packages/components/node_modules/react-toastify/dist/react-toastify.esm.js +318 -0
  157. package/dist/packages/icons/dist/multicolor/LoaderLarge.cjs +2 -2
  158. package/dist/packages/icons/dist/multicolor/LoaderLarge.js +2 -2
  159. package/dist/packages/icons/dist/multicolor/dark/LoaderLarge.cjs +3 -8
  160. package/dist/packages/icons/dist/multicolor/dark/LoaderLarge.js +3 -8
  161. package/dist/packages/icons/dist/multicolor/light/LoaderLarge.cjs +3 -8
  162. package/dist/packages/icons/dist/multicolor/light/LoaderLarge.js +3 -8
  163. package/package.json +4 -4
  164. package/dist/node_modules/clsx/dist/clsx.m.cjs +0 -15
  165. package/dist/node_modules/clsx/dist/clsx.m.js +0 -15
  166. package/dist/node_modules/react-toastify/dist/react-toastify.esm.cjs +0 -300
  167. package/dist/node_modules/react-toastify/dist/react-toastify.esm.js +0 -298
@@ -13,10 +13,12 @@ const SelectContextProvider = ({
13
13
  }) => jsxRuntime.jsxRuntimeExports.jsx(SharedId_context.SharedIdTransProvider, {
14
14
  children: jsxRuntime.jsxRuntimeExports.jsx(FormField_context.FieldStatusTransProvider, {
15
15
  value: error && "error" || valid && "success" || "none",
16
- children: jsxRuntime.jsxRuntimeExports.jsx(Field_context.ErrorContentProvider, {
17
- value: error ?? "",
18
- children: jsxRuntime.jsxRuntimeExports.jsx(Context.Provider, {
19
- ...restProps
16
+ children: jsxRuntime.jsxRuntimeExports.jsx(FormField_context.FieldRequiredTransProvider, {
17
+ children: jsxRuntime.jsxRuntimeExports.jsx(Field_context.ErrorContentProvider, {
18
+ value: error ?? "",
19
+ children: jsxRuntime.jsxRuntimeExports.jsx(Context.Provider, {
20
+ ...restProps
21
+ })
20
22
  })
21
23
  })
22
24
  })
@@ -2,7 +2,7 @@ import { j as jsxRuntimeExports } from "../../../node_modules/react/jsx-runtime.
2
2
  import { createContext, useContext } from "react";
3
3
  import { ErrorContentProvider } from "../../../Inputs/components/Context/Field.context.js";
4
4
  import { SharedIdTransProvider } from "../../../Helpers/contexts/SharedId.context.js";
5
- import { FieldStatusTransProvider } from "../../../FormField/FormField.context.js";
5
+ import { FieldStatusTransProvider, FieldRequiredTransProvider } from "../../../FormField/FormField.context.js";
6
6
  const Context = createContext(null);
7
7
  const SelectContextProvider = ({
8
8
  error,
@@ -11,10 +11,12 @@ const SelectContextProvider = ({
11
11
  }) => jsxRuntimeExports.jsx(SharedIdTransProvider, {
12
12
  children: jsxRuntimeExports.jsx(FieldStatusTransProvider, {
13
13
  value: error && "error" || valid && "success" || "none",
14
- children: jsxRuntimeExports.jsx(ErrorContentProvider, {
15
- value: error ?? "",
16
- children: jsxRuntimeExports.jsx(Context.Provider, {
17
- ...restProps
14
+ children: jsxRuntimeExports.jsx(FieldRequiredTransProvider, {
15
+ children: jsxRuntimeExports.jsx(ErrorContentProvider, {
16
+ value: error ?? "",
17
+ children: jsxRuntimeExports.jsx(Context.Provider, {
18
+ ...restProps
19
+ })
18
20
  })
19
21
  })
20
22
  })
@@ -15,16 +15,21 @@ const Compose = ({
15
15
  }) => {
16
16
  const sharedId = SharedId_context.useSharedId(id);
17
17
  const status = FormField_context.useFieldStatus();
18
+ const required = FormField_context.useFieldRequired();
18
19
  const errorContent = Field_context.useErrorContent();
19
20
  const errorId = index.useId();
20
21
  const statusProps = status === "error" ? {
21
22
  "aria-invalid": true,
22
23
  "aria-describedby": `${errorId} ${restProps["aria-describedby"] || ""}`
23
24
  } : null;
25
+ const requiredProps = required ? {
26
+ "aria-required": true
27
+ } : null;
24
28
  const triggerProps = {
25
29
  id: sharedId,
26
30
  "data-status": status,
27
31
  ...statusProps,
32
+ ...requiredProps,
28
33
  ...restProps
29
34
  };
30
35
  const errorAlert = status === "error" ? jsxRuntime.jsxRuntimeExports.jsx(index$1.VisuallyHidden, {
@@ -5,7 +5,7 @@ import { VisuallyHidden } from "../../../../../node_modules/@radix-ui/react-visu
5
5
  import { TriggerContainer } from "./Compose.style.js";
6
6
  import { useErrorContent } from "../../../../../Inputs/components/Context/Field.context.js";
7
7
  import { useSharedId } from "../../../../../Helpers/contexts/SharedId.context.js";
8
- import { useFieldStatus } from "../../../../../FormField/FormField.context.js";
8
+ import { useFieldStatus, useFieldRequired } from "../../../../../FormField/FormField.context.js";
9
9
  const Compose = ({
10
10
  customContainer,
11
11
  id,
@@ -13,16 +13,21 @@ const Compose = ({
13
13
  }) => {
14
14
  const sharedId = useSharedId(id);
15
15
  const status = useFieldStatus();
16
+ const required = useFieldRequired();
16
17
  const errorContent = useErrorContent();
17
18
  const errorId = useId();
18
19
  const statusProps = status === "error" ? {
19
20
  "aria-invalid": true,
20
21
  "aria-describedby": `${errorId} ${restProps["aria-describedby"] || ""}`
21
22
  } : null;
23
+ const requiredProps = required ? {
24
+ "aria-required": true
25
+ } : null;
22
26
  const triggerProps = {
23
27
  id: sharedId,
24
28
  "data-status": status,
25
29
  ...statusProps,
30
+ ...requiredProps,
26
31
  ...restProps
27
32
  };
28
33
  const errorAlert = status === "error" ? jsxRuntimeExports.jsx(VisuallyHidden, {
@@ -4,6 +4,7 @@ const _styled = require("styled-components");
4
4
  const index = require("../../../../../node_modules/@radix-ui/react-select/dist/index.cjs");
5
5
  const redisUiStyles = require("@redislabsdev/redis-ui-styles");
6
6
  const css_utils = require("../../../../../Helpers/css.utils.cjs");
7
+ const Value_style = require("../Value/Value.style.cjs");
7
8
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
8
9
  const _styled__default = /* @__PURE__ */ _interopDefault(_styled);
9
10
  const getStateStyle = (theme) => {
@@ -48,6 +49,10 @@ const getStateStyle = (theme) => {
48
49
  svg {
49
50
  opacity: ${statesStyle.disabled.iconOpacity || 0.3};
50
51
  }
52
+
53
+ ${Value_style.ValueContainer} svg[data-monochrome] {
54
+ opacity: 1;
55
+ }
51
56
  }
52
57
  `;
53
58
  };
@@ -2,6 +2,7 @@ import _styled, { css } from "styled-components";
2
2
  import { Trigger } from "../../../../../node_modules/@radix-ui/react-select/dist/index.js";
3
3
  import { useTheme } from "@redislabsdev/redis-ui-styles";
4
4
  import { styleFromTokens, tokenMaps } from "../../../../../Helpers/css.utils.js";
5
+ import { ValueContainer } from "../Value/Value.style.js";
5
6
  const getStateStyle = (theme) => {
6
7
  const statesStyle = theme.components.select.states;
7
8
  const {
@@ -44,6 +45,10 @@ const getStateStyle = (theme) => {
44
45
  svg {
45
46
  opacity: ${statesStyle.disabled.iconOpacity || 0.3};
46
47
  }
48
+
49
+ ${ValueContainer} svg[data-monochrome] {
50
+ opacity: 1;
51
+ }
47
52
  }
48
53
  `;
49
54
  };
@@ -1,13 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const React = require("react");
4
- const StepperContext = React.createContext(null);
5
- const useStepperContext = () => {
6
- const context = React.useContext(StepperContext);
7
- if (!context) {
8
- throw new Error("Step components must be used within a Stepper");
9
- }
10
- return context;
11
- };
12
- exports.StepperContext = StepperContext;
3
+ const NullableContext = require("../Helpers/contexts/NullableContext.cjs");
4
+ const [useStepperContext, StepperContextProvider] = NullableContext.createNullableContext({
5
+ forComponentName: "Stepper"
6
+ });
7
+ exports.StepperContextProvider = StepperContextProvider;
13
8
  exports.useStepperContext = useStepperContext;
@@ -8,5 +8,4 @@ export type StepperContextType = {
8
8
  onStepChange?: (stepIndex: number) => void;
9
9
  getIsStepInteractive: (stepIndex: number) => boolean;
10
10
  };
11
- export declare const StepperContext: import("react").Context<StepperContextType | null>;
12
- export declare const useStepperContext: () => StepperContextType;
11
+ export declare const useStepperContext: () => StepperContextType, StepperContextProvider: import("react").Provider<StepperContextType>;
@@ -1,13 +1,8 @@
1
- import { createContext, useContext } from "react";
2
- const StepperContext = createContext(null);
3
- const useStepperContext = () => {
4
- const context = useContext(StepperContext);
5
- if (!context) {
6
- throw new Error("Step components must be used within a Stepper");
7
- }
8
- return context;
9
- };
1
+ import { createNullableContext } from "../Helpers/contexts/NullableContext.js";
2
+ const [useStepperContext, StepperContextProvider] = createNullableContext({
3
+ forComponentName: "Stepper"
4
+ });
10
5
  export {
11
- StepperContext,
6
+ StepperContextProvider,
12
7
  useStepperContext
13
8
  };
@@ -1,17 +1,17 @@
1
1
  import { StepperProps } from './Stepper.types';
2
2
  declare const Stepper: (({ steps, ...restProps }: StepperProps) => import("react/jsx-runtime").JSX.Element) & {
3
3
  Step: (({ children, ...restProps }: import(".").StepperStepProps) => import("react/jsx-runtime").JSX.Element) & {
4
- Compose: ({ onClick, onKeyDown, ...restProps }: import("./components/Step/components/Compose/Compose.types").ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
4
+ Compose: ({ onClick, ...restProps }: import("./components/Step/components/Compose/Compose.types").ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
5
5
  Icon: ({ children, ...restProps }: import("./components/Step/components/Icon/Icon.types").IconProps) => import("react/jsx-runtime").JSX.Element;
6
6
  Label: ({ children, ...restProps }: import("..").TypographyBodyProps) => import("react/jsx-runtime").JSX.Element | null;
7
- useStepContext: typeof import("./components/Step/Step.context").useStepContext;
7
+ useStepContext: () => import(".").StepperStepContextType;
8
8
  };
9
9
  Compose: (({ currentStep, getIsStepInteractive, onStepChange, onKeyDown, ...restProps }: import("./components/Compose/Compose.types").StepperComposeProps) => import("react/jsx-runtime").JSX.Element) & {
10
10
  Step: (({ children, ...restProps }: import(".").StepperStepProps) => import("react/jsx-runtime").JSX.Element) & {
11
- Compose: ({ onClick, onKeyDown, ...restProps }: import("./components/Step/components/Compose/Compose.types").ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
11
+ Compose: ({ onClick, ...restProps }: import("./components/Step/components/Compose/Compose.types").ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
12
12
  Icon: ({ children, ...restProps }: import("./components/Step/components/Icon/Icon.types").IconProps) => import("react/jsx-runtime").JSX.Element;
13
13
  Label: ({ children, ...restProps }: import("..").TypographyBodyProps) => import("react/jsx-runtime").JSX.Element | null;
14
- useStepContext: typeof import("./components/Step/Step.context").useStepContext;
14
+ useStepContext: () => import(".").StepperStepContextType;
15
15
  };
16
16
  };
17
17
  };
@@ -5,6 +5,7 @@ const Step = require("../Step/Step.cjs");
5
5
  const Stepper_context = require("../../Stepper.context.cjs");
6
6
  const useStepperInteractive = require("../../hooks/useStepperInteractive.cjs");
7
7
  const useStepIndexing = require("../../hooks/useStepIndexing.cjs");
8
+ const useStepperFocusing = require("../../hooks/useStepperFocusing.cjs");
8
9
  const Compose_style = require("./Compose.style.cjs");
9
10
  const StepperCompose = Object.assign(({
10
11
  currentStep = -1,
@@ -14,6 +15,9 @@ const StepperCompose = Object.assign(({
14
15
  ...restProps
15
16
  }) => {
16
17
  const stepIndexingContext = useStepIndexing.useStepIndexing();
18
+ const focusingProps = useStepperFocusing.useStepperFocusing({
19
+ isInteractive: !!onStepChange
20
+ });
17
21
  const {
18
22
  context: interactivityContext,
19
23
  props: interactivityProps
@@ -29,9 +33,10 @@ const StepperCompose = Object.assign(({
29
33
  ...interactivityContext,
30
34
  currentStep
31
35
  };
32
- return jsxRuntime.jsxRuntimeExports.jsx(Stepper_context.StepperContext.Provider, {
36
+ return jsxRuntime.jsxRuntimeExports.jsx(Stepper_context.StepperContextProvider, {
33
37
  value: contextValue,
34
38
  children: jsxRuntime.jsxRuntimeExports.jsx(Compose_style.StepperCompose, {
39
+ ...focusingProps,
35
40
  ...interactivityProps,
36
41
  ...restProps
37
42
  })
@@ -1,10 +1,10 @@
1
1
  import { StepperComposeProps } from './Compose.types';
2
2
  declare const StepperCompose: (({ currentStep, getIsStepInteractive, onStepChange, onKeyDown, ...restProps }: StepperComposeProps) => import("react/jsx-runtime").JSX.Element) & {
3
3
  Step: (({ children, ...restProps }: import("../..").StepperStepProps) => import("react/jsx-runtime").JSX.Element) & {
4
- Compose: ({ onClick, onKeyDown, ...restProps }: import("../Step/components/Compose/Compose.types").ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
4
+ Compose: ({ onClick, ...restProps }: import("../Step/components/Compose/Compose.types").ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
5
5
  Icon: ({ children, ...restProps }: import("../Step/components/Icon/Icon.types").IconProps) => import("react/jsx-runtime").JSX.Element;
6
6
  Label: ({ children, ...restProps }: import("../../..").TypographyBodyProps) => import("react/jsx-runtime").JSX.Element | null;
7
- useStepContext: typeof import("../Step/Step.context").useStepContext;
7
+ useStepContext: () => import("../..").StepperStepContextType;
8
8
  };
9
9
  };
10
10
  export default StepperCompose;
@@ -1,8 +1,9 @@
1
1
  import { j as jsxRuntimeExports } from "../../../node_modules/react/jsx-runtime.js";
2
2
  import Step from "../Step/Step.js";
3
- import { StepperContext } from "../../Stepper.context.js";
3
+ import { StepperContextProvider } from "../../Stepper.context.js";
4
4
  import { useStepperInteractive } from "../../hooks/useStepperInteractive.js";
5
5
  import { useStepIndexing } from "../../hooks/useStepIndexing.js";
6
+ import { useStepperFocusing } from "../../hooks/useStepperFocusing.js";
6
7
  import { StepperCompose as StepperCompose$1 } from "./Compose.style.js";
7
8
  const StepperCompose = Object.assign(({
8
9
  currentStep = -1,
@@ -12,6 +13,9 @@ const StepperCompose = Object.assign(({
12
13
  ...restProps
13
14
  }) => {
14
15
  const stepIndexingContext = useStepIndexing();
16
+ const focusingProps = useStepperFocusing({
17
+ isInteractive: !!onStepChange
18
+ });
15
19
  const {
16
20
  context: interactivityContext,
17
21
  props: interactivityProps
@@ -27,9 +31,10 @@ const StepperCompose = Object.assign(({
27
31
  ...interactivityContext,
28
32
  currentStep
29
33
  };
30
- return jsxRuntimeExports.jsx(StepperContext.Provider, {
34
+ return jsxRuntimeExports.jsx(StepperContextProvider, {
31
35
  value: contextValue,
32
36
  children: jsxRuntimeExports.jsx(StepperCompose$1, {
37
+ ...focusingProps,
33
38
  ...interactivityProps,
34
39
  ...restProps
35
40
  })
@@ -1,13 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const React = require("react");
4
- const StepContext = React.createContext(null);
5
- function useStepContext() {
6
- const context = React.useContext(StepContext);
7
- if (!context) {
8
- throw new Error(`Stepper compound components cannot be rendered outside the stepper component`);
9
- }
10
- return context;
11
- }
12
- exports.StepContext = StepContext;
3
+ const NullableContext = require("../../../Helpers/contexts/NullableContext.cjs");
4
+ const [useStepContext, StepContextProvider] = NullableContext.createNullableContext({
5
+ forComponentName: "Stepper.Step"
6
+ });
7
+ exports.StepContextProvider = StepContextProvider;
13
8
  exports.useStepContext = useStepContext;
@@ -1,4 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import { StepperStepContextType } from './Step.types';
3
- export declare const StepContext: import("react").Context<StepperStepContextType | null>;
4
- export declare function useStepContext(): StepperStepContextType;
3
+ export declare const useStepContext: () => StepperStepContextType, StepContextProvider: import("react").Provider<StepperStepContextType>;
@@ -1,13 +1,8 @@
1
- import { createContext, useContext } from "react";
2
- const StepContext = createContext(null);
3
- function useStepContext() {
4
- const context = useContext(StepContext);
5
- if (!context) {
6
- throw new Error(`Stepper compound components cannot be rendered outside the stepper component`);
7
- }
8
- return context;
9
- }
1
+ import { createNullableContext } from "../../../Helpers/contexts/NullableContext.js";
2
+ const [useStepContext, StepContextProvider] = createNullableContext({
3
+ forComponentName: "Stepper.Step"
4
+ });
10
5
  export {
11
- StepContext,
6
+ StepContextProvider,
12
7
  useStepContext
13
8
  };
@@ -1,9 +1,8 @@
1
1
  import { StepperStepProps } from './Step.types';
2
- import { useStepContext } from './Step.context';
3
2
  declare const Step: (({ children, ...restProps }: StepperStepProps) => import("react/jsx-runtime").JSX.Element) & {
4
- Compose: ({ onClick, onKeyDown, ...restProps }: import("./components/Compose/Compose.types").ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
3
+ Compose: ({ onClick, ...restProps }: import("./components/Compose/Compose.types").ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
5
4
  Icon: ({ children, ...restProps }: import("./components/Icon/Icon.types").IconProps) => import("react/jsx-runtime").JSX.Element;
6
5
  Label: ({ children, ...restProps }: import("../../..").TypographyBodyProps) => import("react/jsx-runtime").JSX.Element | null;
7
- useStepContext: typeof useStepContext;
6
+ useStepContext: () => import("./Step.types").StepperStepContextType;
8
7
  };
9
8
  export default Step;
@@ -10,7 +10,6 @@ const Compose_style = require("./Compose.style.cjs");
10
10
  const useStepperInteractive = require("../../../../hooks/useStepperInteractive.cjs");
11
11
  const Compose = ({
12
12
  onClick,
13
- onKeyDown,
14
13
  ...restProps
15
14
  }) => {
16
15
  const {
@@ -39,10 +38,9 @@ const Compose = ({
39
38
  getIsStepInteractive,
40
39
  stepIndex,
41
40
  onClick,
42
- onKeyDown,
43
41
  state
44
42
  });
45
- return jsxRuntime.jsxRuntimeExports.jsx(Step_context.StepContext.Provider, {
43
+ return jsxRuntime.jsxRuntimeExports.jsx(Step_context.StepContextProvider, {
46
44
  value: contextValue,
47
45
  children: jsxRuntime.jsxRuntimeExports.jsx(Compose_style.StepCompose, {
48
46
  "data-state": state,
@@ -1,3 +1,3 @@
1
1
  import { ComposeProps } from './Compose.types';
2
- declare const Compose: ({ onClick, onKeyDown, ...restProps }: ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
2
+ declare const Compose: ({ onClick, ...restProps }: ComposeProps) => import("react/jsx-runtime").JSX.Element | null;
3
3
  export default Compose;
@@ -1,6 +1,6 @@
1
1
  import { j as jsxRuntimeExports } from "../../../../../node_modules/react/jsx-runtime.js";
2
2
  import { useMemo } from "react";
3
- import { StepContext } from "../../Step.context.js";
3
+ import { StepContextProvider } from "../../Step.context.js";
4
4
  import { StepperStepState } from "../../Step.types.js";
5
5
  import { useStepRegistration } from "../../../../hooks/useStepRegistration.js";
6
6
  import { useStepperContext } from "../../../../Stepper.context.js";
@@ -8,7 +8,6 @@ import { StepCompose } from "./Compose.style.js";
8
8
  import { getInteractiveStepProps } from "../../../../hooks/useStepperInteractive.js";
9
9
  const Compose = ({
10
10
  onClick,
11
- onKeyDown,
12
11
  ...restProps
13
12
  }) => {
14
13
  const {
@@ -37,10 +36,9 @@ const Compose = ({
37
36
  getIsStepInteractive,
38
37
  stepIndex,
39
38
  onClick,
40
- onKeyDown,
41
39
  state
42
40
  });
43
- return jsxRuntimeExports.jsx(StepContext.Provider, {
41
+ return jsxRuntimeExports.jsx(StepContextProvider, {
44
42
  value: contextValue,
45
43
  children: jsxRuntimeExports.jsx(StepCompose, {
46
44
  "data-state": state,
@@ -2,14 +2,11 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const _styled = require("styled-components");
4
4
  const redisUiStyles = require("@redislabsdev/redis-ui-styles");
5
+ const Compose_style = require("../../../Compose/Compose.style.cjs");
5
6
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
6
7
  const _styled__default = /* @__PURE__ */ _interopDefault(_styled);
7
8
  const StepCompose = _styled__default.default.div.withConfig({
8
9
  displayName: "Composestyle__StepCompose",
9
10
  componentId: "RedisUI__sc-1t34ip6-0"
10
- })(["display:flex;align-items:center;justify-content:left;gap:", ";flex-shrink:0;", " ", ""], () => redisUiStyles.useTheme().components.stepper.step.gap, redisUiStyles.getFocusStyle(), ({
11
- tabIndex
12
- }) => tabIndex === 0 && _styled.css`
13
- cursor: pointer;
14
- `);
11
+ })(["display:flex;align-items:center;justify-content:left;gap:", ";flex-shrink:0;", ":not(.no-focus-visible):focus-visible &[aria-selected=true]{", "}&[role='tab']:not([aria-disabled='true']){cursor:pointer;}"], () => redisUiStyles.useTheme().components.stepper.step.gap, Compose_style.StepperCompose, redisUiStyles.getFocusStyleProperties());
15
12
  exports.StepCompose = StepCompose;
@@ -1,13 +1,10 @@
1
- import _styled, { css } from "styled-components";
2
- import { useTheme, getFocusStyle } from "@redislabsdev/redis-ui-styles";
1
+ import _styled from "styled-components";
2
+ import { useTheme, getFocusStyleProperties } from "@redislabsdev/redis-ui-styles";
3
+ import { StepperCompose } from "../../../Compose/Compose.style.js";
3
4
  const StepCompose = _styled.div.withConfig({
4
5
  displayName: "Composestyle__StepCompose",
5
6
  componentId: "RedisUI__sc-1t34ip6-0"
6
- })(["display:flex;align-items:center;justify-content:left;gap:", ";flex-shrink:0;", " ", ""], () => useTheme().components.stepper.step.gap, getFocusStyle(), ({
7
- tabIndex
8
- }) => tabIndex === 0 && css`
9
- cursor: pointer;
10
- `);
7
+ })(["display:flex;align-items:center;justify-content:left;gap:", ";flex-shrink:0;", ":not(.no-focus-visible):focus-visible &[aria-selected=true]{", "}&[role='tab']:not([aria-disabled='true']){cursor:pointer;}"], () => useTheme().components.stepper.step.gap, StepperCompose, getFocusStyleProperties());
11
8
  export {
12
9
  StepCompose
13
10
  };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const useStepperFocusing = ({
5
+ isInteractive
6
+ }) => {
7
+ const pointerFocusRef = React.useRef(false);
8
+ return isInteractive ? {
9
+ tabIndex: 0,
10
+ onPointerDown: (e) => {
11
+ e.preventDefault();
12
+ pointerFocusRef.current = true;
13
+ e.currentTarget.classList.add("no-focus-visible");
14
+ e.currentTarget.focus();
15
+ },
16
+ onFocusCapture: (e) => {
17
+ if (!pointerFocusRef.current) {
18
+ e.currentTarget.classList.remove("no-focus-visible");
19
+ }
20
+ pointerFocusRef.current = false;
21
+ },
22
+ onKeyDownCapture: (e) => {
23
+ e.currentTarget.classList.remove("no-focus-visible");
24
+ },
25
+ onBlur: (e) => {
26
+ e.currentTarget.classList.remove("no-focus-visible");
27
+ pointerFocusRef.current = false;
28
+ }
29
+ } : {};
30
+ };
31
+ exports.useStepperFocusing = useStepperFocusing;
@@ -0,0 +1,16 @@
1
+ import { FocusEvent, KeyboardEvent, PointerEvent } from 'react';
2
+ export declare const useStepperFocusing: ({ isInteractive }: {
3
+ isInteractive: boolean;
4
+ }) => {
5
+ tabIndex: number;
6
+ onPointerDown: (e: PointerEvent) => void;
7
+ onFocusCapture: (e: FocusEvent) => void;
8
+ onKeyDownCapture: (e: KeyboardEvent) => void;
9
+ onBlur: (e: FocusEvent) => void;
10
+ } | {
11
+ tabIndex?: undefined;
12
+ onPointerDown?: undefined;
13
+ onFocusCapture?: undefined;
14
+ onKeyDownCapture?: undefined;
15
+ onBlur?: undefined;
16
+ };
@@ -0,0 +1,31 @@
1
+ import { useRef } from "react";
2
+ const useStepperFocusing = ({
3
+ isInteractive
4
+ }) => {
5
+ const pointerFocusRef = useRef(false);
6
+ return isInteractive ? {
7
+ tabIndex: 0,
8
+ onPointerDown: (e) => {
9
+ e.preventDefault();
10
+ pointerFocusRef.current = true;
11
+ e.currentTarget.classList.add("no-focus-visible");
12
+ e.currentTarget.focus();
13
+ },
14
+ onFocusCapture: (e) => {
15
+ if (!pointerFocusRef.current) {
16
+ e.currentTarget.classList.remove("no-focus-visible");
17
+ }
18
+ pointerFocusRef.current = false;
19
+ },
20
+ onKeyDownCapture: (e) => {
21
+ e.currentTarget.classList.remove("no-focus-visible");
22
+ },
23
+ onBlur: (e) => {
24
+ e.currentTarget.classList.remove("no-focus-visible");
25
+ pointerFocusRef.current = false;
26
+ }
27
+ } : {};
28
+ };
29
+ export {
30
+ useStepperFocusing
31
+ };
@@ -18,31 +18,36 @@ function useStepperInteractive({
18
18
  }
19
19
  return stepIndex !== currentStep;
20
20
  }, [currentStep, getIsStepInteractive, isInteractive]);
21
- const handleKeyDown = react_utils.combineHandlers(isInteractive ? (event) => {
21
+ const handleKeyDown = isInteractive ? (event) => {
22
+ const findNextInteractive = (from, to = totalSteps || 0) => {
23
+ for (let i = from; i < to; i += 1) {
24
+ if (isStepInteractive(i)) return i;
25
+ }
26
+ return void 0;
27
+ };
28
+ const findPrevInteractive = (from, to = 0) => {
29
+ for (let i = from; i >= to; i -= 1) {
30
+ if (isStepInteractive(i)) return i;
31
+ }
32
+ return void 0;
33
+ };
34
+ const handleChange = (next) => {
35
+ event.preventDefault();
36
+ if (next !== void 0) onStepChange(next);
37
+ };
22
38
  const {
23
39
  key
24
40
  } = event;
25
- if (key === "ArrowLeft" || key === "ArrowRight") {
26
- event.preventDefault();
27
- const direction = key === "ArrowRight" ? 1 : -1;
28
- const newIndex = currentStep + direction;
29
- if (direction > 0) {
30
- for (let i = newIndex; i < totalSteps || 0; i += 1) {
31
- if (isStepInteractive(i)) {
32
- onStepChange(i);
33
- break;
34
- }
35
- }
36
- } else {
37
- for (let i = newIndex; i >= 0; i -= 1) {
38
- if (isStepInteractive(i)) {
39
- onStepChange(i);
40
- break;
41
- }
42
- }
43
- }
41
+ if (key === "ArrowRight") {
42
+ handleChange(findNextInteractive(currentStep + 1));
43
+ } else if (key === "ArrowLeft") {
44
+ handleChange(findPrevInteractive(currentStep - 1));
45
+ } else if (key === "Home") {
46
+ handleChange(findNextInteractive(0, currentStep));
47
+ } else if (key === "End") {
48
+ handleChange(findPrevInteractive((totalSteps || 0) - 1, currentStep + 1));
44
49
  }
45
- } : void 0, onKeyDown);
50
+ } : void 0;
46
51
  const role = isInteractive ? "tablist" : "list";
47
52
  const label = isInteractive ? "Step navigation" : "Progress steps";
48
53
  return {
@@ -51,7 +56,7 @@ function useStepperInteractive({
51
56
  onStepChange
52
57
  },
53
58
  props: {
54
- onKeyDown: handleKeyDown,
59
+ onKeyDown: react_utils.combineHandlers(handleKeyDown, onKeyDown),
55
60
  role,
56
61
  "aria-label": label
57
62
  }
@@ -59,7 +64,6 @@ function useStepperInteractive({
59
64
  }
60
65
  function getInteractiveStepProps({
61
66
  onClick,
62
- onKeyDown,
63
67
  onStepChange,
64
68
  getIsStepInteractive,
65
69
  stepIndex,
@@ -67,29 +71,18 @@ function getInteractiveStepProps({
67
71
  }) {
68
72
  const isInteractive = !!onStepChange;
69
73
  const isClickable = isInteractive && getIsStepInteractive(stepIndex);
70
- const handleClick = react_utils.combineHandlers(isClickable ? () => onStepChange(stepIndex) : void 0, onClick);
71
- const handleKeyDown = react_utils.combineHandlers(isClickable ? (e) => {
72
- const {
73
- key
74
- } = e;
75
- if (key === "Enter" || key === " ") {
76
- e.preventDefault();
77
- onStepChange(stepIndex);
78
- }
79
- } : void 0, onKeyDown);
74
+ const handleClick = isClickable ? () => onStepChange(stepIndex) : void 0;
80
75
  const role = isInteractive ? "tab" : "listitem";
81
76
  const ariaSelected = isInteractive ? state === Step_types.StepperStepState.FOCUSED : void 0;
82
77
  const ariaCurrent = !isInteractive && state === Step_types.StepperStepState.FOCUSED ? "step" : void 0;
83
- const tabIndex = isClickable ? 0 : -1;
84
78
  const ariaDisabled = isInteractive && !isClickable ? true : void 0;
85
79
  return {
86
- onClick: handleClick,
87
- onKeyDown: handleKeyDown,
80
+ onClick: react_utils.combineHandlers(handleClick, onClick),
88
81
  role,
89
82
  "aria-selected": ariaSelected,
90
83
  "aria-current": ariaCurrent,
91
84
  "aria-disabled": ariaDisabled,
92
- tabIndex
85
+ tabIndex: -1
93
86
  };
94
87
  }
95
88
  exports.getInteractiveStepProps = getInteractiveStepProps;