@redis-ui/components 41.3.7 → 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 (254) hide show
  1. package/README.md +330 -0
  2. package/dist/AppSelectionMenu/components/Item/Item.styles.d.ts +1 -1
  3. package/dist/Banner/components/Message/Message.style.d.ts +2 -1
  4. package/dist/Button/TextButton/TextButton.cjs +2 -0
  5. package/dist/Button/TextButton/TextButton.js +2 -0
  6. package/dist/Button/TextButton/TextButton.style.cjs +9 -3
  7. package/dist/Button/TextButton/TextButton.style.d.ts +1 -1
  8. package/dist/Button/TextButton/TextButton.style.js +9 -3
  9. package/dist/Button/TextButton/TextButton.types.d.ts +2 -0
  10. package/dist/Button/ToggleButton/ToggleButton.style.cjs +1 -1
  11. package/dist/Button/ToggleButton/ToggleButton.style.js +1 -1
  12. package/dist/Checkbox/components/Label/Label.style.d.ts +2 -1
  13. package/dist/ChipList/Components/ExtraItem.cjs +8 -7
  14. package/dist/ChipList/Components/ExtraItem.js +8 -7
  15. package/dist/ChipList/Components/ExtraItem.style.d.ts +2 -1
  16. package/dist/Drawer/components/Description/components/Text/Text.style.d.ts +2 -1
  17. package/dist/Drawer/components/Header/components/Title/Title.style.d.ts +2 -1
  18. package/dist/Filters/components/MultiSelectFilter/MultiSelectFilter.cjs +2 -2
  19. package/dist/Filters/components/MultiSelectFilter/MultiSelectFilter.js +2 -2
  20. package/dist/Filters/components/MultiTreeSelectFilter/MultiTreeSelectFilter.cjs +2 -2
  21. package/dist/Filters/components/MultiTreeSelectFilter/MultiTreeSelectFilter.js +2 -2
  22. package/dist/FormField/FormField.context.cjs +4 -0
  23. package/dist/FormField/FormField.context.d.ts +3 -0
  24. package/dist/FormField/FormField.context.js +4 -0
  25. package/dist/FormField/components/AdditionalText/AdditionalText.style.d.ts +2 -1
  26. package/dist/FormField/components/Nested/Nested.cjs +4 -2
  27. package/dist/FormField/components/Nested/Nested.js +5 -3
  28. package/dist/Helpers/css.utils.cjs +4 -0
  29. package/dist/Helpers/css.utils.js +4 -0
  30. package/dist/Inputs/Input/Input.d.ts +1 -1
  31. package/dist/Inputs/NumericInput/NumericInput.d.ts +1 -1
  32. package/dist/Inputs/QuantityCounter/QuantityCounter.d.ts +1 -1
  33. package/dist/Inputs/QuantityCounter/components/InputGroup/components/ValueLabel/ValueLabel.style.d.ts +2 -1
  34. package/dist/Inputs/TextArea/TextArea.d.ts +1 -1
  35. package/dist/Inputs/TextArea/components/Compose/Compose.style.d.ts +1 -1
  36. package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.cjs +6 -2
  37. package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.js +7 -3
  38. package/dist/Inputs/components/Compose/CommonCompose.cjs +16 -14
  39. package/dist/Inputs/components/Compose/CommonCompose.js +17 -15
  40. package/dist/Inputs/components/Compose/Compose.style.d.ts +2 -1
  41. package/dist/Inputs/components/Context/InputValue.context.cjs +13 -9
  42. package/dist/Inputs/components/Context/InputValue.context.d.ts +270 -4
  43. package/dist/Inputs/components/Context/InputValue.context.js +13 -9
  44. package/dist/Inputs/components/Context/InputValueProvider.cjs +7 -2
  45. package/dist/Inputs/components/Context/InputValueProvider.js +8 -3
  46. package/dist/Inputs/components/Context/NumericInputValueProvider.cjs +6 -1
  47. package/dist/Inputs/components/Context/NumericInputValueProvider.js +7 -2
  48. package/dist/Inputs/components/InputTag/InputTag.cjs +6 -3
  49. package/dist/Inputs/components/InputTag/InputTag.js +7 -4
  50. package/dist/Inputs/components/InputTag/InputTag.style.cjs +1 -1
  51. package/dist/Inputs/components/InputTag/InputTag.style.js +1 -1
  52. package/dist/Inputs/components/ResetButton/ResetButton.cjs +7 -4
  53. package/dist/Inputs/components/ResetButton/ResetButton.js +7 -4
  54. package/dist/Label/components/Optional/Optional.style.d.ts +2 -1
  55. package/dist/Label/components/Required/Required.cjs +8 -8
  56. package/dist/Label/components/Required/Required.js +8 -8
  57. package/dist/Label/components/Required/Required.style.d.ts +2 -1
  58. package/dist/Label/components/Text/Text.style.d.ts +2 -1
  59. package/dist/Layouts/FlexDivider/FlexDivider.cjs +22 -0
  60. package/dist/Layouts/FlexDivider/FlexDivider.d.ts +2 -0
  61. package/dist/Layouts/FlexDivider/FlexDivider.js +22 -0
  62. package/dist/Layouts/FlexDivider/FlexDivider.style.cjs +46 -0
  63. package/dist/Layouts/FlexDivider/FlexDivider.style.d.ts +6 -0
  64. package/dist/Layouts/FlexDivider/FlexDivider.style.js +44 -0
  65. package/dist/Layouts/FlexDivider/FlexDivider.types.d.ts +15 -0
  66. package/dist/Layouts/FlexGroup/FlexGroup.cjs +20 -0
  67. package/dist/Layouts/FlexGroup/FlexGroup.d.ts +2 -0
  68. package/dist/Layouts/FlexGroup/FlexGroup.js +20 -0
  69. package/dist/Layouts/FlexGroup/FlexGroup.style.cjs +20 -0
  70. package/dist/Layouts/FlexGroup/FlexGroup.style.d.ts +9 -0
  71. package/dist/Layouts/FlexGroup/FlexGroup.style.js +18 -0
  72. package/dist/Layouts/FlexGroup/FlexGroup.types.d.ts +19 -0
  73. package/dist/Layouts/FlexItem/FlexItem.cjs +16 -0
  74. package/dist/Layouts/FlexItem/FlexItem.d.ts +2 -0
  75. package/dist/Layouts/FlexItem/FlexItem.js +16 -0
  76. package/dist/Layouts/FlexItem/FlexItem.style.cjs +14 -0
  77. package/dist/Layouts/FlexItem/FlexItem.style.d.ts +5 -0
  78. package/dist/Layouts/FlexItem/FlexItem.style.js +12 -0
  79. package/dist/Layouts/FlexItem/FlexItem.types.d.ts +14 -0
  80. package/dist/Layouts/FlexSplit/FlexSplit.cjs +10 -0
  81. package/dist/Layouts/FlexSplit/FlexSplit.d.ts +2 -0
  82. package/dist/Layouts/FlexSplit/FlexSplit.js +10 -0
  83. package/dist/Layouts/FlexSplit/FlexSplit.style.cjs +27 -0
  84. package/dist/Layouts/FlexSplit/FlexSplit.style.d.ts +8 -0
  85. package/dist/Layouts/FlexSplit/FlexSplit.style.js +25 -0
  86. package/dist/Layouts/FlexSplit/FlexSplit.types.d.ts +8 -0
  87. package/dist/Layouts/index.d.ts +8 -0
  88. package/dist/Link/Link.style.d.ts +2 -1
  89. package/dist/Menu/components/Content/components/Item/Components/SubHead/SubHead.style.d.ts +2 -1
  90. package/dist/Menu/components/Content/components/Label/components/Text/Text.style.d.ts +2 -1
  91. package/dist/MidBar/MidBar.cjs +30 -0
  92. package/dist/MidBar/MidBar.d.ts +22 -0
  93. package/dist/MidBar/MidBar.js +30 -0
  94. package/dist/MidBar/MidBar.types.d.ts +6 -0
  95. package/dist/MidBar/components/Header/Header.cjs +32 -0
  96. package/dist/MidBar/components/Header/Header.d.ts +15 -0
  97. package/dist/MidBar/components/Header/Header.js +32 -0
  98. package/dist/MidBar/components/Header/Header.types.d.ts +13 -0
  99. package/dist/MidBar/components/Header/components/Compose/Compose.cjs +8 -0
  100. package/dist/MidBar/components/Header/components/Compose/Compose.d.ts +3 -0
  101. package/dist/MidBar/components/Header/components/Compose/Compose.js +8 -0
  102. package/dist/MidBar/components/Header/components/Compose/Compose.style.cjs +31 -0
  103. package/dist/MidBar/components/Header/components/Compose/Compose.style.d.ts +1 -0
  104. package/dist/MidBar/components/Header/components/Compose/Compose.style.js +29 -0
  105. package/dist/MidBar/components/Header/components/Compose/Compose.types.d.ts +2 -0
  106. package/dist/MidBar/components/Header/components/Group/Group.cjs +12 -0
  107. package/dist/MidBar/components/Header/components/Group/Group.d.ts +3 -0
  108. package/dist/MidBar/components/Header/components/Group/Group.js +12 -0
  109. package/dist/MidBar/components/Header/components/Group/Group.style.cjs +22 -0
  110. package/dist/MidBar/components/Header/components/Group/Group.style.d.ts +4 -0
  111. package/dist/MidBar/components/Header/components/Group/Group.style.js +20 -0
  112. package/dist/MidBar/components/Header/components/Group/Group.types.d.ts +5 -0
  113. package/dist/MidBar/index.d.ts +2 -0
  114. package/dist/Modal/components/Content/components/Body/components/Text/Text.style.d.ts +2 -1
  115. package/dist/Modal/components/Content/components/Description/components/Text/Text.style.d.ts +2 -1
  116. package/dist/Modal/components/Content/components/Header/components/Title/Title.style.d.ts +2 -1
  117. package/dist/MoreInfoIcon/MoreInfoIcon.style.cjs +1 -1
  118. package/dist/MoreInfoIcon/MoreInfoIcon.style.js +1 -1
  119. package/dist/Pagination/Pagination.d.ts +3 -2
  120. package/dist/Popover/Popover.d.ts +2 -2
  121. package/dist/Popover/components/Content/Content.d.ts +1 -1
  122. package/dist/Popover/components/Content/components/Body/components/BodyText/BodyText.styles.d.ts +2 -1
  123. package/dist/Popover/components/Content/components/Header/components/HeaderTitle/HeaderTitle.styles.d.ts +2 -1
  124. package/dist/Popover/components/Content/components/Text/Text.styles.d.ts +2 -1
  125. package/dist/Popover/components/Content/components/WindowBar/WindowBar.d.ts +1 -1
  126. package/dist/Popover/components/Content/components/WindowBar/WindowBar.style.d.ts +2 -1
  127. package/dist/Popover/components/PopoverCard/PopoverCard.d.ts +1 -1
  128. package/dist/ProgressBar/ProgressBar.styles.d.ts +1 -1
  129. package/dist/SearchBar/components/SearchSection/components/Actions/components/ColumnSelector/ColumnSelector.cjs +5 -7
  130. package/dist/SearchBar/components/SearchSection/components/Actions/components/ColumnSelector/ColumnSelector.js +5 -7
  131. package/dist/SearchBar/components/SearchSection/components/Actions/components/FiltersToggle/FiltersToggle.cjs +11 -9
  132. package/dist/SearchBar/components/SearchSection/components/Actions/components/FiltersToggle/FiltersToggle.js +11 -9
  133. package/dist/Section/components/Header/components/CategoryValueList/CategoryValueList.style.d.ts +2 -1
  134. package/dist/Section/components/Header/components/CategoryValueList/components/CategoryValueChip/CategoryValueChip.style.d.ts +3 -2
  135. package/dist/Section/components/Header/components/Label/Label.style.d.ts +2 -1
  136. package/dist/Select/components/Context/Context.cjs +6 -4
  137. package/dist/Select/components/Context/Context.js +7 -5
  138. package/dist/Select/components/Trigger/components/Compose/Compose.cjs +5 -0
  139. package/dist/Select/components/Trigger/components/Compose/Compose.js +6 -1
  140. package/dist/Select/components/Trigger/components/Compose/Compose.style.cjs +5 -0
  141. package/dist/Select/components/Trigger/components/Compose/Compose.style.js +5 -0
  142. package/dist/SideBar/components/Footer/components/Text/Text.style.d.ts +2 -1
  143. package/dist/SideBar/components/Item/components/Text/Text.style.d.ts +2 -1
  144. package/dist/Stepper/Stepper.context.cjs +5 -10
  145. package/dist/Stepper/Stepper.context.d.ts +1 -2
  146. package/dist/Stepper/Stepper.context.js +5 -10
  147. package/dist/Stepper/Stepper.d.ts +4 -4
  148. package/dist/Stepper/components/Compose/Compose.cjs +6 -1
  149. package/dist/Stepper/components/Compose/Compose.d.ts +2 -2
  150. package/dist/Stepper/components/Compose/Compose.js +7 -2
  151. package/dist/Stepper/components/Step/Step.context.cjs +5 -10
  152. package/dist/Stepper/components/Step/Step.context.d.ts +1 -2
  153. package/dist/Stepper/components/Step/Step.context.js +5 -10
  154. package/dist/Stepper/components/Step/Step.d.ts +2 -3
  155. package/dist/Stepper/components/Step/components/Compose/Compose.cjs +1 -3
  156. package/dist/Stepper/components/Step/components/Compose/Compose.d.ts +1 -1
  157. package/dist/Stepper/components/Step/components/Compose/Compose.js +2 -4
  158. package/dist/Stepper/components/Step/components/Compose/Compose.style.cjs +2 -5
  159. package/dist/Stepper/components/Step/components/Compose/Compose.style.js +4 -7
  160. package/dist/Stepper/components/Step/components/Label/Label.style.d.ts +2 -1
  161. package/dist/Stepper/components/Step/components/Label/Label.types.d.ts +2 -3
  162. package/dist/Stepper/hooks/useStepperFocusing.cjs +31 -0
  163. package/dist/Stepper/hooks/useStepperFocusing.d.ts +16 -0
  164. package/dist/Stepper/hooks/useStepperFocusing.js +31 -0
  165. package/dist/Stepper/hooks/useStepperInteractive.cjs +30 -37
  166. package/dist/Stepper/hooks/useStepperInteractive.d.ts +2 -3
  167. package/dist/Stepper/hooks/useStepperInteractive.js +30 -37
  168. package/dist/Switch/components/Title/Title.style.d.ts +2 -1
  169. package/dist/Switch/components/Title/Title.types.d.ts +4 -4
  170. package/dist/TableHeading/TableHeading.style.cjs +1 -1
  171. package/dist/TableHeading/TableHeading.style.js +1 -1
  172. package/dist/Tabs/components/TabBar/utils/theme.utils.d.ts +2 -2
  173. package/dist/ThemeModeSwitch/ThemeModeSwitch.cjs +64 -0
  174. package/dist/ThemeModeSwitch/ThemeModeSwitch.d.ts +2 -0
  175. package/dist/ThemeModeSwitch/ThemeModeSwitch.js +64 -0
  176. package/dist/ThemeModeSwitch/ThemeModeSwitch.style.cjs +38 -0
  177. package/dist/ThemeModeSwitch/ThemeModeSwitch.style.d.ts +4 -0
  178. package/dist/ThemeModeSwitch/ThemeModeSwitch.style.js +36 -0
  179. package/dist/ThemeModeSwitch/ThemeModeSwitch.types.d.ts +7 -0
  180. package/dist/ThemeModeSwitch/index.d.ts +3 -0
  181. package/dist/ThemeModeSwitch/useThemeModeSwitch.cjs +37 -0
  182. package/dist/ThemeModeSwitch/useThemeModeSwitch.d.ts +8 -0
  183. package/dist/ThemeModeSwitch/useThemeModeSwitch.js +37 -0
  184. package/dist/Toast/Toaster.cjs +4 -6
  185. package/dist/Toast/Toaster.d.ts +2 -1
  186. package/dist/Toast/Toaster.js +4 -6
  187. package/dist/Toast/Toaster.style.cjs +2 -2
  188. package/dist/Toast/Toaster.style.d.ts +2 -2
  189. package/dist/Toast/Toaster.style.js +3 -3
  190. package/dist/Toast/components/Content/components/Description/Description.style.d.ts +2 -1
  191. package/dist/Toast/components/Content/components/Message/Message.style.d.ts +2 -1
  192. package/dist/Toast/core/core.d.ts +3 -3
  193. package/dist/Toast/core/mapping.helpers.cjs +18 -2
  194. package/dist/Toast/core/mapping.helpers.d.ts +4 -3
  195. package/dist/Toast/core/mapping.helpers.js +22 -6
  196. package/dist/Toast/core/mapping.types.d.ts +3 -2
  197. package/dist/Tooltip/components/Content/components/Text/Text.styles.d.ts +2 -1
  198. package/dist/TreeView/components/TreeItem/components/Checkbox/Checkbox.style.d.ts +2 -1
  199. package/dist/Typography/Typography.cjs +3 -1
  200. package/dist/Typography/Typography.d.ts +5 -3
  201. package/dist/Typography/Typography.js +8 -6
  202. package/dist/Typography/components/Base/Base.cjs +18 -0
  203. package/dist/Typography/components/Base/Base.d.ts +4 -0
  204. package/dist/Typography/components/Base/Base.js +18 -0
  205. package/dist/Typography/components/Base/Base.style.cjs +16 -0
  206. package/dist/Typography/components/Base/Base.style.d.ts +3 -0
  207. package/dist/Typography/components/Base/Base.style.js +14 -0
  208. package/dist/Typography/components/Base/Base.types.d.ts +7 -0
  209. package/dist/Typography/components/Body/Body.cjs +11 -12
  210. package/dist/Typography/components/Body/Body.d.ts +3 -2
  211. package/dist/Typography/components/Body/Body.js +12 -13
  212. package/dist/Typography/components/Body/Body.style.cjs +5 -10
  213. package/dist/Typography/components/Body/Body.style.d.ts +2 -3
  214. package/dist/Typography/components/Body/Body.style.js +5 -10
  215. package/dist/Typography/components/Body/Body.types.d.ts +2 -5
  216. package/dist/Typography/components/Code/Code.cjs +11 -11
  217. package/dist/Typography/components/Code/Code.d.ts +3 -2
  218. package/dist/Typography/components/Code/Code.js +12 -12
  219. package/dist/Typography/components/Code/Code.style.cjs +5 -10
  220. package/dist/Typography/components/Code/Code.style.d.ts +1 -2
  221. package/dist/Typography/components/Code/Code.style.js +5 -10
  222. package/dist/Typography/components/Code/Code.types.d.ts +2 -5
  223. package/dist/Typography/components/Heading/Heading.cjs +11 -20
  224. package/dist/Typography/components/Heading/Heading.d.ts +3 -2
  225. package/dist/Typography/components/Heading/Heading.js +11 -20
  226. package/dist/Typography/components/Heading/Heading.style.cjs +4 -10
  227. package/dist/Typography/components/Heading/Heading.style.d.ts +2 -2
  228. package/dist/Typography/components/Heading/Heading.style.js +4 -10
  229. package/dist/Typography/components/Heading/Heading.types.d.ts +2 -5
  230. package/dist/Typography/components/Heading/Heading.utils.cjs +12 -0
  231. package/dist/Typography/components/Heading/Heading.utils.d.ts +2 -0
  232. package/dist/Typography/components/Heading/Heading.utils.js +12 -0
  233. package/dist/Typography/hooks/useEllipsisTooltip.cjs +7 -4
  234. package/dist/Typography/hooks/useEllipsisTooltip.d.ts +3 -8
  235. package/dist/Typography/hooks/useEllipsisTooltip.js +7 -4
  236. package/dist/Typography/index.d.ts +1 -0
  237. package/dist/index.cjs +1092 -1
  238. package/dist/index.d.ts +3 -0
  239. package/dist/index.js +1139 -48
  240. package/dist/node_modules/clsx/dist/clsx.cjs +17 -0
  241. package/dist/node_modules/clsx/dist/clsx.js +17 -0
  242. package/dist/packages/components/node_modules/react-toastify/dist/react-toastify.esm.cjs +320 -0
  243. package/dist/packages/components/node_modules/react-toastify/dist/react-toastify.esm.js +318 -0
  244. package/dist/packages/icons/dist/multicolor/LoaderLarge.cjs +2 -2
  245. package/dist/packages/icons/dist/multicolor/LoaderLarge.js +2 -2
  246. package/dist/packages/icons/dist/multicolor/dark/LoaderLarge.cjs +3 -8
  247. package/dist/packages/icons/dist/multicolor/dark/LoaderLarge.js +3 -8
  248. package/dist/packages/icons/dist/multicolor/light/LoaderLarge.cjs +3 -8
  249. package/dist/packages/icons/dist/multicolor/light/LoaderLarge.js +3 -8
  250. package/package.json +4 -4
  251. package/dist/node_modules/clsx/dist/clsx.m.cjs +0 -15
  252. package/dist/node_modules/clsx/dist/clsx.m.js +0 -15
  253. package/dist/node_modules/react-toastify/dist/react-toastify.esm.cjs +0 -300
  254. package/dist/node_modules/react-toastify/dist/react-toastify.esm.js +0 -298
