@redsift/design-system 12.5.3-alpha.4 → 12.5.3-alpha.6
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/_internal/Breadcrumbs2.js +5 -0
- package/_internal/Breadcrumbs2.js.map +1 -1
- package/_internal/Card2.js +5 -0
- package/_internal/Card2.js.map +1 -1
- package/_internal/DetailedCard.js +5 -0
- package/_internal/DetailedCard.js.map +1 -1
- package/_internal/Flexbox2.js +21 -0
- package/_internal/Flexbox2.js.map +1 -1
- package/_internal/Heading2.js +27 -0
- package/_internal/Heading2.js.map +1 -1
- package/_internal/SideNavigationMenu.js +6 -6
- package/_internal/SideNavigationMenu.js.map +1 -1
- package/_internal/Tab2.js +4 -0
- package/_internal/Tab2.js.map +1 -1
- package/_internal/TabPanel.js +4 -0
- package/_internal/TabPanel.js.map +1 -1
- package/_internal/Text2.js +27 -0
- package/_internal/Text2.js.map +1 -1
- package/_internal/warnAliasProps.js +46 -0
- package/_internal/warnAliasProps.js.map +1 -0
- package/_internal/warnCompoundMisuse.js +55 -0
- package/_internal/warnCompoundMisuse.js.map +1 -0
- package/index.d.ts +76 -23
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +2 -2
package/_internal/Flexbox2.js
CHANGED
|
@@ -3,6 +3,7 @@ import React__default, { forwardRef } from 'react';
|
|
|
3
3
|
import classNames from 'classnames';
|
|
4
4
|
import styled, { css } from 'styled-components';
|
|
5
5
|
import { j as baseContainer } from './styles5.js';
|
|
6
|
+
import { w as warnOnAliasProps } from './warnAliasProps.js';
|
|
6
7
|
import { i as getContainerStylingTransientProps } from './styles.js';
|
|
7
8
|
import { u as useTheme, a as ThemeProvider } from './useTheme.js';
|
|
8
9
|
|
|
@@ -55,6 +56,25 @@ const _excluded = ["$gap"],
|
|
|
55
56
|
_excluded2 = ["as", "children", "className", "divider", "theme"];
|
|
56
57
|
const COMPONENT_NAME = 'Flexbox';
|
|
57
58
|
const CLASSNAME = 'redsift-flex-box';
|
|
59
|
+
const FLEXBOX_ALIAS_WARNINGS = [{
|
|
60
|
+
prop: 'direction',
|
|
61
|
+
use: 'flexDirection'
|
|
62
|
+
}, {
|
|
63
|
+
prop: 'align',
|
|
64
|
+
use: 'alignItems'
|
|
65
|
+
}, {
|
|
66
|
+
prop: 'justify',
|
|
67
|
+
use: 'justifyContent'
|
|
68
|
+
}, {
|
|
69
|
+
prop: 'wrap',
|
|
70
|
+
use: 'flexWrap'
|
|
71
|
+
}, {
|
|
72
|
+
prop: 'space',
|
|
73
|
+
use: 'gap'
|
|
74
|
+
}, {
|
|
75
|
+
prop: 'spacing',
|
|
76
|
+
use: 'gap'
|
|
77
|
+
}];
|
|
58
78
|
|
|
59
79
|
/**
|
|
60
80
|
* Flexbox provides a CSS Flexbox container with convenient props for common
|
|
@@ -110,6 +130,7 @@ const CLASSNAME = 'redsift-flex-box';
|
|
|
110
130
|
* </Text>
|
|
111
131
|
*/
|
|
112
132
|
const Flexbox = /*#__PURE__*/forwardRef((props, ref) => {
|
|
133
|
+
warnOnAliasProps(COMPONENT_NAME, props, FLEXBOX_ALIAS_WARNINGS);
|
|
113
134
|
const {
|
|
114
135
|
transientProps,
|
|
115
136
|
otherProps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flexbox2.js","sources":["../../src/components/flexbox/styles.ts","../../src/components/flexbox/Flexbox.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseContainer } from '../shared';\nimport { StyledFlexboxProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledFlexbox = styled.div<StyledFlexboxProps>`\n display: ${({ $inline }) => ($inline ? 'inline-flex' : 'flex')};\n ${baseContainer}\n\n ${({ $divider }) =>\n $divider\n ? css`\n overflow: hidden;\n > *:not(:empty) {\n position: relative;\n\n &::before {\n content: '';\n position: absolute;\n background-color: var(--redsift-color-neutral-light-grey);\n inline-size: 1px;\n block-size: 100%;\n inset-inline-start: calc(${Math.max(1, $divider.colGap / 2)}px * -1);\n }\n\n &::after {\n content: '';\n position: absolute;\n background-color: var(--redsift-color-neutral-light-grey);\n inline-size: 200vw;\n block-size: 1px;\n inset-inline-start: -100vw;\n inset-block-start: calc(${Math.max(1, $divider.rowGap / 2)}px * -1);\n z-index: 0;\n }\n }\n `\n : ''}\n`;\n","import React, { forwardRef, RefObject } from 'react';\nimport classNames from 'classnames';\nimport { Comp, getContainerStylingTransientProps } from '../../types';\nimport { StyledFlexbox } from './styles';\nimport { FlexboxProps } from './types';\nimport { ThemeProvider, useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'Flexbox';\nconst CLASSNAME = 'redsift-flex-box';\n\n/**\n * Flexbox provides a CSS Flexbox container with convenient props for common\n * layout patterns. Ideal for one-dimensional layouts (rows or columns).\n *\n * For two-dimensional layouts (rows AND columns), use Grid instead.\n *\n * @example\n * // Horizontal row with gap\n * <Flexbox flexDirection=\"row\" gap=\"16px\">\n * <Button>Left</Button>\n * <Button>Right</Button>\n * </Flexbox>\n *\n * @example\n * // Vertical column centered\n * <Flexbox flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\">\n * <Heading as=\"h2\">Title</Heading>\n * <Text>Description</Text>\n * </Flexbox>\n *\n * @example\n * // Space between with alignment\n * <Flexbox justifyContent=\"space-between\" alignItems=\"center\">\n * <Text>Label</Text>\n * <Button>Action</Button>\n * </Flexbox>\n *\n * @example\n * // Column with different gaps for rows and columns\n * <Flexbox flexDirection=\"column\" gap=\"8px 16px\">\n * <Text>Row 1</Text>\n * <Text>Row 2</Text>\n * </Flexbox>\n *\n * @example\n * // Wrapping items\n * <Flexbox flexWrap=\"wrap\" gap=\"8px\">\n * {items.map(item => <Pill key={item.id}>{item.name}</Pill>)}\n * </Flexbox>\n *\n * @example\n * // With visual dividers between items\n * <Flexbox divider={{ colGap: 16, rowGap: 16, color: 'grey' }}>\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * </Flexbox>\n *\n * @example\n * // Inline flexbox\n * <Text>\n * Status: <Flexbox inline gap=\"4px\"><Badge color=\"success\" variant=\"dot\" /> Active</Flexbox>\n * </Text>\n */\nexport const Flexbox: Comp<FlexboxProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { transientProps, otherProps } = getContainerStylingTransientProps(props);\n const { $gap = '16px', ...otherTransientProps } = transientProps;\n\n const { as, children, className, divider, theme: propsTheme, ...forwardedProps } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n return (\n <ThemeProvider value={{ theme }}>\n <StyledFlexbox\n as={as}\n {...forwardedProps}\n {...otherTransientProps}\n $gap={divider ? `${divider.rowGap}px ${divider.colGap}px` : $gap}\n className={classNames(Flexbox.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n $divider={divider}\n $theme={theme}\n >\n {children}\n </StyledFlexbox>\n </ThemeProvider>\n );\n});\nFlexbox.className = CLASSNAME;\nFlexbox.displayName = COMPONENT_NAME;\n"],"names":["StyledFlexbox","styled","div","_ref","$inline","baseContainer","_ref2","$divider","css","Math","max","colGap","rowGap","COMPONENT_NAME","CLASSNAME","Flexbox","forwardRef","props","ref","transientProps","otherProps","getContainerStylingTransientProps","$gap","otherTransientProps","_objectWithoutProperties","_excluded","as","children","className","divider","theme","propsTheme","forwardedProps","_excluded2","useTheme","React","createElement","ThemeProvider","value","_extends","classNames","$theme","displayName"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Flexbox2.js","sources":["../../src/components/flexbox/styles.ts","../../src/components/flexbox/Flexbox.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseContainer } from '../shared';\nimport { StyledFlexboxProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledFlexbox = styled.div<StyledFlexboxProps>`\n display: ${({ $inline }) => ($inline ? 'inline-flex' : 'flex')};\n ${baseContainer}\n\n ${({ $divider }) =>\n $divider\n ? css`\n overflow: hidden;\n > *:not(:empty) {\n position: relative;\n\n &::before {\n content: '';\n position: absolute;\n background-color: var(--redsift-color-neutral-light-grey);\n inline-size: 1px;\n block-size: 100%;\n inset-inline-start: calc(${Math.max(1, $divider.colGap / 2)}px * -1);\n }\n\n &::after {\n content: '';\n position: absolute;\n background-color: var(--redsift-color-neutral-light-grey);\n inline-size: 200vw;\n block-size: 1px;\n inset-inline-start: -100vw;\n inset-block-start: calc(${Math.max(1, $divider.rowGap / 2)}px * -1);\n z-index: 0;\n }\n }\n `\n : ''}\n`;\n","import React, { forwardRef, RefObject } from 'react';\nimport classNames from 'classnames';\nimport { Comp, getContainerStylingTransientProps } from '../../types';\nimport { StyledFlexbox } from './styles';\nimport { FlexboxProps } from './types';\nimport { ThemeProvider, useTheme } from '../theme';\nimport { warnOnAliasProps } from '../../utils/warnAliasProps';\n\nconst COMPONENT_NAME = 'Flexbox';\nconst CLASSNAME = 'redsift-flex-box';\n\nconst FLEXBOX_ALIAS_WARNINGS = [\n { prop: 'direction', use: 'flexDirection' },\n { prop: 'align', use: 'alignItems' },\n { prop: 'justify', use: 'justifyContent' },\n { prop: 'wrap', use: 'flexWrap' },\n { prop: 'space', use: 'gap' },\n { prop: 'spacing', use: 'gap' },\n];\n\n/**\n * Flexbox provides a CSS Flexbox container with convenient props for common\n * layout patterns. Ideal for one-dimensional layouts (rows or columns).\n *\n * For two-dimensional layouts (rows AND columns), use Grid instead.\n *\n * @example\n * // Horizontal row with gap\n * <Flexbox flexDirection=\"row\" gap=\"16px\">\n * <Button>Left</Button>\n * <Button>Right</Button>\n * </Flexbox>\n *\n * @example\n * // Vertical column centered\n * <Flexbox flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\">\n * <Heading as=\"h2\">Title</Heading>\n * <Text>Description</Text>\n * </Flexbox>\n *\n * @example\n * // Space between with alignment\n * <Flexbox justifyContent=\"space-between\" alignItems=\"center\">\n * <Text>Label</Text>\n * <Button>Action</Button>\n * </Flexbox>\n *\n * @example\n * // Column with different gaps for rows and columns\n * <Flexbox flexDirection=\"column\" gap=\"8px 16px\">\n * <Text>Row 1</Text>\n * <Text>Row 2</Text>\n * </Flexbox>\n *\n * @example\n * // Wrapping items\n * <Flexbox flexWrap=\"wrap\" gap=\"8px\">\n * {items.map(item => <Pill key={item.id}>{item.name}</Pill>)}\n * </Flexbox>\n *\n * @example\n * // With visual dividers between items\n * <Flexbox divider={{ colGap: 16, rowGap: 16, color: 'grey' }}>\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * </Flexbox>\n *\n * @example\n * // Inline flexbox\n * <Text>\n * Status: <Flexbox inline gap=\"4px\"><Badge color=\"success\" variant=\"dot\" /> Active</Flexbox>\n * </Text>\n */\nexport const Flexbox: Comp<FlexboxProps, HTMLDivElement> = forwardRef((props, ref) => {\n warnOnAliasProps(COMPONENT_NAME, props as unknown as Record<string, unknown>, FLEXBOX_ALIAS_WARNINGS);\n const { transientProps, otherProps } = getContainerStylingTransientProps(props);\n const { $gap = '16px', ...otherTransientProps } = transientProps;\n\n const { as, children, className, divider, theme: propsTheme, ...forwardedProps } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n return (\n <ThemeProvider value={{ theme }}>\n <StyledFlexbox\n as={as}\n {...forwardedProps}\n {...otherTransientProps}\n $gap={divider ? `${divider.rowGap}px ${divider.colGap}px` : $gap}\n className={classNames(Flexbox.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n $divider={divider}\n $theme={theme}\n >\n {children}\n </StyledFlexbox>\n </ThemeProvider>\n );\n});\nFlexbox.className = CLASSNAME;\nFlexbox.displayName = COMPONENT_NAME;\n"],"names":["StyledFlexbox","styled","div","_ref","$inline","baseContainer","_ref2","$divider","css","Math","max","colGap","rowGap","COMPONENT_NAME","CLASSNAME","FLEXBOX_ALIAS_WARNINGS","prop","use","Flexbox","forwardRef","props","ref","warnOnAliasProps","transientProps","otherProps","getContainerStylingTransientProps","$gap","otherTransientProps","_objectWithoutProperties","_excluded","as","children","className","divider","theme","propsTheme","forwardedProps","_excluded2","useTheme","React","createElement","ThemeProvider","value","_extends","classNames","$theme","displayName"],"mappings":"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"}
|
package/_internal/Heading2.js
CHANGED
|
@@ -4,6 +4,7 @@ import classNames from 'classnames';
|
|
|
4
4
|
import styled, { css } from 'styled-components';
|
|
5
5
|
import { i as baseStyling } from './styles5.js';
|
|
6
6
|
import { N as NotificationsColorPalette, g as NeutralColorPalette, e as ProductColorPalette } from './colors.js';
|
|
7
|
+
import { w as warnOnAliasProps } from './warnAliasProps.js';
|
|
7
8
|
import { f as getStylingTransientProps } from './styles.js';
|
|
8
9
|
import { F as FontFamily } from './fonts.js';
|
|
9
10
|
import { u as useTheme } from './useTheme.js';
|
|
@@ -72,6 +73,31 @@ const StyledHeading = styled.span`
|
|
|
72
73
|
const _excluded = ["as", "children", "className", "color", "fontFamily", "fontSize", "fontWeight", "lineHeight", "noWrap", "theme", "variant"];
|
|
73
74
|
const COMPONENT_NAME = 'Heading';
|
|
74
75
|
const CLASSNAME = 'redsift-heading';
|
|
76
|
+
const HEADING_ALIAS_WARNINGS = [{
|
|
77
|
+
prop: 'kind',
|
|
78
|
+
use: 'variant'
|
|
79
|
+
}, {
|
|
80
|
+
prop: 'appearance',
|
|
81
|
+
use: 'variant'
|
|
82
|
+
}, {
|
|
83
|
+
prop: 'level',
|
|
84
|
+
use: 'as',
|
|
85
|
+
hint: 'Use as="h1"…"h6" to render the matching element.'
|
|
86
|
+
}, {
|
|
87
|
+
prop: 'size',
|
|
88
|
+
use: 'variant',
|
|
89
|
+
hint: 'Heading sizing is driven by `as` / `variant`, not `size`.'
|
|
90
|
+
}, {
|
|
91
|
+
prop: 'weight',
|
|
92
|
+
use: 'fontWeight'
|
|
93
|
+
}, {
|
|
94
|
+
prop: 'tag',
|
|
95
|
+
use: 'as'
|
|
96
|
+
}, {
|
|
97
|
+
prop: 'slot',
|
|
98
|
+
use: 'children',
|
|
99
|
+
hint: 'Heading does not implement a slot API; pass content as children.'
|
|
100
|
+
}];
|
|
75
101
|
|
|
76
102
|
/**
|
|
77
103
|
* Heading renders semantic HTML heading elements (h1-h6) with consistent styling.
|
|
@@ -94,6 +120,7 @@ const CLASSNAME = 'redsift-heading';
|
|
|
94
120
|
* <Heading as="h2" noWrap>Very long title that will be truncated...</Heading>
|
|
95
121
|
*/
|
|
96
122
|
const Heading = /*#__PURE__*/forwardRef((props, ref) => {
|
|
123
|
+
warnOnAliasProps(COMPONENT_NAME, props, HEADING_ALIAS_WARNINGS);
|
|
97
124
|
const {
|
|
98
125
|
transientProps,
|
|
99
126
|
otherProps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Heading2.js","sources":["../../src/components/heading/styles.ts","../../src/components/heading/Heading.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { StyledHeadingProps } from './types';\nimport { NotificationsColorPalette, NeutralColorPalette, ProductColorPalette } from '../../types';\n\n/**\n * Component style.\n */\nexport const StyledHeading = styled.span<StyledHeadingProps>`\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n font: inherit;\n vertical-align: baseline;\n\n ${baseStyling}\n\n ${({ $color, $theme }) =>\n $color && $color === 'radar'\n ? css`\n background: linear-gradient(90deg, #51b78e 0%, #0081c3 100%);\n background-clip: text;\n color: transparent;\n `\n : Object.keys(NotificationsColorPalette).indexOf($color!) !== -1\n ? css`\n color: var(--redsift-color-notifications-${$color}-primary);\n `\n : Object.keys(NeutralColorPalette).indexOf($color!) !== -1\n ? css`\n color: var(--redsift-color-neutral-${$color});\n `\n : Object.keys(ProductColorPalette).indexOf($color!) !== -1\n ? css`\n color: var(--redsift-color-product-${$color});\n `\n : css`\n color: ${$color || css`var(--redsift-color-${$theme}-components-text-primary)`};\n `}\n\n ${({ $variant, $fontFamily, $fontSize, $fontWeight, $lineHeight }) => css`\n font-family: ${$fontFamily\n ? css`var(--redsift-typography-font-family-${$fontFamily})`\n : css`var(--redsift-typography-${$variant ?? 'body'}-font-family)`};\n font-size: ${$fontSize ? $fontSize : css`var(--redsift-typography-${$variant ?? 'body'}-font-size)`};\n font-weight: ${$fontWeight ? $fontWeight : css`var(--redsift-typography-${$variant ?? 'body'}-font-weight)`};\n line-height: ${$lineHeight ? $lineHeight : css`var(--redsift-typography-${$variant ?? 'body'}-line-height)`};\n `}\n\n ${({ $noWrap }) =>\n $noWrap\n ? css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `\n : ''}\n`;\n","import React, { forwardRef, RefObject } from 'react';\nimport classNames from 'classnames';\nimport { Comp, FontFamily, getStylingTransientProps } from '../../types';\nimport { StyledHeading } from './styles';\nimport { HeadingProps } from './types';\nimport { useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'Heading';\nconst CLASSNAME = 'redsift-heading';\n\n/**\n * Heading renders semantic HTML heading elements (h1-h6) with consistent styling.\n * The visual style is inferred from the `as` prop unless `variant` is explicitly set.\n *\n * @example\n * // Page title (h1)\n * <Heading as=\"h1\">Dashboard</Heading>\n *\n * @example\n * // Section heading (h2)\n * <Heading as=\"h2\">Recent Activity</Heading>\n *\n * @example\n * // Styled as h2 but rendered as h3 (for accessibility hierarchy)\n * <Heading as=\"h3\" variant=\"h2\">Visually Large but H3</Heading>\n *\n * @example\n * // Truncated heading\n * <Heading as=\"h2\" noWrap>Very long title that will be truncated...</Heading>\n */\nexport const Heading: Comp<HeadingProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const {\n as,\n children,\n className,\n color,\n fontFamily = FontFamily.poppins,\n fontSize,\n fontWeight,\n lineHeight,\n noWrap,\n theme: propsTheme,\n variant,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n return (\n <StyledHeading\n as={as}\n {...forwardedProps}\n {...transientProps}\n className={classNames(Heading.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n $noWrap={noWrap}\n $theme={theme}\n $color={color}\n $fontFamily={fontFamily}\n $fontSize={fontSize}\n $fontWeight={fontWeight}\n $lineHeight={lineHeight}\n $variant={variant ? variant : as === 'span' ? 'body' : as}\n >\n {children}\n </StyledHeading>\n );\n});\nHeading.className = CLASSNAME;\nHeading.displayName = COMPONENT_NAME;\n"],"names":["StyledHeading","styled","span","baseStyling","_ref","$color","$theme","css","Object","keys","NotificationsColorPalette","indexOf","NeutralColorPalette","ProductColorPalette","_ref2","$variant","$fontFamily","$fontSize","$fontWeight","$lineHeight","_ref3","$noWrap","COMPONENT_NAME","CLASSNAME","Heading","forwardRef","props","ref","transientProps","otherProps","getStylingTransientProps","as","children","className","color","fontFamily","FontFamily","poppins","fontSize","fontWeight","lineHeight","noWrap","theme","propsTheme","variant","forwardedProps","_objectWithoutProperties","_excluded","useTheme","React","createElement","_extends","classNames","displayName"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Heading2.js","sources":["../../src/components/heading/styles.ts","../../src/components/heading/Heading.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { StyledHeadingProps } from './types';\nimport { NotificationsColorPalette, NeutralColorPalette, ProductColorPalette } from '../../types';\n\n/**\n * Component style.\n */\nexport const StyledHeading = styled.span<StyledHeadingProps>`\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n font: inherit;\n vertical-align: baseline;\n\n ${baseStyling}\n\n ${({ $color, $theme }) =>\n $color && $color === 'radar'\n ? css`\n background: linear-gradient(90deg, #51b78e 0%, #0081c3 100%);\n background-clip: text;\n color: transparent;\n `\n : Object.keys(NotificationsColorPalette).indexOf($color!) !== -1\n ? css`\n color: var(--redsift-color-notifications-${$color}-primary);\n `\n : Object.keys(NeutralColorPalette).indexOf($color!) !== -1\n ? css`\n color: var(--redsift-color-neutral-${$color});\n `\n : Object.keys(ProductColorPalette).indexOf($color!) !== -1\n ? css`\n color: var(--redsift-color-product-${$color});\n `\n : css`\n color: ${$color || css`var(--redsift-color-${$theme}-components-text-primary)`};\n `}\n\n ${({ $variant, $fontFamily, $fontSize, $fontWeight, $lineHeight }) => css`\n font-family: ${$fontFamily\n ? css`var(--redsift-typography-font-family-${$fontFamily})`\n : css`var(--redsift-typography-${$variant ?? 'body'}-font-family)`};\n font-size: ${$fontSize ? $fontSize : css`var(--redsift-typography-${$variant ?? 'body'}-font-size)`};\n font-weight: ${$fontWeight ? $fontWeight : css`var(--redsift-typography-${$variant ?? 'body'}-font-weight)`};\n line-height: ${$lineHeight ? $lineHeight : css`var(--redsift-typography-${$variant ?? 'body'}-line-height)`};\n `}\n\n ${({ $noWrap }) =>\n $noWrap\n ? css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `\n : ''}\n`;\n","import React, { forwardRef, RefObject } from 'react';\nimport classNames from 'classnames';\nimport { Comp, FontFamily, getStylingTransientProps } from '../../types';\nimport { StyledHeading } from './styles';\nimport { HeadingProps } from './types';\nimport { useTheme } from '../theme';\nimport { warnOnAliasProps } from '../../utils/warnAliasProps';\n\nconst COMPONENT_NAME = 'Heading';\nconst CLASSNAME = 'redsift-heading';\n\nconst HEADING_ALIAS_WARNINGS = [\n { prop: 'kind', use: 'variant' },\n { prop: 'appearance', use: 'variant' },\n { prop: 'level', use: 'as', hint: 'Use as=\"h1\"…\"h6\" to render the matching element.' },\n { prop: 'size', use: 'variant', hint: 'Heading sizing is driven by `as` / `variant`, not `size`.' },\n { prop: 'weight', use: 'fontWeight' },\n { prop: 'tag', use: 'as' },\n { prop: 'slot', use: 'children', hint: 'Heading does not implement a slot API; pass content as children.' },\n];\n\n/**\n * Heading renders semantic HTML heading elements (h1-h6) with consistent styling.\n * The visual style is inferred from the `as` prop unless `variant` is explicitly set.\n *\n * @example\n * // Page title (h1)\n * <Heading as=\"h1\">Dashboard</Heading>\n *\n * @example\n * // Section heading (h2)\n * <Heading as=\"h2\">Recent Activity</Heading>\n *\n * @example\n * // Styled as h2 but rendered as h3 (for accessibility hierarchy)\n * <Heading as=\"h3\" variant=\"h2\">Visually Large but H3</Heading>\n *\n * @example\n * // Truncated heading\n * <Heading as=\"h2\" noWrap>Very long title that will be truncated...</Heading>\n */\nexport const Heading: Comp<HeadingProps, HTMLDivElement> = forwardRef((props, ref) => {\n warnOnAliasProps(COMPONENT_NAME, props as unknown as Record<string, unknown>, HEADING_ALIAS_WARNINGS);\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const {\n as,\n children,\n className,\n color,\n fontFamily = FontFamily.poppins,\n fontSize,\n fontWeight,\n lineHeight,\n noWrap,\n theme: propsTheme,\n variant,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n\n return (\n <StyledHeading\n as={as}\n {...forwardedProps}\n {...transientProps}\n className={classNames(Heading.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n $noWrap={noWrap}\n $theme={theme}\n $color={color}\n $fontFamily={fontFamily}\n $fontSize={fontSize}\n $fontWeight={fontWeight}\n $lineHeight={lineHeight}\n $variant={variant ? variant : as === 'span' ? 'body' : as}\n >\n {children}\n </StyledHeading>\n );\n});\nHeading.className = CLASSNAME;\nHeading.displayName = COMPONENT_NAME;\n"],"names":["StyledHeading","styled","span","baseStyling","_ref","$color","$theme","css","Object","keys","NotificationsColorPalette","indexOf","NeutralColorPalette","ProductColorPalette","_ref2","$variant","$fontFamily","$fontSize","$fontWeight","$lineHeight","_ref3","$noWrap","COMPONENT_NAME","CLASSNAME","HEADING_ALIAS_WARNINGS","prop","use","hint","Heading","forwardRef","props","ref","warnOnAliasProps","transientProps","otherProps","getStylingTransientProps","as","children","className","color","fontFamily","FontFamily","poppins","fontSize","fontWeight","lineHeight","noWrap","theme","propsTheme","variant","forwardedProps","_objectWithoutProperties","_excluded","useTheme","React","createElement","_extends","classNames","displayName"],"mappings":"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"}
|
|
@@ -84,8 +84,8 @@ const StyledSideNavigationMenu = styled.div`
|
|
|
84
84
|
text-transform: uppercase;
|
|
85
85
|
width: calc(100% + ${$variant === SideNavigationMenuBarVariant.shrinked ? '0px' : '4px'});
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
&:hover,
|
|
88
|
+
&:focus-visible {
|
|
89
89
|
outline: none;
|
|
90
90
|
|
|
91
91
|
${!$isDisabled ? css`
|
|
@@ -99,27 +99,27 @@ const StyledSideNavigationMenu = styled.div`
|
|
|
99
99
|
` : ''}
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
&:active {
|
|
103
103
|
${!$isDisabled ? css`
|
|
104
104
|
background-color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-background-active);
|
|
105
105
|
` : ''}
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
@media (prefers-reduced-motion: no-preference) {
|
|
109
|
-
|
|
109
|
+
&:focus-visible {
|
|
110
110
|
> span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {
|
|
111
111
|
outline: 2px solid var(--redsift-color-primary-n);
|
|
112
112
|
transition: outline-offset 75ms ease-out;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
&:not(:active):focus-visible {
|
|
116
116
|
> span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {
|
|
117
117
|
transition-duration: 0.25s;
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
&:not(:active):focus-visible {
|
|
123
123
|
> span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {
|
|
124
124
|
outline-offset: 0.25rem;
|
|
125
125
|
}
|
|
@@ -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, 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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"}
|
package/_internal/Tab2.js
CHANGED
|
@@ -4,6 +4,7 @@ import classNames from 'classnames';
|
|
|
4
4
|
import styled, { css } from 'styled-components';
|
|
5
5
|
import { i as baseStyling, k as focusRing } from './styles5.js';
|
|
6
6
|
import { T as TabsContext } from './context3.js';
|
|
7
|
+
import { b as warnOnMissingContext } from './warnCompoundMisuse.js';
|
|
7
8
|
import { f as getStylingTransientProps } from './styles.js';
|
|
8
9
|
import { u as useTheme } from './useTheme.js';
|
|
9
10
|
|
|
@@ -129,6 +130,9 @@ const Tab = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
129
130
|
forwardedProps = _objectWithoutProperties(otherProps, _excluded);
|
|
130
131
|
const theme = useTheme(propsTheme);
|
|
131
132
|
const context = useContext(TabsContext);
|
|
133
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
134
|
+
warnOnMissingContext(context, 'Tab', 'Tabs');
|
|
135
|
+
}
|
|
132
136
|
const isSelected = (context === null || context === void 0 ? void 0 : context.activeValue) === value;
|
|
133
137
|
const isNavigation = (_context$isNavigation = context === null || context === void 0 ? void 0 : context.isNavigation) !== null && _context$isNavigation !== void 0 ? _context$isNavigation : false;
|
|
134
138
|
const safe = sanitizeValue(value);
|
package/_internal/Tab2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab2.js","sources":["../../src/components/tab/types.ts","../../src/components/tab/styles.ts","../../src/components/tab/Tab.tsx"],"sourcesContent":["import { ComponentProps, ElementType, ReactNode } from 'react';\nimport { ValueOf, StylingProps, StylingTransientProps, Theme } from '../../types';\n\n/**\n * Icon position relative to the label.\n */\nexport const TabIconPosition = {\n start: 'start',\n end: 'end',\n} as const;\nexport type TabIconPosition = ValueOf<typeof TabIconPosition>;\n\n/**\n * Component props.\n */\nexport interface TabProps extends Omit<ComponentProps<'button'>, 'value'>, StylingProps {\n /**\n * Prop to pass a custom component or HTML element instead of a button.\n * Use `\"a\"` or a router Link component for navigation tabs.\n */\n as?: 'a' | ElementType;\n /** URL for the tab when rendered as a link (requires `as`). */\n href?: string;\n /** Optional icon rendered next to the label. */\n icon?: ReactNode;\n /**\n * Position of the icon relative to the label content.\n * @default 'start'\n */\n iconPosition?: TabIconPosition;\n /** Whether the tab is disabled. */\n isDisabled?: boolean;\n /**\n * Tab label. Can be a string or a ReactNode for complex layouts.\n * `children` takes precedence over `label` when both are provided.\n */\n label?: ReactNode;\n /** Theme. */\n theme?: Theme;\n /** Unique value identifying this tab. */\n value: string;\n}\n\nexport interface StyledTabProps extends ComponentProps<'button'>, StylingTransientProps {\n $isDisabled?: boolean;\n $isSelected: boolean;\n $theme: Theme;\n}\n","import styled, { css } from 'styled-components';\nimport { baseStyling, focusRing } from '../shared';\nimport { StyledTabProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledTab = styled.button<StyledTabProps>`\n ${baseStyling}\n ${focusRing}\n\n align-items: center;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n display: inline-flex;\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 gap: 8px;\n justify-content: center;\n line-height: var(--redsift-typography-body-line-height);\n margin-bottom: -1px;\n padding: 8px 16px;\n position: relative;\n text-decoration: none;\n text-transform: uppercase;\n white-space: nowrap;\n\n ${({ $isSelected, $theme }) =>\n $isSelected\n ? css`\n border-bottom-color: var(--redsift-color-primary-n);\n color: var(--redsift-color-primary-n);\n `\n : css`\n color: var(--redsift-color-${$theme}-text-secondary);\n\n &:hover {\n background-color: var(--redsift-color-${$theme}-background-hover);\n border-bottom-color: var(--redsift-color-${$theme}-components-tabs-line);\n }\n `}\n\n ${({ $isDisabled }) =>\n $isDisabled &&\n css`\n cursor: not-allowed;\n opacity: 0.5;\n pointer-events: none;\n `}\n`;\n","import React, { forwardRef, useContext } from 'react';\nimport classNames from 'classnames';\nimport { Comp, getStylingTransientProps } from '../../types';\nimport { TabIconPosition, TabProps } from './types';\nimport { StyledTab } from './styles';\nimport { TabsContext } from '../tabs/context';\nimport { useTheme } from '../theme';\n\nconst COMPONENT_NAME = 'Tab';\nconst CLASSNAME = 'redsift-tab';\n\nconst sanitizeValue = (value: string) => value.replace(/[^A-Za-z0-9\\-_:.]/g, '_');\n\n/**\n * Tab renders an individual tab button within a `Tabs` container.\n * Must be a direct child of `Tabs`.\n *\n * Supports a polymorphic `as` prop for navigation tabs (e.g. links).\n *\n * @example\n * <Tabs defaultValue=\"one\">\n * <Tab value=\"one\">First</Tab>\n * <Tab value=\"two\">Second</Tab>\n * <Tab value=\"three\" isDisabled>Disabled</Tab>\n * </Tabs>\n *\n * @example\n * // With icon\n * <Tab value=\"settings\" icon={<Icon icon={mdiCog} size=\"small\" />}>\n * Settings\n * </Tab>\n *\n * @example\n * // Navigation tab (rendered as a link)\n * <Tab as=\"a\" href=\"/settings\" value=\"settings\">Settings</Tab>\n *\n * @example\n * // Complex label\n * <Tab value=\"sources\" label={<Flexbox gap=\"8px\"><Text>Sources</Text><Pill>12</Pill></Flexbox>} />\n */\nexport const Tab: Comp<TabProps, HTMLButtonElement> = forwardRef((props, ref) => {\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const {\n as: asProp,\n children,\n className,\n href,\n icon,\n iconPosition = TabIconPosition.start,\n isDisabled,\n label,\n onClick,\n theme: propsTheme,\n value,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n const context = useContext(TabsContext);\n const isSelected = context?.activeValue === value;\n const isNavigation = context?.isNavigation ?? false;\n const safe = sanitizeValue(value);\n const prefix = context?.idPrefix ?? 'redsift-tabs';\n const panelId = `${prefix}-tabpanel-${safe}`;\n const tabId = `${prefix}-tab-${safe}`;\n\n const content = children ?? label;\n const resolvedAs = asProp ?? (href ? 'a' : undefined);\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!isDisabled) {\n context?.onSelect(value);\n }\n onClick?.(event);\n };\n\n // Navigation mode: render as link with aria-current instead of tab role\n const ariaProps = isNavigation\n ? {\n 'aria-current': isSelected ? ('page' as const) : undefined,\n 'aria-disabled': isDisabled || undefined,\n role: undefined as undefined,\n }\n : {\n 'aria-controls': panelId,\n 'aria-selected': isSelected,\n role: 'tab' as const,\n };\n\n return (\n <StyledTab\n {...forwardedProps}\n {...transientProps}\n {...ariaProps}\n $isDisabled={isDisabled}\n $isSelected={isSelected}\n $theme={theme}\n as={resolvedAs as any}\n className={classNames(Tab.className, { [`${Tab.className}--selected`]: isSelected }, className)}\n disabled={!isNavigation ? isDisabled : undefined}\n href={href}\n id={tabId}\n onClick={handleClick}\n ref={ref}\n tabIndex={isSelected ? 0 : -1}\n type={resolvedAs ? undefined : 'button'}\n >\n {icon && iconPosition === TabIconPosition.start && icon}\n {content}\n {icon && iconPosition === TabIconPosition.end && icon}\n </StyledTab>\n );\n});\n\nTab.className = CLASSNAME;\nTab.displayName = COMPONENT_NAME;\n"],"names":["TabIconPosition","start","end","StyledTab","styled","button","baseStyling","focusRing","_ref","$isSelected","$theme","css","_ref2","$isDisabled","COMPONENT_NAME","CLASSNAME","sanitizeValue","value","replace","Tab","forwardRef","props","ref","_context$isNavigation","_context$idPrefix","transientProps","otherProps","getStylingTransientProps","as","asProp","children","className","href","icon","iconPosition","isDisabled","label","onClick","theme","propsTheme","forwardedProps","_objectWithoutProperties","_excluded","useTheme","context","useContext","TabsContext","isSelected","activeValue","isNavigation","safe","prefix","idPrefix","panelId","tabId","content","resolvedAs","undefined","handleClick","event","onSelect","ariaProps","role","React","createElement","_extends","classNames","disabled","id","tabIndex","type","displayName"],"mappings":";;;;;;;;;AAGA;AACA;AACA;AACO,MAAMA,eAAe,GAAG;AAC7BC,EAAAA,KAAK,EAAE,OAAO;AACdC,EAAAA,GAAG,EAAE,KAAA;AACP,EAAU;;AAGV;AACA;AACA;;ACVA;AACA;AACA;AACO,MAAMC,SAAS,GAAGC,MAAM,CAACC,MAAuB,CAAA;AACvD,EAAA,EAAIC,WAAY,CAAA;AAChB,EAAA,EAAIC,SAAU,CAAA;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,EAAIC,IAAA,IAAA;EAAA,IAAC;IAAEC,WAAW;AAAEC,IAAAA,MAAAA;AAAO,GAAC,GAAAF,IAAA,CAAA;EAAA,OACxBC,WAAW,GACPE,GAAI,CAAA;AACZ;AACA;AACA,QAAA,CAAS,GACDA,GAAI,CAAA;AACZ,qCAAA,EAAuCD,MAAO,CAAA;AAC9C;AACA;AACA,kDAAA,EAAoDA,MAAO,CAAA;AAC3D,qDAAA,EAAuDA,MAAO,CAAA;AAC9D;AACA,QAAS,CAAA,CAAA;AAAA,CAAC,CAAA;AACV;AACA,EAAA,EAAIE,KAAA,IAAA;EAAA,IAAC;AAAEC,IAAAA,WAAAA;AAAY,GAAC,GAAAD,KAAA,CAAA;EAAA,OAChBC,WAAW,IACXF,GAAI,CAAA;AACR;AACA;AACA;AACA,IAAK,CAAA,CAAA;AAAA,CAAC,CAAA;AACN,CAAC;;;AC5CD,MAAMG,cAAc,GAAG,KAAK,CAAA;AAC5B,MAAMC,SAAS,GAAG,aAAa,CAAA;AAE/B,MAAMC,aAAa,GAAIC,KAAa,IAAKA,KAAK,CAACC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;;AAEjF;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,GAAsC,gBAAGC,UAAU,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAK;EAAA,IAAAC,qBAAA,EAAAC,iBAAA,CAAA;EAC/E,MAAM;IAAEC,cAAc;AAAEC,IAAAA,UAAAA;AAAW,GAAC,GAAGC,wBAAwB,CAACN,KAAK,CAAC,CAAA;EAEtE,MAAM;AACJO,MAAAA,EAAE,EAAEC,MAAM;MACVC,QAAQ;MACRC,SAAS;MACTC,IAAI;MACJC,IAAI;MACJC,YAAY,GAAGlC,eAAe,CAACC,KAAK;MACpCkC,UAAU;MACVC,KAAK;MACLC,OAAO;AACPC,MAAAA,KAAK,EAAEC,UAAU;AACjBtB,MAAAA,KAAAA;AAEF,KAAC,GAAGS,UAAU;AADTc,IAAAA,cAAc,GAAAC,wBAAA,CACff,UAAU,EAAAgB,SAAA,CAAA,CAAA;AAEd,EAAA,MAAMJ,KAAK,GAAGK,QAAQ,CAACJ,UAAU,CAAC,CAAA;AAClC,EAAA,MAAMK,OAAO,GAAGC,UAAU,CAACC,WAAW,CAAC,CAAA;EACvC,MAAMC,UAAU,GAAG,CAAAH,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEI,WAAW,MAAK/B,KAAK,CAAA;AACjD,EAAA,MAAMgC,YAAY,GAAA1B,CAAAA,qBAAA,GAAGqB,OAAO,aAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEK,YAAY,MAAA1B,IAAAA,IAAAA,qBAAA,KAAAA,KAAAA,CAAAA,GAAAA,qBAAA,GAAI,KAAK,CAAA;AACnD,EAAA,MAAM2B,IAAI,GAAGlC,aAAa,CAACC,KAAK,CAAC,CAAA;AACjC,EAAA,MAAMkC,MAAM,GAAA3B,CAAAA,iBAAA,GAAGoB,OAAO,aAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEQ,QAAQ,MAAA5B,IAAAA,IAAAA,iBAAA,KAAAA,KAAAA,CAAAA,GAAAA,iBAAA,GAAI,cAAc,CAAA;AAClD,EAAA,MAAM6B,OAAO,GAAI,CAAA,EAAEF,MAAO,CAAA,UAAA,EAAYD,IAAK,CAAC,CAAA,CAAA;AAC5C,EAAA,MAAMI,KAAK,GAAI,CAAA,EAAEH,MAAO,CAAA,KAAA,EAAOD,IAAK,CAAC,CAAA,CAAA;EAErC,MAAMK,OAAO,GAAGzB,QAAQ,KAAA,IAAA,IAARA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,QAAQ,GAAIM,KAAK,CAAA;AACjC,EAAA,MAAMoB,UAAU,GAAG3B,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,GAANA,MAAM,GAAKG,IAAI,GAAG,GAAG,GAAGyB,SAAU,CAAA;EAErD,MAAMC,WAAW,GAAIC,KAA0C,IAAK;IAClE,IAAI,CAACxB,UAAU,EAAE;MACfS,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAPA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAEgB,QAAQ,CAAC3C,KAAK,CAAC,CAAA;AAC1B,KAAA;AACAoB,IAAAA,OAAO,aAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAGsB,KAAK,CAAC,CAAA;GACjB,CAAA;;AAED;EACA,MAAME,SAAS,GAAGZ,YAAY,GAC1B;AACE,IAAA,cAAc,EAAEF,UAAU,GAAI,MAAM,GAAaU,SAAS;IAC1D,eAAe,EAAEtB,UAAU,IAAIsB,SAAS;AACxCK,IAAAA,IAAI,EAAEL,SAAAA;AACR,GAAC,GACD;AACE,IAAA,eAAe,EAAEJ,OAAO;AACxB,IAAA,eAAe,EAAEN,UAAU;AAC3Be,IAAAA,IAAI,EAAE,KAAA;GACP,CAAA;AAEL,EAAA,oBACEC,cAAA,CAAAC,aAAA,CAAC7D,SAAS,EAAA8D,QAAA,CAAA,EAAA,EACJzB,cAAc,EACdf,cAAc,EACdoC,SAAS,EAAA;AACbhD,IAAAA,WAAW,EAAEsB,UAAW;AACxB1B,IAAAA,WAAW,EAAEsC,UAAW;AACxBrC,IAAAA,MAAM,EAAE4B,KAAM;AACdV,IAAAA,EAAE,EAAE4B,UAAkB;AACtBzB,IAAAA,SAAS,EAAEmC,UAAU,CAAC/C,GAAG,CAACY,SAAS,EAAE;AAAE,MAAA,CAAE,CAAEZ,EAAAA,GAAG,CAACY,SAAU,YAAW,GAAGgB,UAAAA;KAAY,EAAEhB,SAAS,CAAE;AAChGoC,IAAAA,QAAQ,EAAE,CAAClB,YAAY,GAAGd,UAAU,GAAGsB,SAAU;AACjDzB,IAAAA,IAAI,EAAEA,IAAK;AACXoC,IAAAA,EAAE,EAAEd,KAAM;AACVjB,IAAAA,OAAO,EAAEqB,WAAY;AACrBpC,IAAAA,GAAG,EAAEA,GAAI;AACT+C,IAAAA,QAAQ,EAAEtB,UAAU,GAAG,CAAC,GAAG,CAAC,CAAE;AAC9BuB,IAAAA,IAAI,EAAEd,UAAU,GAAGC,SAAS,GAAG,QAAA;GAE9BxB,CAAAA,EAAAA,IAAI,IAAIC,YAAY,KAAKlC,eAAe,CAACC,KAAK,IAAIgC,IAAI,EACtDsB,OAAO,EACPtB,IAAI,IAAIC,YAAY,KAAKlC,eAAe,CAACE,GAAG,IAAI+B,IACxC,CAAC,CAAA;AAEhB,CAAC,EAAC;AAEFd,GAAG,CAACY,SAAS,GAAGhB,SAAS,CAAA;AACzBI,GAAG,CAACoD,WAAW,GAAGzD,cAAc;;;;"}
|
|
1
|
+
{"version":3,"file":"Tab2.js","sources":["../../src/components/tab/types.ts","../../src/components/tab/styles.ts","../../src/components/tab/Tab.tsx"],"sourcesContent":["import { ComponentProps, ElementType, ReactNode } from 'react';\nimport { ValueOf, StylingProps, StylingTransientProps, Theme } from '../../types';\n\n/**\n * Icon position relative to the label.\n */\nexport const TabIconPosition = {\n start: 'start',\n end: 'end',\n} as const;\nexport type TabIconPosition = ValueOf<typeof TabIconPosition>;\n\n/**\n * Component props.\n */\nexport interface TabProps extends Omit<ComponentProps<'button'>, 'value'>, StylingProps {\n /**\n * Prop to pass a custom component or HTML element instead of a button.\n * Use `\"a\"` or a router Link component for navigation tabs.\n */\n as?: 'a' | ElementType;\n /** URL for the tab when rendered as a link (requires `as`). */\n href?: string;\n /** Optional icon rendered next to the label. */\n icon?: ReactNode;\n /**\n * Position of the icon relative to the label content.\n * @default 'start'\n */\n iconPosition?: TabIconPosition;\n /** Whether the tab is disabled. */\n isDisabled?: boolean;\n /**\n * Tab label. Can be a string or a ReactNode for complex layouts.\n * `children` takes precedence over `label` when both are provided.\n */\n label?: ReactNode;\n /** Theme. */\n theme?: Theme;\n /** Unique value identifying this tab. */\n value: string;\n}\n\nexport interface StyledTabProps extends ComponentProps<'button'>, StylingTransientProps {\n $isDisabled?: boolean;\n $isSelected: boolean;\n $theme: Theme;\n}\n","import styled, { css } from 'styled-components';\nimport { baseStyling, focusRing } from '../shared';\nimport { StyledTabProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledTab = styled.button<StyledTabProps>`\n ${baseStyling}\n ${focusRing}\n\n align-items: center;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n display: inline-flex;\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 gap: 8px;\n justify-content: center;\n line-height: var(--redsift-typography-body-line-height);\n margin-bottom: -1px;\n padding: 8px 16px;\n position: relative;\n text-decoration: none;\n text-transform: uppercase;\n white-space: nowrap;\n\n ${({ $isSelected, $theme }) =>\n $isSelected\n ? css`\n border-bottom-color: var(--redsift-color-primary-n);\n color: var(--redsift-color-primary-n);\n `\n : css`\n color: var(--redsift-color-${$theme}-text-secondary);\n\n &:hover {\n background-color: var(--redsift-color-${$theme}-background-hover);\n border-bottom-color: var(--redsift-color-${$theme}-components-tabs-line);\n }\n `}\n\n ${({ $isDisabled }) =>\n $isDisabled &&\n css`\n cursor: not-allowed;\n opacity: 0.5;\n pointer-events: none;\n `}\n`;\n","import React, { forwardRef, useContext } from 'react';\nimport classNames from 'classnames';\nimport { Comp, getStylingTransientProps } from '../../types';\nimport { TabIconPosition, TabProps } from './types';\nimport { StyledTab } from './styles';\nimport { TabsContext } from '../tabs/context';\nimport { useTheme } from '../theme';\nimport { warnOnMissingContext } from '../../utils/warnCompoundMisuse';\n\nconst COMPONENT_NAME = 'Tab';\nconst CLASSNAME = 'redsift-tab';\n\nconst sanitizeValue = (value: string) => value.replace(/[^A-Za-z0-9\\-_:.]/g, '_');\n\n/**\n * Tab renders an individual tab button within a `Tabs` container.\n * Must be a direct child of `Tabs`.\n *\n * Supports a polymorphic `as` prop for navigation tabs (e.g. links).\n *\n * @example\n * <Tabs defaultValue=\"one\">\n * <Tab value=\"one\">First</Tab>\n * <Tab value=\"two\">Second</Tab>\n * <Tab value=\"three\" isDisabled>Disabled</Tab>\n * </Tabs>\n *\n * @example\n * // With icon\n * <Tab value=\"settings\" icon={<Icon icon={mdiCog} size=\"small\" />}>\n * Settings\n * </Tab>\n *\n * @example\n * // Navigation tab (rendered as a link)\n * <Tab as=\"a\" href=\"/settings\" value=\"settings\">Settings</Tab>\n *\n * @example\n * // Complex label\n * <Tab value=\"sources\" label={<Flexbox gap=\"8px\"><Text>Sources</Text><Pill>12</Pill></Flexbox>} />\n */\nexport const Tab: Comp<TabProps, HTMLButtonElement> = forwardRef((props, ref) => {\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const {\n as: asProp,\n children,\n className,\n href,\n icon,\n iconPosition = TabIconPosition.start,\n isDisabled,\n label,\n onClick,\n theme: propsTheme,\n value,\n ...forwardedProps\n } = otherProps;\n\n const theme = useTheme(propsTheme);\n const context = useContext(TabsContext);\n\n if (process.env.NODE_ENV !== 'production') {\n warnOnMissingContext(context, 'Tab', 'Tabs');\n }\n\n const isSelected = context?.activeValue === value;\n const isNavigation = context?.isNavigation ?? false;\n const safe = sanitizeValue(value);\n const prefix = context?.idPrefix ?? 'redsift-tabs';\n const panelId = `${prefix}-tabpanel-${safe}`;\n const tabId = `${prefix}-tab-${safe}`;\n\n const content = children ?? label;\n const resolvedAs = asProp ?? (href ? 'a' : undefined);\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!isDisabled) {\n context?.onSelect(value);\n }\n onClick?.(event);\n };\n\n // Navigation mode: render as link with aria-current instead of tab role\n const ariaProps = isNavigation\n ? {\n 'aria-current': isSelected ? ('page' as const) : undefined,\n 'aria-disabled': isDisabled || undefined,\n role: undefined as undefined,\n }\n : {\n 'aria-controls': panelId,\n 'aria-selected': isSelected,\n role: 'tab' as const,\n };\n\n return (\n <StyledTab\n {...forwardedProps}\n {...transientProps}\n {...ariaProps}\n $isDisabled={isDisabled}\n $isSelected={isSelected}\n $theme={theme}\n as={resolvedAs as any}\n className={classNames(Tab.className, { [`${Tab.className}--selected`]: isSelected }, className)}\n disabled={!isNavigation ? isDisabled : undefined}\n href={href}\n id={tabId}\n onClick={handleClick}\n ref={ref}\n tabIndex={isSelected ? 0 : -1}\n type={resolvedAs ? undefined : 'button'}\n >\n {icon && iconPosition === TabIconPosition.start && icon}\n {content}\n {icon && iconPosition === TabIconPosition.end && icon}\n </StyledTab>\n );\n});\n\nTab.className = CLASSNAME;\nTab.displayName = COMPONENT_NAME;\n"],"names":["TabIconPosition","start","end","StyledTab","styled","button","baseStyling","focusRing","_ref","$isSelected","$theme","css","_ref2","$isDisabled","COMPONENT_NAME","CLASSNAME","sanitizeValue","value","replace","Tab","forwardRef","props","ref","_context$isNavigation","_context$idPrefix","transientProps","otherProps","getStylingTransientProps","as","asProp","children","className","href","icon","iconPosition","isDisabled","label","onClick","theme","propsTheme","forwardedProps","_objectWithoutProperties","_excluded","useTheme","context","useContext","TabsContext","process","env","NODE_ENV","warnOnMissingContext","isSelected","activeValue","isNavigation","safe","prefix","idPrefix","panelId","tabId","content","resolvedAs","undefined","handleClick","event","onSelect","ariaProps","role","React","createElement","_extends","classNames","disabled","id","tabIndex","type","displayName"],"mappings":"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"}
|
package/_internal/TabPanel.js
CHANGED
|
@@ -4,6 +4,7 @@ import classNames from 'classnames';
|
|
|
4
4
|
import styled from 'styled-components';
|
|
5
5
|
import { i as baseStyling } from './styles5.js';
|
|
6
6
|
import { T as TabsContext } from './context3.js';
|
|
7
|
+
import { b as warnOnMissingContext } from './warnCompoundMisuse.js';
|
|
7
8
|
import { f as getStylingTransientProps } from './styles.js';
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -46,6 +47,9 @@ const TabPanel = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
46
47
|
} = otherProps,
|
|
47
48
|
forwardedProps = _objectWithoutProperties(otherProps, _excluded);
|
|
48
49
|
const context = useContext(TabsContext);
|
|
50
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
51
|
+
warnOnMissingContext(context, 'TabPanel', 'Tabs');
|
|
52
|
+
}
|
|
49
53
|
const isActive = (context === null || context === void 0 ? void 0 : context.activeValue) === value;
|
|
50
54
|
const safe = sanitizeValue(value);
|
|
51
55
|
const prefix = (_context$idPrefix = context === null || context === void 0 ? void 0 : context.idPrefix) !== null && _context$idPrefix !== void 0 ? _context$idPrefix : 'redsift-tabs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabPanel.js","sources":["../../src/components/tab-panel/styles.ts","../../src/components/tab-panel/TabPanel.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { StyledTabPanelProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledTabPanel = styled.div<StyledTabPanelProps>`\n ${baseStyling}\n`;\n","import React, { forwardRef, useContext } from 'react';\nimport classNames from 'classnames';\nimport { Comp, getStylingTransientProps } from '../../types';\nimport { TabPanelProps } from './types';\nimport { StyledTabPanel } from './styles';\nimport { TabsContext } from '../tabs/context';\n\nconst COMPONENT_NAME = 'TabPanel';\nconst CLASSNAME = 'redsift-tab-panel';\n\nconst sanitizeValue = (value: string) => value.replace(/[^A-Za-z0-9\\-_:.]/g, '_');\n\n/**\n * TabPanel renders the content for a tab. It is shown when the associated\n * `Tab` is active (matching `value`).\n *\n * Must be used within a `Tabs` provider so it can access the shared `TabsContext`.\n *\n * @example\n * <Tabs defaultValue=\"one\">\n * <Tab value=\"one\">Tab 1</Tab>\n * <Tab value=\"two\">Tab 2</Tab>\n * <TabPanel value=\"one\">Content for tab 1</TabPanel>\n * <TabPanel value=\"two\">Content for tab 2</TabPanel>\n * </Tabs>\n */\nexport const TabPanel: Comp<TabPanelProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const { children, className, keepMounted = false, value, ...forwardedProps } = otherProps;\n\n const context = useContext(TabsContext);\n const isActive = context?.activeValue === value;\n const safe = sanitizeValue(value);\n const prefix = context?.idPrefix ?? 'redsift-tabs';\n const panelId = `${prefix}-tabpanel-${safe}`;\n const tabId = `${prefix}-tab-${safe}`;\n\n if (!isActive && !keepMounted) {\n return null;\n }\n\n return (\n <StyledTabPanel\n {...forwardedProps}\n {...transientProps}\n aria-labelledby={tabId}\n className={classNames(TabPanel.className, className)}\n hidden={!isActive}\n id={panelId}\n ref={ref}\n role=\"tabpanel\"\n tabIndex={0}\n >\n {children}\n </StyledTabPanel>\n );\n});\n\nTabPanel.className = CLASSNAME;\nTabPanel.displayName = COMPONENT_NAME;\n"],"names":["StyledTabPanel","styled","div","baseStyling","COMPONENT_NAME","CLASSNAME","sanitizeValue","value","replace","TabPanel","forwardRef","props","ref","_context$idPrefix","transientProps","otherProps","getStylingTransientProps","children","className","keepMounted","forwardedProps","_objectWithoutProperties","_excluded","context","useContext","TabsContext","isActive","activeValue","safe","prefix","idPrefix","panelId","tabId","React","createElement","_extends","classNames","hidden","id","role","tabIndex","displayName"],"mappings":"
|
|
1
|
+
{"version":3,"file":"TabPanel.js","sources":["../../src/components/tab-panel/styles.ts","../../src/components/tab-panel/TabPanel.tsx"],"sourcesContent":["import styled from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { StyledTabPanelProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledTabPanel = styled.div<StyledTabPanelProps>`\n ${baseStyling}\n`;\n","import React, { forwardRef, useContext } from 'react';\nimport classNames from 'classnames';\nimport { Comp, getStylingTransientProps } from '../../types';\nimport { TabPanelProps } from './types';\nimport { StyledTabPanel } from './styles';\nimport { TabsContext } from '../tabs/context';\nimport { warnOnMissingContext } from '../../utils/warnCompoundMisuse';\n\nconst COMPONENT_NAME = 'TabPanel';\nconst CLASSNAME = 'redsift-tab-panel';\n\nconst sanitizeValue = (value: string) => value.replace(/[^A-Za-z0-9\\-_:.]/g, '_');\n\n/**\n * TabPanel renders the content for a tab. It is shown when the associated\n * `Tab` is active (matching `value`).\n *\n * Must be used within a `Tabs` provider so it can access the shared `TabsContext`.\n *\n * @example\n * <Tabs defaultValue=\"one\">\n * <Tab value=\"one\">Tab 1</Tab>\n * <Tab value=\"two\">Tab 2</Tab>\n * <TabPanel value=\"one\">Content for tab 1</TabPanel>\n * <TabPanel value=\"two\">Content for tab 2</TabPanel>\n * </Tabs>\n */\nexport const TabPanel: Comp<TabPanelProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { transientProps, otherProps } = getStylingTransientProps(props);\n\n const { children, className, keepMounted = false, value, ...forwardedProps } = otherProps;\n\n const context = useContext(TabsContext);\n\n if (process.env.NODE_ENV !== 'production') {\n warnOnMissingContext(context, 'TabPanel', 'Tabs');\n }\n\n const isActive = context?.activeValue === value;\n const safe = sanitizeValue(value);\n const prefix = context?.idPrefix ?? 'redsift-tabs';\n const panelId = `${prefix}-tabpanel-${safe}`;\n const tabId = `${prefix}-tab-${safe}`;\n\n if (!isActive && !keepMounted) {\n return null;\n }\n\n return (\n <StyledTabPanel\n {...forwardedProps}\n {...transientProps}\n aria-labelledby={tabId}\n className={classNames(TabPanel.className, className)}\n hidden={!isActive}\n id={panelId}\n ref={ref}\n role=\"tabpanel\"\n tabIndex={0}\n >\n {children}\n </StyledTabPanel>\n );\n});\n\nTabPanel.className = CLASSNAME;\nTabPanel.displayName = COMPONENT_NAME;\n"],"names":["StyledTabPanel","styled","div","baseStyling","COMPONENT_NAME","CLASSNAME","sanitizeValue","value","replace","TabPanel","forwardRef","props","ref","_context$idPrefix","transientProps","otherProps","getStylingTransientProps","children","className","keepMounted","forwardedProps","_objectWithoutProperties","_excluded","context","useContext","TabsContext","process","env","NODE_ENV","warnOnMissingContext","isActive","activeValue","safe","prefix","idPrefix","panelId","tabId","React","createElement","_extends","classNames","hidden","id","role","tabIndex","displayName"],"mappings":";;;;;;;;;AAIA;AACA;AACA;AACO,MAAMA,cAAc,GAAGC,MAAM,CAACC,GAAyB,CAAA;AAC9D,EAAA,EAAIC,WAAY,CAAA;AAChB,CAAC;;;ACDD,MAAMC,cAAc,GAAG,UAAU,CAAA;AACjC,MAAMC,SAAS,GAAG,mBAAmB,CAAA;AAErC,MAAMC,aAAa,GAAIC,KAAa,IAAKA,KAAK,CAACC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,QAA6C,gBAAGC,UAAU,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAK;AAAA,EAAA,IAAAC,iBAAA,CAAA;EACtF,MAAM;IAAEC,cAAc;AAAEC,IAAAA,UAAAA;AAAW,GAAC,GAAGC,wBAAwB,CAACL,KAAK,CAAC,CAAA;EAEtE,MAAM;MAAEM,QAAQ;MAAEC,SAAS;AAAEC,MAAAA,WAAW,GAAG,KAAK;AAAEZ,MAAAA,KAAAA;AAAyB,KAAC,GAAGQ,UAAU;AAA7BK,IAAAA,cAAc,GAAAC,wBAAA,CAAKN,UAAU,EAAAO,SAAA,CAAA,CAAA;AAEzF,EAAA,MAAMC,OAAO,GAAGC,UAAU,CAACC,WAAW,CAAC,CAAA;AAEvC,EAAA,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;AACzCC,IAAAA,oBAAoB,CAACN,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;AACnD,GAAA;EAEA,MAAMO,QAAQ,GAAG,CAAAP,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEQ,WAAW,MAAKxB,KAAK,CAAA;AAC/C,EAAA,MAAMyB,IAAI,GAAG1B,aAAa,CAACC,KAAK,CAAC,CAAA;AACjC,EAAA,MAAM0B,MAAM,GAAApB,CAAAA,iBAAA,GAAGU,OAAO,aAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEW,QAAQ,MAAArB,IAAAA,IAAAA,iBAAA,KAAAA,KAAAA,CAAAA,GAAAA,iBAAA,GAAI,cAAc,CAAA;AAClD,EAAA,MAAMsB,OAAO,GAAI,CAAA,EAAEF,MAAO,CAAA,UAAA,EAAYD,IAAK,CAAC,CAAA,CAAA;AAC5C,EAAA,MAAMI,KAAK,GAAI,CAAA,EAAEH,MAAO,CAAA,KAAA,EAAOD,IAAK,CAAC,CAAA,CAAA;AAErC,EAAA,IAAI,CAACF,QAAQ,IAAI,CAACX,WAAW,EAAE;AAC7B,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEA,oBACEkB,cAAA,CAAAC,aAAA,CAACtC,cAAc,EAAAuC,QAAA,CAAA,EAAA,EACTnB,cAAc,EACdN,cAAc,EAAA;AAClB,IAAA,iBAAA,EAAiBsB,KAAM;IACvBlB,SAAS,EAAEsB,UAAU,CAAC/B,QAAQ,CAACS,SAAS,EAAEA,SAAS,CAAE;IACrDuB,MAAM,EAAE,CAACX,QAAS;AAClBY,IAAAA,EAAE,EAAEP,OAAQ;AACZvB,IAAAA,GAAG,EAAEA,GAAI;AACT+B,IAAAA,IAAI,EAAC,UAAU;AACfC,IAAAA,QAAQ,EAAE,CAAA;AAAE,GAAA,CAAA,EAEX3B,QACa,CAAC,CAAA;AAErB,CAAC,EAAC;AAEFR,QAAQ,CAACS,SAAS,GAAGb,SAAS,CAAA;AAC9BI,QAAQ,CAACoC,WAAW,GAAGzC,cAAc;;;;"}
|