@skbkontur/react-ui 3.8.1 → 3.8.2
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 +15 -2
- package/cjs/components/CurrencyLabel/CurrencyLabel.js +5 -14
- package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +1 -0
- package/cjs/components/Dropdown/Dropdown.js +1 -0
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.md +0 -1
- package/cjs/components/DropdownMenu/DropdownMenu.d.ts +17 -3
- package/cjs/components/DropdownMenu/DropdownMenu.js +15 -1
- package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/cjs/components/DropdownMenu/DropdownMenu.md +87 -6
- package/cjs/components/Kebab/Kebab.d.ts +5 -2
- package/cjs/components/Kebab/Kebab.js +3 -0
- package/cjs/components/Kebab/Kebab.js.map +1 -1
- package/cjs/components/Kebab/Kebab.md +249 -3
- package/cjs/components/MenuHeader/MenuHeader.d.ts +5 -1
- package/cjs/components/MenuHeader/MenuHeader.js +5 -1
- package/cjs/components/MenuHeader/MenuHeader.js.map +1 -1
- package/cjs/components/MenuHeader/MenuHeader.md +23 -0
- package/cjs/components/MenuItem/MenuItem.d.ts +10 -1
- package/cjs/components/MenuItem/MenuItem.js +11 -1
- package/cjs/components/MenuItem/MenuItem.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.md +106 -4
- package/cjs/components/MenuSeparator/MenuSeparator.d.ts +3 -1
- package/cjs/components/MenuSeparator/MenuSeparator.js +3 -1
- package/cjs/components/MenuSeparator/MenuSeparator.js.map +1 -1
- package/cjs/components/MenuSeparator/MenuSeparator.md +14 -0
- package/cjs/components/Toggle/Toggle.d.ts +4 -0
- package/cjs/components/Toggle/Toggle.js +7 -1
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Toggle/Toggle.md +13 -0
- package/cjs/components/Toggle/Toggle.styles.d.ts +1 -0
- package/cjs/components/Toggle/Toggle.styles.js +6 -7
- package/cjs/components/Toggle/Toggle.styles.js.map +1 -1
- package/cjs/components/TooltipMenu/TooltipMenu.d.ts +26 -8
- package/cjs/components/TooltipMenu/TooltipMenu.js +24 -6
- package/cjs/components/TooltipMenu/TooltipMenu.js.map +1 -1
- package/cjs/components/TooltipMenu/TooltipMenu.md +76 -8
- package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +5 -11
- package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
- package/components/Dropdown/Dropdown/Dropdown.js +1 -0
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +1 -0
- package/components/Dropdown/Dropdown.md +0 -1
- package/components/DropdownMenu/DropdownMenu/DropdownMenu.js +1 -1
- package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
- package/components/DropdownMenu/DropdownMenu.d.ts +17 -3
- package/components/DropdownMenu/DropdownMenu.md +87 -6
- package/components/Kebab/Kebab/Kebab.js.map +1 -1
- package/components/Kebab/Kebab.d.ts +5 -2
- package/components/Kebab/Kebab.md +249 -3
- package/components/MenuHeader/MenuHeader/MenuHeader.js +5 -1
- package/components/MenuHeader/MenuHeader/MenuHeader.js.map +1 -1
- package/components/MenuHeader/MenuHeader.d.ts +5 -1
- package/components/MenuHeader/MenuHeader.md +23 -0
- package/components/MenuItem/MenuItem/MenuItem.js +4 -1
- package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +10 -1
- package/components/MenuItem/MenuItem.md +106 -4
- package/components/MenuSeparator/MenuSeparator/MenuSeparator.js +3 -1
- package/components/MenuSeparator/MenuSeparator/MenuSeparator.js.map +1 -1
- package/components/MenuSeparator/MenuSeparator.d.ts +3 -1
- package/components/MenuSeparator/MenuSeparator.md +14 -0
- package/components/Toggle/Toggle/Toggle.js +5 -3
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +4 -0
- package/components/Toggle/Toggle.md +13 -0
- package/components/Toggle/Toggle.styles/Toggle.styles.js +3 -3
- package/components/Toggle/Toggle.styles/Toggle.styles.js.map +1 -1
- package/components/Toggle/Toggle.styles.d.ts +1 -0
- package/components/TooltipMenu/TooltipMenu/TooltipMenu.js +9 -6
- package/components/TooltipMenu/TooltipMenu/TooltipMenu.js.map +1 -1
- package/components/TooltipMenu/TooltipMenu.d.ts +26 -8
- package/components/TooltipMenu/TooltipMenu.md +76 -8
- package/package.json +2 -2
- package/cjs/components/CurrencyLabel/CurrencyLabel.styles.d.ts +0 -4
- package/cjs/components/CurrencyLabel/CurrencyLabel.styles.js +0 -9
- package/cjs/components/CurrencyLabel/CurrencyLabel.styles.js.map +0 -1
- package/components/CurrencyLabel/CurrencyLabel.styles/CurrencyLabel.styles.js +0 -10
- package/components/CurrencyLabel/CurrencyLabel.styles/CurrencyLabel.styles.js.map +0 -1
- package/components/CurrencyLabel/CurrencyLabel.styles/package.json +0 -6
- package/components/CurrencyLabel/CurrencyLabel.styles.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Dropdown.tsx"],"names":["React","PropTypes","filterProps","MenuHeader","MenuItem","MenuSeparator","Select","CommonWrapper","PASS_PROPS","_renderButton","error","disabled","disablePortal","menuAlign","menuWidth","maxMenuHeight","use","size","warning","width","onOpen","onClose","onMouseEnter","onMouseLeave","onMouseOver","Dropdown","_select","renderMain","caption","icon","props","items","Children","map","children","item","_refSelect","renderValue","element","render","open","close","Component","__KONTUR_REACT_UI__","Header","Separator","propTypes","node","isRequired","bool","number","oneOf","oneOfType","string","any","func","value"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { filterProps } from '../../lib/filterProps';\nimport { MenuHeader } from '../MenuHeader';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { Select } from '../Select';\nimport { Nullable } from '../../typings/utility-types';\nimport { ButtonSize, ButtonUse } from '../Button';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\n\nconst PASS_PROPS = {\n _renderButton: true,\n error: true,\n disabled: true,\n disablePortal: true,\n menuAlign: true,\n menuWidth: true,\n maxMenuHeight: true,\n use: true,\n size: true,\n warning: true,\n width: true,\n onOpen: true,\n onClose: true,\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface DropdownProps extends CommonProps {\n /**\n * Подпись на кнопке.\n */\n caption: React.ReactNode;\n /**\n * Иконка слева от текста кнопки\n */\n icon?: React.ReactElement<any>;\n width?: React.CSSProperties['width'];\n\n /** @ignore */\n _renderButton?: (params: any) => JSX.Element;\n\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n\n /**\n * Визуально отключает Dropdown\n */\n disabled?: boolean;\n\n /**\n * Визуально показать наличие ошибки.\n */\n error?: boolean;\n /**\n * Визуально показать наличие предупреждения.\n */\n warning?: boolean;\n maxMenuHeight?: number;\n menuAlign?: 'left' | 'right';\n menuWidth?: number | string;\n size?: ButtonSize;\n\n /**\n * Смотри Button.\n */\n use?: ButtonUse;\n\n /**\n * Вызывается при закрытии меню.\n */\n onClose?: () => void;\n /**\n * Вызывается при открытии меню.\n */\n onOpen?: () => void;\n onMouseEnter?: (event: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (event: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (event: React.MouseEvent<HTMLElement>) => void;\n}\n\ntype DropdownSelectType = Select<React.ReactNode, React.ReactNode>;\n\n/**\n * Выпадающее меню.\n */\nexport class Dropdown extends React.Component<DropdownProps> {\n public static __KONTUR_REACT_UI__ = 'Dropdown';\n\n public static Header = MenuHeader;\n public static MenuItem = MenuItem;\n public static Separator = MenuSeparator;\n\n public static propTypes = {\n /**\n * Подпись на кнопке.\n */\n caption: PropTypes.node.isRequired,\n\n /**\n * Отключает использование портала\n */\n disablePortal: PropTypes.bool,\n\n /**\n * Визуально отключает Dropdown\n */\n disabled: PropTypes.bool,\n\n /**\n * Визуально показать наличие ошибки.\n */\n error: PropTypes.bool,\n\n /**\n * Иконка слева от текста кнопки\n */\n icon: PropTypes.node,\n\n maxMenuHeight: PropTypes.number,\n\n menuAlign: PropTypes.oneOf(['left', 'right']),\n\n menuWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n\n /**\n * Смотри Button.\n */\n use: PropTypes.any,\n\n /**\n * Визуально показать наличие предупреждения.\n */\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Вызывается при закрытии меню.\n */\n onClose: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n /**\n * Вызывается при открытии меню.\n */\n onOpen: PropTypes.func,\n };\n\n private _select: Nullable<DropdownSelectType>;\n\n public render() {\n return <CommonWrapper {...this.props}>{this.renderMain}</CommonWrapper>;\n }\n\n public renderMain = ({ caption, icon, ...props }: CommonWrapperRestProps<DropdownProps>) => {\n const items = React.Children.map(this.props.children, (item) => item) || [];\n\n return (\n <Select<React.ReactNode, React.ReactNode>\n ref={this._refSelect}\n {...filterProps(props, PASS_PROPS)}\n value={caption}\n items={items}\n _icon={icon}\n renderValue={renderValue}\n />\n );\n };\n\n /**\n * @public\n */\n public open() {\n if (this._select) {\n this._select.open();\n }\n }\n\n /**\n * @public\n */\n public close() {\n if (this._select) {\n this._select.close();\n }\n }\n\n private _refSelect = (element: DropdownSelectType): void => {\n this._select = element;\n };\n}\n\nfunction renderValue(value: any) {\n return value;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Dropdown.tsx"],"names":["React","PropTypes","filterProps","MenuHeader","MenuItem","MenuSeparator","Select","CommonWrapper","PASS_PROPS","_renderButton","error","disabled","disablePortal","menuAlign","menuWidth","maxMenuHeight","use","size","warning","width","onOpen","onClose","onMouseEnter","onMouseLeave","onMouseOver","Dropdown","_select","renderMain","caption","icon","props","items","Children","map","children","item","_refSelect","renderValue","element","render","open","close","Component","__KONTUR_REACT_UI__","Header","Separator","propTypes","node","isRequired","bool","number","oneOf","oneOfType","string","any","func","value"],"mappings":"oOAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;;AAEA,SAASC,WAAT,QAA4B,uBAA5B;AACA,SAASC,UAAT,QAA2B,eAA3B;AACA,SAASC,QAAT,QAAyB,aAAzB;AACA,SAASC,aAAT,QAA8B,kBAA9B;AACA,SAASC,MAAT,QAAuB,WAAvB;;;AAGA,SAASC,aAAT,QAAmE,8BAAnE;;AAEA,IAAMC,UAAU,GAAG;AACjBC,EAAAA,aAAa,EAAE,IADE;AAEjBC,EAAAA,KAAK,EAAE,IAFU;AAGjBC,EAAAA,QAAQ,EAAE,IAHO;AAIjBC,EAAAA,aAAa,EAAE,IAJE;AAKjBC,EAAAA,SAAS,EAAE,IALM;AAMjBC,EAAAA,SAAS,EAAE,IANM;AAOjBC,EAAAA,aAAa,EAAE,IAPE;AAQjBC,EAAAA,GAAG,EAAE,IARY;AASjBC,EAAAA,IAAI,EAAE,IATW;AAUjBC,EAAAA,OAAO,EAAE,IAVQ;AAWjBC,EAAAA,KAAK,EAAE,IAXU;AAYjBC,EAAAA,MAAM,EAAE,IAZS;AAajBC,EAAAA,OAAO,EAAE,IAbQ;AAcjBC,EAAAA,YAAY,EAAE,IAdG;AAejBC,EAAAA,YAAY,EAAE,IAfG;AAgBjBC,EAAAA,WAAW,EAAE,IAhBI,EAAnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4EA;AACA;AACA;AACA;AACA,WAAaC,QAAb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEUC,IAAAA,OAtEV;;;;;;AA4ESC,IAAAA,UA5ET,GA4EsB,gBAAwE,KAArEC,OAAqE,QAArEA,OAAqE,CAA5DC,IAA4D,QAA5DA,IAA4D,CAAnDC,KAAmD;AAC1F,UAAMC,KAAK,GAAG/B,KAAK,CAACgC,QAAN,CAAeC,GAAf,CAAmB,MAAKH,KAAL,CAAWI,QAA9B,EAAwC,UAACC,IAAD,UAAUA,IAAV,EAAxC,KAA2D,EAAzE;;AAEA;AACE,4BAAC,MAAD;AACE,UAAA,GAAG,EAAE,MAAKC,UADZ;AAEMlC,QAAAA,WAAW,CAAC4B,KAAD,EAAQtB,UAAR,CAFjB;AAGE,UAAA,KAAK,EAAEoB,OAHT;AAIE,UAAA,KAAK,EAAEG,KAJT;AAKE,UAAA,KAAK,EAAEF,IALT;AAME,UAAA,WAAW,EAAEQ,WANf,IADF;;;AAUD,KAzFH;;;;;;;;;;;;;;;;;;;;AA6GUD,IAAAA,UA7GV,GA6GuB,UAACE,OAAD,EAAuC;AAC1D,YAAKZ,OAAL,GAAeY,OAAf;AACD,KA/GH,sDAwESC,MAxET,GAwEE,kBAAgB,CACd,oBAAO,oBAAC,aAAD,EAAmB,KAAKT,KAAxB,EAAgC,KAAKH,UAArC,CAAP,CACD,CA1EH,EA2FE;AACF;AACA,KA7FA,OA8FSa,IA9FT,GA8FE,gBAAc,CACZ,IAAI,KAAKd,OAAT,EAAkB,CAChB,KAAKA,OAAL,CAAac,IAAb,GACD,CACF,CAlGH,CAoGE;AACF;AACA,KAtGA,QAuGSC,KAvGT,GAuGE,iBAAe,CACb,IAAI,KAAKf,OAAT,EAAkB,CAChB,KAAKA,OAAL,CAAae,KAAb,GACD,CACF,CA3GH,mBAA8BzC,KAAK,CAAC0C,SAApC,EAAajB,Q,CACGkB,mB,GAAsB,U,CADzBlB,Q,CAGGmB,M,GAASzC,U,CAHZsB,Q,CAIGrB,Q,GAAWA,Q,CAJdqB,Q,CAKGoB,S,GAAYxC,a,CALfoB,Q,CAOGqB,S,GAAY,EACxB;AACJ;AACA,KACIlB,OAAO,EAAE3B,SAAS,CAAC8C,IAAV,CAAeC,UAJA,EAMxB;AACJ;AACA,KACIpC,aAAa,EAAEX,SAAS,CAACgD,IATD,EAWxB;AACJ;AACA,KACItC,QAAQ,EAAEV,SAAS,CAACgD,IAdI,EAgBxB;AACJ;AACA,KACIvC,KAAK,EAAET,SAAS,CAACgD,IAnBO,EAqBxB;AACJ;AACA,KACIpB,IAAI,EAAE5B,SAAS,CAAC8C,IAxBQ,EA0BxBhC,aAAa,EAAEd,SAAS,CAACiD,MA1BD,EA4BxBrC,SAAS,EAAEZ,SAAS,CAACkD,KAAV,CAAgB,CAAC,MAAD,EAAS,OAAT,CAAhB,CA5Ba,EA8BxBrC,SAAS,EAAEb,SAAS,CAACmD,SAAV,CAAoB,CAACnD,SAAS,CAACiD,MAAX,EAAmBjD,SAAS,CAACoD,MAA7B,CAApB,CA9Ba,EAgCxBpC,IAAI,EAAEhB,SAAS,CAACkD,KAAV,CAAgB,CAAC,OAAD,EAAU,QAAV,EAAoB,OAApB,CAAhB,CAhCkB,EAkCxB;AACJ;AACA,KACInC,GAAG,EAAEf,SAAS,CAACqD,GArCS,EAuCxB;AACJ;AACA,KACIpC,OAAO,EAAEjB,SAAS,CAACgD,IA1CK,EA4CxB9B,KAAK,EAAElB,SAAS,CAACmD,SAAV,CAAoB,CAACnD,SAAS,CAACiD,MAAX,EAAmBjD,SAAS,CAACoD,MAA7B,CAApB,CA5CiB,EA8CxB;AACJ;AACA,KACIhC,OAAO,EAAEpB,SAAS,CAACsD,IAjDK,EAmDxBjC,YAAY,EAAErB,SAAS,CAACsD,IAnDA,EAqDxBhC,YAAY,EAAEtB,SAAS,CAACsD,IArDA,EAuDxB/B,WAAW,EAAEvB,SAAS,CAACsD,IAvDC,EAyDxB;AACJ;AACA,KACInC,MAAM,EAAEnB,SAAS,CAACsD,IA5DM,E,CA2G5B,SAASlB,WAAT,CAAqBmB,KAArB,EAAiC,CAC/B,OAAOA,KAAP,CACD","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { filterProps } from '../../lib/filterProps';\nimport { MenuHeader } from '../MenuHeader';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { Select } from '../Select';\nimport { Nullable } from '../../typings/utility-types';\nimport { ButtonSize, ButtonUse } from '../Button';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\n\nconst PASS_PROPS = {\n _renderButton: true,\n error: true,\n disabled: true,\n disablePortal: true,\n menuAlign: true,\n menuWidth: true,\n maxMenuHeight: true,\n use: true,\n size: true,\n warning: true,\n width: true,\n onOpen: true,\n onClose: true,\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface DropdownProps extends CommonProps {\n /**\n * Подпись на кнопке.\n */\n caption: React.ReactNode;\n /**\n * Иконка слева от текста кнопки\n */\n icon?: React.ReactElement<any>;\n width?: React.CSSProperties['width'];\n\n /** @ignore */\n _renderButton?: (params: any) => JSX.Element;\n\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n\n /**\n * Визуально отключает Dropdown\n */\n disabled?: boolean;\n\n /**\n * Визуально показать наличие ошибки.\n */\n error?: boolean;\n /**\n * Визуально показать наличие предупреждения.\n */\n warning?: boolean;\n maxMenuHeight?: number;\n menuAlign?: 'left' | 'right';\n menuWidth?: number | string;\n size?: ButtonSize;\n\n /**\n * Смотри Button.\n */\n use?: ButtonUse;\n\n /**\n * Вызывается при закрытии меню.\n */\n onClose?: () => void;\n /**\n * Вызывается при открытии меню.\n */\n onOpen?: () => void;\n onMouseEnter?: (event: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (event: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (event: React.MouseEvent<HTMLElement>) => void;\n}\n\ntype DropdownSelectType = Select<React.ReactNode, React.ReactNode>;\n\n/**\n * Выпадающее меню.\n *\n */\nexport class Dropdown extends React.Component<DropdownProps> {\n public static __KONTUR_REACT_UI__ = 'Dropdown';\n\n public static Header = MenuHeader;\n public static MenuItem = MenuItem;\n public static Separator = MenuSeparator;\n\n public static propTypes = {\n /**\n * Подпись на кнопке.\n */\n caption: PropTypes.node.isRequired,\n\n /**\n * Отключает использование портала\n */\n disablePortal: PropTypes.bool,\n\n /**\n * Визуально отключает Dropdown\n */\n disabled: PropTypes.bool,\n\n /**\n * Визуально показать наличие ошибки.\n */\n error: PropTypes.bool,\n\n /**\n * Иконка слева от текста кнопки\n */\n icon: PropTypes.node,\n\n maxMenuHeight: PropTypes.number,\n\n menuAlign: PropTypes.oneOf(['left', 'right']),\n\n menuWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n\n /**\n * Смотри Button.\n */\n use: PropTypes.any,\n\n /**\n * Визуально показать наличие предупреждения.\n */\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Вызывается при закрытии меню.\n */\n onClose: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n /**\n * Вызывается при открытии меню.\n */\n onOpen: PropTypes.func,\n };\n\n private _select: Nullable<DropdownSelectType>;\n\n public render() {\n return <CommonWrapper {...this.props}>{this.renderMain}</CommonWrapper>;\n }\n\n public renderMain = ({ caption, icon, ...props }: CommonWrapperRestProps<DropdownProps>) => {\n const items = React.Children.map(this.props.children, (item) => item) || [];\n\n return (\n <Select<React.ReactNode, React.ReactNode>\n ref={this._refSelect}\n {...filterProps(props, PASS_PROPS)}\n value={caption}\n items={items}\n _icon={icon}\n renderValue={renderValue}\n />\n );\n };\n\n /**\n * @public\n */\n public open() {\n if (this._select) {\n this._select.open();\n }\n }\n\n /**\n * @public\n */\n public close() {\n if (this._select) {\n this._select.close();\n }\n }\n\n private _refSelect = (element: DropdownSelectType): void => {\n this._select = element;\n };\n}\n\nfunction renderValue(value: any) {\n return value;\n}\n"]}
|
|
@@ -6,7 +6,7 @@ import { PopupMenu } from "../../../internal/PopupMenu";
|
|
|
6
6
|
import { isProductionEnv, isTestEnv } from "../../../lib/currentEnvironment";
|
|
7
7
|
import { CommonWrapper } from "../../../internal/CommonWrapper";
|
|
8
8
|
/**
|
|
9
|
-
* Меню, раскрывающееся по клику на переданный в
|
|
9
|
+
* Меню, раскрывающееся по клику на переданный в `caption` элемент
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
export var DropdownMenu = /*#__PURE__*/function (_React$Component) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["DropdownMenu.tsx"],"names":["React","ThemeContext","ThemeFactory","PopupMenu","isProductionEnv","isTestEnv","CommonWrapper","DropdownMenu","props","popupMenu","open","close","refPopupMenu","ref","handleChangeMenuState","menuVisible","onOpen","onClose","caption","Error","render","theme","create","popupMargin","renderMain","menuMaxHeight","menuWidth","positions","disableAnimations","header","footer","width","children","Component","__KONTUR_REACT_UI__","defaultProps"],"mappings":"sEAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAASC,SAAT,QAA0C,0BAA1C;AACA,SAASC,eAAT,EAA0BC,SAA1B,QAA2C,8BAA3C;;AAEA,SAASC,aAAT,QAA2C,8BAA3C
|
|
1
|
+
{"version":3,"sources":["DropdownMenu.tsx"],"names":["React","ThemeContext","ThemeFactory","PopupMenu","isProductionEnv","isTestEnv","CommonWrapper","DropdownMenu","props","popupMenu","open","close","refPopupMenu","ref","handleChangeMenuState","menuVisible","onOpen","onClose","caption","Error","render","theme","create","popupMargin","renderMain","menuMaxHeight","menuWidth","positions","disableAnimations","header","footer","width","children","Component","__KONTUR_REACT_UI__","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Nullable } from '../../typings/utility-types';\nimport { PopupMenu, PopupMenuProps } from '../../internal/PopupMenu';\nimport { isProductionEnv, isTestEnv } from '../../lib/currentEnvironment';\nimport { PopupPosition } from '../../internal/Popup';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\n\nexport interface DropdownMenuProps extends CommonProps {\n /** Максимальная высота меню */\n menuMaxHeight?: React.CSSProperties['maxWidth'];\n /** Ширина меню */\n menuWidth?: React.CSSProperties['width'];\n /** Ширина caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо `caption`,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: PopupMenuProps['caption'];\n\n /**\n * Произвольный элемент, который будет отрендерен в шапке меню.\n *\n * _Примечание_: контрол [`MenuHeader`](#/Components/MenuHeader) передаётся только в `children` меню-контролов. Не стоит передавать `MenuHeader` в `header`.\n */\n header?: React.ReactNode;\n /**\n * Произвольный элемент, который будет отрендерен в подвале меню.\n *\n * Перед элементом переданным в `footer` будет отрендерен [`MenuSeparator`](#/Components/MenuSeparator).\n */\n footer?: React.ReactNode;\n /**\n * Список позиций доступных для расположения выпадашки относительно `caption`.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions?: PopupPosition[];\n\n onOpen?: () => void;\n onClose?: () => void;\n\n /**\n * Не показывать анимацию\n */\n disableAnimations: boolean;\n}\n\n/**\n * Меню, раскрывающееся по клику на переданный в `caption` элемент\n */\nexport class DropdownMenu extends React.Component<DropdownMenuProps> {\n public static __KONTUR_REACT_UI__ = 'DropdownMenu';\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n };\n\n private popupMenu: Nullable<PopupMenu> = null;\n\n constructor(props: DropdownMenuProps) {\n super(props);\n\n if (!props.caption && !isProductionEnv) {\n throw new Error('Prop \"caption\" is required!!!');\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupMargin: '0px',\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n if (!this.props.caption) {\n return null;\n }\n return (\n <CommonWrapper {...this.props}>\n <PopupMenu\n ref={this.refPopupMenu}\n caption={this.props.caption}\n menuMaxHeight={this.props.menuMaxHeight}\n menuWidth={this.props.menuWidth}\n onChangeMenuState={this.handleChangeMenuState}\n popupHasPin={false}\n positions={this.props.positions}\n disableAnimations={this.props.disableAnimations}\n header={this.props.header}\n footer={this.props.footer}\n width={this.props.width}\n >\n {this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n\n public open = (): void => {\n if (this.popupMenu) {\n this.popupMenu.open();\n }\n };\n\n public close = (): void => {\n if (this.popupMenu) {\n this.popupMenu.close();\n }\n };\n\n private refPopupMenu = (ref: Nullable<PopupMenu>) => (this.popupMenu = ref);\n\n private handleChangeMenuState = (menuVisible: boolean) => {\n if (menuVisible && this.props.onOpen) {\n this.props.onOpen();\n return;\n }\n\n if (!menuVisible && this.props.onClose) {\n this.props.onClose();\n return;\n }\n };\n}\n"]}
|
|
@@ -11,15 +11,29 @@ export interface DropdownMenuProps extends CommonProps {
|
|
|
11
11
|
width?: React.CSSProperties['width'];
|
|
12
12
|
/**
|
|
13
13
|
* Элемент или функция возвращающая элемент,
|
|
14
|
-
* если передана, используется вместо
|
|
14
|
+
* если передана, используется вместо `caption`,
|
|
15
15
|
* в таком случае управлять открытием и закрытием меню
|
|
16
16
|
* придется в этой функции
|
|
17
17
|
*/
|
|
18
18
|
caption: PopupMenuProps['caption'];
|
|
19
|
+
/**
|
|
20
|
+
* Произвольный элемент, который будет отрендерен в шапке меню.
|
|
21
|
+
*
|
|
22
|
+
* _Примечание_: контрол [`MenuHeader`](#/Components/MenuHeader) передаётся только в `children` меню-контролов. Не стоит передавать `MenuHeader` в `header`.
|
|
23
|
+
*/
|
|
19
24
|
header?: React.ReactNode;
|
|
25
|
+
/**
|
|
26
|
+
* Произвольный элемент, который будет отрендерен в подвале меню.
|
|
27
|
+
*
|
|
28
|
+
* Перед элементом переданным в `footer` будет отрендерен [`MenuSeparator`](#/Components/MenuSeparator).
|
|
29
|
+
*/
|
|
20
30
|
footer?: React.ReactNode;
|
|
21
31
|
/**
|
|
22
|
-
*
|
|
32
|
+
* Список позиций доступных для расположения выпадашки относительно `caption`.
|
|
33
|
+
*
|
|
34
|
+
* Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.
|
|
35
|
+
*
|
|
36
|
+
* **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`
|
|
23
37
|
* @default ['bottom left', 'bottom right', 'top left', 'top right']
|
|
24
38
|
*/
|
|
25
39
|
positions?: PopupPosition[];
|
|
@@ -31,7 +45,7 @@ export interface DropdownMenuProps extends CommonProps {
|
|
|
31
45
|
disableAnimations: boolean;
|
|
32
46
|
}
|
|
33
47
|
/**
|
|
34
|
-
* Меню, раскрывающееся по клику на переданный в
|
|
48
|
+
* Меню, раскрывающееся по клику на переданный в `caption` элемент
|
|
35
49
|
*/
|
|
36
50
|
export declare class DropdownMenu extends React.Component<DropdownMenuProps> {
|
|
37
51
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
Базовый пример меню.
|
|
2
2
|
|
|
3
3
|
```jsx harmony
|
|
4
4
|
import { Button, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui';
|
|
@@ -16,12 +16,12 @@ import { Button, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui
|
|
|
16
16
|
</DropdownMenu>;
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Меню с заданной шириной.
|
|
20
20
|
|
|
21
21
|
```jsx harmony
|
|
22
22
|
import { Button, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui';
|
|
23
23
|
|
|
24
|
-
<DropdownMenu caption={<Button use="primary">Открыть
|
|
24
|
+
<DropdownMenu caption={<Button use="primary">Открыть меню c заданной шириной</Button>} menuWidth={350}>
|
|
25
25
|
<MenuHeader>Заголовок меню</MenuHeader>
|
|
26
26
|
<MenuSeparator />
|
|
27
27
|
<MenuItem>Раз</MenuItem>
|
|
@@ -34,12 +34,12 @@ import { Button, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui
|
|
|
34
34
|
</DropdownMenu>;
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
Меню с заданной максимальной высотой.
|
|
38
38
|
|
|
39
39
|
```jsx harmony
|
|
40
40
|
import { Button, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui';
|
|
41
41
|
|
|
42
|
-
<DropdownMenu caption={<Button use="primary">Открыть
|
|
42
|
+
<DropdownMenu caption={<Button use="primary">Открыть меню c заданной высотой</Button>} menuMaxHeight={150}>
|
|
43
43
|
<MenuHeader>Заголовок меню</MenuHeader>
|
|
44
44
|
<MenuSeparator />
|
|
45
45
|
<MenuItem>Раз</MenuItem>
|
|
@@ -52,7 +52,58 @@ import { Button, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui
|
|
|
52
52
|
</DropdownMenu>;
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
Меню с выпадашкой слева по центру.
|
|
56
|
+
|
|
57
|
+
```jsx harmony
|
|
58
|
+
import { Button, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui';
|
|
59
|
+
|
|
60
|
+
<DropdownMenu positions={["left middle"]} caption={<Button use="primary">Открыть меню</Button>}>
|
|
61
|
+
<MenuHeader>Заголовок меню</MenuHeader>
|
|
62
|
+
<MenuSeparator />
|
|
63
|
+
<MenuItem>Раз</MenuItem>
|
|
64
|
+
<MenuItem>Два</MenuItem>
|
|
65
|
+
<MenuItem>Три</MenuItem>
|
|
66
|
+
<MenuSeparator />
|
|
67
|
+
<MenuItem>Раз</MenuItem>
|
|
68
|
+
<MenuItem>Два</MenuItem>
|
|
69
|
+
<MenuItem>Три</MenuItem>
|
|
70
|
+
</DropdownMenu>;
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Меню c шапкой и подвалом.
|
|
74
|
+
|
|
75
|
+
```jsx harmony
|
|
76
|
+
import { Button, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui';
|
|
77
|
+
|
|
78
|
+
<DropdownMenu
|
|
79
|
+
header={<p>Это шапка в виде обычного текста</p>}
|
|
80
|
+
footer={<Button>А это подвал в виде кнопки</Button>}
|
|
81
|
+
caption={<Button use="primary">Открыть меню</Button>}
|
|
82
|
+
>
|
|
83
|
+
<MenuItem>Раз</MenuItem>
|
|
84
|
+
<MenuItem>Два</MenuItem>
|
|
85
|
+
<MenuItem>Три</MenuItem>
|
|
86
|
+
</DropdownMenu>;
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Меню с отключенной анимацией.
|
|
90
|
+
|
|
91
|
+
```jsx harmony
|
|
92
|
+
import { Button, MenuHeader, MenuItem, MenuSeparator } from '@skbkontur/react-ui';
|
|
93
|
+
|
|
94
|
+
<DropdownMenu
|
|
95
|
+
disableAnimations
|
|
96
|
+
caption={<Button use="primary">Открыть меню без анимации</Button>}
|
|
97
|
+
>
|
|
98
|
+
<MenuHeader>Заголовок меню</MenuHeader>
|
|
99
|
+
<MenuSeparator />
|
|
100
|
+
<MenuItem>Раз</MenuItem>
|
|
101
|
+
<MenuItem>Два</MenuItem>
|
|
102
|
+
<MenuItem>Три</MenuItem>
|
|
103
|
+
</DropdownMenu>;
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
В `caption` можно передать любой элемент.
|
|
56
107
|
|
|
57
108
|
```jsx harmony
|
|
58
109
|
import MenuIcon from '@skbkontur/react-icons/Menu';
|
|
@@ -71,3 +122,33 @@ import { MenuItem } from '@skbkontur/react-ui';
|
|
|
71
122
|
<MenuItem>Три</MenuItem>
|
|
72
123
|
</DropdownMenu>;
|
|
73
124
|
```
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
Условный рендер элементов меню (с сохранением поведения [`MenuItem`](#/Components/MenuItem)).
|
|
128
|
+
|
|
129
|
+
```jsx harmony
|
|
130
|
+
import {Button, MenuItem, Gapped, MenuSeparator} from '@skbkontur/react-ui';
|
|
131
|
+
|
|
132
|
+
const [showItems, setShowItems] = React.useState(false);
|
|
133
|
+
|
|
134
|
+
const hiddenItems = [
|
|
135
|
+
<MenuSeparator />,
|
|
136
|
+
<MenuItem>А я скрываюсь</MenuItem>,
|
|
137
|
+
<MenuItem>И я</MenuItem>,
|
|
138
|
+
<MenuItem>Я с вами</MenuItem>,
|
|
139
|
+
];
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
<Gapped>
|
|
143
|
+
<Button onClick={() => setShowItems(!showItems)}>
|
|
144
|
+
{showItems ? 'Спрятать' : 'Показать'} элементы
|
|
145
|
+
</Button>
|
|
146
|
+
|
|
147
|
+
<DropdownMenu caption={<Button use="primary">Открыть меню</Button>}>
|
|
148
|
+
<MenuItem>Меня видно всегда</MenuItem>
|
|
149
|
+
<MenuItem>Меня тоже</MenuItem>
|
|
150
|
+
<MenuItem>Ага, и меня!</MenuItem>
|
|
151
|
+
{showItems && hiddenItems}
|
|
152
|
+
</DropdownMenu>
|
|
153
|
+
</Gapped>
|
|
154
|
+
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Kebab.tsx"],"names":["React","PropTypes","isKeyArrowVertical","isKeyEnter","isKeySpace","someKeys","LayoutEvents","keyListener","PopupMenu","ThemeContext","MenuKebabIcon","isTestEnv","ThemeFactory","CommonWrapper","cx","styles","Kebab","state","opened","focusedByTab","anchor","theme","listener","remove","undefined","renderCaption","captionProps","disabled","props","handleCaptionKeyDown","event","openMenu","handleCaptionClick","toggleMenu","handleFocus","handleBlur","kebab","focused","renderIcon","e","preventDefault","handleChangeMenuState","isOpened","restoreFocus","setState","onOpen","onClose","requestAnimationFrame","isTabPressed","componentDidMount","addListener","componentWillUnmount","render","create","popupPinOffset","kebabPinOffset","popupMargin","kebabMargin","popupPinSize","kebabPinSize","renderMain","positions","disableAnimations","menuMaxHeight","children","icon","iconsmall","size","iconmedium","iconlarge","Component","__KONTUR_REACT_UI__","propTypes","defaultProps","node","bool","oneOfType","string","number","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { PopupMenu, PopupMenuCaptionProps } from '../../internal/PopupMenu';\nimport { Nullable } from '../../typings/utility-types';\nimport { PopupPosition } from '../../internal/Popup';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MenuKebabIcon } from '../../internal/icons/16px';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './Kebab.styles';\n\nexport interface KebabProps extends CommonProps {\n disabled?: boolean;\n /**\n * Функция вызываемая при закрытии выпадашки\n * @default () => undefined\n */\n onClose: () => void;\n /**\n * Функция вызываемая при открытии выпадашки\n * @default () => undefined\n */\n onOpen: () => void;\n size: 'small' | 'medium' | 'large';\n /**\n * Список позиций доступных для расположения выпадашки\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использоваться первая из этого списка\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions: PopupPosition[];\n menuMaxHeight?: number | string;\n /**\n * Не показывать анимацию\n */\n disableAnimations: boolean;\n /**\n * Кастомная иконка\n */\n icon?: React.ReactNode;\n}\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n opened: boolean;\n}\n\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n\n public static propTypes = {};\n\n public static defaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n size: 'small',\n disableAnimations: isTestEnv,\n icon: <MenuKebabIcon />,\n };\n\n public state = {\n opened: false,\n focusedByTab: false,\n anchor: null,\n };\n\n private theme!: Theme;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.kebabPinOffset,\n popupMargin: theme.kebabMargin,\n popupPinSize: theme.kebabPinSize,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled, positions } = this.props;\n return (\n <CommonWrapper {...this.props}>\n <PopupMenu\n popupHasPin\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={this.props.disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled } = this.props;\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={cx({\n [styles.kebab(this.theme)]: true,\n [styles.opened(this.theme)]: captionProps.opened,\n [styles.disabled()]: disabled,\n [styles.focused(this.theme)]: this.state.focusedByTab,\n })}\n >\n {this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState(\n {\n opened: isOpened,\n focusedByTab: !isOpened && restoreFocus,\n },\n () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.state.opened) {\n this.props.onOpen();\n } else {\n this.props.onClose();\n }\n },\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 requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n return (\n <div\n className={cx({\n [styles.icon()]: true,\n [styles.iconsmall()]: this.props.size === 'small',\n [styles.iconmedium()]: this.props.size === 'medium',\n [styles.iconlarge()]: this.props.size === 'large',\n })}\n >\n {this.props.icon}\n </div>\n );\n }\n}\n\nKebab.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n menuMaxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Размер кебаба small 14px | large 20px\n */\n size: PropTypes.string,\n\n /**\n * Коллбек, вызывающийся перед закрытием кебаба\n */\n onClose: PropTypes.func,\n\n /**\n * Коллбек, вызывающийся перед открытием кебаба\n */\n onOpen: PropTypes.func,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["Kebab.tsx"],"names":["React","PropTypes","isKeyArrowVertical","isKeyEnter","isKeySpace","someKeys","LayoutEvents","keyListener","PopupMenu","ThemeContext","MenuKebabIcon","isTestEnv","ThemeFactory","CommonWrapper","cx","styles","Kebab","state","opened","focusedByTab","anchor","theme","listener","remove","undefined","renderCaption","captionProps","disabled","props","handleCaptionKeyDown","event","openMenu","handleCaptionClick","toggleMenu","handleFocus","handleBlur","kebab","focused","renderIcon","e","preventDefault","handleChangeMenuState","isOpened","restoreFocus","setState","onOpen","onClose","requestAnimationFrame","isTabPressed","componentDidMount","addListener","componentWillUnmount","render","create","popupPinOffset","kebabPinOffset","popupMargin","kebabMargin","popupPinSize","kebabPinSize","renderMain","positions","disableAnimations","menuMaxHeight","children","icon","iconsmall","size","iconmedium","iconlarge","Component","__KONTUR_REACT_UI__","propTypes","defaultProps","node","bool","oneOfType","string","number","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { PopupMenu, PopupMenuCaptionProps } from '../../internal/PopupMenu';\nimport { Nullable } from '../../typings/utility-types';\nimport { PopupPosition } from '../../internal/Popup';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MenuKebabIcon } from '../../internal/icons/16px';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './Kebab.styles';\n\nexport interface KebabProps extends CommonProps {\n disabled?: boolean;\n /**\n * Функция вызываемая при закрытии выпадашки\n * @default () => undefined\n */\n onClose: () => void;\n /**\n * Функция вызываемая при открытии выпадашки\n * @default () => undefined\n */\n onOpen: () => void;\n size: 'small' | 'medium' | 'large';\n /**\n * Список позиций доступных для расположения выпадашки.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions: PopupPosition[];\n menuMaxHeight?: number | string;\n /**\n * Не показывать анимацию\n */\n disableAnimations: boolean;\n /**\n * Кастомная иконка\n */\n icon?: React.ReactNode;\n}\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n opened: boolean;\n}\n\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n\n public static propTypes = {};\n\n public static defaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n size: 'small',\n disableAnimations: isTestEnv,\n icon: <MenuKebabIcon />,\n };\n\n public state = {\n opened: false,\n focusedByTab: false,\n anchor: null,\n };\n\n private theme!: Theme;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.kebabPinOffset,\n popupMargin: theme.kebabMargin,\n popupPinSize: theme.kebabPinSize,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled, positions } = this.props;\n return (\n <CommonWrapper {...this.props}>\n <PopupMenu\n popupHasPin\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={this.props.disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled } = this.props;\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={cx({\n [styles.kebab(this.theme)]: true,\n [styles.opened(this.theme)]: captionProps.opened,\n [styles.disabled()]: disabled,\n [styles.focused(this.theme)]: this.state.focusedByTab,\n })}\n >\n {this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState(\n {\n opened: isOpened,\n focusedByTab: !isOpened && restoreFocus,\n },\n () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.state.opened) {\n this.props.onOpen();\n } else {\n this.props.onClose();\n }\n },\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 requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n return (\n <div\n className={cx({\n [styles.icon()]: true,\n [styles.iconsmall()]: this.props.size === 'small',\n [styles.iconmedium()]: this.props.size === 'medium',\n [styles.iconlarge()]: this.props.size === 'large',\n })}\n >\n {this.props.icon}\n </div>\n );\n }\n}\n\nKebab.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n menuMaxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Размер кебаба small 14px | large 20px\n */\n size: PropTypes.string,\n\n /**\n * Коллбек, вызывающийся перед закрытием кебаба\n */\n onClose: PropTypes.func,\n\n /**\n * Коллбек, вызывающийся перед открытием кебаба\n */\n onOpen: PropTypes.func,\n};\n"]}
|
|
@@ -16,8 +16,11 @@ export interface KebabProps extends CommonProps {
|
|
|
16
16
|
onOpen: () => void;
|
|
17
17
|
size: 'small' | 'medium' | 'large';
|
|
18
18
|
/**
|
|
19
|
-
* Список позиций доступных для расположения
|
|
20
|
-
*
|
|
19
|
+
* Список позиций доступных для расположения выпадашки.
|
|
20
|
+
*
|
|
21
|
+
* Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.
|
|
22
|
+
*
|
|
23
|
+
* **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`
|
|
21
24
|
* @default ['bottom left', 'bottom right', 'top left', 'top right']
|
|
22
25
|
*/
|
|
23
26
|
positions: PopupPosition[];
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
Базовый пример кебаб-меню.
|
|
2
|
+
|
|
1
3
|
```jsx harmony
|
|
2
4
|
import EditIcon from '@skbkontur/react-icons/Edit';
|
|
3
5
|
import TrashIcon from '@skbkontur/react-icons/Trash';
|
|
4
|
-
import { Gapped, MenuItem } from '@skbkontur/react-ui';
|
|
6
|
+
import { Gapped, MenuItem, Toast } from '@skbkontur/react-ui';
|
|
5
7
|
|
|
6
8
|
let style = {
|
|
7
9
|
alignItems: 'center',
|
|
@@ -22,10 +24,10 @@ let Card = ({ name, post }) => (
|
|
|
22
24
|
</div>
|
|
23
25
|
|
|
24
26
|
<Kebab size="large">
|
|
25
|
-
<MenuItem icon={<EditIcon />} onClick={() => Toast.push('
|
|
27
|
+
<MenuItem icon={<EditIcon />} onClick={() => Toast.push('Отредактировано')}>
|
|
26
28
|
Редактировать
|
|
27
29
|
</MenuItem>
|
|
28
|
-
<MenuItem icon={<TrashIcon />} onClick={() => Toast.push('
|
|
30
|
+
<MenuItem icon={<TrashIcon />} onClick={() => Toast.push('Удалено')}>
|
|
29
31
|
Удалить
|
|
30
32
|
</MenuItem>
|
|
31
33
|
</Kebab>
|
|
@@ -43,3 +45,247 @@ let Card = ({ name, post }) => (
|
|
|
43
45
|
</Gapped>
|
|
44
46
|
</Gapped>;
|
|
45
47
|
```
|
|
48
|
+
|
|
49
|
+
Различные размеры кебаб-меню.
|
|
50
|
+
|
|
51
|
+
```jsx harmony
|
|
52
|
+
import EditIcon from '@skbkontur/react-icons/Edit';
|
|
53
|
+
import TrashIcon from '@skbkontur/react-icons/Trash';
|
|
54
|
+
import { Gapped, MenuItem, Toast} from '@skbkontur/react-ui';
|
|
55
|
+
|
|
56
|
+
let style = {
|
|
57
|
+
alignItems: 'center',
|
|
58
|
+
background: 'white',
|
|
59
|
+
border: '1px solid #dfdede',
|
|
60
|
+
color: '#333',
|
|
61
|
+
display: 'flex',
|
|
62
|
+
justifyContent: 'space-between',
|
|
63
|
+
padding: '0 20px',
|
|
64
|
+
width: 230,
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
let Card = ({ title, size }) => (
|
|
68
|
+
<div style={style}>
|
|
69
|
+
<div>
|
|
70
|
+
<h3>{title}</h3>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<Kebab size={size}>
|
|
74
|
+
<MenuItem icon={<EditIcon />} onClick={() => Toast.push('Отредактировано')}>
|
|
75
|
+
Редактировать
|
|
76
|
+
</MenuItem>
|
|
77
|
+
<MenuItem icon={<TrashIcon />} onClick={() => Toast.push('Удалено')}>
|
|
78
|
+
Удалить
|
|
79
|
+
</MenuItem>
|
|
80
|
+
</Kebab>
|
|
81
|
+
</div>
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
<Gapped>
|
|
85
|
+
<Card title="Маленький кебаб" size="small" />
|
|
86
|
+
<Card title="Средний кебаб" size="medium" />
|
|
87
|
+
<Card title="Большой кебаб" size="large" />
|
|
88
|
+
</Gapped>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Кебаб-меню с выпадашкой слева.
|
|
92
|
+
|
|
93
|
+
```jsx harmony
|
|
94
|
+
import EditIcon from '@skbkontur/react-icons/Edit';
|
|
95
|
+
import TrashIcon from '@skbkontur/react-icons/Trash';
|
|
96
|
+
import { MenuItem, Toast } from '@skbkontur/react-ui';
|
|
97
|
+
|
|
98
|
+
let style = {
|
|
99
|
+
alignItems: 'center',
|
|
100
|
+
background: 'white',
|
|
101
|
+
border: '1px solid #dfdede',
|
|
102
|
+
color: '#333',
|
|
103
|
+
display: 'flex',
|
|
104
|
+
justifyContent: 'space-between',
|
|
105
|
+
padding: '0 20px',
|
|
106
|
+
width: 250,
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
let Card = ({ title }) => (
|
|
110
|
+
<div style={style}>
|
|
111
|
+
<div>
|
|
112
|
+
<h3>{title}</h3>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<Kebab positions={['left middle']} size="large">
|
|
116
|
+
<MenuItem icon={<EditIcon />} onClick={() => Toast.push('Отредактировано')}>
|
|
117
|
+
Редактировать
|
|
118
|
+
</MenuItem>
|
|
119
|
+
<MenuItem icon={<TrashIcon />} onClick={() => Toast.push('Удалено')}>
|
|
120
|
+
Удалить
|
|
121
|
+
</MenuItem>
|
|
122
|
+
</Kebab>
|
|
123
|
+
</div>
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
<Card title="С выпадашкой слева" />
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
С кастомным действием при открытии.
|
|
130
|
+
|
|
131
|
+
```jsx harmony
|
|
132
|
+
import EditIcon from '@skbkontur/react-icons/Edit';
|
|
133
|
+
import TrashIcon from '@skbkontur/react-icons/Trash';
|
|
134
|
+
import { MenuItem, Toast } from '@skbkontur/react-ui';
|
|
135
|
+
|
|
136
|
+
let style = {
|
|
137
|
+
alignItems: 'center',
|
|
138
|
+
background: 'white',
|
|
139
|
+
border: '1px solid #dfdede',
|
|
140
|
+
color: '#333',
|
|
141
|
+
display: 'flex',
|
|
142
|
+
justifyContent: 'space-between',
|
|
143
|
+
padding: '0 20px',
|
|
144
|
+
width: 250,
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
let Card = ({ title }) => (
|
|
148
|
+
<div style={style}>
|
|
149
|
+
<div>
|
|
150
|
+
<h3>{title}</h3>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<Kebab
|
|
154
|
+
onOpen={() => Toast.push('Кебаб-меню открылось!')}
|
|
155
|
+
size="large"
|
|
156
|
+
>
|
|
157
|
+
<MenuItem icon={<EditIcon />} onClick={() => Toast.push('Отредактировано')}>
|
|
158
|
+
Редактировать
|
|
159
|
+
</MenuItem>
|
|
160
|
+
<MenuItem icon={<TrashIcon />} onClick={() => Toast.push('Удалено')}>
|
|
161
|
+
Удалить
|
|
162
|
+
</MenuItem>
|
|
163
|
+
</Kebab>
|
|
164
|
+
</div>
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
<Card title="С кастомным действием" />
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Отключенное кебаб-меню.
|
|
171
|
+
|
|
172
|
+
```jsx harmony
|
|
173
|
+
import EditIcon from '@skbkontur/react-icons/Edit';
|
|
174
|
+
import TrashIcon from '@skbkontur/react-icons/Trash';
|
|
175
|
+
import { MenuItem, Toast } from '@skbkontur/react-ui';
|
|
176
|
+
|
|
177
|
+
let style = {
|
|
178
|
+
alignItems: 'center',
|
|
179
|
+
background: 'white',
|
|
180
|
+
border: '1px solid #dfdede',
|
|
181
|
+
color: '#333',
|
|
182
|
+
display: 'flex',
|
|
183
|
+
justifyContent: 'space-between',
|
|
184
|
+
padding: '0 20px',
|
|
185
|
+
width: 250,
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
let Card = ({ title }) => (
|
|
189
|
+
<div style={style}>
|
|
190
|
+
<div>
|
|
191
|
+
<h3>{title}</h3>
|
|
192
|
+
</div>
|
|
193
|
+
|
|
194
|
+
<Kebab disabled size="large">
|
|
195
|
+
<MenuItem icon={<EditIcon />} onClick={() => Toast.push('Отредактировано')}>
|
|
196
|
+
Редактировать
|
|
197
|
+
</MenuItem>
|
|
198
|
+
<MenuItem icon={<TrashIcon />} onClick={() => Toast.push('Удалено')}>
|
|
199
|
+
Удалить
|
|
200
|
+
</MenuItem>
|
|
201
|
+
</Kebab>
|
|
202
|
+
</div>
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
<Card title="Не нажимается :(" />
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Кебаб-меню с отключенной анимацией.
|
|
209
|
+
|
|
210
|
+
```jsx harmony
|
|
211
|
+
import EditIcon from '@skbkontur/react-icons/Edit';
|
|
212
|
+
import TrashIcon from '@skbkontur/react-icons/Trash';
|
|
213
|
+
import { MenuItem, Toast } from '@skbkontur/react-ui';
|
|
214
|
+
|
|
215
|
+
let style = {
|
|
216
|
+
alignItems: 'center',
|
|
217
|
+
background: 'white',
|
|
218
|
+
border: '1px solid #dfdede',
|
|
219
|
+
color: '#333',
|
|
220
|
+
display: 'flex',
|
|
221
|
+
justifyContent: 'space-between',
|
|
222
|
+
padding: '0 20px',
|
|
223
|
+
width: 250,
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
let Card = ({ title }) => (
|
|
227
|
+
<div style={style}>
|
|
228
|
+
<div>
|
|
229
|
+
<h3>{title}</h3>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<Kebab disableAnimations size="large">
|
|
233
|
+
<MenuItem icon={<EditIcon />} onClick={() => Toast.push('Отредактировано')}>
|
|
234
|
+
Редактировать
|
|
235
|
+
</MenuItem>
|
|
236
|
+
<MenuItem icon={<TrashIcon />} onClick={() => Toast.push('Удалено')}>
|
|
237
|
+
Удалить
|
|
238
|
+
</MenuItem>
|
|
239
|
+
</Kebab>
|
|
240
|
+
</div>
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
<Card title="Без анимации" />
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Кебаб-меню с заданной высотой.
|
|
247
|
+
|
|
248
|
+
```jsx harmony
|
|
249
|
+
import EditIcon from '@skbkontur/react-icons/Edit';
|
|
250
|
+
import TrashIcon from '@skbkontur/react-icons/Trash';
|
|
251
|
+
import { MenuItem, Toast } from '@skbkontur/react-ui';
|
|
252
|
+
|
|
253
|
+
let style = {
|
|
254
|
+
alignItems: 'center',
|
|
255
|
+
background: 'white',
|
|
256
|
+
border: '1px solid #dfdede',
|
|
257
|
+
color: '#333',
|
|
258
|
+
display: 'flex',
|
|
259
|
+
justifyContent: 'space-between',
|
|
260
|
+
padding: '0 20px',
|
|
261
|
+
width: 250,
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
let Card = ({ title }) => (
|
|
265
|
+
<div style={style}>
|
|
266
|
+
<div>
|
|
267
|
+
<h3>{title}</h3>
|
|
268
|
+
</div>
|
|
269
|
+
|
|
270
|
+
<Kebab
|
|
271
|
+
menuMaxHeight="100px"
|
|
272
|
+
size="large"
|
|
273
|
+
>
|
|
274
|
+
<MenuItem>
|
|
275
|
+
Действие
|
|
276
|
+
</MenuItem>
|
|
277
|
+
<MenuItem>
|
|
278
|
+
И ещё одно
|
|
279
|
+
</MenuItem>
|
|
280
|
+
<MenuItem>
|
|
281
|
+
Ещё действие
|
|
282
|
+
</MenuItem>
|
|
283
|
+
<MenuItem>
|
|
284
|
+
И последнее действие
|
|
285
|
+
</MenuItem>
|
|
286
|
+
</Kebab>
|
|
287
|
+
</div>
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
<Card title="С заданной высотой" />
|
|
291
|
+
```
|
|
@@ -5,7 +5,11 @@ import { CommonWrapper } from "../../../internal/CommonWrapper";
|
|
|
5
5
|
import { cx } from "../../../lib/theming/Emotion";
|
|
6
6
|
import { styles } from "../MenuHeader.styles";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* `Заголовок меню` используется для того, чтобы разделить `элементы меню` на категории в рамках одного меню.
|
|
9
|
+
*
|
|
10
|
+
* _Примечание_: `заголовок меню`, в отличие от `элемента меню` нельзя затаргетить с клавиатуры.
|
|
11
|
+
*
|
|
12
|
+
* Сущности в которых может быть использован `MenuHeader`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).
|
|
9
13
|
*/
|
|
10
14
|
|
|
11
15
|
function MenuHeader(_ref) {
|