@skbkontur/react-ui 4.22.3 → 4.22.4
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/CHANGELOG.md +16 -2
- package/cjs/components/Calendar/DayCellView.js +1 -1
- package/cjs/components/Calendar/DayCellView.js.map +1 -1
- package/cjs/components/Kebab/Kebab.js +6 -1
- package/cjs/components/Kebab/Kebab.js.map +1 -1
- package/cjs/components/Link/Link.js +2 -1
- package/cjs/components/Link/Link.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.js +1 -1
- package/cjs/components/MenuItem/MenuItem.js.map +1 -1
- package/cjs/components/Paging/Paging.js +8 -3
- package/cjs/components/Paging/Paging.js.map +1 -1
- package/cjs/components/Tabs/Tab.js +1 -1
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.js +2 -2
- package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
- package/cjs/internal/CommonWrapper/{extractCommonProps.d.ts → utils/extractCommonProps.d.ts} +2 -2
- package/cjs/internal/CommonWrapper/utils/extractCommonProps.js.map +1 -0
- package/cjs/internal/CommonWrapper/{getCommonVisualStateDataAttributes.js → utils/getCommonVisualStateDataAttributes.js} +3 -4
- package/cjs/internal/CommonWrapper/utils/getCommonVisualStateDataAttributes.js.map +1 -0
- package/cjs/internal/CommonWrapper/{getVisualStateDataAttributes.d.ts → utils/getVisualStateDataAttributes.d.ts} +1 -1
- package/cjs/internal/CommonWrapper/{getVisualStateDataAttributes.js → utils/getVisualStateDataAttributes.js} +3 -3
- package/cjs/internal/CommonWrapper/utils/getVisualStateDataAttributes.js.map +1 -0
- package/cjs/internal/CommonWrapper/utils/tryGetBoolean.d.ts +1 -0
- package/cjs/internal/CommonWrapper/utils/tryGetBoolean.js +1 -0
- package/cjs/internal/CommonWrapper/utils/tryGetBoolean.js.map +1 -0
- package/components/Calendar/DayCellView/DayCellView.js +1 -1
- package/components/Calendar/DayCellView/DayCellView.js.map +1 -1
- package/components/Kebab/Kebab/Kebab.js +4 -1
- package/components/Kebab/Kebab/Kebab.js.map +1 -1
- package/components/Link/Link/Link.js +4 -1
- package/components/Link/Link/Link.js.map +1 -1
- package/components/MenuItem/MenuItem/MenuItem.js +1 -1
- package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
- package/components/Paging/Paging/Paging.js +8 -4
- package/components/Paging/Paging/Paging.js.map +1 -1
- package/components/Tabs/Tab/Tab.js +2 -2
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +2 -2
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
- package/internal/CommonWrapper/utils/extractCommonProps/extractCommonProps.js.map +1 -0
- package/internal/CommonWrapper/{extractCommonProps → utils/extractCommonProps}/package.json +1 -1
- package/internal/CommonWrapper/{extractCommonProps.d.ts → utils/extractCommonProps.d.ts} +2 -2
- package/internal/CommonWrapper/{getCommonVisualStateDataAttributes → utils/getCommonVisualStateDataAttributes}/getCommonVisualStateDataAttributes.js +1 -5
- package/internal/CommonWrapper/utils/getCommonVisualStateDataAttributes/getCommonVisualStateDataAttributes.js.map +1 -0
- package/internal/CommonWrapper/{getCommonVisualStateDataAttributes → utils/getCommonVisualStateDataAttributes}/package.json +1 -1
- package/internal/CommonWrapper/{getVisualStateDataAttributes → utils/getVisualStateDataAttributes}/getVisualStateDataAttributes.js +3 -3
- package/internal/CommonWrapper/utils/getVisualStateDataAttributes/getVisualStateDataAttributes.js.map +1 -0
- package/internal/CommonWrapper/{getVisualStateDataAttributes → utils/getVisualStateDataAttributes}/package.json +1 -1
- package/internal/CommonWrapper/{getVisualStateDataAttributes.d.ts → utils/getVisualStateDataAttributes.d.ts} +1 -1
- package/internal/CommonWrapper/utils/tryGetBoolean/package.json +6 -0
- package/internal/CommonWrapper/utils/tryGetBoolean/tryGetBoolean.js +3 -0
- package/internal/CommonWrapper/utils/tryGetBoolean/tryGetBoolean.js.map +1 -0
- package/internal/CommonWrapper/utils/tryGetBoolean.d.ts +1 -0
- package/package.json +3 -3
- package/cjs/internal/CommonWrapper/extractCommonProps.js.map +0 -1
- package/cjs/internal/CommonWrapper/getCommonVisualStateDataAttributes.js.map +0 -1
- package/cjs/internal/CommonWrapper/getVisualStateDataAttributes.js.map +0 -1
- package/internal/CommonWrapper/extractCommonProps/extractCommonProps.js.map +0 -1
- package/internal/CommonWrapper/getCommonVisualStateDataAttributes/getCommonVisualStateDataAttributes.js.map +0 -1
- package/internal/CommonWrapper/getVisualStateDataAttributes/getVisualStateDataAttributes.js.map +0 -1
- /package/cjs/internal/CommonWrapper/{extractCommonProps.js → utils/extractCommonProps.js} +0 -0
- /package/cjs/internal/CommonWrapper/{getCommonVisualStateDataAttributes.d.ts → utils/getCommonVisualStateDataAttributes.d.ts} +0 -0
- /package/internal/CommonWrapper/{extractCommonProps → utils/extractCommonProps}/extractCommonProps.js +0 -0
- /package/internal/CommonWrapper/{getCommonVisualStateDataAttributes.d.ts → utils/getCommonVisualStateDataAttributes.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Link.tsx"],"names":["React","PropTypes","globalObject","keyListener","ThemeContext","isExternalLink","CommonWrapper","cx","rootNode","createPropsGetter","ThemeFactory","isDarkTheme","isTheme2022","isIE11","ReactUIFeatureFlagsContext","getFullReactUIFlagsContext","globalClasses","styles","LinkIcon","LinkDataTids","root","Link","getProps","defaultProps","state","focusedByTab","renderMain","props","disabled","href","icon","rightIcon","use","loading","_button","_buttonOpened","relOrigin","rel","Component","as","focused","rest","_isTheme2022","theme","arrow","isFocused","leftIconElement","rightIconElement","linkProps","className","useRoot","useDefault","useSuccess","useDanger","useGrayed","button","buttonOpened","getLinkClassName","Boolean","onClick","handleClick","onFocus","handleFocus","onBlur","handleBlur","tabIndex","child","children","textWrapper","lineTextWrapper","lineTextWrapperFocused","text","lineText","lineTextIE11","requestAnimationFrame","isTabPressed","setState","event","preventDefault","render","flags","linkFocusOutline","create","setRootNode","isBorderBottom","parseInt","linkLineBorderBottomWidth","focus","useGrayedFocus","lineRoot","disabledDark22Theme","lineFocus","lineFocusSuccess","lineFocusDanger","lineFocusGrayed","focus2022","__KONTUR_REACT_UI__","displayName","propTypes","bool","string","node","oneOf"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { isExternalLink } from '../../lib/utils';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter, DefaultizedProps } from '../../lib/createPropsGetter';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { isDarkTheme, isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isIE11 } from '../../lib/client';\nimport { ReactUIFeatureFlagsContext, getFullReactUIFlagsContext } from '../../lib/featureFlagsContext';\n\nimport { globalClasses, styles } from './Link.styles';\nimport { LinkIcon } from './LinkIcon';\n\nexport interface LinkProps\n extends Pick<AriaAttributes, 'aria-label'>,\n CommonProps,\n Override<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n {\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * HTML-атрибут `href`.\n */\n href?: string;\n /**\n * Добавляет ссылке иконку слева.\n */\n icon?: React.ReactElement;\n /**\n * Добавляет ссылке иконку справа.\n */\n rightIcon?: React.ReactElement;\n /**\n * Тема ссылки.\n */\n use?: 'default' | 'success' | 'danger' | 'grayed';\n /**\n * @ignore\n */\n _button?: boolean;\n /**\n * @ignore\n */\n _buttonOpened?: boolean;\n /**\n * HTML-атрибут `tabindex`.\n */\n tabIndex?: number;\n /**\n * Переводит ссылку в состояние загрузки.\n */\n loading?: boolean;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n\n /**\n * Обычный объект с переменными темы.\n * Он будет объединён с темой из контекста.\n */\n theme?: ThemeIn;\n /**\n * Компонент, используемый в качестве корневого узла.\n * @ignore\n */\n as?: React.ElementType | keyof React.ReactHTML;\n /**\n * @ignore\n */\n focused?: boolean;\n }\n > {}\n\nexport interface LinkState {\n focusedByTab: boolean;\n}\n\nexport const LinkDataTids = {\n root: 'Link__root',\n} as const;\n\ntype DefaultProps = Required<Pick<LinkProps, 'href' | 'use' | 'as'>>;\ntype DefaultizedLinkProps = DefaultizedProps<LinkProps, DefaultProps>;\n\n/**\n * Элемент ссылки из HTML.\n */\n@rootNode\nexport class Link extends React.Component<LinkProps, LinkState> {\n public static __KONTUR_REACT_UI__ = 'Link';\n public static displayName = 'Link';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n use: PropTypes.oneOf(['default', 'success', 'danger', 'grayed']),\n };\n\n public static defaultProps: DefaultProps = {\n href: '',\n use: 'default',\n as: 'a',\n };\n\n private getProps = createPropsGetter(Link.defaultProps);\n\n public state: LinkState = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n private linkFocusOutline?: boolean;\n\n public render(): JSX.Element {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.linkFocusOutline = getFullReactUIFlagsContext(flags).linkFocusOutline;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderMain = (props: CommonWrapperRestProps<DefaultizedLinkProps>) => {\n const {\n disabled,\n href,\n icon,\n rightIcon,\n use,\n loading,\n _button,\n _buttonOpened,\n rel: relOrigin,\n as: Component,\n focused = false,\n ...rest\n } = props;\n const _isTheme2022 = isTheme2022(this.theme);\n\n let arrow = null;\n if (_button) {\n arrow = <span className={styles.arrow()} />;\n }\n\n let rel = relOrigin;\n if (typeof rel === 'undefined' && href) {\n rel = `noopener${isExternalLink(href) ? ' noreferrer' : ''}`;\n }\n\n const isFocused = !disabled && (this.state.focusedByTab || focused);\n\n const leftIconElement = icon && <LinkIcon icon={icon} loading={loading} position=\"left\" />;\n const rightIconElement = rightIcon && (\n <LinkIcon hasBothIcons={!!icon && !!rightIcon} icon={rightIcon} loading={loading} position=\"right\" />\n );\n\n const linkProps = {\n className: cx(\n styles.useRoot(),\n use === 'default' && styles.useDefault(this.theme),\n use === 'success' && styles.useSuccess(this.theme),\n use === 'danger' && styles.useDanger(this.theme),\n use === 'grayed' && styles.useGrayed(this.theme),\n !!_button && styles.button(this.theme),\n !!_buttonOpened && styles.buttonOpened(this.theme),\n this.getLinkClassName(isFocused, Boolean(disabled || loading), _isTheme2022),\n ),\n href,\n rel,\n onClick: this.handleClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n tabIndex: disabled || loading ? -1 : this.props.tabIndex,\n };\n\n let child = this.props.children;\n if (_isTheme2022) {\n // lineTextWrapper нужен для реализации transition у подчеркивания\n child = (\n <span\n className={cx(globalClasses.textWrapper, styles.lineTextWrapper(this.theme), {\n [styles.lineTextWrapperFocused(this.theme)]: isFocused,\n })}\n >\n <span\n className={cx(globalClasses.text, {\n [styles.lineText(this.theme)]: !isIE11,\n [styles.lineTextIE11(this.theme)]: isIE11,\n })}\n >\n {this.props.children}\n </span>\n </span>\n );\n }\n\n return (\n <Component data-tid={LinkDataTids.root} {...rest} {...linkProps}>\n {leftIconElement}\n {child}\n {rightIconElement}\n {arrow}\n </Component>\n );\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n\n private handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n const { onClick, disabled, loading } = this.props;\n const href = this.getProps().href;\n if (!href) {\n event.preventDefault();\n }\n if (onClick && !disabled && !loading) {\n onClick(event);\n }\n };\n\n private getLinkClassName(focused: boolean, disabled: boolean, _isTheme2022: boolean): string {\n const { use } = this.getProps();\n const isBorderBottom = parseInt(this.theme.linkLineBorderBottomWidth) > 0;\n const isFocused = focused && !disabled;\n\n return !isBorderBottom\n ? cx(\n styles.root(this.theme),\n isFocused && styles.focus(this.theme),\n disabled && styles.disabled(this.theme),\n use === 'grayed' && focused && styles.useGrayedFocus(this.theme),\n )\n : cx(\n styles.lineRoot(),\n disabled && styles.disabled(this.theme),\n disabled && _isTheme2022 && isDarkTheme(this.theme) && styles.disabledDark22Theme(this.theme),\n isFocused && use === 'default' && styles.lineFocus(this.theme),\n isFocused && use === 'success' && styles.lineFocusSuccess(this.theme),\n isFocused && use === 'danger' && styles.lineFocusDanger(this.theme),\n isFocused && use === 'grayed' && styles.lineFocusGrayed(this.theme),\n isFocused && _isTheme2022 && this.linkFocusOutline && styles.focus2022(this.theme),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Link.tsx"],"names":["React","PropTypes","globalObject","keyListener","ThemeContext","isExternalLink","CommonWrapper","cx","rootNode","createPropsGetter","ThemeFactory","isDarkTheme","isTheme2022","isIE11","ReactUIFeatureFlagsContext","getFullReactUIFlagsContext","getVisualStateDataAttributes","globalClasses","styles","LinkIcon","LinkDataTids","root","Link","getProps","defaultProps","state","focusedByTab","renderMain","props","disabled","href","icon","rightIcon","use","loading","_button","_buttonOpened","relOrigin","rel","Component","as","focused","rest","_isTheme2022","theme","arrow","isFocused","leftIconElement","rightIconElement","linkProps","className","useRoot","useDefault","useSuccess","useDanger","useGrayed","button","buttonOpened","getLinkClassName","Boolean","onClick","handleClick","onFocus","handleFocus","onBlur","handleBlur","tabIndex","child","children","textWrapper","lineTextWrapper","lineTextWrapperFocused","text","lineText","lineTextIE11","requestAnimationFrame","isTabPressed","setState","event","preventDefault","render","flags","linkFocusOutline","create","setRootNode","isBorderBottom","parseInt","linkLineBorderBottomWidth","focus","useGrayedFocus","lineRoot","disabledDark22Theme","lineFocus","lineFocusSuccess","lineFocusDanger","lineFocusGrayed","focus2022","__KONTUR_REACT_UI__","displayName","propTypes","bool","string","node","oneOf"],"mappings":"+XAAA,OAAOA,KAAP,MAAsC,OAAtC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,YAAT,QAA6B,0BAA7B;;;AAGA,SAASC,WAAT,QAA4B,8BAA5B;;AAEA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,cAAT,QAA+B,iBAA/B;AACA,SAAsBC,aAAtB,QAAmE,8BAAnE;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,QAAT,QAAuC,oBAAvC;AACA,SAASC,iBAAT,QAAoD,6BAApD;AACA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,WAAT,EAAsBC,WAAtB,QAAyC,gCAAzC;AACA,SAASC,MAAT,QAAuB,kBAAvB;AACA,SAASC,0BAAT,EAAqCC,0BAArC,QAAuE,+BAAvE;AACA,SAASC,4BAAT,QAA6C,iEAA7C;;AAEA,SAASC,aAAT,EAAwBC,MAAxB,QAAsC,eAAtC;AACA,SAASC,QAAT,QAAyB,YAAzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,OAAO,IAAMC,YAAY,GAAG;AAC1BC,EAAAA,IAAI,EAAE,YADoB,EAArB;;;;;;;;;;AAWP,OAJA;AACA;AACA,GAEA,IAAaC,IAAb,GADCd,QACD;;;;;;;;;;;;;;;;;;AAoBUe,IAAAA,QApBV,GAoBqBd,iBAAiB,CAACa,IAAI,CAACE,YAAN,CApBtC;;AAsBSC,IAAAA,KAtBT,GAsB4B;AACxBC,MAAAA,YAAY,EAAE,KADU,EAtB5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDUC,IAAAA,UApDV,GAoDuB,UAACC,KAAD,EAAyD;AAC5E;AACEC,MAAAA,QADF;;;;;;;;;;;;AAaID,MAAAA,KAbJ,CACEC,QADF,CAEEC,IAFF,GAaIF,KAbJ,CAEEE,IAFF,CAGEC,IAHF,GAaIH,KAbJ,CAGEG,IAHF,CAIEC,SAJF,GAaIJ,KAbJ,CAIEI,SAJF,CAKEC,GALF,GAaIL,KAbJ,CAKEK,GALF,CAMEC,OANF,GAaIN,KAbJ,CAMEM,OANF,CAOEC,OAPF,GAaIP,KAbJ,CAOEO,OAPF,CAQEC,aARF,GAaIR,KAbJ,CAQEQ,aARF,CASOC,SATP,GAaIT,KAbJ,CASEU,GATF,CAUMC,SAVN,GAaIX,KAbJ,CAUEY,EAVF,kBAaIZ,KAbJ,CAWEa,OAXF,CAWEA,OAXF,+BAWY,KAXZ,kBAYKC,IAZL,iCAaId,KAbJ;AAcA,UAAMe,YAAY,GAAG/B,WAAW,CAAC,MAAKgC,KAAN,CAAhC;;AAEA,UAAIC,KAAK,GAAG,IAAZ;AACA,UAAIV,OAAJ,EAAa;AACXU,QAAAA,KAAK,gBAAG,8BAAM,SAAS,EAAE3B,MAAM,CAAC2B,KAAP,EAAjB,GAAR;AACD;;AAED,UAAIP,GAAG,GAAGD,SAAV;AACA,UAAI,OAAOC,GAAP,KAAe,WAAf,IAA8BR,IAAlC,EAAwC;AACtCQ,QAAAA,GAAG,iBAAcjC,cAAc,CAACyB,IAAD,CAAd,GAAuB,aAAvB,GAAuC,EAArD,CAAH;AACD;;AAED,UAAMgB,SAAS,GAAG,CAACjB,QAAD,KAAc,MAAKJ,KAAL,CAAWC,YAAX,IAA2Be,OAAzC,CAAlB;;AAEA,UAAMM,eAAe,GAAGhB,IAAI,iBAAI,oBAAC,QAAD,IAAU,IAAI,EAAEA,IAAhB,EAAsB,OAAO,EAAEG,OAA/B,EAAwC,QAAQ,EAAC,MAAjD,GAAhC;AACA,UAAMc,gBAAgB,GAAGhB,SAAS;AAChC,0BAAC,QAAD,IAAU,YAAY,EAAE,CAAC,CAACD,IAAF,IAAU,CAAC,CAACC,SAApC,EAA+C,IAAI,EAAEA,SAArD,EAAgE,OAAO,EAAEE,OAAzE,EAAkF,QAAQ,EAAC,OAA3F,GADF;;;AAIA,UAAMe,SAAS,GAAG;AAChBC,QAAAA,SAAS,EAAE3C,EAAE;AACXW,QAAAA,MAAM,CAACiC,OAAP,EADW;AAEXlB,QAAAA,GAAG,KAAK,SAAR,IAAqBf,MAAM,CAACkC,UAAP,CAAkB,MAAKR,KAAvB,CAFV;AAGXX,QAAAA,GAAG,KAAK,SAAR,IAAqBf,MAAM,CAACmC,UAAP,CAAkB,MAAKT,KAAvB,CAHV;AAIXX,QAAAA,GAAG,KAAK,QAAR,IAAoBf,MAAM,CAACoC,SAAP,CAAiB,MAAKV,KAAtB,CAJT;AAKXX,QAAAA,GAAG,KAAK,QAAR,IAAoBf,MAAM,CAACqC,SAAP,CAAiB,MAAKX,KAAtB,CALT;AAMX,SAAC,CAACT,OAAF,IAAajB,MAAM,CAACsC,MAAP,CAAc,MAAKZ,KAAnB,CANF;AAOX,SAAC,CAACR,aAAF,IAAmBlB,MAAM,CAACuC,YAAP,CAAoB,MAAKb,KAAzB,CAPR;AAQX,cAAKc,gBAAL,CAAsBZ,SAAtB,EAAiCa,OAAO,CAAC9B,QAAQ,IAAIK,OAAb,CAAxC,EAA+DS,YAA/D,CARW,CADG;;AAWhBb,QAAAA,IAAI,EAAJA,IAXgB;AAYhBQ,QAAAA,GAAG,EAAHA,GAZgB;AAahBsB,QAAAA,OAAO,EAAE,MAAKC,WAbE;AAchBC,QAAAA,OAAO,EAAE,MAAKC,WAdE;AAehBC,QAAAA,MAAM,EAAE,MAAKC,UAfG;AAgBhBC,QAAAA,QAAQ,EAAErC,QAAQ,IAAIK,OAAZ,GAAsB,CAAC,CAAvB,GAA2B,MAAKN,KAAL,CAAWsC,QAhBhC,EAAlB;;;AAmBA,UAAIC,KAAK,GAAG,MAAKvC,KAAL,CAAWwC,QAAvB;AACA,UAAIzB,YAAJ,EAAkB;AAChB;AACAwB,QAAAA,KAAK;AACH;AACE,UAAA,SAAS,EAAE5D,EAAE,CAACU,aAAa,CAACoD,WAAf,EAA4BnD,MAAM,CAACoD,eAAP,CAAuB,MAAK1B,KAA5B,CAA5B;AACV1B,UAAAA,MAAM,CAACqD,sBAAP,CAA8B,MAAK3B,KAAnC,CADU,IACkCE,SADlC,OADf;;;AAKE;AACE,UAAA,SAAS,EAAEvC,EAAE,CAACU,aAAa,CAACuD,IAAf;AACVtD,UAAAA,MAAM,CAACuD,QAAP,CAAgB,MAAK7B,KAArB,CADU,IACoB,CAAC/B,MADrB;AAEVK,UAAAA,MAAM,CAACwD,YAAP,CAAoB,MAAK9B,KAAzB,CAFU,IAEwB/B,MAFxB,QADf;;;AAMG,cAAKe,KAAL,CAAWwC,QANd,CALF,CADF;;;;AAgBD;;AAED;AACE,4BAAC,SAAD,aAAW,YAAUhD,YAAY,CAACC,IAAlC,IAA4CqB,IAA5C,EAAsDO,SAAtD,EAAqEjC,4BAA4B,CAAC,EAAEa,QAAQ,EAARA,QAAF,EAAD,CAAjG;AACGkB,QAAAA,eADH;AAEGoB,QAAAA,KAFH;AAGGnB,QAAAA,gBAHH;AAIGH,QAAAA,KAJH,CADF;;;AAQD,KAtIH;;AAwIUkB,IAAAA,WAxIV,GAwIwB,YAAM;AAC1B,UAAI,CAAC,MAAKnC,KAAL,CAAWC,QAAhB,EAA0B;AACxB;AACA;AACA3B,QAAAA,YAAY,CAACyE,qBAAb,oBAAAzE,YAAY,CAACyE,qBAAb,CAAqC,YAAM;AACzC,cAAIxE,WAAW,CAACyE,YAAhB,EAA8B;AAC5B,kBAAKC,QAAL,CAAc,EAAEnD,YAAY,EAAE,IAAhB,EAAd;AACD;AACF,SAJD;AAKD;AACF,KAlJH;;AAoJUuC,IAAAA,UApJV,GAoJuB,YAAM;AACzB,YAAKY,QAAL,CAAc,EAAEnD,YAAY,EAAE,KAAhB,EAAd;AACD,KAtJH;;AAwJUmC,IAAAA,WAxJV,GAwJwB,UAACiB,KAAD,EAAgD;AACpE,wBAAuC,MAAKlD,KAA5C,CAAQgC,OAAR,eAAQA,OAAR,CAAiB/B,QAAjB,eAAiBA,QAAjB,CAA2BK,OAA3B,eAA2BA,OAA3B;AACA,UAAMJ,IAAI,GAAG,MAAKP,QAAL,GAAgBO,IAA7B;AACA,UAAI,CAACA,IAAL,EAAW;AACTgD,QAAAA,KAAK,CAACC,cAAN;AACD;AACD,UAAInB,OAAO,IAAI,CAAC/B,QAAZ,IAAwB,CAACK,OAA7B,EAAsC;AACpC0B,QAAAA,OAAO,CAACkB,KAAD,CAAP;AACD;AACF,KAjKH,kDA8BSE,MA9BT,GA8BE,kBAA6B,mBAC3B,oBACE,oBAAC,0BAAD,CAA4B,QAA5B,QACG,UAACC,KAAD,EAAW,CACV,MAAI,CAACC,gBAAL,GAAwBnE,0BAA0B,CAACkE,KAAD,CAA1B,CAAkCC,gBAA1D,CACA,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACtC,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAa,MAAI,CAAChB,KAAL,CAAWgB,KAAX,GAAmBlC,YAAY,CAACyE,MAAb,CAAoB,MAAI,CAACvD,KAAL,CAAWgB,KAA/B,EAA+CA,KAA/C,CAAnB,GAA2EA,KAAxF,CACA,oBACE,oBAAC,aAAD,aAAe,WAAW,EAAE,MAAI,CAACwC,WAAjC,IAAkD,MAAI,CAAC7D,QAAL,EAAlD,GACG,MAAI,CAACI,UADR,CADF,CAKD,CARH,CADF,CAYD,CAfH,CADF,CAmBD,CAlDH;;AAmKU+B,EAAAA,gBAnKV,GAmKE,0BAAyBjB,OAAzB,EAA2CZ,QAA3C,EAA8Dc,YAA9D,EAA6F;AAC3F,yBAAgB,KAAKpB,QAAL,EAAhB,CAAQU,GAAR,kBAAQA,GAAR;AACA,QAAMoD,cAAc,GAAGC,QAAQ,CAAC,KAAK1C,KAAL,CAAW2C,yBAAZ,CAAR,GAAiD,CAAxE;AACA,QAAMzC,SAAS,GAAGL,OAAO,IAAI,CAACZ,QAA9B;;AAEA,WAAO,CAACwD,cAAD;AACH9E,IAAAA,EAAE;AACAW,IAAAA,MAAM,CAACG,IAAP,CAAY,KAAKuB,KAAjB,CADA;AAEAE,IAAAA,SAAS,IAAI5B,MAAM,CAACsE,KAAP,CAAa,KAAK5C,KAAlB,CAFb;AAGAf,IAAAA,QAAQ,IAAIX,MAAM,CAACW,QAAP,CAAgB,KAAKe,KAArB,CAHZ;AAIAX,IAAAA,GAAG,KAAK,QAAR,IAAoBQ,OAApB,IAA+BvB,MAAM,CAACuE,cAAP,CAAsB,KAAK7C,KAA3B,CAJ/B,CADC;;AAOHrC,IAAAA,EAAE;AACAW,IAAAA,MAAM,CAACwE,QAAP,EADA;AAEA7D,IAAAA,QAAQ,IAAIX,MAAM,CAACW,QAAP,CAAgB,KAAKe,KAArB,CAFZ;AAGAf,IAAAA,QAAQ,IAAIc,YAAZ,IAA4BhC,WAAW,CAAC,KAAKiC,KAAN,CAAvC,IAAuD1B,MAAM,CAACyE,mBAAP,CAA2B,KAAK/C,KAAhC,CAHvD;AAIAE,IAAAA,SAAS,IAAIb,GAAG,KAAK,SAArB,IAAkCf,MAAM,CAAC0E,SAAP,CAAiB,KAAKhD,KAAtB,CAJlC;AAKAE,IAAAA,SAAS,IAAIb,GAAG,KAAK,SAArB,IAAkCf,MAAM,CAAC2E,gBAAP,CAAwB,KAAKjD,KAA7B,CALlC;AAMAE,IAAAA,SAAS,IAAIb,GAAG,KAAK,QAArB,IAAiCf,MAAM,CAAC4E,eAAP,CAAuB,KAAKlD,KAA5B,CANjC;AAOAE,IAAAA,SAAS,IAAIb,GAAG,KAAK,QAArB,IAAiCf,MAAM,CAAC6E,eAAP,CAAuB,KAAKnD,KAA5B,CAPjC;AAQAE,IAAAA,SAAS,IAAIH,YAAb,IAA6B,KAAKuC,gBAAlC,IAAsDhE,MAAM,CAAC8E,SAAP,CAAiB,KAAKpD,KAAtB,CARtD,CAPN;;AAiBD,GAzLH,eAA0B5C,KAAK,CAACuC,SAAhC,WACgB0D,mBADhB,GACsC,MADtC,UAEgBC,WAFhB,GAE8B,MAF9B,UAIgBC,SAJhB,GAI4B,EACxBtE,QAAQ,EAAE5B,SAAS,CAACmG,IADI,EAGxBtE,IAAI,EAAE7B,SAAS,CAACoG,MAHQ,EAKxBtE,IAAI,EAAE9B,SAAS,CAACqG,IALQ,EAOxBrE,GAAG,EAAEhC,SAAS,CAACsG,KAAV,CAAgB,CAAC,SAAD,EAAY,SAAZ,EAAuB,QAAvB,EAAiC,QAAjC,CAAhB,CAPmB,EAJ5B,UAcgB/E,YAdhB,GAc6C,EACzCM,IAAI,EAAE,EADmC,EAEzCG,GAAG,EAAE,SAFoC,EAGzCO,EAAE,EAAE,GAHqC,EAd7C","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { isExternalLink } from '../../lib/utils';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter, DefaultizedProps } from '../../lib/createPropsGetter';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { isDarkTheme, isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isIE11 } from '../../lib/client';\nimport { ReactUIFeatureFlagsContext, getFullReactUIFlagsContext } from '../../lib/featureFlagsContext';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { globalClasses, styles } from './Link.styles';\nimport { LinkIcon } from './LinkIcon';\n\nexport interface LinkProps\n extends Pick<AriaAttributes, 'aria-label'>,\n CommonProps,\n Override<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n {\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * HTML-атрибут `href`.\n */\n href?: string;\n /**\n * Добавляет ссылке иконку слева.\n */\n icon?: React.ReactElement;\n /**\n * Добавляет ссылке иконку справа.\n */\n rightIcon?: React.ReactElement;\n /**\n * Тема ссылки.\n */\n use?: 'default' | 'success' | 'danger' | 'grayed';\n /**\n * @ignore\n */\n _button?: boolean;\n /**\n * @ignore\n */\n _buttonOpened?: boolean;\n /**\n * HTML-атрибут `tabindex`.\n */\n tabIndex?: number;\n /**\n * Переводит ссылку в состояние загрузки.\n */\n loading?: boolean;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n\n /**\n * Обычный объект с переменными темы.\n * Он будет объединён с темой из контекста.\n */\n theme?: ThemeIn;\n /**\n * Компонент, используемый в качестве корневого узла.\n * @ignore\n */\n as?: React.ElementType | keyof React.ReactHTML;\n /**\n * @ignore\n */\n focused?: boolean;\n }\n > {}\n\nexport interface LinkState {\n focusedByTab: boolean;\n}\n\nexport const LinkDataTids = {\n root: 'Link__root',\n} as const;\n\ntype DefaultProps = Required<Pick<LinkProps, 'href' | 'use' | 'as'>>;\ntype DefaultizedLinkProps = DefaultizedProps<LinkProps, DefaultProps>;\n\n/**\n * Элемент ссылки из HTML.\n */\n@rootNode\nexport class Link extends React.Component<LinkProps, LinkState> {\n public static __KONTUR_REACT_UI__ = 'Link';\n public static displayName = 'Link';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n use: PropTypes.oneOf(['default', 'success', 'danger', 'grayed']),\n };\n\n public static defaultProps: DefaultProps = {\n href: '',\n use: 'default',\n as: 'a',\n };\n\n private getProps = createPropsGetter(Link.defaultProps);\n\n public state: LinkState = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n private linkFocusOutline?: boolean;\n\n public render(): JSX.Element {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.linkFocusOutline = getFullReactUIFlagsContext(flags).linkFocusOutline;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderMain = (props: CommonWrapperRestProps<DefaultizedLinkProps>) => {\n const {\n disabled,\n href,\n icon,\n rightIcon,\n use,\n loading,\n _button,\n _buttonOpened,\n rel: relOrigin,\n as: Component,\n focused = false,\n ...rest\n } = props;\n const _isTheme2022 = isTheme2022(this.theme);\n\n let arrow = null;\n if (_button) {\n arrow = <span className={styles.arrow()} />;\n }\n\n let rel = relOrigin;\n if (typeof rel === 'undefined' && href) {\n rel = `noopener${isExternalLink(href) ? ' noreferrer' : ''}`;\n }\n\n const isFocused = !disabled && (this.state.focusedByTab || focused);\n\n const leftIconElement = icon && <LinkIcon icon={icon} loading={loading} position=\"left\" />;\n const rightIconElement = rightIcon && (\n <LinkIcon hasBothIcons={!!icon && !!rightIcon} icon={rightIcon} loading={loading} position=\"right\" />\n );\n\n const linkProps = {\n className: cx(\n styles.useRoot(),\n use === 'default' && styles.useDefault(this.theme),\n use === 'success' && styles.useSuccess(this.theme),\n use === 'danger' && styles.useDanger(this.theme),\n use === 'grayed' && styles.useGrayed(this.theme),\n !!_button && styles.button(this.theme),\n !!_buttonOpened && styles.buttonOpened(this.theme),\n this.getLinkClassName(isFocused, Boolean(disabled || loading), _isTheme2022),\n ),\n href,\n rel,\n onClick: this.handleClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n tabIndex: disabled || loading ? -1 : this.props.tabIndex,\n };\n\n let child = this.props.children;\n if (_isTheme2022) {\n // lineTextWrapper нужен для реализации transition у подчеркивания\n child = (\n <span\n className={cx(globalClasses.textWrapper, styles.lineTextWrapper(this.theme), {\n [styles.lineTextWrapperFocused(this.theme)]: isFocused,\n })}\n >\n <span\n className={cx(globalClasses.text, {\n [styles.lineText(this.theme)]: !isIE11,\n [styles.lineTextIE11(this.theme)]: isIE11,\n })}\n >\n {this.props.children}\n </span>\n </span>\n );\n }\n\n return (\n <Component data-tid={LinkDataTids.root} {...rest} {...linkProps} {...getVisualStateDataAttributes({ disabled })}>\n {leftIconElement}\n {child}\n {rightIconElement}\n {arrow}\n </Component>\n );\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n\n private handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n const { onClick, disabled, loading } = this.props;\n const href = this.getProps().href;\n if (!href) {\n event.preventDefault();\n }\n if (onClick && !disabled && !loading) {\n onClick(event);\n }\n };\n\n private getLinkClassName(focused: boolean, disabled: boolean, _isTheme2022: boolean): string {\n const { use } = this.getProps();\n const isBorderBottom = parseInt(this.theme.linkLineBorderBottomWidth) > 0;\n const isFocused = focused && !disabled;\n\n return !isBorderBottom\n ? cx(\n styles.root(this.theme),\n isFocused && styles.focus(this.theme),\n disabled && styles.disabled(this.theme),\n use === 'grayed' && focused && styles.useGrayedFocus(this.theme),\n )\n : cx(\n styles.lineRoot(),\n disabled && styles.disabled(this.theme),\n disabled && _isTheme2022 && isDarkTheme(this.theme) && styles.disabledDark22Theme(this.theme),\n isFocused && use === 'default' && styles.lineFocus(this.theme),\n isFocused && use === 'success' && styles.lineFocusSuccess(this.theme),\n isFocused && use === 'danger' && styles.lineFocusDanger(this.theme),\n isFocused && use === 'grayed' && styles.lineFocusGrayed(this.theme),\n isFocused && _isTheme2022 && this.linkFocusOutline && styles.focus2022(this.theme),\n );\n }\n}\n"]}
|
|
@@ -20,7 +20,7 @@ import { cx } from "../../../lib/theming/Emotion";
|
|
|
20
20
|
import { rootNode } from "../../../lib/rootNode";
|
|
21
21
|
import { MenuContext } from "../../../internal/Menu/MenuContext";
|
|
22
22
|
import { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from "../../../lib/featureFlagsContext";
|
|
23
|
-
import { getVisualStateDataAttributes } from "../../../internal/CommonWrapper/getVisualStateDataAttributes";
|
|
23
|
+
import { getVisualStateDataAttributes } from "../../../internal/CommonWrapper/utils/getVisualStateDataAttributes";
|
|
24
24
|
import { styles } from "../MenuItem.styles";
|
|
25
25
|
/**
|
|
26
26
|
* @deprecated use SizeProp
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MenuItem.tsx"],"names":["React","PropTypes","globalObject","isBrowser","isExternalLink","isFunction","isNonNullable","isReactUIComponent","ThemeContext","CommonWrapper","cx","rootNode","MenuContext","getFullReactUIFlagsContext","ReactUIFeatureFlagsContext","getVisualStateDataAttributes","styles","MenuItemDataTids","root","content","comment","MenuItem","state","iconOffsetTop","highlighted","mouseEntered","rootRef","contentRef","createRef","highlight","setState","unhighlight","select","event","handleClick","isEnabled","props","disabled","navigate","href","target","window","open","location","renderMain","link","icon","loose","size","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","rel","isNotSelectable","rest","iconElement","top","theme","getIconSizeClassName","className","getRootSizeClassName","rootMobile","hover","isHover","selected","isSelected","getWithIconSizeClassName","Boolean","context","enableIconPadding","children","Component","getComponent","setRootRef","activeState","handleMouseEnterFix","handleMouseLeave","undefined","mobileContentWithIcon","commentHover","e","menuItemsAtAnyLevel","navigation","onClick","onItemClick","element","hasIconAmongItems","items","some","item","render","flags","setRootNode","componentDidMount","getComputedStyle","getPropertyValue","current","add","setEnableIconPadding","componentWillUnmount","remove","componentDidUpdate","prevProps","rootLarge","rootMedium","rootSmall","iconLarge","iconMedium","iconSmall","withIconLarge","withIconMedium","withIconSmall","__KONTUR_REACT_UI__","displayName","__MENU_ITEM__","propTypes","node","bool","string","func","contextType","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isNonNullable, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { SizeProp } from '../../lib/types/props';\nimport { MenuContext, MenuContextType } from '../../internal/Menu/MenuContext';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/getVisualStateDataAttributes';\n\nimport { styles } from './MenuItem.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuItemSize = SizeProp;\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Omit<CommonProps, 'children'> {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * Размер\n */\n size?: SizeProp;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n /**\n * Запрещает выделение и выбор данного пункта меню\n *\n */\n isNotSelectable?: boolean;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n content: 'MenuItem__content',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static displayName = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n\n size: PropTypes.string,\n };\n\n public state = {\n iconOffsetTop: 0,\n highlighted: false,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n private contentRef = React.createRef<HTMLElement>();\n private menuItemsAtAnyLevel?: boolean;\n static contextType = MenuContext;\n\n public context!: MenuContextType;\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.menuItemsAtAnyLevel = getFullReactUIFlagsContext(flags).menuItemsAtAnyLevel;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({\n hover: this.isHover,\n selected: this.isSelected,\n })}\n {...this.props}\n >\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef && isBrowser(globalObject)) {\n this.setState({ iconOffsetTop: globalObject.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n if (this.contentRef.current && this.menuItemsAtAnyLevel && !this.props.isNotSelectable) {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n if (this.props.icon && this.menuItemsAtAnyLevel) {\n this.context.setEnableIconPadding?.(true);\n }\n }\n\n public componentWillUnmount() {\n if (this.contentRef.current && this.menuItemsAtAnyLevel) {\n !this.props.isNotSelectable && this.context.navigation?.remove(this.contentRef.current);\n this.context.setEnableIconPadding?.(this.hasIconAmongItems());\n }\n }\n\n public componentDidUpdate(prevProps: Readonly<MenuItemProps>) {\n if (prevProps.icon !== this.props.icon) {\n this.context.setEnableIconPadding?.(!!this.props.icon || this.hasIconAmongItems());\n }\n if (\n this.contentRef.current &&\n this.menuItemsAtAnyLevel &&\n prevProps.isNotSelectable !== this.props.isNotSelectable\n ) {\n if (this.props.isNotSelectable) {\n this.unhighlight();\n this.context.navigation?.remove(this.contentRef.current);\n } else {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n }\n }\n\n public highlight = () => {\n this.setState({ highlighted: true });\n };\n\n public unhighlight = () => {\n this.setState({ highlighted: false });\n };\n\n public select = (event: React.SyntheticEvent<HTMLElement>) => {\n this.handleClick(event as React.MouseEvent<HTMLElement>);\n };\n\n public isEnabled = () => {\n return !this.props.disabled;\n };\n\n public navigate = () => {\n if (!this.props.href) {\n return;\n }\n if (this.props.target) {\n window.open(this.props.href, this.props.target);\n } else {\n location.href = this.props.href;\n }\n };\n\n private getRootSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.iconLarge(this.theme);\n case 'medium':\n return styles.iconMedium(this.theme);\n case 'small':\n default:\n return styles.iconSmall(this.theme);\n }\n }\n\n private getWithIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.withIconLarge(this.theme);\n case 'medium':\n return styles.withIconMedium(this.theme);\n case 'small':\n default:\n return styles.withIconSmall(this.theme);\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n size,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n disabled,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n isNotSelectable,\n ...rest\n } = props;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div\n style={{ top: this.state.iconOffsetTop }}\n className={cx({\n [styles.icon(this.theme)]: true,\n [this.getIconSizeClassName()]: true,\n })}\n >\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [this.getRootSizeClassName()]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: this.isHover,\n [styles.selected(this.theme)]: this.isSelected,\n [styles.link(this.theme)]: !!link,\n [this.getWithIconSizeClassName()]: Boolean(iconElement) || !!_enableIconPadding || this.context.enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n disabled={disabled}\n state={this.activeState}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n onClick={this.handleClick}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.mobileContentWithIcon()]: isMobile && isNonNullable(icon),\n })}\n ref={this.contentRef}\n data-tid={MenuItemDataTids.content}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: this.isHover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n private get activeState() {\n return this.state.highlighted ? 'hover' : this.props.state;\n }\n\n private get isHover(): boolean {\n return (this.state.highlighted || this.props.state === 'hover') && !this.props.disabled;\n }\n\n private get isSelected(): boolean {\n return this.props.state === 'selected' && !this.state.highlighted;\n }\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered) {\n this.mouseEntered = true;\n this.props.onMouseEnter?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.highlight(this);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n this.props.onMouseLeave?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.unhighlight();\n };\n\n private handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (this.props.isNotSelectable) {\n return;\n }\n this.props.onClick?.(e);\n if (this.menuItemsAtAnyLevel) {\n this.context.onItemClick?.(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (component) {\n return component;\n }\n\n if (disabled) {\n return 'button';\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n\n private hasIconAmongItems = () => {\n return Boolean(this.context.navigation?.items.some((item) => item.props.icon));\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
|
|
1
|
+
{"version":3,"sources":["MenuItem.tsx"],"names":["React","PropTypes","globalObject","isBrowser","isExternalLink","isFunction","isNonNullable","isReactUIComponent","ThemeContext","CommonWrapper","cx","rootNode","MenuContext","getFullReactUIFlagsContext","ReactUIFeatureFlagsContext","getVisualStateDataAttributes","styles","MenuItemDataTids","root","content","comment","MenuItem","state","iconOffsetTop","highlighted","mouseEntered","rootRef","contentRef","createRef","highlight","setState","unhighlight","select","event","handleClick","isEnabled","props","disabled","navigate","href","target","window","open","location","renderMain","link","icon","loose","size","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","rel","isNotSelectable","rest","iconElement","top","theme","getIconSizeClassName","className","getRootSizeClassName","rootMobile","hover","isHover","selected","isSelected","getWithIconSizeClassName","Boolean","context","enableIconPadding","children","Component","getComponent","setRootRef","activeState","handleMouseEnterFix","handleMouseLeave","undefined","mobileContentWithIcon","commentHover","e","menuItemsAtAnyLevel","navigation","onClick","onItemClick","element","hasIconAmongItems","items","some","item","render","flags","setRootNode","componentDidMount","getComputedStyle","getPropertyValue","current","add","setEnableIconPadding","componentWillUnmount","remove","componentDidUpdate","prevProps","rootLarge","rootMedium","rootSmall","iconLarge","iconMedium","iconSmall","withIconLarge","withIconMedium","withIconSmall","__KONTUR_REACT_UI__","displayName","__MENU_ITEM__","propTypes","node","bool","string","func","contextType","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isNonNullable, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { SizeProp } from '../../lib/types/props';\nimport { MenuContext, MenuContextType } from '../../internal/Menu/MenuContext';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { styles } from './MenuItem.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuItemSize = SizeProp;\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Omit<CommonProps, 'children'> {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * Размер\n */\n size?: SizeProp;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n /**\n * Запрещает выделение и выбор данного пункта меню\n *\n */\n isNotSelectable?: boolean;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n content: 'MenuItem__content',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static displayName = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n\n size: PropTypes.string,\n };\n\n public state = {\n iconOffsetTop: 0,\n highlighted: false,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n private contentRef = React.createRef<HTMLElement>();\n private menuItemsAtAnyLevel?: boolean;\n static contextType = MenuContext;\n\n public context!: MenuContextType;\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.menuItemsAtAnyLevel = getFullReactUIFlagsContext(flags).menuItemsAtAnyLevel;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({\n hover: this.isHover,\n selected: this.isSelected,\n })}\n {...this.props}\n >\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef && isBrowser(globalObject)) {\n this.setState({ iconOffsetTop: globalObject.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n if (this.contentRef.current && this.menuItemsAtAnyLevel && !this.props.isNotSelectable) {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n if (this.props.icon && this.menuItemsAtAnyLevel) {\n this.context.setEnableIconPadding?.(true);\n }\n }\n\n public componentWillUnmount() {\n if (this.contentRef.current && this.menuItemsAtAnyLevel) {\n !this.props.isNotSelectable && this.context.navigation?.remove(this.contentRef.current);\n this.context.setEnableIconPadding?.(this.hasIconAmongItems());\n }\n }\n\n public componentDidUpdate(prevProps: Readonly<MenuItemProps>) {\n if (prevProps.icon !== this.props.icon) {\n this.context.setEnableIconPadding?.(!!this.props.icon || this.hasIconAmongItems());\n }\n if (\n this.contentRef.current &&\n this.menuItemsAtAnyLevel &&\n prevProps.isNotSelectable !== this.props.isNotSelectable\n ) {\n if (this.props.isNotSelectable) {\n this.unhighlight();\n this.context.navigation?.remove(this.contentRef.current);\n } else {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n }\n }\n\n public highlight = () => {\n this.setState({ highlighted: true });\n };\n\n public unhighlight = () => {\n this.setState({ highlighted: false });\n };\n\n public select = (event: React.SyntheticEvent<HTMLElement>) => {\n this.handleClick(event as React.MouseEvent<HTMLElement>);\n };\n\n public isEnabled = () => {\n return !this.props.disabled;\n };\n\n public navigate = () => {\n if (!this.props.href) {\n return;\n }\n if (this.props.target) {\n window.open(this.props.href, this.props.target);\n } else {\n location.href = this.props.href;\n }\n };\n\n private getRootSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.iconLarge(this.theme);\n case 'medium':\n return styles.iconMedium(this.theme);\n case 'small':\n default:\n return styles.iconSmall(this.theme);\n }\n }\n\n private getWithIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.withIconLarge(this.theme);\n case 'medium':\n return styles.withIconMedium(this.theme);\n case 'small':\n default:\n return styles.withIconSmall(this.theme);\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n size,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n disabled,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n isNotSelectable,\n ...rest\n } = props;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div\n style={{ top: this.state.iconOffsetTop }}\n className={cx({\n [styles.icon(this.theme)]: true,\n [this.getIconSizeClassName()]: true,\n })}\n >\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [this.getRootSizeClassName()]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: this.isHover,\n [styles.selected(this.theme)]: this.isSelected,\n [styles.link(this.theme)]: !!link,\n [this.getWithIconSizeClassName()]: Boolean(iconElement) || !!_enableIconPadding || this.context.enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n disabled={disabled}\n state={this.activeState}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n onClick={this.handleClick}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.mobileContentWithIcon()]: isMobile && isNonNullable(icon),\n })}\n ref={this.contentRef}\n data-tid={MenuItemDataTids.content}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: this.isHover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n private get activeState() {\n return this.state.highlighted ? 'hover' : this.props.state;\n }\n\n private get isHover(): boolean {\n return (this.state.highlighted || this.props.state === 'hover') && !this.props.disabled;\n }\n\n private get isSelected(): boolean {\n return this.props.state === 'selected' && !this.state.highlighted;\n }\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered) {\n this.mouseEntered = true;\n this.props.onMouseEnter?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.highlight(this);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n this.props.onMouseLeave?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.unhighlight();\n };\n\n private handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (this.props.isNotSelectable) {\n return;\n }\n this.props.onClick?.(e);\n if (this.menuItemsAtAnyLevel) {\n this.context.onItemClick?.(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (component) {\n return component;\n }\n\n if (disabled) {\n return 'button';\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n\n private hasIconAmongItems = () => {\n return Boolean(this.context.navigation?.items.some((item) => item.props.icon));\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
|
|
@@ -19,7 +19,7 @@ import { cx } from "../../../lib/theming/Emotion";
|
|
|
19
19
|
import { rootNode } from "../../../lib/rootNode";
|
|
20
20
|
import { createPropsGetter } from "../../../lib/createPropsGetter";
|
|
21
21
|
import { isTheme2022 } from "../../../lib/theming/ThemeHelpers";
|
|
22
|
-
import { getVisualStateDataAttributes } from "../../../internal/CommonWrapper/getVisualStateDataAttributes";
|
|
22
|
+
import { getVisualStateDataAttributes } from "../../../internal/CommonWrapper/utils/getVisualStateDataAttributes";
|
|
23
23
|
import { styles } from "../Paging.styles";
|
|
24
24
|
import * as NavigationHelper from "../NavigationHelper";
|
|
25
25
|
import { getItems } from "../PagingHelper";
|
|
@@ -107,7 +107,7 @@ export var Paging = (_dec = locale('Paging', PagingLocaleHelper), rootNode(_clas
|
|
|
107
107
|
}, /*#__PURE__*/React.createElement(ArrowChevronRightIcon, {
|
|
108
108
|
size: _this.theme.pagingForwardIconSize
|
|
109
109
|
}));
|
|
110
|
-
return /*#__PURE__*/React.createElement(Component, {
|
|
110
|
+
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
111
111
|
key: 'forward',
|
|
112
112
|
"data-tid": PagingDataTids.forwardLink,
|
|
113
113
|
active: false,
|
|
@@ -115,7 +115,9 @@ export var Paging = (_dec = locale('Paging', PagingLocaleHelper), rootNode(_clas
|
|
|
115
115
|
onClick: disabled ? emptyHandler : _this.goForward,
|
|
116
116
|
tabIndex: -1,
|
|
117
117
|
pageNumber: 'forward'
|
|
118
|
-
},
|
|
118
|
+
}, getVisualStateDataAttributes({
|
|
119
|
+
disabled: disabled
|
|
120
|
+
})), _this.props.caption || forward, forwardIcon);
|
|
119
121
|
};
|
|
120
122
|
|
|
121
123
|
_this.renderPageLink = function (pageNumber, active, focused) {
|
|
@@ -453,7 +455,9 @@ export var Paging = (_dec = locale('Paging', PagingLocaleHelper), rootNode(_clas
|
|
|
453
455
|
|
|
454
456
|
return /*#__PURE__*/React.createElement(CommonWrapper, _extends({
|
|
455
457
|
rootNodeRef: this.setRootNode
|
|
456
|
-
}, this.props
|
|
458
|
+
}, this.props, getVisualStateDataAttributes({
|
|
459
|
+
disabled: this.props.disabled
|
|
460
|
+
})), /*#__PURE__*/React.createElement("span", {
|
|
457
461
|
tabIndex: this.props.disabled ? -1 : 0,
|
|
458
462
|
"data-tid": dataTid,
|
|
459
463
|
className: cx((_cx4 = {}, _cx4[styles.paging(this.theme)] = true, _cx4[styles.pagingDisabled()] = this.props.disabled, _cx4)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Paging.tsx"],"names":["React","func","number","globalObject","isInstanceOf","isKeyArrowLeft","isKeyArrowRight","isKeyEnter","locale","keyListener","emptyHandler","isIE11","ThemeContext","ArrowChevronRightIcon","CommonWrapper","cx","rootNode","createPropsGetter","isTheme2022","getVisualStateDataAttributes","styles","NavigationHelper","getItems","PagingLocaleHelper","PagingDefaultComponent","ForwardIcon","IGNORE_EVENT_TAGS","PagingDataTids","root","dots","forwardLink","pageLinkWrapper","pageLink","Paging","getProps","defaultProps","state","focusedByTab","focusedItem","keyboardControl","useGlobalListener","addedGlobalListener","container","renderItem","item","index","focused","getFocusedItem","key","renderDots","disabled","isItemDisabled","renderForwardLink","active","props","activePage","renderPageLink","theme","dotsDisabled","classes","pageLinkFocused","pageLinkDisabled","forwardLinkFocused","forwardLinkDisabled","Component","component","forward","forwardIcon","parseInt","pagingForwardIconSize","marginLeft","goForward","caption","pageNumber","pageLinkCurrent","pageLinkCurrentDisabled","handleClick","goToPage","handleMouseDownPageLink","renderNavigationHint","withoutNavigationHint","canGoBackward","canGoForward","hint","transparent","getKeyName","pageLinkHint","handleMouseDown","setState","setTimeout","focus","handleKeyDown","e","shiftKey","target","isArrowLeft","isArrowRight","Element","includes","tagName","toLowerCase","isContentEditable","checkKeyPressed","goBackward","moveFocusLeft","moveFocusRight","executeItemAction","handleFocus","requestAnimationFrame","isTabPressed","handleBlur","pagesCount","concat","isItemFocusable","moveFocus","step","items","findIndex","x","length","onPageChange","addGlobalListener","document","addEventListener","removeGlobalListener","removeEventListener","refContainer","element","isForward","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","shouldBeVisibleWithLessThanTwoPages","renderMain","dataTid","setRootNode","paging","pagingDisabled","undefined","map","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","isRequired"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { func, number } from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { isKeyArrowLeft, isKeyArrowRight, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { Nullable } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { emptyHandler } from '../../lib/utils';\nimport { isIE11 } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ArrowChevronRightIcon } from '../../internal/icons/16px';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/getVisualStateDataAttributes';\n\nimport { styles } from './Paging.styles';\nimport * as NavigationHelper from './NavigationHelper';\nimport { getItems } from './PagingHelper';\nimport { PagingLocale, PagingLocaleHelper } from './locale';\nimport { PagingDefaultComponent } from './PagingDefaultComponent';\nimport { ForwardIcon } from './ForwardIcon';\n\nconst IGNORE_EVENT_TAGS = ['input', 'textarea'];\n\nexport interface ItemComponentProps {\n active: boolean;\n children?: React.ReactNode;\n className: string;\n onClick: () => void;\n pageNumber: number | 'forward';\n tabIndex: number;\n}\n\nexport interface PagingProps extends CommonProps {\n activePage: number;\n /**\n * Компонент обертки по умолчанию\n * @default <span />\n */\n component?: React.ComponentType<ItemComponentProps>;\n onPageChange: (pageNumber: number) => void;\n pagesCount: number;\n disabled?: boolean;\n /**\n * Отключает навигационные подсказки.\n * По-умолчанию подсказки появляются, когда доступно управление с клавиатуры\n * (либо элемент в фокусе, либо globalListeners === true)\n */\n withoutNavigationHint?: boolean;\n caption?: string;\n /**\n * Глобальный слушатель **keyDown**, для навигации клавишами без фокуса на компоненте.\n * Если на странице используется несколько элементов\n * **Paging** с useGlobalListener === true, то обработчик keyDown будет вызываться\n * на каждом из них. Такие случаи лучше обрабатывать отдельно.\n */\n useGlobalListener?: boolean;\n /**\n * Определяет, нужно ли показывать `Paging` когда страница всего одна.\n *\n * Этот проп будет удалён в 5-ой версии библиотеки,\n * так как поведение со скрытием `Paging`'а станет поведением по умолчанию.\n *\n * @default false\n */\n shouldBeVisibleWithLessThanTwoPages?: boolean;\n}\n\nexport interface PagingState {\n focusedByTab: boolean;\n focusedItem: Nullable<ItemType>;\n keyboardControl: boolean;\n}\n\nexport type ItemType = number | '.' | 'forward';\n\nexport const PagingDataTids = {\n root: 'Paging__root',\n dots: 'Paging__dots',\n forwardLink: 'Paging__forwardLink',\n pageLinkWrapper: 'Paging__pageLinkWrapper',\n pageLink: 'Paging__pageLink',\n} as const;\n\ntype DefaultProps = Required<\n Pick<PagingProps, 'component' | 'shouldBeVisibleWithLessThanTwoPages' | 'useGlobalListener' | 'data-tid'>\n>;\n\n@rootNode\n@locale('Paging', PagingLocaleHelper)\nexport class Paging extends React.PureComponent<PagingProps, PagingState> {\n public static __KONTUR_REACT_UI__ = 'Paging';\n public static displayName = 'Paging';\n\n public static defaultProps: DefaultProps = {\n component: PagingDefaultComponent,\n shouldBeVisibleWithLessThanTwoPages: true,\n useGlobalListener: false,\n 'data-tid': PagingDataTids.root,\n };\n\n private getProps = createPropsGetter(Paging.defaultProps);\n\n public static propTypes = {};\n private setRootNode!: TSetRootNode;\n\n public static isForward(pageNumber: number | 'forward'): boolean /* %checks */ {\n return pageNumber === 'forward';\n }\n\n public state: PagingState = {\n focusedByTab: false,\n focusedItem: null,\n keyboardControl: this.getProps().useGlobalListener,\n };\n\n private theme!: Theme;\n private readonly locale!: PagingLocale;\n private addedGlobalListener = false;\n private container: HTMLSpanElement | null = null;\n\n public componentDidMount() {\n const useGlobalListener = this.getProps().useGlobalListener;\n if (useGlobalListener) {\n this.addGlobalListener();\n }\n }\n\n public componentDidUpdate(prevProps: PagingProps) {\n const useGlobalListener = this.getProps().useGlobalListener;\n if (!prevProps.useGlobalListener && useGlobalListener) {\n this.addGlobalListener();\n }\n\n if (prevProps.useGlobalListener && !useGlobalListener) {\n this.removeGlobalListener();\n }\n\n if (prevProps.useGlobalListener !== useGlobalListener) {\n this.setState({\n keyboardControl: useGlobalListener,\n });\n }\n }\n\n public componentWillUnmount() {\n this.removeGlobalListener();\n }\n\n public render() {\n if (this.props.pagesCount < 2 && !this.getProps().shouldBeVisibleWithLessThanTwoPages) {\n return null;\n }\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { 'data-tid': dataTid, useGlobalListener } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <span\n tabIndex={this.props.disabled ? -1 : 0}\n data-tid={dataTid}\n className={cx({ [styles.paging(this.theme)]: true, [styles.pagingDisabled()]: this.props.disabled })}\n onKeyDown={useGlobalListener ? undefined : this.handleKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onMouseDown={this.handleMouseDown}\n ref={this.refContainer}\n >\n {this.getItems().map(this.renderItem)}\n </span>\n </CommonWrapper>\n );\n }\n\n private renderItem = (item: ItemType, index: number) => {\n const focused = this.getFocusedItem() === item;\n switch (item) {\n case '.': {\n const key = `dots${index < 5 ? 'Left' : 'Right'}`;\n return this.renderDots(key);\n }\n case 'forward': {\n const disabled = this.isItemDisabled(item);\n return this.renderForwardLink(disabled, focused);\n }\n default: {\n const active = this.props.activePage === item;\n return this.renderPageLink(item, active, focused);\n }\n }\n };\n\n private renderDots = (key: string) => {\n return (\n <span\n data-tid={PagingDataTids.dots}\n key={key}\n className={cx({ [styles.dots(this.theme)]: true, [styles.dotsDisabled(this.theme)]: this.props.disabled })}\n >\n {'...'}\n </span>\n );\n };\n\n private renderForwardLink = (disabled: boolean, focused: boolean): JSX.Element => {\n const classes = isTheme2022(this.theme)\n ? cx(\n styles.pageLink(this.theme),\n styles.forwardLink(this.theme),\n focused && styles.pageLinkFocused(this.theme),\n (disabled || this.props.disabled) && styles.pageLinkDisabled(this.theme),\n )\n : cx({\n [styles.forwardLink(this.theme)]: true,\n [styles.forwardLinkFocused()]: focused,\n [styles.forwardLinkDisabled(this.theme)]: disabled || this.props.disabled,\n });\n const Component = this.getProps().component;\n const { forward } = this.locale;\n\n const forwardIcon = isTheme2022(this.theme) ? (\n <ForwardIcon size={parseInt(this.theme.pagingForwardIconSize)} style={{ marginLeft: 4 }} />\n ) : (\n <span className={styles.forwardIcon(this.theme)}>\n <ArrowChevronRightIcon size={this.theme.pagingForwardIconSize} />\n </span>\n );\n\n return (\n <Component\n key={'forward'}\n data-tid={PagingDataTids.forwardLink}\n active={false}\n className={classes}\n onClick={disabled ? emptyHandler : this.goForward}\n tabIndex={-1}\n pageNumber={'forward' as const}\n >\n {this.props.caption || forward}\n {forwardIcon}\n </Component>\n );\n };\n\n private renderPageLink = (pageNumber: number, active: boolean, focused: boolean): JSX.Element => {\n const disabled = this.props.disabled;\n const classes = cx({\n [styles.pageLink(this.theme)]: true,\n [styles.pageLinkFocused(this.theme)]: focused,\n [styles.pageLinkDisabled(this.theme)]: disabled,\n [styles.pageLinkCurrent(this.theme)]: active,\n [styles.pageLinkCurrentDisabled(this.theme)]: active && disabled,\n });\n const Component = this.getProps().component;\n const handleClick = () => this.goToPage(pageNumber);\n\n return (\n <span\n data-tid={PagingDataTids.pageLinkWrapper}\n key={pageNumber}\n className={styles.pageLinkWrapper()}\n {...getVisualStateDataAttributes({ active, disabled })}\n onMouseDown={this.handleMouseDownPageLink}\n >\n <Component\n data-tid={PagingDataTids.pageLink}\n active={active}\n className={classes}\n onClick={handleClick}\n tabIndex={-1}\n pageNumber={pageNumber}\n >\n {pageNumber}\n </Component>\n {active && this.renderNavigationHint()}\n </span>\n );\n };\n\n private renderNavigationHint = () => {\n if (this.props.withoutNavigationHint) {\n return null;\n }\n\n const { keyboardControl } = this.state;\n const canGoBackward = this.canGoBackward();\n const canGoForward = this.canGoForward();\n\n let hint = null;\n if (keyboardControl && (canGoBackward || canGoForward)) {\n hint = (\n <>\n <span className={canGoBackward ? '' : styles.transparent()}>{'←'}</span>\n <span>{NavigationHelper.getKeyName()}</span>\n <span className={canGoForward ? '' : styles.transparent()}>{'→'}</span>\n </>\n );\n }\n return <div className={styles.pageLinkHint(this.theme)}>{hint}</div>;\n };\n\n private handleMouseDown = () => {\n this.setState({ focusedByTab: false, focusedItem: null });\n };\n\n private handleMouseDownPageLink = () => {\n if (isIE11) {\n // Клик по span внутри контейнера с tabindex=\"0\" переносит фокус именно на этот span.\n // Поэтому горячие клавиши работают пока span существует на странице.\n globalObject.setTimeout(() => this.container && this.container.focus(), 0);\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent | React.KeyboardEvent<HTMLElement>) => {\n if (e.shiftKey) {\n return;\n }\n\n const target = e.target;\n\n const isArrowLeft = isKeyArrowLeft(e);\n const isArrowRight = isKeyArrowRight(e);\n\n if (\n isInstanceOf(target, globalObject.Element) &&\n (IGNORE_EVENT_TAGS.includes(target.tagName.toLowerCase()) || (target as HTMLElement).isContentEditable)\n ) {\n return;\n }\n\n if (NavigationHelper.checkKeyPressed(e) && isArrowLeft) {\n this.setState({ focusedItem: null }, this.goBackward);\n return;\n }\n if (NavigationHelper.checkKeyPressed(e) && isArrowRight) {\n this.setState({ focusedItem: null }, this.goForward);\n return;\n }\n\n if (this.container && this.container === e.target) {\n if (isArrowLeft) {\n this.setState({ focusedByTab: true }, this.moveFocusLeft);\n return;\n }\n if (isArrowRight) {\n this.setState({ focusedByTab: true }, this.moveFocusRight);\n return;\n }\n if (isKeyEnter(e)) {\n this.executeItemAction(this.getFocusedItem());\n return;\n }\n }\n };\n\n private handleFocus = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.setState({ keyboardControl: true });\n\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n keyboardControl: this.getProps().useGlobalListener || false,\n });\n };\n\n private getItems = (): ItemType[] => {\n return getItems(this.props.activePage, this.props.pagesCount).concat('forward');\n };\n\n private getFocusedItem = (): Nullable<ItemType> => {\n if (!this.state.focusedByTab) {\n return null;\n }\n\n const { focusedItem } = this.state;\n if (focusedItem && this.getItems().includes(focusedItem) && this.isItemFocusable(focusedItem)) {\n return focusedItem;\n }\n\n return this.props.activePage;\n };\n\n private isItemFocusable = (item: ItemType) => {\n return !this.isItemDisabled(item);\n };\n\n private isItemDisabled = (item: ItemType) => {\n switch (item) {\n case '.':\n return true;\n case 'forward':\n return !this.canGoForward();\n default:\n return false;\n }\n };\n\n private executeItemAction = (item: Nullable<ItemType>) => {\n if (item === 'forward') {\n this.goForward();\n }\n if (typeof item === 'number') {\n this.goToPage(item);\n }\n };\n\n private moveFocusLeft = () => {\n this.moveFocus(-1);\n };\n\n private moveFocusRight = () => {\n this.moveFocus(1);\n };\n\n private moveFocus = (step: number) => {\n const focusedItem = this.getFocusedItem();\n const items = this.getItems();\n let index = items.findIndex((x) => x === focusedItem);\n do {\n index = (index + step + items.length) % items.length;\n } while (!this.isItemFocusable(items[index]));\n this.setState({ focusedItem: items[index] });\n };\n\n private canGoBackward = (): boolean => {\n return this.props.activePage > 1;\n };\n\n private canGoForward = (): boolean => {\n return this.props.activePage < this.props.pagesCount;\n };\n\n private goBackward = () => {\n this.goToPage(this.props.activePage - 1);\n };\n\n private goForward = () => {\n this.goToPage(this.props.activePage + 1);\n };\n\n private goToPage = (pageNumber: number) => {\n if (pageNumber >= 1 && pageNumber !== this.props.activePage && pageNumber <= this.props.pagesCount) {\n this.props.onPageChange(pageNumber);\n }\n };\n\n private addGlobalListener = () => {\n if (this.addedGlobalListener) {\n return;\n }\n\n globalObject.document?.addEventListener('keydown', this.handleKeyDown);\n this.addedGlobalListener = true;\n };\n\n private removeGlobalListener = () => {\n if (this.addedGlobalListener) {\n globalObject.document?.removeEventListener('keydown', this.handleKeyDown);\n\n this.addedGlobalListener = false;\n }\n };\n\n private refContainer = (element: HTMLSpanElement | null) => {\n this.container = element;\n };\n}\n\nPaging.propTypes = {\n /**\n * Current active page\n */\n activePage: number.isRequired,\n\n /**\n * React component that would be used for rendering items\n *\n * Usefull for router integration\n */\n component: func,\n\n /**\n * Total page count\n */\n pagesCount: number.isRequired,\n\n /**\n * Calls when page has been changed\n */\n onPageChange: func.isRequired,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["Paging.tsx"],"names":["React","func","number","globalObject","isInstanceOf","isKeyArrowLeft","isKeyArrowRight","isKeyEnter","locale","keyListener","emptyHandler","isIE11","ThemeContext","ArrowChevronRightIcon","CommonWrapper","cx","rootNode","createPropsGetter","isTheme2022","getVisualStateDataAttributes","styles","NavigationHelper","getItems","PagingLocaleHelper","PagingDefaultComponent","ForwardIcon","IGNORE_EVENT_TAGS","PagingDataTids","root","dots","forwardLink","pageLinkWrapper","pageLink","Paging","getProps","defaultProps","state","focusedByTab","focusedItem","keyboardControl","useGlobalListener","addedGlobalListener","container","renderItem","item","index","focused","getFocusedItem","key","renderDots","disabled","isItemDisabled","renderForwardLink","active","props","activePage","renderPageLink","theme","dotsDisabled","classes","pageLinkFocused","pageLinkDisabled","forwardLinkFocused","forwardLinkDisabled","Component","component","forward","forwardIcon","parseInt","pagingForwardIconSize","marginLeft","goForward","caption","pageNumber","pageLinkCurrent","pageLinkCurrentDisabled","handleClick","goToPage","handleMouseDownPageLink","renderNavigationHint","withoutNavigationHint","canGoBackward","canGoForward","hint","transparent","getKeyName","pageLinkHint","handleMouseDown","setState","setTimeout","focus","handleKeyDown","e","shiftKey","target","isArrowLeft","isArrowRight","Element","includes","tagName","toLowerCase","isContentEditable","checkKeyPressed","goBackward","moveFocusLeft","moveFocusRight","executeItemAction","handleFocus","requestAnimationFrame","isTabPressed","handleBlur","pagesCount","concat","isItemFocusable","moveFocus","step","items","findIndex","x","length","onPageChange","addGlobalListener","document","addEventListener","removeGlobalListener","removeEventListener","refContainer","element","isForward","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","shouldBeVisibleWithLessThanTwoPages","renderMain","dataTid","setRootNode","paging","pagingDisabled","undefined","map","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","isRequired"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { func, number } from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { isKeyArrowLeft, isKeyArrowRight, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { Nullable } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { emptyHandler } from '../../lib/utils';\nimport { isIE11 } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ArrowChevronRightIcon } from '../../internal/icons/16px';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { styles } from './Paging.styles';\nimport * as NavigationHelper from './NavigationHelper';\nimport { getItems } from './PagingHelper';\nimport { PagingLocale, PagingLocaleHelper } from './locale';\nimport { PagingDefaultComponent } from './PagingDefaultComponent';\nimport { ForwardIcon } from './ForwardIcon';\n\nconst IGNORE_EVENT_TAGS = ['input', 'textarea'];\n\nexport interface ItemComponentProps {\n active: boolean;\n children?: React.ReactNode;\n className: string;\n onClick: () => void;\n pageNumber: number | 'forward';\n tabIndex: number;\n}\n\nexport interface PagingProps extends CommonProps {\n activePage: number;\n /**\n * Компонент обертки по умолчанию\n * @default <span />\n */\n component?: React.ComponentType<ItemComponentProps>;\n onPageChange: (pageNumber: number) => void;\n pagesCount: number;\n disabled?: boolean;\n /**\n * Отключает навигационные подсказки.\n * По-умолчанию подсказки появляются, когда доступно управление с клавиатуры\n * (либо элемент в фокусе, либо globalListeners === true)\n */\n withoutNavigationHint?: boolean;\n caption?: string;\n /**\n * Глобальный слушатель **keyDown**, для навигации клавишами без фокуса на компоненте.\n * Если на странице используется несколько элементов\n * **Paging** с useGlobalListener === true, то обработчик keyDown будет вызываться\n * на каждом из них. Такие случаи лучше обрабатывать отдельно.\n */\n useGlobalListener?: boolean;\n /**\n * Определяет, нужно ли показывать `Paging` когда страница всего одна.\n *\n * Этот проп будет удалён в 5-ой версии библиотеки,\n * так как поведение со скрытием `Paging`'а станет поведением по умолчанию.\n *\n * @default false\n */\n shouldBeVisibleWithLessThanTwoPages?: boolean;\n}\n\nexport interface PagingState {\n focusedByTab: boolean;\n focusedItem: Nullable<ItemType>;\n keyboardControl: boolean;\n}\n\nexport type ItemType = number | '.' | 'forward';\n\nexport const PagingDataTids = {\n root: 'Paging__root',\n dots: 'Paging__dots',\n forwardLink: 'Paging__forwardLink',\n pageLinkWrapper: 'Paging__pageLinkWrapper',\n pageLink: 'Paging__pageLink',\n} as const;\n\ntype DefaultProps = Required<\n Pick<PagingProps, 'component' | 'shouldBeVisibleWithLessThanTwoPages' | 'useGlobalListener' | 'data-tid'>\n>;\n\n@rootNode\n@locale('Paging', PagingLocaleHelper)\nexport class Paging extends React.PureComponent<PagingProps, PagingState> {\n public static __KONTUR_REACT_UI__ = 'Paging';\n public static displayName = 'Paging';\n\n public static defaultProps: DefaultProps = {\n component: PagingDefaultComponent,\n shouldBeVisibleWithLessThanTwoPages: true,\n useGlobalListener: false,\n 'data-tid': PagingDataTids.root,\n };\n\n private getProps = createPropsGetter(Paging.defaultProps);\n\n public static propTypes = {};\n private setRootNode!: TSetRootNode;\n\n public static isForward(pageNumber: number | 'forward'): boolean /* %checks */ {\n return pageNumber === 'forward';\n }\n\n public state: PagingState = {\n focusedByTab: false,\n focusedItem: null,\n keyboardControl: this.getProps().useGlobalListener,\n };\n\n private theme!: Theme;\n private readonly locale!: PagingLocale;\n private addedGlobalListener = false;\n private container: HTMLSpanElement | null = null;\n\n public componentDidMount() {\n const useGlobalListener = this.getProps().useGlobalListener;\n if (useGlobalListener) {\n this.addGlobalListener();\n }\n }\n\n public componentDidUpdate(prevProps: PagingProps) {\n const useGlobalListener = this.getProps().useGlobalListener;\n if (!prevProps.useGlobalListener && useGlobalListener) {\n this.addGlobalListener();\n }\n\n if (prevProps.useGlobalListener && !useGlobalListener) {\n this.removeGlobalListener();\n }\n\n if (prevProps.useGlobalListener !== useGlobalListener) {\n this.setState({\n keyboardControl: useGlobalListener,\n });\n }\n }\n\n public componentWillUnmount() {\n this.removeGlobalListener();\n }\n\n public render() {\n if (this.props.pagesCount < 2 && !this.getProps().shouldBeVisibleWithLessThanTwoPages) {\n return null;\n }\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { 'data-tid': dataTid, useGlobalListener } = this.getProps();\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...this.props}\n {...getVisualStateDataAttributes({ disabled: this.props.disabled })}\n >\n <span\n tabIndex={this.props.disabled ? -1 : 0}\n data-tid={dataTid}\n className={cx({ [styles.paging(this.theme)]: true, [styles.pagingDisabled()]: this.props.disabled })}\n onKeyDown={useGlobalListener ? undefined : this.handleKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onMouseDown={this.handleMouseDown}\n ref={this.refContainer}\n >\n {this.getItems().map(this.renderItem)}\n </span>\n </CommonWrapper>\n );\n }\n\n private renderItem = (item: ItemType, index: number) => {\n const focused = this.getFocusedItem() === item;\n switch (item) {\n case '.': {\n const key = `dots${index < 5 ? 'Left' : 'Right'}`;\n return this.renderDots(key);\n }\n case 'forward': {\n const disabled = this.isItemDisabled(item);\n return this.renderForwardLink(disabled, focused);\n }\n default: {\n const active = this.props.activePage === item;\n return this.renderPageLink(item, active, focused);\n }\n }\n };\n\n private renderDots = (key: string) => {\n return (\n <span\n data-tid={PagingDataTids.dots}\n key={key}\n className={cx({ [styles.dots(this.theme)]: true, [styles.dotsDisabled(this.theme)]: this.props.disabled })}\n >\n {'...'}\n </span>\n );\n };\n\n private renderForwardLink = (disabled: boolean, focused: boolean): JSX.Element => {\n const classes = isTheme2022(this.theme)\n ? cx(\n styles.pageLink(this.theme),\n styles.forwardLink(this.theme),\n focused && styles.pageLinkFocused(this.theme),\n (disabled || this.props.disabled) && styles.pageLinkDisabled(this.theme),\n )\n : cx({\n [styles.forwardLink(this.theme)]: true,\n [styles.forwardLinkFocused()]: focused,\n [styles.forwardLinkDisabled(this.theme)]: disabled || this.props.disabled,\n });\n const Component = this.getProps().component;\n const { forward } = this.locale;\n\n const forwardIcon = isTheme2022(this.theme) ? (\n <ForwardIcon size={parseInt(this.theme.pagingForwardIconSize)} style={{ marginLeft: 4 }} />\n ) : (\n <span className={styles.forwardIcon(this.theme)}>\n <ArrowChevronRightIcon size={this.theme.pagingForwardIconSize} />\n </span>\n );\n\n return (\n <Component\n key={'forward'}\n data-tid={PagingDataTids.forwardLink}\n active={false}\n className={classes}\n onClick={disabled ? emptyHandler : this.goForward}\n tabIndex={-1}\n pageNumber={'forward' as const}\n {...getVisualStateDataAttributes({ disabled })}\n >\n {this.props.caption || forward}\n {forwardIcon}\n </Component>\n );\n };\n\n private renderPageLink = (pageNumber: number, active: boolean, focused: boolean): JSX.Element => {\n const disabled = this.props.disabled;\n const classes = cx({\n [styles.pageLink(this.theme)]: true,\n [styles.pageLinkFocused(this.theme)]: focused,\n [styles.pageLinkDisabled(this.theme)]: disabled,\n [styles.pageLinkCurrent(this.theme)]: active,\n [styles.pageLinkCurrentDisabled(this.theme)]: active && disabled,\n });\n const Component = this.getProps().component;\n const handleClick = () => this.goToPage(pageNumber);\n\n return (\n <span\n data-tid={PagingDataTids.pageLinkWrapper}\n key={pageNumber}\n className={styles.pageLinkWrapper()}\n {...getVisualStateDataAttributes({ active, disabled })}\n onMouseDown={this.handleMouseDownPageLink}\n >\n <Component\n data-tid={PagingDataTids.pageLink}\n active={active}\n className={classes}\n onClick={handleClick}\n tabIndex={-1}\n pageNumber={pageNumber}\n >\n {pageNumber}\n </Component>\n {active && this.renderNavigationHint()}\n </span>\n );\n };\n\n private renderNavigationHint = () => {\n if (this.props.withoutNavigationHint) {\n return null;\n }\n\n const { keyboardControl } = this.state;\n const canGoBackward = this.canGoBackward();\n const canGoForward = this.canGoForward();\n\n let hint = null;\n if (keyboardControl && (canGoBackward || canGoForward)) {\n hint = (\n <>\n <span className={canGoBackward ? '' : styles.transparent()}>{'←'}</span>\n <span>{NavigationHelper.getKeyName()}</span>\n <span className={canGoForward ? '' : styles.transparent()}>{'→'}</span>\n </>\n );\n }\n return <div className={styles.pageLinkHint(this.theme)}>{hint}</div>;\n };\n\n private handleMouseDown = () => {\n this.setState({ focusedByTab: false, focusedItem: null });\n };\n\n private handleMouseDownPageLink = () => {\n if (isIE11) {\n // Клик по span внутри контейнера с tabindex=\"0\" переносит фокус именно на этот span.\n // Поэтому горячие клавиши работают пока span существует на странице.\n globalObject.setTimeout(() => this.container && this.container.focus(), 0);\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent | React.KeyboardEvent<HTMLElement>) => {\n if (e.shiftKey) {\n return;\n }\n\n const target = e.target;\n\n const isArrowLeft = isKeyArrowLeft(e);\n const isArrowRight = isKeyArrowRight(e);\n\n if (\n isInstanceOf(target, globalObject.Element) &&\n (IGNORE_EVENT_TAGS.includes(target.tagName.toLowerCase()) || (target as HTMLElement).isContentEditable)\n ) {\n return;\n }\n\n if (NavigationHelper.checkKeyPressed(e) && isArrowLeft) {\n this.setState({ focusedItem: null }, this.goBackward);\n return;\n }\n if (NavigationHelper.checkKeyPressed(e) && isArrowRight) {\n this.setState({ focusedItem: null }, this.goForward);\n return;\n }\n\n if (this.container && this.container === e.target) {\n if (isArrowLeft) {\n this.setState({ focusedByTab: true }, this.moveFocusLeft);\n return;\n }\n if (isArrowRight) {\n this.setState({ focusedByTab: true }, this.moveFocusRight);\n return;\n }\n if (isKeyEnter(e)) {\n this.executeItemAction(this.getFocusedItem());\n return;\n }\n }\n };\n\n private handleFocus = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.setState({ keyboardControl: true });\n\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n keyboardControl: this.getProps().useGlobalListener || false,\n });\n };\n\n private getItems = (): ItemType[] => {\n return getItems(this.props.activePage, this.props.pagesCount).concat('forward');\n };\n\n private getFocusedItem = (): Nullable<ItemType> => {\n if (!this.state.focusedByTab) {\n return null;\n }\n\n const { focusedItem } = this.state;\n if (focusedItem && this.getItems().includes(focusedItem) && this.isItemFocusable(focusedItem)) {\n return focusedItem;\n }\n\n return this.props.activePage;\n };\n\n private isItemFocusable = (item: ItemType) => {\n return !this.isItemDisabled(item);\n };\n\n private isItemDisabled = (item: ItemType) => {\n switch (item) {\n case '.':\n return true;\n case 'forward':\n return !this.canGoForward();\n default:\n return false;\n }\n };\n\n private executeItemAction = (item: Nullable<ItemType>) => {\n if (item === 'forward') {\n this.goForward();\n }\n if (typeof item === 'number') {\n this.goToPage(item);\n }\n };\n\n private moveFocusLeft = () => {\n this.moveFocus(-1);\n };\n\n private moveFocusRight = () => {\n this.moveFocus(1);\n };\n\n private moveFocus = (step: number) => {\n const focusedItem = this.getFocusedItem();\n const items = this.getItems();\n let index = items.findIndex((x) => x === focusedItem);\n do {\n index = (index + step + items.length) % items.length;\n } while (!this.isItemFocusable(items[index]));\n this.setState({ focusedItem: items[index] });\n };\n\n private canGoBackward = (): boolean => {\n return this.props.activePage > 1;\n };\n\n private canGoForward = (): boolean => {\n return this.props.activePage < this.props.pagesCount;\n };\n\n private goBackward = () => {\n this.goToPage(this.props.activePage - 1);\n };\n\n private goForward = () => {\n this.goToPage(this.props.activePage + 1);\n };\n\n private goToPage = (pageNumber: number) => {\n if (pageNumber >= 1 && pageNumber !== this.props.activePage && pageNumber <= this.props.pagesCount) {\n this.props.onPageChange(pageNumber);\n }\n };\n\n private addGlobalListener = () => {\n if (this.addedGlobalListener) {\n return;\n }\n\n globalObject.document?.addEventListener('keydown', this.handleKeyDown);\n this.addedGlobalListener = true;\n };\n\n private removeGlobalListener = () => {\n if (this.addedGlobalListener) {\n globalObject.document?.removeEventListener('keydown', this.handleKeyDown);\n\n this.addedGlobalListener = false;\n }\n };\n\n private refContainer = (element: HTMLSpanElement | null) => {\n this.container = element;\n };\n}\n\nPaging.propTypes = {\n /**\n * Current active page\n */\n activePage: number.isRequired,\n\n /**\n * React component that would be used for rendering items\n *\n * Usefull for router integration\n */\n component: func,\n\n /**\n * Total page count\n */\n pagesCount: number.isRequired,\n\n /**\n * Calls when page has been changed\n */\n onPageChange: func.isRequired,\n};\n"]}
|
|
@@ -16,9 +16,9 @@ import { CommonWrapper } from "../../../internal/CommonWrapper";
|
|
|
16
16
|
import { cx } from "../../../lib/theming/Emotion";
|
|
17
17
|
import { rootNode } from "../../../lib/rootNode";
|
|
18
18
|
import { createPropsGetter } from "../../../lib/createPropsGetter";
|
|
19
|
-
import { getVisualStateDataAttributes } from "../../../internal/CommonWrapper/getVisualStateDataAttributes";
|
|
19
|
+
import { getVisualStateDataAttributes } from "../../../internal/CommonWrapper/utils/getVisualStateDataAttributes";
|
|
20
20
|
import { TabsContext, TabsContextDefaultValue } from "../TabsContext";
|
|
21
|
-
import {
|
|
21
|
+
import { globalClasses, horizontalStyles, styles, verticalStyles } from "../Tab.styles";
|
|
22
22
|
export var TabDataTids = {
|
|
23
23
|
root: 'Tab__root'
|
|
24
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Tab.tsx"],"names":["React","invariant","globalObject","ResizeDetector","isKeyArrow","isKeyArrowLeft","isKeyArrowUp","keyListener","isFunctionalComponent","ThemeContext","CommonWrapper","cx","rootNode","createPropsGetter","getVisualStateDataAttributes","TabsContext","TabsContextDefaultValue","styles","horizontalStyles","verticalStyles","globalClasses","TabDataTids","root","Tab","props","context","getProps","defaultProps","state","focusedByKeyboard","tabComponent","getUnderlyingNode","getId","id","href","refTabComponent","instance","getTabInstance","switchTab","event","disabled","preventDefault","component","onClick","defaultPrevented","handleKeyDown","e","onKeyDown","delta","shiftFocus","handleFocus","requestAnimationFrame","isTabPressed","isArrowPressed","setState","handleBlur","componentDidMount","addTab","componentDidUpdate","activeTab","notifyUpdate","componentWillUnmount","removeTab","render","theme","renderMain","getIndicators","error","Boolean","warning","success","primary","children","ariaDescribedby","ariaLabel","Component","isActive","isVertical","vertical","orientationStyles","setRootNode","active","rootSmall","size","rootMedium","rootLarge","verticalSmall","verticalMedium","verticalLarge","focus","focusSmall","focusMedium","focusLarge","__KONTUR_REACT_UI__","displayName","contextType"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport invariant from 'invariant';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { isKeyArrow, isKeyArrowLeft, isKeyArrowUp } from '../../lib/events/keyboard/identifiers';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunctionalComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { SizeProp } from '../../lib/types/props';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/getVisualStateDataAttributes';\n\nimport { TabsContext, TabsContextType, TabsContextDefaultValue } from './TabsContext';\nimport { styles, horizontalStyles, verticalStyles, globalClasses } from './Tab.styles';\n\nexport interface TabIndicators {\n error: boolean;\n warning: boolean;\n success: boolean;\n primary: boolean;\n disabled: boolean;\n}\n\nexport const TabDataTids = {\n root: 'Tab__root',\n} as const;\n\n/**\n * @deprecated use SizeProp\n */\nexport type TabSize = SizeProp;\n\nexport interface TabProps<T extends string = string>\n extends Pick<AriaAttributes, 'aria-label' | 'aria-describedby'>,\n CommonProps {\n /**\n * Позволяет передавать свой компонент, строку или функцию, которая заменит собой элемент используемый в компоненте по умолчанию. Реализует паттерн [render prop](https://www.patterns.dev/posts/render-props-pattern).\n */\n component?: React.ComponentType<any> | string;\n\n /**\n * `HTML`-аттрибут `href`.\n */\n href?: string;\n\n /**\n * Уникальный идентификатор таба. По нему компонент `<Tabs />` определяет какой `<Tab />` сейчас выбран.\n */\n id?: T;\n\n /**\n * `HTML`-событие `onclick`.\n */\n onClick?: (event: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * `HTML`-событие `onkeydown`.\n */\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /**\n * Переводит компонент в отключенное состояние.\n */\n disabled?: boolean;\n\n /**\n * Визуальное состояние ошибки.\n */\n error?: boolean;\n\n /**\n * Визуальное состояние предупреждения.\n */\n warning?: boolean;\n\n /**\n * Визуальное состояние успеха.\n */\n success?: boolean;\n\n /**\n * Визуальное состояние главного элемента.\n */\n primary?: boolean;\n}\n\nexport interface TabState {\n focusedByKeyboard: boolean;\n}\n\ntype DefaultProps = Required<Pick<TabProps, 'component' | 'href'>>;\n\n/**\n * Вложенный элемент компонента `<Tabs />`.\n */\n@rootNode\nexport class Tab<T extends string = string> extends React.Component<TabProps<T>, TabState> {\n public static __KONTUR_REACT_UI__ = 'Tab';\n public static displayName = 'Tab';\n\n public static contextType = TabsContext;\n public context: TabsContextType = this.context;\n\n public static defaultProps: DefaultProps = {\n component: 'a',\n href: '',\n };\n\n private getProps = createPropsGetter(Tab.defaultProps);\n\n public state: TabState = {\n focusedByKeyboard: false,\n };\n\n private theme!: Theme;\n private tabComponent: Nullable<React.ReactElement<Tab<T>>> = null;\n private setRootNode!: TSetRootNode;\n\n constructor(props: TabProps<T>) {\n super(props);\n invariant(this.context !== TabsContextDefaultValue, 'Tab should be placed inside Tabs component');\n }\n\n public componentDidMount() {\n const id = this.getId();\n if (typeof id === 'string') {\n this.context.addTab(id, this.getTabInstance);\n }\n }\n\n public componentDidUpdate() {\n if (this.context.activeTab === this.props.id) {\n this.context.notifyUpdate();\n }\n }\n\n public componentWillUnmount() {\n const id = this.getId();\n if (typeof id === 'string') {\n this.context.removeTab(id);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public getIndicators() {\n return {\n error: Boolean(this.props.error),\n warning: Boolean(this.props.warning),\n success: Boolean(this.props.success),\n primary: Boolean(this.props.primary),\n disabled: Boolean(this.props.disabled),\n };\n }\n\n public getUnderlyingNode = () => this.tabComponent;\n\n private renderMain() {\n const {\n children,\n disabled,\n error,\n warning,\n success,\n primary,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n } = this.props;\n const { component: Component, href } = this.getProps();\n\n let isActive = false;\n let isVertical = false;\n\n const id = this.getId();\n if (typeof id === 'string') {\n isActive = this.context.activeTab === this.getId();\n isVertical = this.context.vertical;\n }\n const orientationStyles = isVertical ? verticalStyles : horizontalStyles;\n\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({ active: isActive, disabled })}\n {...this.props}\n >\n <Component\n data-tid={TabDataTids.root}\n className={cx({\n [styles.rootSmall(this.theme)]: this.context.size === 'small',\n [styles.rootMedium(this.theme)]: this.context.size === 'medium',\n [styles.rootLarge(this.theme)]: this.context.size === 'large',\n [styles.verticalSmall(this.theme)]: !!isVertical && this.context.size === 'small',\n [styles.verticalMedium(this.theme)]: !!isVertical && this.context.size === 'medium',\n [styles.verticalLarge(this.theme)]: !!isVertical && this.context.size === 'large',\n [orientationStyles.primary(this.theme)]: !!primary,\n [orientationStyles.success(this.theme)]: !!success,\n [orientationStyles.warning(this.theme)]: !!warning,\n [orientationStyles.error(this.theme)]: !!error,\n [styles.active()]: !!isActive,\n [orientationStyles.active(this.theme)]: !!isActive,\n [styles.disabled(this.theme)]: !!disabled,\n [orientationStyles.disabled()]: !!disabled,\n })}\n onBlur={this.handleBlur}\n onClick={this.switchTab}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n tabIndex={disabled ? -1 : 0}\n ref={isFunctionalComponent(Component) ? null : this.refTabComponent}\n href={href}\n aria-describedby={ariaDescribedby}\n aria-label={ariaLabel}\n >\n <ResizeDetector onResize={this.context.notifyUpdate}>{children}</ResizeDetector>\n {this.state.focusedByKeyboard && (\n <div\n className={cx(globalClasses.focus, {\n [styles.focusSmall(this.theme)]: this.context.size === 'small',\n [styles.focusMedium(this.theme)]: this.context.size === 'medium',\n [styles.focusLarge(this.theme)]: this.context.size === 'large',\n })}\n />\n )}\n </Component>\n </CommonWrapper>\n );\n }\n\n private getId = () => this.props.id || this.getProps().href;\n\n private refTabComponent = (instance: React.ReactElement<any>) => {\n this.tabComponent = instance;\n };\n\n private getTabInstance = () => this;\n\n private switchTab = (event: React.MouseEvent<HTMLElement>) => {\n if (this.props.disabled) {\n event.preventDefault();\n return;\n }\n const { href, component } = this.getProps();\n\n const id = this.props.id || href;\n if (this.props.onClick) {\n this.props.onClick(event);\n if (event.defaultPrevented) {\n return;\n }\n }\n if (typeof id === 'string') {\n this.context.switchTab(id);\n }\n if (component === 'a' && !href) {\n event.preventDefault();\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n if (e.defaultPrevented) {\n return;\n }\n }\n const id = this.getId();\n if (typeof id !== 'string') {\n return;\n }\n if (!isKeyArrow(e)) {\n return;\n }\n e.preventDefault();\n const delta = isKeyArrowLeft(e) || isKeyArrowUp(e) ? -1 : 1;\n this.context.shiftFocus(id, delta);\n };\n\n private handleFocus = () => {\n if (this.props.disabled) {\n return;\n }\n\n // focus event fires before keyDown eventlistener\n // so we should check focusKeyPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed || keyListener.isArrowPressed) {\n this.setState({ focusedByKeyboard: true });\n }\n });\n };\n\n private handleBlur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.setState({ focusedByKeyboard: false });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Tab.tsx"],"names":["React","invariant","globalObject","ResizeDetector","isKeyArrow","isKeyArrowLeft","isKeyArrowUp","keyListener","isFunctionalComponent","ThemeContext","CommonWrapper","cx","rootNode","createPropsGetter","getVisualStateDataAttributes","TabsContext","TabsContextDefaultValue","globalClasses","horizontalStyles","styles","verticalStyles","TabDataTids","root","Tab","props","context","getProps","defaultProps","state","focusedByKeyboard","tabComponent","getUnderlyingNode","getId","id","href","refTabComponent","instance","getTabInstance","switchTab","event","disabled","preventDefault","component","onClick","defaultPrevented","handleKeyDown","e","onKeyDown","delta","shiftFocus","handleFocus","requestAnimationFrame","isTabPressed","isArrowPressed","setState","handleBlur","componentDidMount","addTab","componentDidUpdate","activeTab","notifyUpdate","componentWillUnmount","removeTab","render","theme","renderMain","getIndicators","error","Boolean","warning","success","primary","children","ariaDescribedby","ariaLabel","Component","isActive","isVertical","vertical","orientationStyles","setRootNode","active","rootSmall","size","rootMedium","rootLarge","verticalSmall","verticalMedium","verticalLarge","focus","focusSmall","focusMedium","focusLarge","__KONTUR_REACT_UI__","displayName","contextType"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport invariant from 'invariant';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { isKeyArrow, isKeyArrowLeft, isKeyArrowUp } from '../../lib/events/keyboard/identifiers';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunctionalComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { SizeProp } from '../../lib/types/props';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { TabsContext, TabsContextDefaultValue, TabsContextType } from './TabsContext';\nimport { globalClasses, horizontalStyles, styles, verticalStyles } from './Tab.styles';\n\nexport interface TabIndicators {\n error: boolean;\n warning: boolean;\n success: boolean;\n primary: boolean;\n disabled: boolean;\n}\n\nexport const TabDataTids = {\n root: 'Tab__root',\n} as const;\n\n/**\n * @deprecated use SizeProp\n */\nexport type TabSize = SizeProp;\n\nexport interface TabProps<T extends string = string>\n extends Pick<AriaAttributes, 'aria-label' | 'aria-describedby'>,\n CommonProps {\n /**\n * Позволяет передавать свой компонент, строку или функцию, которая заменит собой элемент используемый в компоненте по умолчанию. Реализует паттерн [render prop](https://www.patterns.dev/posts/render-props-pattern).\n */\n component?: React.ComponentType<any> | string;\n\n /**\n * `HTML`-аттрибут `href`.\n */\n href?: string;\n\n /**\n * Уникальный идентификатор таба. По нему компонент `<Tabs />` определяет какой `<Tab />` сейчас выбран.\n */\n id?: T;\n\n /**\n * `HTML`-событие `onclick`.\n */\n onClick?: (event: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * `HTML`-событие `onkeydown`.\n */\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /**\n * Переводит компонент в отключенное состояние.\n */\n disabled?: boolean;\n\n /**\n * Визуальное состояние ошибки.\n */\n error?: boolean;\n\n /**\n * Визуальное состояние предупреждения.\n */\n warning?: boolean;\n\n /**\n * Визуальное состояние успеха.\n */\n success?: boolean;\n\n /**\n * Визуальное состояние главного элемента.\n */\n primary?: boolean;\n}\n\nexport interface TabState {\n focusedByKeyboard: boolean;\n}\n\ntype DefaultProps = Required<Pick<TabProps, 'component' | 'href'>>;\n\n/**\n * Вложенный элемент компонента `<Tabs />`.\n */\n@rootNode\nexport class Tab<T extends string = string> extends React.Component<TabProps<T>, TabState> {\n public static __KONTUR_REACT_UI__ = 'Tab';\n public static displayName = 'Tab';\n\n public static contextType = TabsContext;\n public context: TabsContextType = this.context;\n\n public static defaultProps: DefaultProps = {\n component: 'a',\n href: '',\n };\n\n private getProps = createPropsGetter(Tab.defaultProps);\n\n public state: TabState = {\n focusedByKeyboard: false,\n };\n\n private theme!: Theme;\n private tabComponent: Nullable<React.ReactElement<Tab<T>>> = null;\n private setRootNode!: TSetRootNode;\n\n constructor(props: TabProps<T>) {\n super(props);\n invariant(this.context !== TabsContextDefaultValue, 'Tab should be placed inside Tabs component');\n }\n\n public componentDidMount() {\n const id = this.getId();\n if (typeof id === 'string') {\n this.context.addTab(id, this.getTabInstance);\n }\n }\n\n public componentDidUpdate() {\n if (this.context.activeTab === this.props.id) {\n this.context.notifyUpdate();\n }\n }\n\n public componentWillUnmount() {\n const id = this.getId();\n if (typeof id === 'string') {\n this.context.removeTab(id);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public getIndicators() {\n return {\n error: Boolean(this.props.error),\n warning: Boolean(this.props.warning),\n success: Boolean(this.props.success),\n primary: Boolean(this.props.primary),\n disabled: Boolean(this.props.disabled),\n };\n }\n\n public getUnderlyingNode = () => this.tabComponent;\n\n private renderMain() {\n const {\n children,\n disabled,\n error,\n warning,\n success,\n primary,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n } = this.props;\n const { component: Component, href } = this.getProps();\n\n let isActive = false;\n let isVertical = false;\n\n const id = this.getId();\n if (typeof id === 'string') {\n isActive = this.context.activeTab === this.getId();\n isVertical = this.context.vertical;\n }\n const orientationStyles = isVertical ? verticalStyles : horizontalStyles;\n\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({ active: isActive, disabled })}\n {...this.props}\n >\n <Component\n data-tid={TabDataTids.root}\n className={cx({\n [styles.rootSmall(this.theme)]: this.context.size === 'small',\n [styles.rootMedium(this.theme)]: this.context.size === 'medium',\n [styles.rootLarge(this.theme)]: this.context.size === 'large',\n [styles.verticalSmall(this.theme)]: !!isVertical && this.context.size === 'small',\n [styles.verticalMedium(this.theme)]: !!isVertical && this.context.size === 'medium',\n [styles.verticalLarge(this.theme)]: !!isVertical && this.context.size === 'large',\n [orientationStyles.primary(this.theme)]: !!primary,\n [orientationStyles.success(this.theme)]: !!success,\n [orientationStyles.warning(this.theme)]: !!warning,\n [orientationStyles.error(this.theme)]: !!error,\n [styles.active()]: !!isActive,\n [orientationStyles.active(this.theme)]: !!isActive,\n [styles.disabled(this.theme)]: !!disabled,\n [orientationStyles.disabled()]: !!disabled,\n })}\n onBlur={this.handleBlur}\n onClick={this.switchTab}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n tabIndex={disabled ? -1 : 0}\n ref={isFunctionalComponent(Component) ? null : this.refTabComponent}\n href={href}\n aria-describedby={ariaDescribedby}\n aria-label={ariaLabel}\n >\n <ResizeDetector onResize={this.context.notifyUpdate}>{children}</ResizeDetector>\n {this.state.focusedByKeyboard && (\n <div\n className={cx(globalClasses.focus, {\n [styles.focusSmall(this.theme)]: this.context.size === 'small',\n [styles.focusMedium(this.theme)]: this.context.size === 'medium',\n [styles.focusLarge(this.theme)]: this.context.size === 'large',\n })}\n />\n )}\n </Component>\n </CommonWrapper>\n );\n }\n\n private getId = () => this.props.id || this.getProps().href;\n\n private refTabComponent = (instance: React.ReactElement<any>) => {\n this.tabComponent = instance;\n };\n\n private getTabInstance = () => this;\n\n private switchTab = (event: React.MouseEvent<HTMLElement>) => {\n if (this.props.disabled) {\n event.preventDefault();\n return;\n }\n const { href, component } = this.getProps();\n\n const id = this.props.id || href;\n if (this.props.onClick) {\n this.props.onClick(event);\n if (event.defaultPrevented) {\n return;\n }\n }\n if (typeof id === 'string') {\n this.context.switchTab(id);\n }\n if (component === 'a' && !href) {\n event.preventDefault();\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n if (e.defaultPrevented) {\n return;\n }\n }\n const id = this.getId();\n if (typeof id !== 'string') {\n return;\n }\n if (!isKeyArrow(e)) {\n return;\n }\n e.preventDefault();\n const delta = isKeyArrowLeft(e) || isKeyArrowUp(e) ? -1 : 1;\n this.context.shiftFocus(id, delta);\n };\n\n private handleFocus = () => {\n if (this.props.disabled) {\n return;\n }\n\n // focus event fires before keyDown eventlistener\n // so we should check focusKeyPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed || keyListener.isArrowPressed) {\n this.setState({ focusedByKeyboard: true });\n }\n });\n };\n\n private handleBlur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.setState({ focusedByKeyboard: false });\n };\n}\n"]}
|
|
@@ -10,8 +10,8 @@ import { isFunction, isRefableElement } from "../../../lib/utils";
|
|
|
10
10
|
import { cx } from "../../../lib/theming/Emotion";
|
|
11
11
|
import { getRootNode, isInstanceWithRootNode, rootNode } from "../../../lib/rootNode";
|
|
12
12
|
import { callChildRef } from "../../../lib/callChildRef/callChildRef";
|
|
13
|
-
import { extractCommonProps } from "../extractCommonProps";
|
|
14
|
-
import { getCommonVisualStateDataAttributes } from "../getCommonVisualStateDataAttributes";
|
|
13
|
+
import { extractCommonProps } from "../utils/extractCommonProps";
|
|
14
|
+
import { getCommonVisualStateDataAttributes } from "../utils/getCommonVisualStateDataAttributes";
|
|
15
15
|
export var CommonWrapper = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {
|
|
16
16
|
_inheritsLoose(CommonWrapper, _React$Component);
|
|
17
17
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CommonWrapper.tsx"],"names":["React","isFunction","isRefableElement","cx","getRootNode","isInstanceWithRootNode","rootNode","callChildRef","extractCommonProps","getCommonVisualStateDataAttributes","CommonWrapper","rootNodeSubscription","ref","instance","setRootNode","props","rootNodeRef","remove","addRootNodeChangeListener","node","originalRef","child","render","className","style","children","dataProps","rest","getChildProps","childProps","classNames","styles","Object","keys","length","isValidElement","cloneElement","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"iUAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,UAAT,EAAqBC,gBAArB,QAA6C,iBAA7C;AACA,SAASC,EAAT,QAAmB,2BAAnB;;AAEA,SAASC,WAAT,EAAsBC,sBAAtB,EAA8CC,QAA9C,QAAmG,oBAAnG;AACA,SAASC,YAAT,QAA6B,qCAA7B;;;AAGA,SAASC,kBAAT,QAAmC,
|
|
1
|
+
{"version":3,"sources":["CommonWrapper.tsx"],"names":["React","isFunction","isRefableElement","cx","getRootNode","isInstanceWithRootNode","rootNode","callChildRef","extractCommonProps","getCommonVisualStateDataAttributes","CommonWrapper","rootNodeSubscription","ref","instance","setRootNode","props","rootNodeRef","remove","addRootNodeChangeListener","node","originalRef","child","render","className","style","children","dataProps","rest","getChildProps","childProps","classNames","styles","Object","keys","length","isValidElement","cloneElement","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"iUAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,UAAT,EAAqBC,gBAArB,QAA6C,iBAA7C;AACA,SAASC,EAAT,QAAmB,2BAAnB;;AAEA,SAASC,WAAT,EAAsBC,sBAAtB,EAA8CC,QAA9C,QAAmG,oBAAnG;AACA,SAASC,YAAT,QAA6B,qCAA7B;;;AAGA,SAASC,kBAAT,QAAmC,4BAAnC;AACA,SAASC,kCAAT,QAAmD,4CAAnD;;;;;AAKA,WAAaC,aAAb,GADCJ,QACD;;;;;;;;AAQUK,IAAAA,oBARV,GAQkE,IARlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCUC,IAAAA,GApCV,GAoCgB,UAACC,QAAD,EAA6C;AACzD,YAAKC,WAAL,CAAiBD,QAAjB;AACA,YAAKE,KAAL,CAAWC,WAAX,0BAAKD,KAAL,CAAWC,WAAX,CAAyBZ,WAAW,CAACS,QAAD,CAApC;;AAEA;AACA;AACA,qCAAKF,oBAAL,2CAA2BM,MAA3B;AACA,YAAKN,oBAAL,GAA4B,IAA5B;;AAEA,UAAIE,QAAQ,IAAIR,sBAAsB,CAACQ,QAAD,CAAtC,EAAkD;AAChD,cAAKF,oBAAL,GAA4BE,QAAQ,CAACK,yBAArC,oBAA4BL,QAAQ,CAACK,yBAAT,CAAqC,UAACC,IAAD,EAAU;AACzE,gBAAKL,WAAL,CAAiBK,IAAjB;AACA,gBAAKJ,KAAL,CAAWC,WAAX,0BAAKD,KAAL,CAAWC,WAAX,CAAyBG,IAAzB;AACD,SAH2B,CAA5B;AAID;;AAED,UAAMC,WAAW,kBAAI,MAAKC,KAAT,qBAAG,YAA0CT,GAA9D;AACAQ,MAAAA,WAAW,IAAIb,YAAY,CAACa,WAAD,EAAcP,QAAd,CAA3B;AACD,KAtDH,2DAUES,MAVF,GAUE,kBAAS,mBACP,0BAAiFd,kBAAkB,CAAC,KAAKO,KAAN,CAAnG,+CAASQ,SAAT,wBAASA,SAAT,CAAoBC,KAApB,wBAAoBA,KAApB,CAA2BC,QAA3B,wBAA2BA,QAA3B,CAAqCT,WAArC,wBAAqCA,WAArC,CAAqDU,SAArD,kEAAuEC,IAAvE,wCACA,KAAKN,KAAL,GAAapB,UAAU,CAACwB,QAAD,CAAV,GAAuBA,QAAQ,CAACE,IAAD,CAA/B,GAAwCF,QAArD,CAEA,IAAMG,aAAa,GAAG,SAAhBA,aAAgB,CAACP,KAAD,EAAuE,CAC3F,IAAMQ,UAAmC,gBACpCpB,kCAAkC,CAACkB,IAAD,CADE,EAEpCD,SAFoC,CAAzC,CAKAxB,gBAAgB,CAACmB,KAAD,CAAhB,KAA4BQ,UAAU,CAACjB,GAAX,GAAiB,MAAI,CAACA,GAAlD,EAEA,IAAMkB,UAAkB,GAAG3B,EAAE,CAACkB,KAAK,CAACN,KAAN,CAAYQ,SAAb,EAAwBA,SAAxB,CAA7B,CACAO,UAAU,KAAKD,UAAU,CAACN,SAAX,GAAuBO,UAA5B,CAAV,CAEA,IAAMC,MAA2B,gBAAQV,KAAK,CAACN,KAAN,CAAYS,KAApB,EAA8BA,KAA9B,CAAjC,CACAQ,MAAM,CAACC,IAAP,CAAYF,MAAZ,EAAoBG,MAApB,KAA+BL,UAAU,CAACL,KAAX,GAAmBO,MAAlD,EAEA,OAAOF,UAAP,CACD,CAfD,CAiBA,OAAO,aAAA7B,KAAK,CAACmC,cAAN,CAA6D,KAAKd,KAAlE,iBACHrB,KAAK,CAACoC,YAAN,CAAmB,KAAKf,KAAxB,EAA+BO,aAAa,CAAC,KAAKP,KAAN,CAA5C,CADG,GAEH,KAAKA,KAFT,CAGD,CAlCH,wBAAyErB,KAAK,CAACqC,SAA/E,WAGgBC,mBAHhB,GAGsC,eAHtC,UAIgBC,WAJhB,GAI8B,eAJ9B","sourcesContent":["import React from 'react';\n\nimport { isFunction, isRefableElement } from '../../lib/utils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { Nullable } from '../../typings/utility-types';\nimport { getRootNode, isInstanceWithRootNode, rootNode, TRootNodeSubscription, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport type { CommonProps, CommonPropsRootNodeRef, CommonWrapperProps } from './types';\nimport { extractCommonProps } from './utils/extractCommonProps';\nimport { getCommonVisualStateDataAttributes } from './utils/getCommonVisualStateDataAttributes';\n\nexport type CommonPropsWithRootNodeRef = CommonProps & CommonPropsRootNodeRef;\n\n@rootNode\nexport class CommonWrapper<P extends CommonPropsWithRootNodeRef> extends React.Component<\n CommonWrapperProps<P> & CommonPropsRootNodeRef\n> {\n public static __KONTUR_REACT_UI__ = 'CommonWrapper';\n public static displayName = 'CommonWrapper';\n\n private child: React.ReactNode;\n private setRootNode!: TSetRootNode;\n private rootNodeSubscription: Nullable<TRootNodeSubscription> = null;\n\n render() {\n const [{ className, style, children, rootNodeRef, ...dataProps }, { ...rest }] = extractCommonProps(this.props);\n this.child = isFunction(children) ? children(rest) : children;\n\n const getChildProps = (child: React.ReactElement<CommonProps & React.RefAttributes<any>>) => {\n const childProps: Record<string, unknown> = {\n ...getCommonVisualStateDataAttributes(rest),\n ...dataProps,\n };\n\n isRefableElement(child) && (childProps.ref = this.ref);\n\n const classNames: string = cx(child.props.className, className);\n classNames && (childProps.className = classNames);\n\n const styles: React.CSSProperties = { ...child.props.style, ...style };\n Object.keys(styles).length && (childProps.style = styles);\n\n return childProps;\n };\n\n return React.isValidElement<CommonProps & React.RefAttributes<any>>(this.child)\n ? React.cloneElement(this.child, getChildProps(this.child))\n : this.child;\n }\n\n private ref = (instance: Nullable<React.ReactInstance>) => {\n this.setRootNode(instance);\n this.props.rootNodeRef?.(getRootNode(instance));\n\n // refs are called when instances change,\n // so we have to renew or remove old subscription\n this.rootNodeSubscription?.remove();\n this.rootNodeSubscription = null;\n\n if (instance && isInstanceWithRootNode(instance)) {\n this.rootNodeSubscription = instance.addRootNodeChangeListener?.((node) => {\n this.setRootNode(node);\n this.props.rootNodeRef?.(node);\n });\n }\n\n const originalRef = (this.child as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n };\n}\n"]}
|