@skbkontur/react-ui 4.12.0 → 4.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +2 -1
  3. package/cjs/components/Button/Button.d.ts +5 -1
  4. package/cjs/components/Button/Button.js +8 -2
  5. package/cjs/components/Button/Button.js.map +1 -1
  6. package/cjs/components/Checkbox/Checkbox.d.ts +5 -1
  7. package/cjs/components/Checkbox/Checkbox.js +8 -3
  8. package/cjs/components/Checkbox/Checkbox.js.map +1 -1
  9. package/cjs/components/ComboBox/ComboBox.d.ts +5 -1
  10. package/cjs/components/ComboBox/ComboBox.js +5 -0
  11. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  12. package/cjs/components/Dropdown/Dropdown.d.ts +5 -1
  13. package/cjs/components/Dropdown/Dropdown.js +7 -1
  14. package/cjs/components/Dropdown/Dropdown.js.map +1 -1
  15. package/cjs/components/Input/Input.d.ts +5 -1
  16. package/cjs/components/Input/Input.js +9 -3
  17. package/cjs/components/Input/Input.js.map +1 -1
  18. package/cjs/components/Kebab/Kebab.d.ts +5 -1
  19. package/cjs/components/Kebab/Kebab.js +6 -1
  20. package/cjs/components/Kebab/Kebab.js.map +1 -1
  21. package/cjs/components/MenuItem/MenuItem.d.ts +5 -1
  22. package/cjs/components/MenuItem/MenuItem.js +9 -3
  23. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  24. package/cjs/components/RadioGroup/RadioGroup.d.ts +5 -1
  25. package/cjs/components/RadioGroup/RadioGroup.js +14 -2
  26. package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  27. package/cjs/components/ScrollContainer/ScrollBar.d.ts +8 -2
  28. package/cjs/components/ScrollContainer/ScrollBar.js +45 -6
  29. package/cjs/components/ScrollContainer/ScrollBar.js.map +1 -1
  30. package/cjs/components/ScrollContainer/ScrollContainer.constants.js +3 -2
  31. package/cjs/components/ScrollContainer/ScrollContainer.constants.js.map +1 -1
  32. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +13 -1
  33. package/cjs/components/ScrollContainer/ScrollContainer.js +31 -7
  34. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  35. package/cjs/components/ScrollContainer/ScrollContainer.md +24 -1
  36. package/cjs/components/ScrollContainer/ScrollContainer.styles.d.ts +5 -0
  37. package/cjs/components/ScrollContainer/ScrollContainer.styles.js +38 -9
  38. package/cjs/components/ScrollContainer/ScrollContainer.styles.js.map +1 -1
  39. package/cjs/components/Select/Select.d.ts +6 -1
  40. package/cjs/components/Select/Select.js +9 -2
  41. package/cjs/components/Select/Select.js.map +1 -1
  42. package/cjs/components/Sticky/Sticky.d.ts +1 -1
  43. package/cjs/components/Sticky/Sticky.js +1 -1
  44. package/cjs/components/Sticky/Sticky.js.map +1 -1
  45. package/cjs/components/Tabs/Tab.d.ts +5 -1
  46. package/cjs/components/Tabs/Tab.js +7 -1
  47. package/cjs/components/Tabs/Tab.js.map +1 -1
  48. package/cjs/components/Tabs/Tabs.d.ts +5 -1
  49. package/cjs/components/Tabs/Tabs.js +7 -1
  50. package/cjs/components/Tabs/Tabs.js.map +1 -1
  51. package/cjs/components/Toggle/Toggle.d.ts +5 -1
  52. package/cjs/components/Toggle/Toggle.js +6 -1
  53. package/cjs/components/Toggle/Toggle.js.map +1 -1
  54. package/cjs/components/Token/Token.d.ts +5 -1
  55. package/cjs/components/Token/Token.js +7 -1
  56. package/cjs/components/Token/Token.js.map +1 -1
  57. package/cjs/components/TokenInput/TokenInput.d.ts +5 -1
  58. package/cjs/components/TokenInput/TokenInput.js +17 -2
  59. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  60. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +2 -1
  61. package/cjs/internal/CustomComboBox/ComboBoxView.js +5 -1
  62. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  63. package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +2 -1
  64. package/cjs/internal/CustomComboBox/CustomComboBox.js +3 -1
  65. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  66. package/cjs/internal/InputLikeText/InputLikeText.d.ts +1 -0
  67. package/cjs/internal/InputLikeText/InputLikeText.js +12 -4
  68. package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
  69. package/cjs/lib/currentEnvironment.js +33 -12
  70. package/cjs/lib/currentEnvironment.js.map +1 -1
  71. package/components/Button/Button/Button.js +5 -2
  72. package/components/Button/Button/Button.js.map +1 -1
  73. package/components/Button/Button.d.ts +5 -1
  74. package/components/Checkbox/Checkbox/Checkbox.js +5 -2
  75. package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
  76. package/components/Checkbox/Checkbox.d.ts +5 -1
  77. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  78. package/components/ComboBox/ComboBox.d.ts +5 -1
  79. package/components/Dropdown/Dropdown/Dropdown.js +2 -1
  80. package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
  81. package/components/Dropdown/Dropdown.d.ts +5 -1
  82. package/components/Input/Input/Input.js +4 -2
  83. package/components/Input/Input/Input.js.map +1 -1
  84. package/components/Input/Input.d.ts +5 -1
  85. package/components/Kebab/Kebab/Kebab.js +2 -1
  86. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  87. package/components/Kebab/Kebab.d.ts +5 -1
  88. package/components/MenuItem/MenuItem/MenuItem.js +4 -2
  89. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  90. package/components/MenuItem/MenuItem.d.ts +5 -1
  91. package/components/RadioGroup/RadioGroup/RadioGroup.js +10 -4
  92. package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
  93. package/components/RadioGroup/RadioGroup.d.ts +5 -1
  94. package/components/ScrollContainer/ScrollBar/ScrollBar.js +46 -7
  95. package/components/ScrollContainer/ScrollBar/ScrollBar.js.map +1 -1
  96. package/components/ScrollContainer/ScrollBar.d.ts +8 -2
  97. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +18 -7
  98. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  99. package/components/ScrollContainer/ScrollContainer.constants/ScrollContainer.constants.js +3 -2
  100. package/components/ScrollContainer/ScrollContainer.constants/ScrollContainer.constants.js.map +1 -1
  101. package/components/ScrollContainer/ScrollContainer.d.ts +13 -1
  102. package/components/ScrollContainer/ScrollContainer.md +24 -1
  103. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js +24 -9
  104. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js.map +1 -1
  105. package/components/ScrollContainer/ScrollContainer.styles.d.ts +5 -0
  106. package/components/Select/Select/Select.js +4 -2
  107. package/components/Select/Select/Select.js.map +1 -1
  108. package/components/Select/Select.d.ts +6 -1
  109. package/components/Sticky/Sticky/Sticky.js +1 -1
  110. package/components/Sticky/Sticky/Sticky.js.map +1 -1
  111. package/components/Sticky/Sticky.d.ts +1 -1
  112. package/components/Tabs/Tab/Tab.js +4 -2
  113. package/components/Tabs/Tab/Tab.js.map +1 -1
  114. package/components/Tabs/Tab.d.ts +5 -1
  115. package/components/Tabs/Tabs/Tabs.js +4 -2
  116. package/components/Tabs/Tabs/Tabs.js.map +1 -1
  117. package/components/Tabs/Tabs.d.ts +5 -1
  118. package/components/Toggle/Toggle/Toggle.js +4 -2
  119. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  120. package/components/Toggle/Toggle.d.ts +5 -1
  121. package/components/Token/Token/Token.js +2 -0
  122. package/components/Token/Token/Token.js.map +1 -1
  123. package/components/Token/Token.d.ts +5 -1
  124. package/components/TokenInput/TokenInput/TokenInput.js +4 -2
  125. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  126. package/components/TokenInput/TokenInput.d.ts +5 -1
  127. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +6 -3
  128. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  129. package/internal/CustomComboBox/ComboBoxView.d.ts +2 -1
  130. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +1 -0
  131. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  132. package/internal/CustomComboBox/CustomComboBox.d.ts +2 -1
  133. package/internal/InputLikeText/InputLikeText/InputLikeText.js +8 -3
  134. package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
  135. package/internal/InputLikeText/InputLikeText.d.ts +1 -0
  136. package/lib/currentEnvironment/currentEnvironment.js +34 -14
  137. package/lib/currentEnvironment/currentEnvironment.js.map +1 -1
  138. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollContainer.tsx"],"names":["React","PropTypes","LayoutEvents","CommonWrapper","cx","isIE11","rootNode","getDOMRect","createPropsGetter","styles","globalClasses","scrollSizeParametersNames","getScrollYOffset","convertScrollbarXScrollState","convertScrollbarYScrollState","ScrollBar","ScrollContainerDataTids","root","inner","ScrollContainer","getProps","defaultProps","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","handleMouseMove","handleMouseLeave","refInner","innerIE11","handleNativeScroll","axis","refScrollBar","refScrollBarX","refScrollBarY","offsetY","offsetX","offset","invert","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","event","reflow","onScroll","preventDefault","emit","WheelEvent","shiftKey","hasScrollBar","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","componentDidMount","setInnerElement","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","Component","__KONTUR_REACT_UI__","propTypes","bool","oneOfType","string","number","oneOf","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<Pick<ScrollContainerProps, 'invert' | 'scrollBehaviour' | 'preventWindowScroll'>>;\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private inner: Nullable<HTMLElement>;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n private hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const refScrollBar = axis === 'x' ? this.refScrollBarX : this.refScrollBarY;\n const { offsetY, offsetX } = this.getProps();\n\n const offset = axis === 'x' ? offsetX : offsetY;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={this.getProps().invert}\n onScrollStateChange={this.handleScrollStateChange}\n offset={offset}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollX?.reflow();\n this.scrollY?.reflow();\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !(event instanceof WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n };\n}\n"]}
