@skbkontur/react-ui 4.22.6-next.0 → 4.22.6

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 (40) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/cjs/components/Autocomplete/Autocomplete.js +8 -4
  3. package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
  4. package/cjs/components/Autocomplete/Autocomplete.styles.d.ts +1 -0
  5. package/cjs/components/Autocomplete/Autocomplete.styles.js +6 -1
  6. package/cjs/components/Autocomplete/Autocomplete.styles.js.map +1 -1
  7. package/cjs/components/Hint/Hint.d.ts +3 -4
  8. package/cjs/components/Hint/Hint.js +8 -9
  9. package/cjs/components/Hint/Hint.js.map +1 -1
  10. package/cjs/components/Tooltip/Tooltip.d.ts +5 -10
  11. package/cjs/components/Tooltip/Tooltip.js +20 -59
  12. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  13. package/cjs/internal/Popup/Popup.d.ts +4 -15
  14. package/cjs/internal/Popup/Popup.js +4 -67
  15. package/cjs/internal/Popup/Popup.js.map +1 -1
  16. package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -24
  17. package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +0 -1
  18. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +0 -1
  19. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +1 -3
  20. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  21. package/components/Autocomplete/Autocomplete/Autocomplete.js +6 -2
  22. package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
  23. package/components/Autocomplete/Autocomplete.styles/Autocomplete.styles.js +4 -1
  24. package/components/Autocomplete/Autocomplete.styles/Autocomplete.styles.js.map +1 -1
  25. package/components/Autocomplete/Autocomplete.styles.d.ts +1 -0
  26. package/components/Hint/Hint/Hint.js +45 -50
  27. package/components/Hint/Hint/Hint.js.map +1 -1
  28. package/components/Hint/Hint.d.ts +3 -4
  29. package/components/Tooltip/Tooltip/Tooltip.js +43 -64
  30. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  31. package/components/Tooltip/Tooltip.d.ts +5 -10
  32. package/internal/Popup/Popup/Popup.js +7 -50
  33. package/internal/Popup/Popup/Popup.js.map +1 -1
  34. package/internal/Popup/Popup.d.ts +4 -15
  35. package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -24
  36. package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +0 -1
  37. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +1 -2
  38. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  39. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +0 -1
  40. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
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.22.6](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.22.5...@skbkontur/react-ui@4.22.6) (2024-05-28)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **Autocomplete:** fix dropdown position when disablePortal ([#3426](https://github.com/skbkontur/retail-ui/issues/3426)) ([a991806](https://github.com/skbkontur/retail-ui/commit/a991806862eedbbc9dfb76dfa95cca94d24b6974))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [4.22.5](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.22.4...@skbkontur/react-ui@4.22.5) (2024-05-14)
7
18
 
8
19
 
@@ -8,6 +8,7 @@ var _decorators = require("../../lib/locale/decorators");
8
8
  var _utils = require("../../lib/utils");
9
9
  var _ThemeContext = require("../../lib/theming/ThemeContext");
10
10
 
11
+ var _Emotion = require("../../lib/theming/Emotion");
11
12
  var _identifiers = require("../../lib/events/keyboard/identifiers");
12
13
  var _Input = require("../Input");
13
14
  var _DropdownContainer = require("../../internal/DropdownContainer");
@@ -26,7 +27,7 @@ var _getDOMRect = require("../../lib/dom/getDOMRect");
26
27
 
27
28
  var _Autocomplete = require("./Autocomplete.styles");
28
29
  var _locale = require("./locale");
29
- var _getAutocompleteTheme = require("./getAutocompleteTheme");var _excluded = ["onValueChange", "onKeyDown", "onFocus", "onBlur", "renderItem", "disablePortal", "hasShadow", "menuAlign", "menuMaxHeight", "preventWindowScroll", "source", "width", "mobileMenuHeaderText", "aria-label"];var _dec, _class, _class2, _temp;
30
+ var _getAutocompleteTheme = require("./getAutocompleteTheme");var _excluded = ["onValueChange", "onKeyDown", "onFocus", "onBlur", "renderItem", "disablePortal", "hasShadow", "menuAlign", "menuMaxHeight", "preventWindowScroll", "source", "menuPos", "width", "mobileMenuHeaderText", "aria-label"];var _dec, _class, _class2, _temp;
30
31
 
31
32
  function match(pattern, items) {
32
33
  if (!pattern || !items) {
@@ -211,7 +212,7 @@ Autocomplete = (_dec = (0, _decorators.locale)('Autocomplete', _locale.Autocompl
211
212
 
212
213
 
213
214
 
214
- renderMain = function (props) {
215
+ renderMain = function (props) {var _cx;
215
216
  var focused = _this.state.focused;
216
217
 
217
218
  var isMobile = _this.isMobileLayout;
@@ -232,7 +233,8 @@ Autocomplete = (_dec = (0, _decorators.locale)('Autocomplete', _locale.Autocompl
232
233
 
233
234
 
234
235
 
235
- props.onValueChange,onKeyDown = props.onKeyDown,onFocus = props.onFocus,onBlur = props.onBlur,_renderItem = props.renderItem,disablePortal = props.disablePortal,hasShadow = props.hasShadow,menuAlign = props.menuAlign,menuMaxHeight = props.menuMaxHeight,preventWindowScroll = props.preventWindowScroll,source = props.source,_props$width = props.width,width = _props$width === void 0 ? _this.theme.inputWidth : _props$width,mobileMenuHeaderText = props.mobileMenuHeaderText,ariaLabel = props['aria-label'],rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
236
+
237
+ props.onValueChange,onKeyDown = props.onKeyDown,onFocus = props.onFocus,onBlur = props.onBlur,_renderItem = props.renderItem,disablePortal = props.disablePortal,hasShadow = props.hasShadow,menuAlign = props.menuAlign,menuMaxHeight = props.menuMaxHeight,preventWindowScroll = props.preventWindowScroll,source = props.source,menuPos = props.menuPos,_props$width = props.width,width = _props$width === void 0 ? _this.theme.inputWidth : _props$width,mobileMenuHeaderText = props.mobileMenuHeaderText,ariaLabel = props['aria-label'],rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
236
238
 
237
239
  var inputProps = (0, _extends2.default)({},
238
240
  rest, {
@@ -248,7 +250,9 @@ Autocomplete = (_dec = (0, _decorators.locale)('Autocomplete', _locale.Autocompl
248
250
  _react.default.createElement(_RenderLayer.RenderLayer, { onFocusOutside: _this.handleBlur, onClickOutside: _this.handleClickOutside, active: focused }, /*#__PURE__*/
249
251
  _react.default.createElement("span", {
250
252
  "data-tid": AutocompleteDataTids.root,
251
- className: _Autocomplete.styles.root(_this.theme),
253
+ className: (0, _Emotion.cx)(_Autocomplete.styles.root(_this.theme), (_cx = {}, _cx[
254
+ _Autocomplete.styles.noPortal()] = disablePortal, _cx)),
255
+
252
256
  style: { width: width },
253
257
  ref: _this.refRootSpan }, /*#__PURE__*/
254
258
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Autocomplete.tsx"],"names":["match","pattern","items","Promise","resolve","lowerCasedPattern","toLowerCase","itemsMatchingPattern","filter","item","includes","renderItem","AutocompleteDataTids","root","menu","AutocompleteIds","Autocomplete","AutocompleteLocaleHelper","responsiveLayout","rootNode","state","selected","focused","isMobileOpened","opened","input","menuId","requestId","getProps","defaultProps","renderMain","props","isMobile","isMobileLayout","onValueChange","onKeyDown","onFocus","onBlur","_renderItem","disablePortal","hasShadow","menuAlign","menuMaxHeight","preventWindowScroll","source","width","theme","inputWidth","mobileMenuHeaderText","ariaLabel","rest","inputProps","autoComplete","handleValueChange","handleKeyDown","handleFocus","ref","refInput","handleBlur","handleClickOutside","styles","refRootSpan","renderMobileMenu","renderMenu","autoFocus","onKeyPress","handleKeyPressMobile","value","placeholder","locale","enterValue","handleCloseMobile","refMobilePopup","refMenu","mobilePopup","close","length","getItems","renderHints","map","i","handleMenuItemClick","size","fireChange","setState","e","key","event","blur","preventDefault","up","down","enter","getAnchor","el","span","rootSpan","focus","componentDidUpdate","prevProps","updateItems","render","setRootNode","notFound","updateValue","menuWidth","menuPos","menuProps","maxHeight","handleItemClick","index","button","choose","trim","promise","expectingId","then","React","Component","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","func","oneOfType","array"],"mappings":";;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,8D;;AAEA,SAASA,KAAT,CAAeC,OAAf,EAAgCC,KAAhC,EAAiD;AAC/C,MAAI,CAACD,OAAD,IAAY,CAACC,KAAjB,EAAwB;AACtB,WAAOC,OAAO,CAACC,OAAR,CAAgB,EAAhB,CAAP;AACD;;AAED,MAAMC,iBAAiB,GAAGJ,OAAO,CAACK,WAAR,EAA1B;AACA,MAAMC,oBAAoB,GAAGL,KAAK,CAACM,MAAN,CAAa,UAACC,IAAD,EAAU;AAClD,WAAOA,IAAI,CAACH,WAAL,GAAmBI,QAAnB,CAA4BL,iBAA5B,CAAP;AACD,GAF4B,CAA7B;;AAIA,SAAOF,OAAO,CAACC,OAAR,CAAgBG,oBAAhB,CAAP;AACD;;AAED,SAASI,UAAT,CAAoBF,IAApB,EAA+B;AAC7B,SAAOA,IAAP;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CM,IAAMG,oBAAoB,GAAG;AAClCC,EAAAA,IAAI,EAAE,oBAD4B;AAElCC,EAAAA,IAAI,EAAE,oBAF4B,EAA7B,C;;;AAKA,IAAMC,eAAe,GAAG;AAC7BD,EAAAA,IAAI,EAAEF,oBAAoB,CAACE,IADE,EAAxB,C;;;;;;;;;;AAWP;AACA;AACA;AACA;AACA,G;;;;AAIaE,Y,WADZ,wBAAO,cAAP,EAAuBC,gCAAvB,C,MAFAC,2B,eACAC,kB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCQC,IAAAA,K,GAA2B;AAChClB,MAAAA,KAAK,EAAE,IADyB;AAEhCmB,MAAAA,QAAQ,EAAE,CAAC,CAFqB;AAGhCC,MAAAA,OAAO,EAAE,KAHuB;AAIhCC,MAAAA,cAAc,EAAE,KAJgB,E;;;;;;AAU1BC,IAAAA,M,GAAS,K;AACTC,IAAAA,K,GAAyB,I;;AAEzBC,IAAAA,M,GAASX,eAAe,CAACD,IAAhB,GAAuB,yB;;;;AAIhCa,IAAAA,S,GAAY,C;;AAEZC,IAAAA,Q,GAAW,0CAAkBZ,YAAY,CAACa,YAA/B,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCZC,IAAAA,U,GAAa,UAACC,KAAD,EAAsD;AACxE,UAAQT,OAAR,GAAoB,MAAKF,KAAzB,CAAQE,OAAR;;AAEA,UAAMU,QAAQ,GAAG,MAAKC,cAAtB;;AAEA;AACEC,MAAAA,aADF;;;;;;;;;;;;;;;AAgBIH,MAAAA,KAhBJ,CACEG,aADF,CAEEC,SAFF,GAgBIJ,KAhBJ,CAEEI,SAFF,CAGEC,OAHF,GAgBIL,KAhBJ,CAGEK,OAHF,CAIEC,MAJF,GAgBIN,KAhBJ,CAIEM,MAJF,CAKcC,WALd,GAgBIP,KAhBJ,CAKEpB,UALF,CAME4B,aANF,GAgBIR,KAhBJ,CAMEQ,aANF,CAOEC,SAPF,GAgBIT,KAhBJ,CAOES,SAPF,CAQEC,SARF,GAgBIV,KAhBJ,CAQEU,SARF,CASEC,aATF,GAgBIX,KAhBJ,CASEW,aATF,CAUEC,mBAVF,GAgBIZ,KAhBJ,CAUEY,mBAVF,CAWEC,MAXF,GAgBIb,KAhBJ,CAWEa,MAXF,gBAgBIb,KAhBJ,CAYEc,KAZF,CAYEA,KAZF,6BAYU,MAAKC,KAAL,CAAWC,UAZrB,gBAaEC,oBAbF,GAgBIjB,KAhBJ,CAaEiB,oBAbF,CAcgBC,SAdhB,GAgBIlB,KAhBJ,CAcE,YAdF,EAeKmB,IAfL,+CAgBInB,KAhBJ;;AAkBA,UAAMoB,UAAU;AACXD,MAAAA,IADW;AAEdL,QAAAA,KAAK,EAAE,MAFO;AAGdO,QAAAA,YAAY,EAAE,KAHA;AAIdlB,QAAAA,aAAa,EAAE,MAAKmB,iBAJN;AAKdlB,QAAAA,SAAS,EAAE,MAAKmB,aALF;AAMdlB,QAAAA,OAAO,EAAE,MAAKmB,WANA;AAOdC,QAAAA,GAAG,EAAE,MAAKC,QAPI,GAAhB;;;AAUA;AACE,qCAAC,wBAAD,IAAa,cAAc,EAAE,MAAKC,UAAlC,EAA8C,cAAc,EAAE,MAAKC,kBAAnE,EAAuF,MAAM,EAAErC,OAA/F;AACE;AACE,sBAAUV,oBAAoB,CAACC,IADjC;AAEE,UAAA,SAAS,EAAE+C,qBAAO/C,IAAP,CAAY,MAAKiC,KAAjB,CAFb;AAGE,UAAA,KAAK,EAAE,EAAED,KAAK,EAALA,KAAF,EAHT;AAIE,UAAA,GAAG,EAAE,MAAKgB,WAJZ;;AAME,qCAAC,YAAD,2BAAO,cAAYZ,SAAnB,EAA8B,iBAAe,MAAKvB,MAAlD,IAA8DyB,UAA9D,EANF;AAOGnB,QAAAA,QAAQ,GAAG,MAAK8B,gBAAL,EAAH,GAA6B,MAAKC,UAAL,EAPxC,CADF,CADF;;;;AAaD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDOD,IAAAA,gB,GAAmB,YAAM;AAC/B,UAAMX,UAAsB,GAAG;AAC7BC,QAAAA,YAAY,EAAE,KADe;AAE7BY,QAAAA,SAAS,EAAE,IAFkB;AAG7BnB,QAAAA,KAAK,EAAE,MAHsB;AAI7BX,QAAAA,aAAa,EAAE,MAAKmB,iBAJS;AAK7BY,QAAAA,UAAU,EAAE,MAAKC,oBALY;AAM7BC,QAAAA,KAAK,EAAE,MAAKpC,KAAL,CAAWoC,KANW;AAO7BC,QAAAA,WAAW,EAAE,MAAKC,MAAL,CAAYC,UAPI,EAA/B;;;AAUA,UAAMpE,KAAK,GAAG,MAAKkB,KAAL,CAAWlB,KAAzB;;AAEA;AACE,qCAAC,wBAAD;AACE,UAAA,EAAE,EAAE,MAAKwB,MADX;AAEE,UAAA,oBAAoB,eAAE,6BAAC,YAAD,EAAWyB,UAAX,CAFxB;AAGE,UAAA,OAAO,EAAE,MAAKpB,KAAL,CAAWiB,oBAHtB;AAIE,UAAA,MAAM,EAAE,MAAK5B,KAAL,CAAWG,cAJrB;AAKE,UAAA,cAAc,EAAE,MAAKgD,iBALvB;AAME,UAAA,GAAG,EAAE,MAAKC,cANZ;;AAQE,qCAAC,UAAD,IAAM,GAAG,EAAE,MAAKC,OAAhB,EAAyB,WAAW,uBAAE,MAAKC,WAAP,qBAAE,kBAAkBC,KAAxD,EAA+D,sBAAsB,MAArF,EAAsF,SAAS,EAAE,MAAjG;AACGzE,QAAAA,KAAK,IAAIA,KAAK,CAAC0E,MAAN,GAAe,CAAxB,IAA6B,MAAKC,QAAL,EADhC;AAEG,cAAKC,WAAL,EAFH,CARF,CADF;;;;AAeD,K;;AAEOD,IAAAA,Q,GAAW,YAAM;AACvB,UAAM3E,KAAK,GAAG,MAAKkB,KAAL,CAAWlB,KAAzB;AACA,UAAM8B,QAAQ,GAAG,MAAKC,cAAtB;;AAEA,aAAO/B,KAAK;AACRA,MAAAA,KAAK,CAAC6E,GAAN,CAAU,UAACtE,IAAD,EAAOuE,CAAP,EAAa;AACrB;AACE,uCAAC,kBAAD,IAAU,OAAO,EAAE,MAAKC,mBAAL,CAAyBD,CAAzB,CAAnB,EAAgD,GAAG,EAAEA,CAArD,EAAwD,QAAQ,EAAEhD,QAAlE,EAA4E,IAAI,EAAE,MAAKD,KAAL,CAAWmD,IAA7F;AACG,gBAAKtD,QAAL,GAAgBjB,UAAhB,CAA2BF,IAA3B,CADH,CADF;;;AAKD,OAND,CADQ;AAQR,UARJ;AASD,K;;AAEO4C,IAAAA,iB,GAAoB,UAACc,KAAD,EAAmB;AAC7C,YAAK3C,MAAL,GAAc,IAAd;;AAEA,YAAK2D,UAAL,CAAgBhB,KAAhB;AACD,K;;AAEOI,IAAAA,iB,GAAoB,YAAM;AAChC,YAAKa,QAAL,CAAc;AACZ7D,QAAAA,cAAc,EAAE,KADJ,EAAd;;;AAIA,YAAKmC,UAAL;AACD,K;;AAEOQ,IAAAA,oB,GAAuB,UAACmB,CAAD,EAAsB;AACnD,UAAIA,CAAC,CAACC,GAAF,KAAU,OAAd,EAAuB;AACrB,oCAAKZ,WAAL,wCAAkBC,KAAlB;AACD;AACF,K;;AAEOpB,IAAAA,W,GAAc,UAACgC,KAAD,EAA+C;AACnE,UAAI,MAAKtD,cAAT,EAAyB;AACvB,cAAKmD,QAAL,CAAc,EAAE7D,cAAc,EAAE,IAAlB,EAAd;AACD;;AAED,UAAI,MAAKH,KAAL,CAAWE,OAAf,EAAwB;AACtB;AACD;;AAED,YAAK8D,QAAL,CAAc,EAAE9D,OAAO,EAAE,IAAX,EAAd;;AAEA,UAAI,MAAKS,KAAL,CAAWK,OAAf,EAAwB;AACtB,cAAKL,KAAL,CAAWK,OAAX,CAAmBmD,KAAnB;AACD;AACF,K;;AAEO7B,IAAAA,U,GAAa,YAAM;AACzB,UAAI,CAAC,MAAKtC,KAAL,CAAWE,OAAhB,EAAyB;AACvB;AACD;;AAED,YAAKE,MAAL,GAAc,KAAd;AACA,YAAK4D,QAAL,CAAc,EAAElF,KAAK,EAAE,IAAT,EAAeoB,OAAO,EAAE,KAAxB,EAAd;;AAEA,UAAI,MAAKG,KAAT,EAAgB;AACd,cAAKA,KAAL,CAAW+D,IAAX;AACD;;AAED,UAAI,MAAKzD,KAAL,CAAWM,MAAf,EAAuB;AACrB,cAAKN,KAAL,CAAWM,MAAX;AACD;AACF,K;;AAEOsB,IAAAA,kB,GAAqB,UAAC0B,CAAD,EAAc;AACzC,4CAAgBA,CAAhB;AACA,YAAK3B,UAAL;AACD,K;;AAEOJ,IAAAA,a,GAAgB,UAAC+B,CAAD,EAA8C;AACpE,UAAI,MAAKtD,KAAL,CAAWI,SAAf,EAA0B;AACxB,cAAKJ,KAAL,CAAWI,SAAX,CAAqBkD,CAArB;AACD;AACD,cAAQ,IAAR;AACE,aAAK,8BAAYA,CAAZ,CAAL;AACEA,UAAAA,CAAC,CAACI,cAAF;AACA,gBAAKL,QAAL,CAAc,EAAElF,KAAK,EAAE,IAAT,EAAd;AACA;AACF,aAAK,+BAAamF,CAAb,CAAL;AACEA,UAAAA,CAAC,CAACI,cAAF;AACA,cAAI,MAAK3E,IAAT,EAAe;AACb,kBAAKA,IAAL,CAAU4E,EAAV;AACD;AACD;AACF,aAAK,iCAAeL,CAAf,CAAL;AACEA,UAAAA,CAAC,CAACI,cAAF;AACA,cAAI,MAAK3E,IAAT,EAAe;AACb,kBAAKA,IAAL,CAAU6E,IAAV;AACD;AACD;AACF,aAAK,6BAAWN,CAAX,CAAL;AACEA,UAAAA,CAAC,CAACI,cAAF,GADF,CACsB;AACpB,cAAI,MAAK3E,IAAT,EAAe;AACb,kBAAKA,IAAL,CAAU8E,KAAV,CAAgBP,CAAhB;AACD;AACD,iBAtBJ;;AAwBD,K;;;;;;AAMOQ,IAAAA,S,GAAY,YAAM;AACxB,aAAO,uEAAP;AACD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DOpC,IAAAA,Q,GAAW,UAACqC,EAAD,EAAsB;AACvC,YAAKrE,KAAL,GAAaqE,EAAb;AACD,K;;AAEOrB,IAAAA,O,GAAU,UAAC3D,IAAD,EAAuB;AACvC,YAAKA,IAAL,GAAYA,IAAZ;AACD,K;;AAEO+C,IAAAA,W,GAAc,UAACkC,IAAD,EAA2B;AAC/C,YAAKC,QAAL,GAAgBD,IAAhB;AACD,K;;AAEOvB,IAAAA,c,GAAiB,UAACE,WAAD,EAAqC;AAC5D,YAAKA,WAAL,GAAmBA,WAAnB;AACD,K,oDA5VD;AACF;AACA,K,OACSuB,K,GAAP,iBAAe,CACb,IAAI,KAAKxE,KAAT,EAAgB,CACd,KAAKA,KAAL,CAAWwE,KAAX,GACD,CACF,C,CAED;AACF;AACA,K,QACST,I,GAAP,gBAAc,CACZ,KAAK9B,UAAL,GACD,C,QAEMwC,kB,GAAP,4BAA0BC,SAA1B,EAAwD,CACtD,IAAIA,SAAS,CAAChC,KAAV,KAAoB,KAAKpC,KAAL,CAAWoC,KAAnC,EAA0C,CACxC,KAAKiC,WAAL,CAAiB,KAAKrE,KAAL,CAAWoC,KAAX,IAAoB,EAArC,EACD,CACF,C,QAEMkC,M,GAAP,kBAAgB,mBACd,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACvD,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAa,gDAAqBA,KAArB,CAAb,CACA,oBACE,6BAAC,0BAAD,CAAc,QAAd,IAAuB,KAAK,EAAE,MAAI,CAACA,KAAnC,iBACE,6BAAC,4BAAD,2BAAe,WAAW,EAAE,MAAI,CAACwD,WAAjC,IAAkD,MAAI,CAACvE,KAAvD,GACG,MAAI,CAACD,UADR,CADF,CADF,CAOD,CAVH,CADF,CAcD,C,QAiDOgD,W,GAAR,uBAAuC,CACrC,IAAM5E,KAAK,GAAG,KAAKkB,KAAL,CAAWlB,KAAzB,CAEA,IAAI,CAAC,KAAK6B,KAAL,CAAWoC,KAAhB,EAAuB,CACrB,oBAAO,6BAAC,wBAAD,QAAc,KAAKE,MAAL,CAAYC,UAA1B,CAAP,CACD,CAED,IAAI,CAAApE,KAAK,QAAL,YAAAA,KAAK,CAAE0E,MAAP,MAAkB,CAAlB,IAAuB,KAAK7C,KAAL,CAAWoC,KAAtC,EAA6C,CAC3C,oBAAO,6BAAC,wBAAD,QAAc,KAAKE,MAAL,CAAYkC,QAA1B,CAAP,CACD,CAED,IAAI,uBAAWrG,KAAX,KAAqB,KAAK6B,KAAL,CAAWoC,KAApC,EAA2C,CACzC,oBAAO,6BAAC,wBAAD,QAAc,KAAKE,MAAL,CAAYmC,WAA1B,CAAP,CACD,CAED,OAAO,IAAP,CACD,C,QAEOzC,U,GAAR,sBAAsC,CACpC,IAAM7D,KAAK,GAAG,KAAKkB,KAAL,CAAWlB,KAAzB,CACA,qBACE,KAAK0B,QAAL,EADF,CAAQc,aAAR,kBAAQA,aAAR,CAAuBF,SAAvB,kBAAuBA,SAAvB,CAAkCiE,SAAlC,kBAAkCA,SAAlC,CAA6C5D,KAA7C,kBAA6CA,KAA7C,CAAoDF,mBAApD,kBAAoDA,mBAApD,CAAyEF,SAAzE,kBAAyEA,SAAzE,CAAoFF,aAApF,kBAAoFA,aAApF,CAAmGmE,OAAnG,kBAAmGA,OAAnG,CAEA,IAAMC,SAAS,GAAG,EAChBnD,GAAG,EAAE,KAAKiB,OADM,EAEhBmC,SAAS,EAAElE,aAFK,EAGhBF,SAAS,EAATA,SAHgB,EAIhBK,KAAK,EAAE4D,SAAS,IAAK5D,KAAK,IAAI,4BAAW,KAAKmD,QAAhB,EAA0BnD,KAJxC,EAKhBF,mBAAmB,EAAnBA,mBALgB,EAAlB,CAOA,IAAI,CAACzC,KAAD,IAAUA,KAAK,CAAC0E,MAAN,KAAiB,CAA/B,EAAkC,CAChC,OAAO,IAAP,CACD,CAED,oBACE,6BAAC,oCAAD,IACE,EAAE,EAAE,KAAKlD,MADX,EAEE,YAAUd,oBAAoB,CAACE,IAFjC,EAGE,SAAS,EAAE,KAAK+E,SAHlB,EAIE,KAAK,EAAEpD,SAJT,EAKE,aAAa,EAAEF,aALjB,EAME,OAAO,EAAEmE,OANX,iBAQE,6BAAC,UAAD,EAAUC,SAAV,EAAsB,KAAK9B,QAAL,EAAtB,CARF,CADF,CAYD,C,QAuIOI,mB,GAAR,6BAA4BD,CAA5B,EAAuC,mBACrC,OAAO,UAACO,KAAD,UAA8C,MAAI,CAACsB,eAAL,CAAqBtB,KAArB,EAA4BP,CAA5B,CAA9C,EAAP,CACD,C,QAMO6B,e,GAAR,yBAAwBtB,KAAxB,EAAkGuB,KAAlG,EAAiH,CAC/G,IAAKvB,KAAD,CAAyCwB,MAA7C,EAAqD,CACnD,OACD,CAEDxB,KAAK,CAACE,cAAN,GACA,KAAKuB,MAAL,CAAYF,KAAZ,EACD,C,QAEOE,M,GAAR,gBAAeF,KAAf,EAA8B,CAC5B,IAAI,CAAC,KAAK1F,KAAL,CAAWlB,KAAhB,EAAuB,CACrB,OACD,CAED,IAAMiE,KAAK,GAAG,KAAK/C,KAAL,CAAWlB,KAAX,CAAiB4G,KAAjB,CAAd,CACA,KAAKtF,MAAL,GAAc,KAAd,CACA,KAAK4D,QAAL,CAAc,EACZ/D,QAAQ,EAAE,CAAC,CADC,EAEZnB,KAAK,EAAE,IAFK,EAAd,EAKA,KAAKiF,UAAL,CAAgBhB,KAAhB,EACA,KAAKqB,IAAL,GACD,C,QAEOY,W,GAAR,qBAAoBjC,KAApB,EAAmC,mBACjC,IAAI,CAAC,KAAK3C,MAAV,EAAkB,CAChB,OACD,CACD,IAAMvB,OAAO,GAAGkE,KAAK,CAAC8C,IAAN,EAAhB,CACA,IAAMrE,MAAM,GAAG,KAAKb,KAAL,CAAWa,MAA1B,CAEA,IAAI,CAACA,MAAL,EAAa,CACX,OACD,CAED,IAAIsE,OAAJ,CACA,KAAKvF,SAAL,IAAkB,CAAlB,CACA,IAAMwF,WAAW,GAAG,KAAKxF,SAAzB,CACA,IAAI,OAAOiB,MAAP,KAAkB,UAAtB,EAAkC,CAChCsE,OAAO,GAAGtE,MAAM,CAAC3C,OAAD,CAAhB,CACD,CAFD,MAEO,CACLiH,OAAO,GAAGlH,KAAK,CAACC,OAAD,EAAU2C,MAAV,CAAf,CACD,CACDsE,OAAO,CAACE,IAAR,CAAa,UAAClH,KAAD,EAAW,CACtB,IAAI,MAAI,CAACsB,MAAL,IAAe2F,WAAW,KAAK,MAAI,CAACxF,SAAxC,EAAmD,CACjD,MAAI,CAACyD,QAAL,CAAc,EACZlF,KAAK,EAALA,KADY,EAEZmB,QAAQ,EAAE,CAAC,CAFC,EAAd,EAID,CACF,CAPD,EAQD,C,QAEO8D,U,GAAR,oBAAmBhB,KAAnB,EAAkC,CAChC,IAAI,KAAKpC,KAAL,CAAWG,aAAf,EAA8B,CAC5B,KAAKH,KAAL,CAAWG,aAAX,CAAyBiC,KAAzB,EACD,CACF,C,uBAvY+BkD,eAAMC,S,WACxBC,mB,GAAsB,c,UACtBC,W,GAAc,c,UAEdC,S,GAAY,EACxB;AACJ;AACA;AACA,KACI9G,UAAU,EAAE+G,mBAAUC,IALE,EAOxB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KACI/E,MAAM,EAAE8E,mBAAUE,SAAV,CAAoB,CAACF,mBAAUG,KAAX,EAAkBH,mBAAUC,IAA5B,CAApB,CApBgB,E,UAuBZ9F,Y,GAA6B,EACzClB,UAAU,EAAVA,UADyC,EAEzCuE,IAAI,EAAE,OAFmC,EAGzC3C,aAAa,EAAE,KAH0B,EAIzCC,SAAS,EAAE,IAJ8B,EAKzCE,aAAa,EAAE,GAL0B,EAMzCD,SAAS,EAAE,MAN8B,EAOzCE,mBAAmB,EAAE,IAPoB,E","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes, KeyboardEvent } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { MenuMessage } from '../../internal/MenuMessage';\nimport { locale } from '../../lib/locale/decorators';\nimport { getRandomID, isNullable } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter, isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport { Input, InputProps } from '../Input';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './Autocomplete.styles';\nimport { AutocompleteLocale, AutocompleteLocaleHelper } from './locale';\nimport { getAutocompleteTheme } from './getAutocompleteTheme';\n\nfunction match(pattern: string, items: string[]) {\n if (!pattern || !items) {\n return Promise.resolve([]);\n }\n\n const lowerCasedPattern = pattern.toLowerCase();\n const itemsMatchingPattern = items.filter((item) => {\n return item.toLowerCase().includes(lowerCasedPattern);\n });\n\n return Promise.resolve(itemsMatchingPattern);\n}\n\nfunction renderItem(item: any) {\n return item;\n}\n\nexport interface AutocompleteProps\n extends CommonProps,\n Pick<DropdownContainerProps, 'menuPos'>,\n Pick<AriaAttributes, 'aria-label'>,\n Override<\n InputProps,\n {\n /** Функция отрисовки элемента меню */\n renderItem?: (item: string) => React.ReactNode;\n /** Промис, резолвящий элементы меню */\n source?: string[] | ((patter: string) => Promise<string[]>);\n /** Отключает использование портала */\n disablePortal?: boolean;\n /** Отрисовка тени у выпадающего меню */\n hasShadow?: boolean;\n /** Выравнивание выпадающего меню */\n menuAlign?: 'left' | 'right';\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Отключить скролл окна, когда меню открыто */\n preventWindowScroll?: boolean;\n /** Вызывается при изменении `value` */\n onValueChange: (value: string) => void;\n /** onBlur */\n onBlur?: () => void;\n /** Размер инпута */\n size?: SizeProp;\n /** value */\n value: string;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n }\n > {}\n\nexport interface AutocompleteState {\n items: Nullable<string[]>;\n selected: number;\n focused: boolean;\n isMobileOpened: boolean;\n}\n\nexport const AutocompleteDataTids = {\n root: 'Autocomplete__root',\n menu: 'Autocomplete__menu',\n} as const;\n\nexport const AutocompleteIds = {\n menu: AutocompleteDataTids.menu,\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n AutocompleteProps,\n 'renderItem' | 'size' | 'disablePortal' | 'hasShadow' | 'menuMaxHeight' | 'menuAlign' | 'preventWindowScroll'\n >\n>;\n\n/**\n * Стандартный инпут с подсказками.\n *\n * Все свойства передаются во внутренний *Input*.\n */\n@responsiveLayout\n@rootNode\n@locale('Autocomplete', AutocompleteLocaleHelper)\nexport class Autocomplete extends React.Component<AutocompleteProps, AutocompleteState> {\n public static __KONTUR_REACT_UI__ = 'Autocomplete';\n public static displayName = 'Autocomplete';\n\n public static propTypes = {\n /**\n * Функция для отрисовки элемента в выпадающем списке. Единственный аргумент\n * — *item*.\n */\n renderItem: PropTypes.func,\n\n /**\n * Если передан массив, то совпадения ищутся по этому массиву.\n *\n * Если передается функция, то она должна возвращать thenable, который\n * резолвится уже отфильтрованным массивом. Возвращенный thenable может\n * иметь метод cancel, который будет вызван при отмене поиска (пользователь\n * изменил строку поиска, автокомплит потерял фокус).\n * ```\n * function(pattern) {\n * return service.findAll(pattern);\n * }\n * ```\n */\n source: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),\n };\n\n public static defaultProps: DefaultProps = {\n renderItem,\n size: 'small',\n disablePortal: false,\n hasShadow: true,\n menuMaxHeight: 300,\n menuAlign: 'left',\n preventWindowScroll: true,\n };\n\n public state: AutocompleteState = {\n items: null,\n selected: -1,\n focused: false,\n isMobileOpened: false,\n };\n\n private theme!: Theme;\n private readonly locale!: AutocompleteLocale;\n private isMobileLayout!: boolean;\n private opened = false;\n private input: Nullable<Input> = null;\n private menu: Nullable<Menu>;\n private menuId = AutocompleteIds.menu + getRandomID();\n private rootSpan: Nullable<HTMLSpanElement>;\n private mobilePopup: Nullable<MobilePopup>;\n\n private requestId = 0;\n\n private getProps = createPropsGetter(Autocomplete.defaultProps);\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus() {\n if (this.input) {\n this.input.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n this.handleBlur();\n }\n\n public componentDidUpdate(prevProps: AutocompleteProps) {\n if (prevProps.value !== this.props.value) {\n this.updateItems(this.props.value || '');\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getAutocompleteTheme(theme);\n return (\n <ThemeContext.Provider value={this.theme}>\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n public renderMain = (props: CommonWrapperRestProps<AutocompleteProps>) => {\n const { focused } = this.state;\n\n const isMobile = this.isMobileLayout;\n\n const {\n onValueChange,\n onKeyDown,\n onFocus,\n onBlur,\n renderItem: _renderItem,\n disablePortal,\n hasShadow,\n menuAlign,\n menuMaxHeight,\n preventWindowScroll,\n source,\n width = this.theme.inputWidth,\n mobileMenuHeaderText,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n\n const inputProps = {\n ...rest,\n width: '100%',\n autoComplete: 'off',\n onValueChange: this.handleValueChange,\n onKeyDown: this.handleKeyDown,\n onFocus: this.handleFocus,\n ref: this.refInput,\n };\n\n return (\n <RenderLayer onFocusOutside={this.handleBlur} onClickOutside={this.handleClickOutside} active={focused}>\n <span\n data-tid={AutocompleteDataTids.root}\n className={styles.root(this.theme)}\n style={{ width }}\n ref={this.refRootSpan}\n >\n <Input aria-label={ariaLabel} aria-controls={this.menuId} {...inputProps} />\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n );\n };\n\n private renderHints(): React.ReactNode {\n const items = this.state.items;\n\n if (!this.props.value) {\n return <MenuMessage>{this.locale.enterValue}</MenuMessage>;\n }\n\n if (items?.length === 0 && this.props.value) {\n return <MenuMessage>{this.locale.notFound}</MenuMessage>;\n }\n\n if (isNullable(items) && this.props.value) {\n return <MenuMessage>{this.locale.updateValue}</MenuMessage>;\n }\n\n return null;\n }\n\n private renderMenu(): React.ReactNode {\n const items = this.state.items;\n const { menuMaxHeight, hasShadow, menuWidth, width, preventWindowScroll, menuAlign, disablePortal, menuPos } =\n this.getProps();\n const menuProps = {\n ref: this.refMenu,\n maxHeight: menuMaxHeight,\n hasShadow,\n width: menuWidth || (width && getDOMRect(this.rootSpan).width),\n preventWindowScroll,\n };\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <DropdownContainer\n id={this.menuId}\n data-tid={AutocompleteDataTids.menu}\n getParent={this.getAnchor}\n align={menuAlign}\n disablePortal={disablePortal}\n menuPos={menuPos}\n >\n <Menu {...menuProps}>{this.getItems()}</Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu = () => {\n const inputProps: InputProps = {\n autoComplete: 'off',\n autoFocus: true,\n width: '100%',\n onValueChange: this.handleValueChange,\n onKeyPress: this.handleKeyPressMobile,\n value: this.props.value,\n placeholder: this.locale.enterValue,\n };\n\n const items = this.state.items;\n\n return (\n <MobilePopup\n id={this.menuId}\n headerChildComponent={<Input {...inputProps} />}\n caption={this.props.mobileMenuHeaderText}\n opened={this.state.isMobileOpened}\n onCloseRequest={this.handleCloseMobile}\n ref={this.refMobilePopup}\n >\n <Menu ref={this.refMenu} onItemClick={this.mobilePopup?.close} disableScrollContainer maxHeight={'auto'}>\n {items && items.length > 0 && this.getItems()}\n {this.renderHints()}\n </Menu>\n </MobilePopup>\n );\n };\n\n private getItems = () => {\n const items = this.state.items;\n const isMobile = this.isMobileLayout;\n\n return items\n ? items.map((item, i) => {\n return (\n <MenuItem onClick={this.handleMenuItemClick(i)} key={i} isMobile={isMobile} size={this.props.size}>\n {this.getProps().renderItem(item)}\n </MenuItem>\n );\n })\n : null;\n };\n\n private handleValueChange = (value: string) => {\n this.opened = true;\n\n this.fireChange(value);\n };\n\n private handleCloseMobile = () => {\n this.setState({\n isMobileOpened: false,\n });\n\n this.handleBlur();\n };\n\n private handleKeyPressMobile = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.mobilePopup?.close();\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (this.isMobileLayout) {\n this.setState({ isMobileOpened: true });\n }\n\n if (this.state.focused) {\n return;\n }\n\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = () => {\n if (!this.state.focused) {\n return;\n }\n\n this.opened = false;\n this.setState({ items: null, focused: false });\n\n if (this.input) {\n this.input.blur();\n }\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n switch (true) {\n case isKeyEscape(e):\n e.preventDefault();\n this.setState({ items: null });\n return;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n return;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n return;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n return;\n }\n };\n\n private handleMenuItemClick(i: number) {\n return (event: React.SyntheticEvent<HTMLElement>) => this.handleItemClick(event, i);\n }\n\n private getAnchor = () => {\n return getRootNode(this);\n };\n\n private handleItemClick(event: React.SyntheticEvent<HTMLElement> | React.MouseEvent<HTMLElement>, index: number) {\n if ((event as React.MouseEvent<HTMLElement>).button) {\n return;\n }\n\n event.preventDefault();\n this.choose(index);\n }\n\n private choose(index: number) {\n if (!this.state.items) {\n return;\n }\n\n const value = this.state.items[index];\n this.opened = false;\n this.setState({\n selected: -1,\n items: null,\n });\n\n this.fireChange(value);\n this.blur();\n }\n\n private updateItems(value: string) {\n if (!this.opened) {\n return;\n }\n const pattern = value.trim();\n const source = this.props.source;\n\n if (!source) {\n return;\n }\n\n let promise;\n this.requestId += 1;\n const expectingId = this.requestId;\n if (typeof source === 'function') {\n promise = source(pattern);\n } else {\n promise = match(pattern, source);\n }\n promise.then((items) => {\n if (this.opened && expectingId === this.requestId) {\n this.setState({\n items,\n selected: -1,\n });\n }\n });\n }\n\n private fireChange(value: string) {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n }\n\n private refInput = (el: Input | null) => {\n this.input = el;\n };\n\n private refMenu = (menu: Menu | null) => {\n this.menu = menu;\n };\n\n private refRootSpan = (span: HTMLSpanElement) => {\n this.rootSpan = span;\n };\n\n private refMobilePopup = (mobilePopup: MobilePopup | null) => {\n this.mobilePopup = mobilePopup;\n };\n}\n"]}
1
+ {"version":3,"sources":["Autocomplete.tsx"],"names":["match","pattern","items","Promise","resolve","lowerCasedPattern","toLowerCase","itemsMatchingPattern","filter","item","includes","renderItem","AutocompleteDataTids","root","menu","AutocompleteIds","Autocomplete","AutocompleteLocaleHelper","responsiveLayout","rootNode","state","selected","focused","isMobileOpened","opened","input","menuId","requestId","getProps","defaultProps","renderMain","props","isMobile","isMobileLayout","onValueChange","onKeyDown","onFocus","onBlur","_renderItem","disablePortal","hasShadow","menuAlign","menuMaxHeight","preventWindowScroll","source","menuPos","width","theme","inputWidth","mobileMenuHeaderText","ariaLabel","rest","inputProps","autoComplete","handleValueChange","handleKeyDown","handleFocus","ref","refInput","handleBlur","handleClickOutside","styles","noPortal","refRootSpan","renderMobileMenu","renderMenu","autoFocus","onKeyPress","handleKeyPressMobile","value","placeholder","locale","enterValue","handleCloseMobile","refMobilePopup","refMenu","mobilePopup","close","length","getItems","renderHints","map","i","handleMenuItemClick","size","fireChange","setState","e","key","event","blur","preventDefault","up","down","enter","getAnchor","el","span","rootSpan","focus","componentDidUpdate","prevProps","updateItems","render","setRootNode","notFound","updateValue","menuWidth","menuProps","maxHeight","handleItemClick","index","button","choose","trim","promise","expectingId","then","React","Component","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","func","oneOfType","array"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes, KeyboardEvent } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { MenuMessage } from '../../internal/MenuMessage';\nimport { locale } from '../../lib/locale/decorators';\nimport { getRandomID, isNullable } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter, isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport { Input, InputProps } from '../Input';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './Autocomplete.styles';\nimport { AutocompleteLocale, AutocompleteLocaleHelper } from './locale';\nimport { getAutocompleteTheme } from './getAutocompleteTheme';\n\nfunction match(pattern: string, items: string[]) {\n if (!pattern || !items) {\n return Promise.resolve([]);\n }\n\n const lowerCasedPattern = pattern.toLowerCase();\n const itemsMatchingPattern = items.filter((item) => {\n return item.toLowerCase().includes(lowerCasedPattern);\n });\n\n return Promise.resolve(itemsMatchingPattern);\n}\n\nfunction renderItem(item: any) {\n return item;\n}\n\nexport interface AutocompleteProps\n extends CommonProps,\n Pick<DropdownContainerProps, 'menuPos'>,\n Pick<AriaAttributes, 'aria-label'>,\n Override<\n InputProps,\n {\n /** Функция отрисовки элемента меню */\n renderItem?: (item: string) => React.ReactNode;\n /** Промис, резолвящий элементы меню */\n source?: string[] | ((patter: string) => Promise<string[]>);\n /** Отключает использование портала */\n disablePortal?: boolean;\n /** Отрисовка тени у выпадающего меню */\n hasShadow?: boolean;\n /** Выравнивание выпадающего меню */\n menuAlign?: 'left' | 'right';\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Отключить скролл окна, когда меню открыто */\n preventWindowScroll?: boolean;\n /** Вызывается при изменении `value` */\n onValueChange: (value: string) => void;\n /** onBlur */\n onBlur?: () => void;\n /** Размер инпута */\n size?: SizeProp;\n /** value */\n value: string;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n }\n > {}\n\nexport interface AutocompleteState {\n items: Nullable<string[]>;\n selected: number;\n focused: boolean;\n isMobileOpened: boolean;\n}\n\nexport const AutocompleteDataTids = {\n root: 'Autocomplete__root',\n menu: 'Autocomplete__menu',\n} as const;\n\nexport const AutocompleteIds = {\n menu: AutocompleteDataTids.menu,\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n AutocompleteProps,\n 'renderItem' | 'size' | 'disablePortal' | 'hasShadow' | 'menuMaxHeight' | 'menuAlign' | 'preventWindowScroll'\n >\n>;\n\n/**\n * Стандартный инпут с подсказками.\n *\n * Все свойства передаются во внутренний *Input*.\n */\n@responsiveLayout\n@rootNode\n@locale('Autocomplete', AutocompleteLocaleHelper)\nexport class Autocomplete extends React.Component<AutocompleteProps, AutocompleteState> {\n public static __KONTUR_REACT_UI__ = 'Autocomplete';\n public static displayName = 'Autocomplete';\n\n public static propTypes = {\n /**\n * Функция для отрисовки элемента в выпадающем списке. Единственный аргумент\n * — *item*.\n */\n renderItem: PropTypes.func,\n\n /**\n * Если передан массив, то совпадения ищутся по этому массиву.\n *\n * Если передается функция, то она должна возвращать thenable, который\n * резолвится уже отфильтрованным массивом. Возвращенный thenable может\n * иметь метод cancel, который будет вызван при отмене поиска (пользователь\n * изменил строку поиска, автокомплит потерял фокус).\n * ```\n * function(pattern) {\n * return service.findAll(pattern);\n * }\n * ```\n */\n source: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),\n };\n\n public static defaultProps: DefaultProps = {\n renderItem,\n size: 'small',\n disablePortal: false,\n hasShadow: true,\n menuMaxHeight: 300,\n menuAlign: 'left',\n preventWindowScroll: true,\n };\n\n public state: AutocompleteState = {\n items: null,\n selected: -1,\n focused: false,\n isMobileOpened: false,\n };\n\n private theme!: Theme;\n private readonly locale!: AutocompleteLocale;\n private isMobileLayout!: boolean;\n private opened = false;\n private input: Nullable<Input> = null;\n private menu: Nullable<Menu>;\n private menuId = AutocompleteIds.menu + getRandomID();\n private rootSpan: Nullable<HTMLSpanElement>;\n private mobilePopup: Nullable<MobilePopup>;\n\n private requestId = 0;\n\n private getProps = createPropsGetter(Autocomplete.defaultProps);\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus() {\n if (this.input) {\n this.input.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n this.handleBlur();\n }\n\n public componentDidUpdate(prevProps: AutocompleteProps) {\n if (prevProps.value !== this.props.value) {\n this.updateItems(this.props.value || '');\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getAutocompleteTheme(theme);\n return (\n <ThemeContext.Provider value={this.theme}>\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n public renderMain = (props: CommonWrapperRestProps<AutocompleteProps>) => {\n const { focused } = this.state;\n\n const isMobile = this.isMobileLayout;\n\n const {\n onValueChange,\n onKeyDown,\n onFocus,\n onBlur,\n renderItem: _renderItem,\n disablePortal,\n hasShadow,\n menuAlign,\n menuMaxHeight,\n preventWindowScroll,\n source,\n menuPos,\n width = this.theme.inputWidth,\n mobileMenuHeaderText,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n\n const inputProps = {\n ...rest,\n width: '100%',\n autoComplete: 'off',\n onValueChange: this.handleValueChange,\n onKeyDown: this.handleKeyDown,\n onFocus: this.handleFocus,\n ref: this.refInput,\n };\n\n return (\n <RenderLayer onFocusOutside={this.handleBlur} onClickOutside={this.handleClickOutside} active={focused}>\n <span\n data-tid={AutocompleteDataTids.root}\n className={cx(styles.root(this.theme), {\n [styles.noPortal()]: disablePortal,\n })}\n style={{ width }}\n ref={this.refRootSpan}\n >\n <Input aria-label={ariaLabel} aria-controls={this.menuId} {...inputProps} />\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n );\n };\n\n private renderHints(): React.ReactNode {\n const items = this.state.items;\n\n if (!this.props.value) {\n return <MenuMessage>{this.locale.enterValue}</MenuMessage>;\n }\n\n if (items?.length === 0 && this.props.value) {\n return <MenuMessage>{this.locale.notFound}</MenuMessage>;\n }\n\n if (isNullable(items) && this.props.value) {\n return <MenuMessage>{this.locale.updateValue}</MenuMessage>;\n }\n\n return null;\n }\n\n private renderMenu(): React.ReactNode {\n const items = this.state.items;\n const { menuMaxHeight, hasShadow, menuWidth, width, preventWindowScroll, menuAlign, disablePortal, menuPos } =\n this.getProps();\n const menuProps = {\n ref: this.refMenu,\n maxHeight: menuMaxHeight,\n hasShadow,\n width: menuWidth || (width && getDOMRect(this.rootSpan).width),\n preventWindowScroll,\n };\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <DropdownContainer\n id={this.menuId}\n data-tid={AutocompleteDataTids.menu}\n getParent={this.getAnchor}\n align={menuAlign}\n disablePortal={disablePortal}\n menuPos={menuPos}\n >\n <Menu {...menuProps}>{this.getItems()}</Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu = () => {\n const inputProps: InputProps = {\n autoComplete: 'off',\n autoFocus: true,\n width: '100%',\n onValueChange: this.handleValueChange,\n onKeyPress: this.handleKeyPressMobile,\n value: this.props.value,\n placeholder: this.locale.enterValue,\n };\n\n const items = this.state.items;\n\n return (\n <MobilePopup\n id={this.menuId}\n headerChildComponent={<Input {...inputProps} />}\n caption={this.props.mobileMenuHeaderText}\n opened={this.state.isMobileOpened}\n onCloseRequest={this.handleCloseMobile}\n ref={this.refMobilePopup}\n >\n <Menu ref={this.refMenu} onItemClick={this.mobilePopup?.close} disableScrollContainer maxHeight={'auto'}>\n {items && items.length > 0 && this.getItems()}\n {this.renderHints()}\n </Menu>\n </MobilePopup>\n );\n };\n\n private getItems = () => {\n const items = this.state.items;\n const isMobile = this.isMobileLayout;\n\n return items\n ? items.map((item, i) => {\n return (\n <MenuItem onClick={this.handleMenuItemClick(i)} key={i} isMobile={isMobile} size={this.props.size}>\n {this.getProps().renderItem(item)}\n </MenuItem>\n );\n })\n : null;\n };\n\n private handleValueChange = (value: string) => {\n this.opened = true;\n\n this.fireChange(value);\n };\n\n private handleCloseMobile = () => {\n this.setState({\n isMobileOpened: false,\n });\n\n this.handleBlur();\n };\n\n private handleKeyPressMobile = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.mobilePopup?.close();\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (this.isMobileLayout) {\n this.setState({ isMobileOpened: true });\n }\n\n if (this.state.focused) {\n return;\n }\n\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = () => {\n if (!this.state.focused) {\n return;\n }\n\n this.opened = false;\n this.setState({ items: null, focused: false });\n\n if (this.input) {\n this.input.blur();\n }\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n switch (true) {\n case isKeyEscape(e):\n e.preventDefault();\n this.setState({ items: null });\n return;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n return;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n return;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n return;\n }\n };\n\n private handleMenuItemClick(i: number) {\n return (event: React.SyntheticEvent<HTMLElement>) => this.handleItemClick(event, i);\n }\n\n private getAnchor = () => {\n return getRootNode(this);\n };\n\n private handleItemClick(event: React.SyntheticEvent<HTMLElement> | React.MouseEvent<HTMLElement>, index: number) {\n if ((event as React.MouseEvent<HTMLElement>).button) {\n return;\n }\n\n event.preventDefault();\n this.choose(index);\n }\n\n private choose(index: number) {\n if (!this.state.items) {\n return;\n }\n\n const value = this.state.items[index];\n this.opened = false;\n this.setState({\n selected: -1,\n items: null,\n });\n\n this.fireChange(value);\n this.blur();\n }\n\n private updateItems(value: string) {\n if (!this.opened) {\n return;\n }\n const pattern = value.trim();\n const source = this.props.source;\n\n if (!source) {\n return;\n }\n\n let promise;\n this.requestId += 1;\n const expectingId = this.requestId;\n if (typeof source === 'function') {\n promise = source(pattern);\n } else {\n promise = match(pattern, source);\n }\n promise.then((items) => {\n if (this.opened && expectingId === this.requestId) {\n this.setState({\n items,\n selected: -1,\n });\n }\n });\n }\n\n private fireChange(value: string) {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n }\n\n private refInput = (el: Input | null) => {\n this.input = el;\n };\n\n private refMenu = (menu: Menu | null) => {\n this.menu = menu;\n };\n\n private refRootSpan = (span: HTMLSpanElement) => {\n this.rootSpan = span;\n };\n\n private refMobilePopup = (mobilePopup: MobilePopup | null) => {\n this.mobilePopup = mobilePopup;\n };\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { Theme } from '../../lib/theming/Theme';
2
2
  export declare const styles: {
3
3
  root(t: Theme): string;
4
+ noPortal(): string;
4
5
  };
@@ -1,4 +1,4 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;exports.__esModule = true;exports.styles = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _Emotion = require("../../lib/theming/Emotion");var _templateObject;
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;exports.__esModule = true;exports.styles = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _Emotion = require("../../lib/theming/Emotion");var _templateObject, _templateObject2;
2
2
 
3
3
 
4
4
  var styles = (0, _Emotion.memoizeStyle)({
@@ -7,4 +7,9 @@ var styles = (0, _Emotion.memoizeStyle)({
7
7
 
8
8
  t.inputWidth);
9
9
 
10
+ },
11
+ noPortal: function noPortal() {
12
+ return (0, _Emotion.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\n position: relative;\n "])));
13
+
14
+
10
15
  } });exports.styles = styles;
@@ -1 +1 @@
1
- {"version":3,"sources":["Autocomplete.styles.ts"],"names":["styles","root","t","css","inputWidth"],"mappings":"oRAAA,oD;;;AAGO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,eAAOC,YAAP;;AAEWD,IAAAA,CAAC,CAACE,UAFb;;AAID,GANgC,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 display: inline-block;\n width: ${t.inputWidth};\n `;\n },\n});\n"]}
1
+ {"version":3,"sources":["Autocomplete.styles.ts"],"names":["styles","root","t","css","inputWidth","noPortal"],"mappings":"oRAAA,oD;;;AAGO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,eAAOC,YAAP;;AAEWD,IAAAA,CAAC,CAACE,UAFb;;AAID,GANgC;AAOjCC,EAAAA,QAPiC,sBAOtB;AACT,eAAOF,YAAP;;;AAGD,GAXgC,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 display: inline-block;\n width: ${t.inputWidth};\n `;\n },\n noPortal() {\n return css`\n position: relative;\n `;\n },\n});\n"]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { PopupPositionsType, ShortPopupPositionsType } from '../../internal/Popup';
2
+ import { PopupPositionsType } from '../../internal/Popup';
3
3
  import { Nullable } from '../../typings/utility-types';
4
4
  import { MouseEventType } from '../../typings/event-types';
5
5
  import { CommonProps } from '../../internal/CommonWrapper';
@@ -35,7 +35,7 @@ export interface HintProps extends CommonProps {
35
35
  *
36
36
  * **Допустимые значения**: `"top"`, `"right"`, `"bottom"`, `"left"`, `"top left"`, `"top center"`, `"top right"`, `"right top"`, `"right middle"`, `"right bottom"`, `"bottom left"`, `"bottom center"`, `"bottom right"`, `"left top"`, `"left middle"`, `"left bottom"`.
37
37
  */
38
- pos?: ShortPopupPositionsType | PopupPositionsType;
38
+ pos?: 'top' | 'right' | 'bottom' | 'left' | PopupPositionsType;
39
39
  /**
40
40
  * Текст подсказки.
41
41
  */
@@ -61,7 +61,7 @@ export interface HintState {
61
61
  opened: boolean;
62
62
  position: PopupPositionsType;
63
63
  }
64
- declare type DefaultProps = Required<Pick<HintProps, 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>>;
64
+ declare type DefaultProps = Required<Pick<HintProps, 'pos' | 'allowedPositions' | 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>>;
65
65
  /**
66
66
  * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.
67
67
  */
@@ -77,7 +77,6 @@ export declare class Hint extends React.PureComponent<HintProps, HintState> impl
77
77
  private setRootNode;
78
78
  private positions;
79
79
  private popupRef;
80
- getAllowedPositions(): ("top center" | "top left" | "top right" | "bottom center" | "bottom left" | "bottom right" | "left middle" | "left top" | "left bottom" | "right middle" | "right top" | "right bottom")[];
81
80
  componentDidUpdate(prevProps: HintProps): void;
82
81
  componentWillUnmount(): void;
83
82
  render(): JSX.Element;
@@ -84,7 +84,7 @@ var HINT_BORDER_COLOR = 'transparent';
84
84
 
85
85
 
86
86
 
87
- var OldPositions = [
87
+ var Positions = [
88
88
  'top center',
89
89
  'top left',
90
90
  'top right',
@@ -101,6 +101,8 @@ var OldPositions = [
101
101
 
102
102
 
103
103
 
104
+
105
+
104
106
  /**
105
107
  * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.
106
108
  */var
@@ -117,6 +119,8 @@ Hint = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
117
119
 
118
120
 
119
121
 
122
+
123
+
120
124
  getProps = (0, _createPropsGetter.createPropsGetter)(Hint.defaultProps);_this.
121
125
 
122
126
  state = {
@@ -225,7 +229,6 @@ Hint = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
225
229
 
226
230
 
227
231
 
228
-
229
232
 
230
233
 
231
234
  getAnchorElement = function () {var _this$popupRef$curren;
@@ -251,13 +254,9 @@ Hint = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
251
254
 
252
255
 
253
256
  getPositions = function () {
254
- if (_this.featureFlags.popupUnifyPositioning) {
255
- return _this.props.allowedPositions;
256
- }
257
- var pos = _this.props.pos ? _this.props.pos : 'top';
258
- var allowedPositions = _this.getAllowedPositions();
259
257
  if (_this.featureFlags.hintAddDynamicPositioning) {
260
258
  if (!_this.positions) {
259
+ var _this$getProps = _this.getProps(),allowedPositions = _this$getProps.allowedPositions,pos = _this$getProps.pos;
261
260
  var priorityPosition;
262
261
  switch (pos) {
263
262
  case 'top':
@@ -283,7 +282,7 @@ Hint = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
283
282
  }
284
283
  return _this.positions;
285
284
  }
286
- return OldPositions.filter(function (x) {return x.startsWith(pos);});
285
+ return Positions.filter(function (x) {return x.startsWith(_this.getProps().pos);});
287
286
  };_this.
288
287
 
289
288
  handleMouseEnter = function (e) {
@@ -310,4 +309,4 @@ Hint = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
310
309
 
311
310
  open = function () {
312
311
  _this.setState({ opened: true });
313
- };return _this;}var _proto = Hint.prototype;_proto.getAllowedPositions = function getAllowedPositions() {return this.props.allowedPositions ? this.props.allowedPositions : OldPositions;};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var _this$getProps = this.getProps(),opened = _this$getProps.opened,manual = _this$getProps.manual;if (!manual) {return;}if (this.timer) {_globalObject.globalObject.clearTimeout(this.timer);this.timer = null;}if (opened !== prevProps.opened) {this.setState({ opened: !!opened });}if (this.featureFlags.hintAddDynamicPositioning && !this.featureFlags.popupUnifyPositioning) {var pos = this.props.pos ? this.props.pos : 'top';var allowedPositions = this.props.allowedPositions ? this.props.allowedPositions : OldPositions;var posChanged = prevProps.pos !== pos;var allowedChanged = !(0, _lodash.default)(prevProps.allowedPositions, allowedPositions);if (posChanged || allowedChanged) {this.positions = null;}}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.timer) {_globalObject.globalObject.clearTimeout(this.timer);this.timer = null;}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {_this2.featureFlags = (0, _featureFlagsContext.getFullReactUIFlagsContext)(flags);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _ThemeFactory.ThemeFactory.create({ popupPinOffset: theme.hintPinOffset, popupMargin: theme.hintMargin, popupBorder: theme.hintBorder, popupBorderRadius: theme.hintBorderRadius }, _this2.theme) }, _this2.renderMain());});});};_proto.renderMain = function renderMain() {var _this3 = this;var _this$getProps2 = this.getProps(),disableAnimations = _this$getProps2.disableAnimations,useWrapper = _this$getProps2.useWrapper;var hasPin = !this.featureFlags.kebabHintRemovePin || !(0, _ThemeHelpers.isTheme2022)(this.theme);return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_Popup.Popup, { hasPin: hasPin, opened: this.state.opened, anchorElement: this.props.children, positions: this.getPositions(), pos: this.props.pos, backgroundColor: this.theme.hintBgColor, borderColor: HINT_BORDER_COLOR, onPositionChange: function onPositionChange(position) {return _this3.setState({ position: position });}, disableAnimations: disableAnimations, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper, ref: this.popupRef, withoutMobile: true }, this.renderContent()));};_proto.renderContent = function renderContent() {var _cx;if (!this.props.text) {return null;}var _this$getProps3 = this.getProps(),maxWidth = _this$getProps3.maxWidth;var centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];var className = (0, _Emotion.cx)((_cx = {}, _cx[_Hint.styles.content(this.theme)] = true, _cx[_Hint.styles.contentCenter(this.theme)] = centerAlignPositions.includes(this.state.position), _cx));return /*#__PURE__*/_react.default.createElement("div", { className: className, style: { maxWidth: maxWidth } }, this.props.text);};return Hint;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'Hint', _class2.displayName = 'Hint', _class2.defaultProps = { manual: false, opened: false, maxWidth: 200, disableAnimations: _currentEnvironment.isTestEnv, useWrapper: false }, _temp)) || _class;exports.Hint = Hint;
312
+ };return _this;}var _proto = Hint.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var _this$getProps2 = this.getProps(),opened = _this$getProps2.opened,manual = _this$getProps2.manual,pos = _this$getProps2.pos,allowedPositions = _this$getProps2.allowedPositions;if (!manual) {return;}if (this.timer) {_globalObject.globalObject.clearTimeout(this.timer);this.timer = null;}if (opened !== prevProps.opened) {this.setState({ opened: !!opened });}if (this.featureFlags.hintAddDynamicPositioning) {var posChanged = prevProps.pos !== pos;var allowedChanged = !(0, _lodash.default)(prevProps.allowedPositions, allowedPositions);if (posChanged || allowedChanged) {this.positions = null;}}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.timer) {_globalObject.globalObject.clearTimeout(this.timer);this.timer = null;}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {_this2.featureFlags = (0, _featureFlagsContext.getFullReactUIFlagsContext)(flags);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _ThemeFactory.ThemeFactory.create({ popupPinOffset: theme.hintPinOffset, popupMargin: theme.hintMargin, popupBorder: theme.hintBorder, popupBorderRadius: theme.hintBorderRadius }, _this2.theme) }, _this2.renderMain());});});};_proto.renderMain = function renderMain() {var _this3 = this;var _this$getProps3 = this.getProps(),disableAnimations = _this$getProps3.disableAnimations,useWrapper = _this$getProps3.useWrapper;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {var hasPin = !(0, _featureFlagsContext.getFullReactUIFlagsContext)(flags).kebabHintRemovePin || !(0, _ThemeHelpers.isTheme2022)(_this3.theme);return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this3.setRootNode }, _this3.props), /*#__PURE__*/_react.default.createElement(_Popup.Popup, { hasPin: hasPin, opened: _this3.state.opened, anchorElement: _this3.props.children, positions: _this3.getPositions(), backgroundColor: _this3.theme.hintBgColor, borderColor: HINT_BORDER_COLOR, onPositionChange: function onPositionChange(position) {return _this3.setState({ position: position });}, disableAnimations: disableAnimations, onMouseEnter: _this3.handleMouseEnter, onMouseLeave: _this3.handleMouseLeave, useWrapper: useWrapper, ref: _this3.popupRef, withoutMobile: true }, _this3.renderContent()));});};_proto.renderContent = function renderContent() {var _cx;if (!this.props.text) {return null;}var _this$getProps4 = this.getProps(),maxWidth = _this$getProps4.maxWidth;var centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];var className = (0, _Emotion.cx)((_cx = {}, _cx[_Hint.styles.content(this.theme)] = true, _cx[_Hint.styles.contentCenter(this.theme)] = centerAlignPositions.includes(this.state.position), _cx));return /*#__PURE__*/_react.default.createElement("div", { className: className, style: { maxWidth: maxWidth } }, this.props.text);};return Hint;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'Hint', _class2.displayName = 'Hint', _class2.defaultProps = { pos: 'top', manual: false, opened: false, maxWidth: 200, allowedPositions: Positions, disableAnimations: _currentEnvironment.isTestEnv, useWrapper: false }, _temp)) || _class;exports.Hint = Hint;
@@ -1 +1 @@
1
- {"version":3,"sources":["Hint.tsx"],"names":["HINT_BORDER_COLOR","OldPositions","Hint","rootNode","getProps","defaultProps","state","opened","manual","position","DUMMY_LOCATION","positions","popupRef","React","createRef","getAnchorElement","current","anchorElement","getPositions","featureFlags","popupUnifyPositioning","props","allowedPositions","pos","getAllowedPositions","hintAddDynamicPositioning","priorityPosition","index","indexOf","Error","join","slice","filter","x","startsWith","handleMouseEnter","e","timer","globalObject","setTimeout","open","onMouseEnter","handleMouseLeave","clearTimeout","setState","onMouseLeave","componentDidUpdate","prevProps","posChanged","allowedChanged","componentWillUnmount","render","flags","theme","ThemeFactory","create","popupPinOffset","hintPinOffset","popupMargin","hintMargin","popupBorder","hintBorder","popupBorderRadius","hintBorderRadius","renderMain","disableAnimations","useWrapper","hasPin","kebabHintRemovePin","setRootNode","children","hintBgColor","renderContent","text","maxWidth","centerAlignPositions","className","styles","content","contentCenter","includes","PureComponent","__KONTUR_REACT_UI__","displayName","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\nimport isEqual from 'lodash.isequal';\n\nimport {\n ReactUIFeatureFlags,\n ReactUIFeatureFlagsContext,\n getFullReactUIFlagsContext,\n} from '../../lib/featureFlagsContext';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Theme } from '../../lib/theming/Theme';\nimport { DUMMY_LOCATION, Popup, PopupPositionsType, ShortPopupPositionsType } from '../../internal/Popup';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { styles } from './Hint.styles';\n\nconst HINT_BORDER_COLOR = 'transparent';\n\nexport interface HintProps extends CommonProps {\n children?: React.ReactNode;\n /**\n * Переводит отображение подсказки в _\"ручной режим\"_.\n *\n * В _\"ручном режиме\"_ подсказку можно активировать только задав значение пропу `opened`.\n */\n manual?: boolean;\n /**\n * Задаёт максимальную ширину подсказки.\n */\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: (event: MouseEventType) => void;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: (event: MouseEventType) => void;\n /**\n * Если `true` - подсказка будет открыта.\n *\n * _Примечание_: работает только при `manual=true`.\n */\n opened?: boolean;\n /**\n * Расположение подсказки относительно текста.\n *\n * **Допустимые значения**: `\"top\"`, `\"right\"`, `\"bottom\"`, `\"left\"`, `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n */\n pos?: ShortPopupPositionsType | PopupPositionsType;\n /**\n * Текст подсказки.\n */\n text: React.ReactNode;\n /**\n * Список позиций, которые хинт будет занимать. Если положение хинт в определенной позиции будет выходить\n * за край экрана, то будет выбрана следующая позиция. Обязательно должен включать позицию указанную в `pos`.\n * Для применения этого пропа необходимо включить фиче-флаг hintAddDynamicPositioning.\n */\n allowedPositions?: PopupPositionsType[];\n /**\n * Отключает анимацию.\n */\n disableAnimations?: boolean;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования хинта при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n}\n\nexport interface HintState {\n opened: boolean;\n position: PopupPositionsType;\n}\n\nconst OldPositions: PopupPositionsType[] = [\n 'top center',\n 'top left',\n 'top right',\n 'bottom center',\n 'bottom left',\n 'bottom right',\n 'left middle',\n 'left top',\n 'left bottom',\n 'right middle',\n 'right top',\n 'right bottom',\n];\n\ntype DefaultProps = Required<Pick<HintProps, 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>>;\n\n/**\n * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.\n */\n@rootNode\nexport class Hint extends React.PureComponent<HintProps, HintState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Hint';\n public static displayName = 'Hint';\n\n public static defaultProps: DefaultProps = {\n manual: false,\n opened: false,\n maxWidth: 200,\n disableAnimations: isTestEnv,\n useWrapper: false,\n };\n\n private getProps = createPropsGetter(Hint.defaultProps);\n\n public state: HintState = {\n opened: this.getProps().manual ? !!this.getProps().opened : false,\n position: DUMMY_LOCATION.position,\n };\n\n private timer: SafeTimer;\n private theme!: Theme;\n private featureFlags!: ReactUIFeatureFlags;\n private setRootNode!: TSetRootNode;\n private positions: Nullable<PopupPositionsType[]> = null;\n\n private popupRef = React.createRef<Popup>();\n\n public getAllowedPositions() {\n return this.props.allowedPositions ? this.props.allowedPositions : OldPositions;\n }\n\n public componentDidUpdate(prevProps: HintProps) {\n const { opened, manual } = this.getProps();\n if (!manual) {\n return;\n }\n if (this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n }\n if (opened !== prevProps.opened) {\n this.setState({ opened: !!opened });\n }\n\n if (this.featureFlags.hintAddDynamicPositioning && !this.featureFlags.popupUnifyPositioning) {\n const pos = this.props.pos ? this.props.pos : 'top';\n const allowedPositions = this.props.allowedPositions ? this.props.allowedPositions : OldPositions;\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\n public componentWillUnmount() {\n if (this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.featureFlags = getFullReactUIFlagsContext(flags);\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.hintPinOffset,\n popupMargin: theme.hintMargin,\n popupBorder: theme.hintBorder,\n popupBorderRadius: theme.hintBorderRadius,\n },\n this.theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public renderMain() {\n const { disableAnimations, useWrapper } = this.getProps();\n const hasPin = !this.featureFlags.kebabHintRemovePin || !isTheme2022(this.theme);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n hasPin={hasPin}\n opened={this.state.opened}\n anchorElement={this.props.children}\n positions={this.getPositions()}\n pos={this.props.pos}\n backgroundColor={this.theme.hintBgColor}\n borderColor={HINT_BORDER_COLOR}\n onPositionChange={(position) => this.setState({ position })}\n disableAnimations={disableAnimations}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n useWrapper={useWrapper}\n ref={this.popupRef}\n withoutMobile\n >\n {this.renderContent()}\n </Popup>\n </CommonWrapper>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n private renderContent() {\n if (!this.props.text) {\n return null;\n }\n\n const { maxWidth } = this.getProps();\n const centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];\n const className = cx({\n [styles.content(this.theme)]: true,\n [styles.contentCenter(this.theme)]: centerAlignPositions.includes(this.state.position),\n });\n return (\n <div className={className} style={{ maxWidth }}>\n {this.props.text}\n </div>\n );\n }\n\n private getPositions = (): PopupPositionsType[] | undefined => {\n if (this.featureFlags.popupUnifyPositioning) {\n return this.props.allowedPositions;\n }\n const pos = this.props.pos ? this.props.pos : 'top';\n const allowedPositions = this.getAllowedPositions();\n if (this.featureFlags.hintAddDynamicPositioning) {\n if (!this.positions) {\n let priorityPosition: PopupPositionsType;\n switch (pos) {\n case 'top':\n priorityPosition = 'top center';\n break;\n case 'bottom':\n priorityPosition = 'bottom center';\n break;\n case 'left':\n priorityPosition = 'left middle';\n break;\n case 'right':\n priorityPosition = 'right middle';\n break;\n default:\n priorityPosition = pos;\n }\n const index = allowedPositions.indexOf(priorityPosition);\n if (index === -1) {\n throw new Error('Unexpected position passed to Hint. Expected one of: ' + allowedPositions.join(', '));\n }\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n return this.positions;\n }\n return OldPositions.filter((x) => x.startsWith(pos));\n };\n\n private handleMouseEnter = (e: MouseEventType) => {\n if (!this.getProps().manual && !this.timer) {\n this.timer = globalObject.setTimeout(this.open, 400);\n }\n\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: MouseEventType) => {\n if (!this.getProps().manual && this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n this.setState({ opened: false });\n }\n\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private open = () => {\n this.setState({ opened: true });\n };\n}\n"]}
1
+ {"version":3,"sources":["Hint.tsx"],"names":["HINT_BORDER_COLOR","Positions","Hint","rootNode","getProps","defaultProps","state","opened","manual","position","DUMMY_LOCATION","positions","popupRef","React","createRef","getAnchorElement","current","anchorElement","getPositions","featureFlags","hintAddDynamicPositioning","allowedPositions","pos","priorityPosition","index","indexOf","Error","join","slice","filter","x","startsWith","handleMouseEnter","e","timer","globalObject","setTimeout","open","props","onMouseEnter","handleMouseLeave","clearTimeout","setState","onMouseLeave","componentDidUpdate","prevProps","posChanged","allowedChanged","componentWillUnmount","render","flags","theme","ThemeFactory","create","popupPinOffset","hintPinOffset","popupMargin","hintMargin","popupBorder","hintBorder","popupBorderRadius","hintBorderRadius","renderMain","disableAnimations","useWrapper","hasPin","kebabHintRemovePin","setRootNode","children","hintBgColor","renderContent","text","maxWidth","centerAlignPositions","className","styles","content","contentCenter","includes","PureComponent","__KONTUR_REACT_UI__","displayName","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\nimport isEqual from 'lodash.isequal';\n\nimport {\n ReactUIFeatureFlags,\n ReactUIFeatureFlagsContext,\n getFullReactUIFlagsContext,\n} from '../../lib/featureFlagsContext';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Theme } from '../../lib/theming/Theme';\nimport { DUMMY_LOCATION, Popup, PopupPositionsType } from '../../internal/Popup';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { styles } from './Hint.styles';\n\nconst HINT_BORDER_COLOR = 'transparent';\n\nexport interface HintProps extends CommonProps {\n children?: React.ReactNode;\n /**\n * Переводит отображение подсказки в _\"ручной режим\"_.\n *\n * В _\"ручном режиме\"_ подсказку можно активировать только задав значение пропу `opened`.\n */\n manual?: boolean;\n /**\n * Задаёт максимальную ширину подсказки.\n */\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: (event: MouseEventType) => void;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: (event: MouseEventType) => void;\n /**\n * Если `true` - подсказка будет открыта.\n *\n * _Примечание_: работает только при `manual=true`.\n */\n opened?: boolean;\n /**\n * Расположение подсказки относительно текста.\n *\n * **Допустимые значения**: `\"top\"`, `\"right\"`, `\"bottom\"`, `\"left\"`, `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n */\n pos?: 'top' | 'right' | 'bottom' | 'left' | PopupPositionsType;\n /**\n * Текст подсказки.\n */\n text: React.ReactNode;\n /**\n * Список позиций, которые хинт будет занимать. Если положение хинт в определенной позиции будет выходить\n * за край экрана, то будет выбрана следующая позиция. Обязательно должен включать позицию указанную в `pos`.\n * Для применения этого пропа необходимо включить фиче-флаг hintAddDynamicPositioning.\n */\n allowedPositions?: PopupPositionsType[];\n /**\n * Отключает анимацию.\n */\n disableAnimations?: boolean;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования хинта при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n}\n\nexport interface HintState {\n opened: boolean;\n position: PopupPositionsType;\n}\n\nconst Positions: PopupPositionsType[] = [\n 'top center',\n 'top left',\n 'top right',\n 'bottom center',\n 'bottom left',\n 'bottom right',\n 'left middle',\n 'left top',\n 'left bottom',\n 'right middle',\n 'right top',\n 'right bottom',\n];\n\ntype DefaultProps = Required<\n Pick<HintProps, 'pos' | 'allowedPositions' | 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>\n>;\n\n/**\n * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.\n */\n@rootNode\nexport class Hint extends React.PureComponent<HintProps, HintState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Hint';\n public static displayName = 'Hint';\n\n public static defaultProps: DefaultProps = {\n pos: 'top',\n manual: false,\n opened: false,\n maxWidth: 200,\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n };\n\n private getProps = createPropsGetter(Hint.defaultProps);\n\n public state: HintState = {\n opened: this.getProps().manual ? !!this.getProps().opened : false,\n position: DUMMY_LOCATION.position,\n };\n\n private timer: SafeTimer;\n private theme!: Theme;\n private featureFlags!: ReactUIFeatureFlags;\n private setRootNode!: TSetRootNode;\n private positions: Nullable<PopupPositionsType[]> = null;\n\n private popupRef = React.createRef<Popup>();\n\n public componentDidUpdate(prevProps: HintProps) {\n const { opened, manual, pos, allowedPositions } = this.getProps();\n if (!manual) {\n return;\n }\n if (this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n }\n if (opened !== prevProps.opened) {\n this.setState({ opened: !!opened });\n }\n\n if (this.featureFlags.hintAddDynamicPositioning) {\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\n public componentWillUnmount() {\n if (this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.featureFlags = getFullReactUIFlagsContext(flags);\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.hintPinOffset,\n popupMargin: theme.hintMargin,\n popupBorder: theme.hintBorder,\n popupBorderRadius: theme.hintBorderRadius,\n },\n this.theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public renderMain() {\n const { disableAnimations, useWrapper } = this.getProps();\n\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n const hasPin = !getFullReactUIFlagsContext(flags).kebabHintRemovePin || !isTheme2022(this.theme);\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n hasPin={hasPin}\n opened={this.state.opened}\n anchorElement={this.props.children}\n positions={this.getPositions()}\n backgroundColor={this.theme.hintBgColor}\n borderColor={HINT_BORDER_COLOR}\n onPositionChange={(position) => this.setState({ position })}\n disableAnimations={disableAnimations}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n useWrapper={useWrapper}\n ref={this.popupRef}\n withoutMobile\n >\n {this.renderContent()}\n </Popup>\n </CommonWrapper>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n private renderContent() {\n if (!this.props.text) {\n return null;\n }\n\n const { maxWidth } = this.getProps();\n const centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];\n const className = cx({\n [styles.content(this.theme)]: true,\n [styles.contentCenter(this.theme)]: centerAlignPositions.includes(this.state.position),\n });\n return (\n <div className={className} style={{ maxWidth }}>\n {this.props.text}\n </div>\n );\n }\n\n private getPositions = (): PopupPositionsType[] => {\n if (this.featureFlags.hintAddDynamicPositioning) {\n if (!this.positions) {\n const { allowedPositions, pos } = this.getProps();\n let priorityPosition: PopupPositionsType;\n switch (pos) {\n case 'top':\n priorityPosition = 'top center';\n break;\n case 'bottom':\n priorityPosition = 'bottom center';\n break;\n case 'left':\n priorityPosition = 'left middle';\n break;\n case 'right':\n priorityPosition = 'right middle';\n break;\n default:\n priorityPosition = pos;\n }\n const index = allowedPositions.indexOf(priorityPosition);\n if (index === -1) {\n throw new Error('Unexpected position passed to Hint. Expected one of: ' + allowedPositions.join(', '));\n }\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n return this.positions;\n }\n return Positions.filter((x) => x.startsWith(this.getProps().pos));\n };\n\n private handleMouseEnter = (e: MouseEventType) => {\n if (!this.getProps().manual && !this.timer) {\n this.timer = globalObject.setTimeout(this.open, 400);\n }\n\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: MouseEventType) => {\n if (!this.getProps().manual && this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n this.setState({ opened: false });\n }\n\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private open = () => {\n this.setState({ opened: true });\n };\n}\n"]}
@@ -1,9 +1,8 @@
1
1
  import React from 'react';
2
- import { PopupPositionsType, ShortPopupPositionsType } from '../../internal/Popup';
2
+ import { PopupPositionsType } from '../../internal/Popup';
3
3
  import { Nullable } from '../../typings/utility-types';
4
4
  import { CommonProps } from '../../internal/CommonWrapper';
5
5
  import { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';
6
- import { ReactUIFeatureFlags } from '../../lib/featureFlagsContext';
7
6
  export declare type TooltipTrigger =
8
7
  /** Наведение на children и на тултип */
9
8
  'hover'
@@ -44,11 +43,9 @@ export interface TooltipProps extends CommonProps {
44
43
  */
45
44
  render?: Nullable<() => React.ReactNode>;
46
45
  /**
47
- * Приоритетное расположение подсказки относительно текста.
48
- *
49
- * **Допустимые значения**: `"top"`, `"right"`, `"bottom"`, `"left"`, `"top left"`, `"top center"`, `"top right"`, `"right top"`, `"right middle"`, `"right bottom"`, `"bottom left"`, `"bottom center"`, `"bottom right"`, `"left top"`, `"left middle"`, `"left bottom"`.
46
+ * Значение по умолчанию: `"top left"`.
50
47
  */
51
- pos?: ShortPopupPositionsType | PopupPositionsType;
48
+ pos?: PopupPositionsType;
52
49
  /**
53
50
  * Триггер открытия тултипа
54
51
  * ```ts
@@ -115,7 +112,7 @@ export declare const TooltipDataTids: {
115
112
  readonly content: "Tooltip__content";
116
113
  readonly crossIcon: "Tooltip__crossIcon";
117
114
  };
118
- declare type DefaultProps = Required<Pick<TooltipProps, 'trigger' | 'disableAnimations' | 'useWrapper' | 'delayBeforeShow'>>;
115
+ declare type DefaultProps = Required<Pick<TooltipProps, 'pos' | 'trigger' | 'allowedPositions' | 'disableAnimations' | 'useWrapper' | 'delayBeforeShow'>>;
119
116
  export declare class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {
120
117
  static __KONTUR_REACT_UI__: string;
121
118
  static displayName: string;
@@ -128,14 +125,12 @@ export declare class Tooltip extends React.PureComponent<TooltipProps, TooltipSt
128
125
  private static triggersWithoutCloseButton;
129
126
  state: TooltipState;
130
127
  private theme;
131
- featureFlags: ReactUIFeatureFlags;
132
128
  private hoverTimeout;
133
129
  private contentElement;
134
130
  private positions;
135
131
  private clickedOutside;
136
132
  private setRootNode;
137
133
  private popupRef;
138
- getAllowedPositions(): ("top center" | "top left" | "top right" | "bottom center" | "bottom left" | "bottom right" | "left middle" | "left top" | "left bottom" | "right middle" | "right top" | "right bottom")[];
139
134
  componentDidUpdate(prevProps: TooltipProps): void;
140
135
  componentWillUnmount(): void;
141
136
  render(): JSX.Element;
@@ -156,8 +151,8 @@ export declare class Tooltip extends React.PureComponent<TooltipProps, TooltipSt
156
151
  hide(): void;
157
152
  private renderMain;
158
153
  private renderPopup;
159
- private getPositions;
160
154
  private refContent;
155
+ private getPositions;
161
156
  private getPopupAndLayerProps;
162
157
  private open;
163
158
  private close;