@redsift/design-system 12.6.6 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CONTRIBUTING.md +20 -8
  2. package/_internal/AppContainer.js +1 -1
  3. package/_internal/AppContainer.js.map +1 -1
  4. package/_internal/Button2.js +1 -1
  5. package/_internal/Button2.js.map +1 -1
  6. package/_internal/Checkbox2.js +8 -3
  7. package/_internal/Checkbox2.js.map +1 -1
  8. package/_internal/DetailedCard.js +17 -1352
  9. package/_internal/DetailedCard.js.map +1 -1
  10. package/_internal/DetailedCardCollapsibleSectionItems.js +14 -4
  11. package/_internal/DetailedCardCollapsibleSectionItems.js.map +1 -1
  12. package/_internal/DetailedCardSection.js +4 -2
  13. package/_internal/DetailedCardSection.js.map +1 -1
  14. package/_internal/IconButton.js +1 -1
  15. package/_internal/IconButton.js.map +1 -1
  16. package/_internal/Item2.js +2 -2
  17. package/_internal/Item2.js.map +1 -1
  18. package/_internal/LinkButton.js +1 -1
  19. package/_internal/LinkButton.js.map +1 -1
  20. package/_internal/Listbox2.js +5 -5
  21. package/_internal/Listbox2.js.map +1 -1
  22. package/_internal/NumberField.js +2 -0
  23. package/_internal/NumberField.js.map +1 -1
  24. package/_internal/Radio2.js +14 -7
  25. package/_internal/Radio2.js.map +1 -1
  26. package/_internal/RadioGroup.js +6 -1
  27. package/_internal/RadioGroup.js.map +1 -1
  28. package/_internal/SideNavigationMenu.js +9 -4
  29. package/_internal/SideNavigationMenu.js.map +1 -1
  30. package/_internal/SideNavigationMenuItem.js +2 -2
  31. package/_internal/SideNavigationMenuItem.js.map +1 -1
  32. package/_internal/Switch2.js +8 -3
  33. package/_internal/Switch2.js.map +1 -1
  34. package/_internal/Tabs2.js.map +1 -1
  35. package/_internal/TextArea.js +5 -1
  36. package/_internal/TextArea.js.map +1 -1
  37. package/_internal/TextField.js +5 -1
  38. package/_internal/TextField.js.map +1 -1
  39. package/_internal/context.js.map +1 -1
  40. package/_internal/filterComponents.js +3 -0
  41. package/_internal/filterComponents.js.map +1 -1
  42. package/_internal/getElementRef.js +25 -0
  43. package/_internal/getElementRef.js.map +1 -0
  44. package/_internal/getTextWidth.js +32 -0
  45. package/_internal/getTextWidth.js.map +1 -0
  46. package/_internal/isComponent.js +3 -0
  47. package/_internal/isComponent.js.map +1 -1
  48. package/_internal/reactVersion.js +14 -0
  49. package/_internal/reactVersion.js.map +1 -0
  50. package/_internal/styles4.js +72 -72
  51. package/_internal/styles4.js.map +1 -1
  52. package/_internal/types.js.map +1 -1
  53. package/_internal/useFocusOnListItem.js +1 -1
  54. package/_internal/useFocusOnListItem.js.map +1 -1
  55. package/_internal/useId.js +1 -1
  56. package/_internal/useId.js.map +1 -1
  57. package/_internal/useListboxItem.js.map +1 -1
  58. package/_internal/useSideNavigationMenuBar.js +2 -2
  59. package/_internal/useSideNavigationMenuBar.js.map +1 -1
  60. package/_internal/warnIfNoAccessibleLabelFound.js.map +1 -1
  61. package/index.d.ts +48 -24
  62. package/index.js +3 -31
  63. package/index.js.map +1 -1
  64. package/package.json +18 -26
@@ -223,7 +223,6 @@ const Radio = /*#__PURE__*/forwardRef((props, ref) => {
223
223
  $isDisabled: isDisabled,
224
224
  $isFocusVisible: isFocusVisible,
225
225
  $isInvalid: isInvalid || isRequired && !(isSelected || isControlled && propsIsSelected),
226
- $isRequired: isRequired,
227
226
  $isSelected: isSelected || isControlled && propsIsSelected,
228
227
  $theme: theme,
229
228
  className: classNames(Radio.className, className),
@@ -236,20 +235,28 @@ const Radio = /*#__PURE__*/forwardRef((props, ref) => {
236
235
  className: "label"
237
236
  }, children) : null, /*#__PURE__*/React__default.createElement("input", _extends({}, inputProps, focusProps, {
238
237
  "aria-checked": isSelected || isControlled && propsIsSelected ? 'true' : 'false',
239
- "aria-disabled": isDisabled,
240
- "aria-invalid": isInvalid || isRequired && !(isSelected || isControlled && propsIsSelected),
238
+ "aria-disabled": isDisabled
239
+ // role="radio" supports neither aria-invalid nor aria-required: per the APG radio group pattern they belong
240
+ // on the enclosing role="radiogroup", which RadioGroup sets. A standalone Radio has no group to carry them,
241
+ // so its input keeps them, each only when true. aria-readonly is never set: no role here supports it.
242
+ ,
243
+ "aria-invalid": !groupState && (isInvalid || isRequired && !(isSelected || isControlled && propsIsSelected)) || undefined,
241
244
  "aria-label": ariaLabel,
242
245
  "aria-labelledby": ariaLabelledby,
243
- "aria-readonly": isReadOnly,
244
- "aria-required": isRequired,
246
+ "aria-required": !groupState && isRequired || undefined
247
+ // eslint-disable-next-line jsx-a11y/no-autofocus -- forwards the consumer's `autoFocus` prop
248
+ ,
245
249
  autoFocus: autoFocus,
246
250
  checked: isSelected || isControlled && propsIsSelected ? true : false,
247
251
  disabled: isDisabled,
248
252
  name: name,
249
253
  onChange: handleChange,
250
254
  ref: inputRef,
251
- type: "radio",
252
- value: value
255
+ type: "radio"
256
+ // React 18 renders an explicit `value={undefined}` as `value=""` (it sets `defaultValue`), and that is what
257
+ // a checked input submits. React 19 renders nothing, so pass the `''` explicitly on both.
258
+ ,
259
+ value: value !== null && value !== void 0 ? value : ''
253
260
  })));
254
261
  });
255
262
  Radio.className = CLASSNAME;