1
+ {"version":3,"sources":["ScrollContainer.tsx"],"names":["React","PropTypes","LayoutEvents","CommonWrapper","cx","isIE11","rootNode","getDOMRect","createPropsGetter","isTestEnv","styles","globalClasses","scrollSizeParametersNames","getScrollYOffset","convertScrollbarXScrollState","convertScrollbarYScrollState","ScrollBar","ScrollContainerDataTids","root","inner","ScrollContainer","getProps","defaultProps","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","handleMouseMove","handleMouseLeave","refInner","innerIE11","handleNativeScroll","axis","refScrollBar","refScrollBarX","refScrollBarY","offsetY","offsetX","invert","hideScrollBar","disableAnimations","hideScrollBarDelay","offset","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","event","reflow","onScroll","preventDefault","emit","WheelEvent","shiftKey","hasScrollBar","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","componentDidMount","setInnerElement","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","Component","__KONTUR_REACT_UI__","propTypes","bool","oneOfType","string","number","oneOf","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n /**\n * Скрывать скроллбар при отсутствии активности пользователя\n */\n hideScrollBar?: boolean;\n /**\n * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true`\n */\n hideScrollBarDelay?: number;\n /**\n * Отключить анимации\n */\n disableAnimations?: boolean;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n ScrollContainerProps,\n 'invert' | 'scrollBehaviour' | 'preventWindowScroll' | 'hideScrollBar' | 'disableAnimations' | 'hideScrollBarDelay'\n >\n>;\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n hideScrollBar: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private inner: Nullable<HTMLElement>;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n private hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const refScrollBar = axis === 'x' ? this.refScrollBarX : this.refScrollBarY;\n const { offsetY, offsetX, invert, hideScrollBar, disableAnimations, hideScrollBarDelay } = this.getProps();\n\n const offset = axis === 'x' ? offsetX : offsetY;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={invert}\n onScrollStateChange={this.handleScrollStateChange}\n offset={offset}\n hideScrollBar={hideScrollBar}\n disableAnimations={disableAnimations}\n hideScrollBarDelay={hideScrollBarDelay}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollY?.reflow(event);\n this.scrollX?.reflow(event);\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !(event instanceof WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n };\n}\n"]}
@@ -6,8 +6,9 @@ export var defaultScrollbarState = {
6
6
  hover: false,
7
7
  active: false,
8
8
  // True when scroll is following mouse (mouse down on scroll).
9
- scrolling: false,
10
- scrollState: 'begin'
9
+ scrollingByMouseDrag: false,
10
+ scrollState: 'begin',
11
+ scrollingByMouseWheel: false
11
12
  };
