@skbkontur/react-ui 5.1.5 → 5.1.7

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 (76) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/cjs/components/Calendar/CalendarDay.js +18 -2
  3. package/cjs/components/Calendar/CalendarDay.js.map +1 -1
  4. package/cjs/components/Calendar/DayCellView.js +7 -15
  5. package/cjs/components/Calendar/DayCellView.js.map +1 -1
  6. package/cjs/components/Calendar/__creevey__/Calendar.creevey.mts +39 -0
  7. package/cjs/components/ComboBox/__creevey__/ComboBox.creevey.mts +4 -0
  8. package/cjs/components/DateInput/DateInput.js +12 -9
  9. package/cjs/components/DateInput/DateInput.js.map +1 -1
  10. package/cjs/components/DateRangePicker/DateRangePicker.d.ts +1 -1
  11. package/cjs/components/DateRangePicker/DateRangePicker.js +19 -15
  12. package/cjs/components/DateRangePicker/DateRangePicker.js.map +1 -1
  13. package/cjs/components/DateRangePicker/DateRangePicker.styles.d.ts +0 -1
  14. package/cjs/components/DateRangePicker/DateRangePicker.styles.js +13 -18
  15. package/cjs/components/DateRangePicker/DateRangePicker.styles.js.map +1 -1
  16. package/cjs/components/DateRangePicker/__creevey__/DateRangePicker.creevey.mts +1 -1
  17. package/cjs/components/Link/__creevey__/Link.creevey.mts +2 -2
  18. package/cjs/components/MaskedInput/__creevey__/MaskedInput.creevey.mts +8 -3
  19. package/cjs/components/Select/Select.d.ts +3 -0
  20. package/cjs/components/Select/Select.js +4 -1
  21. package/cjs/components/Select/Select.js.map +1 -1
  22. package/cjs/components/SidePage/SidePage.js +1 -1
  23. package/cjs/components/SidePage/SidePage.js.map +1 -1
  24. package/cjs/components/SidePage/SidePageHeader.js +4 -1
  25. package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
  26. package/cjs/components/Sticky/Sticky.d.ts +3 -0
  27. package/cjs/components/Sticky/Sticky.js +15 -1
  28. package/cjs/components/Sticky/Sticky.js.map +1 -1
  29. package/cjs/components/Toggle/__creevey__/Toggle.creevey.mts +6 -2
  30. package/cjs/internal/DateSelect/DateSelect.js +13 -2
  31. package/cjs/internal/DateSelect/DateSelect.js.map +1 -1
  32. package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
  33. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  34. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +3 -1
  35. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  36. package/cjs/lib/getMenuPositions.d.ts +21 -1
  37. package/cjs/lib/getMenuPositions.js +45 -8
  38. package/cjs/lib/getMenuPositions.js.map +1 -1
  39. package/components/Calendar/CalendarDay/CalendarDay.js +9 -2
  40. package/components/Calendar/CalendarDay/CalendarDay.js.map +1 -1
  41. package/components/Calendar/DayCellView/DayCellView.js +6 -10
  42. package/components/Calendar/DayCellView/DayCellView.js.map +1 -1
  43. package/components/Calendar/__creevey__/Calendar.creevey.mts +39 -0
  44. package/components/ComboBox/__creevey__/ComboBox.creevey.mts +4 -0
  45. package/components/DateInput/DateInput/DateInput.js +12 -9
  46. package/components/DateInput/DateInput/DateInput.js.map +1 -1
  47. package/components/DateRangePicker/DateRangePicker/DateRangePicker.js +10 -11
  48. package/components/DateRangePicker/DateRangePicker/DateRangePicker.js.map +1 -1
  49. package/components/DateRangePicker/DateRangePicker.d.ts +1 -1
  50. package/components/DateRangePicker/DateRangePicker.styles/DateRangePicker.styles.js +12 -15
  51. package/components/DateRangePicker/DateRangePicker.styles/DateRangePicker.styles.js.map +1 -1
  52. package/components/DateRangePicker/DateRangePicker.styles.d.ts +0 -1
  53. package/components/DateRangePicker/__creevey__/DateRangePicker.creevey.mts +1 -1
  54. package/components/Link/__creevey__/Link.creevey.mts +2 -2
  55. package/components/MaskedInput/__creevey__/MaskedInput.creevey.mts +8 -3
  56. package/components/Select/Select/Select.js +3 -2
  57. package/components/Select/Select/Select.js.map +1 -1
  58. package/components/Select/Select.d.ts +3 -0
  59. package/components/SidePage/SidePage/SidePage.js +1 -1
  60. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  61. package/components/SidePage/SidePageHeader/SidePageHeader.js +6 -1
  62. package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
  63. package/components/Sticky/Sticky/Sticky.js +9 -1
  64. package/components/Sticky/Sticky/Sticky.js.map +1 -1
  65. package/components/Sticky/Sticky.d.ts +3 -0
  66. package/components/Toggle/__creevey__/Toggle.creevey.mts +6 -2
  67. package/internal/DateSelect/DateSelect/DateSelect.js +2 -0
  68. package/internal/DateSelect/DateSelect/DateSelect.js.map +1 -1
  69. package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
  70. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +2 -1
  71. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  72. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  73. package/lib/getMenuPositions/getMenuPositions.js +33 -4
  74. package/lib/getMenuPositions/getMenuPositions.js.map +1 -1
  75. package/lib/getMenuPositions.d.ts +21 -1
  76. package/package.json +2 -2
@@ -13,6 +13,7 @@ import { cx } from "../../../lib/theming/Emotion";
13
13
  import { rootNode } from "../../../lib/rootNode";
14
14
  import { getDOMRect } from "../../../lib/dom/getDOMRect";
15
15
  import { createPropsGetter } from "../../../lib/createPropsGetter";
