@skbkontur/react-ui 3.11.0-select-right → 3.11.0-select-right-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.
Files changed (35) hide show
  1. package/cjs/components/Autocomplete/Autocomplete.md +7 -7
  2. package/cjs/components/CurrencyInput/CurrencyInput.md +24 -24
  3. package/cjs/components/DateInput/DateInput.md +106 -106
  4. package/cjs/components/DatePicker/DatePicker.md +307 -307
  5. package/cjs/components/FxInput/FxInput.md +16 -16
  6. package/cjs/components/Group/Group.md +18 -18
  7. package/cjs/components/Paging/Paging.md +43 -43
  8. package/cjs/components/Select/Select.js +2 -1
  9. package/cjs/components/Select/Select.js.map +1 -1
  10. package/cjs/components/Tabs/Tabs.md +36 -36
  11. package/cjs/components/Textarea/Textarea.md +25 -25
  12. package/cjs/components/TokenInput/TokenInput.md +79 -79
  13. package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -0
  14. package/cjs/internal/DropdownContainer/DropdownContainer.js +6 -1
  15. package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
  16. package/cjs/internal/Menu/Menu.styles.js +1 -1
  17. package/cjs/internal/Menu/Menu.styles.js.map +1 -1
  18. package/components/Autocomplete/Autocomplete.md +7 -7
  19. package/components/CurrencyInput/CurrencyInput.md +24 -24
  20. package/components/DateInput/DateInput.md +106 -106
  21. package/components/DatePicker/DatePicker.md +307 -307
  22. package/components/FxInput/FxInput.md +16 -16
  23. package/components/Group/Group.md +18 -18
  24. package/components/Paging/Paging.md +43 -43
  25. package/components/Select/Select/Select.js +2 -1
  26. package/components/Select/Select/Select.js.map +1 -1
  27. package/components/Tabs/Tabs.md +36 -36
  28. package/components/Textarea/Textarea.md +25 -25
  29. package/components/TokenInput/TokenInput.md +79 -79
  30. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +4 -2
  31. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
  32. package/internal/DropdownContainer/DropdownContainer.d.ts +1 -0
  33. package/internal/Menu/Menu.styles/Menu.styles.js +1 -1
  34. package/internal/Menu/Menu.styles/Menu.styles.js.map +1 -1
  35. package/package.json +1 -1
