@skbkontur/react-ui 4.1.1 → 4.1.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.
- package/CHANGELOG.md +19 -0
- package/cjs/components/Checkbox/Checkbox.d.ts +5 -0
- package/cjs/components/Checkbox/Checkbox.js +29 -1
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.styles.d.ts +1 -0
- package/cjs/components/Checkbox/Checkbox.styles.js +23 -17
- package/cjs/components/Checkbox/Checkbox.styles.js.map +1 -1
- package/cjs/components/DateInput/DateInput.js +5 -1
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/DateInput/helpers/InternalDateMediator.d.ts +2 -2
- package/cjs/components/DateInput/helpers/InternalDateMediator.js +7 -3
- package/cjs/components/DateInput/helpers/InternalDateMediator.js.map +1 -1
- package/cjs/components/DateInput/helpers/inputNumber.d.ts +1 -1
- package/cjs/components/DateInput/helpers/inputNumber.js +45 -12
- package/cjs/components/DateInput/helpers/inputNumber.js.map +1 -1
- package/cjs/components/Gapped/Gapped.js +2 -1
- package/cjs/components/Gapped/Gapped.js.map +1 -1
- package/cjs/components/GlobalLoader/GlobalLoaderView.styles.js +5 -7
- package/cjs/components/GlobalLoader/GlobalLoaderView.styles.js.map +1 -1
- package/cjs/components/PasswordInput/PasswordInput.d.ts +1 -1
- package/cjs/components/PasswordInput/PasswordInput.js +8 -10
- package/cjs/components/PasswordInput/PasswordInput.js.map +1 -1
- package/cjs/components/PasswordInput/PasswordInputIcon.js +5 -1
- package/cjs/components/PasswordInput/PasswordInputIcon.js.map +1 -1
- package/cjs/components/Select/Select.js +4 -4
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +10 -0
- package/cjs/components/TokenInput/TokenInput.js +17 -2
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.js +1 -5
- package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
- package/cjs/internal/MaskedInput/MaskedInput.js +4 -2
- package/cjs/internal/MaskedInput/MaskedInput.js.map +1 -1
- package/cjs/internal/Menu/Menu.js +2 -5
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/lib/date/InternalDateGetter.d.ts +1 -1
- package/cjs/lib/date/InternalDateGetter.js +4 -1
- package/cjs/lib/date/InternalDateGetter.js.map +1 -1
- package/cjs/lib/date/InternalDateValidator.js +32 -22
- package/cjs/lib/date/InternalDateValidator.js.map +1 -1
- package/cjs/lib/date/types.d.ts +4 -0
- package/cjs/lib/date/types.js.map +1 -1
- package/cjs/lib/events/MouseDrag.js +5 -1
- package/cjs/lib/events/MouseDrag.js.map +1 -1
- package/components/Checkbox/Checkbox/Checkbox.js +29 -2
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +5 -0
- package/components/Checkbox/Checkbox.styles/Checkbox.styles.js +20 -17
- package/components/Checkbox/Checkbox.styles/Checkbox.styles.js.map +1 -1
- package/components/Checkbox/Checkbox.styles.d.ts +1 -0
- package/components/DateInput/DateInput/DateInput.js +9 -1
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/helpers/InternalDateMediator/InternalDateMediator.js +9 -3
- package/components/DateInput/helpers/InternalDateMediator/InternalDateMediator.js.map +1 -1
- package/components/DateInput/helpers/InternalDateMediator.d.ts +2 -2
- package/components/DateInput/helpers/inputNumber/inputNumber.js +53 -16
- package/components/DateInput/helpers/inputNumber/inputNumber.js.map +1 -1
- package/components/DateInput/helpers/inputNumber.d.ts +1 -1
- package/components/Gapped/Gapped/Gapped.js +2 -1
- package/components/Gapped/Gapped/Gapped.js.map +1 -1
- package/components/GlobalLoader/GlobalLoaderView.styles/GlobalLoaderView.styles.js +1 -2
- package/components/GlobalLoader/GlobalLoaderView.styles/GlobalLoaderView.styles.js.map +1 -1
- package/components/PasswordInput/PasswordInput/PasswordInput.js +12 -13
- package/components/PasswordInput/PasswordInput/PasswordInput.js.map +1 -1
- package/components/PasswordInput/PasswordInput.d.ts +1 -1
- package/components/PasswordInput/PasswordInputIcon/PasswordInputIcon.js +8 -3
- package/components/PasswordInput/PasswordInputIcon/PasswordInputIcon.js.map +1 -1
- package/components/Select/Select/Select.js +5 -3
- package/components/Select/Select/Select.js.map +1 -1
- package/components/TokenInput/TokenInput/TokenInput.js +6 -2
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +10 -0
- package/internal/InternalMenu/InternalMenu/InternalMenu.js +2 -6
- package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
- package/internal/MaskedInput/MaskedInput/MaskedInput.js +4 -2
- package/internal/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
- package/internal/Menu/Menu/Menu.js +2 -5
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/lib/date/InternalDateGetter/InternalDateGetter.js +3 -1
- package/lib/date/InternalDateGetter/InternalDateGetter.js.map +1 -1
- package/lib/date/InternalDateGetter.d.ts +1 -1
- package/lib/date/InternalDateValidator/InternalDateValidator.js +55 -41
- package/lib/date/InternalDateValidator/InternalDateValidator.js.map +1 -1
- package/lib/date/types/types.js.map +1 -1
- package/lib/date/types.d.ts +4 -0
- package/lib/events/MouseDrag/MouseDrag.js +5 -1
- package/lib/events/MouseDrag/MouseDrag.js.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","isNonNullable","isReactUINode","ThemeContext","CommonWrapper","ArrowChevronDownIcon","MobilePopup","cx","responsiveLayout","getRootNode","rootNode","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","noMargin","search","focusInput","handleSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","input","setTimeout","refMenu","menu","e","preventDefault","up","down","enter","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","theme","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","root","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","hasFixedWidth","menuWidth","menuAlign","disablePortal","maxMenuHeight","isWithSearch","Boolean","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","Array","isArray","getTextFromItem","toString","itemText","indexOf"],"mappings":"i5CAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,SAAP,MAAsB,WAAtB;;AAEA;AACEC,cADF;AAEEC,YAFF;AAGEC,kBAHF;AAIEC,UAJF;AAKEC,WALF;AAMEC,UANF;AAOO,uCAPP;AAQA,SAASC,MAAT,QAAuB,6BAAvB;AACA,SAASC,mBAAT,QAAoC,+BAApC;AACA,SAASC,MAAT,QAA2D,WAA3D;AACA,SAASC,iBAAT,QAAkC,kCAAlC;AACA,SAASC,WAAT,QAA4B,uBAA5B;AACA,SAASC,KAAT,QAAsB,UAAtB;AACA,SAASC,IAAT,QAAqB,qBAArB;AACA,SAASC,QAAT,QAAwC,aAAxC;AACA,SAASC,aAAT,QAA8B,kBAA9B;AACA,SAASC,WAAT,QAA4B,4BAA5B;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,UAAT,EAAqBC,aAArB,EAAoCC,aAApC,QAAyD,iBAAzD;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAAsBC,aAAtB,QAA2C,8BAA3C;AACA,SAASC,oBAAT,QAAqC,2BAArC;AACA,SAASC,WAAT,QAA4B,4BAA5B;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,gBAAT,QAAiC,+BAAjC;AACA,SAASC,WAAT,EAAsBC,QAAtB,QAAoD,oBAApD;;AAEA,SAASC,IAAT,QAAqB,QAArB;AACA,SAAuBC,kBAAvB,QAAiD,UAAjD;AACA,SAASC,MAAT,QAAuB,iBAAvB;AACA,SAASC,cAAT,QAA+B,eAA/B;;;;;;;;;;;AAWA,IAAMC,iBAAiB,GAAG;AACxBC,EAAAA,QAAQ,EAAE,IADc;AAExBC,EAAAA,KAAK,EAAE,IAFiB;AAGxBC,EAAAA,GAAG,EAAE,IAHmB;AAIxBC,EAAAA,IAAI,EAAE,IAJkB;AAKxBC,EAAAA,OAAO,EAAE,IALe;;AAOxBC,EAAAA,YAAY,EAAE,IAPU;AAQxBC,EAAAA,YAAY,EAAE,IARU;AASxBC,EAAAA,WAAW,EAAE,IATW,EAA1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqHA,WAAaC,MAAb,WADCnC,MAAM,CAAC,QAAD,EAAWuB,kBAAX,CACP,EAHCJ,gBAGD,UAFCE,QAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CSe,IAAAA,KA7CT,GA6CsC;AAClCC,MAAAA,MAAM,EAAE,KAD0B;AAElCC,MAAAA,KAAK,EAAE,MAAKC,KAAL,CAAWC,YAFgB;AAGlCC,MAAAA,aAAa,EAAE,EAHmB,EA7CtC;;;;;;;AAuDUC,IAAAA,aAvDV,GAuDwD,IAvDxD;AAwDUC,IAAAA,QAxDV,GAwDqBjC,iBAAiB,CAACyB,MAAM,CAACS,YAAR,CAxDtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFSC,IAAAA,IApFT,GAoFgB,YAAM;AAClB,UAAI,CAAC,MAAKT,KAAL,CAAWC,MAAhB,EAAwB;AACtB,cAAKS,QAAL,CAAc,EAAET,MAAM,EAAE,IAAV,EAAd;;AAEA,YAAI,MAAKE,KAAL,CAAWQ,MAAf,EAAuB;AACrB,gBAAKR,KAAL,CAAWQ,MAAX;AACD;AACF;AACF,KA5FH;;;;;AAiGSC,IAAAA,KAjGT,GAiGiB,YAAM;AACnB,UAAI,MAAKZ,KAAL,CAAWC,MAAf,EAAuB;AACrB,cAAKS,QAAL,CAAc,EAAET,MAAM,EAAE,KAAV,EAAiBI,aAAa,EAAE,EAAhC,EAAd;;AAEA,YAAI,MAAKF,KAAL,CAAWU,OAAf,EAAwB;AACtB,gBAAKV,KAAL,CAAWU,OAAX;AACD;AACF;AACF,KAzGH;;;;;AA8GSC,IAAAA,KA9GT,GA8GiB,YAAM;AACnB,UAAI,MAAKR,aAAL,IAAsB,MAAKA,aAAL,CAAmBQ,KAA7C,EAAoD;AAClD,cAAKR,aAAL,CAAmBQ,KAAnB;AACD;AACF,KAlHH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmKUC,IAAAA,sBAnKV,GAmKmC,YAAoB;AACnD,8BAAiC,MAAKC,WAAL,EAAjC,CAAQC,KAAR,qBAAQA,KAAR,CAAeC,aAAf,qBAAeA,aAAf;;AAEA,UAAMC,YAA0B,GAAG;AACjClB,QAAAA,MAAM,EAAE,MAAKD,KAAL,CAAWC,MADc;AAEjCgB,QAAAA,KAAK,EAALA,KAFiC;AAGjCC,QAAAA,aAAa,EAAbA,aAHiC;AAIjCE,QAAAA,OAAO,EAAE,MAAKC,MAJmB;AAKjCC,QAAAA,SAAS,EAAE,MAAKC,SALiB,EAAnC;;;AAQA,aAAOJ,YAAP;AACD,KA/KH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoUUK,IAAAA,SApUV,GAoUsB,UAACC,QAAD,EAAwB;AAC1C;AACE,qCAAK,SAAS,EAAE3C,EAAE,gBAAIM,MAAM,CAACsC,MAAP,EAAJ,IAAsB,CAACD,QAAvB,OAAlB;AACE,4BAAC,KAAD,IAAO,KAAK,EAAE,MAAKzB,KAAL,CAAWK,aAAzB,EAAwC,GAAG,EAAE,MAAKsB,UAAlD,EAA8D,aAAa,EAAE,MAAKC,YAAlF,EAAgG,KAAK,EAAC,MAAtG,GADF,CADF;;;AAKD,KA1UH;;AA4UUC,IAAAA,YA5UV,GA4UyB,UAAC3B,KAAD,EAA6B;AAClD,UAAM4B,QAAQ,GAAG,MAAKC,cAAtB;;AAEA,aAAO,MAAKC,QAAL;AACL,gBAACC,MAAD,EAAiBC,IAAjB,EAAwDC,CAAxD,EAAmEC,OAAnE,EAA0G;AACxG,YAAI7D,UAAU,CAAC2D,IAAD,CAAd,EAAsB;AACpB,cAAMG,OAAO,GAAGH,IAAI,EAApB;;AAEA,4BAAI/E,KAAK,CAACmF,cAAN,CAAqBD,OAArB,CAAJ,EAAmC;AACjC,gCAAOlF,KAAK,CAACoF,YAAN,CAAmBF,OAAnB,EAA4B,EAAEG,GAAG,EAAEL,CAAP,EAAUL,QAAQ,EAARA,QAAV,EAA5B,CAAP;AACD;;AAED,iBAAO,IAAP;AACD;;AAED,0BAAI3E,KAAK,CAACmF,cAAN,CAAqBJ,IAArB,CAAJ,EAAgC;AAC9B,cAAIzD,aAAa,CAAC,UAAD,EAAayD,IAAb,CAAjB,EAAqC;AACnC,gCAAO/E,KAAK,CAACoF,YAAN,CAAmBL,IAAnB,EAAyB,EAAEM,GAAG,EAAEL,CAAP,EAAUL,QAAQ,EAARA,QAAV,EAAzB,CAAP;AACD;AACD,8BAAO3E,KAAK,CAACoF,YAAN,CAAmBL,IAAnB,EAAyB,EAAEM,GAAG,EAAEL,CAAP,EAAzB,CAAP;AACD;;AAED;AACE,8BAAC,QAAD;AACE,YAAA,GAAG,EAAEA,CADP;AAEE,YAAA,KAAK,EAAE,MAAKM,cAAL,CAAoBR,MAApB,EAA4B/B,KAA5B,IAAqC,UAArC,GAAkD,IAF3D;AAGE,YAAA,OAAO,EAAE,MAAKwC,MAAL,CAAYC,IAAZ,gCAAuBV,MAAvB,CAHX;AAIE,YAAA,OAAO,EAAEG,OAJX;AAKE,YAAA,QAAQ,EAAEN,QALZ;;AAOG,gBAAKvB,QAAL,GAAgBqC,UAAhB,CAA0CX,MAA1C,EAAkDC,IAAlD,CAPH,CADF;;;AAWD,OA9BI,CAAP;;AAgCD,KA/WH;;AAiXUW,IAAAA,0BAjXV,GAiXuC,YAAM;AACzC,aAAO7D,WAAW,+BAAlB;AACD,KAnXH;;AAqXU2C,IAAAA,UArXV,GAqXuB,UAACmB,KAAD,EAAkB;AACrC;AACAC,MAAAA,UAAU,CAAC,oBAAMD,KAAN,oBAAMA,KAAK,CAAEhC,KAAP,EAAN,EAAD,EAAuB,CAAvB,CAAV;AACD,KAxXH;;AA0XUkC,IAAAA,OA1XV,GA0XoB,UAACC,IAAD,EAAgB;AAChC,YAAKA,IAAL,GAAYA,IAAZ;AACD,KA5XH;;AA8XU5B,IAAAA,MA9XV,GA8XmB,YAAM;AACrB,UAAI,MAAKrB,KAAL,CAAWC,MAAf,EAAuB;AACrB,cAAKW,KAAL;AACD,OAFD,MAEO;AACL,cAAKH,IAAL;AACD;AACF,KApYH;;AAsYUc,IAAAA,SAtYV,GAsYsB,UAAC2B,CAAD,EAAyC;AAC3D,UAAI,CAAC,MAAKlD,KAAL,CAAWC,MAAhB,EAAwB;AACtB,YAAItC,UAAU,CAACuF,CAAD,CAAV,IAAiB1F,kBAAkB,CAAC0F,CAAD,CAAvC,EAA4C;AAC1CA,UAAAA,CAAC,CAACC,cAAF;AACA,gBAAK1C,IAAL;AACD;AACF,OALD,MAKO;AACL,gBAAQ,IAAR;AACE,eAAK/C,WAAW,CAACwF,CAAD,CAAhB;AACE,kBAAKpC,KAAL;AACA,kBAAKF,KAAL;AACA;AACF,eAAKrD,YAAY,CAAC2F,CAAD,CAAjB;AACEA,YAAAA,CAAC,CAACC,cAAF;AACA,gBAAI,MAAKF,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUG,EAAV;AACD;AACD;AACF,eAAK9F,cAAc,CAAC4F,CAAD,CAAnB;AACEA,YAAAA,CAAC,CAACC,cAAF;AACA,gBAAI,MAAKF,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUI,IAAV;AACD;AACD;AACF,eAAK5F,UAAU,CAACyF,CAAD,CAAf;AACEA,YAAAA,CAAC,CAACC,cAAF,GADF,CACsB;AACpB,gBAAI,MAAKF,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUK,KAAV,CAAgBJ,CAAhB;AACD;AACD,kBAtBJ;;AAwBD;AACD,UAAI,MAAK/C,KAAL,CAAWmB,SAAf,EAA0B;AACxB,cAAKnB,KAAL,CAAWmB,SAAX,CAAqB4B,CAArB;AACD;AACF,KAzaH;;AA2aUtB,IAAAA,YA3aV,GA2ayB,UAAC1B,KAAD,EAAmB;AACxC,YAAKQ,QAAL,CAAc,EAAEL,aAAa,EAAEH,KAAjB,EAAd;AACA,0BAAK+C,IAAL,gCAAWM,aAAX,CAAyB,CAAzB;AACD,KA9aH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0eUC,IAAAA,SA1eV,GA0esB,UAACnB,OAAD,EAA2C;AAC7D,YAAK/B,aAAL,GAAqB+B,OAArB;AACD,KA5eH;;AA8eUoB,IAAAA,SA9eV,GA8esB,UAACtC,YAAD,EAAgC;AAClD,UAAMuC,MAAM,GAAG,MAAKvD,KAAL,CAAWwD,aAAX;AACX,YAAKxD,KAAL,CAAWwD,aAAX,CAAyBxC,YAAzB,CADW;AAEX,YAAKyC,mBAAL,CAAyBzC,YAAzB,CAFJ;;AAIA,UAAMb,aAAa,GAAGnD,KAAK,CAAC0G,QAAN,CAAeC,IAAf,CAAoBJ,MAApB,CAAtB;;AAEA,aAAO,aAAAvG,KAAK,CAACmF,cAAN,CAAqBhC,aAArB;AACHnD,MAAAA,KAAK,CAACoF,YAAN,CAAmBjC,aAAnB,EAAwD;AACtDyD,QAAAA,GAAG,EAAE,MAAKP,SAD4C;AAEtDQ,QAAAA,OAAO,EAAE,MAAK7D,KAAL,CAAW6D,OAFkC;AAGtDC,QAAAA,MAAM,EAAE,MAAK9D,KAAL,CAAW8D,MAHmC,EAAxD,CADG;;AAMH3D,MAAAA,aANJ;AAOD,KA5fH,oDA2DS4D,kBA3DT,GA2DE,4BAA0BC,UAA1B,EAAkEC,SAAlE,EAAkG,CAChG,IAAI,CAACA,SAAS,CAACnE,MAAX,IAAqB,KAAKD,KAAL,CAAWC,MAApC,EAA4C,CAC1CoE,MAAM,CAACC,gBAAP,CAAwB,UAAxB,EAAoC,KAAK1D,KAAzC,EACD,CACD,IAAIwD,SAAS,CAACnE,MAAV,IAAoB,CAAC,KAAKD,KAAL,CAAWC,MAApC,EAA4C,CAC1CoE,MAAM,CAACE,mBAAP,CAA2B,UAA3B,EAAuC,KAAK3D,KAA5C,EACD,CACF,CAlEH,QAoES4D,MApET,GAoEE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACC,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBACE,oBAAC,YAAD,CAAc,QAAd,IAAuB,KAAK,EAAEpF,cAAc,CAACoF,KAAD,EAAQ,MAAI,CAACtE,KAAb,CAA5C,IAAkE,MAAI,CAACuE,UAAL,EAAlE,CADF,CAGD,CANH,CADF,CAUD,CA/EH,CAiFE;AACF;AACA,KAnFA,QAoHUC,eApHV,GAoHE,2BAA0B,CACxB,IAAI,KAAKxE,KAAL,CAAWZ,QAAf,EAAyB,CACvB,OAAO,IAAP,CACD,CAED,IAAI,KAAKwC,cAAT,EAAyB,CACvB,OAAO,KAAK6C,gBAAL,EAAP,CACD,CAED,IAAI,KAAK5E,KAAL,CAAWC,MAAf,EAAuB,CACrB,OAAO,KAAK4E,UAAL,EAAP,CACD,CAED,OAAO,IAAP,CACD,CAlIH,QAoIUH,UApIV,GAoIE,sBAAqB,UACnB,IAAMvD,YAAY,GAAG,KAAKJ,sBAAL,EAArB,CACA,IAAM2C,MAAM,GAAG,KAAKD,SAAL,CAAetC,YAAf,CAAf,CAEA,IAAMW,QAAQ,GAAG,KAAKC,cAAtB,CAEA,IAAM+C,KAAK,GAAG,EACZC,KAAK,EAAE,KAAK5E,KAAL,CAAW4E,KADN,EAEZC,QAAQ,EAAE,KAAK7E,KAAL,CAAW6E,QAAX,IAAuBC,SAFrB,EAAd,CAKA,IAAMC,IAAI,gBACR,8BAAM,SAAS,EAAEpG,EAAE,kBAAIM,MAAM,CAAC8F,IAAP,EAAJ,IAAoB,IAApB,OAA2B9F,MAAM,CAAC+F,UAAP,CAAkB,KAAKV,KAAvB,CAA3B,IAA2D3C,QAA3D,QAAnB,EAA2F,KAAK,EAAEgD,KAAlG,IACGpB,MADH,EAEG,KAAKiB,eAAL,EAFH,CADF,CAOA,oBACE,oBAAC,aAAD,aAAe,WAAW,EAAE,KAAKS,WAAjC,IAAkD,KAAKjF,KAAvD,gBACE,oBAAC,WAAD,IACE,cAAc,EAAE,KAAKS,KADvB,EAEE,cAAc,EAAE,KAAKA,KAFvB,EAGE,MAAM,EAAEkB,QAAQ,GAAG,KAAH,GAAW,KAAK9B,KAAL,CAAWC,MAHxC,IAKGiF,IALH,CADF,CADF,CAWD,CAjKH,QAiLUlE,WAjLV,GAiLE,uBAAsB,kBACpB,IAAMd,KAAK,GAAG,KAAKmF,QAAL,EAAd,CACA,IAAMnD,IAAI,GAAG,KAAKoD,cAAL,CAAoBpF,KAApB,CAAb,CAEA,IAAI1B,aAAa,CAAC0B,KAAD,CAAjB,EAA0B,CACxB,OAAO,EACLe,KAAK,EAAE,KAAKV,QAAL,GAAgBgF,WAAhB,CAA4BrF,KAA5B,EAAmCgC,IAAnC,CADF,EAELhB,aAAa,EAAE,KAFV,EAAP,CAID,CAED,OAAO,EACLD,KAAK,eAAE,kCAAO,KAAKd,KAAL,CAAWqF,WAAX,qBAA0B,KAAK5H,MAA/B,qBAA0B,aAAa4H,WAAvC,CAAP,CADF,EAELtE,aAAa,EAAE,IAFV,EAAP,CAID,CAhMH,QAkMUuE,gBAlMV,GAkME,0BAAyB/F,IAAzB,EAAuD,CACrD,IAAI,KAAKS,KAAL,CAAWV,GAAX,KAAmB,MAAvB,EAA+B,CAC7B,OAAOL,MAAM,CAACsG,YAAP,CAAoB,KAAKjB,KAAzB,CAAP,CACD,CAED,QAAQ/E,IAAR,GACE,KAAK,OAAL,CACE,OAAON,MAAM,CAACuG,aAAP,CAAqB,KAAKlB,KAA1B,CAAP,CACF,KAAK,QAAL,CACE,OAAOrF,MAAM,CAACwG,cAAP,CAAsB,KAAKnB,KAA3B,CAAP,CACF,KAAK,OAAL,CACA,QACE,OAAOrF,MAAM,CAACyG,aAAP,CAAqB,KAAKpB,KAA1B,CAAP,CAPJ,CASD,CAhNH,QAkNUb,mBAlNV,GAkNE,6BAA4BkC,MAA5B,EAAkD,gBAChD,IAAMC,WAAwB,gBACzB/H,WAAW,CAAC,KAAKmC,KAAN,EAAab,iBAAb,CADc,IAE5B0G,KAAK,EAAE,MAFqB,EAG5BzG,QAAQ,EAAE,KAAKY,KAAL,CAAWZ,QAHO,EAI5BwF,KAAK,EAAE,MAJqB,EAK5B3D,OAAO,EAAE0E,MAAM,CAAC1E,OALY,EAM5BE,SAAS,EAAEwE,MAAM,CAACxE,SANU,EAO5B2E,MAAM,EAAEH,MAAM,CAAC7F,MAPa,GAA9B,CAUA,IAAMiG,UAAU,GAAG,EACjBC,SAAS,EAAErH,EAAE,kBACVM,MAAM,CAAC6B,KAAP,EADU,IACO,KAAKd,KAAL,CAAWV,GAAX,KAAmB,MAD1B,OAEVL,MAAM,CAACoG,WAAP,CAAmB,KAAKf,KAAxB,CAFU,IAEuBqB,MAAM,CAAC5E,aAF9B,OAGV9B,MAAM,CAACgH,oBAAP,EAHU,IAGsBN,MAAM,CAAC5E,aAAP,IAAwB,KAAKf,KAAL,CAAWV,GAAX,KAAmB,SAHjE,OAIVL,MAAM,CAACiH,mBAAP,CAA2B,KAAK5B,KAAhC,CAJU,IAI+BqB,MAAM,CAAC5E,aAAP,IAAwB,KAAKf,KAAL,CAAWZ,QAJlE,QADI,EAOjBuF,KAAK,EAAE,EACLwB,YAAY,EAAE,KAAKC,gBAAL,EADT,EAPU,EAAnB,CAYA,IAAMC,WAAW,GAAG,KAAKrG,KAAL,CAAWV,GAAX,KAAmB,SAAvC,CAEA,oBACE,oBAAC,MAAD,EAAYsG,WAAZ,eACE,6BAAK,SAAS,EAAE3G,MAAM,CAACqH,qBAAP,EAAhB,IACG,KAAKtG,KAAL,CAAWuG,KAAX,iBAAoB,6BAAK,SAAS,EAAE,KAAKjB,gBAAL,CAAsB,KAAKtF,KAAL,CAAWT,IAAjC,CAAhB,IAAyD,KAAKS,KAAL,CAAWuG,KAApE,CADvB,eAEE,4BAAUR,UAAV,EAAuBJ,MAAM,CAAC7E,KAA9B,CAFF,eAIE,6BACE,SAAS,EAAEnC,EAAE,CAACM,MAAM,CAACuH,SAAP,CAAiB,KAAKlC,KAAtB,CAAD,mBACVrF,MAAM,CAACwH,aAAP,CAAqB,KAAKnC,KAA1B,CADU,IACyB,KAAKtE,KAAL,CAAWZ,QADpC,OAEVH,MAAM,CAACyH,cAAP,EAFU,IAEgBL,WAFhB,QADf,iBAME,oBAAC,oBAAD,OANF,CAJF,CADF,CADF,CAiBD,CA5PH,QA8PUD,gBA9PV,GA8PE,4BAAmC,mBACjC,IAAMO,eAAe,GAAG,SAAlBA,eAAkB,GAAM,CAC5B,QAAQ,MAAI,CAAC3G,KAAL,CAAWT,IAAnB,GACE,KAAK,OAAL,CACE,OAAO,MAAI,CAAC+E,KAAL,CAAWsC,kBAAlB,CACF,KAAK,QAAL,CACE,OAAO,MAAI,CAACtC,KAAL,CAAWuC,mBAAlB,CACF,KAAK,OAAL,CACA,QACE,OAAO,MAAI,CAACvC,KAAL,CAAWwC,kBAAlB,CAPJ,CASD,CAVD,CAWA,IAAMC,gBAAgB,GAAGC,UAAU,CAACL,eAAe,EAAhB,CAAV,IAAiC,CAA1D,CAEA,OAAOI,gBAAP,CACD,CA7QH,QA+QUrC,UA/QV,GA+QE,sBAAsC,CACpC,IAAMnD,MAAM,GAAG,KAAKvB,KAAL,CAAWuB,MAAX,gBACb,6BAAK,SAAS,EAAEtC,MAAM,CAACsC,MAAP,EAAhB,EAAiC,SAAS,EAAE,KAAKH,SAAjD,iBACE,oBAAC,KAAD,IAAO,GAAG,EAAE,KAAKI,UAAjB,EAA6B,aAAa,EAAE,KAAKC,YAAjD,EAA+D,KAAK,EAAC,MAArE,GADF,CADa,GAIX,IAJJ,CAMA,IAAM1B,KAAK,GAAG,KAAKmF,QAAL,EAAd,CACA,IAAM+B,aAAa,GAAG,CAAC,CAAC,KAAKjH,KAAL,CAAWkH,SAAb,IAA0B,KAAKlH,KAAL,CAAWkH,SAAX,KAAyB,MAAzE,CAEA,oBACE,oBAAC,iBAAD,IACE,SAAS,EAAE,KAAKxE,0BADlB,EAEE,OAAO,EAAE,CAAC,CAFZ,EAGE,KAAK,EAAE,KAAK1C,KAAL,CAAWmH,SAHpB,EAIE,aAAa,EAAE,KAAKnH,KAAL,CAAWoH,aAJ5B,EAKE,aAAa,EAAEH,aALjB,iBAOE,oBAAC,IAAD,IACE,GAAG,EAAE,KAAKpE,OADZ,EAEE,KAAK,EAAE,KAAK7C,KAAL,CAAWkH,SAFpB,EAGE,WAAW,EAAE,KAAKzG,KAHpB,EAIE,SAAS,EAAE,KAAKT,KAAL,CAAWqH,aAJxB,EAKE,KAAK,EAAE,KAAKrH,KAAL,CAAWmH,SALpB,IAOG5F,MAPH,EAQG,KAAKG,YAAL,CAAkB3B,KAAlB,CARH,CAPF,CADF,CAoBD,CA7SH,QA+SU0E,gBA/SV,GA+SE,4BAA4C,CAC1C,IAAMlD,MAAM,GAAG,KAAKvB,KAAL,CAAWuB,MAAX,GAAoB,KAAKF,SAAL,CAAe,IAAf,CAApB,GAA2C,IAA1D,CACA,IAAMtB,KAAK,GAAG,KAAKmF,QAAL,EAAd,CAEA,IAAMoC,YAAY,GAAGC,OAAO,CAAChG,MAAD,CAA5B,CAEA,oBACE,oBAAC,WAAD,IACE,oBAAoB,EAAEA,MADxB,EAEE,OAAO,EAAE,KAAKvB,KAAL,CAAWwH,oBAFtB,EAGE,aAAa,EAAEF,YAHjB,EAIE,cAAc,EAAE,KAAK7G,KAJvB,EAKE,MAAM,EAAE,KAAKZ,KAAL,CAAWC,MALrB,iBAOE,oBAAC,IAAD,IAAM,SAAS,EAAE,KAAjB,EAAwB,WAAW,EAAE,KAAKW,KAA1C,EAAiD,sBAAsB,MAAvE,EAAwE,SAAS,EAAE,MAAnF,IACG,KAAKiB,YAAL,CAAkB3B,KAAlB,CADH,CAPF,CADF,CAaD,CAlUH,QAgbUwC,MAhbV,GAgbE,gBAAexC,KAAf,EAA8B,CAC5B,KAAKY,KAAL,GACA,KAAKJ,QAAL,CAAc,EAAET,MAAM,EAAE,KAAV,EAAiBC,KAAK,EAALA,KAAjB,EAAd,EAEA,IAAI,CAAC,KAAKuC,cAAL,CAAoB,KAAK4C,QAAL,EAApB,EAAqCnF,KAArC,CAAL,EAAkD,wCAChD,6CAAKC,KAAL,EAAWyH,aAAX,6DAA2B1H,KAA3B,EACD,CACF,CAvbH,QAybUmF,QAzbV,GAybE,oBAAmB,CACjB,IAAI,KAAKlF,KAAL,CAAWD,KAAX,KAAqB+E,SAAzB,EAAoC,CAClC,OAAO,KAAK9E,KAAL,CAAWD,KAAlB,CACD,CACD,OAAO,KAAKF,KAAL,CAAWE,KAAlB,CACD,CA9bH,QAgcU8B,QAhcV,GAgcE,kBAAiB6F,EAAjB,EAAuG,CACrG,IAAQC,KAAR,GAAkB,KAAK3H,KAAvB,CAAQ2H,KAAR,CACA,IAAI,CAACA,KAAL,EAAY,CACV,OAAO,EAAP,CACD,CACD,IAAMC,OAAO,GAAG,KAAK/H,KAAL,CAAWK,aAAX,IAA4B,KAAKL,KAAL,CAAWK,aAAX,CAAyB2H,WAAzB,EAA5C,CAEA,IAAMC,MAAyB,GAAG,EAAlC,CACA,IAAIC,KAAK,GAAG,CAAZ,CACA,qDAAoBJ,KAApB,wCAA2B,KAAhBK,KAAgB,eACzB,sBAA+BC,cAAc,CAACD,KAAD,CAA7C,CAAOjI,MAAP,sBAAcgC,KAAd,sBAAoBE,QAApB,sBAEA,IAAI,CAAC2F,OAAD,IAAY,KAAKxH,QAAL,GAAgB8H,UAAhB,CAAmCnI,MAAnC,EAA0CgC,KAA1C,EAAgD6F,OAAhD,CAAhB,EAA0E,CACxEE,MAAM,CAACK,IAAP,CAAYT,EAAE,CAAC3H,MAAD,EAAQgC,KAAR,EAAcgG,KAAd,EAAqB9F,QAArB,CAAd,EACA,EAAE8F,KAAF,CACD,CACF,CAED,OAAOD,MAAP,CACD,CAndH,QAqdU3C,cArdV,GAqdE,wBAAuBpF,KAAvB,EAAiD,CAC/C,IAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK+E,SAAhC,EAA2C,CACzC,OAAO,IAAP,CACD,CAED,IAAM6C,KAAK,GAAG,KAAK3H,KAAL,CAAW2H,KAAX,IAAoB,EAAlC,CAEA,sDAAoBA,KAApB,2CAA2B,KAAhBK,KAAgB,gBACzB,uBAA0BC,cAAc,CAACD,KAAD,CAAxC,CAAOI,SAAP,uBAAkBrG,MAAlB,uBAEA,IAAI,KAAKO,cAAL,CAAoB8F,SAApB,EAA+BrI,KAA/B,CAAJ,EAA2C,CACzC,OAAOgC,MAAP,CACD,CACF,CACD,OAAO,IAAP,CACD,CApeH,QAseUO,cAteV,GAseE,wBAAuB+F,MAAvB,EAAiDC,MAAjD,EAA2E,CACzE,OAAOjK,aAAa,CAACgK,MAAD,CAAb,IAAyBhK,aAAa,CAACiK,MAAD,CAAtC,IAAkD,KAAKlI,QAAL,GAAgBkC,cAAhB,CAAuC+F,MAAvC,EAA+CC,MAA/C,CAAzD,CACD,CAxeH,iBAAqDtL,KAAK,CAACuL,SAA3D,WACgBC,mBADhB,GACsC,QADtC,UAGgBC,SAHhB,GAG4B,EACxBnG,cAAc,EAAErF,SAAS,CAACyL,IADF,EAExBzI,YAAY,EAAEhD,SAAS,CAAC0L,GAFA,EAGxBvB,aAAa,EAAEnK,SAAS,CAAC2L,IAHD,EAIxBxJ,QAAQ,EAAEnC,SAAS,CAAC2L,IAJI,EAKxBvJ,KAAK,EAAEpC,SAAS,CAAC2L,IALO,EAMxBV,UAAU,EAAEjL,SAAS,CAACyL,IANE,EAOxBf,KAAK,EAAE1K,SAAS,CAAC4L,SAAV,CAAoB,CAAC5L,SAAS,CAAC6L,KAAX,EAAkB7L,SAAS,CAAC8L,MAA5B,CAApB,CAPiB,EAQxB1B,aAAa,EAAEpK,SAAS,CAAC+L,MARD,EASxBnE,QAAQ,EAAE5H,SAAS,CAAC4L,SAAV,CAAoB,CAAC5L,SAAS,CAAC+L,MAAX,EAAmB/L,SAAS,CAACgM,MAA7B,CAApB,CATc,EAUxB5D,WAAW,EAAEpI,SAAS,CAACiM,IAVC,EAWxBzG,UAAU,EAAExF,SAAS,CAACyL,IAXE,EAYxBtD,WAAW,EAAEnI,SAAS,CAACyL,IAZC,EAaxBnH,MAAM,EAAEtE,SAAS,CAAC2L,IAbM,EAcxB7I,KAAK,EAAE9C,SAAS,CAAC0L,GAdO,EAexB/D,KAAK,EAAE3H,SAAS,CAAC4L,SAAV,CAAoB,CAAC5L,SAAS,CAAC+L,MAAX,EAAmB/L,SAAS,CAACgM,MAA7B,CAApB,CAfiB,EAgBxBxB,aAAa,EAAExK,SAAS,CAACyL,IAhBD,EAiBxBjJ,YAAY,EAAExC,SAAS,CAACyL,IAjBA,EAkBxBhJ,YAAY,EAAEzC,SAAS,CAACyL,IAlBA,EAmBxB/I,WAAW,EAAE1C,SAAS,CAACyL,IAnBC,EAoBxBvH,SAAS,EAAElE,SAAS,CAACyL,IApBG,EAH5B,UA0BgBrI,YA1BhB,GA0B+B,EAC3B+E,WAAW,EAAXA,WAD2B,EAE3B3C,UAAU,EAAVA,UAF2B,EAG3BH,cAAc,EAAdA,cAH2B,EAI3B4F,UAAU,EAAVA,UAJ2B,EAK3B5I,GAAG,EAAE,SALsB,EA1B/B,UAkCgBP,IAlChB,GAkCuBA,IAlCvB,UAmCgBoK,GAnChB,GAmCsB,iCAAM,oBAAC,aAAD,OAAN,EAnCtB,sBAqCyB,UAACjH,OAAD,EAA8D,CACnFhF,SAAS,CACP,cAAAF,KAAK,CAACmF,cAAN,CAAqBD,OAArB,KAAiC,OAAOA,OAAP,KAAmB,UAD7C,EAEP,qEAFO,CAAT,CAIA,OAAOA,OAAP,CACD,CA3CH;AA+fA,SAASkD,WAAT,CAAoCrF,KAApC,EAAmDgC,IAAnD,EAA0E;AACxE,SAAOA,IAAP;AACD;;AAED,SAASU,UAAT,CAAmC1C,KAAnC,EAAkDgC,IAAlD,EAAgE;AAC9D,SAAOA,IAAP;AACD;;AAED,SAASO,cAAT,CAAgC+F,MAAhC,EAAgDC,MAAhD,EAAgE;AAC9D,SAAOD,MAAM,KAAKC,MAAlB;AACD;;AAED,SAASL,cAAT,CAAwBD,KAAxB,EAAoC;AAClC,MAAIoB,KAAK,CAACC,OAAN,CAAcrB,KAAd,CAAJ,EAA0B;AACxB,WAAOA,KAAP;AACD;;AAED,SAAO,CAACA,KAAD,EAAQA,KAAR,EAAelD,SAAf,CAAP;AACD;;AAED,IAAMwE,eAAe,GAAG,SAAlBA,eAAkB,CAACvH,IAAD,EAAuB;AAC7C,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAOA,IAAP;AACD;;AAED,MAAI3D,UAAU,CAAC2D,IAAD,CAAd,EAAsB;AACpB,WAAOuH,eAAe,CAACvH,IAAI,EAAL,CAAtB;AACD;;AAED,oBAAI/E,KAAK,CAACmF,cAAN,CAAqBJ,IAArB,CAAJ,EAAgC;AAC9B,WAAOrE,mBAAmB,CAACqE,IAAD,CAA1B;AACD;;AAED,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAOA,IAAI,CAACwH,QAAL,CAAc,EAAd,CAAP;AACD;;AAED,SAAO,EAAP;AACD,CAlBD;;AAoBA,SAASrB,UAAT,CAA4BnI,KAA5B,EAA2CgC,IAA3C,EAAsD6F,OAAtD,EAAuE;AACrE,MAAI7F,IAAI,KAAKnC,MAAM,CAACuJ,GAApB,EAAyB;AACvB,WAAO,KAAP;AACD;;AAED,MAAMK,QAAQ,GAAGF,eAAe,CAACvH,IAAD,CAAhC;;AAEA,MAAI,CAACyH,QAAL,EAAe;AACb,WAAO,KAAP;AACD;;AAED,SAAOA,QAAQ,CAAC3B,WAAT,GAAuB4B,OAAvB,CAA+B7B,OAA/B,MAA4C,CAAC,CAApD;AACD","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction, isNonNullable, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<SelectItem<TValue, TItem>>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = this.getButton(buttonParams);\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })} style={style}>\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch(true) : null;\n const value = this.getValue();\n\n const isWithSearch = Boolean(search);\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n useFullHeight={isWithSearch}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getSearch = (noMargin?: boolean) => {\n return (\n <div className={cx({ [styles.search()]: !noMargin })}>\n <Input value={this.state.searchPattern} ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile } as MenuItemProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n >\n {this.getProps().renderItem<TValue, TItem>(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem<TValue>(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual<TValue>(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: any): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","isNonNullable","isReactUINode","ThemeContext","CommonWrapper","ArrowChevronDownIcon","MobilePopup","cx","responsiveLayout","getRootNode","rootNode","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","noMargin","search","focusInput","handleSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","input","setTimeout","refMenu","menu","e","preventDefault","up","down","enter","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","theme","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","root","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","hasFixedWidth","menuWidth","menuAlign","disablePortal","maxMenuHeight","isWithSearch","Boolean","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","Array","isArray","getTextFromItem","toString","itemText","indexOf"],"mappings":"i5CAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,SAAP,MAAsB,WAAtB;;AAEA;AACEC,cADF;AAEEC,YAFF;AAGEC,kBAHF;AAIEC,UAJF;AAKEC,WALF;AAMEC,UANF;AAOO,uCAPP;AAQA,SAASC,MAAT,QAAuB,6BAAvB;AACA,SAASC,mBAAT,QAAoC,+BAApC;AACA,SAASC,MAAT,QAA2D,WAA3D;AACA,SAASC,iBAAT,QAAkC,kCAAlC;AACA,SAASC,WAAT,QAA4B,uBAA5B;AACA,SAASC,KAAT,QAAsB,UAAtB;AACA,SAASC,IAAT,QAAqB,qBAArB;AACA,SAASC,QAAT,QAAwC,aAAxC;AACA,SAASC,aAAT,QAA8B,kBAA9B;AACA,SAASC,WAAT,QAA4B,4BAA5B;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,UAAT,EAAqBC,aAArB,EAAoCC,aAApC,QAAyD,iBAAzD;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAAsBC,aAAtB,QAA2C,8BAA3C;AACA,SAASC,oBAAT,QAAqC,2BAArC;AACA,SAASC,WAAT,QAA4B,4BAA5B;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,gBAAT,QAAiC,+BAAjC;AACA,SAASC,WAAT,EAAsBC,QAAtB,QAAoD,oBAApD;;AAEA,SAASC,IAAT,QAAqB,QAArB;AACA,SAAuBC,kBAAvB,QAAiD,UAAjD;AACA,SAASC,MAAT,QAAuB,iBAAvB;AACA,SAASC,cAAT,QAA+B,eAA/B;;;;;;;;;;;AAWA,IAAMC,iBAAiB,GAAG;AACxBC,EAAAA,QAAQ,EAAE,IADc;AAExBC,EAAAA,KAAK,EAAE,IAFiB;AAGxBC,EAAAA,GAAG,EAAE,IAHmB;AAIxBC,EAAAA,IAAI,EAAE,IAJkB;AAKxBC,EAAAA,OAAO,EAAE,IALe;;AAOxBC,EAAAA,YAAY,EAAE,IAPU;AAQxBC,EAAAA,YAAY,EAAE,IARU;AASxBC,EAAAA,WAAW,EAAE,IATW,EAA1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqHA,WAAaC,MAAb,WADCnC,MAAM,CAAC,QAAD,EAAWuB,kBAAX,CACP,EAHCJ,gBAGD,UAFCE,QAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CSe,IAAAA,KA7CT,GA6CsC;AAClCC,MAAAA,MAAM,EAAE,KAD0B;AAElCC,MAAAA,KAAK,EAAE,MAAKC,KAAL,CAAWC,YAFgB;AAGlCC,MAAAA,aAAa,EAAE,EAHmB,EA7CtC;;;;;;;AAuDUC,IAAAA,aAvDV,GAuDwD,IAvDxD;AAwDUC,IAAAA,QAxDV,GAwDqBjC,iBAAiB,CAACyB,MAAM,CAACS,YAAR,CAxDtC;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFSC,IAAAA,IAlFT,GAkFgB,YAAM;AAClB,UAAI,CAAC,MAAKT,KAAL,CAAWC,MAAhB,EAAwB;AACtB,cAAKS,QAAL,CAAc,EAAET,MAAM,EAAE,IAAV,EAAd;;AAEA,YAAI,MAAKE,KAAL,CAAWQ,MAAf,EAAuB;AACrB,gBAAKR,KAAL,CAAWQ,MAAX;AACD;AACF;AACF,KA1FH;;;;;AA+FSC,IAAAA,KA/FT,GA+FiB,YAAM;AACnB,UAAI,MAAKZ,KAAL,CAAWC,MAAf,EAAuB;AACrB,cAAKS,QAAL,CAAc,EAAET,MAAM,EAAE,KAAV,EAAiBI,aAAa,EAAE,EAAhC,EAAd;;AAEA,YAAI,MAAKF,KAAL,CAAWU,OAAf,EAAwB;AACtB,gBAAKV,KAAL,CAAWU,OAAX;AACD;AACF;AACF,KAvGH;;;;;AA4GSC,IAAAA,KA5GT,GA4GiB,YAAM;AACnB,UAAI,MAAKR,aAAL,IAAsB,MAAKA,aAAL,CAAmBQ,KAA7C,EAAoD;AAClD,cAAKR,aAAL,CAAmBQ,KAAnB;AACD;AACF,KAhHH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiKUC,IAAAA,sBAjKV,GAiKmC,YAAoB;AACnD,8BAAiC,MAAKC,WAAL,EAAjC,CAAQC,KAAR,qBAAQA,KAAR,CAAeC,aAAf,qBAAeA,aAAf;;AAEA,UAAMC,YAA0B,GAAG;AACjClB,QAAAA,MAAM,EAAE,MAAKD,KAAL,CAAWC,MADc;AAEjCgB,QAAAA,KAAK,EAALA,KAFiC;AAGjCC,QAAAA,aAAa,EAAbA,aAHiC;AAIjCE,QAAAA,OAAO,EAAE,MAAKC,MAJmB;AAKjCC,QAAAA,SAAS,EAAE,MAAKC,SALiB,EAAnC;;;AAQA,aAAOJ,YAAP;AACD,KA7KH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoUUK,IAAAA,SApUV,GAoUsB,UAACC,QAAD,EAAwB;AAC1C;AACE,qCAAK,SAAS,EAAE3C,EAAE,gBAAIM,MAAM,CAACsC,MAAP,EAAJ,IAAsB,CAACD,QAAvB,OAAlB;AACE,4BAAC,KAAD,IAAO,KAAK,EAAE,MAAKzB,KAAL,CAAWK,aAAzB,EAAwC,GAAG,EAAE,MAAKsB,UAAlD,EAA8D,aAAa,EAAE,MAAKC,YAAlF,EAAgG,KAAK,EAAC,MAAtG,GADF,CADF;;;AAKD,KA1UH;;AA4UUC,IAAAA,YA5UV,GA4UyB,UAAC3B,KAAD,EAA6B;AAClD,UAAM4B,QAAQ,GAAG,MAAKC,cAAtB;;AAEA,aAAO,MAAKC,QAAL;AACL,gBAACC,MAAD,EAAiBC,IAAjB,EAAwDC,CAAxD,EAAmEC,OAAnE,EAA0G;AACxG,YAAI7D,UAAU,CAAC2D,IAAD,CAAd,EAAsB;AACpB,cAAMG,OAAO,GAAGH,IAAI,EAApB;;AAEA,4BAAI/E,KAAK,CAACmF,cAAN,CAAqBD,OAArB,CAAJ,EAAmC;AACjC,gCAAOlF,KAAK,CAACoF,YAAN,CAAmBF,OAAnB,EAA4B,EAAEG,GAAG,EAAEL,CAAP,EAAUL,QAAQ,EAARA,QAAV,EAA5B,CAAP;AACD;;AAED,iBAAO,IAAP;AACD;;AAED,0BAAI3E,KAAK,CAACmF,cAAN,CAAqBJ,IAArB,CAAJ,EAAgC;AAC9B,cAAIzD,aAAa,CAAC,UAAD,EAAayD,IAAb,CAAjB,EAAqC;AACnC,gCAAO/E,KAAK,CAACoF,YAAN,CAAmBL,IAAnB,EAAyB,EAAEM,GAAG,EAAEL,CAAP,EAAUL,QAAQ,EAARA,QAAV,EAAzB,CAAP;AACD;AACD,8BAAO3E,KAAK,CAACoF,YAAN,CAAmBL,IAAnB,EAAyB,EAAEM,GAAG,EAAEL,CAAP,EAAzB,CAAP;AACD;;AAED;AACE,8BAAC,QAAD;AACE,YAAA,GAAG,EAAEA,CADP;AAEE,YAAA,KAAK,EAAE,MAAKM,cAAL,CAAoBR,MAApB,EAA4B/B,KAA5B,IAAqC,UAArC,GAAkD,IAF3D;AAGE,YAAA,OAAO,EAAE,MAAKwC,MAAL,CAAYC,IAAZ,gCAAuBV,MAAvB,CAHX;AAIE,YAAA,OAAO,EAAEG,OAJX;AAKE,YAAA,QAAQ,EAAEN,QALZ;;AAOG,gBAAKvB,QAAL,GAAgBqC,UAAhB,CAA0CX,MAA1C,EAAkDC,IAAlD,CAPH,CADF;;;AAWD,OA9BI,CAAP;;AAgCD,KA/WH;;AAiXUW,IAAAA,0BAjXV,GAiXuC,YAAM;AACzC,aAAO7D,WAAW,+BAAlB;AACD,KAnXH;;AAqXU2C,IAAAA,UArXV,GAqXuB,UAACmB,KAAD,EAAkB;AACrC;AACAC,MAAAA,UAAU,CAAC,oBAAMD,KAAN,oBAAMA,KAAK,CAAEhC,KAAP,EAAN,EAAD,EAAuB,CAAvB,CAAV;AACD,KAxXH;;AA0XUkC,IAAAA,OA1XV,GA0XoB,UAACC,IAAD,EAAgB;AAChC,YAAKA,IAAL,GAAYA,IAAZ;AACD,KA5XH;;AA8XU5B,IAAAA,MA9XV,GA8XmB,YAAM;AACrB,UAAI,MAAKrB,KAAL,CAAWC,MAAf,EAAuB;AACrB,cAAKW,KAAL;AACD,OAFD,MAEO;AACL,cAAKH,IAAL;AACD;AACF,KApYH;;AAsYUc,IAAAA,SAtYV,GAsYsB,UAAC2B,CAAD,EAAyC;AAC3D,UAAI,CAAC,MAAKlD,KAAL,CAAWC,MAAhB,EAAwB;AACtB,YAAItC,UAAU,CAACuF,CAAD,CAAV,IAAiB1F,kBAAkB,CAAC0F,CAAD,CAAvC,EAA4C;AAC1CA,UAAAA,CAAC,CAACC,cAAF;AACA,gBAAK1C,IAAL;AACD;AACF,OALD,MAKO;AACL,gBAAQ,IAAR;AACE,eAAK/C,WAAW,CAACwF,CAAD,CAAhB;AACE,kBAAKpC,KAAL;AACA,kBAAKF,KAAL;AACA;AACF,eAAKrD,YAAY,CAAC2F,CAAD,CAAjB;AACEA,YAAAA,CAAC,CAACC,cAAF;AACA,gBAAI,MAAKF,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUG,EAAV;AACD;AACD;AACF,eAAK9F,cAAc,CAAC4F,CAAD,CAAnB;AACEA,YAAAA,CAAC,CAACC,cAAF;AACA,gBAAI,MAAKF,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUI,IAAV;AACD;AACD;AACF,eAAK5F,UAAU,CAACyF,CAAD,CAAf;AACEA,YAAAA,CAAC,CAACC,cAAF,GADF,CACsB;AACpB,gBAAI,MAAKF,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUK,KAAV,CAAgBJ,CAAhB;AACD;AACD,kBAtBJ;;AAwBD;AACD,UAAI,MAAK/C,KAAL,CAAWmB,SAAf,EAA0B;AACxB,cAAKnB,KAAL,CAAWmB,SAAX,CAAqB4B,CAArB;AACD;AACF,KAzaH;;AA2aUtB,IAAAA,YA3aV,GA2ayB,UAAC1B,KAAD,EAAmB;AACxC,YAAKQ,QAAL,CAAc,EAAEL,aAAa,EAAEH,KAAjB,EAAd;AACA,0BAAK+C,IAAL,gCAAWM,aAAX,CAAyB,CAAzB;AACD,KA9aH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0eUC,IAAAA,SA1eV,GA0esB,UAACnB,OAAD,EAA2C;AAC7D,YAAK/B,aAAL,GAAqB+B,OAArB;AACD,KA5eH;;AA8eUoB,IAAAA,SA9eV,GA8esB,UAACtC,YAAD,EAAgC;AAClD,UAAMuC,MAAM,GAAG,MAAKvD,KAAL,CAAWwD,aAAX;AACX,YAAKxD,KAAL,CAAWwD,aAAX,CAAyBxC,YAAzB,CADW;AAEX,YAAKyC,mBAAL,CAAyBzC,YAAzB,CAFJ;;AAIA,UAAMb,aAAa,GAAGnD,KAAK,CAAC0G,QAAN,CAAeC,IAAf,CAAoBJ,MAApB,CAAtB;;AAEA,aAAO,aAAAvG,KAAK,CAACmF,cAAN,CAAqBhC,aAArB;AACHnD,MAAAA,KAAK,CAACoF,YAAN,CAAmBjC,aAAnB,EAAwD;AACtDyD,QAAAA,GAAG,EAAE,MAAKP,SAD4C;AAEtDQ,QAAAA,OAAO,EAAE,MAAK7D,KAAL,CAAW6D,OAFkC;AAGtDC,QAAAA,MAAM,EAAE,MAAK9D,KAAL,CAAW8D,MAHmC,EAAxD,CADG;;AAMH3D,MAAAA,aANJ;AAOD,KA5fH,oDA2DS4D,kBA3DT,GA2DE,4BAA0BC,UAA1B,EAAkEC,SAAlE,EAAkG,CAChG,IAAI,CAACA,SAAS,CAACnE,MAAX,IAAqB,KAAKD,KAAL,CAAWC,MAApC,EAA4C,CAC1CoE,MAAM,CAACC,gBAAP,CAAwB,UAAxB,EAAoC,KAAK1D,KAAzC,EACD,CACD,IAAIwD,SAAS,CAACnE,MAAV,IAAoB,CAAC,KAAKD,KAAL,CAAWC,MAApC,EAA4C,CAC1CoE,MAAM,CAACE,mBAAP,CAA2B,UAA3B,EAAuC,KAAK3D,KAA5C,EACD,CACF,CAlEH,QAoES4D,MApET,GAoEE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACC,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBAAO,oBAAC,YAAD,CAAc,QAAd,IAAuB,KAAK,EAAE,MAAI,CAACA,KAAnC,IAA2C,MAAI,CAACC,UAAL,EAA3C,CAAP,CACD,CAJH,CADF,CAQD,CA7EH,CA+EE;AACF;AACA,KAjFA,QAkHUC,eAlHV,GAkHE,2BAA0B,CACxB,IAAI,KAAKxE,KAAL,CAAWZ,QAAf,EAAyB,CACvB,OAAO,IAAP,CACD,CAED,IAAI,KAAKwC,cAAT,EAAyB,CACvB,OAAO,KAAK6C,gBAAL,EAAP,CACD,CAED,IAAI,KAAK5E,KAAL,CAAWC,MAAf,EAAuB,CACrB,OAAO,KAAK4E,UAAL,EAAP,CACD,CAED,OAAO,IAAP,CACD,CAhIH,QAkIUH,UAlIV,GAkIE,sBAAqB,UACnB,IAAMvD,YAAY,GAAG,KAAKJ,sBAAL,EAArB,CACA,IAAM2C,MAAM,GAAG,KAAKD,SAAL,CAAetC,YAAf,CAAf,CAEA,IAAMW,QAAQ,GAAG,KAAKC,cAAtB,CAEA,IAAM+C,KAAK,GAAG,EACZC,KAAK,EAAE,KAAK5E,KAAL,CAAW4E,KADN,EAEZC,QAAQ,EAAE,KAAK7E,KAAL,CAAW6E,QAAX,IAAuBC,SAFrB,EAAd,CAKA,IAAMC,IAAI,gBACR,8BAAM,SAAS,EAAEpG,EAAE,kBAAIM,MAAM,CAAC8F,IAAP,EAAJ,IAAoB,IAApB,OAA2B9F,MAAM,CAAC+F,UAAP,CAAkB,KAAKV,KAAvB,CAA3B,IAA2D3C,QAA3D,QAAnB,EAA2F,KAAK,EAAEgD,KAAlG,IACGpB,MADH,EAEG,KAAKiB,eAAL,EAFH,CADF,CAOA,oBACE,oBAAC,aAAD,aAAe,WAAW,EAAE,KAAKS,WAAjC,IAAkD,KAAKjF,KAAvD,gBACE,oBAAC,WAAD,IACE,cAAc,EAAE,KAAKS,KADvB,EAEE,cAAc,EAAE,KAAKA,KAFvB,EAGE,MAAM,EAAEkB,QAAQ,GAAG,KAAH,GAAW,KAAK9B,KAAL,CAAWC,MAHxC,IAKGiF,IALH,CADF,CADF,CAWD,CA/JH,QA+KUlE,WA/KV,GA+KE,uBAAsB,kBACpB,IAAMd,KAAK,GAAG,KAAKmF,QAAL,EAAd,CACA,IAAMnD,IAAI,GAAG,KAAKoD,cAAL,CAAoBpF,KAApB,CAAb,CAEA,IAAI1B,aAAa,CAAC0B,KAAD,CAAjB,EAA0B,CACxB,OAAO,EACLe,KAAK,EAAE,KAAKV,QAAL,GAAgBgF,WAAhB,CAA4BrF,KAA5B,EAAmCgC,IAAnC,CADF,EAELhB,aAAa,EAAE,KAFV,EAAP,CAID,CAED,OAAO,EACLD,KAAK,eAAE,kCAAO,KAAKd,KAAL,CAAWqF,WAAX,qBAA0B,KAAK5H,MAA/B,qBAA0B,aAAa4H,WAAvC,CAAP,CADF,EAELtE,aAAa,EAAE,IAFV,EAAP,CAID,CA9LH,QAgMUuE,gBAhMV,GAgME,0BAAyB/F,IAAzB,EAAuD,CACrD,IAAI,KAAKS,KAAL,CAAWV,GAAX,KAAmB,MAAvB,EAA+B,CAC7B,OAAOL,MAAM,CAACsG,YAAP,CAAoB,KAAKjB,KAAzB,CAAP,CACD,CAED,QAAQ/E,IAAR,GACE,KAAK,OAAL,CACE,OAAON,MAAM,CAACuG,aAAP,CAAqB,KAAKlB,KAA1B,CAAP,CACF,KAAK,QAAL,CACE,OAAOrF,MAAM,CAACwG,cAAP,CAAsB,KAAKnB,KAA3B,CAAP,CACF,KAAK,OAAL,CACA,QACE,OAAOrF,MAAM,CAACyG,aAAP,CAAqB,KAAKpB,KAA1B,CAAP,CAPJ,CASD,CA9MH,QAgNUb,mBAhNV,GAgNE,6BAA4BkC,MAA5B,EAAkD,gBAChD,IAAMC,WAAwB,gBACzB/H,WAAW,CAAC,KAAKmC,KAAN,EAAab,iBAAb,CADc,IAE5B0G,KAAK,EAAE,MAFqB,EAG5BzG,QAAQ,EAAE,KAAKY,KAAL,CAAWZ,QAHO,EAI5BwF,KAAK,EAAE,MAJqB,EAK5B3D,OAAO,EAAE0E,MAAM,CAAC1E,OALY,EAM5BE,SAAS,EAAEwE,MAAM,CAACxE,SANU,EAO5B2E,MAAM,EAAEH,MAAM,CAAC7F,MAPa,GAA9B,CAUA,IAAMiG,UAAU,GAAG,EACjBC,SAAS,EAAErH,EAAE,kBACVM,MAAM,CAAC6B,KAAP,EADU,IACO,KAAKd,KAAL,CAAWV,GAAX,KAAmB,MAD1B,OAEVL,MAAM,CAACoG,WAAP,CAAmB,KAAKf,KAAxB,CAFU,IAEuBqB,MAAM,CAAC5E,aAF9B,OAGV9B,MAAM,CAACgH,oBAAP,EAHU,IAGsBN,MAAM,CAAC5E,aAAP,IAAwB,KAAKf,KAAL,CAAWV,GAAX,KAAmB,SAHjE,OAIVL,MAAM,CAACiH,mBAAP,CAA2B,KAAK5B,KAAhC,CAJU,IAI+BqB,MAAM,CAAC5E,aAAP,IAAwB,KAAKf,KAAL,CAAWZ,QAJlE,QADI,EAOjBuF,KAAK,EAAE,EACLwB,YAAY,EAAE,KAAKC,gBAAL,EADT,EAPU,EAAnB,CAYA,IAAMC,WAAW,GAAG,KAAKrG,KAAL,CAAWV,GAAX,KAAmB,SAAvC,CAEA,oBACE,oBAAC,YAAD,CAAc,QAAd,IAAuB,KAAK,EAAEJ,cAAc,CAAC,KAAKoF,KAAN,EAAa,KAAKtE,KAAlB,CAA5C,iBACE,oBAAC,MAAD,EAAY4F,WAAZ,eACE,6BAAK,SAAS,EAAE3G,MAAM,CAACqH,qBAAP,EAAhB,IACG,KAAKtG,KAAL,CAAWuG,KAAX,iBAAoB,6BAAK,SAAS,EAAE,KAAKjB,gBAAL,CAAsB,KAAKtF,KAAL,CAAWT,IAAjC,CAAhB,IAAyD,KAAKS,KAAL,CAAWuG,KAApE,CADvB,eAEE,4BAAUR,UAAV,EAAuBJ,MAAM,CAAC7E,KAA9B,CAFF,eAIE,6BACE,SAAS,EAAEnC,EAAE,CAACM,MAAM,CAACuH,SAAP,CAAiB,KAAKlC,KAAtB,CAAD,mBACVrF,MAAM,CAACwH,aAAP,CAAqB,KAAKnC,KAA1B,CADU,IACyB,KAAKtE,KAAL,CAAWZ,QADpC,OAEVH,MAAM,CAACyH,cAAP,EAFU,IAEgBL,WAFhB,QADf,iBAME,oBAAC,oBAAD,OANF,CAJF,CADF,CADF,CADF,CAmBD,CA5PH,QA8PUD,gBA9PV,GA8PE,4BAAmC,mBACjC,IAAMO,eAAe,GAAG,SAAlBA,eAAkB,GAAM,CAC5B,QAAQ,MAAI,CAAC3G,KAAL,CAAWT,IAAnB,GACE,KAAK,OAAL,CACE,OAAO,MAAI,CAAC+E,KAAL,CAAWsC,kBAAlB,CACF,KAAK,QAAL,CACE,OAAO,MAAI,CAACtC,KAAL,CAAWuC,mBAAlB,CACF,KAAK,OAAL,CACA,QACE,OAAO,MAAI,CAACvC,KAAL,CAAWwC,kBAAlB,CAPJ,CASD,CAVD,CAWA,IAAMC,gBAAgB,GAAGC,UAAU,CAACL,eAAe,EAAhB,CAAV,IAAiC,CAA1D,CAEA,OAAOI,gBAAP,CACD,CA7QH,QA+QUrC,UA/QV,GA+QE,sBAAsC,CACpC,IAAMnD,MAAM,GAAG,KAAKvB,KAAL,CAAWuB,MAAX,gBACb,6BAAK,SAAS,EAAEtC,MAAM,CAACsC,MAAP,EAAhB,EAAiC,SAAS,EAAE,KAAKH,SAAjD,iBACE,oBAAC,KAAD,IAAO,GAAG,EAAE,KAAKI,UAAjB,EAA6B,aAAa,EAAE,KAAKC,YAAjD,EAA+D,KAAK,EAAC,MAArE,GADF,CADa,GAIX,IAJJ,CAMA,IAAM1B,KAAK,GAAG,KAAKmF,QAAL,EAAd,CACA,IAAM+B,aAAa,GAAG,CAAC,CAAC,KAAKjH,KAAL,CAAWkH,SAAb,IAA0B,KAAKlH,KAAL,CAAWkH,SAAX,KAAyB,MAAzE,CAEA,oBACE,oBAAC,iBAAD,IACE,SAAS,EAAE,KAAKxE,0BADlB,EAEE,OAAO,EAAE,CAAC,CAFZ,EAGE,KAAK,EAAE,KAAK1C,KAAL,CAAWmH,SAHpB,EAIE,aAAa,EAAE,KAAKnH,KAAL,CAAWoH,aAJ5B,EAKE,aAAa,EAAEH,aALjB,iBAOE,oBAAC,IAAD,IACE,GAAG,EAAE,KAAKpE,OADZ,EAEE,KAAK,EAAE,KAAK7C,KAAL,CAAWkH,SAFpB,EAGE,WAAW,EAAE,KAAKzG,KAHpB,EAIE,SAAS,EAAE,KAAKT,KAAL,CAAWqH,aAJxB,EAKE,KAAK,EAAE,KAAKrH,KAAL,CAAWmH,SALpB,IAOG5F,MAPH,EAQG,KAAKG,YAAL,CAAkB3B,KAAlB,CARH,CAPF,CADF,CAoBD,CA7SH,QA+SU0E,gBA/SV,GA+SE,4BAA4C,CAC1C,IAAMlD,MAAM,GAAG,KAAKvB,KAAL,CAAWuB,MAAX,GAAoB,KAAKF,SAAL,CAAe,IAAf,CAApB,GAA2C,IAA1D,CACA,IAAMtB,KAAK,GAAG,KAAKmF,QAAL,EAAd,CAEA,IAAMoC,YAAY,GAAGC,OAAO,CAAChG,MAAD,CAA5B,CAEA,oBACE,oBAAC,WAAD,IACE,oBAAoB,EAAEA,MADxB,EAEE,OAAO,EAAE,KAAKvB,KAAL,CAAWwH,oBAFtB,EAGE,aAAa,EAAEF,YAHjB,EAIE,cAAc,EAAE,KAAK7G,KAJvB,EAKE,MAAM,EAAE,KAAKZ,KAAL,CAAWC,MALrB,iBAOE,oBAAC,IAAD,IAAM,SAAS,EAAE,KAAjB,EAAwB,WAAW,EAAE,KAAKW,KAA1C,EAAiD,sBAAsB,MAAvE,EAAwE,SAAS,EAAE,MAAnF,IACG,KAAKiB,YAAL,CAAkB3B,KAAlB,CADH,CAPF,CADF,CAaD,CAlUH,QAgbUwC,MAhbV,GAgbE,gBAAexC,KAAf,EAA8B,CAC5B,KAAKY,KAAL,GACA,KAAKJ,QAAL,CAAc,EAAET,MAAM,EAAE,KAAV,EAAiBC,KAAK,EAALA,KAAjB,EAAd,EAEA,IAAI,CAAC,KAAKuC,cAAL,CAAoB,KAAK4C,QAAL,EAApB,EAAqCnF,KAArC,CAAL,EAAkD,wCAChD,6CAAKC,KAAL,EAAWyH,aAAX,6DAA2B1H,KAA3B,EACD,CACF,CAvbH,QAybUmF,QAzbV,GAybE,oBAAmB,CACjB,IAAI,KAAKlF,KAAL,CAAWD,KAAX,KAAqB+E,SAAzB,EAAoC,CAClC,OAAO,KAAK9E,KAAL,CAAWD,KAAlB,CACD,CACD,OAAO,KAAKF,KAAL,CAAWE,KAAlB,CACD,CA9bH,QAgcU8B,QAhcV,GAgcE,kBAAiB6F,EAAjB,EAAuG,CACrG,IAAQC,KAAR,GAAkB,KAAK3H,KAAvB,CAAQ2H,KAAR,CACA,IAAI,CAACA,KAAL,EAAY,CACV,OAAO,EAAP,CACD,CACD,IAAMC,OAAO,GAAG,KAAK/H,KAAL,CAAWK,aAAX,IAA4B,KAAKL,KAAL,CAAWK,aAAX,CAAyB2H,WAAzB,EAA5C,CAEA,IAAMC,MAAyB,GAAG,EAAlC,CACA,IAAIC,KAAK,GAAG,CAAZ,CACA,qDAAoBJ,KAApB,wCAA2B,KAAhBK,KAAgB,eACzB,sBAA+BC,cAAc,CAACD,KAAD,CAA7C,CAAOjI,MAAP,sBAAcgC,KAAd,sBAAoBE,QAApB,sBAEA,IAAI,CAAC2F,OAAD,IAAY,KAAKxH,QAAL,GAAgB8H,UAAhB,CAAmCnI,MAAnC,EAA0CgC,KAA1C,EAAgD6F,OAAhD,CAAhB,EAA0E,CACxEE,MAAM,CAACK,IAAP,CAAYT,EAAE,CAAC3H,MAAD,EAAQgC,KAAR,EAAcgG,KAAd,EAAqB9F,QAArB,CAAd,EACA,EAAE8F,KAAF,CACD,CACF,CAED,OAAOD,MAAP,CACD,CAndH,QAqdU3C,cArdV,GAqdE,wBAAuBpF,KAAvB,EAAiD,CAC/C,IAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK+E,SAAhC,EAA2C,CACzC,OAAO,IAAP,CACD,CAED,IAAM6C,KAAK,GAAG,KAAK3H,KAAL,CAAW2H,KAAX,IAAoB,EAAlC,CAEA,sDAAoBA,KAApB,2CAA2B,KAAhBK,KAAgB,gBACzB,uBAA0BC,cAAc,CAACD,KAAD,CAAxC,CAAOI,SAAP,uBAAkBrG,MAAlB,uBAEA,IAAI,KAAKO,cAAL,CAAoB8F,SAApB,EAA+BrI,KAA/B,CAAJ,EAA2C,CACzC,OAAOgC,MAAP,CACD,CACF,CACD,OAAO,IAAP,CACD,CApeH,QAseUO,cAteV,GAseE,wBAAuB+F,MAAvB,EAAiDC,MAAjD,EAA2E,CACzE,OAAOjK,aAAa,CAACgK,MAAD,CAAb,IAAyBhK,aAAa,CAACiK,MAAD,CAAtC,IAAkD,KAAKlI,QAAL,GAAgBkC,cAAhB,CAAuC+F,MAAvC,EAA+CC,MAA/C,CAAzD,CACD,CAxeH,iBAAqDtL,KAAK,CAACuL,SAA3D,WACgBC,mBADhB,GACsC,QADtC,UAGgBC,SAHhB,GAG4B,EACxBnG,cAAc,EAAErF,SAAS,CAACyL,IADF,EAExBzI,YAAY,EAAEhD,SAAS,CAAC0L,GAFA,EAGxBvB,aAAa,EAAEnK,SAAS,CAAC2L,IAHD,EAIxBxJ,QAAQ,EAAEnC,SAAS,CAAC2L,IAJI,EAKxBvJ,KAAK,EAAEpC,SAAS,CAAC2L,IALO,EAMxBV,UAAU,EAAEjL,SAAS,CAACyL,IANE,EAOxBf,KAAK,EAAE1K,SAAS,CAAC4L,SAAV,CAAoB,CAAC5L,SAAS,CAAC6L,KAAX,EAAkB7L,SAAS,CAAC8L,MAA5B,CAApB,CAPiB,EAQxB1B,aAAa,EAAEpK,SAAS,CAAC+L,MARD,EASxBnE,QAAQ,EAAE5H,SAAS,CAAC4L,SAAV,CAAoB,CAAC5L,SAAS,CAAC+L,MAAX,EAAmB/L,SAAS,CAACgM,MAA7B,CAApB,CATc,EAUxB5D,WAAW,EAAEpI,SAAS,CAACiM,IAVC,EAWxBzG,UAAU,EAAExF,SAAS,CAACyL,IAXE,EAYxBtD,WAAW,EAAEnI,SAAS,CAACyL,IAZC,EAaxBnH,MAAM,EAAEtE,SAAS,CAAC2L,IAbM,EAcxB7I,KAAK,EAAE9C,SAAS,CAAC0L,GAdO,EAexB/D,KAAK,EAAE3H,SAAS,CAAC4L,SAAV,CAAoB,CAAC5L,SAAS,CAAC+L,MAAX,EAAmB/L,SAAS,CAACgM,MAA7B,CAApB,CAfiB,EAgBxBxB,aAAa,EAAExK,SAAS,CAACyL,IAhBD,EAiBxBjJ,YAAY,EAAExC,SAAS,CAACyL,IAjBA,EAkBxBhJ,YAAY,EAAEzC,SAAS,CAACyL,IAlBA,EAmBxB/I,WAAW,EAAE1C,SAAS,CAACyL,IAnBC,EAoBxBvH,SAAS,EAAElE,SAAS,CAACyL,IApBG,EAH5B,UA0BgBrI,YA1BhB,GA0B+B,EAC3B+E,WAAW,EAAXA,WAD2B,EAE3B3C,UAAU,EAAVA,UAF2B,EAG3BH,cAAc,EAAdA,cAH2B,EAI3B4F,UAAU,EAAVA,UAJ2B,EAK3B5I,GAAG,EAAE,SALsB,EA1B/B,UAkCgBP,IAlChB,GAkCuBA,IAlCvB,UAmCgBoK,GAnChB,GAmCsB,iCAAM,oBAAC,aAAD,OAAN,EAnCtB,sBAqCyB,UAACjH,OAAD,EAA8D,CACnFhF,SAAS,CACP,cAAAF,KAAK,CAACmF,cAAN,CAAqBD,OAArB,KAAiC,OAAOA,OAAP,KAAmB,UAD7C,EAEP,qEAFO,CAAT,CAIA,OAAOA,OAAP,CACD,CA3CH;AA+fA,SAASkD,WAAT,CAAoCrF,KAApC,EAAmDgC,IAAnD,EAA0E;AACxE,SAAOA,IAAP;AACD;;AAED,SAASU,UAAT,CAAmC1C,KAAnC,EAAkDgC,IAAlD,EAAgE;AAC9D,SAAOA,IAAP;AACD;;AAED,SAASO,cAAT,CAAgC+F,MAAhC,EAAgDC,MAAhD,EAAgE;AAC9D,SAAOD,MAAM,KAAKC,MAAlB;AACD;;AAED,SAASL,cAAT,CAAwBD,KAAxB,EAAoC;AAClC,MAAIoB,KAAK,CAACC,OAAN,CAAcrB,KAAd,CAAJ,EAA0B;AACxB,WAAOA,KAAP;AACD;;AAED,SAAO,CAACA,KAAD,EAAQA,KAAR,EAAelD,SAAf,CAAP;AACD;;AAED,IAAMwE,eAAe,GAAG,SAAlBA,eAAkB,CAACvH,IAAD,EAAuB;AAC7C,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAOA,IAAP;AACD;;AAED,MAAI3D,UAAU,CAAC2D,IAAD,CAAd,EAAsB;AACpB,WAAOuH,eAAe,CAACvH,IAAI,EAAL,CAAtB;AACD;;AAED,oBAAI/E,KAAK,CAACmF,cAAN,CAAqBJ,IAArB,CAAJ,EAAgC;AAC9B,WAAOrE,mBAAmB,CAACqE,IAAD,CAA1B;AACD;;AAED,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAOA,IAAI,CAACwH,QAAL,CAAc,EAAd,CAAP;AACD;;AAED,SAAO,EAAP;AACD,CAlBD;;AAoBA,SAASrB,UAAT,CAA4BnI,KAA5B,EAA2CgC,IAA3C,EAAsD6F,OAAtD,EAAuE;AACrE,MAAI7F,IAAI,KAAKnC,MAAM,CAACuJ,GAApB,EAAyB;AACvB,WAAO,KAAP;AACD;;AAED,MAAMK,QAAQ,GAAGF,eAAe,CAACvH,IAAD,CAAhC;;AAEA,MAAI,CAACyH,QAAL,EAAe;AACb,WAAO,KAAP;AACD;;AAED,SAAOA,QAAQ,CAAC3B,WAAT,GAAuB4B,OAAvB,CAA+B7B,OAA/B,MAA4C,CAAC,CAApD;AACD","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction, isNonNullable, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<SelectItem<TValue, TItem>>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = this.getButton(buttonParams);\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })} style={style}>\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n </ThemeContext.Provider>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch(true) : null;\n const value = this.getValue();\n\n const isWithSearch = Boolean(search);\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n useFullHeight={isWithSearch}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getSearch = (noMargin?: boolean) => {\n return (\n <div className={cx({ [styles.search()]: !noMargin })}>\n <Input value={this.state.searchPattern} ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile } as MenuItemProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n >\n {this.getProps().renderItem<TValue, TItem>(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem<TValue>(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual<TValue>(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: any): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
@@ -997,7 +997,9 @@ export var TokenInput = (_dec = locale('TokenInput', TokenInputLocaleHelper), ro
|
|
|
997
997
|
onMouseLeave = _this$props3.onMouseLeave,
|
|
998
998
|
inputMode = _this$props3.inputMode,
|
|
999
999
|
menuWidth = _this$props3.menuWidth,
|
|
1000
|
-
menuAlign = _this$props3.menuAlign
|
|
1000
|
+
menuAlign = _this$props3.menuAlign,
|
|
1001
|
+
renderTotalCount = _this$props3.renderTotalCount,
|
|
1002
|
+
totalCount = _this$props3.totalCount;
|
|
1001
1003
|
var _this$state3 = this.state,
|
|
1002
1004
|
activeTokens = _this$state3.activeTokens,
|
|
1003
1005
|
inFocus = _this$state3.inFocus,
|
|
@@ -1065,7 +1067,9 @@ export var TokenInput = (_dec = locale('TokenInput', TokenInputLocaleHelper), ro
|
|
|
1065
1067
|
onValueChange: this.selectItem,
|
|
1066
1068
|
renderAddButton: this.renderAddButton,
|
|
1067
1069
|
menuWidth: menuWidth,
|
|
1068
|
-
menuAlign: menuAlign
|
|
1070
|
+
menuAlign: menuAlign,
|
|
1071
|
+
renderTotalCount: renderTotalCount,
|
|
1072
|
+
totalCount: totalCount
|
|
1069
1073
|
}), this.renderTokensEnd(), this.isEditingMode ? /*#__PURE__*/React.createElement("span", {
|
|
1070
1074
|
className: styles.reservedInput(theme)
|
|
1071
1075
|
}, reservedInputValue) : null)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["TokenInput.tsx"],"names":["React","isEqual","isKeyArrowHorizontal","isKeyArrowLeft","isKeyArrowRight","isKeyArrowUp","isKeyArrowVertical","isKeyBackspace","isKeyComma","isKeyDelete","isKeyEnter","isKeyEscape","isShortcutSelectAll","LayoutEvents","Token","emptyHandler","ThemeContext","locale","MenuItem","CommonWrapper","cx","getRootNode","rootNode","TokenInputLocaleHelper","styles","tokenInputReducer","TokenInputMenu","TextWidthHelper","TokenInputType","DefaultState","inputValue","reservedInputValue","undefined","autocompleteItems","activeTokens","editingTokenIndex","inFocus","loading","preventBlur","inputValueWidth","inputValueHeight","defaultToKey","item","toString","identity","defaultRenderToken","isActive","onClick","onDoubleClick","onRemove","disabled","TokenInput","state","input","tokensInputMenu","textHelper","wrapper","hasValueInItems","items","value","includes","some","inputRef","node","tokensInputMenuRef","textHelperRef","wrapperRef","dispatch","action","cb","setState","prevState","handleInputFocus","event","type","props","onFocus","handleInputBlur","isBlurToMenu","handleOutsideBlur","preventDefault","focus","requestAnimationFrame","payload","onBlur","valueToString","isEditingMode","finishTokenEdit","isTokenValueChanged","length","selectItem","isInputChanged","checkForUnexpectedInput","menuRef","menu","getMenuRef","relatedTarget","document","activeElement","contains","handleWrapperMouseDown","target","isClickOnToken","handleWrapperMouseUp","handleCopy","isCursorVisible","tokens","map","token","selectedItems","indexOf","sort","index","clipboardData","setData","join","delimiters","handleInputPaste","WithReference","paste","getData","delimiter","stopPropagation","split","valueToItem","filter","newItems","concat","onValueChange","tryGetItems","query","getItems","hideMenuIfEmptyInputValue","isSelectedItem","isEditingItem","editingItem","autocompleteItemsUnique","unshift","emit","highlightMenuItem","selectItemIndex","findIndex","toLowerCase","highlightItem","handleKeyDown","handleInputKeyDown","handleWrapperKeyDown","e","key","WithoutReference","newValue","handleAddItem","enter","up","down","blur","moveFocusToLastToken","selectionStart","focusInput","selectInputText","setSelectionRange","itemsNew","handleWrapperArrows","handleTokenEdit","activeItemIndex","newItemIndex","isLeftEdge","isRightEdge","shiftKey","handleWrapperArrowsWithoutShift","handleWrapperArrowsWithShift","itemNew","handleValueChange","handleRemoveToken","_","filteredActiveTokens","handleTokenClick","ctrlKey","editedItem","splice","onUnexpectedInput","returnedValue","handleChangeInputValue","trimLeft","endsWith","trimRight","onInputValueChange","Combined","renderTokensStart","slice","renderToken","renderTokensEnd","handleIconClick","handleTokenDoubleClick","renderAddButton","showAddItemHint","addButtonComment","addButtonTitle","componentDidMount","updateInputTextWidth","addEventListener","autoFocus","componentDidUpdate","prevProps","isCursorVisibleForState","componentWillUnmount","removeEventListener","render","theme","renderMain","Error","width","maxMenuHeight","error","warning","placeholder","renderItem","renderNotFound","onMouseEnter","onMouseLeave","inputMode","menuWidth","menuAlign","showMenu","lineHeight","parseInt","tokenInputLineHeight","inputInlineStyles","height","Math","max","flex","caretColor","labelClassName","label","labelDisabled","labelFocused","inputClassName","inputDisabled","inputEditing","setRootNode","helperText","helperTextEditing","reservedInput","reset","parseFloat","getTextWidth","toFixed","getTextHeight","isInputValueChanged","PureComponent","__KONTUR_REACT_UI__","defaultProps","renderValue","toKey"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, FocusEvent, FocusEventHandler, KeyboardEvent, MouseEventHandler, ReactNode } from 'react';\nimport isEqual from 'lodash.isequal';\n\nimport {\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowRight,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyBackspace,\n isKeyComma,\n isKeyDelete,\n isKeyEnter,\n isKeyEscape,\n isShortcutSelectAll,\n} from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Menu } from '../../internal/Menu';\nimport { Token, TokenProps } from '../Token';\nimport { MenuItemState } from '../MenuItem';\nimport { emptyHandler } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { locale } from '../../lib/locale/decorators';\nimport { MenuItem } from '../MenuItem/MenuItem';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { TokenInputLocale, TokenInputLocaleHelper } from './locale';\nimport { styles } from './TokenInput.styles';\nimport { TokenInputAction, tokenInputReducer } from './TokenInputReducer';\nimport { TokenInputMenu } from './TokenInputMenu';\nimport { TextWidthHelper } from './TextWidthHelper';\n\nexport enum TokenInputType {\n WithReference,\n WithoutReference,\n Combined,\n}\n\nexport type TokenInputMenuAlign = 'left' | 'cursor';\n\nexport interface TokenInputProps<T> extends CommonProps {\n selectedItems: T[];\n onValueChange: (items: T[]) => void;\n onMouseEnter: MouseEventHandler<HTMLDivElement>;\n onMouseLeave: MouseEventHandler<HTMLDivElement>;\n onFocus: FocusEventHandler<HTMLTextAreaElement>;\n onBlur: FocusEventHandler<HTMLTextAreaElement>;\n autoFocus?: boolean;\n type?: TokenInputType;\n /**\n * Ширина выпадающего меню может быть указана как 'auto'\n * а также в пикселях, процентах (от ширины инпута)\n * или других конкретных единицах\n *\n * Если menuAlign = 'cursor', то ширина выпадающего меню всегда будет равна 'auto'\n * (по ширине текста)\n */\n menuWidth: React.CSSProperties['width'];\n menuAlign: TokenInputMenuAlign;\n\n /**\n * Функция поиска элементов, должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются строки.\n *\n * Элементы могут быть любого типа. В этом случае необходимо определить\n * свойства `renderItem`, `valueToString`\n */\n getItems?: (query: string) => Promise<T[]>;\n hideMenuIfEmptyInputValue?: boolean;\n renderItem: (item: T, state: MenuItemState) => React.ReactNode | null;\n renderValue: (item: T) => React.ReactNode;\n /**\n * Функция должна возвращать строковое представление токена\n * @default item => item\n */\n valueToString: (item: T) => string;\n renderNotFound?: () => React.ReactNode;\n valueToItem: (item: string) => T;\n toKey: (item: T) => string | number | undefined;\n placeholder?: string;\n delimiters: string[];\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n disabled?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderToken?: (item: T, props: Partial<TokenProps>) => ReactNode;\n /**\n * Вызывается при изменении текста в поле ввода,\n */\n onInputValueChange?: (value: string) => void;\n /**\n * Функция отрисовки кнопки добавления в выпадающем списке\n */\n renderAddButton?: (query?: string, onAddItem?: () => void) => ReactNode;\n /**\n * Функция для обработки ситуации, когда была введена\n * строка в инпут и был потерян фокус с компонента\n *\n * Функция срабатывает с аргументом инпута строки\n *\n * Если при потере фокуса в выпадающем списке будет только один\n * элемент и результат `valueToString` с этим элементом будет\n * совпадать со значение в текстовом поле, то\n * сработает `onValueChange` со значением данного элемента\n *\n * Сама функция также может вернуть значение,\n * неравное `undefined`, с которым будет вызван `onValueChange`.\n * Если возвращаемое значение будет равно `null`,\n * то сработает очистка текущего значения инпута,\n * а в режиме редактирования токен будет удален\n */\n onUnexpectedInput?: (value: string) => void | null | undefined | T;\n inputMode?: React.HTMLAttributes<HTMLTextAreaElement>['inputMode'];\n}\n\nexport interface TokenInputState<T> {\n autocompleteItems?: T[];\n activeTokens: T[];\n editingTokenIndex: number;\n clickedToken?: T;\n clickedTokenTimeout?: number;\n inFocus?: boolean;\n inputValue: string;\n reservedInputValue: string | undefined;\n inputValueWidth: number;\n inputValueHeight: number;\n preventBlur?: boolean;\n loading?: boolean;\n}\n\nexport const DefaultState = {\n inputValue: '',\n reservedInputValue: undefined,\n autocompleteItems: undefined,\n activeTokens: [],\n editingTokenIndex: -1,\n inFocus: false,\n loading: false,\n preventBlur: false,\n inputValueWidth: 2,\n inputValueHeight: 22,\n};\n\nconst defaultToKey = <T extends {}>(item: T): string => item.toString();\nconst identity = <T extends {}>(item: T): T => item;\nconst defaultRenderToken = <T extends {}>(\n item: T,\n { isActive, onClick, onDoubleClick, onRemove, disabled }: Partial<TokenProps>,\n) => (\n <Token\n key={item.toString()}\n isActive={isActive}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onRemove={onRemove}\n disabled={disabled}\n >\n {item}\n </Token>\n);\n\n@rootNode\n@locale('TokenInput', TokenInputLocaleHelper)\nexport class TokenInput<T = string> extends React.PureComponent<TokenInputProps<T>, TokenInputState<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInput';\n\n public static defaultProps: Partial<TokenInputProps<any>> = {\n selectedItems: [],\n delimiters: [',', ' '],\n renderItem: identity,\n renderValue: identity,\n valueToString: identity,\n valueToItem: (item: string) => item,\n toKey: defaultToKey,\n onValueChange: () => void 0,\n width: 250 as string | number,\n onBlur: emptyHandler,\n onFocus: emptyHandler,\n onMouseEnter: emptyHandler,\n onMouseLeave: emptyHandler,\n menuWidth: 'auto',\n menuAlign: 'cursor',\n };\n\n public state: TokenInputState<T> = DefaultState;\n\n private readonly locale!: TokenInputLocale;\n private theme!: Theme;\n private input: HTMLTextAreaElement | null = null;\n private tokensInputMenu: TokenInputMenu<T> | null = null;\n private textHelper: TextWidthHelper | null = null;\n private wrapper: HTMLLabelElement | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.updateInputTextWidth();\n document.addEventListener('copy', this.handleCopy);\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n\n public componentDidUpdate(prevProps: TokenInputProps<T>, prevState: TokenInputState<T>) {\n if (prevState.inputValue !== this.state.inputValue) {\n this.updateInputTextWidth();\n }\n if (prevState.activeTokens.length === 0 && this.state.activeTokens.length > 0) {\n this.dispatch({\n type: 'SET_AUTOCOMPLETE_ITEMS',\n payload: undefined,\n });\n }\n if (prevProps.selectedItems.length !== this.props.selectedItems.length) {\n LayoutEvents.emit();\n }\n if (!this.isCursorVisibleForState(prevState) && this.isCursorVisible) {\n this.tryGetItems(this.isEditingMode ? '' : this.state.inputValue);\n }\n }\n\n public componentWillUnmount() {\n document.removeEventListener('copy', this.handleCopy);\n }\n\n /**\n * @public\n */\n public focus() {\n this.input?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.input?.blur();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {\n throw Error('Missed getItems for type ' + this.type);\n }\n\n const {\n selectedItems,\n width,\n maxMenuHeight,\n error,\n warning,\n disabled,\n placeholder,\n renderItem,\n renderNotFound,\n hideMenuIfEmptyInputValue,\n onMouseEnter,\n onMouseLeave,\n inputMode,\n menuWidth,\n menuAlign,\n } = this.props;\n\n const {\n activeTokens,\n inFocus,\n inputValueWidth,\n inputValue,\n reservedInputValue,\n autocompleteItems,\n loading,\n inputValueHeight,\n } = this.state;\n\n const showMenu =\n this.type !== TokenInputType.WithoutReference &&\n this.isCursorVisible &&\n activeTokens.length === 0 &&\n (inputValue !== '' || !hideMenuIfEmptyInputValue);\n\n const theme = this.theme;\n\n const lineHeight = parseInt(theme.tokenInputLineHeight, 10) || 0;\n\n const inputInlineStyles: React.CSSProperties = {\n // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости\n width: inputValueWidth,\n height: Math.max(lineHeight, inputValueHeight),\n // input растягивается на всю ширину чтобы placeholder не обрезался\n flex: selectedItems && selectedItems.length === 0 ? 1 : undefined,\n // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее\n caretColor: this.isCursorVisible ? undefined : 'transparent',\n };\n\n const labelClassName = cx(styles.label(theme), {\n [styles.labelDisabled(theme)]: !!disabled,\n [styles.labelFocused(theme)]: !!inFocus,\n [styles.error(theme)]: !!error,\n [styles.warning(theme)]: !!warning,\n });\n const inputClassName = cx(styles.input(theme), {\n [styles.inputDisabled(theme)]: !!disabled,\n [styles.inputEditing(theme)]: this.isEditingMode,\n });\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\n <label\n ref={this.wrapperRef}\n style={{ width }}\n className={labelClassName}\n onMouseDown={this.handleWrapperMouseDown}\n onMouseUp={this.handleWrapperMouseUp}\n >\n <TextWidthHelper\n ref={this.textHelperRef}\n classHelp={cx(styles.helperText(theme), {\n [styles.helperTextEditing(theme)]: this.isEditingMode,\n })}\n text={inputValue}\n theme={this.theme}\n />\n {this.renderTokensStart()}\n <textarea\n ref={this.inputRef}\n value={inputValue}\n style={inputInlineStyles}\n spellCheck={false}\n disabled={disabled}\n className={inputClassName}\n placeholder={selectedItems.length > 0 ? undefined : placeholder}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n onChange={this.handleChangeInputValue}\n onKeyDown={this.handleKeyDown}\n onPaste={this.handleInputPaste}\n inputMode={inputMode}\n />\n {showMenu && (\n <TokenInputMenu\n ref={this.tokensInputMenuRef}\n items={autocompleteItems}\n loading={loading}\n opened={showMenu}\n maxMenuHeight={maxMenuHeight}\n anchorElement={menuAlign === 'cursor' ? this.input! : this.wrapper!}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n menuWidth={menuWidth}\n menuAlign={menuAlign}\n />\n )}\n {this.renderTokensEnd()}\n {this.isEditingMode ? <span className={styles.reservedInput(theme)}>{reservedInputValue}</span> : null}\n </label>\n </div>\n </CommonWrapper>\n );\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n this.dispatch({ type: 'RESET' });\n }\n\n private hasValueInItems = (items: T[], value: T) => {\n if (typeof value === 'string') {\n return items.includes(value);\n }\n // todo: как то не очень\n return items.some((item) => isEqual(item, value));\n };\n\n private get showAddItemHint() {\n const items = this.state.autocompleteItems;\n const value = this.props.valueToItem(this.state.inputValue);\n\n if (items && this.hasValueInItems(items, value)) {\n return false;\n }\n\n const selectedItems = this.props.selectedItems;\n if (selectedItems && this.hasValueInItems(selectedItems, value)) {\n return false;\n }\n\n if (this.type === TokenInputType.Combined && this.state.inputValue !== '') {\n return true;\n }\n }\n\n private get type() {\n return this.props.type ? this.props.type : TokenInputType.WithReference;\n }\n\n private get menuRef(): Menu | null {\n return this.tokensInputMenu && this.tokensInputMenu.getMenuRef();\n }\n\n private get isCursorVisible() {\n return this.isCursorVisibleForState(this.state);\n }\n\n private get isEditingMode() {\n return this.state.editingTokenIndex > -1;\n }\n\n private isCursorVisibleForState(state: TokenInputState<T>) {\n return state.inFocus && (state.inputValue !== '' || state.activeTokens.length === 0);\n }\n\n private inputRef = (node: HTMLTextAreaElement) => (this.input = node);\n private tokensInputMenuRef = (node: TokenInputMenu<T>) => (this.tokensInputMenu = node);\n private textHelperRef = (node: TextWidthHelper) => (this.textHelper = node);\n private wrapperRef = (node: HTMLLabelElement) => (this.wrapper = node);\n\n private dispatch = (action: TokenInputAction, cb?: () => void) => {\n this.setState((prevState) => tokenInputReducer(prevState, action), cb);\n };\n\n private updateInputTextWidth() {\n if (this.textHelper) {\n // в IE текст иногда не помещается в input\n // из-за округления, поэтому округляем явно\n const inputValueWidth = parseFloat(this.textHelper.getTextWidth().toFixed(2));\n const inputValueHeight = parseFloat(this.textHelper.getTextHeight().toFixed(2));\n\n this.dispatch({ type: 'SET_INPUT_VALUE_WIDTH', payload: inputValueWidth }, LayoutEvents.emit);\n this.dispatch({ type: 'SET_INPUT_VALUE_HEIGHT', payload: inputValueHeight }, LayoutEvents.emit);\n }\n }\n\n private handleInputFocus = (event: FocusEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'SET_FOCUS_IN' });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleInputBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n const isBlurToMenu = this.isBlurToMenu(event);\n\n if (!isBlurToMenu) {\n this.handleOutsideBlur();\n }\n\n if (isBlurToMenu || this.state.preventBlur) {\n event.preventDefault();\n // первый focus нужен для предотвращения/уменьшения моргания в других браузерах\n this.input?.focus();\n // в firefox не работает без второго focus\n requestAnimationFrame(() => this.input?.focus());\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n } else {\n this.dispatch({ type: 'BLUR' });\n this.props.onBlur?.(event);\n }\n };\n\n private handleOutsideBlur = () => {\n const { inputValue, autocompleteItems } = this.state;\n const { valueToString } = this.props;\n\n if (inputValue === '') {\n // если стерли содержимое токена в режиме редактирования, то удаляем токен\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n return;\n }\n\n // если не изменилось значение токена при редактировании\n if (this.isEditingMode && !this.isTokenValueChanged) {\n this.finishTokenEdit();\n return;\n }\n\n // чекаем автокомплит на совпадение с введенным значением в инпут\n if (autocompleteItems && autocompleteItems.length === 1) {\n const item = autocompleteItems[0];\n\n if (valueToString(item) === inputValue) {\n this.isEditingMode ? this.finishTokenEdit() : this.selectItem(item);\n\n return;\n }\n }\n\n if (this.isInputChanged) {\n this.checkForUnexpectedInput();\n }\n };\n\n private get isInputChanged() {\n if (this.isEditingMode) {\n return this.isTokenValueChanged;\n }\n\n return this.isInputValueChanged;\n }\n\n private get isInputValueChanged() {\n const { inputValue } = this.state;\n\n return inputValue !== '';\n }\n\n private get isTokenValueChanged() {\n const { inputValue, editingTokenIndex } = this.state;\n const { selectedItems, valueToString } = this.props;\n\n if (this.isEditingMode) {\n return valueToString(selectedItems[editingTokenIndex]) !== inputValue;\n }\n\n return false;\n }\n\n private isBlurToMenu = (event: FocusEvent<HTMLElement>) => {\n if (this.menuRef) {\n const menu = getRootNode(this.tokensInputMenu?.getMenuRef());\n const relatedTarget = (event.relatedTarget || document.activeElement) as HTMLElement;\n\n if (menu && menu.contains(relatedTarget)) {\n return true;\n }\n }\n return false;\n };\n\n private handleWrapperMouseDown = (event: React.MouseEvent<HTMLElement>) => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: true });\n const target = event.target as HTMLElement;\n const isClickOnToken =\n target && this.wrapper?.contains(target) && target !== this.wrapper! && target !== this.input!;\n if (!isClickOnToken) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n }\n };\n\n private handleWrapperMouseUp = () => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n };\n\n private handleCopy = (event: any) => {\n if (!this.state.inFocus || this.state.activeTokens.length === 0 || this.isCursorVisible) {\n return;\n }\n event.preventDefault();\n\n // упорядочивание токенов по индексу\n const tokens = this.state.activeTokens\n .map((token) => this.props.selectedItems.indexOf(token))\n .sort()\n .map((index) => this.props.selectedItems[index])\n .map((item) => this.props.valueToString(item));\n event.clipboardData.setData('text/plain', tokens.join(this.props.delimiters[0]));\n };\n\n private handleInputPaste = (event: React.ClipboardEvent<HTMLElement>) => {\n if (this.type === TokenInputType.WithReference || !event.clipboardData) {\n return;\n }\n let paste = event.clipboardData.getData('text');\n const { delimiters } = this.props;\n if (delimiters.some((delimiter) => paste.includes(delimiter))) {\n event.preventDefault();\n event.stopPropagation();\n for (const delimiter of delimiters) {\n paste = paste.split(delimiter).join(delimiters[0]);\n }\n const tokens = paste.split(delimiters[0]);\n const items = tokens\n .map((token) => this.props.valueToItem(token))\n .filter((item) => !this.hasValueInItems(this.props.selectedItems, item));\n const newItems = this.props.selectedItems.concat(items);\n this.props.onValueChange(newItems);\n\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n this.tryGetItems();\n }\n };\n\n private tryGetItems = async (query = '') => {\n if (this.props.getItems && (this.state.inputValue !== '' || !this.props.hideMenuIfEmptyInputValue)) {\n this.dispatch({ type: 'SET_LOADING', payload: true });\n const autocompleteItems = await this.props.getItems(query);\n this.dispatch({ type: 'SET_LOADING', payload: false });\n\n const isSelectedItem = (item: T) => this.hasValueInItems(this.props.selectedItems, item);\n const isEditingItem = (item: T) => {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n return !!editingItem && isEqual(item, editingItem);\n };\n\n const autocompleteItemsUnique = autocompleteItems.filter((item) => !isSelectedItem(item) || isEditingItem(item));\n\n if (this.isEditingMode) {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n if (\n isEqual(editingItem, this.props.valueToItem(this.state.inputValue)) &&\n !this.hasValueInItems(autocompleteItemsUnique, editingItem)\n ) {\n autocompleteItemsUnique.unshift(editingItem);\n }\n }\n\n if (query === '' || this.state.inputValue !== '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: autocompleteItemsUnique }, () => {\n LayoutEvents.emit();\n this.highlightMenuItem();\n });\n }\n const selectItemIndex = autocompleteItemsUnique.findIndex(\n (item) => this.props.valueToString(item).toLowerCase() === this.state.inputValue.toLowerCase(),\n );\n if (this.menuRef) {\n this.menuRef.highlightItem(selectItemIndex < 0 ? 0 : selectItemIndex);\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (this.isCursorVisible) {\n this.handleInputKeyDown(event);\n } else {\n this.handleWrapperKeyDown(event);\n }\n };\n\n private handleInputKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n e.stopPropagation();\n\n if (\n (this.type !== TokenInputType.WithReference &&\n this.props.delimiters.some((key) => key === e.key || (key === ',' && isKeyComma(e)))) ||\n (isKeyEnter(e) && this.type === TokenInputType.WithoutReference)\n ) {\n e.preventDefault();\n const newValue = this.state.inputValue;\n if (newValue !== '') {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n } else {\n this.handleAddItem();\n }\n }\n }\n\n switch (true) {\n case isKeyEnter(e):\n if (this.menuRef) {\n this.menuRef.enter(e);\n }\n // don't allow textarea\n // became multiline\n e.preventDefault();\n break;\n case isKeyArrowVertical(e):\n e.preventDefault();\n if (this.menuRef) {\n if (isKeyArrowUp(e)) {\n this.menuRef.up();\n } else {\n this.menuRef.down();\n }\n }\n break;\n case isKeyEscape(e):\n this.input?.blur();\n break;\n case isKeyBackspace(e):\n if (!this.isEditingMode) {\n this.moveFocusToLastToken();\n }\n break;\n case isKeyArrowLeft(e):\n if (this.input?.selectionStart === 0) {\n this.moveFocusToLastToken();\n }\n break;\n }\n };\n\n private moveFocusToLastToken() {\n const items = this.props.selectedItems;\n if (this.state.inputValue === '' && items && items.length > 0) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) });\n }\n }\n\n private focusInput = () => {\n requestAnimationFrame(() => this.input?.focus());\n };\n\n private selectInputText = () => {\n if (this.input) {\n this.input.setSelectionRange(0, this.state.inputValue.length);\n }\n };\n\n private handleWrapperKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n switch (true) {\n case isKeyBackspace(e):\n case isKeyDelete(e): {\n if (!this.isEditingMode) {\n const itemsNew = this.props.selectedItems.filter(\n (item) => !this.hasValueInItems(this.state.activeTokens, item),\n );\n this.props.onValueChange(itemsNew);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => {\n LayoutEvents.emit();\n this.input?.focus();\n });\n }\n break;\n }\n case isKeyArrowHorizontal(e):\n this.handleWrapperArrows(e);\n break;\n case isKeyEscape(e):\n this.wrapper?.blur();\n break;\n case isKeyEnter(e):\n e.preventDefault();\n if (this.state.activeTokens.length === 1) {\n this.handleTokenEdit(this.state.activeTokens[0]);\n }\n break;\n case isShortcutSelectAll(e):\n e.preventDefault();\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: this.props.selectedItems,\n });\n break;\n }\n };\n\n private handleWrapperArrows = (e: KeyboardEvent<HTMLElement>) => {\n e.preventDefault();\n const activeTokens = this.state.activeTokens;\n const activeItemIndex = this.props.selectedItems.indexOf(activeTokens[0]);\n const newItemIndex = activeItemIndex + (isKeyArrowLeft(e) ? -1 : +1);\n const isLeftEdge = activeItemIndex === 0 && isKeyArrowLeft(e);\n const isRightEdge = activeItemIndex === this.props.selectedItems.length - 1 && isKeyArrowRight(e);\n if (!e.shiftKey && activeTokens.length === 1) {\n this.handleWrapperArrowsWithoutShift(isLeftEdge, isRightEdge, newItemIndex);\n } else {\n this.handleWrapperArrowsWithShift(isLeftEdge, isRightEdge, newItemIndex);\n }\n };\n\n private handleWrapperArrowsWithoutShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (isRightEdge) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => this.input?.focus());\n } else if (!isLeftEdge) {\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: [this.props.selectedItems[newItemIndex]],\n });\n }\n };\n\n private handleWrapperArrowsWithShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (!isLeftEdge && !isRightEdge) {\n const itemNew = this.props.selectedItems[newItemIndex];\n const itemsNew = [itemNew, ...this.state.activeTokens.filter((item) => !isEqual(item, itemNew))];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: itemsNew });\n }\n };\n\n private handleValueChange = (items: T[]) => {\n this.props.onValueChange(items);\n };\n\n private handleAddItem = () => {\n const item = this.props.valueToItem(this.state.inputValue);\n if (item) {\n this.selectItem(item);\n }\n };\n\n private selectItem = (item: T) => {\n const { selectedItems } = this.props;\n\n if (this.isEditingMode) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(item) }, this.finishTokenEdit);\n } else if (!this.hasValueInItems(selectedItems, item)) {\n this.handleValueChange(selectedItems.concat([item]));\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n }\n };\n\n private handleRemoveToken = (item: T) => {\n this.props.onValueChange(this.props.selectedItems.filter((_) => !isEqual(_, item)));\n const filteredActiveTokens = this.state.activeTokens.filter((_) => !isEqual(_, item));\n\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: filteredActiveTokens });\n if (filteredActiveTokens.length === 0) {\n this.focusInput();\n }\n\n this.tryGetItems();\n };\n\n private handleTokenClick = (event: React.MouseEvent<HTMLElement>, itemNew: T) => {\n const items = this.state.activeTokens;\n if (event.ctrlKey) {\n const newItems = this.hasValueInItems(this.state.activeTokens, itemNew)\n ? items.filter((item) => !isEqual(item, itemNew))\n : [...items, itemNew];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: newItems });\n } else {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] });\n }\n this.focusInput();\n };\n\n private handleTokenEdit = (itemNew: T) => {\n const editingTokenIndex = this.props.selectedItems.findIndex((item) => item === itemNew);\n this.dispatch({ type: 'SET_EDITING_TOKEN_INDEX', payload: editingTokenIndex });\n\n if (this.state.inputValue !== '') {\n if (this.state.reservedInputValue === undefined) {\n this.dispatch({ type: 'SET_TEMPORARY_QUERY', payload: this.state.inputValue });\n }\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(itemNew) }, this.selectInputText);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n\n this.tryGetItems();\n };\n\n private finishTokenEdit = () => {\n const { editingTokenIndex, inputValue, reservedInputValue } = this.state;\n const { selectedItems, valueToItem } = this.props;\n const editedItem = valueToItem(inputValue);\n const newItems = selectedItems.concat([]);\n\n if (!this.hasValueInItems(selectedItems, editedItem)) {\n newItems.splice(editingTokenIndex, 1, ...(inputValue !== '' ? [editedItem] : []));\n this.handleValueChange(newItems);\n }\n\n this.dispatch({ type: 'REMOVE_EDITING_TOKEN_INDEX' });\n\n if (reservedInputValue) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: reservedInputValue });\n this.dispatch({ type: 'REMOVE_TEMPORARY_QUERY' });\n } else {\n this.dispatch({ type: 'CLEAR_INPUT' });\n }\n\n if (newItems.length === selectedItems.length) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [newItems[editingTokenIndex]] });\n }\n };\n\n private checkForUnexpectedInput = () => {\n const { inputValue } = this.state;\n const { onUnexpectedInput } = this.props;\n\n if (onUnexpectedInput) {\n // чекаем не возвращает ли что-нибудь обработчик\n const returnedValue = onUnexpectedInput(inputValue);\n\n if (returnedValue === undefined) {\n return;\n }\n\n if (returnedValue === null) {\n this.dispatch({ type: 'CLEAR_INPUT' }, () => {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n });\n\n return;\n }\n\n if (returnedValue) {\n this.selectItem(returnedValue);\n }\n }\n };\n\n private handleChangeInputValue = (event: ChangeEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n let query = event.target.value.trimLeft();\n\n if (query.endsWith(' ')) {\n query = query.trimRight() + ' ';\n }\n if (this.state.inputValue !== '' && query === '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: query }, () => {\n this.tryGetItems(query);\n });\n if (this.props.onInputValueChange) {\n this.props.onInputValueChange(query);\n }\n };\n\n private highlightMenuItem = () => {\n if (\n this.menuRef &&\n this.state.autocompleteItems &&\n this.state.autocompleteItems.length > 0 &&\n this.type !== TokenInputType.Combined\n ) {\n this.menuRef.highlightItem(0);\n }\n };\n\n private renderTokensStart = () => {\n const { editingTokenIndex } = this.state;\n const { selectedItems } = this.props;\n const delimiter = editingTokenIndex >= 0 ? editingTokenIndex : selectedItems.length;\n return selectedItems.slice(0, delimiter).map(this.renderToken);\n };\n\n private renderTokensEnd = () => {\n if (this.state.editingTokenIndex >= 0) {\n return this.props.selectedItems.slice(this.state.editingTokenIndex + 1).map(this.renderToken);\n }\n };\n\n private renderToken = (item: T) => {\n const { renderToken = defaultRenderToken, disabled } = this.props;\n\n const isActive = this.state.activeTokens.includes(item);\n\n // TODO useCallback\n const handleIconClick: React.MouseEventHandler<HTMLElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleRemoveToken(item);\n }\n };\n\n // TODO useCallback\n const handleTokenClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenClick(event, item);\n }\n };\n\n const handleTokenDoubleClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenEdit(item);\n }\n };\n\n return renderToken(item, {\n isActive,\n onClick: handleTokenClick,\n onDoubleClick: handleTokenDoubleClick,\n onRemove: handleIconClick,\n disabled,\n });\n };\n\n private renderAddButton = (value = this.state.inputValue): React.ReactNode | undefined => {\n if (!this.showAddItemHint) {\n return;\n }\n\n if (this.props.renderAddButton) {\n return this.props.renderAddButton(value, this.handleAddItem);\n }\n\n const { addButtonComment, addButtonTitle } = this.locale;\n\n return (\n <MenuItem onClick={this.handleAddItem} comment={addButtonComment} key=\"renderAddButton\">\n {addButtonTitle} {value}\n </MenuItem>\n );\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["TokenInput.tsx"],"names":["React","isEqual","isKeyArrowHorizontal","isKeyArrowLeft","isKeyArrowRight","isKeyArrowUp","isKeyArrowVertical","isKeyBackspace","isKeyComma","isKeyDelete","isKeyEnter","isKeyEscape","isShortcutSelectAll","LayoutEvents","Token","emptyHandler","ThemeContext","locale","MenuItem","CommonWrapper","cx","getRootNode","rootNode","TokenInputLocaleHelper","styles","tokenInputReducer","TokenInputMenu","TextWidthHelper","TokenInputType","DefaultState","inputValue","reservedInputValue","undefined","autocompleteItems","activeTokens","editingTokenIndex","inFocus","loading","preventBlur","inputValueWidth","inputValueHeight","defaultToKey","item","toString","identity","defaultRenderToken","isActive","onClick","onDoubleClick","onRemove","disabled","TokenInput","state","input","tokensInputMenu","textHelper","wrapper","hasValueInItems","items","value","includes","some","inputRef","node","tokensInputMenuRef","textHelperRef","wrapperRef","dispatch","action","cb","setState","prevState","handleInputFocus","event","type","props","onFocus","handleInputBlur","isBlurToMenu","handleOutsideBlur","preventDefault","focus","requestAnimationFrame","payload","onBlur","valueToString","isEditingMode","finishTokenEdit","isTokenValueChanged","length","selectItem","isInputChanged","checkForUnexpectedInput","menuRef","menu","getMenuRef","relatedTarget","document","activeElement","contains","handleWrapperMouseDown","target","isClickOnToken","handleWrapperMouseUp","handleCopy","isCursorVisible","tokens","map","token","selectedItems","indexOf","sort","index","clipboardData","setData","join","delimiters","handleInputPaste","WithReference","paste","getData","delimiter","stopPropagation","split","valueToItem","filter","newItems","concat","onValueChange","tryGetItems","query","getItems","hideMenuIfEmptyInputValue","isSelectedItem","isEditingItem","editingItem","autocompleteItemsUnique","unshift","emit","highlightMenuItem","selectItemIndex","findIndex","toLowerCase","highlightItem","handleKeyDown","handleInputKeyDown","handleWrapperKeyDown","e","key","WithoutReference","newValue","handleAddItem","enter","up","down","blur","moveFocusToLastToken","selectionStart","focusInput","selectInputText","setSelectionRange","itemsNew","handleWrapperArrows","handleTokenEdit","activeItemIndex","newItemIndex","isLeftEdge","isRightEdge","shiftKey","handleWrapperArrowsWithoutShift","handleWrapperArrowsWithShift","itemNew","handleValueChange","handleRemoveToken","_","filteredActiveTokens","handleTokenClick","ctrlKey","editedItem","splice","onUnexpectedInput","returnedValue","handleChangeInputValue","trimLeft","endsWith","trimRight","onInputValueChange","Combined","renderTokensStart","slice","renderToken","renderTokensEnd","handleIconClick","handleTokenDoubleClick","renderAddButton","showAddItemHint","addButtonComment","addButtonTitle","componentDidMount","updateInputTextWidth","addEventListener","autoFocus","componentDidUpdate","prevProps","isCursorVisibleForState","componentWillUnmount","removeEventListener","render","theme","renderMain","Error","width","maxMenuHeight","error","warning","placeholder","renderItem","renderNotFound","onMouseEnter","onMouseLeave","inputMode","menuWidth","menuAlign","renderTotalCount","totalCount","showMenu","lineHeight","parseInt","tokenInputLineHeight","inputInlineStyles","height","Math","max","flex","caretColor","labelClassName","label","labelDisabled","labelFocused","inputClassName","inputDisabled","inputEditing","setRootNode","helperText","helperTextEditing","reservedInput","reset","parseFloat","getTextWidth","toFixed","getTextHeight","isInputValueChanged","PureComponent","__KONTUR_REACT_UI__","defaultProps","renderValue","toKey"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, FocusEvent, FocusEventHandler, KeyboardEvent, MouseEventHandler, ReactNode } from 'react';\nimport isEqual from 'lodash.isequal';\n\nimport {\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowRight,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyBackspace,\n isKeyComma,\n isKeyDelete,\n isKeyEnter,\n isKeyEscape,\n isShortcutSelectAll,\n} from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Menu } from '../../internal/Menu';\nimport { Token, TokenProps } from '../Token';\nimport { MenuItemState } from '../MenuItem';\nimport { emptyHandler } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { locale } from '../../lib/locale/decorators';\nimport { MenuItem } from '../MenuItem/MenuItem';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { TokenInputLocale, TokenInputLocaleHelper } from './locale';\nimport { styles } from './TokenInput.styles';\nimport { TokenInputAction, tokenInputReducer } from './TokenInputReducer';\nimport { TokenInputMenu } from './TokenInputMenu';\nimport { TextWidthHelper } from './TextWidthHelper';\n\nexport enum TokenInputType {\n WithReference,\n WithoutReference,\n Combined,\n}\n\nexport type TokenInputMenuAlign = 'left' | 'cursor';\n\nexport interface TokenInputProps<T> extends CommonProps {\n selectedItems: T[];\n onValueChange: (items: T[]) => void;\n onMouseEnter: MouseEventHandler<HTMLDivElement>;\n onMouseLeave: MouseEventHandler<HTMLDivElement>;\n onFocus: FocusEventHandler<HTMLTextAreaElement>;\n onBlur: FocusEventHandler<HTMLTextAreaElement>;\n autoFocus?: boolean;\n type?: TokenInputType;\n /**\n * Ширина выпадающего меню может быть указана как 'auto'\n * а также в пикселях, процентах (от ширины инпута)\n * или других конкретных единицах\n *\n * Если menuAlign = 'cursor', то ширина выпадающего меню всегда будет равна 'auto'\n * (по ширине текста)\n */\n menuWidth: React.CSSProperties['width'];\n menuAlign: TokenInputMenuAlign;\n\n /**\n * Функция поиска элементов, должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются строки.\n *\n * Элементы могут быть любого типа. В этом случае необходимо определить\n * свойства `renderItem`, `valueToString`\n */\n getItems?: (query: string) => Promise<T[]>;\n hideMenuIfEmptyInputValue?: boolean;\n renderItem: (item: T, state: MenuItemState) => React.ReactNode | null;\n renderValue: (item: T) => React.ReactNode;\n /**\n * Функция должна возвращать строковое представление токена\n * @default item => item\n */\n valueToString: (item: T) => string;\n /**\n * Функция отображающая сообщение об общем количестве элементов.\n * `found` учитывает только компонент `MenuItem`. Им \"оборачиваются\" элементы, возвращаемые `getItems()`.\n */\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n /**\n * Общее количество элементов.\n * Необходим для работы `renderTotalCount`\n */\n totalCount?: number;\n\n renderNotFound?: () => React.ReactNode;\n valueToItem: (item: string) => T;\n toKey: (item: T) => string | number | undefined;\n placeholder?: string;\n delimiters: string[];\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n disabled?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderToken?: (item: T, props: Partial<TokenProps>) => ReactNode;\n /**\n * Вызывается при изменении текста в поле ввода,\n */\n onInputValueChange?: (value: string) => void;\n /**\n * Функция отрисовки кнопки добавления в выпадающем списке\n */\n renderAddButton?: (query?: string, onAddItem?: () => void) => ReactNode;\n /**\n * Функция для обработки ситуации, когда была введена\n * строка в инпут и был потерян фокус с компонента\n *\n * Функция срабатывает с аргументом инпута строки\n *\n * Если при потере фокуса в выпадающем списке будет только один\n * элемент и результат `valueToString` с этим элементом будет\n * совпадать со значение в текстовом поле, то\n * сработает `onValueChange` со значением данного элемента\n *\n * Сама функция также может вернуть значение,\n * неравное `undefined`, с которым будет вызван `onValueChange`.\n * Если возвращаемое значение будет равно `null`,\n * то сработает очистка текущего значения инпута,\n * а в режиме редактирования токен будет удален\n */\n onUnexpectedInput?: (value: string) => void | null | undefined | T;\n inputMode?: React.HTMLAttributes<HTMLTextAreaElement>['inputMode'];\n}\n\nexport interface TokenInputState<T> {\n autocompleteItems?: T[];\n activeTokens: T[];\n editingTokenIndex: number;\n clickedToken?: T;\n clickedTokenTimeout?: number;\n inFocus?: boolean;\n inputValue: string;\n reservedInputValue: string | undefined;\n inputValueWidth: number;\n inputValueHeight: number;\n preventBlur?: boolean;\n loading?: boolean;\n}\n\nexport const DefaultState = {\n inputValue: '',\n reservedInputValue: undefined,\n autocompleteItems: undefined,\n activeTokens: [],\n editingTokenIndex: -1,\n inFocus: false,\n loading: false,\n preventBlur: false,\n inputValueWidth: 2,\n inputValueHeight: 22,\n};\n\nconst defaultToKey = <T extends {}>(item: T): string => item.toString();\nconst identity = <T extends {}>(item: T): T => item;\nconst defaultRenderToken = <T extends {}>(\n item: T,\n { isActive, onClick, onDoubleClick, onRemove, disabled }: Partial<TokenProps>,\n) => (\n <Token\n key={item.toString()}\n isActive={isActive}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onRemove={onRemove}\n disabled={disabled}\n >\n {item}\n </Token>\n);\n\n@rootNode\n@locale('TokenInput', TokenInputLocaleHelper)\nexport class TokenInput<T = string> extends React.PureComponent<TokenInputProps<T>, TokenInputState<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInput';\n\n public static defaultProps: Partial<TokenInputProps<any>> = {\n selectedItems: [],\n delimiters: [',', ' '],\n renderItem: identity,\n renderValue: identity,\n valueToString: identity,\n valueToItem: (item: string) => item,\n toKey: defaultToKey,\n onValueChange: () => void 0,\n width: 250 as string | number,\n onBlur: emptyHandler,\n onFocus: emptyHandler,\n onMouseEnter: emptyHandler,\n onMouseLeave: emptyHandler,\n menuWidth: 'auto',\n menuAlign: 'cursor',\n };\n\n public state: TokenInputState<T> = DefaultState;\n\n private readonly locale!: TokenInputLocale;\n private theme!: Theme;\n private input: HTMLTextAreaElement | null = null;\n private tokensInputMenu: TokenInputMenu<T> | null = null;\n private textHelper: TextWidthHelper | null = null;\n private wrapper: HTMLLabelElement | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.updateInputTextWidth();\n document.addEventListener('copy', this.handleCopy);\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n\n public componentDidUpdate(prevProps: TokenInputProps<T>, prevState: TokenInputState<T>) {\n if (prevState.inputValue !== this.state.inputValue) {\n this.updateInputTextWidth();\n }\n if (prevState.activeTokens.length === 0 && this.state.activeTokens.length > 0) {\n this.dispatch({\n type: 'SET_AUTOCOMPLETE_ITEMS',\n payload: undefined,\n });\n }\n if (prevProps.selectedItems.length !== this.props.selectedItems.length) {\n LayoutEvents.emit();\n }\n if (!this.isCursorVisibleForState(prevState) && this.isCursorVisible) {\n this.tryGetItems(this.isEditingMode ? '' : this.state.inputValue);\n }\n }\n\n public componentWillUnmount() {\n document.removeEventListener('copy', this.handleCopy);\n }\n\n /**\n * @public\n */\n public focus() {\n this.input?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.input?.blur();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {\n throw Error('Missed getItems for type ' + this.type);\n }\n\n const {\n selectedItems,\n width,\n maxMenuHeight,\n error,\n warning,\n disabled,\n placeholder,\n renderItem,\n renderNotFound,\n hideMenuIfEmptyInputValue,\n onMouseEnter,\n onMouseLeave,\n inputMode,\n menuWidth,\n menuAlign,\n renderTotalCount,\n totalCount,\n } = this.props;\n\n const {\n activeTokens,\n inFocus,\n inputValueWidth,\n inputValue,\n reservedInputValue,\n autocompleteItems,\n loading,\n inputValueHeight,\n } = this.state;\n\n const showMenu =\n this.type !== TokenInputType.WithoutReference &&\n this.isCursorVisible &&\n activeTokens.length === 0 &&\n (inputValue !== '' || !hideMenuIfEmptyInputValue);\n\n const theme = this.theme;\n\n const lineHeight = parseInt(theme.tokenInputLineHeight, 10) || 0;\n\n const inputInlineStyles: React.CSSProperties = {\n // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости\n width: inputValueWidth,\n height: Math.max(lineHeight, inputValueHeight),\n // input растягивается на всю ширину чтобы placeholder не обрезался\n flex: selectedItems && selectedItems.length === 0 ? 1 : undefined,\n // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее\n caretColor: this.isCursorVisible ? undefined : 'transparent',\n };\n\n const labelClassName = cx(styles.label(theme), {\n [styles.labelDisabled(theme)]: !!disabled,\n [styles.labelFocused(theme)]: !!inFocus,\n [styles.error(theme)]: !!error,\n [styles.warning(theme)]: !!warning,\n });\n const inputClassName = cx(styles.input(theme), {\n [styles.inputDisabled(theme)]: !!disabled,\n [styles.inputEditing(theme)]: this.isEditingMode,\n });\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\n <label\n ref={this.wrapperRef}\n style={{ width }}\n className={labelClassName}\n onMouseDown={this.handleWrapperMouseDown}\n onMouseUp={this.handleWrapperMouseUp}\n >\n <TextWidthHelper\n ref={this.textHelperRef}\n classHelp={cx(styles.helperText(theme), {\n [styles.helperTextEditing(theme)]: this.isEditingMode,\n })}\n text={inputValue}\n theme={this.theme}\n />\n {this.renderTokensStart()}\n <textarea\n ref={this.inputRef}\n value={inputValue}\n style={inputInlineStyles}\n spellCheck={false}\n disabled={disabled}\n className={inputClassName}\n placeholder={selectedItems.length > 0 ? undefined : placeholder}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n onChange={this.handleChangeInputValue}\n onKeyDown={this.handleKeyDown}\n onPaste={this.handleInputPaste}\n inputMode={inputMode}\n />\n {showMenu && (\n <TokenInputMenu\n ref={this.tokensInputMenuRef}\n items={autocompleteItems}\n loading={loading}\n opened={showMenu}\n maxMenuHeight={maxMenuHeight}\n anchorElement={menuAlign === 'cursor' ? this.input! : this.wrapper!}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n menuWidth={menuWidth}\n menuAlign={menuAlign}\n renderTotalCount={renderTotalCount}\n totalCount={totalCount}\n />\n )}\n {this.renderTokensEnd()}\n {this.isEditingMode ? <span className={styles.reservedInput(theme)}>{reservedInputValue}</span> : null}\n </label>\n </div>\n </CommonWrapper>\n );\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n this.dispatch({ type: 'RESET' });\n }\n\n private hasValueInItems = (items: T[], value: T) => {\n if (typeof value === 'string') {\n return items.includes(value);\n }\n // todo: как то не очень\n return items.some((item) => isEqual(item, value));\n };\n\n private get showAddItemHint() {\n const items = this.state.autocompleteItems;\n const value = this.props.valueToItem(this.state.inputValue);\n\n if (items && this.hasValueInItems(items, value)) {\n return false;\n }\n\n const selectedItems = this.props.selectedItems;\n if (selectedItems && this.hasValueInItems(selectedItems, value)) {\n return false;\n }\n\n if (this.type === TokenInputType.Combined && this.state.inputValue !== '') {\n return true;\n }\n }\n\n private get type() {\n return this.props.type ? this.props.type : TokenInputType.WithReference;\n }\n\n private get menuRef(): Menu | null {\n return this.tokensInputMenu && this.tokensInputMenu.getMenuRef();\n }\n\n private get isCursorVisible() {\n return this.isCursorVisibleForState(this.state);\n }\n\n private get isEditingMode() {\n return this.state.editingTokenIndex > -1;\n }\n\n private isCursorVisibleForState(state: TokenInputState<T>) {\n return state.inFocus && (state.inputValue !== '' || state.activeTokens.length === 0);\n }\n\n private inputRef = (node: HTMLTextAreaElement) => (this.input = node);\n private tokensInputMenuRef = (node: TokenInputMenu<T>) => (this.tokensInputMenu = node);\n private textHelperRef = (node: TextWidthHelper) => (this.textHelper = node);\n private wrapperRef = (node: HTMLLabelElement) => (this.wrapper = node);\n\n private dispatch = (action: TokenInputAction, cb?: () => void) => {\n this.setState((prevState) => tokenInputReducer(prevState, action), cb);\n };\n\n private updateInputTextWidth() {\n if (this.textHelper) {\n // в IE текст иногда не помещается в input\n // из-за округления, поэтому округляем явно\n const inputValueWidth = parseFloat(this.textHelper.getTextWidth().toFixed(2));\n const inputValueHeight = parseFloat(this.textHelper.getTextHeight().toFixed(2));\n\n this.dispatch({ type: 'SET_INPUT_VALUE_WIDTH', payload: inputValueWidth }, LayoutEvents.emit);\n this.dispatch({ type: 'SET_INPUT_VALUE_HEIGHT', payload: inputValueHeight }, LayoutEvents.emit);\n }\n }\n\n private handleInputFocus = (event: FocusEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'SET_FOCUS_IN' });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleInputBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n const isBlurToMenu = this.isBlurToMenu(event);\n\n if (!isBlurToMenu) {\n this.handleOutsideBlur();\n }\n\n if (isBlurToMenu || this.state.preventBlur) {\n event.preventDefault();\n // первый focus нужен для предотвращения/уменьшения моргания в других браузерах\n this.input?.focus();\n // в firefox не работает без второго focus\n requestAnimationFrame(() => this.input?.focus());\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n } else {\n this.dispatch({ type: 'BLUR' });\n this.props.onBlur?.(event);\n }\n };\n\n private handleOutsideBlur = () => {\n const { inputValue, autocompleteItems } = this.state;\n const { valueToString } = this.props;\n\n if (inputValue === '') {\n // если стерли содержимое токена в режиме редактирования, то удаляем токен\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n return;\n }\n\n // если не изменилось значение токена при редактировании\n if (this.isEditingMode && !this.isTokenValueChanged) {\n this.finishTokenEdit();\n return;\n }\n\n // чекаем автокомплит на совпадение с введенным значением в инпут\n if (autocompleteItems && autocompleteItems.length === 1) {\n const item = autocompleteItems[0];\n\n if (valueToString(item) === inputValue) {\n this.isEditingMode ? this.finishTokenEdit() : this.selectItem(item);\n\n return;\n }\n }\n\n if (this.isInputChanged) {\n this.checkForUnexpectedInput();\n }\n };\n\n private get isInputChanged() {\n if (this.isEditingMode) {\n return this.isTokenValueChanged;\n }\n\n return this.isInputValueChanged;\n }\n\n private get isInputValueChanged() {\n const { inputValue } = this.state;\n\n return inputValue !== '';\n }\n\n private get isTokenValueChanged() {\n const { inputValue, editingTokenIndex } = this.state;\n const { selectedItems, valueToString } = this.props;\n\n if (this.isEditingMode) {\n return valueToString(selectedItems[editingTokenIndex]) !== inputValue;\n }\n\n return false;\n }\n\n private isBlurToMenu = (event: FocusEvent<HTMLElement>) => {\n if (this.menuRef) {\n const menu = getRootNode(this.tokensInputMenu?.getMenuRef());\n const relatedTarget = (event.relatedTarget || document.activeElement) as HTMLElement;\n\n if (menu && menu.contains(relatedTarget)) {\n return true;\n }\n }\n return false;\n };\n\n private handleWrapperMouseDown = (event: React.MouseEvent<HTMLElement>) => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: true });\n const target = event.target as HTMLElement;\n const isClickOnToken =\n target && this.wrapper?.contains(target) && target !== this.wrapper! && target !== this.input!;\n if (!isClickOnToken) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n }\n };\n\n private handleWrapperMouseUp = () => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n };\n\n private handleCopy = (event: any) => {\n if (!this.state.inFocus || this.state.activeTokens.length === 0 || this.isCursorVisible) {\n return;\n }\n event.preventDefault();\n\n // упорядочивание токенов по индексу\n const tokens = this.state.activeTokens\n .map((token) => this.props.selectedItems.indexOf(token))\n .sort()\n .map((index) => this.props.selectedItems[index])\n .map((item) => this.props.valueToString(item));\n event.clipboardData.setData('text/plain', tokens.join(this.props.delimiters[0]));\n };\n\n private handleInputPaste = (event: React.ClipboardEvent<HTMLElement>) => {\n if (this.type === TokenInputType.WithReference || !event.clipboardData) {\n return;\n }\n let paste = event.clipboardData.getData('text');\n const { delimiters } = this.props;\n if (delimiters.some((delimiter) => paste.includes(delimiter))) {\n event.preventDefault();\n event.stopPropagation();\n for (const delimiter of delimiters) {\n paste = paste.split(delimiter).join(delimiters[0]);\n }\n const tokens = paste.split(delimiters[0]);\n const items = tokens\n .map((token) => this.props.valueToItem(token))\n .filter((item) => !this.hasValueInItems(this.props.selectedItems, item));\n const newItems = this.props.selectedItems.concat(items);\n this.props.onValueChange(newItems);\n\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n this.tryGetItems();\n }\n };\n\n private tryGetItems = async (query = '') => {\n if (this.props.getItems && (this.state.inputValue !== '' || !this.props.hideMenuIfEmptyInputValue)) {\n this.dispatch({ type: 'SET_LOADING', payload: true });\n const autocompleteItems = await this.props.getItems(query);\n this.dispatch({ type: 'SET_LOADING', payload: false });\n\n const isSelectedItem = (item: T) => this.hasValueInItems(this.props.selectedItems, item);\n const isEditingItem = (item: T) => {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n return !!editingItem && isEqual(item, editingItem);\n };\n\n const autocompleteItemsUnique = autocompleteItems.filter((item) => !isSelectedItem(item) || isEditingItem(item));\n\n if (this.isEditingMode) {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n if (\n isEqual(editingItem, this.props.valueToItem(this.state.inputValue)) &&\n !this.hasValueInItems(autocompleteItemsUnique, editingItem)\n ) {\n autocompleteItemsUnique.unshift(editingItem);\n }\n }\n\n if (query === '' || this.state.inputValue !== '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: autocompleteItemsUnique }, () => {\n LayoutEvents.emit();\n this.highlightMenuItem();\n });\n }\n const selectItemIndex = autocompleteItemsUnique.findIndex(\n (item) => this.props.valueToString(item).toLowerCase() === this.state.inputValue.toLowerCase(),\n );\n if (this.menuRef) {\n this.menuRef.highlightItem(selectItemIndex < 0 ? 0 : selectItemIndex);\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (this.isCursorVisible) {\n this.handleInputKeyDown(event);\n } else {\n this.handleWrapperKeyDown(event);\n }\n };\n\n private handleInputKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n e.stopPropagation();\n\n if (\n (this.type !== TokenInputType.WithReference &&\n this.props.delimiters.some((key) => key === e.key || (key === ',' && isKeyComma(e)))) ||\n (isKeyEnter(e) && this.type === TokenInputType.WithoutReference)\n ) {\n e.preventDefault();\n const newValue = this.state.inputValue;\n if (newValue !== '') {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n } else {\n this.handleAddItem();\n }\n }\n }\n\n switch (true) {\n case isKeyEnter(e):\n if (this.menuRef) {\n this.menuRef.enter(e);\n }\n // don't allow textarea\n // became multiline\n e.preventDefault();\n break;\n case isKeyArrowVertical(e):\n e.preventDefault();\n if (this.menuRef) {\n if (isKeyArrowUp(e)) {\n this.menuRef.up();\n } else {\n this.menuRef.down();\n }\n }\n break;\n case isKeyEscape(e):\n this.input?.blur();\n break;\n case isKeyBackspace(e):\n if (!this.isEditingMode) {\n this.moveFocusToLastToken();\n }\n break;\n case isKeyArrowLeft(e):\n if (this.input?.selectionStart === 0) {\n this.moveFocusToLastToken();\n }\n break;\n }\n };\n\n private moveFocusToLastToken() {\n const items = this.props.selectedItems;\n if (this.state.inputValue === '' && items && items.length > 0) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) });\n }\n }\n\n private focusInput = () => {\n requestAnimationFrame(() => this.input?.focus());\n };\n\n private selectInputText = () => {\n if (this.input) {\n this.input.setSelectionRange(0, this.state.inputValue.length);\n }\n };\n\n private handleWrapperKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n switch (true) {\n case isKeyBackspace(e):\n case isKeyDelete(e): {\n if (!this.isEditingMode) {\n const itemsNew = this.props.selectedItems.filter(\n (item) => !this.hasValueInItems(this.state.activeTokens, item),\n );\n this.props.onValueChange(itemsNew);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => {\n LayoutEvents.emit();\n this.input?.focus();\n });\n }\n break;\n }\n case isKeyArrowHorizontal(e):\n this.handleWrapperArrows(e);\n break;\n case isKeyEscape(e):\n this.wrapper?.blur();\n break;\n case isKeyEnter(e):\n e.preventDefault();\n if (this.state.activeTokens.length === 1) {\n this.handleTokenEdit(this.state.activeTokens[0]);\n }\n break;\n case isShortcutSelectAll(e):\n e.preventDefault();\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: this.props.selectedItems,\n });\n break;\n }\n };\n\n private handleWrapperArrows = (e: KeyboardEvent<HTMLElement>) => {\n e.preventDefault();\n const activeTokens = this.state.activeTokens;\n const activeItemIndex = this.props.selectedItems.indexOf(activeTokens[0]);\n const newItemIndex = activeItemIndex + (isKeyArrowLeft(e) ? -1 : +1);\n const isLeftEdge = activeItemIndex === 0 && isKeyArrowLeft(e);\n const isRightEdge = activeItemIndex === this.props.selectedItems.length - 1 && isKeyArrowRight(e);\n if (!e.shiftKey && activeTokens.length === 1) {\n this.handleWrapperArrowsWithoutShift(isLeftEdge, isRightEdge, newItemIndex);\n } else {\n this.handleWrapperArrowsWithShift(isLeftEdge, isRightEdge, newItemIndex);\n }\n };\n\n private handleWrapperArrowsWithoutShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (isRightEdge) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => this.input?.focus());\n } else if (!isLeftEdge) {\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: [this.props.selectedItems[newItemIndex]],\n });\n }\n };\n\n private handleWrapperArrowsWithShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (!isLeftEdge && !isRightEdge) {\n const itemNew = this.props.selectedItems[newItemIndex];\n const itemsNew = [itemNew, ...this.state.activeTokens.filter((item) => !isEqual(item, itemNew))];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: itemsNew });\n }\n };\n\n private handleValueChange = (items: T[]) => {\n this.props.onValueChange(items);\n };\n\n private handleAddItem = () => {\n const item = this.props.valueToItem(this.state.inputValue);\n if (item) {\n this.selectItem(item);\n }\n };\n\n private selectItem = (item: T) => {\n const { selectedItems } = this.props;\n\n if (this.isEditingMode) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(item) }, this.finishTokenEdit);\n } else if (!this.hasValueInItems(selectedItems, item)) {\n this.handleValueChange(selectedItems.concat([item]));\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n }\n };\n\n private handleRemoveToken = (item: T) => {\n this.props.onValueChange(this.props.selectedItems.filter((_) => !isEqual(_, item)));\n const filteredActiveTokens = this.state.activeTokens.filter((_) => !isEqual(_, item));\n\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: filteredActiveTokens });\n if (filteredActiveTokens.length === 0) {\n this.focusInput();\n }\n\n this.tryGetItems();\n };\n\n private handleTokenClick = (event: React.MouseEvent<HTMLElement>, itemNew: T) => {\n const items = this.state.activeTokens;\n if (event.ctrlKey) {\n const newItems = this.hasValueInItems(this.state.activeTokens, itemNew)\n ? items.filter((item) => !isEqual(item, itemNew))\n : [...items, itemNew];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: newItems });\n } else {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] });\n }\n this.focusInput();\n };\n\n private handleTokenEdit = (itemNew: T) => {\n const editingTokenIndex = this.props.selectedItems.findIndex((item) => item === itemNew);\n this.dispatch({ type: 'SET_EDITING_TOKEN_INDEX', payload: editingTokenIndex });\n\n if (this.state.inputValue !== '') {\n if (this.state.reservedInputValue === undefined) {\n this.dispatch({ type: 'SET_TEMPORARY_QUERY', payload: this.state.inputValue });\n }\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(itemNew) }, this.selectInputText);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n\n this.tryGetItems();\n };\n\n private finishTokenEdit = () => {\n const { editingTokenIndex, inputValue, reservedInputValue } = this.state;\n const { selectedItems, valueToItem } = this.props;\n const editedItem = valueToItem(inputValue);\n const newItems = selectedItems.concat([]);\n\n if (!this.hasValueInItems(selectedItems, editedItem)) {\n newItems.splice(editingTokenIndex, 1, ...(inputValue !== '' ? [editedItem] : []));\n this.handleValueChange(newItems);\n }\n\n this.dispatch({ type: 'REMOVE_EDITING_TOKEN_INDEX' });\n\n if (reservedInputValue) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: reservedInputValue });\n this.dispatch({ type: 'REMOVE_TEMPORARY_QUERY' });\n } else {\n this.dispatch({ type: 'CLEAR_INPUT' });\n }\n\n if (newItems.length === selectedItems.length) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [newItems[editingTokenIndex]] });\n }\n };\n\n private checkForUnexpectedInput = () => {\n const { inputValue } = this.state;\n const { onUnexpectedInput } = this.props;\n\n if (onUnexpectedInput) {\n // чекаем не возвращает ли что-нибудь обработчик\n const returnedValue = onUnexpectedInput(inputValue);\n\n if (returnedValue === undefined) {\n return;\n }\n\n if (returnedValue === null) {\n this.dispatch({ type: 'CLEAR_INPUT' }, () => {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n });\n\n return;\n }\n\n if (returnedValue) {\n this.selectItem(returnedValue);\n }\n }\n };\n\n private handleChangeInputValue = (event: ChangeEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n let query = event.target.value.trimLeft();\n\n if (query.endsWith(' ')) {\n query = query.trimRight() + ' ';\n }\n if (this.state.inputValue !== '' && query === '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: query }, () => {\n this.tryGetItems(query);\n });\n if (this.props.onInputValueChange) {\n this.props.onInputValueChange(query);\n }\n };\n\n private highlightMenuItem = () => {\n if (\n this.menuRef &&\n this.state.autocompleteItems &&\n this.state.autocompleteItems.length > 0 &&\n this.type !== TokenInputType.Combined\n ) {\n this.menuRef.highlightItem(0);\n }\n };\n\n private renderTokensStart = () => {\n const { editingTokenIndex } = this.state;\n const { selectedItems } = this.props;\n const delimiter = editingTokenIndex >= 0 ? editingTokenIndex : selectedItems.length;\n return selectedItems.slice(0, delimiter).map(this.renderToken);\n };\n\n private renderTokensEnd = () => {\n if (this.state.editingTokenIndex >= 0) {\n return this.props.selectedItems.slice(this.state.editingTokenIndex + 1).map(this.renderToken);\n }\n };\n\n private renderToken = (item: T) => {\n const { renderToken = defaultRenderToken, disabled } = this.props;\n\n const isActive = this.state.activeTokens.includes(item);\n\n // TODO useCallback\n const handleIconClick: React.MouseEventHandler<HTMLElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleRemoveToken(item);\n }\n };\n\n // TODO useCallback\n const handleTokenClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenClick(event, item);\n }\n };\n\n const handleTokenDoubleClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenEdit(item);\n }\n };\n\n return renderToken(item, {\n isActive,\n onClick: handleTokenClick,\n onDoubleClick: handleTokenDoubleClick,\n onRemove: handleIconClick,\n disabled,\n });\n };\n\n private renderAddButton = (value = this.state.inputValue): React.ReactNode | undefined => {\n if (!this.showAddItemHint) {\n return;\n }\n\n if (this.props.renderAddButton) {\n return this.props.renderAddButton(value, this.handleAddItem);\n }\n\n const { addButtonComment, addButtonTitle } = this.locale;\n\n return (\n <MenuItem onClick={this.handleAddItem} comment={addButtonComment} key=\"renderAddButton\">\n {addButtonTitle} {value}\n </MenuItem>\n );\n };\n}\n"]}
|
|
@@ -43,6 +43,16 @@ export interface TokenInputProps<T> extends CommonProps {
|
|
|
43
43
|
* @default item => item
|
|
44
44
|
*/
|
|
45
45
|
valueToString: (item: T) => string;
|
|
46
|
+
/**
|
|
47
|
+
* Функция отображающая сообщение об общем количестве элементов.
|
|
48
|
+
* `found` учитывает только компонент `MenuItem`. Им "оборачиваются" элементы, возвращаемые `getItems()`.
|
|
49
|
+
*/
|
|
50
|
+
renderTotalCount?: (found: number, total: number) => React.ReactNode;
|
|
51
|
+
/**
|
|
52
|
+
* Общее количество элементов.
|
|
53
|
+
* Необходим для работы `renderTotalCount`
|
|
54
|
+
*/
|
|
55
|
+
totalCount?: number;
|
|
46
56
|
renderNotFound?: () => React.ReactNode;
|
|
47
57
|
valueToItem: (item: string) => T;
|
|
48
58
|
toKey: (item: T) => string | number | undefined;
|