16
+ import { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from "../../../lib/featureFlagsContext";
16
17
  import { styles } from "../Sticky.styles";
17
18
  var MAX_REFLOW_RETRIES = 5;
18
19
  export var StickyDataTids = {
@@ -130,7 +131,7 @@ export var Sticky = rootNode(_class = (_Sticky = /*#__PURE__*/function (_React$C
130
131
  _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
131
132
  if (!shallowEqual(prevProps, this.props) || !shallowEqual(prevState, this.state)) {
132
133
  if (this.reflowCounter < MAX_REFLOW_RETRIES) {
133
- LayoutEvents.emit();
134
+ this.featureFlags.stickyReduceLayoutEvents ? this.reflow() : LayoutEvents.emit();
134
135
  this.reflowCounter += 1;
135
136
  return;
136
137
  }
@@ -138,6 +139,13 @@ export var Sticky = rootNode(_class = (_Sticky = /*#__PURE__*/function (_React$C
138
139
  this.reflowCounter = 0;
139
140
  };
140
141
  _proto.render = function render() {
142
+ var _this2 = this;
143
+ return /*#__PURE__*/React.createElement(ReactUIFeatureFlagsContext.Consumer, null, function (flags) {
144
+ _this2.featureFlags = getFullReactUIFlagsContext(flags);
145
+ return _this2.renderMain();
146
+ });
147
+ };
148
+ _proto.renderMain = function renderMain() {
141
149
  var _cx;
142
150
  var children = this.props.children;
143
151
  var side = this.props.side;
@@ -1 +1 @@
1
- {"version":3,"names":["React","PropTypes","shallowEqual","globalObject","LayoutEvents","isFunction","ZIndex","CommonWrapper","cx","rootNode","getDOMRect","createPropsGetter","styles","MAX_REFLOW_RETRIES","StickyDataTids","root","Sticky","_class","_Sticky","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","getProps","defaultProps","state","fixed","deltaHeight","stopped","relativeTop","layoutSubscription","remove","reflowCounter","refWrapper","ref","wrapper","refInner","inner","reflow","_globalObject$documen","document","documentElement","Error","windowHeight","innerHeight","clientHeight","_getDOMRect","top","bottom","left","width","_getDOMRect2","height","_this$props","props","getStop","side","_this$state","prevFixed","_this$state$height","prevHeight","offset","Math","floor","setState","stop","stopRect","outerHeight","_inheritsLoose","_proto","prototype","componentDidMount","addListener","componentWillUnmount","componentDidUpdate","prevProps","prevState","emit","render","_cx","children","_this$state2","innerStyle","createElement","_extends","rootNodeRef","setRootNode","className","priority","applyZIndex","style","wrapperRef","container","Component","__KONTUR_REACT_UI__","displayName","propTypes","oneOfType","node","func","number","oneOf","isRequired"],"sources":["Sticky.tsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport shallowEqual from 'shallowequal';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport type { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ZIndex } from '../../internal/ZIndex';\nimport type { CommonProps } from '../../internal/CommonWrapper';\nimport { CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport type { TSetRootNode } from '../../lib/rootNode';\nimport { rootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { styles } from './Sticky.styles';\n\nconst MAX_REFLOW_RETRIES = 5;\n\nexport interface StickyProps extends Omit<CommonProps, 'children'> {\n /** Задает сторону залипания. */\n side: 'top' | 'bottom';\n\n /** Задает отступ от края экрана в пикселях, на который сдвигается элемент в залипшем состоянии.\n * @default 0 */\n offset?: number;\n\n /** Задает функцию, которая возвращает DOM-элемент, который нельзя пересекать. */\n getStop?: () => Nullable<HTMLElement>;\n\n /** @ignore */\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface StickyState {\n fixed: boolean;\n deltaHeight: number;\n height?: number;\n width?: number;\n left?: number;\n stopped: boolean;\n relativeTop: number;\n}\n\nexport const StickyDataTids = {\n root: 'Sticky__root',\n} as const;\n\ntype DefaultProps = Required<Pick<StickyProps, 'offset'>>;\n\n/**\n * `Sticky` позволяет закреплять элемент интерфейса в определенной позиции на экране при прокрутке страницы.\n * Это полезно для создания \"прилипающих\" элементов, которые остаются видимыми при прокрутке содержимого.\n */\n@rootNode\nexport class Sticky extends React.Component<StickyProps, StickyState> {\n public static __KONTUR_REACT_UI__ = 'Sticky';\n public static displayName = 'Sticky';\n\n public static propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Функция, которая возвращает DOM-элемент, который нельзя пересекать.\n */\n getStop: PropTypes.func,\n\n /**\n * Отступ от границы в пикселях\n */\n offset: PropTypes.number,\n\n side: PropTypes.oneOf(['top', 'bottom']).isRequired,\n };\n\n public static defaultProps: DefaultProps = { offset: 0 };\n\n private getProps = createPropsGetter(Sticky.defaultProps);\n\n public state: StickyState = {\n fixed: false,\n deltaHeight: 0,\n stopped: false,\n relativeTop: 0,\n };\n\n private wrapper: Nullable<HTMLElement>;\n private inner: Nullable<HTMLElement>;\n private layoutSubscription: { remove: Nullable<() => void> } = { remove: null };\n private reflowCounter = 0;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.reflow();\n\n this.layoutSubscription = LayoutEvents.addListener(this.reflow);\n }\n\n public componentWillUnmount() {\n if (this.layoutSubscription.remove) {\n this.layoutSubscription.remove();\n }\n }\n\n public componentDidUpdate(prevProps: StickyProps, prevState: StickyState) {\n if (!shallowEqual(prevProps, this.props) || !shallowEqual(prevState, this.state)) {\n if (this.reflowCounter < MAX_REFLOW_RETRIES) {\n LayoutEvents.emit();\n this.reflowCounter += 1;\n return;\n }\n }\n this.reflowCounter = 0;\n }\n\n public render() {\n let { children } = this.props;\n const { side } = this.props;\n const offset = this.getProps().offset;\n const { fixed, stopped, relativeTop, deltaHeight, width, height, left } = this.state;\n const innerStyle: React.CSSProperties = {};\n\n if (fixed) {\n if (stopped) {\n innerStyle.top = relativeTop;\n innerStyle[side === 'top' ? 'marginTop' : 'marginBottom'] = deltaHeight;\n } else {\n innerStyle.width = width;\n innerStyle[side] = offset;\n innerStyle.left = left;\n }\n }\n\n if (isFunction(children)) {\n children = children(fixed);\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={StickyDataTids.root} ref={this.refWrapper} className={styles.wrapper()}>\n <ZIndex\n priority=\"Sticky\"\n applyZIndex={fixed}\n className={cx(styles.inner(), {\n [styles.fixed()]: fixed && !stopped,\n [styles.stopped()]: stopped,\n })}\n style={innerStyle}\n wrapperRef={this.refInner}\n >\n <div className={styles.container()}>{children}</div>\n </ZIndex>\n {fixed && !stopped ? <div style={{ width, height }} /> : null}\n </div>\n </CommonWrapper>\n );\n }\n\n private refWrapper = (ref: Nullable<HTMLElement>) => (this.wrapper = ref);\n\n private refInner = (ref: Nullable<HTMLElement>) => (this.inner = ref);\n\n /**\n * Пересчитать габариты и позицию залипшего элемента\n *\n * @public\n */\n public reflow = () => {\n if (!globalObject.document?.documentElement) {\n throw Error('There is no \"documentElement\" in document');\n }\n\n const windowHeight = globalObject.innerHeight || globalObject.document.documentElement.clientHeight;\n if (!this.wrapper || !this.inner) {\n return;\n }\n const { top, bottom, left, width } = getDOMRect(this.wrapper);\n const { height } = getDOMRect(this.inner);\n const { getStop, side } = this.props;\n const { fixed: prevFixed, height: prevHeight = height } = this.state;\n const offset = this.getProps().offset;\n const fixed = side === 'top' ? top < offset : Math.floor(bottom) > windowHeight - offset;\n\n this.setState({ fixed, left });\n\n if (fixed && !prevFixed) {\n this.setState({ width, height });\n }\n\n if (fixed) {\n this.setState({ width });\n const stop = getStop && getStop();\n if (stop) {\n const deltaHeight = prevHeight - height;\n const stopRect = getDOMRect(stop);\n const outerHeight = height + offset;\n let stopped = false;\n let relativeTop = 0;\n\n if (side === 'top') {\n stopped = stopRect.top - outerHeight < 0;\n relativeTop = stopRect.top - prevHeight - top;\n } else {\n stopped = stopRect.bottom + outerHeight > windowHeight;\n relativeTop = stopRect.bottom - top;\n }\n\n this.setState({ relativeTop, deltaHeight, stopped });\n }\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","PropTypes","shallowEqual","globalObject","LayoutEvents","isFunction","ZIndex","CommonWrapper","cx","rootNode","getDOMRect","createPropsGetter","getFullReactUIFlagsContext","ReactUIFeatureFlagsContext","styles","MAX_REFLOW_RETRIES","StickyDataTids","root","Sticky","_class","_Sticky","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","getProps","defaultProps","state","fixed","deltaHeight","stopped","relativeTop","layoutSubscription","remove","reflowCounter","refWrapper","ref","wrapper","refInner","inner","reflow","_globalObject$documen","document","documentElement","Error","windowHeight","innerHeight","clientHeight","_getDOMRect","top","bottom","left","width","_getDOMRect2","height","_this$props","props","getStop","side","_this$state","prevFixed","_this$state$height","prevHeight","offset","Math","floor","setState","stop","stopRect","outerHeight","_inheritsLoose","_proto","prototype","componentDidMount","addListener","componentWillUnmount","componentDidUpdate","prevProps","prevState","featureFlags","stickyReduceLayoutEvents","emit","render","_this2","createElement","Consumer","flags","renderMain","_cx","children","_this$state2","innerStyle","_extends","rootNodeRef","setRootNode","className","priority","applyZIndex","style","wrapperRef","container","Component","__KONTUR_REACT_UI__","displayName","propTypes","oneOfType","node","func","number","oneOf","isRequired"],"sources":["Sticky.tsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport shallowEqual from 'shallowequal';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport type { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ZIndex } from '../../internal/ZIndex';\nimport type { CommonProps } from '../../internal/CommonWrapper';\nimport { CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport type { TSetRootNode } from '../../lib/rootNode';\nimport { rootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport type { ReactUIFeatureFlags } from '../../lib/featureFlagsContext';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\n\nimport { styles } from './Sticky.styles';\n\nconst MAX_REFLOW_RETRIES = 5;\n\nexport interface StickyProps extends Omit<CommonProps, 'children'> {\n /** Задает сторону залипания. */\n side: 'top' | 'bottom';\n\n /** Задает отступ от края экрана в пикселях, на который сдвигается элемент в залипшем состоянии.\n * @default 0 */\n offset?: number;\n\n /** Задает функцию, которая возвращает DOM-элемент, который нельзя пересекать. */\n getStop?: () => Nullable<HTMLElement>;\n\n /** @ignore */\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface StickyState {\n fixed: boolean;\n deltaHeight: number;\n height?: number;\n width?: number;\n left?: number;\n stopped: boolean;\n relativeTop: number;\n}\n\nexport const StickyDataTids = {\n root: 'Sticky__root',\n} as const;\n\ntype DefaultProps = Required<Pick<StickyProps, 'offset'>>;\n\n/**\n * `Sticky` позволяет закреплять элемент интерфейса в определенной позиции на экране при прокрутке страницы.\n * Это полезно для создания \"прилипающих\" элементов, которые остаются видимыми при прокрутке содержимого.\n */\n@rootNode\nexport class Sticky extends React.Component<StickyProps, StickyState> {\n public static __KONTUR_REACT_UI__ = 'Sticky';\n public static displayName = 'Sticky';\n\n public static propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Функция, которая возвращает DOM-элемент, который нельзя пересекать.\n */\n getStop: PropTypes.func,\n\n /**\n * Отступ от границы в пикселях\n */\n offset: PropTypes.number,\n\n side: PropTypes.oneOf(['top', 'bottom']).isRequired,\n };\n\n public static defaultProps: DefaultProps = { offset: 0 };\n\n private getProps = createPropsGetter(Sticky.defaultProps);\n\n public state: StickyState = {\n fixed: false,\n deltaHeight: 0,\n stopped: false,\n relativeTop: 0,\n };\n\n private wrapper: Nullable<HTMLElement>;\n private inner: Nullable<HTMLElement>;\n private layoutSubscription: { remove: Nullable<() => void> } = { remove: null };\n private reflowCounter = 0;\n private setRootNode!: TSetRootNode;\n public featureFlags!: ReactUIFeatureFlags;\n\n public componentDidMount() {\n this.reflow();\n\n this.layoutSubscription = LayoutEvents.addListener(this.reflow);\n }\n\n public componentWillUnmount() {\n if (this.layoutSubscription.remove) {\n this.layoutSubscription.remove();\n }\n }\n\n public componentDidUpdate(prevProps: StickyProps, prevState: StickyState) {\n if (!shallowEqual(prevProps, this.props) || !shallowEqual(prevState, this.state)) {\n if (this.reflowCounter < MAX_REFLOW_RETRIES) {\n this.featureFlags.stickyReduceLayoutEvents ? this.reflow() : LayoutEvents.emit();\n this.reflowCounter += 1;\n return;\n }\n }\n this.reflowCounter = 0;\n }\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.featureFlags = getFullReactUIFlagsContext(flags);\n return this.renderMain();\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderMain() {\n let { children } = this.props;\n const { side } = this.props;\n const offset = this.getProps().offset;\n const { fixed, stopped, relativeTop, deltaHeight, width, height, left } = this.state;\n const innerStyle: React.CSSProperties = {};\n\n if (fixed) {\n if (stopped) {\n innerStyle.top = relativeTop;\n innerStyle[side === 'top' ? 'marginTop' : 'marginBottom'] = deltaHeight;\n } else {\n innerStyle.width = width;\n innerStyle[side] = offset;\n innerStyle.left = left;\n }\n }\n\n if (isFunction(children)) {\n children = children(fixed);\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={StickyDataTids.root} ref={this.refWrapper} className={styles.wrapper()}>\n <ZIndex\n priority=\"Sticky\"\n applyZIndex={fixed}\n className={cx(styles.inner(), {\n [styles.fixed()]: fixed && !stopped,\n [styles.stopped()]: stopped,\n })}\n style={innerStyle}\n wrapperRef={this.refInner}\n >\n <div className={styles.container()}>{children}</div>\n </ZIndex>\n {fixed && !stopped ? <div style={{ width, height }} /> : null}\n </div>\n </CommonWrapper>\n );\n }\n\n private refWrapper = (ref: Nullable<HTMLElement>) => (this.wrapper = ref);\n\n private refInner = (ref: Nullable<HTMLElement>) => (this.inner = ref);\n\n /**\n * Пересчитать габариты и позицию залипшего элемента\n *\n * @public\n */\n public reflow = () => {\n if (!globalObject.document?.documentElement) {\n throw Error('There is no \"documentElement\" in document');\n }\n\n const windowHeight = globalObject.innerHeight || globalObject.document.documentElement.clientHeight;\n if (!this.wrapper || !this.inner) {\n return;\n }\n const { top, bottom, left, width } = getDOMRect(this.wrapper);\n const { height } = getDOMRect(this.inner);\n const { getStop, side } = this.props;\n const { fixed: prevFixed, height: prevHeight = height } = this.state;\n const offset = this.getProps().offset;\n const fixed = side === 'top' ? top < offset : Math.floor(bottom) > windowHeight - offset;\n\n this.setState({ fixed, left });\n\n if (fixed && !prevFixed) {\n this.setState({ width, height });\n }\n\n if (fixed) {\n this.setState({ width });\n const stop = getStop && getStop();\n if (stop) {\n const deltaHeight = prevHeight - height;\n const stopRect = getDOMRect(stop);\n const outerHeight = height + offset;\n let stopped = false;\n let relativeTop = 0;\n\n if (side === 'top') {\n stopped = stopRect.top - outerHeight < 0;\n relativeTop = stopRect.top - prevHeight - top;\n } else {\n stopped = stopRect.bottom + outerHeight > windowHeight;\n relativeTop = stopRect.bottom - top;\n }\n\n this.setState({ relativeTop, deltaHeight, stopped });\n }\n }\n };\n}\n"],"mappings":"oJAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,YAAY,MAAM,cAAc;AACvC,SAASC,YAAY,QAAQ,0BAA0B;;AAEvD,OAAO,KAAKC,YAAY,MAAM,wBAAwB;;AAEtD,SAASC,UAAU,QAAQ,iBAAiB;AAC5C,SAASC,MAAM,QAAQ,uBAAuB;;AAE9C,SAASC,aAAa,QAAQ,8BAA8B;AAC5D,SAASC,EAAE,QAAQ,2BAA2B;;AAE9C,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,UAAU,QAAQ,0BAA0B;AACrD,SAASC,iBAAiB,QAAQ,6BAA6B;;AAE/D,SAASC,0BAA0B,EAAEC,0BAA0B,QAAQ,+BAA+B;;AAEtG,SAASC,MAAM,QAAQ,iBAAiB;;AAExC,IAAMC,kBAAkB,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2B5B,OAAO,IAAMC,cAAc,GAAG;EAC5BC,IAAI,EAAE;AACR,CAAU;;;;AAIV;AACA;AACA;AACA;AACA;AACaC,MAAM,GADlBT,QAAQ,CAAAU,MAAA,IAAAC,OAAA,0BAAAC,gBAAA,YAAAH,OAAA,OAAAI,KAAA,UAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAC,IAAA,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA,KAAAF,IAAA,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA,GAAAN,KAAA,GAAAD,gBAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,gBAAA,SAAAU,MAAA,CAAAL,IAAA,WAAAJ,KAAA;;;;;;;;;;;;;;;;;;;;;;IAuBCU,QAAQ,GAAGrB,iBAAiB,CAACO,MAAM,CAACe,YAAY,CAAC,CAAAX,KAAA;;IAElDY,KAAK,GAAgB;MAC1BC,KAAK,EAAE,KAAK;MACZC,WAAW,EAAE,CAAC;MACdC,OAAO,EAAE,KAAK;MACdC,WAAW,EAAE;IACf,CAAC,CAAAhB,KAAA;;;;IAIOiB,kBAAkB,GAAqC,EAAEC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAAlB,KAAA;IACvEmB,aAAa,GAAG,CAAC,CAAAnB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiFjBoB,UAAU,GAAG,UAACC,GAA0B,UAAMrB,KAAA,CAAKsB,OAAO,GAAGD,GAAG,EAAC,CAAArB,KAAA;;IAEjEuB,QAAQ,GAAG,UAACF,GAA0B,UAAMrB,KAAA,CAAKwB,KAAK,GAAGH,GAAG,EAAC;;IAErE;AACF;AACA;AACA;AACA,OAJErB,KAAA;IAKOyB,MAAM,GAAG,YAAM,KAAAC,qBAAA;MACpB,IAAI,GAAAA,qBAAA,GAAC7C,YAAY,CAAC8C,QAAQ,aAArBD,qBAAA,CAAuBE,eAAe,GAAE;QAC3C,MAAMC,KAAK,CAAC,2CAA2C,CAAC;MAC1D;;MAEA,IAAMC,YAAY,GAAGjD,YAAY,CAACkD,WAAW,IAAIlD,YAAY,CAAC8C,QAAQ,CAACC,eAAe,CAACI,YAAY;MACnG,IAAI,CAAChC,KAAA,CAAKsB,OAAO,IAAI,CAACtB,KAAA,CAAKwB,KAAK,EAAE;QAChC;MACF;MACA,IAAAS,WAAA,GAAqC7C,UAAU,CAACY,KAAA,CAAKsB,OAAO,CAAC,CAArDY,GAAG,GAAAD,WAAA,CAAHC,GAAG,CAAEC,MAAM,GAAAF,WAAA,CAANE,MAAM,CAAEC,IAAI,GAAAH,WAAA,CAAJG,IAAI,CAAEC,KAAK,GAAAJ,WAAA,CAALI,KAAK;MAChC,IAAAC,YAAA,GAAmBlD,UAAU,CAACY,KAAA,CAAKwB,KAAK,CAAC,CAAjCe,MAAM,GAAAD,YAAA,CAANC,MAAM;MACd,IAAAC,WAAA,GAA0BxC,KAAA,CAAKyC,KAAK,CAA5BC,OAAO,GAAAF,WAAA,CAAPE,OAAO,CAAEC,IAAI,GAAAH,WAAA,CAAJG,IAAI;MACrB,IAAAC,WAAA,GAA0D5C,KAAA,CAAKY,KAAK,CAArDiC,SAAS,GAAAD,WAAA,CAAhB/B,KAAK,CAAAiC,kBAAA,GAAAF,WAAA,CAAaL,MAAM,CAAEQ,UAAU,GAAAD,kBAAA,cAAGP,MAAM,GAAAO,kBAAA;MACrD,IAAME,MAAM,GAAGhD,KAAA,CAAKU,QAAQ,CAAC,CAAC,CAACsC,MAAM;MACrC,IAAMnC,KAAK,GAAG8B,IAAI,KAAK,KAAK,GAAGT,GAAG,GAAGc,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACf,MAAM,CAAC,GAAGL,YAAY,GAAGkB,MAAM;;MAExFhD,KAAA,CAAKmD,QAAQ,CAAC,EAAEtC,KAAK,EAALA,KAAK,EAAEuB,IAAI,EAAJA,IAAI,CAAC,CAAC,CAAC;;MAE9B,IAAIvB,KAAK,IAAI,CAACgC,SAAS,EAAE;QACvB7C,KAAA,CAAKmD,QAAQ,CAAC,EAAEd,KAAK,EAALA,KAAK,EAAEE,MAAM,EAANA,MAAM,CAAC,CAAC,CAAC;MAClC;;MAEA,IAAI1B,KAAK,EAAE;QACTb,KAAA,CAAKmD,QAAQ,CAAC,EAAEd,KAAK,EAALA,KAAK,CAAC,CAAC,CAAC;QACxB,IAAMe,IAAI,GAAGV,OAAO,IAAIA,OAAO,CAAC,CAAC;QACjC,IAAIU,IAAI,EAAE;UACR,IAAMtC,WAAW,GAAGiC,UAAU,GAAGR,MAAM;UACvC,IAAMc,QAAQ,GAAGjE,UAAU,CAACgE,IAAI,CAAC;UACjC,IAAME,WAAW,GAAGf,MAAM,GAAGS,MAAM;UACnC,IAAIjC,OAAO,GAAG,KAAK;UACnB,IAAIC,WAAW,GAAG,CAAC;;UAEnB,IAAI2B,IAAI,KAAK,KAAK,EAAE;YAClB5B,OAAO,GAAGsC,QAAQ,CAACnB,GAAG,GAAGoB,WAAW,GAAG,CAAC;YACxCtC,WAAW,GAAGqC,QAAQ,CAACnB,GAAG,GAAGa,UAAU,GAAGb,GAAG;UAC/C,CAAC,MAAM;YACLnB,OAAO,GAAGsC,QAAQ,CAAClB,MAAM,GAAGmB,WAAW,GAAGxB,YAAY;YACtDd,WAAW,GAAGqC,QAAQ,CAAClB,MAAM,GAAGD,GAAG;UACrC;;UAEAlC,KAAA,CAAKmD,QAAQ,CAAC,EAAEnC,WAAW,EAAXA,WAAW,EAAEF,WAAW,EAAXA,WAAW,EAAEC,OAAO,EAAPA,OAAO,CAAC,CAAC,CAAC;QACtD;MACF;IACF,CAAC,QAAAf,KAAA,EAAAuD,cAAA,CAAA3D,MAAA,EAAAG,gBAAA,MAAAyD,MAAA,GAAA5D,MAAA,CAAA6D,SAAA,CAAAD,MAAA,CAjIME,iBAAiB,GAAxB,SAAAA,kBAAA,EAA2B,CACzB,IAAI,CAACjC,MAAM,CAAC,CAAC,CAEb,IAAI,CAACR,kBAAkB,GAAGnC,YAAY,CAAC6E,WAAW,CAAC,IAAI,CAAClC,MAAM,CAAC,CACjE,CAAC,CAAA+B,MAAA,CAEMI,oBAAoB,GAA3B,SAAAA,qBAAA,EAA8B,CAC5B,IAAI,IAAI,CAAC3C,kBAAkB,CAACC,MAAM,EAAE,CAClC,IAAI,CAACD,kBAAkB,CAACC,MAAM,CAAC,CAAC,CAClC,CACF,CAAC,CAAAsC,MAAA,CAEMK,kBAAkB,GAAzB,SAAAA,mBAA0BC,SAAsB,EAAEC,SAAsB,EAAE,CACxE,IAAI,CAACnF,YAAY,CAACkF,SAAS,EAAE,IAAI,CAACrB,KAAK,CAAC,IAAI,CAAC7D,YAAY,CAACmF,SAAS,EAAE,IAAI,CAACnD,KAAK,CAAC,EAAE,CAChF,IAAI,IAAI,CAACO,aAAa,GAAG1B,kBAAkB,EAAE,CAC3C,IAAI,CAACuE,YAAY,CAACC,wBAAwB,GAAG,IAAI,CAACxC,MAAM,CAAC,CAAC,GAAG3C,YAAY,CAACoF,IAAI,CAAC,CAAC,CAChF,IAAI,CAAC/C,aAAa,IAAI,CAAC,CACvB,OACF,CACF,CACA,IAAI,CAACA,aAAa,GAAG,CAAC,CACxB,CAAC,CAAAqC,MAAA,CAEMW,MAAM,GAAb,SAAAA,OAAA,EAAgB,KAAAC,MAAA,QACd,oBACE1F,KAAA,CAAA2F,aAAA,CAAC9E,0BAA0B,CAAC+E,QAAQ,QACjC,UAACC,KAAK,EAAK,CACVH,MAAI,CAACJ,YAAY,GAAG1E,0BAA0B,CAACiF,KAAK,CAAC,CACrD,OAAOH,MAAI,CAACI,UAAU,CAAC,CAAC,CAC1B,CACmC,CAAC,CAE1C,CAAC,CAAAhB,MAAA,CAEOgB,UAAU,GAAlB,SAAAA,WAAA,EAAqB,KAAAC,GAAA,CACnB,IAAMC,QAAQ,GAAK,IAAI,CAACjC,KAAK,CAAvBiC,QAAQ,CACd,IAAQ/B,IAAI,GAAK,IAAI,CAACF,KAAK,CAAnBE,IAAI,CACZ,IAAMK,MAAM,GAAG,IAAI,CAACtC,QAAQ,CAAC,CAAC,CAACsC,MAAM,CACrC,IAAA2B,YAAA,GAA0E,IAAI,CAAC/D,KAAK,CAA5EC,KAAK,GAAA8D,YAAA,CAAL9D,KAAK,CAAEE,OAAO,GAAA4D,YAAA,CAAP5D,OAAO,CAAEC,WAAW,GAAA2D,YAAA,CAAX3D,WAAW,CAAEF,WAAW,GAAA6D,YAAA,CAAX7D,WAAW,CAAEuB,KAAK,GAAAsC,YAAA,CAALtC,KAAK,CAAEE,MAAM,GAAAoC,YAAA,CAANpC,MAAM,CAAEH,IAAI,GAAAuC,YAAA,CAAJvC,IAAI,CACrE,IAAMwC,UAA+B,GAAG,CAAC,CAAC,CAE1C,IAAI/D,KAAK,EAAE,CACT,IAAIE,OAAO,EAAE,CACX6D,UAAU,CAAC1C,GAAG,GAAGlB,WAAW,CAC5B4D,UAAU,CAACjC,IAAI,KAAK,KAAK,GAAG,WAAW,GAAG,cAAc,CAAC,GAAG7B,WAAW,CACzE,CAAC,MAAM,CACL8D,UAAU,CAACvC,KAAK,GAAGA,KAAK,CACxBuC,UAAU,CAACjC,IAAI,CAAC,GAAGK,MAAM,CACzB4B,UAAU,CAACxC,IAAI,GAAGA,IAAI,CACxB,CACF,CAEA,IAAIrD,UAAU,CAAC2F,QAAQ,CAAC,EAAE,CACxBA,QAAQ,GAAGA,QAAQ,CAAC7D,KAAK,CAAC,CAC5B,CAEA,oBACEnC,KAAA,CAAA2F,aAAA,CAACpF,aAAa,EAAA4F,QAAA,GAACC,WAAW,EAAE,IAAI,CAACC,WAAY,IAAK,IAAI,CAACtC,KAAK,gBAC1D/D,KAAA,CAAA2F,aAAA,UAAK,YAAU3E,cAAc,CAACC,IAAK,EAAC0B,GAAG,EAAE,IAAI,CAACD,UAAW,EAAC4D,SAAS,EAAExF,MAAM,CAAC8B,OAAO,CAAC,CAAE,iBACpF5C,KAAA,CAAA2F,aAAA,CAACrF,MAAM,IACLiG,QAAQ,EAAC,QAAQ,EACjBC,WAAW,EAAErE,KAAM,EACnBmE,SAAS,EAAE9F,EAAE,CAACM,MAAM,CAACgC,KAAK,CAAC,CAAC,GAAAiD,GAAA,OAAAA,GAAA,CACzBjF,MAAM,CAACqB,KAAK,CAAC,CAAC,IAAGA,KAAK,IAAI,CAACE,OAAO,EAAA0D,GAAA,CAClCjF,MAAM,CAACuB,OAAO,CAAC,CAAC,IAAGA,OAAO,EAAA0D,GAAA,CAC5B,CAAE,EACHU,KAAK,EAAEP,UAAW,EAClBQ,UAAU,EAAE,IAAI,CAAC7D,QAAS,iBAE1B7C,KAAA,CAAA2F,aAAA,UAAKW,SAAS,EAAExF,MAAM,CAAC6F,SAAS,CAAC,CAAE,IAAEX,QAAc,CAC7C,CAAC,EACR7D,KAAK,IAAI,CAACE,OAAO,gBAAGrC,KAAA,CAAA2F,aAAA,UAAKc,KAAK,EAAE,EAAE9C,KAAK,EAALA,KAAK,EAAEE,MAAM,EAANA,MAAM,CAAC,CAAE,EAAE,CAAC,GAAG,IACtD,CACQ,CAAC,CAEpB,CAAC,QAAA3C,MAAA,GAjHyBlB,KAAK,CAAC4G,SAAS,GAAAxF,OAAA,CAC3ByF,mBAAmB,GAAG,QAAQ,EAAAzF,OAAA,CAC9B0F,WAAW,GAAG,QAAQ,EAAA1F,OAAA,CAEtB2F,SAAS,GAAG,EACxBf,QAAQ,EAAE/F,SAAS,CAAC+G,SAAS,CAAC,CAAC/G,SAAS,CAACgH,IAAI,EAAEhH,SAAS,CAACiH,IAAI,CAAC,CAAC,EAE/D;AACJ;AACA,KACIlD,OAAO,EAAE/D,SAAS,CAACiH,IAAI,EAEvB;AACJ;AACA,KACI5C,MAAM,EAAErE,SAAS,CAACkH,MAAM,EAExBlD,IAAI,EAAEhE,SAAS,CAACmH,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAACC,UAAU,CACrD,CAAC,EAAAjG,OAAA,CAEaa,YAAY,GAAiB,EAAEqC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAAlD,OAAA,MAAAD,MAAA","ignoreList":[]}
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import type { Nullable } from '../../typings/utility-types';
4
4
  import type { CommonProps } from '../../internal/CommonWrapper';
5
+ import type { ReactUIFeatureFlags } from '../../lib/featureFlagsContext';
5
6
  export interface StickyProps extends Omit<CommonProps, 'children'> {
6
7
  /** Задает сторону залипания. */
7
8
  side: 'top' | 'bottom';
@@ -53,10 +54,12 @@ export declare class Sticky extends React.Component<StickyProps, StickyState> {
53
54
  private layoutSubscription;
54
55
  private reflowCounter;
55
56
  private setRootNode;
57
+ featureFlags: ReactUIFeatureFlags;
56
58
  componentDidMount(): void;
57
59
  componentWillUnmount(): void;
58
60
  componentDidUpdate(prevProps: StickyProps, prevState: StickyState): void;
59
61
  render(): React.JSX.Element;
62
+ private renderMain;
60
63
  private refWrapper;
61
64
  private refInner;
62
65
  /**
@@ -80,9 +80,13 @@ kind('Toggle', () => {
80
80
  .actions({
81
81
  bridge: true,
82
82
  })
83
- .click(context.webdriver.findElement({ css: `[data-tid="${ToggleDataTids.root}"]` }))
83
+ .move({
84
+ origin: context.webdriver.findElement({ css: `[data-tid="${ToggleDataTids.root}"]` }),
85
+ })
86
+ .pause(2000)
87
+ .click()
84
88
  .perform();
85
- await delay(1000);
89
+ await delay(2000);
86
90
  await context.matchImage(await context.takeScreenshot(), 'clicked');
87
91
  });
88
92
  });
@@ -30,6 +30,7 @@ export var DateSelectDataTids = {
30
30
  menuItem: 'DateSelect__menuItem',
31
31
  menu: 'DateSelect__menu'
32
32
  };
33
+ var DATE_SELECT_POSITIONS = ['middle left', 'middle right', 'bottom left', 'top left', 'bottom right', 'top right'];
33
34
  export var DateSelect = (_dec = locale('Calendar', DatePickerLocaleHelper), responsiveLayout(_class = _dec(_class = (_DateSelect = /*#__PURE__*/function (_React$PureComponent) {
34
35
  function DateSelect() {
35
36
  var _this;
@@ -131,6 +132,7 @@ export var DateSelect = (_dec = locale('Calendar', DatePickerLocaleHelper), resp
131
132
  disabled: disabled,
132
133
  _renderButton: this.renderButton,
133
134
  menuPos: "middle",
135
+ positions: DATE_SELECT_POSITIONS,
134
136
  renderValue: this.getItem,
135
137
  items: this.getItems(),
136
138
  menuOffset: parseInt(this.theme.menuPaddingX) + parseInt(this.theme.menuItemPaddingXSmall),
@@ -1 +1 @@
1
- {"version":3,"names":["React","createRef","PropTypes","responsiveLayout","getRandomID","isNonNullable","DatePickerLocaleHelper","locale","ThemeContext","cx","createPropsGetter","Select","MenuItem","ArrowCollapseCVOpenIcon16Regular","globalClasses","styles","defaultMinMonth","defaultMaxMonth","defaultMinYear","defaultMaxYear","months","range","years","start","end","Array","fill","map","_","index","DateSelectDataTids","caption","menuItem","menu","DateSelect","_dec","_class","_DateSelect","_React$PureComponent","_this","_len","arguments","length","args","_key","call","apply","concat","getProps","defaultProps","selectRef","menuId","renderButton","params","_this$props","props","value","disabled","width","isInteractiveElement","Tag","rootProps","className","root","theme","style","onClick","undefined","opened","selectChosenAriaLabel","type","selectYearAriaLabel","selectMonthAriaLabel","getItem","createElement","arrow","color","getItems","_this$getProps","onValueChange","options","isYearType","option","isSelected","isOptionDisabled","scrollIntoView","state","key","_this$locale$months","_inheritsLoose","_proto","prototype","render","_this2","Consumer","renderMain","close","_this$selectRef$curre","current","_this$getProps2","btnBorderRadiusSmall","menuItemBorderRadius","use","ref","_renderButton","menuPos","renderValue","items","menuOffset","parseInt","menuPaddingX","menuItemPaddingXSmall","_this$getProps3","minValue","maxValue","_createClass","get","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","bool","string","number","isRequired","oneOfType","func"],"sources":["DateSelect.tsx"],"sourcesContent":["import React, { createRef } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { getRandomID, isNonNullable } from '../../lib/utils';\nimport type { DatePickerLocale } from '../../components/DatePicker/locale';\nimport { DatePickerLocaleHelper } from '../../components/DatePicker/locale';\nimport { locale } from '../../lib/locale/decorators';\nimport type { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport type { ButtonParams } from '../../components/Select';\nimport { Select } from '../../components/Select';\nimport { MenuItem } from '../../components/MenuItem';\nimport { ArrowCollapseCVOpenIcon16Regular } from '../icons2022/ArrowCollapseCVOpenIcon/ArrowCollapseCVOpenIcon16Regular';\n\nimport { globalClasses, styles } from './DateSelect.styles';\n\nconst defaultMinMonth = 0;\nconst defaultMaxMonth = 11;\nconst defaultMinYear = 1900;\nconst defaultMaxYear = 2099;\nconst months = range(defaultMinMonth, defaultMaxMonth);\nconst years = range(defaultMinYear, defaultMaxYear);\n\nfunction range(start: number, end: number) {\n return Array(end - start + 1)\n .fill(null)\n .map((_, index) => start + index);\n}\n\nexport interface DateSelectProps {\n disabled?: boolean;\n onValueChange: (value: number) => void;\n type?: 'month' | 'year';\n value: number;\n width?: number | string;\n minValue?: number;\n maxValue?: number;\n}\n\nexport const DateSelectDataTids = {\n caption: 'DateSelect__caption',\n menuItem: 'DateSelect__menuItem',\n menu: 'DateSelect__menu',\n} as const;\n\ntype DefaultProps = Required<Pick<DateSelectProps, 'type' | 'width'>>;\n\n@responsiveLayout\n@locale('Calendar', DatePickerLocaleHelper)\nexport class DateSelect extends React.PureComponent<DateSelectProps> {\n public static __KONTUR_REACT_UI__ = 'DateSelect';\n public static displayName = 'DateSelect';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n type: PropTypes.string,\n\n value: PropTypes.number.isRequired,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n onValueChange: PropTypes.func,\n\n minValue: PropTypes.number,\n\n maxValue: PropTypes.number,\n };\n\n public static defaultProps: DefaultProps = {\n type: 'year',\n width: 'auto',\n };\n\n private getProps = createPropsGetter(DateSelect.defaultProps);\n\n private get isYearType() {\n return this.getProps().type === 'year';\n }\n\n private theme!: Theme;\n private readonly locale!: DatePickerLocale;\n private readonly selectRef = createRef<Select<number, number>>();\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private menuId = DateSelectDataTids.menu + getRandomID();\n\n private renderButton = (params: ButtonParams) => {\n const { value, disabled } = this.props;\n const width = this.getProps().width;\n const isInteractiveElement = !disabled;\n const Tag = isInteractiveElement ? 'button' : 'span';\n const rootProps = {\n className: cx(styles.root(this.theme), disabled && styles.disabled()),\n style: { width },\n onClick: disabled ? undefined : params.onClick,\n 'aria-expanded': isInteractiveElement ? params.opened : undefined,\n 'aria-controls': !disabled ? this.menuId : undefined,\n 'aria-label': isInteractiveElement\n ? `${this.locale.selectChosenAriaLabel} ${\n this.getProps().type === 'year' ? this.locale.selectYearAriaLabel : this.locale.selectMonthAriaLabel\n } ${this.getItem(value)}`\n : undefined,\n };\n\n return (\n <Tag {...rootProps}>\n <div data-tid={DateSelectDataTids.caption} className={styles.caption()}>\n {this.getItem(value)}\n </div>\n {isInteractiveElement && (\n <ArrowCollapseCVOpenIcon16Regular className={cx(globalClasses.arrow)} color=\"#ADADAD\" />\n )}\n </Tag>\n );\n };\n\n public close() {\n this.selectRef.current?.close();\n }\n\n private renderMain() {\n const { value, disabled, onValueChange } = this.getProps();\n const theme = {\n btnBorderRadiusSmall: this.theme.menuItemBorderRadius,\n };\n\n return (\n <Select\n use=\"text\"\n value={value}\n ref={this.selectRef}\n theme={theme}\n disabled={disabled}\n _renderButton={this.renderButton}\n menuPos=\"middle\"\n renderValue={this.getItem}\n items={this.getItems()}\n menuOffset={parseInt(this.theme.menuPaddingX) + parseInt(this.theme.menuItemPaddingXSmall)}\n onValueChange={onValueChange}\n aria-label={`${this.locale.selectChosenAriaLabel} ${\n this.isYearType ? this.locale.selectYearAriaLabel : this.locale.selectMonthAriaLabel\n } ${this.getItem(value)}`}\n />\n );\n }\n\n private isOptionDisabled(option: number) {\n const { minValue, maxValue } = this.getProps();\n\n if (isNonNullable(maxValue) && isNonNullable(minValue)) {\n return option > maxValue || option < minValue;\n }\n\n if (isNonNullable(minValue)) {\n return option < minValue;\n }\n\n if (isNonNullable(maxValue)) {\n return option > maxValue;\n }\n }\n\n private getItems = () => {\n const { value, onValueChange } = this.getProps();\n const options = this.isYearType ? years : months;\n\n return options.map((option) => {\n const isSelected = option === value;\n const isOptionDisabled = this.isOptionDisabled(option);\n\n return (\n <MenuItem\n scrollIntoView={isSelected}\n disabled={isOptionDisabled}\n state={isSelected ? 'selected' : null}\n onClick={() => onValueChange(option)}\n aria-label={`Выбрать ${this.isYearType ? 'год' : 'месяц'} ${this.getItem(option)}`}\n data-tid={DateSelectDataTids.menuItem}\n data-prop-disabled={isOptionDisabled}\n key={option}\n >\n {this.getItem(option)}\n </MenuItem>\n );\n });\n };\n\n private getItem = (value: number) => {\n if (this.isYearType) {\n return value;\n }\n\n return this.locale.months?.[value];\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","createRef","PropTypes","responsiveLayout","getRandomID","isNonNullable","DatePickerLocaleHelper","locale","ThemeContext","cx","createPropsGetter","Select","MenuItem","ArrowCollapseCVOpenIcon16Regular","globalClasses","styles","defaultMinMonth","defaultMaxMonth","defaultMinYear","defaultMaxYear","months","range","years","start","end","Array","fill","map","_","index","DateSelectDataTids","caption","menuItem","menu","DATE_SELECT_POSITIONS","DateSelect","_dec","_class","_DateSelect","_React$PureComponent","_this","_len","arguments","length","args","_key","call","apply","concat","getProps","defaultProps","selectRef","menuId","renderButton","params","_this$props","props","value","disabled","width","isInteractiveElement","Tag","rootProps","className","root","theme","style","onClick","undefined","opened","selectChosenAriaLabel","type","selectYearAriaLabel","selectMonthAriaLabel","getItem","createElement","arrow","color","getItems","_this$getProps","onValueChange","options","isYearType","option","isSelected","isOptionDisabled","scrollIntoView","state","key","_this$locale$months","_inheritsLoose","_proto","prototype","render","_this2","Consumer","renderMain","close","_this$selectRef$curre","current","_this$getProps2","btnBorderRadiusSmall","menuItemBorderRadius","use","ref","_renderButton","menuPos","positions","renderValue","items","menuOffset","parseInt","menuPaddingX","menuItemPaddingXSmall","_this$getProps3","minValue","maxValue","_createClass","get","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","bool","string","number","isRequired","oneOfType","func"],"sources":["DateSelect.tsx"],"sourcesContent":["import React, { createRef } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { getRandomID, isNonNullable } from '../../lib/utils';\nimport type { DatePickerLocale } from '../../components/DatePicker/locale';\nimport { DatePickerLocaleHelper } from '../../components/DatePicker/locale';\nimport { locale } from '../../lib/locale/decorators';\nimport type { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport type { ButtonParams } from '../../components/Select';\nimport { Select } from '../../components/Select';\nimport { MenuItem } from '../../components/MenuItem';\nimport { ArrowCollapseCVOpenIcon16Regular } from '../icons2022/ArrowCollapseCVOpenIcon/ArrowCollapseCVOpenIcon16Regular';\nimport type { PopupPositionsType } from '../../internal/Popup/types';\n\nimport { globalClasses, styles } from './DateSelect.styles';\n\nconst defaultMinMonth = 0;\nconst defaultMaxMonth = 11;\nconst defaultMinYear = 1900;\nconst defaultMaxYear = 2099;\nconst months = range(defaultMinMonth, defaultMaxMonth);\nconst years = range(defaultMinYear, defaultMaxYear);\n\nfunction range(start: number, end: number) {\n return Array(end - start + 1)\n .fill(null)\n .map((_, index) => start + index);\n}\n\nexport interface DateSelectProps {\n disabled?: boolean;\n onValueChange: (value: number) => void;\n type?: 'month' | 'year';\n value: number;\n width?: number | string;\n minValue?: number;\n maxValue?: number;\n}\n\nexport const DateSelectDataTids = {\n caption: 'DateSelect__caption',\n menuItem: 'DateSelect__menuItem',\n menu: 'DateSelect__menu',\n} as const;\n\ntype DefaultProps = Required<Pick<DateSelectProps, 'type' | 'width'>>;\n\nconst DATE_SELECT_POSITIONS: PopupPositionsType[] = [\n 'middle left',\n 'middle right',\n 'bottom left',\n 'top left',\n 'bottom right',\n 'top right',\n];\n\n@responsiveLayout\n@locale('Calendar', DatePickerLocaleHelper)\nexport class DateSelect extends React.PureComponent<DateSelectProps> {\n public static __KONTUR_REACT_UI__ = 'DateSelect';\n public static displayName = 'DateSelect';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n type: PropTypes.string,\n\n value: PropTypes.number.isRequired,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n onValueChange: PropTypes.func,\n\n minValue: PropTypes.number,\n\n maxValue: PropTypes.number,\n };\n\n public static defaultProps: DefaultProps = {\n type: 'year',\n width: 'auto',\n };\n\n private getProps = createPropsGetter(DateSelect.defaultProps);\n\n private get isYearType() {\n return this.getProps().type === 'year';\n }\n\n private theme!: Theme;\n private readonly locale!: DatePickerLocale;\n private readonly selectRef = createRef<Select<number, number>>();\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private menuId = DateSelectDataTids.menu + getRandomID();\n\n private renderButton = (params: ButtonParams) => {\n const { value, disabled } = this.props;\n const width = this.getProps().width;\n const isInteractiveElement = !disabled;\n const Tag = isInteractiveElement ? 'button' : 'span';\n const rootProps = {\n className: cx(styles.root(this.theme), disabled && styles.disabled()),\n style: { width },\n onClick: disabled ? undefined : params.onClick,\n 'aria-expanded': isInteractiveElement ? params.opened : undefined,\n 'aria-controls': !disabled ? this.menuId : undefined,\n 'aria-label': isInteractiveElement\n ? `${this.locale.selectChosenAriaLabel} ${\n this.getProps().type === 'year' ? this.locale.selectYearAriaLabel : this.locale.selectMonthAriaLabel\n } ${this.getItem(value)}`\n : undefined,\n };\n\n return (\n <Tag {...rootProps}>\n <div data-tid={DateSelectDataTids.caption} className={styles.caption()}>\n {this.getItem(value)}\n </div>\n {isInteractiveElement && (\n <ArrowCollapseCVOpenIcon16Regular className={cx(globalClasses.arrow)} color=\"#ADADAD\" />\n )}\n </Tag>\n );\n };\n\n public close() {\n this.selectRef.current?.close();\n }\n\n private renderMain() {\n const { value, disabled, onValueChange } = this.getProps();\n const theme = {\n btnBorderRadiusSmall: this.theme.menuItemBorderRadius,\n };\n\n return (\n <Select\n use=\"text\"\n value={value}\n ref={this.selectRef}\n theme={theme}\n disabled={disabled}\n _renderButton={this.renderButton}\n menuPos=\"middle\"\n positions={DATE_SELECT_POSITIONS}\n renderValue={this.getItem}\n items={this.getItems()}\n menuOffset={parseInt(this.theme.menuPaddingX) + parseInt(this.theme.menuItemPaddingXSmall)}\n onValueChange={onValueChange}\n aria-label={`${this.locale.selectChosenAriaLabel} ${\n this.isYearType ? this.locale.selectYearAriaLabel : this.locale.selectMonthAriaLabel\n } ${this.getItem(value)}`}\n />\n );\n }\n\n private isOptionDisabled(option: number) {\n const { minValue, maxValue } = this.getProps();\n\n if (isNonNullable(maxValue) && isNonNullable(minValue)) {\n return option > maxValue || option < minValue;\n }\n\n if (isNonNullable(minValue)) {\n return option < minValue;\n }\n\n if (isNonNullable(maxValue)) {\n return option > maxValue;\n }\n }\n\n private getItems = () => {\n const { value, onValueChange } = this.getProps();\n const options = this.isYearType ? years : months;\n\n return options.map((option) => {\n const isSelected = option === value;\n const isOptionDisabled = this.isOptionDisabled(option);\n\n return (\n <MenuItem\n scrollIntoView={isSelected}\n disabled={isOptionDisabled}\n state={isSelected ? 'selected' : null}\n onClick={() => onValueChange(option)}\n aria-label={`Выбрать ${this.isYearType ? 'год' : 'месяц'} ${this.getItem(option)}`}\n data-tid={DateSelectDataTids.menuItem}\n data-prop-disabled={isOptionDisabled}\n key={option}\n >\n {this.getItem(option)}\n </MenuItem>\n );\n });\n };\n\n private getItem = (value: number) => {\n if (this.isYearType) {\n return value;\n }\n\n return this.locale.months?.[value];\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  import type { ReactUIFeatureFlags } from './ReactUIFeatureFlagsContext';
2
2
  export declare const getFullReactUIFlagsContext: (flags: ReactUIFeatureFlags) => {
3
3
  comboBoxAllowValueChangeInEditingState?: boolean | undefined;
4
+ stickyReduceLayoutEvents?: boolean | undefined;
4
5
  };
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  export var reactUIFeatureFlagsDefault = {
3
- comboBoxAllowValueChangeInEditingState: false
3
+ comboBoxAllowValueChangeInEditingState: false,
4
+ stickyReduceLayoutEvents: false
4
5
  };
5
6
  export var ReactUIFeatureFlagsContext = /*#__PURE__*/React.createContext(reactUIFeatureFlagsDefault);
6
7
  ReactUIFeatureFlagsContext.displayName = 'ReactUIFeatureFlagsContext';
@@ -1 +1 @@
1
- {"version":3,"names":["React","reactUIFeatureFlagsDefault","comboBoxAllowValueChangeInEditingState","ReactUIFeatureFlagsContext","createContext","displayName","__KONTUR_REACT_UI__"],"sources":["ReactUIFeatureFlagsContext.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface ReactUIFeatureFlags {\n comboBoxAllowValueChangeInEditingState?: boolean;\n}\n\nexport const reactUIFeatureFlagsDefault: ReactUIFeatureFlags = {\n comboBoxAllowValueChangeInEditingState: false,\n};\n\nexport const ReactUIFeatureFlagsContext = React.createContext<ReactUIFeatureFlags>(reactUIFeatureFlagsDefault);\n\nReactUIFeatureFlagsContext.displayName = 'ReactUIFeatureFlagsContext';\nReactUIFeatureFlagsContext.__KONTUR_REACT_UI__ = 'ReactUIFeatureFlagsContext';\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;;;;;;AAMzB,OAAO,IAAMC,0BAA+C,GAAG;EAC7DC,sCAAsC,EAAE;AAC1C,CAAC;;AAED,OAAO,IAAMC,0BAA0B,gBAAGH,KAAK,CAACI,aAAa,CAAsBH,0BAA0B,CAAC;;AAE9GE,0BAA0B,CAACE,WAAW,GAAG,4BAA4B;AACrEF,0BAA0B,CAACG,mBAAmB,GAAG,4BAA4B","ignoreList":[]}
1
+ {"version":3,"names":["React","reactUIFeatureFlagsDefault","comboBoxAllowValueChangeInEditingState","stickyReduceLayoutEvents","ReactUIFeatureFlagsContext","createContext","displayName","__KONTUR_REACT_UI__"],"sources":["ReactUIFeatureFlagsContext.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface ReactUIFeatureFlags {\n comboBoxAllowValueChangeInEditingState?: boolean;\n stickyReduceLayoutEvents?: boolean;\n}\n\nexport const reactUIFeatureFlagsDefault: ReactUIFeatureFlags = {\n comboBoxAllowValueChangeInEditingState: false,\n stickyReduceLayoutEvents: false,\n};\n\nexport const ReactUIFeatureFlagsContext = React.createContext<ReactUIFeatureFlags>(reactUIFeatureFlagsDefault);\n\nReactUIFeatureFlagsContext.displayName = 'ReactUIFeatureFlagsContext';\nReactUIFeatureFlagsContext.__KONTUR_REACT_UI__ = 'ReactUIFeatureFlagsContext';\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;;;;;;;AAOzB,OAAO,IAAMC,0BAA+C,GAAG;EAC7DC,sCAAsC,EAAE,KAAK;EAC7CC,wBAAwB,EAAE;AAC5B,CAAC;;AAED,OAAO,IAAMC,0BAA0B,gBAAGJ,KAAK,CAACK,aAAa,CAAsBJ,0BAA0B,CAAC;;AAE9GG,0BAA0B,CAACE,WAAW,GAAG,4BAA4B;AACrEF,0BAA0B,CAACG,mBAAmB,GAAG,4BAA4B","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  export interface ReactUIFeatureFlags {
3
3
  comboBoxAllowValueChangeInEditingState?: boolean;
4
+ stickyReduceLayoutEvents?: boolean;
4
5
  }
5
6
  export declare const reactUIFeatureFlagsDefault: ReactUIFeatureFlags;
6
7
  export declare const ReactUIFeatureFlagsContext: React.Context<ReactUIFeatureFlags>;
@@ -1,9 +1,38 @@
1
+ var MENU_POSITIONS = {
2
+ TOP: 'top',
3
+ MIDDLE: 'middle',
4
+ BOTTOM: 'bottom'
5
+ };
6
+ var MENU_ALIGNMENTS = {
7
+ LEFT: 'left',
8
+ RIGHT: 'right'
9
+ };
10
+ var POPUP_POSITIONS = {
11
+ TOP_LEFT: 'top left',
12
+ TOP_RIGHT: 'top right',
13
+ BOTTOM_LEFT: 'bottom left',
14
+ BOTTOM_RIGHT: 'bottom right',
15
+ MIDDLE_LEFT: 'middle left',
16
+ MIDDLE_RIGHT: 'middle right'
17
+ };
18
+
19
+ /**
20
+ * Генерирует массив позиций попапа на основе позиции и выравнивания меню
21
+ *
22
+ * @param menuPos - Позиция меню ('top', 'middle', 'bottom')
23
+ * @param menuAlign - Выравнивание меню ('left', 'right')
24
+ * @returns Массив позиций попапа в порядке приоритета
25
+ *
26
+ */
1
27
  export function getMenuPositions(menuPos, menuAlign) {
2
- if (menuAlign === undefined) {
3
- return menuPos === undefined ? ['bottom left', 'top left'] : [menuPos + " left"];
28
+ if (menuPos === undefined && menuAlign === undefined) {
29
+ return [POPUP_POSITIONS.BOTTOM_LEFT, POPUP_POSITIONS.TOP_LEFT, POPUP_POSITIONS.BOTTOM_RIGHT, POPUP_POSITIONS.TOP_RIGHT];
4
30
  }
5
- if (menuPos === undefined) {
6
- return ["bottom " + menuAlign, "top " + menuAlign];
31
+ if (menuPos !== undefined && menuAlign === undefined) {
32
+ return [menuPos + " " + MENU_ALIGNMENTS.LEFT, menuPos + " " + MENU_ALIGNMENTS.RIGHT];
33
+ }
34
+ if (menuPos === undefined && menuAlign !== undefined) {
35
+ return [MENU_POSITIONS.BOTTOM + " " + menuAlign, MENU_POSITIONS.TOP + " " + menuAlign];
7
36
  }
8
37
  return [menuPos + " " + menuAlign];
9
38
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getMenuPositions","menuPos","menuAlign","undefined"],"sources":["getMenuPositions.ts"],"sourcesContent":["import type { PopupPositionsType } from '../internal/Popup';\n\nexport function getMenuPositions(\n menuPos?: 'top' | 'middle' | 'bottom',\n menuAlign?: 'left' | 'right',\n): PopupPositionsType[] {\n if (menuAlign === undefined) {\n return menuPos === undefined ? ['bottom left', 'top left'] : [`${menuPos} left`];\n }\n\n if (menuPos === undefined) {\n return [`bottom ${menuAlign}`, `top ${menuAlign}`];\n }\n\n return [`${menuPos} ${menuAlign}`];\n}\n"],"mappings":";;AAEA,OAAO,SAASA,gBAAgBA;AAC9BC,OAAqC;AACrCC,SAA4B;AACN;EACtB,IAAIA,SAAS,KAAKC,SAAS,EAAE;IAC3B,OAAOF,OAAO,KAAKE,SAAS,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,CAAIF,OAAO,WAAQ;EAClF;;EAEA,IAAIA,OAAO,KAAKE,SAAS,EAAE;IACzB,OAAO,aAAWD,SAAS,WAAWA,SAAS,CAAG;EACpD;;EAEA,OAAO,CAAID,OAAO,SAAIC,SAAS,CAAG;AACpC","ignoreList":[]}
1
+ {"version":3,"names":["MENU_POSITIONS","TOP","MIDDLE","BOTTOM","MENU_ALIGNMENTS","LEFT","RIGHT","POPUP_POSITIONS","TOP_LEFT","TOP_RIGHT","BOTTOM_LEFT","BOTTOM_RIGHT","MIDDLE_LEFT","MIDDLE_RIGHT","getMenuPositions","menuPos","menuAlign","undefined"],"sources":["getMenuPositions.ts"],"sourcesContent":["import type { PopupPositionsType } from '../internal/Popup';\n\nconst MENU_POSITIONS = {\n TOP: 'top',\n MIDDLE: 'middle',\n BOTTOM: 'bottom',\n} as const;\n\nconst MENU_ALIGNMENTS = {\n LEFT: 'left',\n RIGHT: 'right',\n} as const;\n\nconst POPUP_POSITIONS = {\n TOP_LEFT: 'top left',\n TOP_RIGHT: 'top right',\n BOTTOM_LEFT: 'bottom left',\n BOTTOM_RIGHT: 'bottom right',\n MIDDLE_LEFT: 'middle left',\n MIDDLE_RIGHT: 'middle right',\n} as const;\n\ntype MenuPosition = (typeof MENU_POSITIONS)[keyof typeof MENU_POSITIONS];\ntype MenuAlignment = (typeof MENU_ALIGNMENTS)[keyof typeof MENU_ALIGNMENTS];\n\n/**\n * Генерирует массив позиций попапа на основе позиции и выравнивания меню\n *\n * @param menuPos - Позиция меню ('top', 'middle', 'bottom')\n * @param menuAlign - Выравнивание меню ('left', 'right')\n * @returns Массив позиций попапа в порядке приоритета\n *\n */\nexport function getMenuPositions(menuPos?: MenuPosition, menuAlign?: MenuAlignment): PopupPositionsType[] {\n if (menuPos === undefined && menuAlign === undefined) {\n return [\n POPUP_POSITIONS.BOTTOM_LEFT,\n POPUP_POSITIONS.TOP_LEFT,\n POPUP_POSITIONS.BOTTOM_RIGHT,\n POPUP_POSITIONS.TOP_RIGHT,\n ];\n }\n\n if (menuPos !== undefined && menuAlign === undefined) {\n return [`${menuPos} ${MENU_ALIGNMENTS.LEFT}`, `${menuPos} ${MENU_ALIGNMENTS.RIGHT}`];\n }\n\n if (menuPos === undefined && menuAlign !== undefined) {\n return [`${MENU_POSITIONS.BOTTOM} ${menuAlign}`, `${MENU_POSITIONS.TOP} ${menuAlign}`];\n }\n\n return [`${menuPos} ${menuAlign}`];\n}\n"],"mappings":";;AAEA,IAAMA,cAAc,GAAG;EACrBC,GAAG,EAAE,KAAK;EACVC,MAAM,EAAE,QAAQ;EAChBC,MAAM,EAAE;AACV,CAAU;;AAEV,IAAMC,eAAe,GAAG;EACtBC,IAAI,EAAE,MAAM;EACZC,KAAK,EAAE;AACT,CAAU;;AAEV,IAAMC,eAAe,GAAG;EACtBC,QAAQ,EAAE,UAAU;EACpBC,SAAS,EAAE,WAAW;EACtBC,WAAW,EAAE,aAAa;EAC1BC,YAAY,EAAE,cAAc;EAC5BC,WAAW,EAAE,aAAa;EAC1BC,YAAY,EAAE;AAChB,CAAU;;;;;AAKV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAACC,OAAsB,EAAEC,SAAyB,EAAwB;EACxG,IAAID,OAAO,KAAKE,SAAS,IAAID,SAAS,KAAKC,SAAS,EAAE;IACpD,OAAO;IACLV,eAAe,CAACG,WAAW;IAC3BH,eAAe,CAACC,QAAQ;IACxBD,eAAe,CAACI,YAAY;IAC5BJ,eAAe,CAACE,SAAS,CAC1B;;EACH;;EAEA,IAAIM,OAAO,KAAKE,SAAS,IAAID,SAAS,KAAKC,SAAS,EAAE;IACpD,OAAO,CAAIF,OAAO,SAAIX,eAAe,CAACC,IAAI,EAAOU,OAAO,SAAIX,eAAe,CAACE,KAAK,CAAG;EACtF;;EAEA,IAAIS,OAAO,KAAKE,SAAS,IAAID,SAAS,KAAKC,SAAS,EAAE;IACpD,OAAO,CAAIjB,cAAc,CAACG,MAAM,SAAIa,SAAS,EAAOhB,cAAc,CAACC,GAAG,SAAIe,SAAS,CAAG;EACxF;;EAEA,OAAO,CAAID,OAAO,SAAIC,SAAS,CAAG;AACpC","ignoreList":[]}
@@ -1,2 +1,22 @@
1
1
  import type { PopupPositionsType } from '../internal/Popup';
2
- export declare function getMenuPositions(menuPos?: 'top' | 'middle' | 'bottom', menuAlign?: 'left' | 'right'): PopupPositionsType[];
2
+ declare const MENU_POSITIONS: {
3
+ readonly TOP: "top";
4
+ readonly MIDDLE: "middle";
5
+ readonly BOTTOM: "bottom";
6
+ };
7
+ declare const MENU_ALIGNMENTS: {
8
+ readonly LEFT: "left";
9
+ readonly RIGHT: "right";
10
+ };
11
+ type MenuPosition = (typeof MENU_POSITIONS)[keyof typeof MENU_POSITIONS];
12
+ type MenuAlignment = (typeof MENU_ALIGNMENTS)[keyof typeof MENU_ALIGNMENTS];
13
+ /**
14
+ * Генерирует массив позиций попапа на основе позиции и выравнивания меню
15
+ *
16
+ * @param menuPos - Позиция меню ('top', 'middle', 'bottom')
17
+ * @param menuAlign - Выравнивание меню ('left', 'right')
18
+ * @returns Массив позиций попапа в порядке приоритета
19
+ *
20
+ */
21
+ export declare function getMenuPositions(menuPos?: MenuPosition, menuAlign?: MenuAlignment): PopupPositionsType[];
22
+ export {};
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "5.1.5",
3
+ "version": "5.1.7",
4
4
  "description": "UI Components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "index.js",
7
7
  "sideEffects": false,
8
- "homepage": "https://tech.skbkontur.ru/react-ui/5.1.5/",
8
+ "homepage": "https://tech.skbkontur.ru/kontur-ui/",
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "git@github.com:skbkontur/retail-ui.git"