@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.
- package/CONTRIBUTING.md +20 -8
- package/_internal/AppContainer.js +1 -1
- package/_internal/AppContainer.js.map +1 -1
- package/_internal/Button2.js +1 -1
- package/_internal/Button2.js.map +1 -1
- package/_internal/Checkbox2.js +8 -3
- package/_internal/Checkbox2.js.map +1 -1
- package/_internal/DetailedCard.js +17 -1352
- package/_internal/DetailedCard.js.map +1 -1
- package/_internal/DetailedCardCollapsibleSectionItems.js +14 -4
- package/_internal/DetailedCardCollapsibleSectionItems.js.map +1 -1
- package/_internal/DetailedCardSection.js +4 -2
- package/_internal/DetailedCardSection.js.map +1 -1
- package/_internal/IconButton.js +1 -1
- package/_internal/IconButton.js.map +1 -1
- package/_internal/Item2.js +2 -2
- package/_internal/Item2.js.map +1 -1
- package/_internal/LinkButton.js +1 -1
- package/_internal/LinkButton.js.map +1 -1
- package/_internal/Listbox2.js +5 -5
- package/_internal/Listbox2.js.map +1 -1
- package/_internal/NumberField.js +2 -0
- package/_internal/NumberField.js.map +1 -1
- package/_internal/Radio2.js +14 -7
- package/_internal/Radio2.js.map +1 -1
- package/_internal/RadioGroup.js +6 -1
- package/_internal/RadioGroup.js.map +1 -1
- package/_internal/SideNavigationMenu.js +9 -4
- package/_internal/SideNavigationMenu.js.map +1 -1
- package/_internal/SideNavigationMenuItem.js +2 -2
- package/_internal/SideNavigationMenuItem.js.map +1 -1
- package/_internal/Switch2.js +8 -3
- package/_internal/Switch2.js.map +1 -1
- package/_internal/Tabs2.js.map +1 -1
- package/_internal/TextArea.js +5 -1
- package/_internal/TextArea.js.map +1 -1
- package/_internal/TextField.js +5 -1
- package/_internal/TextField.js.map +1 -1
- package/_internal/context.js.map +1 -1
- package/_internal/filterComponents.js +3 -0
- package/_internal/filterComponents.js.map +1 -1
- package/_internal/getElementRef.js +25 -0
- package/_internal/getElementRef.js.map +1 -0
- package/_internal/getTextWidth.js +32 -0
- package/_internal/getTextWidth.js.map +1 -0
- package/_internal/isComponent.js +3 -0
- package/_internal/isComponent.js.map +1 -1
- package/_internal/reactVersion.js +14 -0
- package/_internal/reactVersion.js.map +1 -0
- package/_internal/styles4.js +72 -72
- package/_internal/styles4.js.map +1 -1
- package/_internal/types.js.map +1 -1
- package/_internal/useFocusOnListItem.js +1 -1
- package/_internal/useFocusOnListItem.js.map +1 -1
- package/_internal/useId.js +1 -1
- package/_internal/useId.js.map +1 -1
- package/_internal/useListboxItem.js.map +1 -1
- package/_internal/useSideNavigationMenuBar.js +2 -2
- package/_internal/useSideNavigationMenuBar.js.map +1 -1
- package/_internal/warnIfNoAccessibleLabelFound.js.map +1 -1
- package/index.d.ts +48 -24
- package/index.js +3 -31
- package/index.js.map +1 -1
- package/package.json +18 -26
package/_internal/Radio2.js
CHANGED
|
@@ -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
|
|
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-
|
|
244
|
-
|
|
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
|
|
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;
|
package/_internal/Radio2.js.map
CHANGED
|
@@ -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":";;;;;;;;;;;;;AAIA;AACA;AACA;AACO,MAAMA,WAAW,GAAGC,MAAM,CAACC,KAAwB,CAAA;AAC1D;AACA;AACA;AACA,EAAA,EAAIC,WAAY,CAAA;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,EAAMC,IAAA,IAAA;EAAA,IAAC;IAAEC,WAAW;IAAEC,UAAU;AAAEC,IAAAA,MAAAA;AAAO,GAAC,GAAAH,IAAA,CAAA;EAAA,OACpCC,WAAW,GACPG,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAW,CAAA,GACDD,UAAU,GACVE,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAA,CAAW,GACDC,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAW,CAAA,CAAA;AAAA,CAAC,CAAA;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,EAAME,KAAA,IAAA;EAAA,IAAC;IAAEC,UAAU;IAAEL,WAAW;IAAEC,UAAU;IAAEK,eAAe;AAAEJ,IAAAA,MAAAA;AAAO,GAAC,GAAAE,KAAA,CAAA;AAAA,EAAA,OAAKD,GAAI,CAAA;AAChF,MAAQH,EAAAA,WAAW,GACTG,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAW,CAAA,GACDD,UAAU,GACVE,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAA,CAAW,GACDC,GAAI,CAAA;AACd,mBAAqBE,EAAAA,UAAU,GACd,CAAsBH,oBAAAA,EAAAA,MAAO,iCAAgC,GAC7D,CAAA,oBAAA,EAAsBA,MAAO,CAAmC,iCAAA,CAAA,CAAA;AACjF,UAAY,CAAA,CAAA;AACZ;AACA,MAAA,EAAQI,eAAe,IAAI,CAACN,WAAW,GAC7BG,GAAI,CAAA;AACd,8BAAgCE,EAAAA,UAAU,GACzB,CAAsBH,oBAAAA,EAAAA,MAAO,uCAAsC,GACnE,CAAA,oBAAA,EAAsBA,MAAO,CAAyC,uCAAA,CAAA,CAAA;AACvF;AACA,UAAA,CAAW,GACD,EAAG,CAAA;AACb,IAAK,CAAA,CAAA;AAAA,CAAC,CAAA;AACN;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,EAAMK,KAAA,IAAA;EAAA,IAAC;IAAEF,UAAU;IAAEL,WAAW;IAAEC,UAAU;AAAEC,IAAAA,MAAAA;AAAO,GAAC,GAAAK,KAAA,CAAA;EAAA,OAChD,CAACP,WAAW,GACRG,GAAI,CAAA;AACd;AACA,cAAgBF,EAAAA,UAAU,GACRE,GAAI,CAAA;AACtB,0DAAA,EAA4DD,MAAO,CAAA;AACnE,kBAAA,CAAmB,GACDC,GAAI,CAAA;AACtB,sCAAwCE,EAAAA,UAAU,GACzB,CAAsBH,oBAAAA,EAAAA,MAAO,uCAAsC,GACnE,CAAA,oBAAA,EAAsBA,MAAO,CAAyC,uCAAA,CAAA,CAAA;AAC/F,kBAAoB,CAAA,CAAA;AACpB;AACA;AACA,UAAA,CAAW,GACD,EAAE,CAAA;AAAA,CAAC,CAAA;AACb;AACA,CAAC;;;ACxFD,MAAMM,cAAc,GAAG,OAAO,CAAA;AAC9B,MAAMC,SAAS,GAAG,eAAe,CAAA;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,KAAyC,gBAAGC,UAAU,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAK;AAAA,EAAA,IAAAC,WAAA,EAAAC,WAAA,EAAAhB,IAAA,CAAA;AAClF,EAAA,MAAMiB,UAAU,GAAGC,UAAU,CAACC,iBAAiB,CAAC,CAAA;EAEhD,MAAM;IAAEC,cAAc;AAAEC,IAAAA,UAAAA;AAAW,GAAC,GAAGC,wBAAwB,CAACT,KAAK,CAAC,CAAA;EAEtE,IAAI;AACF,MAAA,YAAY,EAAEU,SAAS;AACvB,MAAA,iBAAiB,EAAEC,cAAc;MACjCC,SAAS;MACTC,QAAQ;MACRC,SAAS;MACTC,eAAe;MACfC,UAAU;MACVC,QAAQ;AACRC,MAAAA,SAAS,GAAG,IAAI;MAChBC,UAAU;MACVC,SAAS;MACTC,UAAU;MACVC,UAAU;AACVC,MAAAA,UAAU,EAAEC,eAAe;MAC3BC,IAAI;MACJC,QAAQ;AACRC,MAAAA,KAAK,EAAEC,UAAU;AACjBC,MAAAA,KAAAA;AAEF,KAAC,GAAGrB,UAAU;AADTsB,IAAAA,cAAc,GAAAC,wBAAA,CACfvB,UAAU,EAAAwB,SAAA,CAAA,CAAA;AAEd,EAAA,MAAML,KAAK,GAAGM,QAAQ,CAACL,UAAU,CAAC,CAAA;EAElC,MAAM;IAAEM,cAAc;AAAEC,IAAAA,UAAAA;GAAY,GAAGC,YAAY,CAAC;AAAExB,IAAAA,SAAAA;AAAU,GAAC,CAAC,CAAA;AAClEO,EAAAA,UAAU,GAAAjB,CAAAA,WAAA,GAAGiB,UAAU,cAAAjB,WAAA,KAAA,KAAA,CAAA,GAAAA,WAAA,GAAIE,UAAU,KAAVA,IAAAA,IAAAA,UAAU,KAAVA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,UAAU,CAAEe,UAAU,CAAA;AACjDE,EAAAA,UAAU,GAAAlB,CAAAA,WAAA,GAAGkB,UAAU,cAAAlB,WAAA,KAAA,KAAA,CAAA,GAAAA,WAAA,GAAIC,UAAU,KAAVA,IAAAA,IAAAA,UAAU,KAAVA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,UAAU,CAAEiB,UAAU,CAAA;AAEjD,EAAA,MAAM,CAACE,UAAU,EAAEc,WAAW,CAAC,GAAGC,QAAQ,CACxCC,OAAO,EAAApD,IAAA,GAACqC,eAAe,KAAfA,IAAAA,IAAAA,eAAe,cAAfA,eAAe,GAAIT,eAAe,MAAA5B,IAAAA,IAAAA,IAAA,KAAAA,KAAAA,CAAAA,GAAAA,IAAA,GAAIoD,OAAO,CAAC,CAAAnC,UAAU,KAAA,IAAA,IAAVA,UAAU,KAAVA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,UAAU,CAAEyB,KAAK,KAAIzB,UAAU,CAACyB,KAAK,KAAKA,KAAK,CAAC,CACxG,CAAC,CAAA;EACD,MAAMW,YAAY,GAAGhB,eAAe,KAAK,IAAI,IAAIA,eAAe,KAAKiB,SAAS,CAAA;AAE9EC,EAAAA,SAAS,CAAC,MAAM;IACdL,WAAW,CAACE,OAAO,CAACf,eAAe,KAAA,IAAA,IAAfA,eAAe,KAAA,KAAA,CAAA,GAAfA,eAAe,GAAIT,eAAe,CAAC,CAAC,CAAA;AAC1D,GAAC,EAAE,CAACS,eAAe,EAAET,eAAe,CAAC,CAAC,CAAA;AAEtC2B,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAItC,UAAU,EAAE;AACdiC,MAAAA,WAAW,CAACjC,UAAU,CAACyB,KAAK,KAAKA,KAAK,CAAC,CAAA;AACzC,KAAA;GACD,EAAE,CAACzB,UAAU,KAAVA,IAAAA,IAAAA,UAAU,uBAAVA,UAAU,CAAEyB,KAAK,CAAC,CAAC,CAAA;EAEvBc,4BAA4B,CAAC3C,KAAK,EAA6B,CAACa,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;AAEnF,EAAA,IAAIT,UAAU,EAAE;IACd,IAAIoB,eAAe,IAAI,IAAI,EAAE;AAC3BoB,MAAAA,OAAO,CAACC,IAAI,CACV,+JACF,CAAC,CAAA;AACH,KAAA;IACA,IAAI9B,eAAe,IAAI,IAAI,EAAE;AAC3B6B,MAAAA,OAAO,CAACC,IAAI,CACV,oKACF,CAAC,CAAA;AACH,KAAA;AACA,IAAA,IAAI7C,KAAK,CAAC6B,KAAK,IAAI,IAAI,EAAE;AACvBe,MAAAA,OAAO,CAACC,IAAI,CACV,uGACF,CAAC,CAAA;AACH,KAAA;AACF,GAAA;AAEA,EAAA,MAAMC,YAAY,GAAGC,WAAW,CAC7BC,KAA0C,IAAK;IAC9C,IAAI7B,UAAU,IAAIE,UAAU,EAAE;AAC5B,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAIjB,UAAU,EAAE;AACdA,MAAAA,UAAU,CAAC6C,QAAQ,CAACpB,KAAe,CAAC,CAAA;AACtC,KAAA;AAEA,IAAA,IAAIW,YAAY,EAAE;AAChBd,MAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG,CAACF,eAAe,EAAEK,KAAK,EAAEJ,IAAI,EAAEuB,KAAK,EAAE5C,UAAW,CAAC,CAAA;AAC/D,KAAC,MAAM;MACLiC,WAAW,CAAC,CAACd,UAAU,CAAC,CAAA;AACxBG,MAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG,CAACH,UAAU,EAAEM,KAAK,EAAEJ,IAAI,EAAEuB,KAAK,EAAE5C,UAAW,CAAC,CAAA;AAC1D,KAAA;GACD,EACD,CAACsB,QAAQ,EAAEtB,UAAU,EAAEmB,UAAU,EAAEC,eAAe,CACpD,CAAC,CAAA;EAED,oBACE0B,cAAA,CAAAC,aAAA,CAACpE,WAAW,EAAAqE,QAAA,CAAA,EAAA,EACNtB,cAAc,EACdvB,cAAc,EAAA;AAClBd,IAAAA,UAAU,EAAEyB,SAAU;AACtB9B,IAAAA,WAAW,EAAE+B,UAAW;AACxBzB,IAAAA,eAAe,EAAEwC,cAAe;IAChC7C,UAAU,EAAE+B,SAAS,IAAKE,UAAU,IAAI,EAAEC,UAAU,IAAKiB,YAAY,IAAIhB,eAAgB,CAAG;AAC5F6B,IAAAA,WAAW,EAAE/B,UAAW;AACxBgC,IAAAA,WAAW,EAAE/B,UAAU,IAAKiB,YAAY,IAAIhB,eAAiB;AAC7DlC,IAAAA,MAAM,EAAEqC,KAAM;IACdb,SAAS,EAAEyC,UAAU,CAACzD,KAAK,CAACgB,SAAS,EAAEA,SAAS,CAAE;AAClDb,IAAAA,GAAG,EAAEA,GAAAA;GAEJsB,CAAAA,EAAAA,UAAU,IAAKiB,YAAY,IAAIhB,eAAgB,gBAC9C0B,cAAA,CAAAC,aAAA,CAACK,IAAI,EAAA;AAACC,IAAAA,IAAI,EAAEC,iBAAAA;AAAkB,GAAE,CAAC,gBAEjCR,cAAA,CAAAC,aAAA,CAACK,IAAI,EAAA;AAACC,IAAAA,IAAI,EAAEE,gBAAAA;AAAiB,GAAE,CAChC,EACA9C,QAAQ,gBAAGqC,cAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMrC,IAAAA,SAAS,EAAC,OAAA;AAAO,GAAA,EAAED,QAAe,CAAC,GAAG,IAAI,eAC5DqC,cAAA,CAAAC,aAAA,CAAAC,OAAAA,EAAAA,QAAA,CACMpC,EAAAA,EAAAA,UAAU,EACVmB,UAAU,EAAA;IACd,cAAcZ,EAAAA,UAAU,IAAKiB,YAAY,IAAIhB,eAAgB,GAAG,MAAM,GAAG,OAAQ;AACjF,IAAA,eAAA,EAAeL,UAAW;IAC1B,cAAcC,EAAAA,SAAS,IAAKE,UAAU,IAAI,EAAEC,UAAU,IAAKiB,YAAY,IAAIhB,eAAgB,CAAG;AAC9F,IAAA,YAAA,EAAYd,SAAU;AACtB,IAAA,iBAAA,EAAiBC,cAAe;AAChC,IAAA,eAAA,EAAeU,UAAW;AAC1B,IAAA,eAAA,EAAeC,UAAW;AAC1BV,IAAAA,SAAS,EAAEA,SAAU;IACrBgD,OAAO,EAAErC,UAAU,IAAKiB,YAAY,IAAIhB,eAAgB,GAAG,IAAI,GAAG,KAAM;AACxEqC,IAAAA,QAAQ,EAAE1C,UAAW;AACrBM,IAAAA,IAAI,EAAEA,IAAK;AACXC,IAAAA,QAAQ,EAAEoB,YAAa;AACvB7C,IAAAA,GAAG,EAAEgB,QAA+C;AACpD6C,IAAAA,IAAI,EAAC,OAAO;AACZjC,IAAAA,KAAK,EAAEA,KAAAA;AAAM,GAAA,CACd,CACU,CAAC,CAAA;AAElB,CAAC,EAAC;AACF/B,KAAK,CAACgB,SAAS,GAAGjB,SAAS,CAAA;AAC3BC,KAAK,CAACiE,WAAW,GAAGnE,cAAc;;;;"}
|
|
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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"}
|
package/_internal/RadioGroup.js
CHANGED
|
@@ -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":";;;;;;;;;;AAGA;AACA;AACA;;AAYA;AACA;AACA;AACO,MAAMA,qBAAqB,GAAG;AACnCC,EAAAA,UAAU,EAAE,YAAY;AACxBC,EAAAA,QAAQ,EAAE,UAAA;AACZ,EAAU;;AAGV;AACA;AACA;;ACxBA;AACA;AACA;AACO,MAAMC,gBAAgB,GAAGC,MAAM,CAACC,GAA2B,CAAA;AAClE,EAAA,EAAIC,WAAY,CAAA;AAChB;AACA;AACA;AACA;AACA,EAAA,EAAIC,IAAA,IAAA;EAAA,IAAC;AAAEC,IAAAA,YAAAA;AAAa,GAAC,GAAAD,IAAA,CAAA;AAAA,EAAA,OACjBC,YAAY,KAAKR,qBAAqB,CAACE,QAAQ,GAC1C,CAAA;AACT;AACA;AACA;AACA;AACA,EAAA,CAAG,GACM,CAAA;AACT;AACA;AACA;AACA;AACA;AACA,EAAG,CAAA,CAAA;AAAA,CAAC,CAAA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,EAAMO,KAAA,IAAA;EAAA,IAAC;IAAEC,WAAW;IAAEC,UAAU;AAAEC,IAAAA,MAAAA;AAAO,GAAC,GAAAH,KAAA,CAAA;EAAA,OACpCC,WAAW,GACPG,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAW,CAAA,GACDD,UAAU,GACVE,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAA,CAAW,GACDC,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAW,CAAA,CAAA;AAAA,CAAC,CAAA;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,EAAME,KAAA,IAAA;EAAA,IAAC;IAAEJ,WAAW;IAAEC,UAAU;AAAEC,IAAAA,MAAAA;AAAO,GAAC,GAAAE,KAAA,CAAA;EAAA,OACpCJ,WAAW,GACPG,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAW,CAAA,GACDD,UAAU,GACVE,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAA,CAAW,GACDC,GAAI,CAAA;AACd,uCAAA,EAAyCD,MAAO,CAAA;AAChD,UAAW,CAAA,CAAA;AAAA,CAAC,CAAA;AACZ;AACA,CAAC;;;AC5DD,MAAMG,cAAc,GAAG,YAAY,CAAA;AACnC,MAAMC,SAAS,GAAG,qBAAqB,CAAA;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAiD,gBAAGC,UAAU,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAK;EAC1F,MAAM;IAAEC,cAAc;AAAEC,IAAAA,UAAAA;AAAW,GAAC,GAAGC,wBAAwB,CAACJ,KAAK,CAAC,CAAA;EAEtE,MAAM;MACJK,QAAQ;MACRC,SAAS;MACTC,KAAK,GAAGC,YAAY,CAACC,OAAO;MAC5BC,YAAY;MACZC,WAAW;MACXC,UAAU;MACVC,SAAS;MACTC,UAAU;MACVC,UAAU;MACVC,KAAK;MACLC,QAAQ;MACRC,WAAW,GAAGrC,qBAAqB,CAACE,QAAQ;AAC5CoC,MAAAA,KAAK,EAAEC,UAAU;AACjBC,MAAAA,KAAAA;AAEF,KAAC,GAAGlB,UAAU;AADTmB,IAAAA,cAAc,GAAAC,wBAAA,CACfpB,UAAU,EAAAqB,SAAA,CAAA,CAAA;AAEd,EAAA,MAAML,KAAK,GAAGM,QAAQ,CAACL,UAAU,CAAC,CAAA;AAElC,EAAA,MAAM,CAACM,aAAa,EAAEC,QAAQ,CAAC,GAAGC,QAAQ,CAASP,KAAK,IAAIX,YAAY,IAAI,EAAE,CAAC,CAAA;AAC/EmB,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIR,KAAK,EAAE;AACTS,MAAAA,KAAK,CAACH,QAAQ,CAACN,KAAK,CAAC,CAAA;AACvB,KAAA;AACF,GAAC,EAAE,CAACA,KAAK,CAAC,CAAC,CAAA;AAEX,EAAA,MAAMS,KAAK,GAAG;AACZT,IAAAA,KAAK,EAAEK,aAAa;IACpBd,UAAU,EAAEA,UAAU,IAAI,KAAK;IAC/BE,UAAU,EAAEA,UAAU,IAAI,KAAK;IAC/Ba,QAAQA,CAACN,KAAa,EAAE;MACtB,IAAIP,UAAU,IAAIF,UAAU,EAAE;AAC5B,QAAA,OAAA;AACF,OAAA;MAEA,MAAMmB,aAAa,GAAGL,aAAa,CAAA;MACnCC,QAAQ,CAACN,KAAK,CAAC,CAAA;AACf,MAAA,IAAIA,KAAK,KAAKU,aAAa,IAAId,QAAQ,EAAE;QACvCA,QAAQ,CAACI,KAAK,CAAC,CAAA;AACjB,OAAA;AACF,KAAA;GACD,CAAA;AAED,EAAA,oBACEW,cAAA,CAAAC,aAAA,CAACC,aAAa,EAAA;AAACb,IAAAA,KAAK,EAAE;AAAEF,MAAAA,KAAAA;AAAM,KAAA;AAAE,GAAA,eAC9Ba,cAAA,CAAAC,aAAA,CAACjD,gBAAgB,EAAAmD,QAAA,CAAA;AACf5B,IAAAA,KAAK,EAAEA,KAAAA;GACHe,EAAAA,cAAc,EACdpB,cAAc,EAAA;AAClBX,IAAAA,WAAW,EAAEqB,UAAW;IACxBpB,UAAU,EAAEqB,SAAS,IAAKE,UAAU,IAAIW,aAAa,CAACU,MAAM,KAAK,CAAG;AACpEC,IAAAA,WAAW,EAAEvB,UAAW;AACxBzB,IAAAA,YAAY,EAAE6B,WAAY;AAC1BzB,IAAAA,MAAM,EAAE0B,KAAM;AACd,IAAA,eAAA,EAAeP,UAAW;IAC1BN,SAAS,EAAEgC,UAAU,CAACxC,UAAU,CAACQ,SAAS,EAAEA,SAAS,CAAE;AACvDL,IAAAA,GAAG,EAAEA,GAAiC;AACtCsC,IAAAA,IAAI,EAAC,YAAA;GAELP,CAAAA,eAAAA,cAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM3B,IAAAA,SAAS,EAAG,CAAA,EAAER,UAAU,CAACQ,SAAU,CAAA,MAAA,CAAA;GACtCU,EAAAA,KAAK,EACLD,UAAU,GAAG,IAAI,GAAG,IACjB,CAAC,eACPiB,cAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAK3B,IAAAA,SAAS,EAAG,CAAA,EAAER,UAAU,CAACQ,SAAU,CAAA,MAAA,CAAA;AAAQ,GAAA,eAC9C0B,cAAA,CAAAC,aAAA,CAACO,iBAAiB,CAACC,QAAQ,EAAA;AAACpB,IAAAA,KAAK,EAAES,KAAAA;AAAM,GAAA,EAAEzB,QAAqC,CAC7E,CAAC,eACN2B,cAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM3B,IAAAA,SAAS,EAAG,CAAA,EAAER,UAAU,CAACQ,SAAU,CAAA,YAAA,CAAA;GAAgBK,EAAAA,WAAkB,CAC3D,CACL,CAAC,CAAA;AAEpB,CAAC,EAAC;AACFb,UAAU,CAACQ,SAAS,GAAGT,SAAS,CAAA;AAChCC,UAAU,CAAC4C,WAAW,GAAG9C,cAAc;;;;"}
|
|
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,
|