12
13
  export var scrollSizeParametersNames = {
13
14
  x: {
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollContainer.constants.ts"],"names":["MIN_SCROLL_SIZE","defaultScrollbarState","size","pos","hover","active","scrolling","scrollState","scrollSizeParametersNames","x","offset","coord","clientSize","customScrollPos","customScrollSize","y"],"mappings":";;AAEA,OAAO,IAAMA,eAAe,GAAG,EAAxB;;AAEP,OAAO,IAAMC,qBAAqC,GAAG;AACnDC,EAAAA,IAAI,EAAE,CAD6C;AAEnDC,EAAAA,GAAG,EAAE,CAF8C;AAGnD;AACAC,EAAAA,KAAK,EAAE,KAJ4C;AAKnDC,EAAAA,MAAM,EAAE,KAL2C;AAMnD;AACAC,EAAAA,SAAS,EAAE,KAPwC;AAQnDC,EAAAA,WAAW,EAAE,OARsC,EAA9C;;;AAWP,OAAO,IAAMC,yBAAyB,GAAG;AACvCC,EAAAA,CAAC,EAAE;AACDC,IAAAA,MAAM,EAAE,aADP;AAEDR,IAAAA,IAAI,EAAE,aAFL;AAGDC,IAAAA,GAAG,EAAE,YAHJ;AAIDQ,IAAAA,KAAK,EAAE,SAJN;AAKDC,IAAAA,UAAU,EAAE,aALX;AAMDC,IAAAA,eAAe,EAAE,MANhB;AAODC,IAAAA,gBAAgB,EAAE,OAPjB,EADoC;;AAUvCC,EAAAA,CAAC,EAAE;AACDL,IAAAA,MAAM,EAAE,cADP;AAEDR,IAAAA,IAAI,EAAE,cAFL;AAGDC,IAAAA,GAAG,EAAE,WAHJ;AAIDQ,IAAAA,KAAK,EAAE,SAJN;AAKDC,IAAAA,UAAU,EAAE,cALX;AAMDC,IAAAA,eAAe,EAAE,KANhB;AAODC,IAAAA,gBAAgB,EAAE,QAPjB,EAVoC,EAAlC","sourcesContent":["import { ScrollBarState } from './ScrollBar';\n\nexport const MIN_SCROLL_SIZE = 20;\n\nexport const defaultScrollbarState: ScrollBarState = {\n size: 0,\n pos: 0,\n // Mouse is moving where big scrollbar can be located.\n hover: false,\n active: false,\n // True when scroll is following mouse (mouse down on scroll).\n scrolling: false,\n scrollState: 'begin',\n};\n\nexport const scrollSizeParametersNames = {\n x: {\n offset: 'offsetWidth',\n size: 'scrollWidth',\n pos: 'scrollLeft',\n coord: 'clientX',\n clientSize: 'clientWidth',\n customScrollPos: 'left',\n customScrollSize: 'width',\n },\n y: {\n offset: 'offsetHeight',\n size: 'scrollHeight',\n pos: 'scrollTop',\n coord: 'clientY',\n clientSize: 'clientHeight',\n customScrollPos: 'top',\n customScrollSize: 'height',\n },\n} as const;\n"]}
1
+ {"version":3,"sources":["ScrollContainer.constants.ts"],"names":["MIN_SCROLL_SIZE","defaultScrollbarState","size","pos","hover","active","scrollingByMouseDrag","scrollState","scrollingByMouseWheel","scrollSizeParametersNames","x","offset","coord","clientSize","customScrollPos","customScrollSize","y"],"mappings":";;AAEA,OAAO,IAAMA,eAAe,GAAG,EAAxB;;AAEP,OAAO,IAAMC,qBAAqC,GAAG;AACnDC,EAAAA,IAAI,EAAE,CAD6C;AAEnDC,EAAAA,GAAG,EAAE,CAF8C;AAGnD;AACAC,EAAAA,KAAK,EAAE,KAJ4C;AAKnDC,EAAAA,MAAM,EAAE,KAL2C;AAMnD;AACAC,EAAAA,oBAAoB,EAAE,KAP6B;AAQnDC,EAAAA,WAAW,EAAE,OARsC;AASnDC,EAAAA,qBAAqB,EAAE,KAT4B,EAA9C;;;AAYP,OAAO,IAAMC,yBAAyB,GAAG;AACvCC,EAAAA,CAAC,EAAE;AACDC,IAAAA,MAAM,EAAE,aADP;AAEDT,IAAAA,IAAI,EAAE,aAFL;AAGDC,IAAAA,GAAG,EAAE,YAHJ;AAIDS,IAAAA,KAAK,EAAE,SAJN;AAKDC,IAAAA,UAAU,EAAE,aALX;AAMDC,IAAAA,eAAe,EAAE,MANhB;AAODC,IAAAA,gBAAgB,EAAE,OAPjB,EADoC;;AAUvCC,EAAAA,CAAC,EAAE;AACDL,IAAAA,MAAM,EAAE,cADP;AAEDT,IAAAA,IAAI,EAAE,cAFL;AAGDC,IAAAA,GAAG,EAAE,WAHJ;AAIDS,IAAAA,KAAK,EAAE,SAJN;AAKDC,IAAAA,UAAU,EAAE,cALX;AAMDC,IAAAA,eAAe,EAAE,KANhB;AAODC,IAAAA,gBAAgB,EAAE,QAPjB,EAVoC,EAAlC","sourcesContent":["import { ScrollBarState } from './ScrollBar';\n\nexport const MIN_SCROLL_SIZE = 20;\n\nexport const defaultScrollbarState: ScrollBarState = {\n size: 0,\n pos: 0,\n // Mouse is moving where big scrollbar can be located.\n hover: false,\n active: false,\n // True when scroll is following mouse (mouse down on scroll).\n scrollingByMouseDrag: false,\n scrollState: 'begin',\n scrollingByMouseWheel: false,\n};\n\nexport const scrollSizeParametersNames = {\n x: {\n offset: 'offsetWidth',\n size: 'scrollWidth',\n pos: 'scrollLeft',\n coord: 'clientX',\n clientSize: 'clientWidth',\n customScrollPos: 'left',\n customScrollSize: 'width',\n },\n y: {\n offset: 'offsetHeight',\n size: 'scrollHeight',\n pos: 'scrollTop',\n coord: 'clientY',\n clientSize: 'clientHeight',\n customScrollPos: 'top',\n customScrollSize: 'height',\n },\n} as const;\n"]}
@@ -41,12 +41,24 @@ export interface ScrollContainerProps extends CommonProps {
41
41
  * Смещение горизонтального скроллбара
42
42
  */
43
43
  offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;
44
+ /**
45
+ * Скрывать скроллбар при отсутствии активности пользователя
46
+ */
47
+ hideScrollBar?: boolean;
48
+ /**
49
+ * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true`
50
+ */
51
+ hideScrollBarDelay?: number;
52
+ /**
53
+ * Отключить анимации
54
+ */
55
+ disableAnimations?: boolean;
44
56
  }
45
57
  export declare const ScrollContainerDataTids: {
46
58
  readonly root: "ScrollContainer__root";
47
59
  readonly inner: "ScrollContainer__inner";
48
60
  };
49
- declare type DefaultProps = Required<Pick<ScrollContainerProps, 'invert' | 'scrollBehaviour' | 'preventWindowScroll'>>;
61
+ declare type DefaultProps = Required<Pick<ScrollContainerProps, 'invert' | 'scrollBehaviour' | 'preventWindowScroll' | 'hideScrollBar' | 'disableAnimations' | 'hideScrollBarDelay'>>;
50
62
  export declare class ScrollContainer extends React.Component<ScrollContainerProps> {
51
63
  static __KONTUR_REACT_UI__: string;
52
64
  static propTypes: {
@@ -169,4 +169,27 @@ const offsetY = {
169
169
  ))}
170
170
  </ScrollContainer>
171
171
  </div>
172
- ```
172
+ ```
173
+
174
+ Проп `hideScrollBar` скрывает скроллбар при отсутствии активности пользователя. Задержку на скрытие скроллбара можно регулировать пропом `hideScrollBarDelay` (по умолчанию 500ms)
175
+
176
+ ```jsx harmony
177
+ var divStyle = {
178
+ display: 'inline-block',
179
+ border: '1px solid #f99',
180
+ height: 200,
181
+ margin: 1,
182
+ position: 'relative',
183
+ verticalAlign: 'top',
184
+ width: 200,
185
+ };
186
+ <div style={divStyle}>
187
+ <ScrollContainer hideScrollBar={true}>
188
+ {Array(30).fill(null).map((_,i) => (
189
+ <div key={i}>
190
+ {i}
191
+ </div>
192
+ ))}
193
+ </ScrollContainer>
194
+ </div>
195
+ ```
@@ -1,6 +1,6 @@
1
1
  import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
2
2
 
3
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11;
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16;
4
4
 
5
5
  import { css, memoizeStyle, prefix } from "../../../lib/theming/Emotion";
6
6
  export var globalClasses = prefix('scroll-container')({
@@ -21,27 +21,42 @@ export var styles = memoizeStyle({
21
21
  return css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n margin-bottom: -1px;\n padding-bottom: 1px;\n margin-right: -1px;\n padding-right: 1px;\n "])));
22
22
  },
23
23
  scrollBar: function scrollBar(t) {
24
- return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n position: absolute;\n z-index: 200;\n border-radius: 5px;\n background: ", ";\n "])), t.scrollContainerScrollBarColor);
24
+ return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n position: absolute;\n z-index: 200;\n border-radius: 5px;\n background: ", ";\n opacity: 0;\n "])), t.scrollContainerScrollBarColor);
25
+ },
26
+ visibleScrollBar: function visibleScrollBar() {
27
+ return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n opacity: 1;\n "])));
25
28
  },
26
29
  scrollBarInvert: function scrollBarInvert(t) {
27
- return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n background: #ccc;\n background: ", ";\n "])), t.scrollContainerScrollBarInvertColor);
30
+ return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n background: #ccc;\n background: ", ";\n "])), t.scrollContainerScrollBarInvertColor);
28
31
  },
29
32
  scrollBarContainerY: function scrollBarContainerY() {
30
- return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n position: absolute;\n right: 2px;\n top: 1px;\n bottom: 1px;\n width: 0;\n "])));
33
+ return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n position: absolute;\n right: 2px;\n top: 1px;\n bottom: 1px;\n width: 0;\n "])));
31
34
  },
32
35
  scrollBarY: function scrollBarY(t) {
33
- return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n right: 0;\n transition: width 0.2s;\n width: ", ";\n "])), t.scrollContainerScrollBarSize);
36
+ return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n right: 0;\n transition: width 0.2s;\n width: ", ";\n "])), t.scrollContainerScrollBarSize);
34
37
  },
35
38
  scrollBarYHover: function scrollBarYHover(t) {
36
- return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n width: ", ";\n "])), t.scrollContainerScrollBarHoverSize);
39
+ return css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n width: ", ";\n "])), t.scrollContainerScrollBarHoverSize);
37
40
  },
38
41
  scrollBarContainerX: function scrollBarContainerX(t) {
39
- return css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n position: absolute;\n right: 1px;\n bottom: 1px;\n left: 1px;\n height: 0;\n\n .", " ~ & {\n margin-right: calc(", " + 3px) !important;\n }\n\n & ~ .", " {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(", " + 2px);\n }\n }\n "])), globalClasses.scrollbarContainerY, t.scrollContainerScrollBarHoverSize, globalClasses.inner, t.scrollContainerScrollBarHoverSize);
42
+ return css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteralLoose(["\n position: absolute;\n right: 1px;\n bottom: 1px;\n left: 1px;\n height: 0;\n\n .", " ~ & {\n margin-right: calc(", " + 3px) !important;\n }\n\n & ~ .", " {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(", " + 2px);\n }\n }\n "])), globalClasses.scrollbarContainerY, t.scrollContainerScrollBarHoverSize, globalClasses.inner, t.scrollContainerScrollBarHoverSize);
40
43
  },
41
44
  scrollBarX: function scrollBarX(t) {
42
- return css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteralLoose(["\n bottom: 0;\n transition: height 0.2s;\n height: ", ";\n "])), t.scrollContainerScrollBarSize);
45
+ return css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteralLoose(["\n bottom: 0;\n transition: height 0.2s;\n height: ", ";\n "])), t.scrollContainerScrollBarSize);
43
46
  },