@@ -1,18 +1,18 @@
1
- ```jsx harmony
2
- import FunctionIcon from '@skbkontur/react-icons/Function';
3
- import SearchIcon from '@skbkontur/react-icons/Search';
4
- import { Button, Input } from '@skbkontur/react-ui';
5
-
6
- const [value, setValue] = React.useState('Foo');
7
-
8
- <Group width={300}>
9
- <Button>
10
- <FunctionIcon />
11
- </Button>
12
- <Input value={value} width="100%" onValueChange={setValue} />
13
- <Button>
14
- <SearchIcon />
15
- </Button>
16
- <Button>Bar</Button>
17
- </Group>;
18
- ```
1
+ ```jsx harmony
2
+ import FunctionIcon from '@skbkontur/react-icons/Function';
3
+ import SearchIcon from '@skbkontur/react-icons/Search';
4
+ import { Button, Input } from '@skbkontur/react-ui';
5
+
6
+ const [value, setValue] = React.useState('Foo');
7
+
8
+ <Group width={300}>
9
+ <Button>
10
+ <FunctionIcon />
11
+ </Button>
12
+ <Input value={value} width="100%" onValueChange={setValue} />
13
+ <Button>
14
+ <SearchIcon />
15
+ </Button>
16
+ <Button>Bar</Button>
17
+ </Group>;
18
+ ```
@@ -1,43 +1,43 @@
1
- Управление с клавиатуры работает в двух вариантах:
2
-
3
- - **useGlobalListener === true** слушатель keydown событий на document, если на стринице несколько компонентов Paging,
4
- обработчик будет срабатывать на каждом
5
- - **useGlobalListener === false** обработка нажатия клавиш будет работать только когда компонент в фокусе.
6
-
7
- Навигационные подсказки появляются когда доступно управление с клавиатуры и `withoutNavigationHint != true`
8
-
9
- ```jsx harmony
10
- class Paginator3000 extends React.Component {
11
- constructor() {
12
- super();
13
- this.state = { active: 1 };
14
- this._handlePageChange = this._handlePageChange.bind(this);
15
- }
16
-
17
- render() {
18
- return <Paging activePage={this.state.active} onPageChange={this._handlePageChange} pagesCount={12} />;
19
- }
20
-
21
- _handlePageChange(pageNumber) {
22
- this.setState({ active: pageNumber });
23
- }
24
- }
25
-
26
- <Paginator3000 />;
27
- ```
28
-
29
- #### Локали по умолчанию
30
-
31
- ```typescript static
32
- interface PagingLocale {
33
- forward?: string;
34
- }
35
-
36
- const ru_RU = {
37
- forward: 'Дальше',
38
- };
39
-
40
- const en_GB = {
41
- forward: 'Forward',
42
- };
43
- ```
1
+ Управление с клавиатуры работает в двух вариантах:
2
+
3
+ - **useGlobalListener === true** слушатель keydown событий на document, если на стринице несколько компонентов Paging,
4
+ обработчик будет срабатывать на каждом
5
+ - **useGlobalListener === false** обработка нажатия клавиш будет работать только когда компонент в фокусе.
6
+
7
+ Навигационные подсказки появляются когда доступно управление с клавиатуры и `withoutNavigationHint != true`
8
+
9
+ ```jsx harmony
10
+ class Paginator3000 extends React.Component {
11
+ constructor() {
12
+ super();
13
+ this.state = { active: 1 };
14
+ this._handlePageChange = this._handlePageChange.bind(this);
15
+ }
16
+
17
+ render() {
18
+ return <Paging activePage={this.state.active} onPageChange={this._handlePageChange} pagesCount={12} />;
19
+ }
20
+
21
+ _handlePageChange(pageNumber) {
22
+ this.setState({ active: pageNumber });
23
+ }
24
+ }
25
+
26
+ <Paginator3000 />;
27
+ ```
28
+
29
+ #### Локали по умолчанию
30
+
31
+ ```typescript static
32
+ interface PagingLocale {
33
+ forward?: string;
34
+ }
35
+
36
+ const ru_RU = {
37
+ forward: 'Дальше',
38
+ };
39
+
40
+ const en_GB = {
41
+ forward: 'Forward',
42
+ };
43
+ ```
@@ -393,7 +393,8 @@ export var Select = (_dec = locale('Select', SelectLocaleHelper), rootNode(_clas
393
393
  getParent: this.dropdownContainerGetParent,
394
394
  offsetY: -1,
395
395
  align: this.props.menuAlign,
396
- disablePortal: this.props.disablePortal
396
+ disablePortal: this.props.disablePortal,
397
+ fixedWidth: !!this.props.menuWidth && this.props.menuWidth !== 'auto'
397
398
  }, /*#__PURE__*/React.createElement(Menu, {
398
399
  ref: this.refMenu,
399
400
  width: this.props.menuWidth,
@@ -1 +1 @@
1
- {"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","ThemeContext","CommonWrapper","ArrowChevronDownIcon","cx","getRootNode","rootNode","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","theme","menu","buttonElement","getProps","defaultProps","setRootNode","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","highlightItem","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","search","menuAlign","disablePortal","menuWidth","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private renderMain() {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNodeArray = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
1
+ {"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","ThemeContext","CommonWrapper","ArrowChevronDownIcon","cx","getRootNode","rootNode","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","theme","menu","buttonElement","getProps","defaultProps","setRootNode","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","highlightItem","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","search","menuAlign","disablePortal","menuWidth","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private renderMain() {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n fixedWidth={!!this.props.menuWidth && this.props.menuWidth !== 'auto'}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNodeArray = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
@@ -1,36 +1,36 @@
1
- ```jsx harmony
2
- const [active, setActive] = React.useState('fuji');
3
-
4
- <Tabs value={active} onValueChange={setActive}>
5
- <Tabs.Tab id="fuji">🌋 Fuji</Tabs.Tab>
6
- <Tabs.Tab id="tahat">⛰ Tahat</Tabs.Tab>
7
- <Tabs.Tab id="alps">🗻 Alps</Tabs.Tab>
8
- </Tabs>;
9
- ```
10
-
11
- Можно передавать свои компоненты в качестве табов, например `NavLink` из `react-router`
12
-
13
- ```jsx harmony
14
- const [active, setActive] = React.useState('/fuji');
15
-
16
- const NavLink = props => (
17
- <a
18
- {...props}
19
- onClick={e => {
20
- e.preventDefault();
21
- props.onClick(e);
22
- }}
23
- />
24
- );
25
- const TabLink = ({ id, children }) => (
26
- <Tabs.Tab id={id} component={props => <NavLink {...props} to={props.id} />}>
27
- {children}
28
- </Tabs.Tab>
29
- );
30
-
31
- <Tabs value={active} onValueChange={setActive}>
32
- <TabLink id="/fuji">🌋 Fuji</TabLink>
33
- <TabLink id="/tahat">⛰ Tahat</TabLink>
34
- <TabLink id="/alps">🗻 Alps</TabLink>
35
- </Tabs>;
36
- ```
1
+ ```jsx harmony
2
+ const [active, setActive] = React.useState('fuji');
3
+
4
+ <Tabs value={active} onValueChange={setActive}>
5
+ <Tabs.Tab id="fuji">🌋 Fuji</Tabs.Tab>
6
+ <Tabs.Tab id="tahat">⛰ Tahat</Tabs.Tab>
7
+ <Tabs.Tab id="alps">🗻 Alps</Tabs.Tab>
8
+ </Tabs>;
9
+ ```
10
+
11
+ Можно передавать свои компоненты в качестве табов, например `NavLink` из `react-router`
12
+
13
+ ```jsx harmony
14
+ const [active, setActive] = React.useState('/fuji');
15
+
16
+ const NavLink = props => (
17
+ <a
18
+ {...props}
19
+ onClick={e => {
20
+ e.preventDefault();
21
+ props.onClick(e);
22
+ }}
23
+ />
24
+ );
25
+ const TabLink = ({ id, children }) => (
26
+ <Tabs.Tab id={id} component={props => <NavLink {...props} to={props.id} />}>
27
+ {children}
28
+ </Tabs.Tab>
29
+ );
30
+
31
+ <Tabs value={active} onValueChange={setActive}>
32
+ <TabLink id="/fuji">🌋 Fuji</TabLink>
33
+ <TabLink id="/tahat">⛰ Tahat</TabLink>
34
+ <TabLink id="/alps">🗻 Alps</TabLink>
35
+ </Tabs>;
36
+ ```
@@ -1,25 +1,25 @@
1
- ```jsx harmony
2
- const [value, setValue] = React.useState('');
3
-
4
- <Textarea
5
- value={value}
6
- onValueChange={setValue}
7
- autoResize
8
- placeholder="Through faith we can reign in every area of life"
9
- />;
10
- ```
11
-
12
- Счетчик введенных символов
13
-
14
- ```jsx harmony
15
- const [value, setValue] = React.useState('');
16
-
17
- <Textarea
18
- value={value}
19
- onValueChange={setValue}
20
- placeholder="Счетчик появляется при фокусе"
21
- lengthCounter={10}
22
- showLengthCounter
23
- counterHelp="Hello 👋"
24
- />;
25
- ```
1
+ ```jsx harmony
2
+ const [value, setValue] = React.useState('');
3
+
4
+ <Textarea
5
+ value={value}
6
+ onValueChange={setValue}
7
+ autoResize
8
+ placeholder="Through faith we can reign in every area of life"
9
+ />;
10
+ ```
11
+
12
+ Счетчик введенных символов
13
+
14
+ ```jsx harmony
15
+ const [value, setValue] = React.useState('');
16
+
17
+ <Textarea
18
+ value={value}
19
+ onValueChange={setValue}
20
+ placeholder="Счетчик появляется при фокусе"
21
+ lengthCounter={10}
22
+ showLengthCounter
23
+ counterHelp="Hello 👋"
24
+ />;
25
+ ```
@@ -1,79 +1,79 @@
1
- ```jsx harmony
2
- import { Token } from '@skbkontur/react-ui';
3
- import { TokenInputType } from '@skbkontur/react-ui/components/TokenInput';
4
-
5
- const [selectedItems, setSelectedItems] = React.useState([]);
6
-
7
- const delay = time => args => new Promise(resolve => setTimeout(resolve, time, args));
8
-
9
- const getItems = q =>
10
- Promise.resolve(
11
- ['First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth'].filter(
12
- x => x.toLowerCase().includes(q.toLowerCase()) || x.toString(10) === q,
13
- ),
14
- ).then(delay(500));
15
-
16
- const tokenColors = {
17
- First: {
18
- idle: 'grayIdle',
19
- active: 'grayActive',
20
- },
21
- Second: {
22
- idle: 'blueIdle',
23
- active: 'blueActive',
24
- },
25
- Third: {
26
- idle: 'greenIdle',
27
- active: 'greenActive',
28
- },
29
- Fourth: {
30
- idle: 'yellowIdle',
31
- active: 'yellowActive',
32
- },
33
- Fifth: {
34
- idle: 'redIdle',
35
- active: 'redActive',
36
- },
37
- Sixth: {
38
- idle: 'white',
39
- active: 'black',
40
- },
41
- default: {
42
- idle: 'defaultIdle',
43
- active: 'defaultActive',
44
- },
45
- };
46
-
47
- <div style={{ width: '300px' }}>
48
- <TokenInput
49
- type={TokenInputType.Combined}
50
- getItems={getItems}
51
- selectedItems={selectedItems}
52
- onValueChange={setSelectedItems}
53
- renderToken={(item, tokenProps) => (
54
- <Token key={item.toString()} colors={tokenColors[item] || tokenColors.default} {...tokenProps}>
55
- {item}
56
- </Token>
57
- )}
58
- />
59
- </div>;
60
- ```
61
-
62
- #### Локали по умолчанию
63
-
64
- ```typescript static
65
- interface TokenInputLocale {
66
- addButtonComment?: string;
67
- addButtonTitle?: string;
68
- }
69
-
70
- const ru_RU = {
71
- addButtonComment: 'Нажмите запятую или пробел',
72
- addButtonTitle: 'Добавить',
73
- };
74
-
75
- const en_GB = {
76
- addButtonComment: 'Type comma or space',
77
- addButtonTitle: 'Add',
78
- };
79
- ```
1
+ ```jsx harmony
2
+ import { Token } from '@skbkontur/react-ui';
3
+ import { TokenInputType } from '@skbkontur/react-ui/components/TokenInput';
4
+
5
+ const [selectedItems, setSelectedItems] = React.useState([]);
6
+
7
+ const delay = time => args => new Promise(resolve => setTimeout(resolve, time, args));
8
+
9
+ const getItems = q =>
10
+ Promise.resolve(
11
+ ['First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth'].filter(
12
+ x => x.toLowerCase().includes(q.toLowerCase()) || x.toString(10) === q,
13
+ ),
14
+ ).then(delay(500));
15
+
16
+ const tokenColors = {
17
+ First: {
18
+ idle: 'grayIdle',
19
+ active: 'grayActive',
20
+ },
21
+ Second: {
22
+ idle: 'blueIdle',
23
+ active: 'blueActive',
24
+ },
25
+ Third: {
26
+ idle: 'greenIdle',
27
+ active: 'greenActive',
28
+ },
29
+ Fourth: {
30
+ idle: 'yellowIdle',
31
+ active: 'yellowActive',
32
+ },
33
+ Fifth: {
34
+ idle: 'redIdle',
35
+ active: 'redActive',
36
+ },
37
+ Sixth: {
38
+ idle: 'white',
39
+ active: 'black',
40
+ },
41
+ default: {
42
+ idle: 'defaultIdle',
43
+ active: 'defaultActive',
44
+ },
45
+ };
46
+
47
+ <div style={{ width: '300px' }}>
48
+ <TokenInput
49
+ type={TokenInputType.Combined}
50
+ getItems={getItems}
51
+ selectedItems={selectedItems}
52
+ onValueChange={setSelectedItems}
53
+ renderToken={(item, tokenProps) => (
54
+ <Token key={item.toString()} colors={tokenColors[item] || tokenColors.default} {...tokenProps}>
55
+ {item}
56
+ </Token>
57
+ )}
58
+ />
59
+ </div>;
60
+ ```
61
+
62
+ #### Локали по умолчанию
63
+
64
+ ```typescript static
65
+ interface TokenInputLocale {
66
+ addButtonComment?: string;
67
+ addButtonTitle?: string;
68
+ }
69
+
70
+ const ru_RU = {
71
+ addButtonComment: 'Нажмите запятую или пробел',
72
+ addButtonTitle: 'Добавить',
73
+ };
74
+
75
+ const en_GB = {
76
+ addButtonComment: 'Type comma or space',
77
+ addButtonTitle: 'Add',
78
+ };
79
+ ```
@@ -6,6 +6,7 @@ import { RenderContainer } from "../../RenderContainer";
6
6
  import { ZIndex } from "../../ZIndex";
7
7
  import { createPropsGetter } from "../../../lib/createPropsGetter";
8
8
  import { cx } from "../../../lib/theming/Emotion";
9
+ import { isIE11 } from "../../../lib/client";
9
10
  import { styles } from "../DropdownContainer.styles";
10
11
  export var DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {
11
12
  _inheritsLoose(DropdownContainer, _React$PureComponent);
@@ -190,7 +191,8 @@ export var DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {
190
191
  bottom: bottom !== null ? bottom : undefined,
191
192
  left: left !== null ? left : undefined,
192
193
  right: right !== null ? right : undefined,
193
- minWidth: this.state.minWidth
194
+ minWidth: this.state.minWidth,
195
+ maxWidth: this.props.fixedWidth ? this.state.minWidth : undefined
194
196
  });
195
197
  }
196
198
 
@@ -198,7 +200,7 @@ export var DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {
198
200
  priority: 'DropdownContainer',
199
201
  wrapperRef: this.ZIndexRef,
200
202
  style: style,
201
- className: cx((_cx = {}, _cx[styles.alignRight()] = !this.props.disablePortal && this.props.align === 'right', _cx))
203
+ className: cx((_cx = {}, _cx[styles.alignRight()] = this.props.align === 'right' && !isIE11, _cx))
202
204
  }, this.props.children);
203
205
  return this.props.disablePortal ? content : /*#__PURE__*/React.createElement(RenderContainer, null, content);
204
206
  };