@@ -1 +1 @@
1
- {"version":3,"file":"Radio2.js","sources":["../../src/components/radio/styles.ts","../../src/components/radio/Radio.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { StyledRadioProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledRadio = styled.label<StyledRadioProps>`\n height: fit-content;\n position: relative;\n width: fit-content;\n ${baseStyling}\n\n align-items: center;\n background: none;\n border: none;\n display: inline-flex;\n\n input {\n height: 100%;\n margin: 0;\n opacity: 0;\n overflow: visible;\n padding: 0;\n position: absolute;\n width: 100%;\n }\n\n span.label {\n ${({ $isDisabled, $isInvalid, $theme }) =>\n $isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-invalid);\n `\n : css`\n color: var(--redsift-color-${$theme}-components-radio-text-default);\n `}\n\n font-family: var(--redsift-typography-body-font-family);\n font-size: var(--redsift-typography-body-font-size);\n font-weight: var(--redsift-typography-body-font-weight);\n line-height: var(--redsift-typography-body-line-height);\n padding-left: 4px;\n padding-right: 16px;\n\n [dir='rtl'] & {\n padding-left: 16px;\n padding-right: 4px;\n }\n }\n\n .redsift-icon {\n box-sizing: content-box;\n padding: 2px;\n width: 24px;\n\n ${({ $isColored, $isDisabled, $isInvalid, $isFocusVisible, $theme }) => css`\n ${$isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-fill-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-fill-invalid);\n `\n : css`\n color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-radio-fill-default)`\n : `var(--redsift-color-${$theme}-components-radio-fill-uncolored)`};\n `}\n\n ${$isFocusVisible && !$isDisabled\n ? css`\n background-color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-radio-fill-default-hover)`\n : `var(--redsift-color-${$theme}-components-radio-fill-uncolored-hover)`};\n border-radius: 16px;\n `\n : ''}\n `}\n }\n\n &:hover,\n &:focus-visible {\n outline: none;\n\n ${({ $isColored, $isDisabled, $isInvalid, $theme }) =>\n !$isDisabled\n ? css`\n .redsift-icon {\n ${$isInvalid\n ? css`\n background-color: var(--redsift-color-${$theme}-components-radio-fill-invalid-hover);\n `\n : css`\n background-color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-radio-fill-default-hover)`\n : `var(--redsift-color-${$theme}-components-radio-fill-uncolored-hover)`};\n `}\n border-radius: 16px;\n }\n `\n : ''}\n }\n`;\n","import React, {\n ComponentProps,\n forwardRef,\n MutableRefObject,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport { useFocusRing } from '../../react-aria/react-aria/focus';\nimport { mdiRadioboxBlank, mdiRadioboxMarked } from '@redsift/icons';\nimport { Comp, getStylingTransientProps } from '../../types';\nimport { Icon } from '../icon';\nimport { RadioGroupContext } from '../radio-group/context';\nimport { warnIfNoAccessibleLabelFound } from '../../utils/warnIfNoAccessibleLabelFound';\nimport { RadioProps } from './types';\nimport { StyledRadio } from './styles';\nimport { useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'Radio';\nconst CLASSNAME = 'redsift-radio';\n\n/**\n * Radio allows users to select exactly one option from a set. Typically used\n * within a RadioGroup, but can work standalone for simple cases.\n *\n * Supports controlled (`isSelected`) or uncontrolled (`defaultSelected`) modes.\n *\n * **Accessibility:** Always provide a label via children or `aria-label`.\n *\n * @example\n * // Within a RadioGroup (recommended)\n * <RadioGroup label=\"Choose size\" onChange={setSize}>\n * <Radio value=\"small\">Small</Radio>\n * <Radio value=\"medium\">Medium</Radio>\n * <Radio value=\"large\">Large</Radio>\n * </RadioGroup>\n *\n * @example\n * // Standalone controlled radio\n * <Radio isSelected={isSelected} onChange={setIsSelected}>\n * Enable feature\n * </Radio>\n */\nexport const Radio: Comp<RadioProps, HTMLLabelElement> = forwardRef((props, ref) => {\n const groupState = useContext(RadioGroupContext);\n\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n let {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n autoFocus,\n children,\n className,\n defaultSelected,\n inputProps,\n inputRef,\n isColored = true,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n isSelected: propsIsSelected,\n name,\n onChange,\n theme: propsTheme,\n value,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n const { isFocusVisible, focusProps } = useFocusRing({ autoFocus });\n isDisabled = isDisabled ?? groupState?.isDisabled;\n isReadOnly = isReadOnly ?? groupState?.isReadOnly;\n\n const [isSelected, setSelected] = useState(\n Boolean(propsIsSelected ?? defaultSelected ?? Boolean(groupState?.value && groupState.value === value))\n );\n const isControlled = propsIsSelected !== null && propsIsSelected !== undefined;\n\n useEffect(() => {\n setSelected(Boolean(propsIsSelected ?? defaultSelected));\n }, [propsIsSelected, defaultSelected]);\n\n useEffect(() => {\n if (groupState) {\n setSelected(groupState.value === value);\n }\n }, [groupState?.value]);\n\n warnIfNoAccessibleLabelFound(props as ComponentProps<'label'>, [children], 'Radio');\n\n if (groupState) {\n if (propsIsSelected != null) {\n console.warn(\n 'isSelected is unsupported on individual <Radio> elements within a <RadioGroup> unless the <Radio> is controlled. Please apply this prop to the group instead.'\n );\n }\n if (defaultSelected != null) {\n console.warn(\n 'defaultSelected is unsupported on individual <Radio> elements within a <RadioGroup> unless the <Radio> is controlled. Please apply this prop to the group instead.'\n );\n }\n if (props.value == null) {\n console.warn(\n 'A <Radio> element within a <RadioGroup> requires a `value` property unless the <Radio> is controlled.'\n );\n }\n }\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (isDisabled || isReadOnly) {\n return;\n }\n\n if (groupState) {\n groupState.setValue(value as string);\n }\n\n if (isControlled) {\n onChange?.(!propsIsSelected, value, name, event, groupState!);\n } else {\n setSelected(!isSelected);\n onChange?.(!isSelected, value, name, event, groupState!);\n }\n },\n [onChange, groupState, isSelected, propsIsSelected]\n );\n\n return (\n <StyledRadio\n {...forwardedProps}\n {...transientProps}\n $isColored={isColored}\n $isDisabled={isDisabled}\n $isFocusVisible={isFocusVisible}\n $isInvalid={isInvalid || (isRequired && !(isSelected || (isControlled && propsIsSelected)))}\n $isRequired={isRequired}\n $isSelected={isSelected || (isControlled && propsIsSelected)}\n $theme={theme}\n className={classNames(Radio.className, className)}\n ref={ref as MutableRefObject<HTMLLabelElement>}\n >\n {isSelected || (isControlled && propsIsSelected) ? (\n <Icon icon={mdiRadioboxMarked} />\n ) : (\n <Icon icon={mdiRadioboxBlank} />\n )}\n {children ? <span className=\"label\">{children}</span> : null}\n <input\n {...inputProps}\n {...focusProps}\n aria-checked={isSelected || (isControlled && propsIsSelected) ? 'true' : 'false'}\n aria-disabled={isDisabled}\n aria-invalid={isInvalid || (isRequired && !(isSelected || (isControlled && propsIsSelected)))}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-readonly={isReadOnly}\n aria-required={isRequired}\n autoFocus={autoFocus}\n checked={isSelected || (isControlled && propsIsSelected) ? true : false}\n disabled={isDisabled}\n name={name}\n onChange={handleChange}\n ref={inputRef as MutableRefObject<HTMLInputElement>}\n type=\"radio\"\n value={value}\n />\n </StyledRadio>\n );\n});\nRadio.className = CLASSNAME;\nRadio.displayName = COMPONENT_NAME;\n"],"names":["StyledRadio","styled","label","baseStyling","_ref","$isDisabled","$isInvalid","$theme","css","_ref2","$isColored","$isFocusVisible","_ref3","COMPONENT_NAME","CLASSNAME","Radio","forwardRef","props","ref","_isDisabled","_isReadOnly","groupState","useContext","RadioGroupContext","transientProps","otherProps","getStylingTransientProps","ariaLabel","ariaLabelledby","autoFocus","children","className","defaultSelected","inputProps","inputRef","isColored","isDisabled","isInvalid","isReadOnly","isRequired","isSelected","propsIsSelected","name","onChange","theme","propsTheme","value","forwardedProps","_objectWithoutProperties","_excluded","useTheme","isFocusVisible","focusProps","useFocusRing","setSelected","useState","Boolean","isControlled","undefined","useEffect","warnIfNoAccessibleLabelFound","console","warn","handleChange","useCallback","event","setValue","React","createElement","_extends","$isRequired","$isSelected","classNames","Icon","icon","mdiRadioboxMarked","mdiRadioboxBlank","checked","disabled","type","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Radio2.js","sources":["../../src/components/radio/styles.ts","../../src/components/radio/Radio.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { StyledRadioProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledRadio = styled.label<StyledRadioProps>`\n height: fit-content;\n position: relative;\n width: fit-content;\n ${baseStyling}\n\n align-items: center;\n background: none;\n border: none;\n display: inline-flex;\n\n input {\n height: 100%;\n margin: 0;\n opacity: 0;\n overflow: visible;\n padding: 0;\n position: absolute;\n width: 100%;\n }\n\n span.label {\n ${({ $isDisabled, $isInvalid, $theme }) =>\n $isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-invalid);\n `\n : css`\n color: var(--redsift-color-${$theme}-components-radio-text-default);\n `}\n\n font-family: var(--redsift-typography-body-font-family);\n font-size: var(--redsift-typography-body-font-size);\n font-weight: var(--redsift-typography-body-font-weight);\n line-height: var(--redsift-typography-body-line-height);\n padding-left: 4px;\n padding-right: 16px;\n\n [dir='rtl'] & {\n padding-left: 16px;\n padding-right: 4px;\n }\n }\n\n .redsift-icon {\n box-sizing: content-box;\n padding: 2px;\n width: 24px;\n\n ${({ $isColored, $isDisabled, $isInvalid, $isFocusVisible, $theme }) => css`\n ${$isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-fill-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-fill-invalid);\n `\n : css`\n color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-radio-fill-default)`\n : `var(--redsift-color-${$theme}-components-radio-fill-uncolored)`};\n `}\n\n ${$isFocusVisible && !$isDisabled\n ? css`\n background-color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-radio-fill-default-hover)`\n : `var(--redsift-color-${$theme}-components-radio-fill-uncolored-hover)`};\n border-radius: 16px;\n `\n : ''}\n `}\n }\n\n &:hover,\n &:focus-visible {\n outline: none;\n\n ${({ $isColored, $isDisabled, $isInvalid, $theme }) =>\n !$isDisabled\n ? css`\n .redsift-icon {\n ${$isInvalid\n ? css`\n background-color: var(--redsift-color-${$theme}-components-radio-fill-invalid-hover);\n `\n : css`\n background-color: ${$isColored\n ? `var(--redsift-color-${$theme}-components-radio-fill-default-hover)`\n : `var(--redsift-color-${$theme}-components-radio-fill-uncolored-hover)`};\n `}\n border-radius: 16px;\n }\n `\n : ''}\n }\n`;\n","import React, {\n ComponentProps,\n forwardRef,\n MutableRefObject,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport { useFocusRing } from '../../react-aria/react-aria/focus';\nimport { mdiRadioboxBlank, mdiRadioboxMarked } from '@redsift/icons';\nimport { Comp, getStylingTransientProps } from '../../types';\nimport { Icon } from '../icon';\nimport { RadioGroupContext } from '../radio-group/context';\nimport { warnIfNoAccessibleLabelFound } from '../../utils/warnIfNoAccessibleLabelFound';\nimport { RadioProps } from './types';\nimport { StyledRadio } from './styles';\nimport { useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'Radio';\nconst CLASSNAME = 'redsift-radio';\n\n/**\n * Radio allows users to select exactly one option from a set. Typically used\n * within a RadioGroup, but can work standalone for simple cases.\n *\n * Supports controlled (`isSelected`) or uncontrolled (`defaultSelected`) modes.\n *\n * **Accessibility:** Always provide a label via children or `aria-label`.\n *\n * @example\n * // Within a RadioGroup (recommended)\n * <RadioGroup label=\"Choose size\" onChange={setSize}>\n * <Radio value=\"small\">Small</Radio>\n * <Radio value=\"medium\">Medium</Radio>\n * <Radio value=\"large\">Large</Radio>\n * </RadioGroup>\n *\n * @example\n * // Standalone controlled radio\n * <Radio isSelected={isSelected} onChange={setIsSelected}>\n * Enable feature\n * </Radio>\n */\nexport const Radio: Comp<RadioProps, HTMLLabelElement> = forwardRef((props, ref) => {\n const groupState = useContext(RadioGroupContext);\n\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n let {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n autoFocus,\n children,\n className,\n defaultSelected,\n inputProps,\n inputRef,\n isColored = true,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n isSelected: propsIsSelected,\n name,\n onChange,\n theme: propsTheme,\n value,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n const { isFocusVisible, focusProps } = useFocusRing({ autoFocus });\n isDisabled = isDisabled ?? groupState?.isDisabled;\n isReadOnly = isReadOnly ?? groupState?.isReadOnly;\n\n const [isSelected, setSelected] = useState(\n Boolean(propsIsSelected ?? defaultSelected ?? Boolean(groupState?.value && groupState.value === value))\n );\n const isControlled = propsIsSelected !== null && propsIsSelected !== undefined;\n\n useEffect(() => {\n setSelected(Boolean(propsIsSelected ?? defaultSelected));\n }, [propsIsSelected, defaultSelected]);\n\n useEffect(() => {\n if (groupState) {\n setSelected(groupState.value === value);\n }\n }, [groupState?.value]);\n\n warnIfNoAccessibleLabelFound(props as ComponentProps<'label'>, [children], 'Radio');\n\n if (groupState) {\n if (propsIsSelected != null) {\n console.warn(\n 'isSelected is unsupported on individual <Radio> elements within a <RadioGroup> unless the <Radio> is controlled. Please apply this prop to the group instead.'\n );\n }\n if (defaultSelected != null) {\n console.warn(\n 'defaultSelected is unsupported on individual <Radio> elements within a <RadioGroup> unless the <Radio> is controlled. Please apply this prop to the group instead.'\n );\n }\n if (props.value == null) {\n console.warn(\n 'A <Radio> element within a <RadioGroup> requires a `value` property unless the <Radio> is controlled.'\n );\n }\n }\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (isDisabled || isReadOnly) {\n return;\n }\n\n if (groupState) {\n groupState.setValue(value as string);\n }\n\n if (isControlled) {\n onChange?.(!propsIsSelected, value, name, event, groupState!);\n } else {\n setSelected(!isSelected);\n onChange?.(!isSelected, value, name, event, groupState!);\n }\n },\n [onChange, groupState, isSelected, propsIsSelected]\n );\n\n return (\n <StyledRadio\n {...forwardedProps}\n {...transientProps}\n $isColored={isColored}\n $isDisabled={isDisabled}\n $isFocusVisible={isFocusVisible}\n $isInvalid={isInvalid || (isRequired && !(isSelected || (isControlled && propsIsSelected)))}\n $isSelected={isSelected || (isControlled && propsIsSelected)}\n $theme={theme}\n className={classNames(Radio.className, className)}\n ref={ref as MutableRefObject<HTMLLabelElement>}\n >\n {isSelected || (isControlled && propsIsSelected) ? (\n <Icon icon={mdiRadioboxMarked} />\n ) : (\n <Icon icon={mdiRadioboxBlank} />\n )}\n {children ? <span className=\"label\">{children}</span> : null}\n <input\n {...inputProps}\n {...focusProps}\n aria-checked={isSelected || (isControlled && propsIsSelected) ? 'true' : 'false'}\n aria-disabled={isDisabled}\n // role=\"radio\" supports neither aria-invalid nor aria-required: per the APG radio group pattern they belong\n // on the enclosing role=\"radiogroup\", which RadioGroup sets. A standalone Radio has no group to carry them,\n // so its input keeps them, each only when true. aria-readonly is never set: no role here supports it.\n aria-invalid={\n (!groupState && (isInvalid || (isRequired && !(isSelected || (isControlled && propsIsSelected))))) ||\n undefined\n }\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-required={(!groupState && isRequired) || undefined}\n // eslint-disable-next-line jsx-a11y/no-autofocus -- forwards the consumer's `autoFocus` prop\n autoFocus={autoFocus}\n checked={isSelected || (isControlled && propsIsSelected) ? true : false}\n disabled={isDisabled}\n name={name}\n onChange={handleChange}\n ref={inputRef as MutableRefObject<HTMLInputElement>}\n type=\"radio\"\n // React 18 renders an explicit `value={undefined}` as `value=\"\"` (it sets `defaultValue`), and that is what\n // a checked input submits. React 19 renders nothing, so pass the `''` explicitly on both.\n value={value ?? ''}\n />\n </StyledRadio>\n );\n});\nRadio.className = CLASSNAME;\nRadio.displayName = COMPONENT_NAME;\n"],"names":["StyledRadio","styled","label","baseStyling","_ref","$isDisabled","$isInvalid","$theme","css","_ref2","$isColored","$isFocusVisible","_ref3","COMPONENT_NAME","CLASSNAME","Radio","forwardRef","props","ref","_isDisabled","_isReadOnly","groupState","useContext","RadioGroupContext","transientProps","otherProps","getStylingTransientProps","ariaLabel","ariaLabelledby","autoFocus","children","className","defaultSelected","inputProps","inputRef","isColored","isDisabled","isInvalid","isReadOnly","isRequired","isSelected","propsIsSelected","name","onChange","theme","propsTheme","value","forwardedProps","_objectWithoutProperties","_excluded","useTheme","isFocusVisible","focusProps","useFocusRing","setSelected","useState","Boolean","isControlled","undefined","useEffect","warnIfNoAccessibleLabelFound","console","warn","handleChange","useCallback","event","setValue","React","createElement","_extends","$isSelected","classNames","Icon","icon","mdiRadioboxMarked","mdiRadioboxBlank","checked","disabled","type","displayName"],"mappings":"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"}
@@ -191,7 +191,12 @@ const RadioGroup = /*#__PURE__*/forwardRef((props, ref) => {
191
191
  $isReadOnly: isReadOnly,
192
192
  $orientation: orientation,
193
193
  $theme: theme,
194
- "aria-disabled": isDisabled,
194
+ "aria-disabled": isDisabled
195
+ // The group's state, which role="radiogroup" supports and role="radio" does not (APG radio group).
196
+ ,
197
+ "aria-invalid": isInvalid || isRequired && selectedValue.length === 0 || undefined,
198
+ "aria-readonly": isReadOnly || undefined,
199
+ "aria-required": isRequired || undefined,
195
200
  className: classNames(RadioGroup.className, className),
196
201
  ref: ref,
197
202
  role: "radiogroup"
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.js","sources":["../../src/components/radio-group/types.ts","../../src/components/radio-group/styles.ts","../../src/components/radio-group/RadioGroup.tsx"],"sourcesContent":["import { ComponentProps } from 'react';\nimport { StylingProps, StylingTransientProps, Theme, ValueOf } from '../../types';\n\n/**\n * Context props.\n */\nexport type RadioGroupState = {\n /** Whether the radio group is disabled or not. */\n readonly isDisabled: boolean;\n /** Whether the radio group is read only or not. */\n readonly isReadOnly: boolean;\n /** Sets the selected value. */\n setValue(value: string): void;\n /** Current selected value. */\n readonly value: string;\n};\n\n/**\n * Component orientation.\n */\nexport const RadioGroupOrientation = {\n horizontal: 'horizontal',\n vertical: 'vertical',\n} as const;\nexport type RadioGroupOrientation = ValueOf<typeof RadioGroupOrientation>;\n\n/**\n * Component props.\n */\nexport interface RadioGroupProps extends Omit<ComponentProps<'div'>, 'onChange'>, StylingProps {\n /**\n * Default selected value.\n * Used for uncontrolled version.\n */\n defaultValue?: string;\n /** Description of the radio group. */\n description?: string;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the component is invalid or not. */\n isInvalid?: boolean;\n /** Whether the component is read only or not. */\n isReadOnly?: boolean;\n /** Whether the component is required or not. */\n isRequired?: boolean;\n /** Label of the radio group. */\n label?: string;\n /** Method to handle component change. */\n onChange?(values: string): void;\n /**\n * Method to handle component change.\n * @default 'vertical'\n */\n orientation?: RadioGroupOrientation;\n /** Theme. */\n theme?: Theme;\n /**\n * Currently selected value.\n * Used for controlled version.\n */\n value?: string;\n}\n\nexport interface StyledRadioGroupProps extends ComponentProps<'div'>, StylingTransientProps {\n $isDisabled: RadioGroupProps['isDisabled'];\n $isInvalid: RadioGroupProps['isInvalid'];\n $isReadOnly: RadioGroupProps['isReadOnly'];\n $orientation: RadioGroupProps['orientation'];\n $theme: RadioGroupProps['theme'];\n}\n","import styled, { css } from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { RadioGroupOrientation, StyledRadioGroupProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledRadioGroup = styled.div<StyledRadioGroupProps>`\n ${baseStyling}\n\n display: flex;\n flex-direction: column;\n\n ${({ $orientation }) =>\n $orientation === RadioGroupOrientation.vertical\n ? `\n div.redsift-radio-group-boxes {\n display: flex;\n flex-direction: column;\n }\n `\n : `\n div.redsift-radio-group-boxes {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n }\n `}\n\n span.redsift-radio-group-label {\n font-family: var(--redsift-typography-body-font-family);\n font-weight: var(--redsift-typography-body-font-weight);\n font-size: var(--redsift-typography-body-font-size);\n line-height: var(--redsift-typography-body-line-height);\n\n ${({ $isDisabled, $isInvalid, $theme }) =>\n $isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-invalid);\n `\n : css`\n color: var(--redsift-color-${$theme}-components-radio-text-default);\n `}\n }\n\n span.redsift-radio-group-description {\n font-family: var(--redsift-typography-helper-font-family);\n font-weight: var(--redsift-typography-helper-font-weight);\n font-size: var(--redsift-typography-helper-font-size);\n line-height: var(--redsift-typography-helper-line-height);\n\n ${({ $isDisabled, $isInvalid, $theme }) =>\n $isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-invalid);\n `\n : css`\n color: var(--redsift-color-${$theme}-components-radio-text-default);\n `}\n }\n`;\n","import React, { forwardRef, RefObject, useEffect, useState } from 'react';\nimport classNames from 'classnames';\nimport { Comp, ColorPalette, getStylingTransientProps } from '../../types';\nimport { RadioGroupOrientation, RadioGroupProps } from './types';\nimport { RadioGroupContext } from './context';\nimport { StyledRadioGroup } from './styles';\nimport { ThemeProvider, useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'RadioGroup';\nconst CLASSNAME = 'redsift-radio-group';\n\n/**\n * RadioGroup manages a group of Radio components, ensuring only one can be\n * selected at a time. Provides a shared label and supports validation.\n *\n * Supports controlled (`value`) or uncontrolled (`defaultValue`) modes.\n *\n * @example\n * // Basic radio group\n * <RadioGroup label=\"Select plan\" defaultValue=\"basic\">\n * <Radio value=\"basic\">Basic - $10/mo</Radio>\n * <Radio value=\"pro\">Pro - $25/mo</Radio>\n * <Radio value=\"enterprise\">Enterprise - $99/mo</Radio>\n * </RadioGroup>\n *\n * @example\n * // Controlled with validation\n * <RadioGroup\n * label=\"Priority\"\n * value={priority}\n * onChange={setPriority}\n * isInvalid={!priority}\n * isRequired\n * >\n * <Radio value=\"low\">Low</Radio>\n * <Radio value=\"medium\">Medium</Radio>\n * <Radio value=\"high\">High</Radio>\n * </RadioGroup>\n *\n * @example\n * // Horizontal layout\n * <RadioGroup label=\"View\" orientation=\"horizontal\">\n * <Radio value=\"list\">List</Radio>\n * <Radio value=\"grid\">Grid</Radio>\n * </RadioGroup>\n */\nexport const RadioGroup: Comp<RadioGroupProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const {\n children,\n className,\n color = ColorPalette.primary,\n defaultValue,\n description,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n label,\n onChange,\n orientation = RadioGroupOrientation.vertical,\n theme: propsTheme,\n value,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n const [selectedValue, setValue] = useState<string>(value || defaultValue || '');\n useEffect(() => {\n if (value) {\n state.setValue(value);\n }\n }, [value]);\n\n const state = {\n value: selectedValue,\n isDisabled: isDisabled || false,\n isReadOnly: isReadOnly || false,\n setValue(value: string) {\n if (isReadOnly || isDisabled) {\n return;\n }\n\n const previousValue = selectedValue;\n setValue(value);\n if (value !== previousValue && onChange) {\n onChange(value);\n }\n },\n };\n\n return (\n <ThemeProvider value={{ theme }}>\n <StyledRadioGroup\n color={color}\n {...forwardedProps}\n {...transientProps}\n $isDisabled={isDisabled}\n $isInvalid={isInvalid || (isRequired && selectedValue.length === 0)}\n $isReadOnly={isReadOnly}\n $orientation={orientation}\n $theme={theme}\n aria-disabled={isDisabled}\n className={classNames(RadioGroup.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n role=\"radiogroup\"\n >\n <span className={`${RadioGroup.className}-label`}>\n {label}\n {isRequired ? ' *' : null}\n </span>\n <div className={`${RadioGroup.className}-boxes`}>\n <RadioGroupContext.Provider value={state}>{children}</RadioGroupContext.Provider>\n </div>\n <span className={`${RadioGroup.className}-description`}>{description}</span>\n </StyledRadioGroup>\n </ThemeProvider>\n );\n});\nRadioGroup.className = CLASSNAME;\nRadioGroup.displayName = COMPONENT_NAME;\n"],"names":["RadioGroupOrientation","horizontal","vertical","StyledRadioGroup","styled","div","baseStyling","_ref","$orientation","_ref2","$isDisabled","$isInvalid","$theme","css","_ref3","COMPONENT_NAME","CLASSNAME","RadioGroup","forwardRef","props","ref","transientProps","otherProps","getStylingTransientProps","children","className","color","ColorPalette","primary","defaultValue","description","isDisabled","isInvalid","isReadOnly","isRequired","label","onChange","orientation","theme","propsTheme","value","forwardedProps","_objectWithoutProperties","_excluded","useTheme","selectedValue","setValue","useState","useEffect","state","previousValue","React","createElement","ThemeProvider","_extends","length","$isReadOnly","classNames","role","RadioGroupContext","Provider","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"RadioGroup.js","sources":["../../src/components/radio-group/types.ts","../../src/components/radio-group/styles.ts","../../src/components/radio-group/RadioGroup.tsx"],"sourcesContent":["import { ComponentProps } from 'react';\nimport { StylingProps, StylingTransientProps, Theme, ValueOf } from '../../types';\n\n/**\n * Context props.\n */\nexport type RadioGroupState = {\n /** Whether the radio group is disabled or not. */\n readonly isDisabled: boolean;\n /** Whether the radio group is read only or not. */\n readonly isReadOnly: boolean;\n /** Sets the selected value. */\n setValue(value: string): void;\n /** Current selected value. */\n readonly value: string;\n};\n\n/**\n * Component orientation.\n */\nexport const RadioGroupOrientation = {\n horizontal: 'horizontal',\n vertical: 'vertical',\n} as const;\nexport type RadioGroupOrientation = ValueOf<typeof RadioGroupOrientation>;\n\n/**\n * Component props.\n */\nexport interface RadioGroupProps extends Omit<ComponentProps<'div'>, 'onChange'>, StylingProps {\n /**\n * Default selected value.\n * Used for uncontrolled version.\n */\n defaultValue?: string;\n /** Description of the radio group. */\n description?: string;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the component is invalid or not. */\n isInvalid?: boolean;\n /** Whether the component is read only or not. */\n isReadOnly?: boolean;\n /** Whether the component is required or not. */\n isRequired?: boolean;\n /** Label of the radio group. */\n label?: string;\n /** Method to handle component change. */\n onChange?(values: string): void;\n /**\n * Method to handle component change.\n * @default 'vertical'\n */\n orientation?: RadioGroupOrientation;\n /** Theme. */\n theme?: Theme;\n /**\n * Currently selected value.\n * Used for controlled version.\n */\n value?: string;\n}\n\nexport interface StyledRadioGroupProps extends ComponentProps<'div'>, StylingTransientProps {\n $isDisabled: RadioGroupProps['isDisabled'];\n $isInvalid: RadioGroupProps['isInvalid'];\n $isReadOnly: RadioGroupProps['isReadOnly'];\n $orientation: RadioGroupProps['orientation'];\n $theme: RadioGroupProps['theme'];\n}\n","import styled, { css } from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { RadioGroupOrientation, StyledRadioGroupProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledRadioGroup = styled.div<StyledRadioGroupProps>`\n ${baseStyling}\n\n display: flex;\n flex-direction: column;\n\n ${({ $orientation }) =>\n $orientation === RadioGroupOrientation.vertical\n ? `\n div.redsift-radio-group-boxes {\n display: flex;\n flex-direction: column;\n }\n `\n : `\n div.redsift-radio-group-boxes {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n }\n `}\n\n span.redsift-radio-group-label {\n font-family: var(--redsift-typography-body-font-family);\n font-weight: var(--redsift-typography-body-font-weight);\n font-size: var(--redsift-typography-body-font-size);\n line-height: var(--redsift-typography-body-line-height);\n\n ${({ $isDisabled, $isInvalid, $theme }) =>\n $isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-invalid);\n `\n : css`\n color: var(--redsift-color-${$theme}-components-radio-text-default);\n `}\n }\n\n span.redsift-radio-group-description {\n font-family: var(--redsift-typography-helper-font-family);\n font-weight: var(--redsift-typography-helper-font-weight);\n font-size: var(--redsift-typography-helper-font-size);\n line-height: var(--redsift-typography-helper-line-height);\n\n ${({ $isDisabled, $isInvalid, $theme }) =>\n $isDisabled\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-disabled);\n `\n : $isInvalid\n ? css`\n color: var(--redsift-color-${$theme}-components-radio-text-invalid);\n `\n : css`\n color: var(--redsift-color-${$theme}-components-radio-text-default);\n `}\n }\n`;\n","import React, { forwardRef, RefObject, useEffect, useState } from 'react';\nimport classNames from 'classnames';\nimport { Comp, ColorPalette, getStylingTransientProps } from '../../types';\nimport { RadioGroupOrientation, RadioGroupProps } from './types';\nimport { RadioGroupContext } from './context';\nimport { StyledRadioGroup } from './styles';\nimport { ThemeProvider, useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'RadioGroup';\nconst CLASSNAME = 'redsift-radio-group';\n\n/**\n * RadioGroup manages a group of Radio components, ensuring only one can be\n * selected at a time. Provides a shared label and supports validation.\n *\n * Supports controlled (`value`) or uncontrolled (`defaultValue`) modes.\n *\n * @example\n * // Basic radio group\n * <RadioGroup label=\"Select plan\" defaultValue=\"basic\">\n * <Radio value=\"basic\">Basic - $10/mo</Radio>\n * <Radio value=\"pro\">Pro - $25/mo</Radio>\n * <Radio value=\"enterprise\">Enterprise - $99/mo</Radio>\n * </RadioGroup>\n *\n * @example\n * // Controlled with validation\n * <RadioGroup\n * label=\"Priority\"\n * value={priority}\n * onChange={setPriority}\n * isInvalid={!priority}\n * isRequired\n * >\n * <Radio value=\"low\">Low</Radio>\n * <Radio value=\"medium\">Medium</Radio>\n * <Radio value=\"high\">High</Radio>\n * </RadioGroup>\n *\n * @example\n * // Horizontal layout\n * <RadioGroup label=\"View\" orientation=\"horizontal\">\n * <Radio value=\"list\">List</Radio>\n * <Radio value=\"grid\">Grid</Radio>\n * </RadioGroup>\n */\nexport const RadioGroup: Comp<RadioGroupProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const {\n children,\n className,\n color = ColorPalette.primary,\n defaultValue,\n description,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n label,\n onChange,\n orientation = RadioGroupOrientation.vertical,\n theme: propsTheme,\n value,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n const [selectedValue, setValue] = useState<string>(value || defaultValue || '');\n useEffect(() => {\n if (value) {\n state.setValue(value);\n }\n }, [value]);\n\n const state = {\n value: selectedValue,\n isDisabled: isDisabled || false,\n isReadOnly: isReadOnly || false,\n setValue(value: string) {\n if (isReadOnly || isDisabled) {\n return;\n }\n\n const previousValue = selectedValue;\n setValue(value);\n if (value !== previousValue && onChange) {\n onChange(value);\n }\n },\n };\n\n return (\n <ThemeProvider value={{ theme }}>\n <StyledRadioGroup\n color={color}\n {...forwardedProps}\n {...transientProps}\n $isDisabled={isDisabled}\n $isInvalid={isInvalid || (isRequired && selectedValue.length === 0)}\n $isReadOnly={isReadOnly}\n $orientation={orientation}\n $theme={theme}\n aria-disabled={isDisabled}\n // The group's state, which role=\"radiogroup\" supports and role=\"radio\" does not (APG radio group).\n aria-invalid={isInvalid || (isRequired && selectedValue.length === 0) || undefined}\n aria-readonly={isReadOnly || undefined}\n aria-required={isRequired || undefined}\n className={classNames(RadioGroup.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n role=\"radiogroup\"\n >\n <span className={`${RadioGroup.className}-label`}>\n {label}\n {isRequired ? ' *' : null}\n </span>\n <div className={`${RadioGroup.className}-boxes`}>\n <RadioGroupContext.Provider value={state}>{children}</RadioGroupContext.Provider>\n </div>\n <span className={`${RadioGroup.className}-description`}>{description}</span>\n </StyledRadioGroup>\n </ThemeProvider>\n );\n});\nRadioGroup.className = CLASSNAME;\nRadioGroup.displayName = COMPONENT_NAME;\n"],"names":["RadioGroupOrientation","horizontal","vertical","StyledRadioGroup","styled","div","baseStyling","_ref","$orientation","_ref2","$isDisabled","$isInvalid","$theme","css","_ref3","COMPONENT_NAME","CLASSNAME","RadioGroup","forwardRef","props","ref","transientProps","otherProps","getStylingTransientProps","children","className","color","ColorPalette","primary","defaultValue","description","isDisabled","isInvalid","isReadOnly","isRequired","label","onChange","orientation","theme","propsTheme","value","forwardedProps","_objectWithoutProperties","_excluded","useTheme","selectedValue","setValue","useState","useEffect","state","previousValue","React","createElement","ThemeProvider","_extends","length","$isReadOnly","undefined","classNames","role","RadioGroupContext","Provider","displayName"],"mappings":"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"}
@@ -6,6 +6,7 @@ import styled, { css } from 'styled-components';
6
6
  import { S as SideNavigationMenuBarVariant, b as SideNavigationMenuBarContext, c as SideNavigationMenuContext, d as StyledSideNavigationMenuItemIndicator, a as SideNavigationMenuItem } from './SideNavigationMenuItem.js';
7
7
  import { w as warnIfNoAccessibleLabelFound } from './warnIfNoAccessibleLabelFound.js';
8
8
  import { f as filterComponents } from './filterComponents.js';
9
+ import { I as IS_REACT_19_OR_LATER } from './reactVersion.js';
9
10
  import { u as useId } from './useId.js';
10
11
  import { A as AppContainerContext } from './context2.js';
11
12
  import { u as useTheme, a as ThemeProvider } from './useTheme.js';
@@ -246,6 +247,10 @@ const SideNavigationMenuReducer = (state, action) => {
246
247
  };
247
248
 
248
249
  const _excluded = ["aria-label", "buttonProps", "buttonRef", "children", "className", "badgeProps", "defaultExpanded", "hasBadge", "icon", "iconProps", "iconRef", "id", "isDisabled", "isExpanded", "keepBadgeVisible", "menuProps", "menuRef", "tabIndex", "theme"];
250
+
251
+ // `inert` is a boolean attribute to React 19, which drops a falsy `''`, and an unknown one to React 18,
252
+ // which renders only strings. `true` on 19 and `''` on 18 both render `inert=""`.
253
+ const INERT = IS_REACT_19_OR_LATER ? true : '';
249
254
  const COMPONENT_NAME = 'SideNavigationMenu';
250
255
  const CLASSNAME = 'redsift-side-navigation-menu';
251
256
 
@@ -286,7 +291,7 @@ const SideNavigationMenu = /*#__PURE__*/forwardRef((props, ref) => {
286
291
  const {
287
292
  'aria-label': ariaLabel,
288
293
  buttonProps = {},
289
- buttonRef = useRef(),
294
+ buttonRef = useRef(undefined),
290
295
  children,
291
296
  className,
292
297
  badgeProps,
@@ -294,13 +299,13 @@ const SideNavigationMenu = /*#__PURE__*/forwardRef((props, ref) => {
294
299
  hasBadge,
295
300
  icon,
296
301
  iconProps,
297
- iconRef = useRef(),
302
+ iconRef = useRef(undefined),
298
303
  id: propsId,
299
304
  isDisabled,
300
305
  isExpanded: propsIsExpanded,
301
306
  keepBadgeVisible,
302
307
  menuProps = {},
303
- menuRef = useRef(),
308
+ menuRef = useRef(undefined),
304
309
  // tabIndex is not used in disclosure pattern - all elements are tabbable
305
310
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
306
311
  tabIndex,
@@ -637,7 +642,7 @@ const SideNavigationMenu = /*#__PURE__*/forwardRef((props, ref) => {
637
642
  id: `${id}-list`,
638
643
  ref: menuRef
639
644
  }, menuItemListEventHandler, !isExpanded && {
640
- inert: ''
645
+ inert: INERT
641
646
  }), renderedMenuItems))))));
642
647
  });
643
648
  SideNavigationMenu.className = CLASSNAME;
@@ -1 +1 @@
1
- {"version":3,"file":"SideNavigationMenu.js","sources":["../../src/components/side-navigation-menu/types.ts","../../src/components/side-navigation-menu/styles.ts","../../src/components/side-navigation-menu/reducer.ts","../../src/components/side-navigation-menu/SideNavigationMenu.tsx"],"sourcesContent":["import { ComponentProps, MutableRefObject } from 'react';\nimport { IconProps } from '../icon';\nimport { SideNavigationMenuBarVariant } from '../side-navigation-menu-bar';\nimport { Theme } from '../../types';\nimport { BadgeProps } from '../badge';\n\n/**\n * Context props.\n */\nexport type SideNavigationMenuContextProps = {\n menuItems: Set<HTMLAnchorElement | HTMLButtonElement>;\n};\n\n/**\n * Reducer props.\n */\nexport type SideNavigationMenuReducerState = {\n isExpanded: boolean;\n currentIndex: number;\n previousIndex: number;\n};\n\nexport enum SideNavigationMenuReducerActionType {\n Expand = 'expand',\n Collapse = 'collapse',\n Move = 'move',\n}\n\nexport type SideNavigationMenuReducerAction = {\n type: SideNavigationMenuReducerActionType;\n index?: number;\n};\n\n/**\n * Component props.\n */\nexport interface SideNavigationMenuProps extends ComponentProps<'div'> {\n /** Custom props to pass to the button. */\n buttonProps?: ComponentProps<'button'>;\n /** Custom ref to pass to the button. */\n buttonRef?: MutableRefObject<HTMLButtonElement>;\n /** Custom props to pass to the Badge component, if any. */\n badgeProps?: Omit<BadgeProps, 'ref'>;\n /** Whether or not the menu contains children that have a badge. */\n hasBadge?: boolean;\n /**\n * Can be a string or an array of strings containing `d` property of the `path` SVG element.<br />\n * Can also be a ReactElement.\n */\n icon?: IconProps['icon'];\n /** Custom props to pass to the Icon component. */\n iconProps?: Omit<IconProps, 'ref' | 'icon'>;\n /** Custom ref to pass to the Icon component. */\n iconRef?: MutableRefObject<HTMLElement>;\n /**\n * Whether the menu should be expanded by default (uncontrolled).\n * Use `isExpanded` for controlled behavior.\n */\n defaultExpanded?: boolean;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the menu is expanded or not (controlled). */\n isExpanded?: boolean;\n /** By default, the badge is hidden when the menu is expanded. This prop controls this behavior. */\n keepBadgeVisible?: boolean;\n /** Custom props to pass to the menu. */\n menuProps?: ComponentProps<'ul'>;\n /** Custom ref to pass to the menu. */\n menuRef?: MutableRefObject<HTMLUListElement>;\n /** Theme. */\n theme?: Theme;\n}\n\nexport type StyledSideNavigationMenuProps = Omit<SideNavigationMenuProps, 'isDisabled' | 'isExpanded'> & {\n $isDisabled: SideNavigationMenuProps['isDisabled'];\n $isExpanded: SideNavigationMenuProps['isExpanded'];\n $numberOfChildren: number;\n $variant: SideNavigationMenuBarVariant;\n $theme: SideNavigationMenuProps['theme'];\n};\n","import styled, { css } from 'styled-components';\nimport { StyledSideNavigationMenuProps } from './types';\nimport { SideNavigationMenuBarVariant } from '../side-navigation-menu-bar';\n\n/**\n * Component style.\n */\nexport const StyledSideNavigationMenu = styled.div<StyledSideNavigationMenuProps>`\n .redsift-side-navigation-menu__current-indicator-container {\n min-width: 4px;\n }\n\n .redsift-side-navigation-menu__menu-container {\n width: 100%;\n }\n\n .redsift-badge {\n margin-left: 8px;\n }\n\n ${({ $isDisabled, $variant, $theme }) => css`\n .redsift-side-navigation-menu__menu-container > button {\n ${!$isDisabled\n ? css`\n & {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-resting);\n }\n `\n : css`\n & {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-disabled);\n }\n `}\n align-items: center;\n background-color: var(--redsift-color-${$theme}-components-side-navigation-background);\n border: none;\n border-radius: 0 4px 4px 0;\n display: flex;\n font-family: var(--redsift-typography-body-font-family);\n font-size: 14px;\n font-weight: var(--redsift-typography-body-font-weight);\n gap: 0;\n height: 40px;\n line-height: var(--redsift-typography-body-line-height);\n margin-left: -4px;\n transition: padding 300ms ease-out;\n padding: 0 16px 0 ${$variant === SideNavigationMenuBarVariant.shrinked ? '16px' : '16px'};\n text-decoration: none;\n text-transform: uppercase;\n width: calc(100% + ${$variant === SideNavigationMenuBarVariant.shrinked ? '0px' : '4px'});\n\n &:hover,\n &:focus-visible {\n outline: none;\n\n ${!$isDisabled\n ? css`\n background-color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-background-hover);\n &,\n .redsift-icon.first,\n .redsift-side-navigation-menu__expand-icon {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-hover);\n }\n cursor: pointer;\n `\n : ''}\n }\n\n &:active {\n ${!$isDisabled\n ? css`\n background-color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-background-active);\n `\n : ''}\n }\n\n @media (prefers-reduced-motion: no-preference) {\n &:focus-visible {\n > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {\n outline: 2px solid var(--redsift-color-primary-n);\n transition: outline-offset 75ms ease-out;\n }\n\n &:not(:active):focus-visible {\n > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {\n transition-duration: 0.25s;\n }\n }\n }\n\n &:not(:active):focus-visible {\n > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {\n outline-offset: 0.25rem;\n }\n }\n }\n }\n\n .content {\n transition: opacity 300ms ease-out;\n opacity: ${$variant === SideNavigationMenuBarVariant.shrinked ? '0' : '1'};\n overflow: hidden;\n white-space: nowrap;\n }\n `}\n\n .first {\n box-sizing: unset;\n margin-right: 8px;\n }\n\n .redsift-side-navigation-menu__expand-icon {\n transition: transform 300ms ease-out;\n ${({ $isDisabled, $theme }) =>\n !$isDisabled\n ? css`\n &,\n .redsift-icon.first {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-resting);\n }\n `\n : css`\n &,\n .redsift-icon.first {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-disabled);\n }\n `}\n ${({ $isExpanded }) =>\n !$isExpanded\n ? css`\n transform: rotate(0);\n `\n : css`\n transform: rotate(-180deg);\n `}\n margin-left: auto;\n\n transition: opacity 300ms ease-out;\n opacity: ${({ $variant }) => ($variant === SideNavigationMenuBarVariant.standard ? '1' : '0')};\n }\n\n [dir='rtl'] & {\n .redsift-side-navigation-menu__expand-icon {\n margin-left: unset;\n margin-right: auto;\n }\n }\n\n /**\n * Display children or not\n */\n\n .redsift-side-navigation-menu__menu-container > ul {\n list-style: none;\n margin: unset;\n padding: unset;\n margin-left: -4px;\n\n ${({ $variant }) => css`\n width: calc(100% + ${$variant === SideNavigationMenuBarVariant.shrinked ? '0px' : '4px'});\n `}\n margin-bottom: 4px;\n max-width: 241px;\n transition: height 300ms ease-out;\n overflow: hidden;\n ${({ $isExpanded, $numberOfChildren }) =>\n $isExpanded\n ? css`\n height: ${$numberOfChildren * 32}px;\n `\n : css`\n height: 0;\n `};\n }\n`;\n","import {\n SideNavigationMenuReducerState,\n SideNavigationMenuReducerAction,\n SideNavigationMenuReducerActionType,\n} from './types';\n\nexport const SideNavigationMenuReducer = (\n state: SideNavigationMenuReducerState,\n action: SideNavigationMenuReducerAction\n): SideNavigationMenuReducerState => {\n switch (action.type) {\n case SideNavigationMenuReducerActionType.Expand:\n return { ...state, isExpanded: true };\n case SideNavigationMenuReducerActionType.Collapse:\n return {\n isExpanded: false,\n currentIndex: null!,\n previousIndex: null!,\n };\n case SideNavigationMenuReducerActionType.Move:\n return {\n ...state,\n isExpanded: true,\n currentIndex: action.index!,\n previousIndex: state.currentIndex,\n };\n }\n};\n","import React, {\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n} from 'react';\nimport classNames from 'classnames';\nimport { mdiChevronDown } from '@redsift/icons';\nimport { Comp } from '../../types';\nimport { SideNavigationMenuItem } from '../side-navigation-menu-item';\nimport { Icon, IconSize } from '../icon';\nimport { Badge } from '../badge';\nimport { StyledSideNavigationMenu } from './styles';\nimport { SideNavigationMenuContextProps, SideNavigationMenuProps, SideNavigationMenuReducerActionType } from './types';\nimport { SideNavigationMenuContext } from './context';\nimport { SideNavigationMenuReducer } from './reducer';\nimport { SideNavigationMenuBarContext } from '../side-navigation-menu-bar/context';\nimport { warnIfNoAccessibleLabelFound } from '../../utils/warnIfNoAccessibleLabelFound';\nimport { filterComponents } from '../../utils/filterComponents';\nimport { Flexbox } from '../flexbox';\nimport { StyledSideNavigationMenuItemIndicator } from '../side-navigation-menu-item/styles';\nimport { AppContainerContext } from '../app-container';\nimport { AppSidePanelVariant } from '../app-side-panel';\nimport { ThemeProvider, useTheme } from '../theme';\nimport { useId } from '../../utils';\n\nconst COMPONENT_NAME = 'SideNavigationMenu';\nconst CLASSNAME = 'redsift-side-navigation-menu';\n\n/**\n * SideNavigationMenu provides hierarchical navigation within the AppSidePanel.\n * Supports nested menus, icons, badges, and keyboard navigation.\n *\n * Can be populated manually with SideNavigationMenu.Item children or via\n * the `useAppSidePanel` hook for easier configuration.\n *\n * @example\n * // Basic navigation menu\n * <SideNavigationMenu aria-label=\"Main navigation\">\n * <SideNavigationMenu.Item href=\"/dashboard\" icon={mdiHome}>\n * Dashboard\n * </SideNavigationMenu.Item>\n * <SideNavigationMenu.Item href=\"/reports\" icon={mdiChartBar}>\n * Reports\n * </SideNavigationMenu.Item>\n * </SideNavigationMenu>\n *\n * @example\n * // With nested submenu\n * <SideNavigationMenu aria-label=\"Settings\">\n * <SideNavigationMenu icon={mdiCog} title=\"Settings\">\n * <SideNavigationMenu.Item href=\"/settings/profile\">Profile</SideNavigationMenu.Item>\n * <SideNavigationMenu.Item href=\"/settings/security\">Security</SideNavigationMenu.Item>\n * </SideNavigationMenu>\n * </SideNavigationMenu>\n *\n * @example\n * // Using the hook\n * const menuProps = useAppSidePanel({ items: menuItems, isActive });\n * <SideNavigationMenu {...menuProps} />\n */\nexport const SideNavigationMenu: Comp<SideNavigationMenuProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n 'aria-label': ariaLabel,\n buttonProps = {},\n buttonRef = useRef<HTMLButtonElement>() as MutableRefObject<HTMLButtonElement>,\n children,\n className,\n badgeProps,\n defaultExpanded,\n hasBadge,\n icon,\n iconProps,\n iconRef = useRef<HTMLElement>(),\n id: propsId,\n isDisabled,\n isExpanded: propsIsExpanded,\n keepBadgeVisible,\n menuProps = {},\n menuRef = useRef<HTMLUListElement>(),\n // tabIndex is not used in disclosure pattern - all elements are tabbable\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tabIndex,\n theme: propsTheme,\n ...forwardedProps\n } = props;\n const [_id] = useId();\n const id = propsId ?? _id;\n\n warnIfNoAccessibleLabelFound(props, undefined, 'SideNavigationMenu');\n\n const appContainerState = useContext(AppContainerContext);\n const sideNavigationMenuBarContext = useContext(SideNavigationMenuBarContext);\n const theme = useTheme(propsTheme);\n const currentPosition = useRef(-1);\n const {\n canHaveMultipleMenuOpenAtOnce,\n defaultExpandAll,\n storageKey: menuBarStorageKey,\n } = sideNavigationMenuBarContext || {};\n\n useEffect(() => {\n currentPosition.current = -1;\n });\n\n /**\n * Create an array containing only valid children which can only be SideNavigationMenuItem.\n * This prevent the navigation menubar to have more than two levels.\n */\n const childArray = filterComponents(SideNavigationMenuItem)(children);\n const renderedMenuItems = childArray.map((child, index) => {\n if (child.props.isCurrent) {\n currentPosition.current = index;\n }\n return (\n <li key={child.key ?? index}>\n {React.cloneElement(child, {\n isDisabled: child.props.isDisabled || isDisabled || undefined,\n isSecondLevel: true,\n key: child.key ?? index,\n })}\n </li>\n );\n });\n\n const menuItems = useRef<Set<HTMLAnchorElement | HTMLButtonElement>>(new Set()).current;\n\n // Build a per-menu localStorage key from the menuBar storageKey and aria-label\n const menuLocalStorageKey = menuBarStorageKey && ariaLabel ? `${menuBarStorageKey}:${ariaLabel}` : undefined;\n\n // Priority: controlled prop > individual default > context default\n // localStorage is read post-mount to avoid hydration mismatches\n const initialExpanded = propsIsExpanded ?? defaultExpanded ?? defaultExpandAll ?? false;\n const [state, dispatch] = useReducer(SideNavigationMenuReducer, {\n currentIndex: null!,\n isExpanded: Boolean(initialExpanded),\n previousIndex: null!,\n });\n const { isExpanded, currentIndex, previousIndex } = state;\n\n // Restore expand/collapse state from localStorage after hydration\n useEffect(() => {\n if (menuLocalStorageKey && propsIsExpanded === undefined && typeof window !== 'undefined') {\n try {\n const item = window.localStorage.getItem(menuLocalStorageKey);\n if (item !== null) {\n const persisted = JSON.parse(item) as boolean;\n if (persisted && !initialExpanded) {\n dispatch({ type: SideNavigationMenuReducerActionType.Expand });\n } else if (!persisted && initialExpanded) {\n dispatch({ type: SideNavigationMenuReducerActionType.Collapse });\n }\n }\n } catch {\n // Silently fail\n }\n }\n }, []);\n\n useEffect(() => {\n if (propsIsExpanded !== undefined) {\n if (propsIsExpanded) {\n dispatch({ type: SideNavigationMenuReducerActionType.Expand });\n } else if (!propsIsExpanded && !canHaveMultipleMenuOpenAtOnce) {\n dispatch({ type: SideNavigationMenuReducerActionType.Collapse });\n }\n }\n }, [propsIsExpanded, canHaveMultipleMenuOpenAtOnce]);\n\n const first = useCallback(() => dispatch({ type: SideNavigationMenuReducerActionType.Move, index: 0 }), []);\n\n const last = useCallback(\n () =>\n dispatch({\n type: SideNavigationMenuReducerActionType.Move,\n index: menuItems.size - 1,\n }),\n [menuItems.size]\n );\n\n const move = useCallback((index: number) => dispatch({ type: SideNavigationMenuReducerActionType.Move, index }), []);\n\n const open = useCallback(() => {\n sideNavigationMenuBarContext?.setCurrentOpenMenuId?.(id);\n dispatch({ type: SideNavigationMenuReducerActionType.Expand });\n appContainerState?.expandSidePanel();\n // Persist user-initiated expand\n if (menuLocalStorageKey) {\n try {\n window.localStorage.setItem(menuLocalStorageKey, JSON.stringify(true));\n } catch {\n // Silently fail\n }\n }\n }, [menuLocalStorageKey]);\n\n const close = useCallback(\n (focusButton?: boolean) => {\n if (isExpanded) {\n if (focusButton) {\n buttonRef.current.focus();\n }\n\n dispatch({ type: SideNavigationMenuReducerActionType.Collapse });\n }\n },\n [isExpanded]\n );\n\n useEffect(() => {\n if (sideNavigationMenuBarContext?.currentOpenMenuId && sideNavigationMenuBarContext.currentOpenMenuId !== id) {\n close();\n }\n }, [sideNavigationMenuBarContext?.currentOpenMenuId]);\n\n const previous = () => {\n const items = Array.from(menuItems);\n const activeIndex = items.indexOf(document.activeElement as HTMLAnchorElement | HTMLButtonElement);\n // Do not wrap - stop at first item per W3C disclosure pattern\n if (activeIndex <= 0) {\n return;\n }\n move(activeIndex - 1);\n };\n\n const next = () => {\n const items = Array.from(menuItems);\n const activeIndex = items.indexOf(document.activeElement as HTMLAnchorElement | HTMLButtonElement);\n // Do not wrap - stop at last item per W3C disclosure pattern\n if (activeIndex >= items.length - 1) {\n return;\n }\n move(activeIndex + 1);\n };\n\n useEffect(() => {\n if (appContainerState && appContainerState?.sidePanelVariant === AppSidePanelVariant.shrinked && isExpanded) {\n close();\n } else if (\n appContainerState &&\n appContainerState?.sidePanelVariant === AppSidePanelVariant.standard &&\n !isExpanded &&\n menuLocalStorageKey\n ) {\n // Restore menu state from localStorage when the side panel expands back\n try {\n const item = window.localStorage.getItem(menuLocalStorageKey);\n if (item !== null && JSON.parse(item) === true) {\n dispatch({ type: SideNavigationMenuReducerActionType.Expand });\n }\n } catch {\n // Silently fail\n }\n }\n }, [appContainerState?.sidePanelVariant]);\n\n const value = useMemo<SideNavigationMenuContextProps>(() => ({ menuItems }), [menuItems]);\n\n useEffect(() => {\n const items = Array.from(menuItems);\n\n if (currentIndex !== previousIndex) {\n const currentNode = items[currentIndex] as HTMLElement;\n currentNode?.focus();\n }\n }, [menuItems, currentIndex, previousIndex]);\n\n const keyDownOnButton = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n const currentNode = e.target as HTMLButtonElement;\n\n switch (e.code) {\n case 'Enter':\n case 'Space':\n e.preventDefault();\n e.stopPropagation();\n currentNode.click();\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (isExpanded) {\n e.preventDefault();\n e.stopPropagation();\n first();\n }\n break;\n default:\n break;\n }\n };\n\n const buttonEventHandler = {\n onClick: (event: MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n\n buttonProps.onClick?.(event);\n event.stopPropagation();\n if (isExpanded) {\n close();\n // Persist user-initiated collapse\n if (menuLocalStorageKey) {\n try {\n window.localStorage.setItem(menuLocalStorageKey, JSON.stringify(false));\n } catch {\n // Silently fail\n }\n }\n } else {\n open();\n }\n },\n onKeyDown: (event: KeyboardEvent<HTMLButtonElement>) => {\n buttonProps.onKeyDown?.(event);\n keyDownOnButton(event);\n },\n };\n\n const keyDownOnMenuItemList = (e: KeyboardEvent<HTMLUListElement>) => {\n switch (e.code) {\n case 'ArrowUp':\n case 'ArrowLeft':\n e.stopPropagation();\n e.preventDefault();\n previous();\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n e.stopPropagation();\n e.preventDefault();\n next();\n break;\n case 'Home':\n e.stopPropagation();\n e.preventDefault();\n first();\n break;\n case 'End':\n e.stopPropagation();\n e.preventDefault();\n last();\n break;\n case 'Escape':\n e.stopPropagation();\n e.preventDefault();\n close(true);\n break;\n default:\n break;\n }\n };\n\n const menuItemListEventHandler = {\n onKeyDown: (event: KeyboardEvent<HTMLUListElement>) => {\n menuProps.onKeyDown?.(event);\n keyDownOnMenuItemList(event);\n },\n onClick: (event: MouseEvent<HTMLUListElement>) => {\n if (isDisabled) {\n return;\n }\n menuProps.onClick?.(event);\n },\n };\n\n const sideNavigationVariant = sideNavigationMenuBarContext?.sideNavigationMenuBarVariant;\n\n return (\n <ThemeProvider value={{ theme }}>\n <StyledSideNavigationMenu\n {...forwardedProps}\n $isDisabled={isDisabled}\n $isExpanded={isExpanded}\n $numberOfChildren={renderedMenuItems.length}\n $theme={theme}\n $variant={sideNavigationVariant}\n className={classNames(SideNavigationMenu.className, className)}\n id={id}\n ref={ref as MutableRefObject<HTMLDivElement>}\n tabIndex={undefined}\n >\n <SideNavigationMenuContext.Provider value={value}>\n <Flexbox flexDirection=\"row\" gap=\"0px\">\n <div className={`${SideNavigationMenu.className}__current-indicator-container`}>\n {currentPosition.current !== -1 ? (\n <StyledSideNavigationMenuItemIndicator\n $height={isExpanded ? 32 : 40}\n $theme={theme}\n style={{\n position: 'relative',\n top: isExpanded ? `${40 + currentPosition.current * 32}px` : 0,\n transition: 'top 300ms ease-out',\n }}\n />\n ) : null}\n </div>\n <div className={`${SideNavigationMenu.className}__menu-container`}>\n <button\n {...buttonProps}\n aria-controls={`${id}-list`}\n aria-disabled={isDisabled}\n aria-expanded={isExpanded ? 'true' : 'false'}\n ref={buttonRef as MutableRefObject<HTMLButtonElement>}\n tabIndex={0}\n type=\"button\"\n {...buttonEventHandler}\n >\n <Icon\n color={`var(--redsift-side-navigation-color-menu-item-text-${isDisabled ? 'disabled' : 'resting'})`}\n {...iconProps}\n icon={icon!}\n ref={iconRef as MutableRefObject<HTMLElement>}\n className={classNames(iconProps?.className, 'first')}\n size={IconSize.medium}\n />\n <span className=\"content\">{ariaLabel}</span>\n {hasBadge && (!isExpanded || keepBadgeVisible) ? <Badge color=\"error\" {...badgeProps} /> : null}\n <Icon\n icon={mdiChevronDown}\n className={`${SideNavigationMenu.className}__expand-icon`}\n size={IconSize.medium}\n />\n </button>\n <ul\n {...menuProps}\n aria-label={ariaLabel}\n id={`${id}-list`}\n ref={menuRef as MutableRefObject<HTMLUListElement>}\n {...menuItemListEventHandler}\n // inert removes collapsed content from tab order per W3C disclosure pattern\n {...(!isExpanded && { inert: '' as unknown as undefined })}\n >\n {renderedMenuItems}\n </ul>\n </div>\n </Flexbox>\n </SideNavigationMenuContext.Provider>\n </StyledSideNavigationMenu>\n </ThemeProvider>\n );\n});\nSideNavigationMenu.className = CLASSNAME;\nSideNavigationMenu.displayName = COMPONENT_NAME;\n"],"names":["SideNavigationMenuReducerActionType","StyledSideNavigationMenu","styled","div","_ref","$isDisabled","$variant","$theme","css","SideNavigationMenuBarVariant","shrinked","_ref2","_ref3","$isExpanded","_ref4","standard","_ref5","_ref6","$numberOfChildren","SideNavigationMenuReducer","state","action","type","Expand","_objectSpread","isExpanded","Collapse","currentIndex","previousIndex","Move","index","COMPONENT_NAME","CLASSNAME","SideNavigationMenu","forwardRef","props","ref","ariaLabel","buttonProps","buttonRef","useRef","children","className","badgeProps","defaultExpanded","hasBadge","icon","iconProps","iconRef","id","propsId","isDisabled","propsIsExpanded","keepBadgeVisible","menuProps","menuRef","tabIndex","theme","propsTheme","forwardedProps","_objectWithoutProperties","_excluded","_id","useId","warnIfNoAccessibleLabelFound","undefined","appContainerState","useContext","AppContainerContext","sideNavigationMenuBarContext","SideNavigationMenuBarContext","useTheme","currentPosition","canHaveMultipleMenuOpenAtOnce","defaultExpandAll","storageKey","menuBarStorageKey","useEffect","current","childArray","filterComponents","SideNavigationMenuItem","renderedMenuItems","map","child","_child$key","_child$key2","isCurrent","React","createElement","key","cloneElement","isSecondLevel","menuItems","Set","menuLocalStorageKey","initialExpanded","dispatch","useReducer","Boolean","window","item","localStorage","getItem","persisted","JSON","parse","first","useCallback","last","size","move","open","_sideNavigationMenuBa","setCurrentOpenMenuId","call","expandSidePanel","setItem","stringify","close","focusButton","focus","currentOpenMenuId","previous","items","Array","from","activeIndex","indexOf","document","activeElement","next","length","sidePanelVariant","AppSidePanelVariant","value","useMemo","currentNode","keyDownOnButton","e","target","code","preventDefault","stopPropagation","click","buttonEventHandler","onClick","event","_buttonProps$onClick","onKeyDown","_buttonProps$onKeyDow","keyDownOnMenuItemList","menuItemListEventHandler","_menuProps$onKeyDown","_menuProps$onClick","sideNavigationVariant","sideNavigationMenuBarVariant","ThemeProvider","_extends","classNames","SideNavigationMenuContext","Provider","Flexbox","flexDirection","gap","StyledSideNavigationMenuItemIndicator","$height","style","position","top","transition","Icon","color","IconSize","medium","Badge","mdiChevronDown","inert","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"SideNavigationMenu.js","sources":["../../src/components/side-navigation-menu/types.ts","../../src/components/side-navigation-menu/styles.ts","../../src/components/side-navigation-menu/reducer.ts","../../src/components/side-navigation-menu/SideNavigationMenu.tsx"],"sourcesContent":["import { ComponentProps, RefObject } from 'react';\nimport { IconProps } from '../icon';\nimport { SideNavigationMenuBarVariant } from '../side-navigation-menu-bar';\nimport { Theme } from '../../types';\nimport { BadgeProps } from '../badge';\n\n/**\n * Context props.\n */\nexport type SideNavigationMenuContextProps = {\n menuItems: Set<HTMLAnchorElement | HTMLButtonElement>;\n};\n\n/**\n * Reducer props.\n */\nexport type SideNavigationMenuReducerState = {\n isExpanded: boolean;\n currentIndex: number;\n previousIndex: number;\n};\n\nexport enum SideNavigationMenuReducerActionType {\n Expand = 'expand',\n Collapse = 'collapse',\n Move = 'move',\n}\n\nexport type SideNavigationMenuReducerAction = {\n type: SideNavigationMenuReducerActionType;\n index?: number;\n};\n\n/**\n * Component props.\n */\nexport interface SideNavigationMenuProps extends ComponentProps<'div'> {\n /** Custom props to pass to the button. */\n buttonProps?: ComponentProps<'button'>;\n /** Custom ref to pass to the button. */\n buttonRef?: RefObject<HTMLButtonElement | null>;\n /** Custom props to pass to the Badge component, if any. */\n badgeProps?: Omit<BadgeProps, 'ref'>;\n /** Whether or not the menu contains children that have a badge. */\n hasBadge?: boolean;\n /**\n * Can be a string or an array of strings containing `d` property of the `path` SVG element.<br />\n * Can also be a ReactElement.\n */\n icon?: IconProps['icon'];\n /** Custom props to pass to the Icon component. */\n iconProps?: Omit<IconProps, 'ref' | 'icon'>;\n /** Custom ref to pass to the Icon component. */\n iconRef?: RefObject<HTMLElement | null>;\n /**\n * Whether the menu should be expanded by default (uncontrolled).\n * Use `isExpanded` for controlled behavior.\n */\n defaultExpanded?: boolean;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the menu is expanded or not (controlled). */\n isExpanded?: boolean;\n /** By default, the badge is hidden when the menu is expanded. This prop controls this behavior. */\n keepBadgeVisible?: boolean;\n /** Custom props to pass to the menu. */\n menuProps?: ComponentProps<'ul'>;\n /** Custom ref to pass to the menu. */\n menuRef?: RefObject<HTMLUListElement | null>;\n /** Theme. */\n theme?: Theme;\n}\n\nexport type StyledSideNavigationMenuProps = Omit<SideNavigationMenuProps, 'isDisabled' | 'isExpanded'> & {\n $isDisabled: SideNavigationMenuProps['isDisabled'];\n $isExpanded: SideNavigationMenuProps['isExpanded'];\n $numberOfChildren: number;\n $variant: SideNavigationMenuBarVariant;\n $theme: SideNavigationMenuProps['theme'];\n};\n","import styled, { css } from 'styled-components';\nimport { StyledSideNavigationMenuProps } from './types';\nimport { SideNavigationMenuBarVariant } from '../side-navigation-menu-bar';\n\n/**\n * Component style.\n */\nexport const StyledSideNavigationMenu = styled.div<StyledSideNavigationMenuProps>`\n .redsift-side-navigation-menu__current-indicator-container {\n min-width: 4px;\n }\n\n .redsift-side-navigation-menu__menu-container {\n width: 100%;\n }\n\n .redsift-badge {\n margin-left: 8px;\n }\n\n ${({ $isDisabled, $variant, $theme }) => css`\n .redsift-side-navigation-menu__menu-container > button {\n ${!$isDisabled\n ? css`\n & {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-resting);\n }\n `\n : css`\n & {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-disabled);\n }\n `}\n align-items: center;\n background-color: var(--redsift-color-${$theme}-components-side-navigation-background);\n border: none;\n border-radius: 0 4px 4px 0;\n display: flex;\n font-family: var(--redsift-typography-body-font-family);\n font-size: 14px;\n font-weight: var(--redsift-typography-body-font-weight);\n gap: 0;\n height: 40px;\n line-height: var(--redsift-typography-body-line-height);\n margin-left: -4px;\n transition: padding 300ms ease-out;\n padding: 0 16px 0 ${$variant === SideNavigationMenuBarVariant.shrinked ? '16px' : '16px'};\n text-decoration: none;\n text-transform: uppercase;\n width: calc(100% + ${$variant === SideNavigationMenuBarVariant.shrinked ? '0px' : '4px'});\n\n &:hover,\n &:focus-visible {\n outline: none;\n\n ${!$isDisabled\n ? css`\n background-color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-background-hover);\n &,\n .redsift-icon.first,\n .redsift-side-navigation-menu__expand-icon {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-hover);\n }\n cursor: pointer;\n `\n : ''}\n }\n\n &:active {\n ${!$isDisabled\n ? css`\n background-color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-background-active);\n `\n : ''}\n }\n\n @media (prefers-reduced-motion: no-preference) {\n &:focus-visible {\n > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {\n outline: 2px solid var(--redsift-color-primary-n);\n transition: outline-offset 75ms ease-out;\n }\n\n &:not(:active):focus-visible {\n > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {\n transition-duration: 0.25s;\n }\n }\n }\n\n &:not(:active):focus-visible {\n > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {\n outline-offset: 0.25rem;\n }\n }\n }\n }\n\n .content {\n transition: opacity 300ms ease-out;\n opacity: ${$variant === SideNavigationMenuBarVariant.shrinked ? '0' : '1'};\n overflow: hidden;\n white-space: nowrap;\n }\n `}\n\n .first {\n box-sizing: unset;\n margin-right: 8px;\n }\n\n .redsift-side-navigation-menu__expand-icon {\n transition: transform 300ms ease-out;\n ${({ $isDisabled, $theme }) =>\n !$isDisabled\n ? css`\n &,\n .redsift-icon.first {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-resting);\n }\n `\n : css`\n &,\n .redsift-icon.first {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-disabled);\n }\n `}\n ${({ $isExpanded }) =>\n !$isExpanded\n ? css`\n transform: rotate(0);\n `\n : css`\n transform: rotate(-180deg);\n `}\n margin-left: auto;\n\n transition: opacity 300ms ease-out;\n opacity: ${({ $variant }) => ($variant === SideNavigationMenuBarVariant.standard ? '1' : '0')};\n }\n\n [dir='rtl'] & {\n .redsift-side-navigation-menu__expand-icon {\n margin-left: unset;\n margin-right: auto;\n }\n }\n\n /**\n * Display children or not\n */\n\n .redsift-side-navigation-menu__menu-container > ul {\n list-style: none;\n margin: unset;\n padding: unset;\n margin-left: -4px;\n\n ${({ $variant }) => css`\n width: calc(100% + ${$variant === SideNavigationMenuBarVariant.shrinked ? '0px' : '4px'});\n `}\n margin-bottom: 4px;\n max-width: 241px;\n transition: height 300ms ease-out;\n overflow: hidden;\n ${({ $isExpanded, $numberOfChildren }) =>\n $isExpanded\n ? css`\n height: ${$numberOfChildren * 32}px;\n `\n : css`\n height: 0;\n `};\n }\n`;\n","import {\n SideNavigationMenuReducerState,\n SideNavigationMenuReducerAction,\n SideNavigationMenuReducerActionType,\n} from './types';\n\nexport const SideNavigationMenuReducer = (\n state: SideNavigationMenuReducerState,\n action: SideNavigationMenuReducerAction\n): SideNavigationMenuReducerState => {\n switch (action.type) {\n case SideNavigationMenuReducerActionType.Expand:\n return { ...state, isExpanded: true };\n case SideNavigationMenuReducerActionType.Collapse:\n return {\n isExpanded: false,\n currentIndex: null!,\n previousIndex: null!,\n };\n case SideNavigationMenuReducerActionType.Move:\n return {\n ...state,\n isExpanded: true,\n currentIndex: action.index!,\n previousIndex: state.currentIndex,\n };\n }\n};\n","import React, {\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n} from 'react';\nimport classNames from 'classnames';\nimport { mdiChevronDown } from '@redsift/icons';\nimport { Comp } from '../../types';\nimport { SideNavigationMenuItem } from '../side-navigation-menu-item';\nimport { Icon, IconSize } from '../icon';\nimport { Badge } from '../badge';\nimport { StyledSideNavigationMenu } from './styles';\nimport { SideNavigationMenuContextProps, SideNavigationMenuProps, SideNavigationMenuReducerActionType } from './types';\nimport { SideNavigationMenuContext } from './context';\nimport { SideNavigationMenuReducer } from './reducer';\nimport { SideNavigationMenuBarContext } from '../side-navigation-menu-bar/context';\nimport { warnIfNoAccessibleLabelFound } from '../../utils/warnIfNoAccessibleLabelFound';\nimport { filterComponents } from '../../utils/filterComponents';\nimport { Flexbox } from '../flexbox';\nimport { StyledSideNavigationMenuItemIndicator } from '../side-navigation-menu-item/styles';\nimport { AppContainerContext } from '../app-container';\nimport { AppSidePanelVariant } from '../app-side-panel';\nimport { ThemeProvider, useTheme } from '../theme';\nimport { useId } from '../../utils';\nimport { IS_REACT_19_OR_LATER } from '../../utils/reactVersion';\n\n// `inert` is a boolean attribute to React 19, which drops a falsy `''`, and an unknown one to React 18,\n// which renders only strings. `true` on 19 and `''` on 18 both render `inert=\"\"`.\nconst INERT = (IS_REACT_19_OR_LATER ? true : '') as unknown as undefined;\n\nconst COMPONENT_NAME = 'SideNavigationMenu';\nconst CLASSNAME = 'redsift-side-navigation-menu';\n\n/**\n * SideNavigationMenu provides hierarchical navigation within the AppSidePanel.\n * Supports nested menus, icons, badges, and keyboard navigation.\n *\n * Can be populated manually with SideNavigationMenu.Item children or via\n * the `useAppSidePanel` hook for easier configuration.\n *\n * @example\n * // Basic navigation menu\n * <SideNavigationMenu aria-label=\"Main navigation\">\n * <SideNavigationMenu.Item href=\"/dashboard\" icon={mdiHome}>\n * Dashboard\n * </SideNavigationMenu.Item>\n * <SideNavigationMenu.Item href=\"/reports\" icon={mdiChartBar}>\n * Reports\n * </SideNavigationMenu.Item>\n * </SideNavigationMenu>\n *\n * @example\n * // With nested submenu\n * <SideNavigationMenu aria-label=\"Settings\">\n * <SideNavigationMenu icon={mdiCog} title=\"Settings\">\n * <SideNavigationMenu.Item href=\"/settings/profile\">Profile</SideNavigationMenu.Item>\n * <SideNavigationMenu.Item href=\"/settings/security\">Security</SideNavigationMenu.Item>\n * </SideNavigationMenu>\n * </SideNavigationMenu>\n *\n * @example\n * // Using the hook\n * const menuProps = useAppSidePanel({ items: menuItems, isActive });\n * <SideNavigationMenu {...menuProps} />\n */\nexport const SideNavigationMenu: Comp<SideNavigationMenuProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n 'aria-label': ariaLabel,\n buttonProps = {},\n buttonRef = useRef<HTMLButtonElement>(undefined) as MutableRefObject<HTMLButtonElement>,\n children,\n className,\n badgeProps,\n defaultExpanded,\n hasBadge,\n icon,\n iconProps,\n iconRef = useRef<HTMLElement>(undefined),\n id: propsId,\n isDisabled,\n isExpanded: propsIsExpanded,\n keepBadgeVisible,\n menuProps = {},\n menuRef = useRef<HTMLUListElement>(undefined),\n // tabIndex is not used in disclosure pattern - all elements are tabbable\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tabIndex,\n theme: propsTheme,\n ...forwardedProps\n } = props;\n const [_id] = useId();\n const id = propsId ?? _id;\n\n warnIfNoAccessibleLabelFound(props, undefined, 'SideNavigationMenu');\n\n const appContainerState = useContext(AppContainerContext);\n const sideNavigationMenuBarContext = useContext(SideNavigationMenuBarContext);\n const theme = useTheme(propsTheme);\n const currentPosition = useRef(-1);\n const {\n canHaveMultipleMenuOpenAtOnce,\n defaultExpandAll,\n storageKey: menuBarStorageKey,\n } = sideNavigationMenuBarContext || {};\n\n useEffect(() => {\n currentPosition.current = -1;\n });\n\n /**\n * Create an array containing only valid children which can only be SideNavigationMenuItem.\n * This prevent the navigation menubar to have more than two levels.\n */\n const childArray = filterComponents(SideNavigationMenuItem)(children);\n const renderedMenuItems = childArray.map((child, index) => {\n if (child.props.isCurrent) {\n currentPosition.current = index;\n }\n return (\n <li key={child.key ?? index}>\n {React.cloneElement(child, {\n isDisabled: child.props.isDisabled || isDisabled || undefined,\n isSecondLevel: true,\n key: child.key ?? index,\n })}\n </li>\n );\n });\n\n const menuItems = useRef<Set<HTMLAnchorElement | HTMLButtonElement>>(new Set()).current;\n\n // Build a per-menu localStorage key from the menuBar storageKey and aria-label\n const menuLocalStorageKey = menuBarStorageKey && ariaLabel ? `${menuBarStorageKey}:${ariaLabel}` : undefined;\n\n // Priority: controlled prop > individual default > context default\n // localStorage is read post-mount to avoid hydration mismatches\n const initialExpanded = propsIsExpanded ?? defaultExpanded ?? defaultExpandAll ?? false;\n const [state, dispatch] = useReducer(SideNavigationMenuReducer, {\n currentIndex: null!,\n isExpanded: Boolean(initialExpanded),\n previousIndex: null!,\n });\n const { isExpanded, currentIndex, previousIndex } = state;\n\n // Restore expand/collapse state from localStorage after hydration\n useEffect(() => {\n if (menuLocalStorageKey && propsIsExpanded === undefined && typeof window !== 'undefined') {\n try {\n const item = window.localStorage.getItem(menuLocalStorageKey);\n if (item !== null) {\n const persisted = JSON.parse(item) as boolean;\n if (persisted && !initialExpanded) {\n dispatch({ type: SideNavigationMenuReducerActionType.Expand });\n } else if (!persisted && initialExpanded) {\n dispatch({ type: SideNavigationMenuReducerActionType.Collapse });\n }\n }\n } catch {\n // Silently fail\n }\n }\n }, []);\n\n useEffect(() => {\n if (propsIsExpanded !== undefined) {\n if (propsIsExpanded) {\n dispatch({ type: SideNavigationMenuReducerActionType.Expand });\n } else if (!propsIsExpanded && !canHaveMultipleMenuOpenAtOnce) {\n dispatch({ type: SideNavigationMenuReducerActionType.Collapse });\n }\n }\n }, [propsIsExpanded, canHaveMultipleMenuOpenAtOnce]);\n\n const first = useCallback(() => dispatch({ type: SideNavigationMenuReducerActionType.Move, index: 0 }), []);\n\n const last = useCallback(\n () =>\n dispatch({\n type: SideNavigationMenuReducerActionType.Move,\n index: menuItems.size - 1,\n }),\n [menuItems.size]\n );\n\n const move = useCallback((index: number) => dispatch({ type: SideNavigationMenuReducerActionType.Move, index }), []);\n\n const open = useCallback(() => {\n sideNavigationMenuBarContext?.setCurrentOpenMenuId?.(id);\n dispatch({ type: SideNavigationMenuReducerActionType.Expand });\n appContainerState?.expandSidePanel();\n // Persist user-initiated expand\n if (menuLocalStorageKey) {\n try {\n window.localStorage.setItem(menuLocalStorageKey, JSON.stringify(true));\n } catch {\n // Silently fail\n }\n }\n }, [menuLocalStorageKey]);\n\n const close = useCallback(\n (focusButton?: boolean) => {\n if (isExpanded) {\n if (focusButton) {\n buttonRef.current!.focus();\n }\n\n dispatch({ type: SideNavigationMenuReducerActionType.Collapse });\n }\n },\n [isExpanded]\n );\n\n useEffect(() => {\n if (sideNavigationMenuBarContext?.currentOpenMenuId && sideNavigationMenuBarContext.currentOpenMenuId !== id) {\n close();\n }\n }, [sideNavigationMenuBarContext?.currentOpenMenuId]);\n\n const previous = () => {\n const items = Array.from(menuItems);\n const activeIndex = items.indexOf(document.activeElement as HTMLAnchorElement | HTMLButtonElement);\n // Do not wrap - stop at first item per W3C disclosure pattern\n if (activeIndex <= 0) {\n return;\n }\n move(activeIndex - 1);\n };\n\n const next = () => {\n const items = Array.from(menuItems);\n const activeIndex = items.indexOf(document.activeElement as HTMLAnchorElement | HTMLButtonElement);\n // Do not wrap - stop at last item per W3C disclosure pattern\n if (activeIndex >= items.length - 1) {\n return;\n }\n move(activeIndex + 1);\n };\n\n useEffect(() => {\n if (appContainerState && appContainerState?.sidePanelVariant === AppSidePanelVariant.shrinked && isExpanded) {\n close();\n } else if (\n appContainerState &&\n appContainerState?.sidePanelVariant === AppSidePanelVariant.standard &&\n !isExpanded &&\n menuLocalStorageKey\n ) {\n // Restore menu state from localStorage when the side panel expands back\n try {\n const item = window.localStorage.getItem(menuLocalStorageKey);\n if (item !== null && JSON.parse(item) === true) {\n dispatch({ type: SideNavigationMenuReducerActionType.Expand });\n }\n } catch {\n // Silently fail\n }\n }\n }, [appContainerState?.sidePanelVariant]);\n\n const value = useMemo<SideNavigationMenuContextProps>(() => ({ menuItems }), [menuItems]);\n\n useEffect(() => {\n const items = Array.from(menuItems);\n\n if (currentIndex !== previousIndex) {\n const currentNode = items[currentIndex] as HTMLElement;\n currentNode?.focus();\n }\n }, [menuItems, currentIndex, previousIndex]);\n\n const keyDownOnButton = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n const currentNode = e.target as HTMLButtonElement;\n\n switch (e.code) {\n case 'Enter':\n case 'Space':\n e.preventDefault();\n e.stopPropagation();\n currentNode.click();\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (isExpanded) {\n e.preventDefault();\n e.stopPropagation();\n first();\n }\n break;\n default:\n break;\n }\n };\n\n const buttonEventHandler = {\n onClick: (event: MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n\n buttonProps.onClick?.(event);\n event.stopPropagation();\n if (isExpanded) {\n close();\n // Persist user-initiated collapse\n if (menuLocalStorageKey) {\n try {\n window.localStorage.setItem(menuLocalStorageKey, JSON.stringify(false));\n } catch {\n // Silently fail\n }\n }\n } else {\n open();\n }\n },\n onKeyDown: (event: KeyboardEvent<HTMLButtonElement>) => {\n buttonProps.onKeyDown?.(event);\n keyDownOnButton(event);\n },\n };\n\n const keyDownOnMenuItemList = (e: KeyboardEvent<HTMLUListElement>) => {\n switch (e.code) {\n case 'ArrowUp':\n case 'ArrowLeft':\n e.stopPropagation();\n e.preventDefault();\n previous();\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n e.stopPropagation();\n e.preventDefault();\n next();\n break;\n case 'Home':\n e.stopPropagation();\n e.preventDefault();\n first();\n break;\n case 'End':\n e.stopPropagation();\n e.preventDefault();\n last();\n break;\n case 'Escape':\n e.stopPropagation();\n e.preventDefault();\n close(true);\n break;\n default:\n break;\n }\n };\n\n const menuItemListEventHandler = {\n onKeyDown: (event: KeyboardEvent<HTMLUListElement>) => {\n menuProps.onKeyDown?.(event);\n keyDownOnMenuItemList(event);\n },\n onClick: (event: MouseEvent<HTMLUListElement>) => {\n if (isDisabled) {\n return;\n }\n menuProps.onClick?.(event);\n },\n };\n\n const sideNavigationVariant = sideNavigationMenuBarContext?.sideNavigationMenuBarVariant;\n\n return (\n <ThemeProvider value={{ theme }}>\n <StyledSideNavigationMenu\n {...forwardedProps}\n $isDisabled={isDisabled}\n $isExpanded={isExpanded}\n $numberOfChildren={renderedMenuItems.length}\n $theme={theme}\n $variant={sideNavigationVariant}\n className={classNames(SideNavigationMenu.className, className)}\n id={id}\n ref={ref as MutableRefObject<HTMLDivElement>}\n tabIndex={undefined}\n >\n <SideNavigationMenuContext.Provider value={value}>\n <Flexbox flexDirection=\"row\" gap=\"0px\">\n <div className={`${SideNavigationMenu.className}__current-indicator-container`}>\n {currentPosition.current !== -1 ? (\n <StyledSideNavigationMenuItemIndicator\n $height={isExpanded ? 32 : 40}\n $theme={theme}\n style={{\n position: 'relative',\n top: isExpanded ? `${40 + currentPosition.current * 32}px` : 0,\n transition: 'top 300ms ease-out',\n }}\n />\n ) : null}\n </div>\n <div className={`${SideNavigationMenu.className}__menu-container`}>\n <button\n {...buttonProps}\n aria-controls={`${id}-list`}\n aria-disabled={isDisabled}\n aria-expanded={isExpanded ? 'true' : 'false'}\n ref={buttonRef as MutableRefObject<HTMLButtonElement>}\n tabIndex={0}\n type=\"button\"\n {...buttonEventHandler}\n >\n <Icon\n color={`var(--redsift-side-navigation-color-menu-item-text-${isDisabled ? 'disabled' : 'resting'})`}\n {...iconProps}\n icon={icon!}\n ref={iconRef as MutableRefObject<HTMLElement>}\n className={classNames(iconProps?.className, 'first')}\n size={IconSize.medium}\n />\n <span className=\"content\">{ariaLabel}</span>\n {hasBadge && (!isExpanded || keepBadgeVisible) ? <Badge color=\"error\" {...badgeProps} /> : null}\n <Icon\n icon={mdiChevronDown}\n className={`${SideNavigationMenu.className}__expand-icon`}\n size={IconSize.medium}\n />\n </button>\n <ul\n {...menuProps}\n aria-label={ariaLabel}\n id={`${id}-list`}\n ref={menuRef as MutableRefObject<HTMLUListElement>}\n {...menuItemListEventHandler}\n // inert removes collapsed content from tab order per W3C disclosure pattern\n {...(!isExpanded && { inert: INERT })}\n >\n {renderedMenuItems}\n </ul>\n </div>\n </Flexbox>\n </SideNavigationMenuContext.Provider>\n </StyledSideNavigationMenu>\n </ThemeProvider>\n );\n});\nSideNavigationMenu.className = CLASSNAME;\nSideNavigationMenu.displayName = COMPONENT_NAME;\n"],"names":["SideNavigationMenuReducerActionType","StyledSideNavigationMenu","styled","div","_ref","$isDisabled","$variant","$theme","css","SideNavigationMenuBarVariant","shrinked","_ref2","_ref3","$isExpanded","_ref4","standard","_ref5","_ref6","$numberOfChildren","SideNavigationMenuReducer","state","action","type","Expand","_objectSpread","isExpanded","Collapse","currentIndex","previousIndex","Move","index","INERT","IS_REACT_19_OR_LATER","COMPONENT_NAME","CLASSNAME","SideNavigationMenu","forwardRef","props","ref","ariaLabel","buttonProps","buttonRef","useRef","undefined","children","className","badgeProps","defaultExpanded","hasBadge","icon","iconProps","iconRef","id","propsId","isDisabled","propsIsExpanded","keepBadgeVisible","menuProps","menuRef","tabIndex","theme","propsTheme","forwardedProps","_objectWithoutProperties","_excluded","_id","useId","warnIfNoAccessibleLabelFound","appContainerState","useContext","AppContainerContext","sideNavigationMenuBarContext","SideNavigationMenuBarContext","useTheme","currentPosition","canHaveMultipleMenuOpenAtOnce","defaultExpandAll","storageKey","menuBarStorageKey","useEffect","current","childArray","filterComponents","SideNavigationMenuItem","renderedMenuItems","map","child","_child$key","_child$key2","isCurrent","React","createElement","key","cloneElement","isSecondLevel","menuItems","Set","menuLocalStorageKey","initialExpanded","dispatch","useReducer","Boolean","window","item","localStorage","getItem","persisted","JSON","parse","first","useCallback","last","size","move","open","_sideNavigationMenuBa","setCurrentOpenMenuId","call","expandSidePanel","setItem","stringify","close","focusButton","focus","currentOpenMenuId","previous","items","Array","from","activeIndex","indexOf","document","activeElement","next","length","sidePanelVariant","AppSidePanelVariant","value","useMemo","currentNode","keyDownOnButton","e","target","code","preventDefault","stopPropagation","click","buttonEventHandler","onClick","event","_buttonProps$onClick","onKeyDown","_buttonProps$onKeyDow","keyDownOnMenuItemList","menuItemListEventHandler","_menuProps$onKeyDown","_menuProps$onClick","sideNavigationVariant","sideNavigationMenuBarVariant","ThemeProvider","_extends","classNames","SideNavigationMenuContext","Provider","Flexbox","flexDirection","gap","StyledSideNavigationMenuItemIndicator","$height","style","position","top","transition","Icon","color","IconSize","medium","Badge","mdiChevronDown","inert","displayName"],"mappings":"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"}
@@ -215,7 +215,7 @@ const CLASSNAME = 'redsift-side-navigation-menu-item';
215
215
  * The SideNavigationMenuItem component.
216
216
  */
217
217
  const SideNavigationMenuItem = /*#__PURE__*/forwardRef((props, ref) => {
218
- const menuItemRef = ref || useRef();
218
+ const menuItemRef = ref || useRef(undefined);
219
219
  const {
220
220
  as,
221
221
  badge,
@@ -227,7 +227,7 @@ const SideNavigationMenuItem = /*#__PURE__*/forwardRef((props, ref) => {
227
227
  href,
228
228
  icon,
229
229
  iconProps,
230
- iconRef = useRef(),
230
+ iconRef = useRef(undefined),
231
231
  isCurrent,
232
232
  isDisabled,
233
233
  isSecondLevel,