44
47
  scrollBarXHover: function scrollBarXHover(t) {
45
- return css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteralLoose(["\n height: ", ";\n "])), t.scrollContainerScrollBarHoverSize);
48
+ return css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteralLoose(["\n height: ", ";\n "])), t.scrollContainerScrollBarHoverSize);
49
+ },
50
+ transition: function transition() {
51
+ return css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteralLoose(["\n opacity: 0 !important; //override scrollBar opacity\n "])));
52
+ },
53
+ transitionActive: function transitionActive() {
54
+ return css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteralLoose(["\n transition: opacity 100ms ease-out !important; //override scrollBarX and scrollBarY transition\n opacity: 1 !important; //override scrollBar opacity\n "])));
55
+ },
56
+ transitionLeave: function transitionLeave() {
57
+ return css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteralLoose(["\n opacity: 1 !important; //override scrollBar opacity\n "])));
58
+ },
59
+ transitionLeaveActive: function transitionLeaveActive() {
60
+ return css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteralLoose(["\n opacity: 0 !important; //override scrollBar opacity\n transition: opacity 300ms ease-out !important; //override scrollBarX and scrollBarY transition\n "])));
46
61
  }
47
62
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollContainer.styles.ts"],"names":["css","memoizeStyle","prefix","globalClasses","scrollbarX","scrollbarY","scrollbarContainerX","scrollbarContainerY","inner","styles","root","innerIE11","scrollBar","t","scrollContainerScrollBarColor","scrollBarInvert","scrollContainerScrollBarInvertColor","scrollBarContainerY","scrollBarY","scrollContainerScrollBarSize","scrollBarYHover","scrollContainerScrollBarHoverSize","scrollBarContainerX","scrollBarX","scrollBarXHover"],"mappings":"0SAAA,SAASA,GAAT,EAAcC,YAAd,EAA4BC,MAA5B,QAA0C,2BAA1C;;;AAGA,OAAO,IAAMC,aAAa,GAAGD,MAAM,CAAC,kBAAD,CAAN,CAA2B;AACtDE,EAAAA,UAAU,EAAE,aAD0C;AAEtDC,EAAAA,UAAU,EAAE,aAF0C;AAGtDC,EAAAA,mBAAmB,EAAE,uBAHiC;AAItDC,EAAAA,mBAAmB,EAAE,uBAJiC;AAKtDC,EAAAA,KAAK,EAAE,OAL+C,EAA3B,CAAtB;;;AAQP,OAAO,IAAMC,MAAM,GAAGR,YAAY,CAAC;AACjCS,EAAAA,IADiC,kBAC1B;AACL,WAAOV,GAAP;;;;;AAKD,GAPgC;;AASjCQ,EAAAA,KATiC,mBASzB;AACN,WAAOR,GAAP;;;;;;;;;;;;;;AAcD,GAxBgC;;AA0BjCW,EAAAA,SA1BiC,uBA0BrB;AACV,WAAOX,GAAP;;;;;;;AAOD,GAlCgC;;AAoCjCY,EAAAA,SApCiC,qBAoCvBC,CApCuB,EAoCb;AAClB,WAAOb,GAAP;;;;AAIgBa,IAAAA,CAAC,CAACC,6BAJlB;;AAMD,GA3CgC;;AA6CjCC,EAAAA,eA7CiC,2BA6CjBF,CA7CiB,EA6CP;AACxB,WAAOb,GAAP;;AAEgBa,IAAAA,CAAC,CAACG,mCAFlB;;AAID,GAlDgC;;AAoDjCC,EAAAA,mBApDiC,iCAoDX;AACpB,WAAOjB,GAAP;;;;;;;AAOD,GA5DgC;;AA8DjCkB,EAAAA,UA9DiC,sBA8DtBL,CA9DsB,EA8DZ;AACnB,WAAOb,GAAP;;;AAGWa,IAAAA,CAAC,CAACM,4BAHb;;AAKD,GApEgC;;AAsEjCC,EAAAA,eAtEiC,2BAsEjBP,CAtEiB,EAsEP;AACxB,WAAOb,GAAP;AACWa,IAAAA,CAAC,CAACQ,iCADb;;AAGD,GA1EgC;;AA4EjCC,EAAAA,mBA5EiC,+BA4EbT,CA5Ea,EA4EH;AAC5B,WAAOb,GAAP;;;;;;;AAOKG,IAAAA,aAAa,CAACI,mBAPnB;AAQyBM,IAAAA,CAAC,CAACQ,iCAR3B;;;AAWSlB,IAAAA,aAAa,CAACK,KAXvB;;;;;AAgBqBK,IAAAA,CAAC,CAACQ,iCAhBvB;;;;AAoBD,GAjGgC;;AAmGjCE,EAAAA,UAnGiC,sBAmGtBV,CAnGsB,EAmGZ;AACnB,WAAOb,GAAP;;;AAGYa,IAAAA,CAAC,CAACM,4BAHd;;AAKD,GAzGgC;;AA2GjCK,EAAAA,eA3GiC,2BA2GjBX,CA3GiB,EA2GP;AACxB,WAAOb,GAAP;AACYa,IAAAA,CAAC,CAACQ,iCADd;;AAGD,GA/GgC,EAAD,CAA3B","sourcesContent":["import { css, memoizeStyle, prefix } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const globalClasses = prefix('scroll-container')({\n scrollbarX: 'scrollbar-x',\n scrollbarY: 'scrollbar-y',\n scrollbarContainerX: 'scrollbar-container-x',\n scrollbarContainerY: 'scrollbar-container-y',\n inner: 'inner',\n});\n\nexport const styles = memoizeStyle({\n root() {\n return css`\n height: 100%;\n overflow: hidden;\n position: relative;\n `;\n },\n\n inner() {\n return css`\n position: relative;\n overflow: scroll;\n max-height: 100%;\n max-width: 100%;\n\n /* Hide scrobars without losing functionality */\n scrollbar-width: none;\n -ms-overflow-style: none;\n &::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n `;\n },\n\n innerIE11() {\n return css`\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n margin-bottom: -1px;\n padding-bottom: 1px;\n margin-right: -1px;\n padding-right: 1px;\n `;\n },\n\n scrollBar(t: Theme) {\n return css`\n position: absolute;\n z-index: 200;\n border-radius: 5px;\n background: ${t.scrollContainerScrollBarColor};\n `;\n },\n\n scrollBarInvert(t: Theme) {\n return css`\n background: #ccc;\n background: ${t.scrollContainerScrollBarInvertColor};\n `;\n },\n\n scrollBarContainerY() {\n return css`\n position: absolute;\n right: 2px;\n top: 1px;\n bottom: 1px;\n width: 0;\n `;\n },\n\n scrollBarY(t: Theme) {\n return css`\n right: 0;\n transition: width 0.2s;\n width: ${t.scrollContainerScrollBarSize};\n `;\n },\n\n scrollBarYHover(t: Theme) {\n return css`\n width: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n\n scrollBarContainerX(t: Theme) {\n return css`\n position: absolute;\n right: 1px;\n bottom: 1px;\n left: 1px;\n height: 0;\n\n .${globalClasses.scrollbarContainerY} ~ & {\n margin-right: calc(${t.scrollContainerScrollBarHoverSize} + 3px) !important;\n }\n\n & ~ .${globalClasses.inner} {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(${t.scrollContainerScrollBarHoverSize} + 2px);\n }\n }\n `;\n },\n\n scrollBarX(t: Theme) {\n return css`\n bottom: 0;\n transition: height 0.2s;\n height: ${t.scrollContainerScrollBarSize};\n `;\n },\n\n scrollBarXHover(t: Theme) {\n return css`\n height: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n});\n"]}
1
+ {"version":3,"sources":["ScrollContainer.styles.ts"],"names":["css","memoizeStyle","prefix","globalClasses","scrollbarX","scrollbarY","scrollbarContainerX","scrollbarContainerY","inner","styles","root","innerIE11","scrollBar","t","scrollContainerScrollBarColor","visibleScrollBar","scrollBarInvert","scrollContainerScrollBarInvertColor","scrollBarContainerY","scrollBarY","scrollContainerScrollBarSize","scrollBarYHover","scrollContainerScrollBarHoverSize","scrollBarContainerX","scrollBarX","scrollBarXHover","transition","transitionActive","transitionLeave","transitionLeaveActive"],"mappings":"yYAAA,SAASA,GAAT,EAAcC,YAAd,EAA4BC,MAA5B,QAA0C,2BAA1C;;;AAGA,OAAO,IAAMC,aAAa,GAAGD,MAAM,CAAC,kBAAD,CAAN,CAA2B;AACtDE,EAAAA,UAAU,EAAE,aAD0C;AAEtDC,EAAAA,UAAU,EAAE,aAF0C;AAGtDC,EAAAA,mBAAmB,EAAE,uBAHiC;AAItDC,EAAAA,mBAAmB,EAAE,uBAJiC;AAKtDC,EAAAA,KAAK,EAAE,OAL+C,EAA3B,CAAtB;;;AAQP,OAAO,IAAMC,MAAM,GAAGR,YAAY,CAAC;AACjCS,EAAAA,IADiC,kBAC1B;AACL,WAAOV,GAAP;;;;;AAKD,GAPgC;;AASjCQ,EAAAA,KATiC,mBASzB;AACN,WAAOR,GAAP;;;;;;;;;;;;;;AAcD,GAxBgC;;AA0BjCW,EAAAA,SA1BiC,uBA0BrB;AACV,WAAOX,GAAP;;;;;;;AAOD,GAlCgC;;AAoCjCY,EAAAA,SApCiC,qBAoCvBC,CApCuB,EAoCb;AAClB,WAAOb,GAAP;;;;AAIgBa,IAAAA,CAAC,CAACC,6BAJlB;;;AAOD,GA5CgC;;AA8CjCC,EAAAA,gBA9CiC,8BA8Cd;AACjB,WAAOf,GAAP;;;AAGD,GAlDgC;;AAoDjCgB,EAAAA,eApDiC,2BAoDjBH,CApDiB,EAoDP;AACxB,WAAOb,GAAP;;AAEgBa,IAAAA,CAAC,CAACI,mCAFlB;;AAID,GAzDgC;;AA2DjCC,EAAAA,mBA3DiC,iCA2DX;AACpB,WAAOlB,GAAP;;;;;;;AAOD,GAnEgC;;AAqEjCmB,EAAAA,UArEiC,sBAqEtBN,CArEsB,EAqEZ;AACnB,WAAOb,GAAP;;;AAGWa,IAAAA,CAAC,CAACO,4BAHb;;AAKD,GA3EgC;;AA6EjCC,EAAAA,eA7EiC,2BA6EjBR,CA7EiB,EA6EP;AACxB,WAAOb,GAAP;AACWa,IAAAA,CAAC,CAACS,iCADb;;AAGD,GAjFgC;;AAmFjCC,EAAAA,mBAnFiC,+BAmFbV,CAnFa,EAmFH;AAC5B,WAAOb,GAAP;;;;;;;AAOKG,IAAAA,aAAa,CAACI,mBAPnB;AAQyBM,IAAAA,CAAC,CAACS,iCAR3B;;;AAWSnB,IAAAA,aAAa,CAACK,KAXvB;;;;;AAgBqBK,IAAAA,CAAC,CAACS,iCAhBvB;;;;AAoBD,GAxGgC;;AA0GjCE,EAAAA,UA1GiC,sBA0GtBX,CA1GsB,EA0GZ;AACnB,WAAOb,GAAP;;;AAGYa,IAAAA,CAAC,CAACO,4BAHd;;AAKD,GAhHgC;;AAkHjCK,EAAAA,eAlHiC,2BAkHjBZ,CAlHiB,EAkHP;AACxB,WAAOb,GAAP;AACYa,IAAAA,CAAC,CAACS,iCADd;;AAGD,GAtHgC;AAuHjCI,EAAAA,UAvHiC,wBAuHpB;AACX,WAAO1B,GAAP;;;AAGD,GA3HgC;AA4HjC2B,EAAAA,gBA5HiC,8BA4Hd;AACjB,WAAO3B,GAAP;;;;AAID,GAjIgC;AAkIjC4B,EAAAA,eAlIiC,6BAkIf;AAChB,WAAO5B,GAAP;;;AAGD,GAtIgC;AAuIjC6B,EAAAA,qBAvIiC,mCAuIT;AACtB,WAAO7B,GAAP;;;;AAID,GA5IgC,EAAD,CAA3B","sourcesContent":["import { css, memoizeStyle, prefix } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const globalClasses = prefix('scroll-container')({\n scrollbarX: 'scrollbar-x',\n scrollbarY: 'scrollbar-y',\n scrollbarContainerX: 'scrollbar-container-x',\n scrollbarContainerY: 'scrollbar-container-y',\n inner: 'inner',\n});\n\nexport const styles = memoizeStyle({\n root() {\n return css`\n height: 100%;\n overflow: hidden;\n position: relative;\n `;\n },\n\n inner() {\n return css`\n position: relative;\n overflow: scroll;\n max-height: 100%;\n max-width: 100%;\n\n /* Hide scrobars without losing functionality */\n scrollbar-width: none;\n -ms-overflow-style: none;\n &::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n `;\n },\n\n innerIE11() {\n return css`\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n margin-bottom: -1px;\n padding-bottom: 1px;\n margin-right: -1px;\n padding-right: 1px;\n `;\n },\n\n scrollBar(t: Theme) {\n return css`\n position: absolute;\n z-index: 200;\n border-radius: 5px;\n background: ${t.scrollContainerScrollBarColor};\n opacity: 0;\n `;\n },\n\n visibleScrollBar() {\n return css`\n opacity: 1;\n `;\n },\n\n scrollBarInvert(t: Theme) {\n return css`\n background: #ccc;\n background: ${t.scrollContainerScrollBarInvertColor};\n `;\n },\n\n scrollBarContainerY() {\n return css`\n position: absolute;\n right: 2px;\n top: 1px;\n bottom: 1px;\n width: 0;\n `;\n },\n\n scrollBarY(t: Theme) {\n return css`\n right: 0;\n transition: width 0.2s;\n width: ${t.scrollContainerScrollBarSize};\n `;\n },\n\n scrollBarYHover(t: Theme) {\n return css`\n width: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n\n scrollBarContainerX(t: Theme) {\n return css`\n position: absolute;\n right: 1px;\n bottom: 1px;\n left: 1px;\n height: 0;\n\n .${globalClasses.scrollbarContainerY} ~ & {\n margin-right: calc(${t.scrollContainerScrollBarHoverSize} + 3px) !important;\n }\n\n & ~ .${globalClasses.inner} {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(${t.scrollContainerScrollBarHoverSize} + 2px);\n }\n }\n `;\n },\n\n scrollBarX(t: Theme) {\n return css`\n bottom: 0;\n transition: height 0.2s;\n height: ${t.scrollContainerScrollBarSize};\n `;\n },\n\n scrollBarXHover(t: Theme) {\n return css`\n height: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n transition() {\n return css`\n opacity: 0 !important; //override scrollBar opacity\n `;\n },\n transitionActive() {\n return css`\n transition: opacity 100ms ease-out !important; //override scrollBarX and scrollBarY transition\n opacity: 1 !important; //override scrollBar opacity\n `;\n },\n transitionLeave() {\n return css`\n opacity: 1 !important; //override scrollBar opacity\n `;\n },\n transitionLeaveActive() {\n return css`\n opacity: 0 !important; //override scrollBar opacity\n transition: opacity 300ms ease-out !important; //override scrollBarX and scrollBarY transition\n `;\n },\n});\n"]}
@@ -11,6 +11,7 @@ export declare const styles: {
11
11
  inner(): string;
12
12
  innerIE11(): string;
13
13
  scrollBar(t: Theme): string;
14
+ visibleScrollBar(): string;
14
15
  scrollBarInvert(t: Theme): string;
15
16
  scrollBarContainerY(): string;
16
17
  scrollBarY(t: Theme): string;
@@ -18,4 +19,8 @@ export declare const styles: {
18
19
  scrollBarContainerX(t: Theme): string;
19
20
  scrollBarX(t: Theme): string;
20
21
  scrollBarXHover(t: Theme): string;
22
+ transition(): string;
23
+ transitionActive(): string;
24
+ transitionLeave(): string;
25
+ transitionLeaveActive(): string;
21
26
  };
@@ -143,7 +143,8 @@ export var Select = (_dec = locale('Select', SelectLocaleHelper), responsiveLayo
143
143
  label: label,
144
144
  isPlaceholder: isPlaceholder,
145
145
  onClick: _this.toggle,
146
- onKeyDown: _this.handleKey
146
+ onKeyDown: _this.handleKey,
147
+ 'aria-describedby': _this.props['aria-describedby']
147
148
  };
148
149
  return buttonParams;
149
150
  };