@@ -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;
@@ -16,15 +16,14 @@ export declare function useStepperInteractive({ onStepChange, onKeyDown, getIsSt
16
16
  'aria-label': string;
17
17
  };
18
18
  };
19
- export declare function getInteractiveStepProps({ onClick, onKeyDown, onStepChange, getIsStepInteractive, stepIndex, state }: Pick<ComposeProps, 'onClick' | 'onKeyDown'> & Pick<StepperContextType, 'onStepChange' | 'getIsStepInteractive'> & {
19
+ export declare function getInteractiveStepProps({ onClick, onStepChange, getIsStepInteractive, stepIndex, state }: Pick<ComposeProps, 'onClick'> & Pick<StepperContextType, 'onStepChange' | 'getIsStepInteractive'> & {
20
20
  stepIndex: number;
21
21
  state: StepperStepStateType;
22
22
  }): {
23
23
  readonly onClick: import("react").MouseEventHandler<HTMLElement> | undefined;
24
- readonly onKeyDown: import("react").KeyboardEventHandler<HTMLElement> | undefined;
25
24
  readonly role: "listitem" | "tab";
26
25
  readonly 'aria-selected': boolean | undefined;
27
26
  readonly 'aria-current': "step" | undefined;
28
27
  readonly 'aria-disabled': true | undefined;
29
- readonly tabIndex: 0 | -1;
28
+ readonly tabIndex: -1;
30
29
  };
@@ -16,31 +16,36 @@ function useStepperInteractive({
16
16
  }
17
17
  return stepIndex !== currentStep;
18
18
  }, [currentStep, getIsStepInteractive, isInteractive]);
19
- const handleKeyDown = combineHandlers(isInteractive ? (event) => {
19
+ const handleKeyDown = isInteractive ? (event) => {
20
+ const findNextInteractive = (from, to = totalSteps || 0) => {
21
+ for (let i = from; i < to; i += 1) {
22
+ if (isStepInteractive(i)) return i;
23
+ }
24
+ return void 0;
25
+ };
26
+ const findPrevInteractive = (from, to = 0) => {
27
+ for (let i = from; i >= to; i -= 1) {
28
+ if (isStepInteractive(i)) return i;
29
+ }
30
+ return void 0;
31
+ };
32
+ const handleChange = (next) => {
33
+ event.preventDefault();
34
+ if (next !== void 0) onStepChange(next);
35
+ };
20
36
  const {
21
37
  key
22
38
  } = event;
23
- if (key === "ArrowLeft" || key === "ArrowRight") {
24
- event.preventDefault();
25
- const direction = key === "ArrowRight" ? 1 : -1;
26
- const newIndex = currentStep + direction;
27
- if (direction > 0) {
28
- for (let i = newIndex; i < totalSteps || 0; i += 1) {
29
- if (isStepInteractive(i)) {
30
- onStepChange(i);
31
- break;
32
- }
33
- }
34
- } else {
35
- for (let i = newIndex; i >= 0; i -= 1) {
36
- if (isStepInteractive(i)) {
37
- onStepChange(i);
38
- break;
39
- }
40
- }
41
- }
39
+ if (key === "ArrowRight") {
40
+ handleChange(findNextInteractive(currentStep + 1));
41
+ } else if (key === "ArrowLeft") {
42
+ handleChange(findPrevInteractive(currentStep - 1));
43
+ } else if (key === "Home") {
44
+ handleChange(findNextInteractive(0, currentStep));
45
+ } else if (key === "End") {
46
+ handleChange(findPrevInteractive((totalSteps || 0) - 1, currentStep + 1));
42
47
  }
43
- } : void 0, onKeyDown);
48
+ } : void 0;
44
49
  const role = isInteractive ? "tablist" : "list";
45
50
  const label = isInteractive ? "Step navigation" : "Progress steps";
46
51
  return {
@@ -49,7 +54,7 @@ function useStepperInteractive({
49
54
  onStepChange
50
55
  },
51
56
  props: {
52
- onKeyDown: handleKeyDown,
57
+ onKeyDown: combineHandlers(handleKeyDown, onKeyDown),
53
58
  role,
54
59
  "aria-label": label
55
60
  }
@@ -57,7 +62,6 @@ function useStepperInteractive({
57
62
  }
58
63
  function getInteractiveStepProps({
59
64
  onClick,
60
- onKeyDown,
61
65
  onStepChange,
62
66
  getIsStepInteractive,
63
67
  stepIndex,
@@ -65,29 +69,18 @@ function getInteractiveStepProps({
65
69
  }) {
66
70
  const isInteractive = !!onStepChange;
67
71
  const isClickable = isInteractive && getIsStepInteractive(stepIndex);
68
- const handleClick = combineHandlers(isClickable ? () => onStepChange(stepIndex) : void 0, onClick);
69
- const handleKeyDown = combineHandlers(isClickable ? (e) => {
70
- const {
71
- key
72
- } = e;
73
- if (key === "Enter" || key === " ") {
74
- e.preventDefault();
75
- onStepChange(stepIndex);
76
- }
77
- } : void 0, onKeyDown);
72
+ const handleClick = isClickable ? () => onStepChange(stepIndex) : void 0;
78
73
  const role = isInteractive ? "tab" : "listitem";
79
74
  const ariaSelected = isInteractive ? state === StepperStepState.FOCUSED : void 0;
80
75
  const ariaCurrent = !isInteractive && state === StepperStepState.FOCUSED ? "step" : void 0;
81
- const tabIndex = isClickable ? 0 : -1;
82
76
  const ariaDisabled = isInteractive && !isClickable ? true : void 0;
83
77
  return {
84
- onClick: handleClick,
85
- onKeyDown: handleKeyDown,
78
+ onClick: combineHandlers(handleClick, onClick),
86
79
  role,
87
80
  "aria-selected": ariaSelected,
88
81
  "aria-current": ariaCurrent,
89
82
  "aria-disabled": ariaDisabled,
90
- tabIndex
83
+ tabIndex: -1
91
84
  };
92
85
  }
93
86
  export {
@@ -1 +1,2 @@
1
- export declare const Title: import("styled-components").StyledComponent<({ size, variant, color, component, ellipsis, ...restProps }: import("../../../Typography").TypographyBodyProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
1
+ /// <reference types="react" />
2
+ export declare const Title: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("../../../Typography").TypographyBodyProps & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
@@ -1,8 +1,8 @@
1
- import { ComponentProps, ReactNode } from 'react';
2
- import { ChildFree } from '../../../Helpers/common.types';
3
- import Typography from '../../../Typography/Typography';
1
+ import { ReactNode } from 'react';
2
+ import { ChildFree } from '../../../Helpers';
3
+ import { TypographyBodyProps } from '../../../Typography';
4
4
  export interface SwitchTitleProps {
5
5
  titleOn?: ReactNode;
6
6
  titleOff?: ReactNode;
7
7
  }
8
- export type RestSwitchTitleProps = ChildFree<ComponentProps<typeof Typography.Body>>;
8
+ export type RestSwitchTitleProps = ChildFree<TypographyBodyProps>;
@@ -24,7 +24,7 @@ const EndContainer = _styled__default.default.div.withConfig({
24
24
  const TableSearchInput = _styled__default.default(SearchInput.default).withConfig({
25
25
  displayName: "TableHeadingstyle__TableSearchInput",
26
26
  componentId: "RedisUI__sc-ew9jwe-2"
27
- })(["width:", ";border-color:", ";&:where(:hover){border-color:", ";}"], () => redisUiStyles.useTheme().components.tableHeading.searchInput.width, () => redisUiStyles.useTheme().components.tableHeading.searchInput.states.normal.borderColor, () => redisUiStyles.useTheme().components.tableHeading.searchInput.states.hover.borderColor);
27
+ })(["width:", ";border-color:", ";&:where(:hover,:has(input:not(:placeholder-shown))){border-color:", ";}"], () => redisUiStyles.useTheme().components.tableHeading.searchInput.width, () => redisUiStyles.useTheme().components.tableHeading.searchInput.states.normal.borderColor, () => redisUiStyles.useTheme().components.tableHeading.searchInput.states.hover.borderColor);
28
28
  exports.EndContainer = EndContainer;
29
29
  exports.TableHeadingContainer = TableHeadingContainer;
30
30
  exports.TableSearchInput = TableSearchInput;
@@ -20,7 +20,7 @@ const EndContainer = _styled.div.withConfig({
20
20
  const TableSearchInput = _styled(SearchInput).withConfig({
21
21
  displayName: "TableHeadingstyle__TableSearchInput",
22
22
  componentId: "RedisUI__sc-ew9jwe-2"
23
- })(["width:", ";border-color:", ";&:where(:hover){border-color:", ";}"], () => useTheme().components.tableHeading.searchInput.width, () => useTheme().components.tableHeading.searchInput.states.normal.borderColor, () => useTheme().components.tableHeading.searchInput.states.hover.borderColor);
23
+ })(["width:", ";border-color:", ";&:where(:hover,:has(input:not(:placeholder-shown))){border-color:", ";}"], () => useTheme().components.tableHeading.searchInput.width, () => useTheme().components.tableHeading.searchInput.states.normal.borderColor, () => useTheme().components.tableHeading.searchInput.states.hover.borderColor);
24
24
  export {
25
25
  EndContainer,
26
26
  TableHeadingContainer,
@@ -5,7 +5,7 @@ export declare const useTabsVariantTheme: () => {
5
5
  size: string;
6
6
  };
7
7
  tab: {
8
- states: Partial<Record<"disabled" | "focus" | "normal" | "hover" | "active", {
8
+ states: Partial<Record<"disabled" | "normal" | "hover" | "active" | "focus", {
9
9
  padding?: string | undefined;
10
10
  bgColor?: string | undefined;
11
11
  textColor?: string | undefined;
@@ -18,7 +18,7 @@ export declare const useTabsVariantTheme: () => {
18
18
  }>>;
19
19
  };
20
20
  tabMarker: {
21
- states: Partial<Record<"disabled" | "focus" | "normal" | "hover" | "active", {
21
+ states: Partial<Record<"disabled" | "normal" | "hover" | "active" | "focus", {
22
22
  color?: string | undefined;
23
23
  size?: string | undefined;
24
24
  inset?: string | undefined;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("../node_modules/react/jsx-runtime.cjs");
4
+ const React = require("react");
5
+ const ThemeModeSwitch_style = require("./ThemeModeSwitch.style.cjs");
6
+ const useThemeModeSwitch = require("./useThemeModeSwitch.cjs");
7
+ const Menu = require("../Menu/Menu.cjs");
8
+ const ThemeModeSwitch = ({
9
+ onThemeModeChange,
10
+ switchTimeoutMs = 300,
11
+ ...restProps
12
+ }) => {
13
+ const {
14
+ allowSystemThemeMode,
15
+ themeMode,
16
+ setThemeMode,
17
+ toggleThemeMode
18
+ } = useThemeModeSwitch.useThemeModeSwitch({
19
+ onThemeModeChange,
20
+ switchTimeoutMs
21
+ });
22
+ const [ready, setReady] = React.useState(false);
23
+ React.useEffect(() => setReady(true), []);
24
+ const modeSwitch = jsxRuntime.jsxRuntimeExports.jsx(ThemeModeSwitch_style.ThemeModeSwitch, {
25
+ "data-theme-mode": themeMode,
26
+ "aria-label": `Theme mode switch. Current theme mode is ${themeMode || "unknown"}`,
27
+ ...restProps,
28
+ onClick: toggleThemeMode,
29
+ "data-mounting": !ready ? "" : void 0,
30
+ "$durationMs": switchTimeoutMs,
31
+ onPointerDown: allowSystemThemeMode ? (e) => {
32
+ e.currentTarget.focus();
33
+ e.preventDefault();
34
+ } : void 0,
35
+ children: jsxRuntime.jsxRuntimeExports.jsx(ThemeModeSwitch_style.Knob, {
36
+ "data-theme-mode": themeMode
37
+ })
38
+ });
39
+ if (allowSystemThemeMode) {
40
+ return jsxRuntime.jsxRuntimeExports.jsxs(Menu.default, {
41
+ children: [jsxRuntime.jsxRuntimeExports.jsx(Menu.default.Trigger, {
42
+ children: modeSwitch
43
+ }), jsxRuntime.jsxRuntimeExports.jsxs(Menu.default.Content, {
44
+ placement: "bottom",
45
+ align: "center",
46
+ children: [jsxRuntime.jsxRuntimeExports.jsx(Menu.default.Content.Item, {
47
+ text: "Light theme",
48
+ selected: themeMode === "light",
49
+ onClick: () => setThemeMode("light")
50
+ }), jsxRuntime.jsxRuntimeExports.jsx(Menu.default.Content.Item, {
51
+ text: "Dark theme",
52
+ selected: themeMode === "dark",
53
+ onClick: () => setThemeMode("dark")
54
+ }), jsxRuntime.jsxRuntimeExports.jsx(Menu.default.Content.Item, {
55
+ text: "Browser theme",
56
+ selected: themeMode === "system",
57
+ onClick: () => setThemeMode("system")
58
+ })]
59
+ })]
60
+ });
61
+ }
62
+ return modeSwitch;
63
+ };
64
+ exports.ThemeModeSwitch = ThemeModeSwitch;
@@ -0,0 +1,2 @@
1
+ import { ThemeModeSwitchProps } from './ThemeModeSwitch.types';
2
+ export declare const ThemeModeSwitch: ({ onThemeModeChange, switchTimeoutMs, ...restProps }: ThemeModeSwitchProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,64 @@
1
+ import { j as jsxRuntimeExports } from "../node_modules/react/jsx-runtime.js";
2
+ import { useState, useEffect } from "react";
3
+ import { ThemeModeSwitch as ThemeModeSwitch$1, Knob } from "./ThemeModeSwitch.style.js";
4
+ import { useThemeModeSwitch } from "./useThemeModeSwitch.js";
5
+ import Menu from "../Menu/Menu.js";
6
+ const ThemeModeSwitch = ({
7
+ onThemeModeChange,
8
+ switchTimeoutMs = 300,
9
+ ...restProps
10
+ }) => {
11
+ const {
12
+ allowSystemThemeMode,
13
+ themeMode,
14
+ setThemeMode,
15
+ toggleThemeMode
16
+ } = useThemeModeSwitch({
17
+ onThemeModeChange,
18
+ switchTimeoutMs
19
+ });
20
+ const [ready, setReady] = useState(false);
21
+ useEffect(() => setReady(true), []);
22
+ const modeSwitch = jsxRuntimeExports.jsx(ThemeModeSwitch$1, {
23
+ "data-theme-mode": themeMode,
24
+ "aria-label": `Theme mode switch. Current theme mode is ${themeMode || "unknown"}`,
25
+ ...restProps,
26
+ onClick: toggleThemeMode,
27
+ "data-mounting": !ready ? "" : void 0,
28
+ "$durationMs": switchTimeoutMs,
29
+ onPointerDown: allowSystemThemeMode ? (e) => {
30
+ e.currentTarget.focus();
31
+ e.preventDefault();
32
+ } : void 0,
33
+ children: jsxRuntimeExports.jsx(Knob, {
34
+ "data-theme-mode": themeMode
35
+ })
36
+ });
37
+ if (allowSystemThemeMode) {
38
+ return jsxRuntimeExports.jsxs(Menu, {
39
+ children: [jsxRuntimeExports.jsx(Menu.Trigger, {
40
+ children: modeSwitch
41
+ }), jsxRuntimeExports.jsxs(Menu.Content, {
42
+ placement: "bottom",
43
+ align: "center",
44
+ children: [jsxRuntimeExports.jsx(Menu.Content.Item, {
45
+ text: "Light theme",
46
+ selected: themeMode === "light",
47
+ onClick: () => setThemeMode("light")
48
+ }), jsxRuntimeExports.jsx(Menu.Content.Item, {
49
+ text: "Dark theme",
50
+ selected: themeMode === "dark",
51
+ onClick: () => setThemeMode("dark")
52
+ }), jsxRuntimeExports.jsx(Menu.Content.Item, {
53
+ text: "Browser theme",
54
+ selected: themeMode === "system",
55
+ onClick: () => setThemeMode("system")
56
+ })]
57
+ })]
58
+ });
59
+ }
60
+ return modeSwitch;
61
+ };
62
+ export {
63
+ ThemeModeSwitch
64
+ };
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const _styled = require("styled-components");
4
+ const redisUiStyles = require("@redislabsdev/redis-ui-styles");
5
+ const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
6
+ const _styled__default = /* @__PURE__ */ _interopDefault(_styled);
7
+ const ThemeModeSwitch = _styled__default.default.button.withConfig({
8
+ displayName: "ThemeModeSwitchstyle__ThemeModeSwitch",
9
+ componentId: "RedisUI__sc-6b0pvc-0"
10
+ })(["all:unset;cursor:pointer;box-sizing:border-box;transition:all ", "ms ease,outline 0ms,outline-offset 0ms;&[data-mounting]{transition:none;}", " ", ""], ({
11
+ $durationMs
12
+ }) => $durationMs, () => {
13
+ const theme = redisUiStyles.useTheme().components.themeModeSwitch;
14
+ return _styled.css`
15
+ width: ${theme.width};
16
+ height: ${theme.height};
17
+ padding: ${theme.padding};
18
+
19
+ border-radius: ${theme.borderRadius};
20
+
21
+ border: ${theme.borderColor} solid ${theme.borderWidth};
22
+ background-color: ${theme.bgColor};
23
+ `;
24
+ }, redisUiStyles.getFocusStyle());
25
+ const Knob = _styled__default.default.div.withConfig({
26
+ displayName: "ThemeModeSwitchstyle__Knob",
27
+ componentId: "RedisUI__sc-6b0pvc-1"
28
+ })(["height:100%;width:100%;background:none;transition:inherit;&[data-theme-mode='dark']{transform:translateX(100%);:before{transform:translateX(-100%);}}&[data-theme-mode='system']{transform:translateX(50%);:before{transform:translateX(-50%);}}:before{content:'';display:block;transition:inherit;height:100%;background-size:contain;background-position:center;background-repeat:no-repeat;", "}"], () => {
29
+ const theme = redisUiStyles.useTheme().components.themeModeSwitch.thumb;
30
+ return _styled.css`
31
+ border-radius: ${theme.borderRadius};
32
+ background-color: ${theme.bgColor};
33
+ background-image: ${theme.icon};
34
+ aspect-ratio: ${theme.iconAspectRatio};
35
+ `;
36
+ });
37
+ exports.Knob = Knob;
38
+ exports.ThemeModeSwitch = ThemeModeSwitch;
@@ -0,0 +1,4 @@
1
+ export declare const ThemeModeSwitch: import("styled-components").StyledComponent<"button", any, {
2
+ $durationMs: number;
3
+ }, never>;
4
+ export declare const Knob: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -0,0 +1,36 @@
1
+ import _styled, { css } from "styled-components";
2
+ import { useTheme, getFocusStyle } from "@redislabsdev/redis-ui-styles";
3
+ const ThemeModeSwitch = _styled.button.withConfig({
4
+ displayName: "ThemeModeSwitchstyle__ThemeModeSwitch",
5
+ componentId: "RedisUI__sc-6b0pvc-0"
6
+ })(["all:unset;cursor:pointer;box-sizing:border-box;transition:all ", "ms ease,outline 0ms,outline-offset 0ms;&[data-mounting]{transition:none;}", " ", ""], ({
7
+ $durationMs
8
+ }) => $durationMs, () => {
9
+ const theme = useTheme().components.themeModeSwitch;
10
+ return css`
11
+ width: ${theme.width};
12
+ height: ${theme.height};
13
+ padding: ${theme.padding};
14
+
15
+ border-radius: ${theme.borderRadius};
16
+
17
+ border: ${theme.borderColor} solid ${theme.borderWidth};
18
+ background-color: ${theme.bgColor};
19
+ `;
20
+ }, getFocusStyle());
21
+ const Knob = _styled.div.withConfig({
22
+ displayName: "ThemeModeSwitchstyle__Knob",
23
+ componentId: "RedisUI__sc-6b0pvc-1"
24
+ })(["height:100%;width:100%;background:none;transition:inherit;&[data-theme-mode='dark']{transform:translateX(100%);:before{transform:translateX(-100%);}}&[data-theme-mode='system']{transform:translateX(50%);:before{transform:translateX(-50%);}}:before{content:'';display:block;transition:inherit;height:100%;background-size:contain;background-position:center;background-repeat:no-repeat;", "}"], () => {
25
+ const theme = useTheme().components.themeModeSwitch.thumb;
26
+ return css`
27
+ border-radius: ${theme.borderRadius};
28
+ background-color: ${theme.bgColor};
29
+ background-image: ${theme.icon};
30
+ aspect-ratio: ${theme.iconAspectRatio};
31
+ `;
32
+ });
33
+ export {
34
+ Knob,
35
+ ThemeModeSwitch
36
+ };
@@ -0,0 +1,7 @@
1
+ import { UserThemeMode } from '@redislabsdev/redis-ui-styles';
2
+ import { HTMLAttributes } from 'react';
3
+ export type UseThemeModeSwitchParams = {
4
+ onThemeModeChange?: (newThemeMode: UserThemeMode) => void;
5
+ switchTimeoutMs?: number;
6
+ };
7
+ export type ThemeModeSwitchProps = Omit<HTMLAttributes<HTMLElement>, 'onClick' | 'onChange'> & UseThemeModeSwitchParams;
@@ -0,0 +1,3 @@
1
+ export * from './ThemeModeSwitch.types';
2
+ export * from './ThemeModeSwitch';
3
+ export * from './useThemeModeSwitch';
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const redisUiStyles = require("@redislabsdev/redis-ui-styles");
5
+ function useThemeModeSwitch({
6
+ onThemeModeChange,
7
+ switchTimeoutMs
8
+ }) {
9
+ const {
10
+ getNextThemeModeToToggle,
11
+ userThemeMode,
12
+ setUserThemeMode,
13
+ allowSystemThemeMode
14
+ } = redisUiStyles.useThemeModeSwitchingContext();
15
+ const [localThemeMode, setLocalThemeMode] = React.useState(userThemeMode);
16
+ React.useLayoutEffect(() => setLocalThemeMode(userThemeMode), [userThemeMode]);
17
+ const timerRef = React.useRef();
18
+ React.useEffect(() => () => clearTimeout(timerRef.current), []);
19
+ const applyThemeMode = (newThemeMode) => {
20
+ if (!newThemeMode) return;
21
+ clearTimeout(timerRef.current);
22
+ setLocalThemeMode(newThemeMode);
23
+ timerRef.current = setTimeout(() => {
24
+ if (setUserThemeMode(newThemeMode)) onThemeModeChange == null ? void 0 : onThemeModeChange(newThemeMode);
25
+ }, switchTimeoutMs);
26
+ };
27
+ const toggleThemeMode = () => {
28
+ applyThemeMode(getNextThemeModeToToggle(localThemeMode));
29
+ };
30
+ return {
31
+ allowSystemThemeMode,
32
+ themeMode: localThemeMode,
33
+ setThemeMode: applyThemeMode,
34
+ toggleThemeMode
35
+ };
36
+ }
37
+ exports.useThemeModeSwitch = useThemeModeSwitch;
@@ -0,0 +1,8 @@
1
+ import { UserThemeMode } from '@redislabsdev/redis-ui-styles';
2
+ import { UseThemeModeSwitchParams } from './ThemeModeSwitch.types';
3
+ export declare function useThemeModeSwitch({ onThemeModeChange, switchTimeoutMs }: UseThemeModeSwitchParams): {
4
+ allowSystemThemeMode: boolean | undefined;
5
+ themeMode: "light" | "dark" | "system" | undefined;
6
+ setThemeMode: (newThemeMode: UserThemeMode | undefined) => void;
7
+ toggleThemeMode: () => void;
8
+ };
@@ -0,0 +1,37 @@
1
+ import { useState, useLayoutEffect, useRef, useEffect } from "react";
2
+ import { useThemeModeSwitchingContext } from "@redislabsdev/redis-ui-styles";
3
+ function useThemeModeSwitch({
4
+ onThemeModeChange,
5
+ switchTimeoutMs
6
+ }) {
7
+ const {
8
+ getNextThemeModeToToggle,
9
+ userThemeMode,
10
+ setUserThemeMode,
11
+ allowSystemThemeMode
12
+ } = useThemeModeSwitchingContext();
13
+ const [localThemeMode, setLocalThemeMode] = useState(userThemeMode);
14
+ useLayoutEffect(() => setLocalThemeMode(userThemeMode), [userThemeMode]);
15
+ const timerRef = useRef();
16
+ useEffect(() => () => clearTimeout(timerRef.current), []);
17
+ const applyThemeMode = (newThemeMode) => {
18
+ if (!newThemeMode) return;
19
+ clearTimeout(timerRef.current);
20
+ setLocalThemeMode(newThemeMode);
21
+ timerRef.current = setTimeout(() => {
22
+ if (setUserThemeMode(newThemeMode)) onThemeModeChange == null ? void 0 : onThemeModeChange(newThemeMode);
23
+ }, switchTimeoutMs);
24
+ };
25
+ const toggleThemeMode = () => {
26
+ applyThemeMode(getNextThemeModeToToggle(localThemeMode));
27
+ };
28
+ return {
29
+ allowSystemThemeMode,
30
+ themeMode: localThemeMode,
31
+ setThemeMode: applyThemeMode,
32
+ toggleThemeMode
33
+ };
34
+ }
35
+ export {
36
+ useThemeModeSwitch
37
+ };
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const jsxRuntime = require("../node_modules/react/jsx-runtime.cjs");
4
+ const React = require("react");
4
5
  const Toaster_style = require("./Toaster.style.cjs");
5
- const Toaster = ({
6
+ const Toaster = React.forwardRef((props, ref) => jsxRuntime.jsxRuntimeExports.jsx(Toaster_style.ToasterContainer, {
6
7
  ref,
7
8
  ...props
8
- }) => jsxRuntime.jsxRuntimeExports.jsx(Toaster_style.ToasterContainer, {
9
- ref,
10
- ...props,
11
- enableMultiContainer: !!props.containerId
12
- });
9
+ }));
10
+ Toaster.displayName = "Toaster";
13
11
  const Toaster$1 = Toaster;
14
12
  exports.default = Toaster$1;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { ToasterProps } from './core/core.types';
2
- declare const Toaster: ({ ref, ...props }: ToasterProps) => import("react/jsx-runtime").JSX.Element;
3
+ declare const Toaster: import("react").ForwardRefExoticComponent<Omit<ToasterProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
3
4
  export default Toaster;
@@ -1,13 +1,11 @@
1
1
  import { j as jsxRuntimeExports } from "../node_modules/react/jsx-runtime.js";
2
+ import { forwardRef } from "react";
2
3
  import { ToasterContainer } from "./Toaster.style.js";
3
- const Toaster = ({
4
+ const Toaster = forwardRef((props, ref) => jsxRuntimeExports.jsx(ToasterContainer, {
4
5
  ref,
5
6
  ...props
6
- }) => jsxRuntimeExports.jsx(ToasterContainer, {
7
- ref,
8
- ...props,
9
- enableMultiContainer: !!props.containerId
10
- });
7
+ }));
8
+ Toaster.displayName = "Toaster";
11
9
  const Toaster$1 = Toaster;
12
10
  export {
13
11
  Toaster$1 as default