@skbkontur/react-ui 4.2.1 → 4.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/cjs/components/Checkbox/Checkbox.md +48 -0
  3. package/cjs/components/Modal/ModalFooter.js +1 -1
  4. package/cjs/components/Modal/ModalFooter.js.map +1 -1
  5. package/cjs/components/Modal/ModalHeader.js +1 -1
  6. package/cjs/components/Modal/ModalHeader.js.map +1 -1
  7. package/cjs/components/Tooltip/Tooltip.d.ts +1 -3
  8. package/cjs/components/Tooltip/Tooltip.js +3 -11
  9. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  10. package/cjs/internal/InternalMenu/InternalMenu.styles.js +2 -1
  11. package/cjs/internal/InternalMenu/InternalMenu.styles.js.map +1 -1
  12. package/cjs/internal/RenderLayer/RenderLayer.d.ts +1 -0
  13. package/cjs/internal/RenderLayer/RenderLayer.js +8 -3
  14. package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
  15. package/components/Checkbox/Checkbox.md +48 -0
  16. package/components/Modal/ModalFooter/ModalFooter.js +2 -2
  17. package/components/Modal/ModalFooter/ModalFooter.js.map +1 -1
  18. package/components/Modal/ModalHeader/ModalHeader.js +2 -2
  19. package/components/Modal/ModalHeader/ModalHeader.js.map +1 -1
  20. package/components/Tooltip/Tooltip/Tooltip.js +7 -15
  21. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  22. package/components/Tooltip/Tooltip.d.ts +1 -3
  23. package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js +1 -1
  24. package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js.map +1 -1
  25. package/internal/RenderLayer/RenderLayer/RenderLayer.js +10 -7
  26. package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
  27. package/internal/RenderLayer/RenderLayer.d.ts +1 -0
  28. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,19 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.2.2](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.2.1...@skbkontur/react-ui@4.2.2) (2022-07-25)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **Modal:** fix paddings flickering ([#2949](https://github.com/skbkontur/retail-ui/issues/2949)) ([d81d152](https://github.com/skbkontur/retail-ui/commit/d81d152e409b3af8cccd9e0f9af9105c8336a2ec))
12
+ * **Tooltip:** correct focus&hover trigger behavior ([#2960](https://github.com/skbkontur/retail-ui/issues/2960)) ([9e3ddaa](https://github.com/skbkontur/retail-ui/commit/9e3ddaa6dab1fd4e2ba052be253c117982b74a2c)), closes [#2941](https://github.com/skbkontur/retail-ui/issues/2941)
13
+ * **TooltipMenu:** prevent double scroll ([#2950](https://github.com/skbkontur/retail-ui/issues/2950)) ([42b3f2f](https://github.com/skbkontur/retail-ui/commit/42b3f2f363141ccc1e3b5526cbeab1bc8b5073be))
14
+
15
+
16
+
17
+
18
+
6
19
  ## [4.2.1](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.2.0...@skbkontur/react-ui@4.2.1) (2022-07-18)
7
20
 
8
21
 
@@ -102,3 +102,51 @@ let checkboxInstance = React.useRef(null);
102
102
  </Gapped>
103
103
  </Gapped>
104
104
  ```
105
+
106
+ Пример использования неопределённого состояния чекбокса
107
+
108
+ ```jsx harmony
109
+ const [checkedSiblings, setCheckedSiblings] = React.useState([]);
110
+ const siblingCheckboxes = [1, 2];
111
+
112
+ let parentCheckboxRef;
113
+
114
+ React.useEffect(() => {
115
+ if (checkedSiblings.length === 0 || checkedSiblings.length === siblingCheckboxes.length) {
116
+ parentCheckboxRef.resetIndeterminate();
117
+ } else if (checkedSiblings.length !== 0) {
118
+ parentCheckboxRef.setIndeterminate();
119
+ }
120
+ }, [JSON.stringify(checkedSiblings)]);
121
+
122
+ <>
123
+ <Checkbox checked={checkedSiblings.length === siblingCheckboxes.length} ref={(el) => (parentCheckboxRef = el)}>
124
+ Родитель
125
+ </Checkbox>
126
+ <div style={{ display: 'flex', flexDirection: 'column', marginLeft: '20px' }}>
127
+ {siblingCheckboxes.map((id) => {
128
+ return (
129
+ <Checkbox
130
+ key={id}
131
+ checked={checkedSiblings.includes(id)}
132
+ onValueChange={() => {
133
+ const siblingIndex = checkedSiblings.indexOf(id);
134
+
135
+ if (siblingIndex === -1) {
136
+ setCheckedSiblings((prev) => [...prev, id]);
137
+ } else {
138
+ setCheckedSiblings((prev) =>
139
+ prev.filter((siblingId) => {
140
+ return siblingId !== id;
141
+ }),
142
+ );
143
+ }
144
+ }}
145
+ >
146
+ Ребёнок ({id})
147
+ </Checkbox>
148
+ );
149
+ })}
150
+ </div>
151
+ </>
152
+ ```
@@ -36,7 +36,7 @@ function ModalFooter(props) {
36
36
 
37
37
  var _props$sticky = props.sticky,sticky = _props$sticky === void 0 ? !layout.isMobile : _props$sticky,panel = props.panel,children = props.children;
38
38
 
39
- (0, _react.useEffect)(function () {
39
+ (0, _react.useLayoutEffect)(function () {
40
40
  modal.setHasFooter == null ? void 0 : modal.setHasFooter();
41
41
  modal.setHasPanel == null ? void 0 : modal.setHasPanel(panel);
42
42
 
@@ -1 +1 @@
1
- {"version":3,"sources":["ModalFooter.tsx"],"names":["ModalFooterDataTids","root","ModalFooter","props","theme","ThemeContext","modal","ModalContext","layout","sticky","isMobile","panel","children","setHasFooter","setHasPanel","renderContent","fixed","styles","footer","fixedFooter","Boolean","fixedPanel","mobileFooter","footerWrapper","horizontalScroll","__KONTUR_REACT_UI__","__MODAL_FOOTER__"],"mappings":"8GAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8C;;;;;;;;;;;AAWO,IAAMA,mBAAmB,GAAG;AACjCC,EAAAA,IAAI,EAAE,mBAD2B,EAA5B;;;AAIP;AACA;AACA;AACA;AACA,G;AACA,SAASC,WAAT,CAAqBC,KAArB,EAA8C;AAC5C,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,MAAM,GAAG,4CAAf;;AAEA,sBAAuDL,KAAvD,CAAQM,MAAR,CAAQA,MAAR,8BAAiB,CAACD,MAAM,CAACE,QAAzB,iBAAmCC,KAAnC,GAAuDR,KAAvD,CAAmCQ,KAAnC,CAA0CC,QAA1C,GAAuDT,KAAvD,CAA0CS,QAA1C;;AAEA,wBAAU,YAAM;AACdN,IAAAA,KAAK,CAACO,YAAN,oBAAAP,KAAK,CAACO,YAAN;AACAP,IAAAA,KAAK,CAACQ,WAAN,oBAAAR,KAAK,CAACQ,WAAN,CAAoBH,KAApB;;AAEA,WAAO,YAAM;AACXL,MAAAA,KAAK,CAACO,YAAN,oBAAAP,KAAK,CAACO,YAAN,CAAqB,KAArB;AACAP,MAAAA,KAAK,CAACQ,WAAN,oBAAAR,KAAK,CAACQ,WAAN,CAAoB,KAApB;AACD,KAHD;AAID,GARD,EAQG,CAACH,KAAD,CARH;;AAUA,MAAMI,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAmB,aAAlBA,KAAkB,cAAlBA,KAAkB,GAAV,KAAU;AACvC;AACE;AACE,oBAAUhB,mBAAmB,CAACC,IADhC;AAEE,QAAA,SAAS,EAAE;AACRgB,sBAAOC,MAAP,CAAcd,KAAd,CADQ,IACe,IADf;AAERa,sBAAOE,WAAP,CAAmBf,KAAnB,CAFQ,IAEoBY,KAFpB;AAGRC,sBAAON,KAAP,CAAaP,KAAb,CAHQ,IAGcgB,OAAO,CAACT,KAAD,CAHrB;AAIRM,sBAAOI,UAAP,CAAkBjB,KAAlB,CAJQ,IAImBY,KAAK,IAAII,OAAO,CAACT,KAAD,CAJnC;AAKRM,sBAAOK,YAAP,CAAoBlB,KAApB,CALQ,IAKqBI,MAAM,CAACE,QAL5B,OAFb;;;AAUGE,MAAAA,QAVH,CADF;;;AAcD,GAfD;;AAiBA;AACE,iCAAC,4BAAD,EAAmBT,KAAnB;AACE,iCAAC,cAAD,IAAQ,QAAQ,EAAE,aAAlB,EAAiC,SAAS,EAAEc,cAAOM,aAAP,EAA5C;AACGd,IAAAA,MAAM;AACL,iCAAC,cAAD,IAAQ,IAAI,EAAC,QAAb,EAAsB,MAAM,EAAEH,KAAK,CAACkB,gBAAN,GAAyB,qCAAzB,GAA4C,CAA1E;AACGT,IAAAA,aADH,CADK;;;AAKLA,IAAAA,aAAa,EANjB,CADF,CADF;;;;;AAaD;;AAEDb,WAAW,CAACuB,mBAAZ,GAAkC,aAAlC;AACAvB,WAAW,CAACwB,gBAAZ,GAA+B,IAA/B","sourcesContent":["import React, { ReactNode, useContext, useEffect } from 'react';\n\nimport { getScrollWidth } from '../../lib/dom/getScrollWidth';\nimport { Sticky } from '../Sticky';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { useResponsiveLayout } from '../ResponsiveLayout';\n\nimport { styles } from './Modal.styles';\nimport { ModalContext } from './ModalContext';\n\nexport interface ModalFooterProps extends CommonProps {\n /**\n * Включает серый цвет в футере\n */\n panel?: boolean;\n sticky?: boolean;\n children?: ReactNode;\n}\n\nexport const ModalFooterDataTids = {\n root: 'ModalFooter__root',\n} as const;\n\n/**\n * Футер модального окна.\n *\n * @visibleName Modal.Footer\n */\nfunction ModalFooter(props: ModalFooterProps) {\n const theme = useContext(ThemeContext);\n const modal = useContext(ModalContext);\n const layout = useResponsiveLayout();\n\n const { sticky = !layout.isMobile, panel, children } = props;\n\n useEffect(() => {\n modal.setHasFooter?.();\n modal.setHasPanel?.(panel);\n\n return () => {\n modal.setHasFooter?.(false);\n modal.setHasPanel?.(false);\n };\n }, [panel]);\n\n const renderContent = (fixed = false) => {\n return (\n <div\n data-tid={ModalFooterDataTids.root}\n className={cx({\n [styles.footer(theme)]: true,\n [styles.fixedFooter(theme)]: fixed,\n [styles.panel(theme)]: Boolean(panel),\n [styles.fixedPanel(theme)]: fixed && Boolean(panel),\n [styles.mobileFooter(theme)]: layout.isMobile,\n })}\n >\n {children}\n </div>\n );\n };\n\n return (\n <CommonWrapper {...props}>\n <ZIndex priority={'ModalFooter'} className={styles.footerWrapper()}>\n {sticky ? (\n <Sticky side=\"bottom\" offset={modal.horizontalScroll ? getScrollWidth() : 0}>\n {renderContent}\n </Sticky>\n ) : (\n renderContent()\n )}\n </ZIndex>\n </CommonWrapper>\n );\n}\n\nModalFooter.__KONTUR_REACT_UI__ = 'ModalFooter';\nModalFooter.__MODAL_FOOTER__ = true;\n\nexport { ModalFooter };\n"]}
1
+ {"version":3,"sources":["ModalFooter.tsx"],"names":["ModalFooterDataTids","root","ModalFooter","props","theme","ThemeContext","modal","ModalContext","layout","sticky","isMobile","panel","children","setHasFooter","setHasPanel","renderContent","fixed","styles","footer","fixedFooter","Boolean","fixedPanel","mobileFooter","footerWrapper","horizontalScroll","__KONTUR_REACT_UI__","__MODAL_FOOTER__"],"mappings":"8GAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8C;;;;;;;;;;;AAWO,IAAMA,mBAAmB,GAAG;AACjCC,EAAAA,IAAI,EAAE,mBAD2B,EAA5B;;;AAIP;AACA;AACA;AACA;AACA,G;AACA,SAASC,WAAT,CAAqBC,KAArB,EAA8C;AAC5C,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,MAAM,GAAG,4CAAf;;AAEA,sBAAuDL,KAAvD,CAAQM,MAAR,CAAQA,MAAR,8BAAiB,CAACD,MAAM,CAACE,QAAzB,iBAAmCC,KAAnC,GAAuDR,KAAvD,CAAmCQ,KAAnC,CAA0CC,QAA1C,GAAuDT,KAAvD,CAA0CS,QAA1C;;AAEA,8BAAgB,YAAM;AACpBN,IAAAA,KAAK,CAACO,YAAN,oBAAAP,KAAK,CAACO,YAAN;AACAP,IAAAA,KAAK,CAACQ,WAAN,oBAAAR,KAAK,CAACQ,WAAN,CAAoBH,KAApB;;AAEA,WAAO,YAAM;AACXL,MAAAA,KAAK,CAACO,YAAN,oBAAAP,KAAK,CAACO,YAAN,CAAqB,KAArB;AACAP,MAAAA,KAAK,CAACQ,WAAN,oBAAAR,KAAK,CAACQ,WAAN,CAAoB,KAApB;AACD,KAHD;AAID,GARD,EAQG,CAACH,KAAD,CARH;;AAUA,MAAMI,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAmB,aAAlBA,KAAkB,cAAlBA,KAAkB,GAAV,KAAU;AACvC;AACE;AACE,oBAAUhB,mBAAmB,CAACC,IADhC;AAEE,QAAA,SAAS,EAAE;AACRgB,sBAAOC,MAAP,CAAcd,KAAd,CADQ,IACe,IADf;AAERa,sBAAOE,WAAP,CAAmBf,KAAnB,CAFQ,IAEoBY,KAFpB;AAGRC,sBAAON,KAAP,CAAaP,KAAb,CAHQ,IAGcgB,OAAO,CAACT,KAAD,CAHrB;AAIRM,sBAAOI,UAAP,CAAkBjB,KAAlB,CAJQ,IAImBY,KAAK,IAAII,OAAO,CAACT,KAAD,CAJnC;AAKRM,sBAAOK,YAAP,CAAoBlB,KAApB,CALQ,IAKqBI,MAAM,CAACE,QAL5B,OAFb;;;AAUGE,MAAAA,QAVH,CADF;;;AAcD,GAfD;;AAiBA;AACE,iCAAC,4BAAD,EAAmBT,KAAnB;AACE,iCAAC,cAAD,IAAQ,QAAQ,EAAE,aAAlB,EAAiC,SAAS,EAAEc,cAAOM,aAAP,EAA5C;AACGd,IAAAA,MAAM;AACL,iCAAC,cAAD,IAAQ,IAAI,EAAC,QAAb,EAAsB,MAAM,EAAEH,KAAK,CAACkB,gBAAN,GAAyB,qCAAzB,GAA4C,CAA1E;AACGT,IAAAA,aADH,CADK;;;AAKLA,IAAAA,aAAa,EANjB,CADF,CADF;;;;;AAaD;;AAEDb,WAAW,CAACuB,mBAAZ,GAAkC,aAAlC;AACAvB,WAAW,CAACwB,gBAAZ,GAA+B,IAA/B","sourcesContent":["import React, { ReactNode, useContext, useLayoutEffect } from 'react';\n\nimport { getScrollWidth } from '../../lib/dom/getScrollWidth';\nimport { Sticky } from '../Sticky';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { useResponsiveLayout } from '../ResponsiveLayout';\n\nimport { styles } from './Modal.styles';\nimport { ModalContext } from './ModalContext';\n\nexport interface ModalFooterProps extends CommonProps {\n /**\n * Включает серый цвет в футере\n */\n panel?: boolean;\n sticky?: boolean;\n children?: ReactNode;\n}\n\nexport const ModalFooterDataTids = {\n root: 'ModalFooter__root',\n} as const;\n\n/**\n * Футер модального окна.\n *\n * @visibleName Modal.Footer\n */\nfunction ModalFooter(props: ModalFooterProps) {\n const theme = useContext(ThemeContext);\n const modal = useContext(ModalContext);\n const layout = useResponsiveLayout();\n\n const { sticky = !layout.isMobile, panel, children } = props;\n\n useLayoutEffect(() => {\n modal.setHasFooter?.();\n modal.setHasPanel?.(panel);\n\n return () => {\n modal.setHasFooter?.(false);\n modal.setHasPanel?.(false);\n };\n }, [panel]);\n\n const renderContent = (fixed = false) => {\n return (\n <div\n data-tid={ModalFooterDataTids.root}\n className={cx({\n [styles.footer(theme)]: true,\n [styles.fixedFooter(theme)]: fixed,\n [styles.panel(theme)]: Boolean(panel),\n [styles.fixedPanel(theme)]: fixed && Boolean(panel),\n [styles.mobileFooter(theme)]: layout.isMobile,\n })}\n >\n {children}\n </div>\n );\n };\n\n return (\n <CommonWrapper {...props}>\n <ZIndex priority={'ModalFooter'} className={styles.footerWrapper()}>\n {sticky ? (\n <Sticky side=\"bottom\" offset={modal.horizontalScroll ? getScrollWidth() : 0}>\n {renderContent}\n </Sticky>\n ) : (\n renderContent()\n )}\n </ZIndex>\n </CommonWrapper>\n );\n}\n\nModalFooter.__KONTUR_REACT_UI__ = 'ModalFooter';\nModalFooter.__MODAL_FOOTER__ = true;\n\nexport { ModalFooter };\n"]}
@@ -32,7 +32,7 @@ function ModalHeader(props) {
32
32
 
33
33
  var _props$sticky = props.sticky,sticky = _props$sticky === void 0 ? !layout.isMobile : _props$sticky,children = props.children;
34
34
 
35
- (0, _react.useEffect)(function () {
35
+ (0, _react.useLayoutEffect)(function () {
36
36
  modal.setHasHeader == null ? void 0 : modal.setHasHeader();
37
37
 
38
38
  return function () {return modal.setHasHeader == null ? void 0 : modal.setHasHeader(false);};
@@ -1 +1 @@
1
- {"version":3,"sources":["ModalHeader.tsx"],"names":["ModalHeaderDataTids","root","ModalHeader","props","theme","ThemeContext","modal","ModalContext","layout","sticky","isMobile","children","setHasHeader","renderContent","fixed","styles","header","mobileHeader","headerAddPadding","Boolean","additionalPadding","fixedHeader","mobileFixedHeader","headerWithClose","close","mobileHeaderWithClose","requestClose","disableClose","headerWrapper","__KONTUR_REACT_UI__","__MODAL_HEADER__"],"mappings":"8GAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8C;;;;;;;AAOO,IAAMA,mBAAmB,GAAG;AACjCC,EAAAA,IAAI,EAAE,mBAD2B,EAA5B;;;AAIP;AACA;AACA;AACA;AACA,G;AACA,SAASC,WAAT,CAAqBC,KAArB,EAA8C;AAC5C,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,MAAM,GAAG,4CAAf;;AAEA,sBAAgDL,KAAhD,CAAQM,MAAR,CAAQA,MAAR,8BAAiB,CAACD,MAAM,CAACE,QAAzB,iBAAmCC,QAAnC,GAAgDR,KAAhD,CAAmCQ,QAAnC;;AAEA,wBAAU,YAAM;AACdL,IAAAA,KAAK,CAACM,YAAN,oBAAAN,KAAK,CAACM,YAAN;;AAEA,WAAO,oBAAMN,KAAK,CAACM,YAAZ,oBAAMN,KAAK,CAACM,YAAN,CAAqB,KAArB,CAAN,EAAP;AACD,GAJD,EAIG,EAJH;;AAMA,MAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAmB,aAAlBA,KAAkB,cAAlBA,KAAkB,GAAV,KAAU;AACvC;AACE;AACE,oBAAUd,mBAAmB,CAACC,IADhC;AAEE,QAAA,SAAS,EAAE;AACRc,sBAAOC,MAAP,CAAcZ,KAAd,CADQ,IACe,IADf;AAERW,sBAAOE,YAAP,CAAoBb,KAApB,CAFQ,IAEqBI,MAAM,CAACE,QAF5B;AAGRK,sBAAOG,gBAAP,EAHQ,IAGoBC,OAAO,CAACb,KAAK,CAACc,iBAAP,CAH3B;AAIRL,sBAAOM,WAAP,CAAmBjB,KAAnB,CAJQ,IAIoBU,KAJpB;AAKRC,sBAAOO,iBAAP,CAAyBlB,KAAzB,CALQ,IAK0BU,KAAK,IAAIN,MAAM,CAACE,QAL1C;AAMRK,sBAAOQ,eAAP,CAAuBnB,KAAvB,CANQ,IAMwBe,OAAO,CAACb,KAAK,CAACkB,KAAP,CAN/B;AAORT,sBAAOU,qBAAP,CAA6BrB,KAA7B,CAPQ,IAO8BI,MAAM,CAACE,QAPrC,OAFb;;;AAYGJ,MAAAA,KAAK,CAACkB,KAAN,iBAAe,6BAAC,sBAAD,IAAY,YAAY,EAAElB,KAAK,CAACkB,KAAN,CAAYE,YAAtC,EAAoD,YAAY,EAAEpB,KAAK,CAACkB,KAAN,CAAYG,YAA9E,GAZlB;AAaGhB,MAAAA,QAbH,CADF;;;AAiBD,GAlBD;;AAoBA;AACE,iCAAC,4BAAD,EAAmBR,KAAnB;AACE,iCAAC,cAAD,IAAQ,QAAQ,EAAE,aAAlB,EAAiC,SAAS,EAAEY,cAAOa,aAAP,EAA5C;AACGnB,IAAAA,MAAM,gBAAG,6BAAC,cAAD,IAAQ,IAAI,EAAC,KAAb,IAAoBI,aAApB,CAAH,GAAiDA,aAAa,EADvE,CADF,CADF;;;;AAOD;;AAEDX,WAAW,CAAC2B,mBAAZ,GAAkC,aAAlC;AACA3B,WAAW,CAAC4B,gBAAZ,GAA+B,IAA/B","sourcesContent":["import React, { ReactNode, useContext, useEffect } from 'react';\n\nimport { Sticky } from '../Sticky';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { useResponsiveLayout } from '../ResponsiveLayout';\n\nimport { styles } from './Modal.styles';\nimport { ModalClose } from './ModalClose';\nimport { ModalContext } from './ModalContext';\n\nexport interface ModalHeaderProps extends CommonProps {\n sticky?: boolean;\n children?: ReactNode;\n}\n\nexport const ModalHeaderDataTids = {\n root: 'ModalHeader__root',\n} as const;\n\n/**\n * Шапка модального окна\n *\n * @visibleName Modal.Header\n */\nfunction ModalHeader(props: ModalHeaderProps) {\n const theme = useContext(ThemeContext);\n const modal = useContext(ModalContext);\n const layout = useResponsiveLayout();\n\n const { sticky = !layout.isMobile, children } = props;\n\n useEffect(() => {\n modal.setHasHeader?.();\n\n return () => modal.setHasHeader?.(false);\n }, []);\n\n const renderContent = (fixed = false) => {\n return (\n <div\n data-tid={ModalHeaderDataTids.root}\n className={cx({\n [styles.header(theme)]: true,\n [styles.mobileHeader(theme)]: layout.isMobile,\n [styles.headerAddPadding()]: Boolean(modal.additionalPadding),\n [styles.fixedHeader(theme)]: fixed,\n [styles.mobileFixedHeader(theme)]: fixed && layout.isMobile,\n [styles.headerWithClose(theme)]: Boolean(modal.close),\n [styles.mobileHeaderWithClose(theme)]: layout.isMobile,\n })}\n >\n {modal.close && <ModalClose requestClose={modal.close.requestClose} disableClose={modal.close.disableClose} />}\n {children}\n </div>\n );\n };\n\n return (\n <CommonWrapper {...props}>\n <ZIndex priority={'ModalHeader'} className={styles.headerWrapper()}>\n {sticky ? <Sticky side=\"top\">{renderContent}</Sticky> : renderContent()}\n </ZIndex>\n </CommonWrapper>\n );\n}\n\nModalHeader.__KONTUR_REACT_UI__ = 'ModalHeader';\nModalHeader.__MODAL_HEADER__ = true;\n\nexport { ModalHeader };\n"]}
1
+ {"version":3,"sources":["ModalHeader.tsx"],"names":["ModalHeaderDataTids","root","ModalHeader","props","theme","ThemeContext","modal","ModalContext","layout","sticky","isMobile","children","setHasHeader","renderContent","fixed","styles","header","mobileHeader","headerAddPadding","Boolean","additionalPadding","fixedHeader","mobileFixedHeader","headerWithClose","close","mobileHeaderWithClose","requestClose","disableClose","headerWrapper","__KONTUR_REACT_UI__","__MODAL_HEADER__"],"mappings":"8GAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8C;;;;;;;AAOO,IAAMA,mBAAmB,GAAG;AACjCC,EAAAA,IAAI,EAAE,mBAD2B,EAA5B;;;AAIP;AACA;AACA;AACA;AACA,G;AACA,SAASC,WAAT,CAAqBC,KAArB,EAA8C;AAC5C,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,MAAM,GAAG,4CAAf;;AAEA,sBAAgDL,KAAhD,CAAQM,MAAR,CAAQA,MAAR,8BAAiB,CAACD,MAAM,CAACE,QAAzB,iBAAmCC,QAAnC,GAAgDR,KAAhD,CAAmCQ,QAAnC;;AAEA,8BAAgB,YAAM;AACpBL,IAAAA,KAAK,CAACM,YAAN,oBAAAN,KAAK,CAACM,YAAN;;AAEA,WAAO,oBAAMN,KAAK,CAACM,YAAZ,oBAAMN,KAAK,CAACM,YAAN,CAAqB,KAArB,CAAN,EAAP;AACD,GAJD,EAIG,EAJH;;AAMA,MAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAmB,aAAlBA,KAAkB,cAAlBA,KAAkB,GAAV,KAAU;AACvC;AACE;AACE,oBAAUd,mBAAmB,CAACC,IADhC;AAEE,QAAA,SAAS,EAAE;AACRc,sBAAOC,MAAP,CAAcZ,KAAd,CADQ,IACe,IADf;AAERW,sBAAOE,YAAP,CAAoBb,KAApB,CAFQ,IAEqBI,MAAM,CAACE,QAF5B;AAGRK,sBAAOG,gBAAP,EAHQ,IAGoBC,OAAO,CAACb,KAAK,CAACc,iBAAP,CAH3B;AAIRL,sBAAOM,WAAP,CAAmBjB,KAAnB,CAJQ,IAIoBU,KAJpB;AAKRC,sBAAOO,iBAAP,CAAyBlB,KAAzB,CALQ,IAK0BU,KAAK,IAAIN,MAAM,CAACE,QAL1C;AAMRK,sBAAOQ,eAAP,CAAuBnB,KAAvB,CANQ,IAMwBe,OAAO,CAACb,KAAK,CAACkB,KAAP,CAN/B;AAORT,sBAAOU,qBAAP,CAA6BrB,KAA7B,CAPQ,IAO8BI,MAAM,CAACE,QAPrC,OAFb;;;AAYGJ,MAAAA,KAAK,CAACkB,KAAN,iBAAe,6BAAC,sBAAD,IAAY,YAAY,EAAElB,KAAK,CAACkB,KAAN,CAAYE,YAAtC,EAAoD,YAAY,EAAEpB,KAAK,CAACkB,KAAN,CAAYG,YAA9E,GAZlB;AAaGhB,MAAAA,QAbH,CADF;;;AAiBD,GAlBD;;AAoBA;AACE,iCAAC,4BAAD,EAAmBR,KAAnB;AACE,iCAAC,cAAD,IAAQ,QAAQ,EAAE,aAAlB,EAAiC,SAAS,EAAEY,cAAOa,aAAP,EAA5C;AACGnB,IAAAA,MAAM,gBAAG,6BAAC,cAAD,IAAQ,IAAI,EAAC,KAAb,IAAoBI,aAApB,CAAH,GAAiDA,aAAa,EADvE,CADF,CADF;;;;AAOD;;AAEDX,WAAW,CAAC2B,mBAAZ,GAAkC,aAAlC;AACA3B,WAAW,CAAC4B,gBAAZ,GAA+B,IAA/B","sourcesContent":["import React, { ReactNode, useContext, useLayoutEffect } from 'react';\n\nimport { Sticky } from '../Sticky';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { useResponsiveLayout } from '../ResponsiveLayout';\n\nimport { styles } from './Modal.styles';\nimport { ModalClose } from './ModalClose';\nimport { ModalContext } from './ModalContext';\n\nexport interface ModalHeaderProps extends CommonProps {\n sticky?: boolean;\n children?: ReactNode;\n}\n\nexport const ModalHeaderDataTids = {\n root: 'ModalHeader__root',\n} as const;\n\n/**\n * Шапка модального окна\n *\n * @visibleName Modal.Header\n */\nfunction ModalHeader(props: ModalHeaderProps) {\n const theme = useContext(ThemeContext);\n const modal = useContext(ModalContext);\n const layout = useResponsiveLayout();\n\n const { sticky = !layout.isMobile, children } = props;\n\n useLayoutEffect(() => {\n modal.setHasHeader?.();\n\n return () => modal.setHasHeader?.(false);\n }, []);\n\n const renderContent = (fixed = false) => {\n return (\n <div\n data-tid={ModalHeaderDataTids.root}\n className={cx({\n [styles.header(theme)]: true,\n [styles.mobileHeader(theme)]: layout.isMobile,\n [styles.headerAddPadding()]: Boolean(modal.additionalPadding),\n [styles.fixedHeader(theme)]: fixed,\n [styles.mobileFixedHeader(theme)]: fixed && layout.isMobile,\n [styles.headerWithClose(theme)]: Boolean(modal.close),\n [styles.mobileHeaderWithClose(theme)]: layout.isMobile,\n })}\n >\n {modal.close && <ModalClose requestClose={modal.close.requestClose} disableClose={modal.close.disableClose} />}\n {children}\n </div>\n );\n };\n\n return (\n <CommonWrapper {...props}>\n <ZIndex priority={'ModalHeader'} className={styles.headerWrapper()}>\n {sticky ? <Sticky side=\"top\">{renderContent}</Sticky> : renderContent()}\n </ZIndex>\n </CommonWrapper>\n );\n}\n\nModalHeader.__KONTUR_REACT_UI__ = 'ModalHeader';\nModalHeader.__MODAL_HEADER__ = true;\n\nexport { ModalHeader };\n"]}
@@ -160,10 +160,8 @@ export declare class Tooltip extends React.PureComponent<TooltipProps, TooltipSt
160
160
  private handleMouseEnter;
161
161
  private handleMouseLeave;
162
162
  private handleClick;
163
- private handleClickOutside;
163
+ private handleClickOutsideAnchor;
164
164
  private isClickOutsideContent;
165
- private isClickOutsideAnchor;
166
- private isClickOutside;
167
165
  private handleFocus;
168
166
  private handleBlur;
169
167
  private handleCloseButtonClick;
@@ -512,8 +512,8 @@ Tooltip = (0, _rootNode.rootNode)(_class = (0, _decorator.responsiveLayout)(_cla
512
512
  _this.open();
513
513
  };_this.
514
514
 
515
- handleClickOutside = function (event) {
516
- _this.clickedOutside = _this.isClickOutsideContent(event) && _this.isClickOutsideAnchor(event);
515
+ handleClickOutsideAnchor = function (event) {
516
+ _this.clickedOutside = _this.isClickOutsideContent(event);
517
517
  if (_this.clickedOutside) {
518
518
  if (_this.props.onCloseRequest) {
519
519
  _this.props.onCloseRequest();
@@ -530,14 +530,6 @@ Tooltip = (0, _rootNode.rootNode)(_class = (0, _decorator.responsiveLayout)(_cla
530
530
 
531
531
 
532
532
 
533
-
534
-
535
-
536
-
537
-
538
-
539
-
540
-
541
533
  handleFocus = function () {
542
534
  _this.setState({ focused: true });
543
535
  _this.open();
@@ -580,4 +572,4 @@ Tooltip = (0, _rootNode.rootNode)(_class = (0, _decorator.responsiveLayout)(_cla
580
572
  * Программно закрывает тултип.
581
573
  * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>
582
574
  * @public
583
- */;_proto.hide = function hide() {if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {(0, _warning.default)(true, "Function 'hide' is not supported with trigger specified '" + this.props.trigger + "'");return;}this.close();};_proto.renderMain = function renderMain() {var props = this.props;var content = this.renderContent();var _this$getProps = this.getProps(),popupProps = _this$getProps.popupProps,_this$getProps$layerP = _this$getProps.layerProps,layerProps = _this$getProps$layerP === void 0 ? { active: false } : _this$getProps$layerP;var anchorElement = props.children || props.anchorElement;var popup = this.renderPopup(anchorElement, popupProps, content);if (this.isMobileLayout) {return popup;}return /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, (0, _extends2.default)({}, layerProps, { getAnchorElement: this.getAnchorElement }), popup);};_proto.renderPopup = function renderPopup(anchorElement, popupProps, content) {return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_Popup.Popup, (0, _extends2.default)({ "data-tid": TooltipDataTids.root, anchorElement: anchorElement, hasPin: true, hasShadow: true, maxWidth: "none", opened: this.state.opened, disableAnimations: this.props.disableAnimations, positions: this.getPositions(), ignoreHover: this.props.trigger === 'hoverAnchor', onOpen: this.props.onOpen, onClose: this.props.onClose, mobileOnCloseRequest: this.mobileCloseHandler, tryPreserveFirstRenderedPosition: true, ref: this.popupRef }, popupProps), content));};_proto.getPositions = function getPositions() {if (!this.positions) {var allowedPositions = this.props.allowedPositions;var index = allowedPositions.indexOf(this.props.pos);if (index === -1) {throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));}this.positions = [].concat(allowedPositions.slice(index), allowedPositions.slice(0, index));}return this.positions;};_proto.getProps = function getProps() {var props = this.props;var useWrapper = !!props.children && props.useWrapper;switch (this.props.trigger) {case 'opened':return { layerProps: { active: true, onClickOutside: this.handleClickOutside }, popupProps: { opened: true, useWrapper: useWrapper } };case 'closed':return { popupProps: { opened: false, useWrapper: useWrapper } };case 'hoverAnchor':case 'hover':return { popupProps: { onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper } };case 'manual':return { popupProps: { useWrapper: useWrapper } };case 'click':return { layerProps: { active: this.state.opened, onClickOutside: this.handleClickOutside }, popupProps: { onClick: this.handleClick, useWrapper: useWrapper } };case 'focus':return { popupProps: { onFocus: this.handleFocus, onBlur: this.handleBlur, useWrapper: useWrapper } };case 'hover&focus':return { layerProps: { active: this.state.opened, onClickOutside: this.handleClickOutside }, popupProps: { onFocus: this.handleFocus, onBlur: this.handleBlur, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper } };default:throw new Error('Unknown trigger specified: ' + props.trigger);}};_proto.clearHoverTimeout = function clearHoverTimeout() {if (this.hoverTimeout) {clearTimeout(this.hoverTimeout);this.hoverTimeout = null;}};_proto.isClickOutsideContent = function isClickOutsideContent(event) {return this.isClickOutside(event, this.contentElement);};_proto.isClickOutsideAnchor = function isClickOutsideAnchor(event) {return this.isClickOutside(event, this.getAnchorElement());};_proto.isClickOutside = function isClickOutside(event, target) {if (target && event.target instanceof Element) {return !(0, _listenFocusOutside.containsTargetOrRenderContainer)(event.target)(target);}return true;};return Tooltip;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'Tooltip', _class2.propTypes = { children: function children(props, propName, componentName) {var children = props[propName];(0, _warning.default)(children || props.anchorElement, "[" + componentName + "]: you must provide either 'children' or 'anchorElement' prop for " + componentName + " to work properly");(0, _warning.default)(!(Array.isArray(children) && props.useWrapper === false), "[" + componentName + "]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly");} }, _class2.defaultProps = { pos: _Popup.DefaultPosition, trigger: 'hover', allowedPositions: Positions, disableAnimations: _currentEnvironment.isTestEnv, useWrapper: false, closeOnChildrenMouseLeave: false }, _class2.delay = 100, _class2.triggersWithoutCloseButton = ['hover', 'hoverAnchor', 'focus', 'hover&focus'], _temp)) || _class) || _class;exports.Tooltip = Tooltip;
575
+ */;_proto.hide = function hide() {if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {(0, _warning.default)(true, "Function 'hide' is not supported with trigger specified '" + this.props.trigger + "'");return;}this.close();};_proto.renderMain = function renderMain() {var props = this.props;var content = this.renderContent();var _this$getProps = this.getProps(),popupProps = _this$getProps.popupProps,_this$getProps$layerP = _this$getProps.layerProps,layerProps = _this$getProps$layerP === void 0 ? { active: false } : _this$getProps$layerP;var anchorElement = props.children || props.anchorElement;var popup = this.renderPopup(anchorElement, popupProps, content);if (this.isMobileLayout) {return popup;}return /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, (0, _extends2.default)({}, layerProps, { getAnchorElement: this.getAnchorElement }), popup);};_proto.renderPopup = function renderPopup(anchorElement, popupProps, content) {return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_Popup.Popup, (0, _extends2.default)({ "data-tid": TooltipDataTids.root, anchorElement: anchorElement, hasPin: true, hasShadow: true, maxWidth: "none", opened: this.state.opened, disableAnimations: this.props.disableAnimations, positions: this.getPositions(), ignoreHover: this.props.trigger === 'hoverAnchor', onOpen: this.props.onOpen, onClose: this.props.onClose, mobileOnCloseRequest: this.mobileCloseHandler, tryPreserveFirstRenderedPosition: true, ref: this.popupRef }, popupProps), content));};_proto.getPositions = function getPositions() {if (!this.positions) {var allowedPositions = this.props.allowedPositions;var index = allowedPositions.indexOf(this.props.pos);if (index === -1) {throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));}this.positions = [].concat(allowedPositions.slice(index), allowedPositions.slice(0, index));}return this.positions;};_proto.getProps = function getProps() {var props = this.props;var useWrapper = !!props.children && props.useWrapper;switch (this.props.trigger) {case 'opened':return { layerProps: { active: true, onClickOutside: this.handleClickOutsideAnchor }, popupProps: { opened: true, useWrapper: useWrapper } };case 'closed':return { popupProps: { opened: false, useWrapper: useWrapper } };case 'hoverAnchor':case 'hover':return { popupProps: { onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper } };case 'manual':return { popupProps: { useWrapper: useWrapper } };case 'click':return { layerProps: { active: this.state.opened, onClickOutside: this.handleClickOutsideAnchor }, popupProps: { onClick: this.handleClick, useWrapper: useWrapper } };case 'focus':return { popupProps: { onFocus: this.handleFocus, onBlur: this.handleBlur, useWrapper: useWrapper } };case 'hover&focus':return { layerProps: { active: this.state.opened, onClickOutside: this.handleClickOutsideAnchor }, popupProps: { onFocus: this.handleFocus, onBlur: this.handleBlur, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper } };default:throw new Error('Unknown trigger specified: ' + props.trigger);}};_proto.clearHoverTimeout = function clearHoverTimeout() {if (this.hoverTimeout) {clearTimeout(this.hoverTimeout);this.hoverTimeout = null;}};_proto.isClickOutsideContent = function isClickOutsideContent(event) {if (this.contentElement && event.target instanceof Element) {return !(0, _listenFocusOutside.containsTargetOrRenderContainer)(event.target)(this.contentElement);}return true;};return Tooltip;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'Tooltip', _class2.propTypes = { children: function children(props, propName, componentName) {var children = props[propName];(0, _warning.default)(children || props.anchorElement, "[" + componentName + "]: you must provide either 'children' or 'anchorElement' prop for " + componentName + " to work properly");(0, _warning.default)(!(Array.isArray(children) && props.useWrapper === false), "[" + componentName + "]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly");} }, _class2.defaultProps = { pos: _Popup.DefaultPosition, trigger: 'hover', allowedPositions: Positions, disableAnimations: _currentEnvironment.isTestEnv, useWrapper: false, closeOnChildrenMouseLeave: false }, _class2.delay = 100, _class2.triggersWithoutCloseButton = ['hover', 'hoverAnchor', 'focus', 'hover&focus'], _temp)) || _class) || _class;exports.Tooltip = Tooltip;
@@ -1 +1 @@
1
- {"version":3,"sources":["Tooltip.tsx"],"names":["TooltipDataTids","root","content","Positions","Tooltip","rootNode","responsiveLayout","state","opened","focused","hoverTimeout","contentElement","positions","clickedOutside","popupRef","React","createRef","renderContent","props","render","refContent","styles","tooltipContent","theme","renderCloseButton","getAnchorElement","current","anchorElement","mobileCloseHandler","trigger","close","node","open","setState","handleMouseEnter","event","isHoverAnchor","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","isMobileLayout","relatedTarget","handleClick","handleClickOutside","isClickOutsideContent","isClickOutsideAnchor","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","ThemeFactory","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","children","popup","renderPopup","setRootNode","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","isClickOutside","Element","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","DefaultPosition","isTestEnv","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { isNullable } from '../../lib/utils';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: () => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport const TooltipDataTids = {\n root: 'Tooltip__root',\n content: 'Tooltip__content',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\n@responsiveLayout\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n private isMobileLayout!: boolean;\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (isNullable(content)) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)} data-tid={TooltipDataTids.content}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross || this.isMobileLayout) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<HTMLElement> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) {\n return;\n }\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n if (this.isMobileLayout) {\n return popup;\n }\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n data-tid={TooltipDataTids.root}\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n mobileOnCloseRequest={this.mobileCloseHandler}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private mobileCloseHandler = () => {\n if (this.props.trigger === 'manual' || this.props.trigger === 'closed' || this.props.trigger === 'opened') {\n return;\n }\n\n this.close();\n };\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n\n switch (this.props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutside,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutside,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutside,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutside = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event) && this.isClickOutsideAnchor(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n return this.isClickOutside(event, this.contentElement);\n }\n\n private isClickOutsideAnchor(event: Event) {\n return this.isClickOutside(event, this.getAnchorElement());\n }\n\n private isClickOutside(event: Event, target: Nullable<HTMLElement>) {\n if (target && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(target);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n\n this.close();\n };\n}\n"]}
1
+ {"version":3,"sources":["Tooltip.tsx"],"names":["TooltipDataTids","root","content","Positions","Tooltip","rootNode","responsiveLayout","state","opened","focused","hoverTimeout","contentElement","positions","clickedOutside","popupRef","React","createRef","renderContent","props","render","refContent","styles","tooltipContent","theme","renderCloseButton","getAnchorElement","current","anchorElement","mobileCloseHandler","trigger","close","node","open","setState","handleMouseEnter","event","isHoverAnchor","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","isMobileLayout","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","ThemeFactory","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","children","popup","renderPopup","setRootNode","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","DefaultPosition","isTestEnv","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { isNullable } from '../../lib/utils';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: () => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport const TooltipDataTids = {\n root: 'Tooltip__root',\n content: 'Tooltip__content',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\n@responsiveLayout\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n private isMobileLayout!: boolean;\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (isNullable(content)) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)} data-tid={TooltipDataTids.content}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross || this.isMobileLayout) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<HTMLElement> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) {\n return;\n }\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n if (this.isMobileLayout) {\n return popup;\n }\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n data-tid={TooltipDataTids.root}\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n mobileOnCloseRequest={this.mobileCloseHandler}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private mobileCloseHandler = () => {\n if (this.props.trigger === 'manual' || this.props.trigger === 'closed' || this.props.trigger === 'opened') {\n return;\n }\n\n this.close();\n };\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n\n switch (this.props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n\n this.close();\n };\n}\n"]}
@@ -3,10 +3,11 @@
3
3
 
4
4
  var styles = (0, _Emotion.memoizeStyle)({
5
5
  root: function root(t) {
6
- return (0, _Emotion.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\n overflow: auto;\n padding: 5px ", ";\n outline: none;\n background: ", ";\n "])),
6
+ return (0, _Emotion.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\n overflow: auto;\n padding: 5px ", ";\n outline: none;\n box-sizing: content-box;\n background: ", ";\n "])),
7
7
 
8
8
  t.menuPaddingX,
9
9
 
10
+
10
11
  t.bgSecondary);
11
12
 
12
13
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["InternalMenu.styles.ts"],"names":["styles","root","t","css","menuPaddingX","bgSecondary","shadow","menuBorder","menuShadow","header","footer","fixedHeader","fixedFooter"],"mappings":"4QAAA,oD;;;AAGO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,eAAOC,YAAP;;AAEiBD,IAAAA,CAAC,CAACE,YAFnB;;AAIgBF,IAAAA,CAAC,CAACG,WAJlB;;AAMD,GARgC;;AAUjCC,EAAAA,MAViC,kBAU1BJ,CAV0B,EAUhB;AACf,eAAOC,YAAP;AACYD,IAAAA,CAAC,CAACK,UADd;AAEgBL,IAAAA,CAAC,CAACM,UAFlB;;AAID,GAfgC;;AAiBjCC,EAAAA,MAjBiC,oBAiBxB;AACP,eAAON,YAAP;;;;;;;;;;AAUD,GA5BgC;;AA8BjCO,EAAAA,MA9BiC,oBA8BxB;AACP,eAAOP,YAAP;;;;;;;;;;AAUD,GAzCgC;;AA2CjCQ,EAAAA,WA3CiC,yBA2CnB;AACZ,eAAOR,YAAP;;;AAGD,GA/CgC;;AAiDjCS,EAAAA,WAjDiC,yBAiDnB;AACZ,eAAOT,YAAP;;;AAGD,GArDgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n overflow: auto;\n padding: 5px ${t.menuPaddingX};\n outline: none;\n background: ${t.bgSecondary};\n `;\n },\n\n shadow(t: Theme) {\n return css`\n border: ${t.menuBorder};\n box-shadow: ${t.menuShadow};\n `;\n },\n\n header() {\n return css`\n top: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n footer() {\n return css`\n bottom: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n fixedHeader() {\n return css`\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n\n fixedFooter() {\n return css`\n box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n});\n"]}
1
+ {"version":3,"sources":["InternalMenu.styles.ts"],"names":["styles","root","t","css","menuPaddingX","bgSecondary","shadow","menuBorder","menuShadow","header","footer","fixedHeader","fixedFooter"],"mappings":"4QAAA,oD;;;AAGO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,eAAOC,YAAP;;AAEiBD,IAAAA,CAAC,CAACE,YAFnB;;;AAKgBF,IAAAA,CAAC,CAACG,WALlB;;AAOD,GATgC;;AAWjCC,EAAAA,MAXiC,kBAW1BJ,CAX0B,EAWhB;AACf,eAAOC,YAAP;AACYD,IAAAA,CAAC,CAACK,UADd;AAEgBL,IAAAA,CAAC,CAACM,UAFlB;;AAID,GAhBgC;;AAkBjCC,EAAAA,MAlBiC,oBAkBxB;AACP,eAAON,YAAP;;;;;;;;;;AAUD,GA7BgC;;AA+BjCO,EAAAA,MA/BiC,oBA+BxB;AACP,eAAOP,YAAP;;;;;;;;;;AAUD,GA1CgC;;AA4CjCQ,EAAAA,WA5CiC,yBA4CnB;AACZ,eAAOR,YAAP;;;AAGD,GAhDgC;;AAkDjCS,EAAAA,WAlDiC,yBAkDnB;AACZ,eAAOT,YAAP;;;AAGD,GAtDgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n overflow: auto;\n padding: 5px ${t.menuPaddingX};\n outline: none;\n box-sizing: content-box;\n background: ${t.bgSecondary};\n `;\n },\n\n shadow(t: Theme) {\n return css`\n border: ${t.menuBorder};\n box-shadow: ${t.menuShadow};\n `;\n },\n\n header() {\n return css`\n top: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n footer() {\n return css`\n bottom: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n fixedHeader() {\n return css`\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n\n fixedFooter() {\n return css`\n box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n});\n"]}
@@ -22,6 +22,7 @@ export declare class RenderLayer extends React.Component<RenderLayerProps> {
22
22
  componentDidUpdate(prevProps: RenderLayerProps): void;
23
23
  componentWillUnmount(): void;
24
24
  render(): JSX.Element;
25
+ private getAnchorNode;
25
26
  private attachListeners;
26
27
  private detachListeners;
27
28
  private handleFocusOutside;
@@ -1,4 +1,4 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.RenderLayer = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.RenderLayer = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
2
2
 
3
3
  var _listenFocusOutside = require("../../lib/listenFocusOutside");
4
4
  var _CommonWrapper = require("../CommonWrapper");
@@ -87,6 +87,11 @@ RenderLayer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/f
87
87
 
88
88
 
89
89
 
90
+
91
+
92
+
93
+
94
+
90
95
 
91
96
 
92
97
 
@@ -101,7 +106,7 @@ RenderLayer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/f
101
106
 
102
107
  handleNativeDocClick = function (event) {
103
108
  var target = event.target || event.srcElement;
104
- var node = (0, _rootNode.getRootNode)((0, _assertThisInitialized2.default)(_this)) || (0, _rootNode.getRootNode)(_this.props.getAnchorElement == null ? void 0 : _this.props.getAnchorElement());
109
+ var node = _this.getAnchorNode();
105
110
 
106
111
  if (!node || target instanceof Element && (0, _listenFocusOutside.containsTargetOrRenderContainer)(target)(node)) {
107
112
  return;
@@ -110,4 +115,4 @@ RenderLayer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/f
110
115
  if (_this.props.onClickOutside) {
111
116
  _this.props.onClickOutside(event);
112
117
  }
113
- };return _this;}var _proto = RenderLayer.prototype;_proto.componentDidMount = function componentDidMount() {if (this.props.active) {this.attachListeners();}};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (!prevProps.active && this.props.active) {this.attachListeners();}if (prevProps.active && !this.props.active) {this.detachListeners();}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.props.active) {this.detachListeners();}};_proto.render = function render() {return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), _react.default.Children.only(this.props.children));};_proto.attachListeners = function attachListeners() {var _this$props$getAnchor, _this$props;var rootNode = (0, _rootNode.getRootNode)(this) || ((_this$props$getAnchor = (_this$props = this.props).getAnchorElement) == null ? void 0 : _this$props$getAnchor.call(_this$props));if (!rootNode) {return;}this.focusOutsideListenerToken = (0, _listenFocusOutside.listen)(function () {return [rootNode];}, this.handleFocusOutside);window.addEventListener('blur', this.handleFocusOutside);document.addEventListener('ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown', this.handleNativeDocClick);};_proto.detachListeners = function detachListeners() {if (this.focusOutsideListenerToken) {this.focusOutsideListenerToken.remove();this.focusOutsideListenerToken = null;}window.removeEventListener('blur', this.handleFocusOutside);document.removeEventListener('ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown', this.handleNativeDocClick);};return RenderLayer;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'RenderLayer', _class2.propTypes = { active: function active(props, propName, componentName) {var active = props.active,onClickOutside = props.onClickOutside,onFocusOutside = props.onFocusOutside;if (active && !(onClickOutside || onFocusOutside)) {return new Error("[" + componentName + "]: using the component without either 'onClickOutside' or 'onFocusOutside' callback is pointless.");}} }, _class2.defaultProps = { active: true }, _temp)) || _class;exports.RenderLayer = RenderLayer;
118
+ };return _this;}var _proto = RenderLayer.prototype;_proto.componentDidMount = function componentDidMount() {if (this.props.active) {this.attachListeners();}};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (!prevProps.active && this.props.active) {this.attachListeners();}if (prevProps.active && !this.props.active) {this.detachListeners();}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.props.active) {this.detachListeners();}};_proto.render = function render() {return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), _react.default.Children.only(this.props.children));};_proto.getAnchorNode = function getAnchorNode() {var getAnchorElement = this.props.getAnchorElement;return getAnchorElement ? getAnchorElement() : (0, _rootNode.getRootNode)(this);};_proto.attachListeners = function attachListeners() {var node = this.getAnchorNode();if (!node) {return;}this.focusOutsideListenerToken = (0, _listenFocusOutside.listen)(function () {return [node];}, this.handleFocusOutside);window.addEventListener('blur', this.handleFocusOutside);document.addEventListener('ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown', this.handleNativeDocClick);};_proto.detachListeners = function detachListeners() {if (this.focusOutsideListenerToken) {this.focusOutsideListenerToken.remove();this.focusOutsideListenerToken = null;}window.removeEventListener('blur', this.handleFocusOutside);document.removeEventListener('ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown', this.handleNativeDocClick);};return RenderLayer;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'RenderLayer', _class2.propTypes = { active: function active(props, propName, componentName) {var active = props.active,onClickOutside = props.onClickOutside,onFocusOutside = props.onFocusOutside;if (active && !(onClickOutside || onFocusOutside)) {return new Error("[" + componentName + "]: using the component without either 'onClickOutside' or 'onFocusOutside' callback is pointless.");}} }, _class2.defaultProps = { active: true }, _temp)) || _class;exports.RenderLayer = RenderLayer;
@@ -1 +1 @@
1
- {"version":3,"sources":["RenderLayer.tsx"],"names":["RenderLayer","rootNode","focusOutsideListenerToken","handleFocusOutside","event","props","onFocusOutside","handleNativeDocClick","target","srcElement","node","getAnchorElement","Element","onClickOutside","componentDidMount","active","attachListeners","componentDidUpdate","prevProps","detachListeners","componentWillUnmount","render","setRootNode","React","Children","only","children","window","addEventListener","document","documentElement","remove","removeEventListener","Component","__KONTUR_REACT_UI__","propTypes","propName","componentName","Error","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { listen as listenFocusOutside, containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { Nullable } from '../../typings/utility-types';\n\nexport interface RenderLayerProps extends CommonProps {\n children: JSX.Element;\n onClickOutside?: (e: Event) => void;\n onFocusOutside?: (e: Event) => void;\n active?: boolean;\n getAnchorElement?: () => Nullable<HTMLElement>;\n}\n\n@rootNode\nexport class RenderLayer extends React.Component<RenderLayerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderLayer';\n\n public static propTypes = {\n active(props: RenderLayerProps, propName: keyof RenderLayerProps, componentName: string) {\n const { active, onClickOutside, onFocusOutside } = props;\n if (active && !(onClickOutside || onFocusOutside)) {\n return new Error(\n `[${componentName}]: using the component without either 'onClickOutside' or 'onFocusOutside' callback is pointless.`,\n );\n }\n },\n };\n\n public static defaultProps = {\n active: true,\n };\n\n private focusOutsideListenerToken: {\n remove: () => void;\n } | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.active) {\n this.attachListeners();\n }\n }\n\n public componentDidUpdate(prevProps: RenderLayerProps) {\n if (!prevProps.active && this.props.active) {\n this.attachListeners();\n }\n if (prevProps.active && !this.props.active) {\n this.detachListeners();\n }\n }\n\n public componentWillUnmount() {\n if (this.props.active) {\n this.detachListeners();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {React.Children.only(this.props.children)}\n </CommonWrapper>\n );\n }\n\n private attachListeners() {\n const rootNode = getRootNode(this) || this.props.getAnchorElement?.();\n if (!rootNode) {\n return;\n }\n\n this.focusOutsideListenerToken = listenFocusOutside(() => [rootNode], this.handleFocusOutside);\n window.addEventListener('blur', this.handleFocusOutside);\n document.addEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private detachListeners() {\n if (this.focusOutsideListenerToken) {\n this.focusOutsideListenerToken.remove();\n this.focusOutsideListenerToken = null;\n }\n\n window.removeEventListener('blur', this.handleFocusOutside);\n document.removeEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private handleFocusOutside = (event: Event) => {\n if (this.props.onFocusOutside) {\n this.props.onFocusOutside(event);\n }\n };\n\n private handleNativeDocClick = (event: Event) => {\n const target = event.target || event.srcElement;\n const node = getRootNode(this) || getRootNode(this.props.getAnchorElement?.());\n\n if (!node || (target instanceof Element && containsTargetOrRenderContainer(target)(node))) {\n return;\n }\n\n if (this.props.onClickOutside) {\n this.props.onClickOutside(event);\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["RenderLayer.tsx"],"names":["RenderLayer","rootNode","focusOutsideListenerToken","handleFocusOutside","event","props","onFocusOutside","handleNativeDocClick","target","srcElement","node","getAnchorNode","Element","onClickOutside","componentDidMount","active","attachListeners","componentDidUpdate","prevProps","detachListeners","componentWillUnmount","render","setRootNode","React","Children","only","children","getAnchorElement","window","addEventListener","document","documentElement","remove","removeEventListener","Component","__KONTUR_REACT_UI__","propTypes","propName","componentName","Error","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { listen as listenFocusOutside, containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { Nullable } from '../../typings/utility-types';\n\nexport interface RenderLayerProps extends CommonProps {\n children: JSX.Element;\n onClickOutside?: (e: Event) => void;\n onFocusOutside?: (e: Event) => void;\n active?: boolean;\n getAnchorElement?: () => Nullable<HTMLElement>;\n}\n\n@rootNode\nexport class RenderLayer extends React.Component<RenderLayerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderLayer';\n\n public static propTypes = {\n active(props: RenderLayerProps, propName: keyof RenderLayerProps, componentName: string) {\n const { active, onClickOutside, onFocusOutside } = props;\n if (active && !(onClickOutside || onFocusOutside)) {\n return new Error(\n `[${componentName}]: using the component without either 'onClickOutside' or 'onFocusOutside' callback is pointless.`,\n );\n }\n },\n };\n\n public static defaultProps = {\n active: true,\n };\n\n private focusOutsideListenerToken: {\n remove: () => void;\n } | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.active) {\n this.attachListeners();\n }\n }\n\n public componentDidUpdate(prevProps: RenderLayerProps) {\n if (!prevProps.active && this.props.active) {\n this.attachListeners();\n }\n if (prevProps.active && !this.props.active) {\n this.detachListeners();\n }\n }\n\n public componentWillUnmount() {\n if (this.props.active) {\n this.detachListeners();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {React.Children.only(this.props.children)}\n </CommonWrapper>\n );\n }\n\n private getAnchorNode(): Nullable<HTMLElement> {\n const { getAnchorElement } = this.props;\n return getAnchorElement ? getAnchorElement() : getRootNode(this);\n }\n\n private attachListeners() {\n const node = this.getAnchorNode();\n if (!node) {\n return;\n }\n\n this.focusOutsideListenerToken = listenFocusOutside(() => [node], this.handleFocusOutside);\n window.addEventListener('blur', this.handleFocusOutside);\n document.addEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private detachListeners() {\n if (this.focusOutsideListenerToken) {\n this.focusOutsideListenerToken.remove();\n this.focusOutsideListenerToken = null;\n }\n\n window.removeEventListener('blur', this.handleFocusOutside);\n document.removeEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private handleFocusOutside = (event: Event) => {\n if (this.props.onFocusOutside) {\n this.props.onFocusOutside(event);\n }\n };\n\n private handleNativeDocClick = (event: Event) => {\n const target = event.target || event.srcElement;\n const node = this.getAnchorNode();\n\n if (!node || (target instanceof Element && containsTargetOrRenderContainer(target)(node))) {\n return;\n }\n\n if (this.props.onClickOutside) {\n this.props.onClickOutside(event);\n }\n };\n}\n"]}
@@ -102,3 +102,51 @@ let checkboxInstance = React.useRef(null);
102
102
  </Gapped>
103
103
  </Gapped>
104
104
  ```
105
+
106
+ Пример использования неопределённого состояния чекбокса
107
+
108
+ ```jsx harmony
109
+ const [checkedSiblings, setCheckedSiblings] = React.useState([]);
110
+ const siblingCheckboxes = [1, 2];
111
+
112
+ let parentCheckboxRef;
113
+
114
+ React.useEffect(() => {
115
+ if (checkedSiblings.length === 0 || checkedSiblings.length === siblingCheckboxes.length) {
116
+ parentCheckboxRef.resetIndeterminate();
117
+ } else if (checkedSiblings.length !== 0) {
118
+ parentCheckboxRef.setIndeterminate();
119
+ }
120
+ }, [JSON.stringify(checkedSiblings)]);
121
+
122
+ <>
123
+ <Checkbox checked={checkedSiblings.length === siblingCheckboxes.length} ref={(el) => (parentCheckboxRef = el)}>
124
+ Родитель
125
+ </Checkbox>
126
+ <div style={{ display: 'flex', flexDirection: 'column', marginLeft: '20px' }}>
127
+ {siblingCheckboxes.map((id) => {
128
+ return (
129
+ <Checkbox
130
+ key={id}
131
+ checked={checkedSiblings.includes(id)}
132
+ onValueChange={() => {
133
+ const siblingIndex = checkedSiblings.indexOf(id);
134
+
135
+ if (siblingIndex === -1) {
136
+ setCheckedSiblings((prev) => [...prev, id]);
137
+ } else {
138
+ setCheckedSiblings((prev) =>
139
+ prev.filter((siblingId) => {
140
+ return siblingId !== id;
141
+ }),
142
+ );
143
+ }
144
+ }}
145
+ >
146
+ Ребёнок ({id})
147
+ </Checkbox>
148
+ );
149
+ })}
150
+ </div>
151
+ </>
152
+ ```
@@ -1,4 +1,4 @@
1
- import React, { useContext, useEffect } from 'react';
1
+ import React, { useContext, useLayoutEffect } from 'react';
2
2
  import { getScrollWidth } from "../../../lib/dom/getScrollWidth";
3
3
  import { Sticky } from "../../Sticky";
4
4
  import { ThemeContext } from "../../../lib/theming/ThemeContext";
@@ -25,7 +25,7 @@ function ModalFooter(props) {
25
25
  sticky = _props$sticky === void 0 ? !layout.isMobile : _props$sticky,
26
26
  panel = props.panel,
27
27
  children = props.children;
28
- useEffect(function () {
28
+ useLayoutEffect(function () {
29
29
  modal.setHasFooter == null ? void 0 : modal.setHasFooter();
30
30
  modal.setHasPanel == null ? void 0 : modal.setHasPanel(panel);
31
31
  return function () {
@@ -1 +1 @@
1
- {"version":3,"sources":["ModalFooter.tsx"],"names":["React","useContext","useEffect","getScrollWidth","Sticky","ThemeContext","ZIndex","CommonWrapper","cx","useResponsiveLayout","styles","ModalContext","ModalFooterDataTids","root","ModalFooter","props","theme","modal","layout","sticky","isMobile","panel","children","setHasFooter","setHasPanel","renderContent","fixed","footer","fixedFooter","Boolean","fixedPanel","mobileFooter","footerWrapper","horizontalScroll","__KONTUR_REACT_UI__","__MODAL_FOOTER__"],"mappings":"AAAA,OAAOA,KAAP,IAA2BC,UAA3B,EAAuCC,SAAvC,QAAwD,OAAxD;;AAEA,SAASC,cAAT,QAA+B,8BAA/B;AACA,SAASC,MAAT,QAAuB,WAAvB;AACA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,aAAT,QAA2C,8BAA3C;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,mBAAT,QAAoC,qBAApC;;AAEA,SAASC,MAAT,QAAuB,gBAAvB;AACA,SAASC,YAAT,QAA6B,gBAA7B;;;;;;;;;;;AAWA,OAAO,IAAMC,mBAAmB,GAAG;AACjCC,EAAAA,IAAI,EAAE,mBAD2B,EAA5B;;;AAIP;AACA;AACA;AACA;AACA;AACA,SAASC,WAAT,CAAqBC,KAArB,EAA8C;AAC5C,MAAMC,KAAK,GAAGf,UAAU,CAACI,YAAD,CAAxB;AACA,MAAMY,KAAK,GAAGhB,UAAU,CAACU,YAAD,CAAxB;AACA,MAAMO,MAAM,GAAGT,mBAAmB,EAAlC;;AAEA,sBAAuDM,KAAvD,CAAQI,MAAR,CAAQA,MAAR,8BAAiB,CAACD,MAAM,CAACE,QAAzB,iBAAmCC,KAAnC,GAAuDN,KAAvD,CAAmCM,KAAnC,CAA0CC,QAA1C,GAAuDP,KAAvD,CAA0CO,QAA1C;;AAEApB,EAAAA,SAAS,CAAC,YAAM;AACde,IAAAA,KAAK,CAACM,YAAN,oBAAAN,KAAK,CAACM,YAAN;AACAN,IAAAA,KAAK,CAACO,WAAN,oBAAAP,KAAK,CAACO,WAAN,CAAoBH,KAApB;;AAEA,WAAO,YAAM;AACXJ,MAAAA,KAAK,CAACM,YAAN,oBAAAN,KAAK,CAACM,YAAN,CAAqB,KAArB;AACAN,MAAAA,KAAK,CAACO,WAAN,oBAAAP,KAAK,CAACO,WAAN,CAAoB,KAApB;AACD,KAHD;AAID,GARQ,EAQN,CAACH,KAAD,CARM,CAAT;;AAUA,MAAMI,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAmB,aAAlBA,KAAkB,cAAlBA,KAAkB,GAAV,KAAU;AACvC;AACE;AACE,oBAAUd,mBAAmB,CAACC,IADhC;AAEE,QAAA,SAAS,EAAEL,EAAE;AACVE,QAAAA,MAAM,CAACiB,MAAP,CAAcX,KAAd,CADU,IACa,IADb;AAEVN,QAAAA,MAAM,CAACkB,WAAP,CAAmBZ,KAAnB,CAFU,IAEkBU,KAFlB;AAGVhB,QAAAA,MAAM,CAACW,KAAP,CAAaL,KAAb,CAHU,IAGYa,OAAO,CAACR,KAAD,CAHnB;AAIVX,QAAAA,MAAM,CAACoB,UAAP,CAAkBd,KAAlB,CAJU,IAIiBU,KAAK,IAAIG,OAAO,CAACR,KAAD,CAJjC;AAKVX,QAAAA,MAAM,CAACqB,YAAP,CAAoBf,KAApB,CALU,IAKmBE,MAAM,CAACE,QAL1B,OAFf;;;AAUGE,MAAAA,QAVH,CADF;;;AAcD,GAfD;;AAiBA;AACE,wBAAC,aAAD,EAAmBP,KAAnB;AACE,wBAAC,MAAD,IAAQ,QAAQ,EAAE,aAAlB,EAAiC,SAAS,EAAEL,MAAM,CAACsB,aAAP,EAA5C;AACGb,IAAAA,MAAM;AACL,wBAAC,MAAD,IAAQ,IAAI,EAAC,QAAb,EAAsB,MAAM,EAAEF,KAAK,CAACgB,gBAAN,GAAyB9B,cAAc,EAAvC,GAA4C,CAA1E;AACGsB,IAAAA,aADH,CADK;;;AAKLA,IAAAA,aAAa,EANjB,CADF,CADF;;;;;AAaD;;AAEDX,WAAW,CAACoB,mBAAZ,GAAkC,aAAlC;AACApB,WAAW,CAACqB,gBAAZ,GAA+B,IAA/B;;AAEA,SAASrB,WAAT","sourcesContent":["import React, { ReactNode, useContext, useEffect } from 'react';\n\nimport { getScrollWidth } from '../../lib/dom/getScrollWidth';\nimport { Sticky } from '../Sticky';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { useResponsiveLayout } from '../ResponsiveLayout';\n\nimport { styles } from './Modal.styles';\nimport { ModalContext } from './ModalContext';\n\nexport interface ModalFooterProps extends CommonProps {\n /**\n * Включает серый цвет в футере\n */\n panel?: boolean;\n sticky?: boolean;\n children?: ReactNode;\n}\n\nexport const ModalFooterDataTids = {\n root: 'ModalFooter__root',\n} as const;\n\n/**\n * Футер модального окна.\n *\n * @visibleName Modal.Footer\n */\nfunction ModalFooter(props: ModalFooterProps) {\n const theme = useContext(ThemeContext);\n const modal = useContext(ModalContext);\n const layout = useResponsiveLayout();\n\n const { sticky = !layout.isMobile, panel, children } = props;\n\n useEffect(() => {\n modal.setHasFooter?.();\n modal.setHasPanel?.(panel);\n\n return () => {\n modal.setHasFooter?.(false);\n modal.setHasPanel?.(false);\n };\n }, [panel]);\n\n const renderContent = (fixed = false) => {\n return (\n <div\n data-tid={ModalFooterDataTids.root}\n className={cx({\n [styles.footer(theme)]: true,\n [styles.fixedFooter(theme)]: fixed,\n [styles.panel(theme)]: Boolean(panel),\n [styles.fixedPanel(theme)]: fixed && Boolean(panel),\n [styles.mobileFooter(theme)]: layout.isMobile,\n })}\n >\n {children}\n </div>\n );\n };\n\n return (\n <CommonWrapper {...props}>\n <ZIndex priority={'ModalFooter'} className={styles.footerWrapper()}>\n {sticky ? (\n <Sticky side=\"bottom\" offset={modal.horizontalScroll ? getScrollWidth() : 0}>\n {renderContent}\n </Sticky>\n ) : (\n renderContent()\n )}\n </ZIndex>\n </CommonWrapper>\n );\n}\n\nModalFooter.__KONTUR_REACT_UI__ = 'ModalFooter';\nModalFooter.__MODAL_FOOTER__ = true;\n\nexport { ModalFooter };\n"]}
1
+ {"version":3,"sources":["ModalFooter.tsx"],"names":["React","useContext","useLayoutEffect","getScrollWidth","Sticky","ThemeContext","ZIndex","CommonWrapper","cx","useResponsiveLayout","styles","ModalContext","ModalFooterDataTids","root","ModalFooter","props","theme","modal","layout","sticky","isMobile","panel","children","setHasFooter","setHasPanel","renderContent","fixed","footer","fixedFooter","Boolean","fixedPanel","mobileFooter","footerWrapper","horizontalScroll","__KONTUR_REACT_UI__","__MODAL_FOOTER__"],"mappings":"AAAA,OAAOA,KAAP,IAA2BC,UAA3B,EAAuCC,eAAvC,QAA8D,OAA9D;;AAEA,SAASC,cAAT,QAA+B,8BAA/B;AACA,SAASC,MAAT,QAAuB,WAAvB;AACA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,aAAT,QAA2C,8BAA3C;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,mBAAT,QAAoC,qBAApC;;AAEA,SAASC,MAAT,QAAuB,gBAAvB;AACA,SAASC,YAAT,QAA6B,gBAA7B;;;;;;;;;;;AAWA,OAAO,IAAMC,mBAAmB,GAAG;AACjCC,EAAAA,IAAI,EAAE,mBAD2B,EAA5B;;;AAIP;AACA;AACA;AACA;AACA;AACA,SAASC,WAAT,CAAqBC,KAArB,EAA8C;AAC5C,MAAMC,KAAK,GAAGf,UAAU,CAACI,YAAD,CAAxB;AACA,MAAMY,KAAK,GAAGhB,UAAU,CAACU,YAAD,CAAxB;AACA,MAAMO,MAAM,GAAGT,mBAAmB,EAAlC;;AAEA,sBAAuDM,KAAvD,CAAQI,MAAR,CAAQA,MAAR,8BAAiB,CAACD,MAAM,CAACE,QAAzB,iBAAmCC,KAAnC,GAAuDN,KAAvD,CAAmCM,KAAnC,CAA0CC,QAA1C,GAAuDP,KAAvD,CAA0CO,QAA1C;;AAEApB,EAAAA,eAAe,CAAC,YAAM;AACpBe,IAAAA,KAAK,CAACM,YAAN,oBAAAN,KAAK,CAACM,YAAN;AACAN,IAAAA,KAAK,CAACO,WAAN,oBAAAP,KAAK,CAACO,WAAN,CAAoBH,KAApB;;AAEA,WAAO,YAAM;AACXJ,MAAAA,KAAK,CAACM,YAAN,oBAAAN,KAAK,CAACM,YAAN,CAAqB,KAArB;AACAN,MAAAA,KAAK,CAACO,WAAN,oBAAAP,KAAK,CAACO,WAAN,CAAoB,KAApB;AACD,KAHD;AAID,GARc,EAQZ,CAACH,KAAD,CARY,CAAf;;AAUA,MAAMI,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAmB,aAAlBA,KAAkB,cAAlBA,KAAkB,GAAV,KAAU;AACvC;AACE;AACE,oBAAUd,mBAAmB,CAACC,IADhC;AAEE,QAAA,SAAS,EAAEL,EAAE;AACVE,QAAAA,MAAM,CAACiB,MAAP,CAAcX,KAAd,CADU,IACa,IADb;AAEVN,QAAAA,MAAM,CAACkB,WAAP,CAAmBZ,KAAnB,CAFU,IAEkBU,KAFlB;AAGVhB,QAAAA,MAAM,CAACW,KAAP,CAAaL,KAAb,CAHU,IAGYa,OAAO,CAACR,KAAD,CAHnB;AAIVX,QAAAA,MAAM,CAACoB,UAAP,CAAkBd,KAAlB,CAJU,IAIiBU,KAAK,IAAIG,OAAO,CAACR,KAAD,CAJjC;AAKVX,QAAAA,MAAM,CAACqB,YAAP,CAAoBf,KAApB,CALU,IAKmBE,MAAM,CAACE,QAL1B,OAFf;;;AAUGE,MAAAA,QAVH,CADF;;;AAcD,GAfD;;AAiBA;AACE,wBAAC,aAAD,EAAmBP,KAAnB;AACE,wBAAC,MAAD,IAAQ,QAAQ,EAAE,aAAlB,EAAiC,SAAS,EAAEL,MAAM,CAACsB,aAAP,EAA5C;AACGb,IAAAA,MAAM;AACL,wBAAC,MAAD,IAAQ,IAAI,EAAC,QAAb,EAAsB,MAAM,EAAEF,KAAK,CAACgB,gBAAN,GAAyB9B,cAAc,EAAvC,GAA4C,CAA1E;AACGsB,IAAAA,aADH,CADK;;;AAKLA,IAAAA,aAAa,EANjB,CADF,CADF;;;;;AAaD;;AAEDX,WAAW,CAACoB,mBAAZ,GAAkC,aAAlC;AACApB,WAAW,CAACqB,gBAAZ,GAA+B,IAA/B;;AAEA,SAASrB,WAAT","sourcesContent":["import React, { ReactNode, useContext, useLayoutEffect } from 'react';\n\nimport { getScrollWidth } from '../../lib/dom/getScrollWidth';\nimport { Sticky } from '../Sticky';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { useResponsiveLayout } from '../ResponsiveLayout';\n\nimport { styles } from './Modal.styles';\nimport { ModalContext } from './ModalContext';\n\nexport interface ModalFooterProps extends CommonProps {\n /**\n * Включает серый цвет в футере\n */\n panel?: boolean;\n sticky?: boolean;\n children?: ReactNode;\n}\n\nexport const ModalFooterDataTids = {\n root: 'ModalFooter__root',\n} as const;\n\n/**\n * Футер модального окна.\n *\n * @visibleName Modal.Footer\n */\nfunction ModalFooter(props: ModalFooterProps) {\n const theme = useContext(ThemeContext);\n const modal = useContext(ModalContext);\n const layout = useResponsiveLayout();\n\n const { sticky = !layout.isMobile, panel, children } = props;\n\n useLayoutEffect(() => {\n modal.setHasFooter?.();\n modal.setHasPanel?.(panel);\n\n return () => {\n modal.setHasFooter?.(false);\n modal.setHasPanel?.(false);\n };\n }, [panel]);\n\n const renderContent = (fixed = false) => {\n return (\n <div\n data-tid={ModalFooterDataTids.root}\n className={cx({\n [styles.footer(theme)]: true,\n [styles.fixedFooter(theme)]: fixed,\n [styles.panel(theme)]: Boolean(panel),\n [styles.fixedPanel(theme)]: fixed && Boolean(panel),\n [styles.mobileFooter(theme)]: layout.isMobile,\n })}\n >\n {children}\n </div>\n );\n };\n\n return (\n <CommonWrapper {...props}>\n <ZIndex priority={'ModalFooter'} className={styles.footerWrapper()}>\n {sticky ? (\n <Sticky side=\"bottom\" offset={modal.horizontalScroll ? getScrollWidth() : 0}>\n {renderContent}\n </Sticky>\n ) : (\n renderContent()\n )}\n </ZIndex>\n </CommonWrapper>\n );\n}\n\nModalFooter.__KONTUR_REACT_UI__ = 'ModalFooter';\nModalFooter.__MODAL_FOOTER__ = true;\n\nexport { ModalFooter };\n"]}
@@ -1,4 +1,4 @@
1
- import React, { useContext, useEffect } from 'react';
1
+ import React, { useContext, useLayoutEffect } from 'react';
2
2
  import { Sticky } from "../../Sticky";
3
3
  import { ThemeContext } from "../../../lib/theming/ThemeContext";
4
4
  import { ZIndex } from "../../../internal/ZIndex";
@@ -24,7 +24,7 @@ function ModalHeader(props) {
24
24
  var _props$sticky = props.sticky,
25
25
  sticky = _props$sticky === void 0 ? !layout.isMobile : _props$sticky,
26
26
  children = props.children;
27
- useEffect(function () {
27
+ useLayoutEffect(function () {
28
28
  modal.setHasHeader == null ? void 0 : modal.setHasHeader();
29
29
  return function () {
30
30
  return modal.setHasHeader == null ? void 0 : modal.setHasHeader(false);
@@ -1 +1 @@
1
- {"version":3,"sources":["ModalHeader.tsx"],"names":["React","useContext","useEffect","Sticky","ThemeContext","ZIndex","CommonWrapper","cx","useResponsiveLayout","styles","ModalClose","ModalContext","ModalHeaderDataTids","root","ModalHeader","props","theme","modal","layout","sticky","isMobile","children","setHasHeader","renderContent","fixed","header","mobileHeader","headerAddPadding","Boolean","additionalPadding","fixedHeader","mobileFixedHeader","headerWithClose","close","mobileHeaderWithClose","requestClose","disableClose","headerWrapper","__KONTUR_REACT_UI__","__MODAL_HEADER__"],"mappings":"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","sourcesContent":["import React, { ReactNode, useContext, useEffect } from 'react';\n\nimport { Sticky } from '../Sticky';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { useResponsiveLayout } from '../ResponsiveLayout';\n\nimport { styles } from './Modal.styles';\nimport { ModalClose } from './ModalClose';\nimport { ModalContext } from './ModalContext';\n\nexport interface ModalHeaderProps extends CommonProps {\n sticky?: boolean;\n children?: ReactNode;\n}\n\nexport const ModalHeaderDataTids = {\n root: 'ModalHeader__root',\n} as const;\n\n/**\n * Шапка модального окна\n *\n * @visibleName Modal.Header\n */\nfunction ModalHeader(props: ModalHeaderProps) {\n const theme = useContext(ThemeContext);\n const modal = useContext(ModalContext);\n const layout = useResponsiveLayout();\n\n const { sticky = !layout.isMobile, children } = props;\n\n useEffect(() => {\n modal.setHasHeader?.();\n\n return () => modal.setHasHeader?.(false);\n }, []);\n\n const renderContent = (fixed = false) => {\n return (\n <div\n data-tid={ModalHeaderDataTids.root}\n className={cx({\n [styles.header(theme)]: true,\n [styles.mobileHeader(theme)]: layout.isMobile,\n [styles.headerAddPadding()]: Boolean(modal.additionalPadding),\n [styles.fixedHeader(theme)]: fixed,\n [styles.mobileFixedHeader(theme)]: fixed && layout.isMobile,\n [styles.headerWithClose(theme)]: Boolean(modal.close),\n [styles.mobileHeaderWithClose(theme)]: layout.isMobile,\n })}\n >\n {modal.close && <ModalClose requestClose={modal.close.requestClose} disableClose={modal.close.disableClose} />}\n {children}\n </div>\n );\n };\n\n return (\n <CommonWrapper {...props}>\n <ZIndex priority={'ModalHeader'} className={styles.headerWrapper()}>\n {sticky ? <Sticky side=\"top\">{renderContent}</Sticky> : renderContent()}\n </ZIndex>\n </CommonWrapper>\n );\n}\n\nModalHeader.__KONTUR_REACT_UI__ = 'ModalHeader';\nModalHeader.__MODAL_HEADER__ = true;\n\nexport { ModalHeader };\n"]}
1
+ {"version":3,"sources":["ModalHeader.tsx"],"names":["React","useContext","useLayoutEffect","Sticky","ThemeContext","ZIndex","CommonWrapper","cx","useResponsiveLayout","styles","ModalClose","ModalContext","ModalHeaderDataTids","root","ModalHeader","props","theme","modal","layout","sticky","isMobile","children","setHasHeader","renderContent","fixed","header","mobileHeader","headerAddPadding","Boolean","additionalPadding","fixedHeader","mobileFixedHeader","headerWithClose","close","mobileHeaderWithClose","requestClose","disableClose","headerWrapper","__KONTUR_REACT_UI__","__MODAL_HEADER__"],"mappings":"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","sourcesContent":["import React, { ReactNode, useContext, useLayoutEffect } from 'react';\n\nimport { Sticky } from '../Sticky';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { useResponsiveLayout } from '../ResponsiveLayout';\n\nimport { styles } from './Modal.styles';\nimport { ModalClose } from './ModalClose';\nimport { ModalContext } from './ModalContext';\n\nexport interface ModalHeaderProps extends CommonProps {\n sticky?: boolean;\n children?: ReactNode;\n}\n\nexport const ModalHeaderDataTids = {\n root: 'ModalHeader__root',\n} as const;\n\n/**\n * Шапка модального окна\n *\n * @visibleName Modal.Header\n */\nfunction ModalHeader(props: ModalHeaderProps) {\n const theme = useContext(ThemeContext);\n const modal = useContext(ModalContext);\n const layout = useResponsiveLayout();\n\n const { sticky = !layout.isMobile, children } = props;\n\n useLayoutEffect(() => {\n modal.setHasHeader?.();\n\n return () => modal.setHasHeader?.(false);\n }, []);\n\n const renderContent = (fixed = false) => {\n return (\n <div\n data-tid={ModalHeaderDataTids.root}\n className={cx({\n [styles.header(theme)]: true,\n [styles.mobileHeader(theme)]: layout.isMobile,\n [styles.headerAddPadding()]: Boolean(modal.additionalPadding),\n [styles.fixedHeader(theme)]: fixed,\n [styles.mobileFixedHeader(theme)]: fixed && layout.isMobile,\n [styles.headerWithClose(theme)]: Boolean(modal.close),\n [styles.mobileHeaderWithClose(theme)]: layout.isMobile,\n })}\n >\n {modal.close && <ModalClose requestClose={modal.close.requestClose} disableClose={modal.close.disableClose} />}\n {children}\n </div>\n );\n };\n\n return (\n <CommonWrapper {...props}>\n <ZIndex priority={'ModalHeader'} className={styles.headerWrapper()}>\n {sticky ? <Sticky side=\"top\">{renderContent}</Sticky> : renderContent()}\n </ZIndex>\n </CommonWrapper>\n );\n}\n\nModalHeader.__KONTUR_REACT_UI__ = 'ModalHeader';\nModalHeader.__MODAL_HEADER__ = true;\n\nexport { ModalHeader };\n"]}
@@ -122,8 +122,8 @@ export var Tooltip = rootNode(_class = responsiveLayout(_class = (_temp = _class
122
122
  _this.open();
123
123
  };
124
124
 
125
- _this.handleClickOutside = function (event) {
126
- _this.clickedOutside = _this.isClickOutsideContent(event) && _this.isClickOutsideAnchor(event);
125
+ _this.handleClickOutsideAnchor = function (event) {
126
+ _this.clickedOutside = _this.isClickOutsideContent(event);
127
127
 
128
128
  if (_this.clickedOutside) {
129
129
  if (_this.props.onCloseRequest) {
@@ -335,7 +335,7 @@ export var Tooltip = rootNode(_class = responsiveLayout(_class = (_temp = _class
335
335
  return {
336
336
  layerProps: {
337
337
  active: true,
338
- onClickOutside: this.handleClickOutside
338
+ onClickOutside: this.handleClickOutsideAnchor
339
339
  },
340
340
  popupProps: {
341
341
  opened: true,
@@ -372,7 +372,7 @@ export var Tooltip = rootNode(_class = responsiveLayout(_class = (_temp = _class
372
372
  return {
373
373
  layerProps: {
374
374
  active: this.state.opened,
375
- onClickOutside: this.handleClickOutside
375
+ onClickOutside: this.handleClickOutsideAnchor
376
376
  },
377
377
  popupProps: {
378
378
  onClick: this.handleClick,
@@ -393,7 +393,7 @@ export var Tooltip = rootNode(_class = responsiveLayout(_class = (_temp = _class
393
393
  return {
394
394
  layerProps: {
395
395
  active: this.state.opened,
396
- onClickOutside: this.handleClickOutside
396
+ onClickOutside: this.handleClickOutsideAnchor
397
397
  },
398
398
  popupProps: {
399
399
  onFocus: this.handleFocus,
@@ -417,16 +417,8 @@ export var Tooltip = rootNode(_class = responsiveLayout(_class = (_temp = _class
417
417
  };
418
418
 
419
419
  _proto.isClickOutsideContent = function isClickOutsideContent(event) {
420
- return this.isClickOutside(event, this.contentElement);
421
- };
422
-
423
- _proto.isClickOutsideAnchor = function isClickOutsideAnchor(event) {
424
- return this.isClickOutside(event, this.getAnchorElement());
425
- };
426
-
427
- _proto.isClickOutside = function isClickOutside(event, target) {
428
- if (target && event.target instanceof Element) {
429
- return !containsTargetOrRenderContainer(event.target)(target);
420
+ if (this.contentElement && event.target instanceof Element) {
421
+ return !containsTargetOrRenderContainer(event.target)(this.contentElement);
430
422
  }
431
423
 
432
424
  return true;
@@ -1 +1 @@
1
- {"version":3,"sources":["Tooltip.tsx"],"names":["React","warning","isEqual","isNullable","ThemeFactory","DefaultPosition","Popup","RenderLayer","CrossIcon","containsTargetOrRenderContainer","ThemeContext","isTestEnv","CommonWrapper","responsiveLayout","rootNode","styles","TooltipDataTids","root","content","Positions","Tooltip","state","opened","focused","hoverTimeout","contentElement","positions","clickedOutside","popupRef","createRef","renderContent","props","render","refContent","tooltipContent","theme","renderCloseButton","getAnchorElement","current","anchorElement","mobileCloseHandler","trigger","close","node","open","setState","handleMouseEnter","event","isHoverAnchor","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","isMobileLayout","relatedTarget","handleClick","handleClickOutside","isClickOutsideContent","isClickOutsideAnchor","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","children","popup","renderPopup","setRootNode","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","isClickOutside","Element","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { isNullable } from '../../lib/utils';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: () => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport const TooltipDataTids = {\n root: 'Tooltip__root',\n content: 'Tooltip__content',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\n@responsiveLayout\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n private isMobileLayout!: boolean;\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (isNullable(content)) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)} data-tid={TooltipDataTids.content}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross || this.isMobileLayout) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<HTMLElement> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) {\n return;\n }\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n if (this.isMobileLayout) {\n return popup;\n }\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n data-tid={TooltipDataTids.root}\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n mobileOnCloseRequest={this.mobileCloseHandler}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private mobileCloseHandler = () => {\n if (this.props.trigger === 'manual' || this.props.trigger === 'closed' || this.props.trigger === 'opened') {\n return;\n }\n\n this.close();\n };\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n\n switch (this.props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutside,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutside,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutside,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutside = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event) && this.isClickOutsideAnchor(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n return this.isClickOutside(event, this.contentElement);\n }\n\n private isClickOutsideAnchor(event: Event) {\n return this.isClickOutside(event, this.getAnchorElement());\n }\n\n private isClickOutside(event: Event, target: Nullable<HTMLElement>) {\n if (target && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(target);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n\n this.close();\n };\n}\n"]}
1
+ {"version":3,"sources":["Tooltip.tsx"],"names":["React","warning","isEqual","isNullable","ThemeFactory","DefaultPosition","Popup","RenderLayer","CrossIcon","containsTargetOrRenderContainer","ThemeContext","isTestEnv","CommonWrapper","responsiveLayout","rootNode","styles","TooltipDataTids","root","content","Positions","Tooltip","state","opened","focused","hoverTimeout","contentElement","positions","clickedOutside","popupRef","createRef","renderContent","props","render","refContent","tooltipContent","theme","renderCloseButton","getAnchorElement","current","anchorElement","mobileCloseHandler","trigger","close","node","open","setState","handleMouseEnter","event","isHoverAnchor","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","isMobileLayout","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","children","popup","renderPopup","setRootNode","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { isNullable } from '../../lib/utils';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: () => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport const TooltipDataTids = {\n root: 'Tooltip__root',\n content: 'Tooltip__content',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\n@responsiveLayout\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n private isMobileLayout!: boolean;\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (isNullable(content)) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)} data-tid={TooltipDataTids.content}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross || this.isMobileLayout) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<HTMLElement> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) {\n return;\n }\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n if (this.isMobileLayout) {\n return popup;\n }\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n data-tid={TooltipDataTids.root}\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n mobileOnCloseRequest={this.mobileCloseHandler}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private mobileCloseHandler = () => {\n if (this.props.trigger === 'manual' || this.props.trigger === 'closed' || this.props.trigger === 'opened') {\n return;\n }\n\n this.close();\n };\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n\n switch (this.props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n\n this.close();\n };\n}\n"]}
@@ -160,10 +160,8 @@ export declare class Tooltip extends React.PureComponent<TooltipProps, TooltipSt
160
160
  private handleMouseEnter;
161
161
  private handleMouseLeave;
162
162
  private handleClick;
163
- private handleClickOutside;
163
+ private handleClickOutsideAnchor;
164
164
  private isClickOutsideContent;
165
- private isClickOutsideAnchor;
166
- private isClickOutside;
167
165
  private handleFocus;
168
166
  private handleBlur;
169
167
  private handleCloseButtonClick;
@@ -5,7 +5,7 @@ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _temp
5
5
  import { css, memoizeStyle } from "../../../lib/theming/Emotion";
6
6
  export var styles = memoizeStyle({
7
7
  root: function root(t) {
8
- return css(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n overflow: auto;\n padding: 5px ", ";\n outline: none;\n background: ", ";\n "])), t.menuPaddingX, t.bgSecondary);
8
+ return css(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n overflow: auto;\n padding: 5px ", ";\n outline: none;\n box-sizing: content-box;\n background: ", ";\n "])), t.menuPaddingX, t.bgSecondary);
9
9
  },
10
10
  shadow: function shadow(t) {
11
11
  return css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n border: ", ";\n box-shadow: ", ";\n "])), t.menuBorder, t.menuShadow);
@@ -1 +1 @@
1
- {"version":3,"sources":["InternalMenu.styles.ts"],"names":["css","memoizeStyle","styles","root","t","menuPaddingX","bgSecondary","shadow","menuBorder","menuShadow","header","footer","fixedHeader","fixedFooter"],"mappings":"8MAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,2BAAlC;;;AAGA,OAAO,IAAMC,MAAM,GAAGD,YAAY,CAAC;AACjCE,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,WAAOJ,GAAP;;AAEiBI,IAAAA,CAAC,CAACC,YAFnB;;AAIgBD,IAAAA,CAAC,CAACE,WAJlB;;AAMD,GARgC;;AAUjCC,EAAAA,MAViC,kBAU1BH,CAV0B,EAUhB;AACf,WAAOJ,GAAP;AACYI,IAAAA,CAAC,CAACI,UADd;AAEgBJ,IAAAA,CAAC,CAACK,UAFlB;;AAID,GAfgC;;AAiBjCC,EAAAA,MAjBiC,oBAiBxB;AACP,WAAOV,GAAP;;;;;;;;;;AAUD,GA5BgC;;AA8BjCW,EAAAA,MA9BiC,oBA8BxB;AACP,WAAOX,GAAP;;;;;;;;;;AAUD,GAzCgC;;AA2CjCY,EAAAA,WA3CiC,yBA2CnB;AACZ,WAAOZ,GAAP;;;AAGD,GA/CgC;;AAiDjCa,EAAAA,WAjDiC,yBAiDnB;AACZ,WAAOb,GAAP;;;AAGD,GArDgC,EAAD,CAA3B","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n overflow: auto;\n padding: 5px ${t.menuPaddingX};\n outline: none;\n background: ${t.bgSecondary};\n `;\n },\n\n shadow(t: Theme) {\n return css`\n border: ${t.menuBorder};\n box-shadow: ${t.menuShadow};\n `;\n },\n\n header() {\n return css`\n top: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n footer() {\n return css`\n bottom: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n fixedHeader() {\n return css`\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n\n fixedFooter() {\n return css`\n box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n});\n"]}
1
+ {"version":3,"sources":["InternalMenu.styles.ts"],"names":["css","memoizeStyle","styles","root","t","menuPaddingX","bgSecondary","shadow","menuBorder","menuShadow","header","footer","fixedHeader","fixedFooter"],"mappings":"8MAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,2BAAlC;;;AAGA,OAAO,IAAMC,MAAM,GAAGD,YAAY,CAAC;AACjCE,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,WAAOJ,GAAP;;AAEiBI,IAAAA,CAAC,CAACC,YAFnB;;;AAKgBD,IAAAA,CAAC,CAACE,WALlB;;AAOD,GATgC;;AAWjCC,EAAAA,MAXiC,kBAW1BH,CAX0B,EAWhB;AACf,WAAOJ,GAAP;AACYI,IAAAA,CAAC,CAACI,UADd;AAEgBJ,IAAAA,CAAC,CAACK,UAFlB;;AAID,GAhBgC;;AAkBjCC,EAAAA,MAlBiC,oBAkBxB;AACP,WAAOV,GAAP;;;;;;;;;;AAUD,GA7BgC;;AA+BjCW,EAAAA,MA/BiC,oBA+BxB;AACP,WAAOX,GAAP;;;;;;;;;;AAUD,GA1CgC;;AA4CjCY,EAAAA,WA5CiC,yBA4CnB;AACZ,WAAOZ,GAAP;;;AAGD,GAhDgC;;AAkDjCa,EAAAA,WAlDiC,yBAkDnB;AACZ,WAAOb,GAAP;;;AAGD,GAtDgC,EAAD,CAA3B","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n overflow: auto;\n padding: 5px ${t.menuPaddingX};\n outline: none;\n box-sizing: content-box;\n background: ${t.bgSecondary};\n `;\n },\n\n shadow(t: Theme) {\n return css`\n border: ${t.menuBorder};\n box-shadow: ${t.menuShadow};\n `;\n },\n\n header() {\n return css`\n top: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n footer() {\n return css`\n bottom: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n fixedHeader() {\n return css`\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n\n fixedFooter() {\n return css`\n box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n});\n"]}
@@ -1,5 +1,4 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
3
2
  import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
4
3
 
5
4
  var _class, _class2, _temp;
@@ -29,7 +28,8 @@ export var RenderLayer = rootNode(_class = (_temp = _class2 = /*#__PURE__*/funct
29
28
 
30
29
  _this.handleNativeDocClick = function (event) {
31
30
  var target = event.target || event.srcElement;
32
- var node = getRootNode(_assertThisInitialized(_this)) || getRootNode(_this.props.getAnchorElement == null ? void 0 : _this.props.getAnchorElement());
31
+
32
+ var node = _this.getAnchorNode();
33
33
 
34
34
  if (!node || target instanceof Element && containsTargetOrRenderContainer(target)(node)) {
35
35
  return;
@@ -73,17 +73,20 @@ export var RenderLayer = rootNode(_class = (_temp = _class2 = /*#__PURE__*/funct
73
73
  }, this.props), React.Children.only(this.props.children));
74
74
  };
75
75
 
76
- _proto.attachListeners = function attachListeners() {
77
- var _this$props$getAnchor, _this$props;
76
+ _proto.getAnchorNode = function getAnchorNode() {
77
+ var getAnchorElement = this.props.getAnchorElement;
78
+ return getAnchorElement ? getAnchorElement() : getRootNode(this);
79
+ };
78
80
 
79
- var rootNode = getRootNode(this) || ((_this$props$getAnchor = (_this$props = this.props).getAnchorElement) == null ? void 0 : _this$props$getAnchor.call(_this$props));
81
+ _proto.attachListeners = function attachListeners() {
82
+ var node = this.getAnchorNode();
80
83
 
81
- if (!rootNode) {
84
+ if (!node) {
82
85
  return;
83
86
  }
84
87
 
85
88
  this.focusOutsideListenerToken = listenFocusOutside(function () {
86
- return [rootNode];
89
+ return [node];
87
90
  }, this.handleFocusOutside);
88
91
  window.addEventListener('blur', this.handleFocusOutside);
89
92
  document.addEventListener('ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown', this.handleNativeDocClick);
@@ -1 +1 @@
1
- {"version":3,"sources":["RenderLayer.tsx"],"names":["React","listen","listenFocusOutside","containsTargetOrRenderContainer","CommonWrapper","getRootNode","rootNode","RenderLayer","focusOutsideListenerToken","handleFocusOutside","event","props","onFocusOutside","handleNativeDocClick","target","srcElement","node","getAnchorElement","Element","onClickOutside","componentDidMount","active","attachListeners","componentDidUpdate","prevProps","detachListeners","componentWillUnmount","render","setRootNode","Children","only","children","window","addEventListener","document","documentElement","remove","removeEventListener","Component","__KONTUR_REACT_UI__","propTypes","propName","componentName","Error","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { listen as listenFocusOutside, containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { Nullable } from '../../typings/utility-types';\n\nexport interface RenderLayerProps extends CommonProps {\n children: JSX.Element;\n onClickOutside?: (e: Event) => void;\n onFocusOutside?: (e: Event) => void;\n active?: boolean;\n getAnchorElement?: () => Nullable<HTMLElement>;\n}\n\n@rootNode\nexport class RenderLayer extends React.Component<RenderLayerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderLayer';\n\n public static propTypes = {\n active(props: RenderLayerProps, propName: keyof RenderLayerProps, componentName: string) {\n const { active, onClickOutside, onFocusOutside } = props;\n if (active && !(onClickOutside || onFocusOutside)) {\n return new Error(\n `[${componentName}]: using the component without either 'onClickOutside' or 'onFocusOutside' callback is pointless.`,\n );\n }\n },\n };\n\n public static defaultProps = {\n active: true,\n };\n\n private focusOutsideListenerToken: {\n remove: () => void;\n } | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.active) {\n this.attachListeners();\n }\n }\n\n public componentDidUpdate(prevProps: RenderLayerProps) {\n if (!prevProps.active && this.props.active) {\n this.attachListeners();\n }\n if (prevProps.active && !this.props.active) {\n this.detachListeners();\n }\n }\n\n public componentWillUnmount() {\n if (this.props.active) {\n this.detachListeners();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {React.Children.only(this.props.children)}\n </CommonWrapper>\n );\n }\n\n private attachListeners() {\n const rootNode = getRootNode(this) || this.props.getAnchorElement?.();\n if (!rootNode) {\n return;\n }\n\n this.focusOutsideListenerToken = listenFocusOutside(() => [rootNode], this.handleFocusOutside);\n window.addEventListener('blur', this.handleFocusOutside);\n document.addEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private detachListeners() {\n if (this.focusOutsideListenerToken) {\n this.focusOutsideListenerToken.remove();\n this.focusOutsideListenerToken = null;\n }\n\n window.removeEventListener('blur', this.handleFocusOutside);\n document.removeEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private handleFocusOutside = (event: Event) => {\n if (this.props.onFocusOutside) {\n this.props.onFocusOutside(event);\n }\n };\n\n private handleNativeDocClick = (event: Event) => {\n const target = event.target || event.srcElement;\n const node = getRootNode(this) || getRootNode(this.props.getAnchorElement?.());\n\n if (!node || (target instanceof Element && containsTargetOrRenderContainer(target)(node))) {\n return;\n }\n\n if (this.props.onClickOutside) {\n this.props.onClickOutside(event);\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["RenderLayer.tsx"],"names":["React","listen","listenFocusOutside","containsTargetOrRenderContainer","CommonWrapper","getRootNode","rootNode","RenderLayer","focusOutsideListenerToken","handleFocusOutside","event","props","onFocusOutside","handleNativeDocClick","target","srcElement","node","getAnchorNode","Element","onClickOutside","componentDidMount","active","attachListeners","componentDidUpdate","prevProps","detachListeners","componentWillUnmount","render","setRootNode","Children","only","children","getAnchorElement","window","addEventListener","document","documentElement","remove","removeEventListener","Component","__KONTUR_REACT_UI__","propTypes","propName","componentName","Error","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { listen as listenFocusOutside, containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { Nullable } from '../../typings/utility-types';\n\nexport interface RenderLayerProps extends CommonProps {\n children: JSX.Element;\n onClickOutside?: (e: Event) => void;\n onFocusOutside?: (e: Event) => void;\n active?: boolean;\n getAnchorElement?: () => Nullable<HTMLElement>;\n}\n\n@rootNode\nexport class RenderLayer extends React.Component<RenderLayerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderLayer';\n\n public static propTypes = {\n active(props: RenderLayerProps, propName: keyof RenderLayerProps, componentName: string) {\n const { active, onClickOutside, onFocusOutside } = props;\n if (active && !(onClickOutside || onFocusOutside)) {\n return new Error(\n `[${componentName}]: using the component without either 'onClickOutside' or 'onFocusOutside' callback is pointless.`,\n );\n }\n },\n };\n\n public static defaultProps = {\n active: true,\n };\n\n private focusOutsideListenerToken: {\n remove: () => void;\n } | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.active) {\n this.attachListeners();\n }\n }\n\n public componentDidUpdate(prevProps: RenderLayerProps) {\n if (!prevProps.active && this.props.active) {\n this.attachListeners();\n }\n if (prevProps.active && !this.props.active) {\n this.detachListeners();\n }\n }\n\n public componentWillUnmount() {\n if (this.props.active) {\n this.detachListeners();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {React.Children.only(this.props.children)}\n </CommonWrapper>\n );\n }\n\n private getAnchorNode(): Nullable<HTMLElement> {\n const { getAnchorElement } = this.props;\n return getAnchorElement ? getAnchorElement() : getRootNode(this);\n }\n\n private attachListeners() {\n const node = this.getAnchorNode();\n if (!node) {\n return;\n }\n\n this.focusOutsideListenerToken = listenFocusOutside(() => [node], this.handleFocusOutside);\n window.addEventListener('blur', this.handleFocusOutside);\n document.addEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private detachListeners() {\n if (this.focusOutsideListenerToken) {\n this.focusOutsideListenerToken.remove();\n this.focusOutsideListenerToken = null;\n }\n\n window.removeEventListener('blur', this.handleFocusOutside);\n document.removeEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private handleFocusOutside = (event: Event) => {\n if (this.props.onFocusOutside) {\n this.props.onFocusOutside(event);\n }\n };\n\n private handleNativeDocClick = (event: Event) => {\n const target = event.target || event.srcElement;\n const node = this.getAnchorNode();\n\n if (!node || (target instanceof Element && containsTargetOrRenderContainer(target)(node))) {\n return;\n }\n\n if (this.props.onClickOutside) {\n this.props.onClickOutside(event);\n }\n };\n}\n"]}
@@ -22,6 +22,7 @@ export declare class RenderLayer extends React.Component<RenderLayerProps> {
22
22
  componentDidUpdate(prevProps: RenderLayerProps): void;
23
23
  componentWillUnmount(): void;
24
24
  render(): JSX.Element;
25
+ private getAnchorNode;
25
26
  private attachListeners;
26
27
  private detachListeners;
27
28
  private handleFocusOutside;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "4.2.1",
3
+ "version": "4.2.2",
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/4.2.1/",
8
+ "homepage": "https://tech.skbkontur.ru/react-ui/4.2.2/",
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "git@github.com:skbkontur/retail-ui.git"