@@ -423,7 +424,8 @@ export var Select = (_dec = locale('Select', SelectLocaleHelper), responsiveLayo
423
424
  width: '100%',
424
425
  onClick: params.onClick,
425
426
  onKeyDown: params.onKeyDown,
426
- active: params.opened
427
+ active: params.opened,
428
+ 'aria-describedby': params['aria-describedby']
427
429
  });
428
430
 
429
431
  var use = this.getProps().use;
@@ -1 +1 @@
1
- {"version":3,"sources":["Select.tsx"],"names":["React","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","isNonNullable","isReactUINode","ThemeContext","CommonWrapper","ArrowChevronDownIcon","MobilePopup","cx","responsiveLayout","getRootNode","rootNode","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","SelectDataTids","root","Select","state","opened","value","props","defaultValue","searchPattern","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","search","focusInput","handleSearch","getMobileSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","input","setTimeout","refMenu","menu","e","preventDefault","up","down","enter","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","theme","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","rootMobile","setRootNode","getValue","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","hasFixedWidth","menuWidth","menuAlign","disablePortal","menuPos","maxMenuHeight","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","SEP","Array","isArray","getTextFromItem","toString","itemText","indexOf"],"mappings":"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","sourcesContent":["import React, { ReactNode, ReactPortal } from 'react';\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, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction, isNonNullable, isReactUINode } 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 { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\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 const SelectDataTids = {\n root: 'Select__root',\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem> extends CommonProps, Pick<DropdownContainerProps, 'menuPos'> {\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 * Состояние валидации при ошибке.\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<SelectItem<TValue, TItem>>;\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 * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\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\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use'>\n>;\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\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 isMobileLayout!: boolean;\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 <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\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 getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={SelectDataTids.root}\n className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\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 return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\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.getProps().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 const use = this.getProps().use;\n\n const labelProps = {\n className: cx({\n [styles.label()]: use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && 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 = 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 ? this.getSearch() : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n menuPos={this.props.menuPos}\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.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.focusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n\n return 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, isMobile });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile } as MenuItemProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\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.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.ReactNode[] = [];\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.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\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<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: any): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
1
+ {"version":3,"sources":["Select.tsx"],"names":["React","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","isNonNullable","isReactUINode","ThemeContext","CommonWrapper","ArrowChevronDownIcon","MobilePopup","cx","responsiveLayout","getRootNode","rootNode","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","SelectDataTids","root","Select","state","opened","value","props","defaultValue","searchPattern","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","search","focusInput","handleSearch","getMobileSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","input","setTimeout","refMenu","menu","e","preventDefault","up","down","enter","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","theme","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","rootMobile","setRootNode","getValue","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","hasFixedWidth","menuWidth","menuAlign","disablePortal","menuPos","maxMenuHeight","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","SEP","Array","isArray","getTextFromItem","toString","itemText","indexOf"],"mappings":"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","sourcesContent":["import React, { ReactNode, ReactPortal, AriaAttributes } from 'react';\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, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction, isNonNullable, isReactUINode } 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 { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\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 'aria-describedby'?: AriaAttributes['aria-describedby'];\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 const SelectDataTids = {\n root: 'Select__root',\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem> extends CommonProps, Pick<DropdownContainerProps, 'menuPos'> {\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 * Состояние валидации при ошибке.\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<SelectItem<TValue, TItem>>;\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 * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\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\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use'>\n>;\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\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 isMobileLayout!: boolean;\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 <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\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 getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={SelectDataTids.root}\n className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\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 'aria-describedby': this.props['aria-describedby'],\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\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.getProps().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 'aria-describedby': params['aria-describedby'],\n };\n const use = this.getProps().use;\n\n const labelProps = {\n className: cx({\n [styles.label()]: use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && 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 = 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 ? this.getSearch() : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n menuPos={this.props.menuPos}\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.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.focusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n\n return 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, isMobile });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile } as MenuItemProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\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.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.ReactNode[] = [];\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.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\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<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: any): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import React, { ReactNode, ReactPortal } from 'react';
1
+ import React, { ReactNode, ReactPortal, AriaAttributes } from 'react';
2
2
  import { ButtonSize, ButtonUse } from '../Button';
3
3
  import { DropdownContainerProps } from '../../internal/DropdownContainer';
4
4
  import { Nullable } from '../../typings/utility-types';
@@ -11,6 +11,7 @@ export interface ButtonParams {
11
11
  onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;
12
12
  opened: boolean;
13
13
  isPlaceholder: boolean;
14
+ 'aria-describedby'?: AriaAttributes['aria-describedby'];
14
15
  }
15
16
  export declare const SelectDataTids: {
16
17
  readonly root: "Select__root";
@@ -100,6 +101,10 @@ export interface SelectProps<TValue, TItem> extends CommonProps, Pick<DropdownCo
100
101
  * Текст заголовка выпадающего меню в мобильной версии
101
102
  */
102
103
  mobileMenuHeaderText?: string;
104
+ /**
105
+ * Атрибут для указания id элемента(-ов), описывающих его
106
+ */
107
+ 'aria-describedby'?: AriaAttributes['aria-describedby'];
103
108
  }
104
109
  export interface SelectState<TValue> {
105
110
  opened: boolean;
@@ -17,7 +17,7 @@ import { createPropsGetter } from "../../../lib/createPropsGetter";
17
17
  import { styles } from "../Sticky.styles";
18
18
  var MAX_REFLOW_RETRIES = 5;
19
19
  export var StickyDataTids = {
20
- root: 'Spinner__root'
20
+ root: 'Sticky__root'
21
21
  };
22
22
  export var Sticky = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {
23
23
  _inheritsLoose(Sticky, _React$Component);