@skbkontur/react-ui 3.8.4 → 3.9.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 +53 -0
- package/cjs/components/Button/Button.d.ts +66 -10
- package/cjs/components/Button/Button.js +55 -0
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Button/Button.md +42 -30
- package/cjs/components/Checkbox/Checkbox.d.ts +31 -14
- package/cjs/components/Checkbox/Checkbox.js +26 -7
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.md +92 -51
- package/cjs/components/ComboBox/ComboBox.d.ts +6 -0
- package/cjs/components/ComboBox/ComboBox.js +4 -0
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/DateInput/DateInput.d.ts +6 -0
- package/cjs/components/DateInput/DateInput.js +6 -0
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/DatePicker/DatePicker.d.ts +6 -0
- package/cjs/components/DatePicker/DatePicker.js +6 -0
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/Hint/Hint.d.ts +38 -0
- package/cjs/components/Hint/Hint.js +39 -1
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Hint/Hint.md +40 -1
- package/cjs/components/Input/Input.d.ts +6 -2
- package/cjs/components/Input/Input.js +4 -0
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Link/Link.d.ts +28 -10
- package/cjs/components/Link/Link.js +25 -10
- package/cjs/components/Link/Link.js.map +1 -1
- package/cjs/components/Link/Link.md +73 -7
- package/cjs/components/Link/Link.mixins.js +2 -1
- package/cjs/components/Link/Link.mixins.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.d.ts +42 -7
- package/cjs/components/MenuItem/MenuItem.js +30 -0
- package/cjs/components/MenuItem/MenuItem.js.map +1 -1
- package/cjs/components/Radio/Radio.d.ts +27 -11
- package/cjs/components/Radio/Radio.js +19 -6
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/Radio/Radio.md +36 -12
- package/cjs/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +4 -1
- package/cjs/components/Select/Select.js +3 -0
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +5 -1
- package/cjs/components/SidePage/SidePage.js +11 -16
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/components/SidePage/SidePage.styles.d.ts +5 -2
- package/cjs/components/SidePage/SidePage.styles.js +52 -35
- package/cjs/components/SidePage/SidePage.styles.js.map +1 -1
- package/cjs/components/SidePage/SidePageFooter.js +1 -1
- package/cjs/components/SidePage/SidePageFooter.js.map +1 -1
- package/cjs/components/SidePage/SidePageHeader.js +1 -1
- package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
- package/cjs/components/Tabs/Tab.d.ts +2 -2
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +6 -2
- package/cjs/components/Textarea/Textarea.js +9 -2
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/Textarea/Textarea.styles.d.ts +1 -0
- package/cjs/components/Textarea/Textarea.styles.js +22 -19
- package/cjs/components/Textarea/Textarea.styles.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +2 -2
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Token/Token.d.ts +6 -0
- package/cjs/components/Token/Token.js +6 -0
- package/cjs/components/Token/Token.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +6 -0
- package/cjs/components/TokenInput/TokenInput.js +23 -17
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/components/TokenInput/TokenInputMenu.js +1 -1
- package/cjs/components/TokenInput/TokenInputMenu.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +3 -2
- package/cjs/components/Tooltip/Tooltip.js +3 -1
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/internal/Calendar/Calendar.js +1 -1
- package/cjs/internal/Calendar/Calendar.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
- package/cjs/internal/CustomComboBox/ComboBoxView.js +6 -0
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
- package/cjs/internal/CustomComboBox/CustomComboBox.js +11 -9
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/cjs/internal/InputLikeText/InputLikeText.js +2 -2
- package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +13 -0
- package/cjs/internal/Popup/Popup.js +34 -6
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/Popup/PopupHelper.js +1 -0
- package/cjs/internal/Popup/PopupHelper.js.map +1 -1
- package/cjs/internal/PopupMenu/PopupMenu.d.ts +0 -1
- package/cjs/internal/PopupMenu/PopupMenu.js +1 -2
- package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
- package/cjs/lib/forwardRefAndName.d.ts +5 -0
- package/cjs/lib/forwardRefAndName.js +23 -0
- package/cjs/lib/forwardRefAndName.js.map +1 -0
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +66 -10
- package/components/Button/Button.md +42 -30
- package/components/Checkbox/Checkbox/Checkbox.js +4 -6
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +31 -14
- package/components/Checkbox/Checkbox.md +92 -51
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +6 -0
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +6 -0
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +6 -0
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +2 -2
- package/components/Hint/Hint/Hint.js +4 -0
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +38 -0
- package/components/Hint/Hint.md +40 -1
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +6 -2
- package/components/Link/Link/Link.js +5 -12
- package/components/Link/Link/Link.js.map +1 -1
- package/components/Link/Link.d.ts +28 -10
- package/components/Link/Link.md +73 -7
- package/components/Link/Link.mixins/Link.mixins.js +1 -1
- package/components/Link/Link.mixins/Link.mixins.js.map +1 -1
- package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +42 -7
- package/components/Radio/Radio/Radio.js +6 -5
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/Radio/Radio.d.ts +27 -11
- package/components/Radio/Radio.md +36 -12
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +4 -1
- package/components/SidePage/SidePage/SidePage.js +16 -28
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +5 -1
- package/components/SidePage/SidePage.styles/SidePage.styles.js +39 -30
- package/components/SidePage/SidePage.styles/SidePage.styles.js.map +1 -1
- package/components/SidePage/SidePage.styles.d.ts +5 -2
- package/components/SidePage/SidePageFooter/SidePageFooter.js +1 -0
- package/components/SidePage/SidePageFooter/SidePageFooter.js.map +1 -1
- package/components/SidePage/SidePageHeader/SidePageHeader.js +2 -1
- package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +2 -2
- package/components/Textarea/Textarea/Textarea.js +5 -3
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +6 -2
- package/components/Textarea/Textarea.styles/Textarea.styles.js +12 -9
- package/components/Textarea/Textarea.styles/Textarea.styles.js.map +1 -1
- package/components/Textarea/Textarea.styles.d.ts +1 -0
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +2 -2
- package/components/Token/Token/Token.js.map +1 -1
- package/components/Token/Token.d.ts +6 -0
- package/components/TokenInput/TokenInput/TokenInput.js +30 -19
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +6 -0
- package/components/TokenInput/TokenInputMenu/TokenInputMenu.js +2 -2
- package/components/TokenInput/TokenInputMenu/TokenInputMenu.js.map +1 -1
- package/components/Tooltip/Tooltip/Tooltip.js +2 -1
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +3 -2
- package/internal/Calendar/Calendar/Calendar.js +2 -1
- package/internal/Calendar/Calendar/Calendar.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +4 -2
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +5 -12
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
- package/internal/InputLikeText/InputLikeText/InputLikeText.js +1 -1
- package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
- package/internal/Popup/Popup/Popup.js +15 -6
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +13 -0
- package/internal/Popup/PopupHelper/PopupHelper.js +2 -1
- package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
- package/internal/PopupMenu/PopupMenu/PopupMenu.js +0 -1
- package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
- package/internal/PopupMenu/PopupMenu.d.ts +0 -1
- package/lib/forwardRefAndName/forwardRefAndName.js +11 -0
- package/lib/forwardRefAndName/forwardRefAndName.js.map +1 -0
- package/lib/forwardRefAndName/package.json +6 -0
- package/lib/forwardRefAndName.d.ts +5 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Calendar.tsx"],"names":["React","normalizeWheel","throttle","MAX_DATE","MAX_MONTH","MAX_YEAR","MIN_DATE","MIN_MONTH","MIN_YEAR","ThemeContext","Animation","isMobile","themeConfig","CalendarUtils","MonthViewModel","CalendarScrollEvents","Month","styles","create","isGreater","isLess","getTodayDate","date","Date","getDate","month","getMonth","year","getFullYear","Calendar","props","theme","wheelEndTimeout","root","animation","touchStartY","scrollToMonth","inProgress","finish","Promise","r","setTimeout","minDate","maxDate","currentMonth","state","months","diffInMonths","scrollTo","maxMonthsToAdd","MAX_MONTHS_TO_APPEND_ON_SCROLL","onEnd","setState","getMonths","scrollPosition","isYearChanges","Math","abs","monthsToPrependCount","min","monthsToPrepend","Array","from","length","_","index","yearChanges","isFirstInYear","isLastInYear","concat","getMonthsHeight","targetPosition","getHeight","monthsToAppendCount","monthsToAppend","slice","renderMain","positions","getMonthPositions","wrapperStyle","height","WRAPPER_HEIGHT","refRoot","wrapper","map","x","i","filter","top","isMonthVisible","renderMonth","element","addEventListener","handleTouchStart","throttledHandleTouchMove","handleWheel","passive","removeEventListener","handleMonthYearChange","executeAnimations","pixelY","calculateScrollPosition","scrollTarget","handleWheelEnd","animate","deltaY","applyDelta","emit","event","TouchEvent","clientY","targetTouches","handleTouchMove","changedTouches","WheelEvent","preventDefault","clearTimeout","window","scrollToNearestWeek","scrollDirection","trasholdHeight","MONTH_TITLE_OFFSET_HEIGHT","DAY_SIZE","amount","pos","scrollAmmount","scrollAmount","today","initialMonth","initialYear","touchStart","componentWillUnmount","cancel","render","value","onSelect","isHoliday","position","push","Component","__KONTUR_REACT_UI__","defaultProps","holidays"],"mappings":"qSAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,cAAP,MAA2B,iBAA3B;AACA,OAAOC,QAAP,MAAqB,iBAArB;;AAEA,SAASC,QAAT,EAAmBC,SAAnB,EAA8BC,QAA9B,EAAwCC,QAAxC,EAAkDC,SAAlD,EAA6DC,QAA7D,QAA6E,0BAA7E;;;AAGA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,SAAT,QAA0B,qBAA1B;AACA,SAASC,QAAT,QAAyB,kBAAzB;;AAEA,SAASC,WAAT,QAA4B,UAA5B;AACA,OAAO,KAAKC,aAAZ,MAA+B,iBAA/B;AACA,SAASC,cAAT,QAA+B,kBAA/B;AACA,OAAO,KAAKC,oBAAZ,MAAsC,wBAAtC;AACA,SAASC,KAAT,QAAsB,SAAtB;AACA,SAASC,MAAT,QAAuB,mBAAvB;AACA,SAA4BC,MAA5B,EAAoCC,SAApC,EAA+CC,MAA/C,QAA6D,qBAA7D;;;;;;;;;;;;;;;;;;;;;AAqBA,IAAMC,YAAY,GAAG,SAAfA,YAAe,GAAM;AACzB,MAAMC,IAAI,GAAG,IAAIC,IAAJ,EAAb;AACA,SAAO;AACLD,IAAAA,IAAI,EAAEA,IAAI,CAACE,OAAL,EADD;AAELC,IAAAA,KAAK,EAAEH,IAAI,CAACI,QAAL,EAFF;AAGLC,IAAAA,IAAI,EAAEL,IAAI,CAACM,WAAL,EAHD,EAAP;;AAKD,CAPD;;AASA,WAAaC,QAAb;;;;;;;;;;;;;;;;;;;;;;;AAuBE,oBAAYC,KAAZ,EAAkC;AAChC,wCAAMA,KAAN,UADgC,MAN1BC,KAM0B,gBAL1BC,eAK0B,gBAJ1BC,IAI0B,gBAH1BC,SAG0B,GAHdxB,SAAS,EAGK,OAF1ByB,WAE0B,GAFM,IAEN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuC3BC,IAAAA,aAvC2B,iGAuCX,iBAAOX,KAAP,EAAsBE,IAAtB;AACjB,sBAAKO,SAAL,CAAeG,UAAf,EADiB;AAEnB,sBAAKH,SAAL,CAAeI,MAAf;AACA;AAHmB,yCAIb,IAAIC,OAAJ,CAAY,UAACC,CAAD,UAAOC,UAAU,CAACD,CAAD,CAAjB,EAAZ,CAJa;;;AAOQ,sBAAKV,KAPb,EAObY,OAPa,eAObA,OAPa,EAOJC,OAPI,eAOJA,OAPI;;AASjBD,gBAAAA,OAAO,IAAIvB,SAAS,CAACuB,OAAD,EAAUxB,MAAM,CAAC,EAAD,EAAKO,KAAL,EAAYE,IAAZ,CAAhB,CATH;AAUnB,sBAAKS,aAAL,CAAmBM,OAAO,CAACjB,KAA3B,EAAkCiB,OAAO,CAACf,IAA1C,EAVmB;;;;AAcjBgB,gBAAAA,OAAO,IAAIvB,MAAM,CAACuB,OAAD,EAAUzB,MAAM,CAAC,CAAD,EAAIO,KAAJ,EAAWE,IAAX,CAAhB,CAdA;AAenB,sBAAKS,aAAL,CAAmBO,OAAO,CAAClB,KAA3B,EAAkCkB,OAAO,CAAChB,IAA1C,EAfmB;;;;AAmBfiB,gBAAAA,YAnBe,GAmBA,MAAKC,KAAL,CAAWC,MAAX,CAAkB,CAAlB,CAnBA;AAoBfC,gBAAAA,YApBe,GAoBAH,YAAY,CAACnB,KAAb,GAAqBmB,YAAY,CAACjB,IAAb,GAAoB,EAAzC,GAA8CF,KAA9C,GAAsDE,IAAI,GAAG,EApB7D;;AAsBjBoB,gBAAAA,YAAY,KAAK,CAtBA;AAuBnB,sBAAKC,QAAL,CAAc,CAAd,EAvBmB;;;;AA2BfC,gBAAAA,cA3Be,GA2BErC,WAAW,CAAC,MAAKmB,KAAN,CAAX,CAAwBmB,8BA3B1B;;AA6BfC,gBAAAA,KA7Be,GA6BP,SAARA,KAAQ;AACZ,0BAAKC,QAAL,CAAc;AACZN,sBAAAA,MAAM,EAAEjC,aAAa,CAACwC,SAAd,CAAwB5B,KAAxB,EAA+BE,IAA/B,CADI;AAEZ2B,sBAAAA,cAAc,EAAE,CAFJ,EAAd,CADY,GA7BO;;;AAmCfC,gBAAAA,aAnCe,GAmCC,SAAhBA,aAAgB,CAACV,KAAD;AACpBA,oBAAAA,KAAK,CAACC,MAAN,CAAa,CAAb,EAAgBnB,IAAhB,KAAyBA,IAAzB;AACA;AACA;AACA;AACA6B,oBAAAA,IAAI,CAACC,GAAL,CAASV,YAAT,IAAyB,CALL,GAnCD;;AA0CrB;AACA;AACA,oBAAIA,YAAY,GAAG,CAAnB,EAAsB;AACdW,kBAAAA,oBADc,GACSF,IAAI,CAACG,GAAL,CAASH,IAAI,CAACC,GAAL,CAASV,YAAT,IAAyB,CAAlC,EAAqCE,cAArC,CADT;AAEdW,kBAAAA,eAFc,GAEIC,KAAK,CAACC,IAAN,CAAW,EAAEC,MAAM,EAAEL,oBAAV,EAAX,EAA6C,UAACM,CAAD,EAAIC,KAAJ;AACnEnD,sBAAAA,cAAc,CAACI,MAAf,CAAsBO,KAAK,GAAGwC,KAA9B,EAAqCtC,IAArC,CADmE,GAA7C,CAFJ;;AAKpB,wBAAKyB,QAAL;AACE,4BAACP,KAAD,EAAW;AACT,wBAAMqB,WAAW,GAAGX,aAAa,CAACV,KAAD,CAAjC;AACA,wBAAIqB,WAAJ,EAAiB;AACf;AACA;AACArB,sBAAAA,KAAK,CAACC,MAAN,CAAa,CAAb,EAAgBqB,aAAhB,GAAgC,IAAhC;AACA,0BAAIP,eAAe,CAACG,MAApB,EAA4B;AAC1B;AACAH,wBAAAA,eAAe,CAACA,eAAe,CAACG,MAAhB,GAAyB,CAA1B,CAAf,CAA4CK,YAA5C,GAA2D,IAA3D;AACD;AACF;AACD,2BAAO;AACLtB,sBAAAA,MAAM,EAAEc,eAAe,CAACS,MAAhB,CAAuBxB,KAAK,CAACC,MAA7B,CADH;AAELQ,sBAAAA,cAAc,EAAE,CAACzC,aAAa,CAACyD,eAAd,CAA8BV,eAA9B,EAA+C,MAAK7B,KAApD,CAFZ,EAAP;;AAID,mBAhBH;AAiBE,8BAAM;AACJ,wBAAMwC,cAAc,GAAG,MAAK1B,KAAL,CAAWC,MAAX,CAAkB,CAAlB,EAAqB0B,SAArB,CAA+B,MAAKzC,KAApC,CAAvB;AACA,0BAAKiB,QAAL,CAAcuB,cAAd,EAA8BpB,KAA9B;AACD,mBApBH;;AAsBD;;AAED;AACA;AACA,oBAAIJ,YAAY,GAAG,CAAnB,EAAsB;AACd0B,kBAAAA,mBADc,GACQjB,IAAI,CAACG,GAAL,CAASH,IAAI,CAACC,GAAL,CAASV,YAAT,CAAT,EAAiCE,cAAjC,CADR;AAEdyB,kBAAAA,cAFc,GAEGb,KAAK,CAACC,IAAN,CAAW,EAAEC,MAAM,EAAEU,mBAAV,EAAX,EAA4C,UAACT,CAAD,EAAIC,KAAJ;AACjEnD,sBAAAA,cAAc,CAACI,MAAf,CAAsBO,KAAK,GAAGwC,KAAR,GAAgBQ,mBAAhB,GAAsC,CAA5D,EAA+D9C,IAA/D,CADiE,GAA5C,CAFH;;AAKpB,wBAAKyB,QAAL;AACE,4BAACP,KAAD,EAAW;AACT,wBAAIU,aAAa,CAACV,KAAD,CAAjB,EAA0B;AACxB;AACA;AACAA,sBAAAA,KAAK,CAACC,MAAN,CAAaD,KAAK,CAACC,MAAN,CAAaiB,MAAb,GAAsB,CAAnC,EAAsCK,YAAtC,GAAqD,IAArD;AACA;AACA,0BAAIM,cAAc,CAAC,CAAD,CAAlB,EAAuB;AACrBA,wBAAAA,cAAc,CAAC,CAAD,CAAd,CAAkBP,aAAlB,GAAkC,IAAlC;AACD;AACF;AACD,2BAAO,EAAErB,MAAM,EAAED,KAAK,CAACC,MAAN,CAAauB,MAAb,CAAoBK,cAApB,CAAV,EAAP;AACD,mBAZH;AAaE,8BAAM;AACJ,wBAAMH,cAAc,GAAG,CAAC,CAAD,GAAK1D,aAAa,CAACyD,eAAd,CAA8B,MAAKzB,KAAL,CAAWC,MAAX,CAAkB6B,KAAlB,CAAwB,CAAxB,EAA2B,CAAC,CAA5B,CAA9B,EAA8D,MAAK5C,KAAnE,CAA5B;AACA,0BAAKiB,QAAL,CAAcuB,cAAd,EAA8BpB,KAA9B;AACD,mBAhBH;;AAkBD,iBAlGoB,yDAvCW;;;AA4I1ByB,IAAAA,UA5I0B,GA4Ib,YAAM;AACzB,UAAMC,SAAS,GAAG,MAAKC,iBAAL,EAAlB;AACA,UAAMC,YAAY,GAAG,EAAEC,MAAM,EAAEpE,WAAW,CAAC,MAAKmB,KAAN,CAAX,CAAwBkD,cAAlC,EAArB;AACA;AACE,qCAAK,GAAG,EAAE,MAAKC,OAAf,EAAwB,SAAS,EAAEjE,MAAM,CAACgB,IAAP,CAAY,MAAKF,KAAjB,CAAnC;AACE,qCAAK,KAAK,EAAEgD,YAAZ,EAA0B,SAAS,EAAE9D,MAAM,CAACkE,OAAP,EAArC;AACG,cAAKtC,KAAL,CAAWC,MAAX;AACEsC,QAAAA,GADF,CACgC,UAACC,CAAD,EAAIC,CAAJ,UAAU,CAACT,SAAS,CAACS,CAAD,CAAV,EAAeD,CAAf,CAAV,EADhC;AAEEE,QAAAA,MAFF,CAES,sBAAEC,GAAF,YAAO/D,KAAP,mBAAkBZ,aAAa,CAAC4E,cAAd,CAA6BD,GAA7B,EAAkC/D,KAAlC,EAAyC,MAAKM,KAA9C,CAAlB,EAFT;AAGEqD,QAAAA,GAHF,CAGM,MAAKM,WAHX,gCADH,CADF,CADF;;;;AAUD,KAzJiC;;AA2J1BR,IAAAA,OA3J0B,GA2JhB,UAACS,OAAD,EAAiC;AACjD,UAAI,CAAC,MAAK1D,IAAN,IAAc0D,OAAlB,EAA2B;AACzB,YAAIhF,QAAJ,EAAc;AACZgF,UAAAA,OAAO,CAACC,gBAAR,CAAyB,YAAzB,EAAuC,MAAKC,gBAA5C;AACAF,UAAAA,OAAO,CAACC,gBAAR,CAAyB,WAAzB,EAAsC,MAAKE,wBAA3C;AACD,SAHD,MAGO;AACLH,UAAAA,OAAO,CAACC,gBAAR,CAAyB,OAAzB,EAAkC,MAAKG,WAAvC,EAAoD,EAAEC,OAAO,EAAE,KAAX,EAApD;AACD;AACF;AACD,UAAI,MAAK/D,IAAL,IAAa,CAAC0D,OAAlB,EAA2B;AACzB,YAAIhF,QAAJ,EAAc;AACZ,gBAAKsB,IAAL,CAAUgE,mBAAV,CAA8B,YAA9B,EAA4C,MAAKJ,gBAAjD;AACA,gBAAK5D,IAAL,CAAUgE,mBAAV,CAA8B,WAA9B,EAA2C,MAAKH,wBAAhD;AACD,SAHD,MAGO;AACL,gBAAK7D,IAAL,CAAUgE,mBAAV,CAA8B,OAA9B,EAAuC,MAAKF,WAA5C;AACD;AACF;AACD,YAAK9D,IAAL,GAAY0D,OAAZ;AACD,KA7KiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2M1BO,IAAAA,qBA3M0B,GA2MF,UAACzE,KAAD,EAAgBE,IAAhB,EAAiC;AAC/D,YAAKS,aAAL,CAAmBX,KAAnB,EAA0BE,IAA1B;AACD,KA7MiC;;AA+M1BwE,IAAAA,iBA/M0B,GA+MN,UAACC,MAAD,EAAoB;AAC9C,YAAKhD,QAAL,CAAc,iBAAgC,KAA7BN,MAA6B,SAA7BA,MAA6B,CAArBQ,cAAqB,SAArBA,cAAqB;AAC5C,YAAMiB,cAAc,GAAG1D,aAAa,CAACwF,uBAAd;AACrBvD,QAAAA,MADqB;AAErBQ,QAAAA,cAFqB;AAGrB8C,QAAAA,MAHqB;AAIrB,cAAKrE,KAJgB;AAKrBuB,QAAAA,cALF;AAMA,eAAO,EAAEgD,YAAY,EAAE/B,cAAhB,EAAP;AACD,OARD,EAQG,MAAKgC,cARR;;AAUA,YAAKrE,SAAL,CAAesE,OAAf,CAAuBJ,MAAvB,EAA+B,UAACK,MAAD;AAC7B;AACA,gBAAKrD,QAAL,CAAcvC,aAAa,CAAC6F,UAAd,CAAyBD,MAAzB,EAAiC,MAAK1E,KAAtC,CAAd,CAF6B,GAA/B;;;AAKAhB,MAAAA,oBAAoB,CAAC4F,IAArB;AACD,KAhOiC;;AAkO1Bd,IAAAA,gBAlO0B,GAkOP,UAACe,KAAD,EAAkB;AAC3C,UAAI,EAAEA,KAAK,YAAYC,UAAnB,CAAJ,EAAoC;AAClC;AACD;;AAED,UAAMC,OAAO,GAAGF,KAAK,CAACG,aAAN,CAAoB,CAApB,EAAuBD,OAAvC;AACA,YAAK3E,WAAL,GAAmB2E,OAAnB;AACD,KAzOiC;;AA2O1BE,IAAAA,eA3O0B,GA2OR,UAACJ,KAAD,EAAkB;AAC1C,UAAI,EAAEA,KAAK,YAAYC,UAAnB,CAAJ,EAAoC;AAClC;AACD,OAHyC;;AAKlCC,MAAAA,OALkC,GAKtBF,KAAK,CAACK,cAAN,CAAqB,CAArB,CALsB,CAKlCH,OALkC;;AAO1C,UAAML,MAAM,GAAG,CAAC,MAAKtE,WAAL,IAAoB,CAArB,IAA0B2E,OAAzC;AACA,YAAK3E,WAAL,GAAmB2E,OAAnB;;AAEA,YAAKX,iBAAL,CAAuBM,MAAvB;AACD,KAtPiC;;AAwP1BX,IAAAA,wBAxP0B,GAwPC5F,QAAQ,CAAC,MAAK8G,eAAN,EAAuB,EAAvB,CAxPT;;AA0P1BjB,IAAAA,WA1P0B,GA0PZ,UAACa,KAAD,EAAkB;AACtC,UAAI,EAAEA,KAAK,YAAYM,UAAnB,CAAJ,EAAoC;AAClC;AACD;AACDN,MAAAA,KAAK,CAACO,cAAN,GAJsC;AAKnBlH,MAAAA,cAAc,CAAC2G,KAAD,CALK,CAK9BR,MAL8B,mBAK9BA,MAL8B;;AAOtC,YAAKD,iBAAL,CAAuBC,MAAvB;AACD,KAlQiC;;AAoQ1BG,IAAAA,cApQ0B,GAoQT,YAAM;AAC7B,UAAI,MAAKvE,eAAT,EAA0B;AACxBoF,QAAAA,YAAY,CAAC,MAAKpF,eAAN,CAAZ;AACD;AACD,YAAKA,eAAL,GAAuBqF,MAAM,CAAC5E,UAAP,CAAkB,MAAK6E,mBAAvB,EAA4C,GAA5C,CAAvB;AACD,KAzQiC;AA0Q1BA,IAAAA,mBA1Q0B,GA0QJ,YAAM;AACQ,YAAKzE,KADb,CAC1ByD,YAD0B,eAC1BA,YAD0B,CACZiB,eADY,eACZA,eADY;;AAGlC,UAAMC,cAAc,GAAG5G,WAAW,CAAC,MAAKmB,KAAN,CAAX,CAAwB0F,yBAAxB,GAAoD7G,WAAW,CAAC,MAAKmB,KAAN,CAAX,CAAwB2F,QAAnG;;AAEA,UAAIpB,YAAY,GAAGkB,cAAnB,EAAmC;AACjC,YAAIjD,cAAc,GAAG,CAArB;AACA,YAAIgD,eAAe,GAAG,CAAtB,EAAyB;AACvBhD,UAAAA,cAAc,GAAGiD,cAAjB;AACD;;AAED,cAAKpE,QAAL,CAAc,EAAEkD,YAAY,EAAE/B,cAAhB,EAAd,EAAgD,YAAM;AACpD,cAAMoD,MAAM,GAAGrB,YAAY,GAAG/B,cAA9B;AACA,gBAAKrC,SAAL,CAAesE,OAAf,CAAuBmB,MAAvB,EAA+B,UAAClB,MAAD;AAC7B;AACA,oBAAKrD,QAAL,CAAcvC,aAAa,CAAC6F,UAAd,CAAyBD,MAAzB,EAAiC,MAAK1E,KAAtC,CAAd,CAF6B,GAA/B;;AAID,SAND;AAOD;AACF,KA7RiC;;AA+R1BiB,IAAAA,QA/R0B,GA+Rf,UAAC4E,GAAD,EAAczE,KAAd,EAAqC;AACtD,UAAM0E,aAAa,GAAGD,GAAG,GAAG,MAAK/E,KAAL,CAAWS,cAAvC;AACA,aAAO,MAAKwE,YAAL,CAAkBD,aAAlB,EAAiC1E,KAAjC,CAAP;AACD,KAlSiC;;AAoS1B2E,IAAAA,YApS0B,GAoSX,UAACD,aAAD,EAAwB1E,KAAxB,EAA+C;AACpE,aAAO,MAAKjB,SAAL,CAAesE,OAAf;AACLqB,MAAAA,aADK;AAEL,gBAACpB,MAAD;AACE,gBAAKrD,QAAL,CAAc,sBAAGE,cAAH,SAAGA,cAAH,QAAyB;AACrCA,cAAAA,cAAc,EAAEA,cAAc,GAAGmD,MADI,EAAzB,EAAd,CADF,GAFK;;AAMLtD,MAAAA,KANK,CAAP;;AAQD,KA7SiC,CAGhC,IAAM4E,KAAK,GAAG1G,YAAY,EAA1B,CAEA,IAAM2G,YAAY,GAAGlG,KAAK,CAACkG,YAAN,IAAsB,IAAtB,GAA6BD,KAAK,CAACtG,KAAnC,GAA2CK,KAAK,CAACkG,YAAtE,CACA,IAAMC,WAAW,GAAGnG,KAAK,CAACmG,WAAN,IAAqB,IAArB,GAA4BF,KAAK,CAACpG,IAAlC,GAAyCG,KAAK,CAACmG,WAAnE,CAEA,MAAKpF,KAAL,GAAa,EACXS,cAAc,EAAE,CADL,EAEXR,MAAM,EAAEjC,aAAa,CAACwC,SAAd,CAAwB2E,YAAxB,EAAsCC,WAAtC,CAFG,EAGXF,KAAK,EAALA,KAHW,EAIXR,eAAe,EAAE,CAJN,EAKXjB,YAAY,EAAE,CALH,EAMX4B,UAAU,EAAE,CAND,EAAb,CARgC,aAgBjC,CAvCH,uCAyCSC,oBAzCT,GAyCE,gCAA8B,CAC5B,IAAI,KAAKjG,SAAL,CAAeG,UAAf,EAAJ,EAAiC,CAC/B,KAAKH,SAAL,CAAekG,MAAf,GACD,CACF,CA7CH,QA+CSC,MA/CT,GA+CE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACtG,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAAC6C,UAAL,EAAP,CACD,CAJH,CADF,CAQD,CAxDH,CA0DE;AACF;AACA;AACA,KA7DA,QAsMUc,WAtMV,GAsME,4BAA4D,KAAvCF,GAAuC,YAAlC/D,KAAkC,YAC1D,oBACE,oBAAC,KAAD,IACE,GAAG,EAAEA,KAAK,CAACA,KAAN,GAAc,GAAd,GAAoBA,KAAK,CAACE,IADjC,EAEE,GAAG,EAAE6D,GAFP,EAGE,KAAK,EAAE/D,KAHT,EAIE,OAAO,EAAE,KAAKK,KAAL,CAAWa,OAJtB,EAKE,OAAO,EAAE,KAAKb,KAAL,CAAWY,OALtB,EAME,KAAK,EAAE,KAAKG,KAAL,CAAWkF,KANpB,EAOE,KAAK,EAAE,KAAKjG,KAAL,CAAWwG,KAPpB,EAQE,WAAW,EAAE,KAAKxG,KAAL,CAAWyG,QAR1B,EASE,iBAAiB,EAAE,KAAKrC,qBAT1B,EAUE,SAAS,EAAE,KAAKpE,KAAL,CAAW0G,SAVxB,GADF,CAcD,CArNH,QAuNU1D,iBAvNV,GAuNE,6BAA4B,oBACS,KAAKjC,KADd,CAClBS,cADkB,gBAClBA,cADkB,CACFR,MADE,gBACFA,MADE,CAG1B,IAAM+B,SAAS,GAAG,CAACvB,cAAc,GAAGR,MAAM,CAAC,CAAD,CAAN,CAAU0B,SAAV,CAAoB,KAAKzC,KAAzB,CAAlB,CAAlB,CACA,KAAK,IAAIuD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxC,MAAM,CAACiB,MAA3B,EAAmCuB,CAAC,EAApC,EAAwC,CACtC,IAAMmD,QAAQ,GAAG5D,SAAS,CAACS,CAAC,GAAG,CAAL,CAAT,GAAmBxC,MAAM,CAACwC,CAAC,GAAG,CAAL,CAAN,CAAcd,SAAd,CAAwB,KAAKzC,KAA7B,CAApC,CACA8C,SAAS,CAAC6D,IAAV,CAAeD,QAAf,EACD,CACD,OAAO5D,SAAP,CACD,CAhOH,mBAA8B7E,KAAK,CAAC2I,SAApC,EAAa9G,Q,CACG+G,mB,GAAsB,U,CADzB/G,Q,CAGGgH,Y,GAAe,EAC3BC,QAAQ,EAAE,EADiB,EAE3BpG,OAAO,EAAE,EACPf,IAAI,EAAEnB,QADC,EAEPiB,KAAK,EAAElB,SAFA,EAGPe,IAAI,EAAEhB,QAHC,EAFkB,EAO3BqC,OAAO,EAAE,EACPhB,IAAI,EAAEtB,QADC,EAEPoB,KAAK,EAAErB,SAFA,EAGPkB,IAAI,EAAEnB,QAHC,EAPkB,E","sourcesContent":["import React from 'react';\nimport normalizeWheel from 'normalize-wheel';\nimport throttle from 'lodash.throttle';\n\nimport { MAX_DATE, MAX_MONTH, MAX_YEAR, MIN_DATE, MIN_MONTH, MIN_YEAR } from '../../lib/date/constants';\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Animation } from '../../lib/animation';\nimport { isMobile } from '../../lib/client';\n\nimport { themeConfig } from './config';\nimport * as CalendarUtils from './CalendarUtils';\nimport { MonthViewModel } from './MonthViewModel';\nimport * as CalendarScrollEvents from './CalendarScrollEvents';\nimport { Month } from './Month';\nimport { styles } from './Calendar.styles';\nimport { CalendarDateShape, create, isGreater, isLess } from './CalendarDateShape';\n\nexport interface CalendarProps {\n initialMonth?: number;\n initialYear?: number;\n onSelect?: (date: CalendarDateShape) => void;\n value?: Nullable<CalendarDateShape>;\n maxDate?: CalendarDateShape;\n minDate?: CalendarDateShape;\n isHoliday?: (day: CalendarDateShape & { isWeekend: boolean }) => boolean;\n}\n\nexport interface CalendarState {\n scrollPosition: number;\n months: MonthViewModel[];\n today: CalendarDateShape;\n scrollDirection: number;\n scrollTarget: number;\n touchStart: number;\n}\n\nconst getTodayDate = () => {\n const date = new Date();\n return {\n date: date.getDate(),\n month: date.getMonth(),\n year: date.getFullYear(),\n };\n};\n\nexport class Calendar extends React.Component<CalendarProps, CalendarState> {\n public static __KONTUR_REACT_UI__ = 'Calendar';\n\n public static defaultProps = {\n holidays: [],\n minDate: {\n year: MIN_YEAR,\n month: MIN_MONTH,\n date: MIN_DATE,\n },\n maxDate: {\n year: MAX_YEAR,\n month: MAX_MONTH,\n date: MAX_DATE,\n },\n };\n\n private theme!: Theme;\n private wheelEndTimeout: Nullable<number>;\n private root: Nullable<HTMLElement>;\n private animation = Animation();\n private touchStartY: Nullable<number> = null;\n\n constructor(props: CalendarProps) {\n super(props);\n\n const today = getTodayDate();\n\n const initialMonth = props.initialMonth == null ? today.month : props.initialMonth;\n const initialYear = props.initialYear == null ? today.year : props.initialYear;\n\n this.state = {\n scrollPosition: 0,\n months: CalendarUtils.getMonths(initialMonth, initialYear),\n today,\n scrollDirection: 1,\n scrollTarget: 0,\n touchStart: 0,\n };\n }\n\n public componentWillUnmount() {\n if (this.animation.inProgress()) {\n this.animation.cancel();\n }\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 /**\n * Scrolls calendar to given date\n * @public\n */\n public scrollToMonth = async (month: number, year: number) => {\n if (this.animation.inProgress()) {\n this.animation.finish();\n // FIXME: Dirty hack to await batched updates\n await new Promise((r) => setTimeout(r));\n }\n\n const { minDate, maxDate } = this.props;\n\n if (minDate && isGreater(minDate, create(32, month, year))) {\n this.scrollToMonth(minDate.month, minDate.year);\n return;\n }\n\n if (maxDate && isLess(maxDate, create(0, month, year))) {\n this.scrollToMonth(maxDate.month, maxDate.year);\n return;\n }\n\n const currentMonth = this.state.months[1];\n const diffInMonths = currentMonth.month + currentMonth.year * 12 - month - year * 12;\n\n if (diffInMonths === 0) {\n this.scrollTo(0);\n return;\n }\n\n const maxMonthsToAdd = themeConfig(this.theme).MAX_MONTHS_TO_APPEND_ON_SCROLL;\n\n const onEnd = () =>\n this.setState({\n months: CalendarUtils.getMonths(month, year),\n scrollPosition: 0,\n });\n\n const isYearChanges = (state: CalendarState) =>\n state.months[1].year !== year &&\n // if diff in months is 2 or less,\n // either year is not changing either months already\n // have right isFirstInYear/isLastInYear flags\n Math.abs(diffInMonths) > 2;\n\n // If scrolling upwards, prepend maximum maxMonthsToAdd months\n // and scroll to the first month\n if (diffInMonths > 0) {\n const monthsToPrependCount = Math.min(Math.abs(diffInMonths) - 1, maxMonthsToAdd);\n const monthsToPrepend = Array.from({ length: monthsToPrependCount }, (_, index) =>\n MonthViewModel.create(month + index, year),\n );\n this.setState(\n (state) => {\n const yearChanges = isYearChanges(state);\n if (yearChanges) {\n // Mutating here can lead to some unexpected bugs\n // but we couldn't find any yet\n state.months[0].isFirstInYear = true;\n if (monthsToPrepend.length) {\n // Mutating item here is safe as it was just created\n monthsToPrepend[monthsToPrepend.length - 1].isLastInYear = true;\n }\n }\n return {\n months: monthsToPrepend.concat(state.months),\n scrollPosition: -CalendarUtils.getMonthsHeight(monthsToPrepend, this.theme),\n };\n },\n () => {\n const targetPosition = this.state.months[0].getHeight(this.theme);\n this.scrollTo(targetPosition, onEnd);\n },\n );\n }\n\n // If scrolling downwards, append maximum maxMonthsToAdd months\n // and scroll to the last but one month\n if (diffInMonths < 0) {\n const monthsToAppendCount = Math.min(Math.abs(diffInMonths), maxMonthsToAdd);\n const monthsToAppend = Array.from({ length: monthsToAppendCount }, (_, index) =>\n MonthViewModel.create(month + index - monthsToAppendCount + 2, year),\n );\n this.setState(\n (state) => {\n if (isYearChanges(state)) {\n // Mutating here can lead to some unexpected bugs\n // but we couldn't find any yet\n state.months[state.months.length - 1].isLastInYear = true;\n // Mutating item here is safe as it was just created\n if (monthsToAppend[0]) {\n monthsToAppend[0].isFirstInYear = true;\n }\n }\n return { months: state.months.concat(monthsToAppend) };\n },\n () => {\n const targetPosition = -1 * CalendarUtils.getMonthsHeight(this.state.months.slice(1, -2), this.theme);\n this.scrollTo(targetPosition, onEnd);\n },\n );\n }\n };\n\n private renderMain = () => {\n const positions = this.getMonthPositions();\n const wrapperStyle = { height: themeConfig(this.theme).WRAPPER_HEIGHT };\n return (\n <div ref={this.refRoot} className={styles.root(this.theme)}>\n <div style={wrapperStyle} className={styles.wrapper()}>\n {this.state.months\n .map<[number, MonthViewModel]>((x, i) => [positions[i], x])\n .filter(([top, month]) => CalendarUtils.isMonthVisible(top, month, this.theme))\n .map(this.renderMonth, this)}\n </div>\n </div>\n );\n };\n\n private refRoot = (element: HTMLElement | null) => {\n if (!this.root && element) {\n if (isMobile) {\n element.addEventListener('touchstart', this.handleTouchStart);\n element.addEventListener('touchmove', this.throttledHandleTouchMove);\n } else {\n element.addEventListener('wheel', this.handleWheel, { passive: false });\n }\n }\n if (this.root && !element) {\n if (isMobile) {\n this.root.removeEventListener('touchstart', this.handleTouchStart);\n this.root.removeEventListener('touchmove', this.throttledHandleTouchMove);\n } else {\n this.root.removeEventListener('wheel', this.handleWheel);\n }\n }\n this.root = element;\n };\n\n private renderMonth([top, month]: [number, MonthViewModel]) {\n return (\n <Month\n key={month.month + '-' + month.year}\n top={top}\n month={month}\n maxDate={this.props.maxDate}\n minDate={this.props.minDate}\n today={this.state.today}\n value={this.props.value}\n onDateClick={this.props.onSelect}\n onMonthYearChange={this.handleMonthYearChange}\n isHoliday={this.props.isHoliday}\n />\n );\n }\n\n private getMonthPositions() {\n const { scrollPosition, months } = this.state;\n\n const positions = [scrollPosition - months[0].getHeight(this.theme)];\n for (let i = 1; i < months.length; i++) {\n const position = positions[i - 1] + months[i - 1].getHeight(this.theme);\n positions.push(position);\n }\n return positions;\n }\n\n private handleMonthYearChange = (month: number, year: number) => {\n this.scrollToMonth(month, year);\n };\n\n private executeAnimations = (pixelY: number) => {\n this.setState(({ months, scrollPosition }) => {\n const targetPosition = CalendarUtils.calculateScrollPosition(\n months,\n scrollPosition,\n pixelY,\n this.theme,\n ).scrollPosition;\n return { scrollTarget: targetPosition };\n }, this.handleWheelEnd);\n\n this.animation.animate(pixelY, (deltaY) =>\n // FIXME: Typescript not resolving setState cb type\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\n );\n\n CalendarScrollEvents.emit();\n };\n\n private handleTouchStart = (event: Event) => {\n if (!(event instanceof TouchEvent)) {\n return;\n }\n\n const clientY = event.targetTouches[0].clientY;\n this.touchStartY = clientY;\n };\n\n private handleTouchMove = (event: Event) => {\n if (!(event instanceof TouchEvent)) {\n return;\n }\n\n const { clientY } = event.changedTouches[0];\n\n const deltaY = (this.touchStartY || 0) - clientY;\n this.touchStartY = clientY;\n\n this.executeAnimations(deltaY);\n };\n\n private throttledHandleTouchMove = throttle(this.handleTouchMove, 10);\n\n private handleWheel = (event: Event) => {\n if (!(event instanceof WheelEvent)) {\n return;\n }\n event.preventDefault();\n const { pixelY } = normalizeWheel(event);\n\n this.executeAnimations(pixelY);\n };\n\n private handleWheelEnd = () => {\n if (this.wheelEndTimeout) {\n clearTimeout(this.wheelEndTimeout);\n }\n this.wheelEndTimeout = window.setTimeout(this.scrollToNearestWeek, 300);\n };\n private scrollToNearestWeek = () => {\n const { scrollTarget, scrollDirection } = this.state;\n\n const trasholdHeight = themeConfig(this.theme).MONTH_TITLE_OFFSET_HEIGHT + themeConfig(this.theme).DAY_SIZE;\n\n if (scrollTarget < trasholdHeight) {\n let targetPosition = 0;\n if (scrollDirection < 0) {\n targetPosition = trasholdHeight;\n }\n\n this.setState({ scrollTarget: targetPosition }, () => {\n const amount = scrollTarget - targetPosition;\n this.animation.animate(amount, (deltaY) =>\n // FIXME: Typescript not resolving setState cb type\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\n );\n });\n }\n };\n\n private scrollTo = (pos: number, onEnd?: () => void) => {\n const scrollAmmount = pos - this.state.scrollPosition;\n return this.scrollAmount(scrollAmmount, onEnd);\n };\n\n private scrollAmount = (scrollAmmount: number, onEnd?: () => void) => {\n return this.animation.animate(\n scrollAmmount,\n (deltaY) =>\n this.setState(({ scrollPosition }) => ({\n scrollPosition: scrollPosition + deltaY,\n })),\n onEnd,\n );\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Calendar.tsx"],"names":["React","normalizeWheel","throttle","MAX_DATE","MAX_MONTH","MAX_YEAR","MIN_DATE","MIN_MONTH","MIN_YEAR","ThemeContext","Animation","isMobile","themeConfig","CalendarUtils","MonthViewModel","CalendarScrollEvents","Month","styles","create","isGreater","isLess","getTodayDate","date","Date","getDate","month","getMonth","year","getFullYear","Calendar","props","theme","wheelEndTimeout","root","animation","touchStartY","scrollToMonth","inProgress","finish","Promise","r","setTimeout","minDate","maxDate","currentMonth","state","months","diffInMonths","scrollTo","maxMonthsToAdd","MAX_MONTHS_TO_APPEND_ON_SCROLL","onEnd","setState","getMonths","scrollPosition","isYearChanges","Math","abs","monthsToPrependCount","min","monthsToPrepend","Array","from","length","_","index","yearChanges","isFirstInYear","isLastInYear","concat","getMonthsHeight","targetPosition","getHeight","monthsToAppendCount","monthsToAppend","slice","renderMain","positions","getMonthPositions","wrapperStyle","height","WRAPPER_HEIGHT","refRoot","wrapper","map","x","i","filter","top","isMonthVisible","renderMonth","element","addEventListener","handleTouchStart","throttledHandleTouchMove","handleWheel","passive","removeEventListener","handleMonthYearChange","executeAnimations","pixelY","calculateScrollPosition","scrollTarget","handleWheelEnd","animate","deltaY","applyDelta","emit","event","TouchEvent","clientY","targetTouches","handleTouchMove","changedTouches","WheelEvent","preventDefault","clearTimeout","window","scrollToNearestWeek","scrollDirection","trasholdHeight","MONTH_TITLE_OFFSET_HEIGHT","DAY_SIZE","amount","pos","scrollAmmount","scrollAmount","today","initialMonth","initialYear","touchStart","componentWillUnmount","cancel","render","value","onSelect","isHoliday","position","push","Component","__KONTUR_REACT_UI__","defaultProps","holidays"],"mappings":"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","sourcesContent":["import React from 'react';\nimport normalizeWheel from 'normalize-wheel';\nimport throttle from 'lodash.throttle';\n\nimport { MAX_DATE, MAX_MONTH, MAX_YEAR, MIN_DATE, MIN_MONTH, MIN_YEAR } from '../../lib/date/constants';\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Animation } from '../../lib/animation';\nimport { isMobile } from '../../lib/client';\n\nimport { themeConfig } from './config';\nimport * as CalendarUtils from './CalendarUtils';\nimport { MonthViewModel } from './MonthViewModel';\nimport * as CalendarScrollEvents from './CalendarScrollEvents';\nimport { Month } from './Month';\nimport { styles } from './Calendar.styles';\nimport { CalendarDateShape, create, isGreater, isLess } from './CalendarDateShape';\n\nexport interface CalendarProps {\n initialMonth?: number;\n initialYear?: number;\n onSelect?: (date: CalendarDateShape) => void;\n value?: Nullable<CalendarDateShape>;\n maxDate?: CalendarDateShape;\n minDate?: CalendarDateShape;\n isHoliday?: (day: CalendarDateShape & { isWeekend: boolean }) => boolean;\n}\n\nexport interface CalendarState {\n scrollPosition: number;\n months: MonthViewModel[];\n today: CalendarDateShape;\n scrollDirection: number;\n scrollTarget: number;\n touchStart: number;\n}\n\nconst getTodayDate = () => {\n const date = new Date();\n return {\n date: date.getDate(),\n month: date.getMonth(),\n year: date.getFullYear(),\n };\n};\n\nexport class Calendar extends React.Component<CalendarProps, CalendarState> {\n public static __KONTUR_REACT_UI__ = 'Calendar';\n\n public static defaultProps = {\n holidays: [],\n minDate: {\n year: MIN_YEAR,\n month: MIN_MONTH,\n date: MIN_DATE,\n },\n maxDate: {\n year: MAX_YEAR,\n month: MAX_MONTH,\n date: MAX_DATE,\n },\n };\n\n private theme!: Theme;\n private wheelEndTimeout: Nullable<number>;\n private root: Nullable<HTMLElement>;\n private animation = Animation();\n private touchStartY: Nullable<number> = null;\n\n constructor(props: CalendarProps) {\n super(props);\n\n const today = getTodayDate();\n\n const initialMonth = props.initialMonth == null ? today.month : props.initialMonth;\n const initialYear = props.initialYear == null ? today.year : props.initialYear;\n\n this.state = {\n scrollPosition: 0,\n months: CalendarUtils.getMonths(initialMonth, initialYear),\n today,\n scrollDirection: 1,\n scrollTarget: 0,\n touchStart: 0,\n };\n }\n\n public componentWillUnmount() {\n if (this.animation.inProgress()) {\n this.animation.cancel();\n }\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 /**\n * Scrolls calendar to given date\n * @public\n */\n public scrollToMonth = async (month: number, year: number) => {\n if (this.animation.inProgress()) {\n this.animation.finish();\n // FIXME: Dirty hack to await batched updates\n await new Promise((r) => setTimeout(r));\n }\n\n const { minDate, maxDate } = this.props;\n\n if (minDate && isGreater(minDate, create(32, month, year))) {\n this.scrollToMonth(minDate.month, minDate.year);\n return;\n }\n\n if (maxDate && isLess(maxDate, create(0, month, year))) {\n this.scrollToMonth(maxDate.month, maxDate.year);\n return;\n }\n\n const currentMonth = this.state.months[1];\n const diffInMonths = currentMonth.month + currentMonth.year * 12 - month - year * 12;\n\n if (diffInMonths === 0) {\n this.scrollTo(0);\n return;\n }\n\n const maxMonthsToAdd = themeConfig(this.theme).MAX_MONTHS_TO_APPEND_ON_SCROLL;\n\n const onEnd = () =>\n this.setState({\n months: CalendarUtils.getMonths(month, year),\n scrollPosition: 0,\n });\n\n const isYearChanges = (state: CalendarState) =>\n state.months[1].year !== year &&\n // if diff in months is 2 or less,\n // either year is not changing either months already\n // have right isFirstInYear/isLastInYear flags\n Math.abs(diffInMonths) > 2;\n\n // If scrolling upwards, prepend maximum maxMonthsToAdd months\n // and scroll to the first month\n if (diffInMonths > 0) {\n const monthsToPrependCount = Math.min(Math.abs(diffInMonths) - 1, maxMonthsToAdd);\n const monthsToPrepend = Array.from({ length: monthsToPrependCount }, (_, index) =>\n MonthViewModel.create(month + index, year),\n );\n this.setState(\n (state) => {\n const yearChanges = isYearChanges(state);\n if (yearChanges) {\n // Mutating here can lead to some unexpected bugs\n // but we couldn't find any yet\n state.months[0].isFirstInYear = true;\n if (monthsToPrepend.length) {\n // Mutating item here is safe as it was just created\n monthsToPrepend[monthsToPrepend.length - 1].isLastInYear = true;\n }\n }\n return {\n months: monthsToPrepend.concat(state.months),\n scrollPosition: -CalendarUtils.getMonthsHeight(monthsToPrepend, this.theme),\n };\n },\n () => {\n const targetPosition = this.state.months[0].getHeight(this.theme);\n this.scrollTo(targetPosition, onEnd);\n },\n );\n }\n\n // If scrolling downwards, append maximum maxMonthsToAdd months\n // and scroll to the last but one month\n if (diffInMonths < 0) {\n const monthsToAppendCount = Math.min(Math.abs(diffInMonths), maxMonthsToAdd);\n const monthsToAppend = Array.from({ length: monthsToAppendCount }, (_, index) =>\n MonthViewModel.create(month + index - monthsToAppendCount + 2, year),\n );\n this.setState(\n (state) => {\n if (isYearChanges(state)) {\n // Mutating here can lead to some unexpected bugs\n // but we couldn't find any yet\n state.months[state.months.length - 1].isLastInYear = true;\n // Mutating item here is safe as it was just created\n if (monthsToAppend[0]) {\n monthsToAppend[0].isFirstInYear = true;\n }\n }\n return { months: state.months.concat(monthsToAppend) };\n },\n () => {\n const targetPosition = -1 * CalendarUtils.getMonthsHeight(this.state.months.slice(1, -2), this.theme);\n this.scrollTo(targetPosition, onEnd);\n },\n );\n }\n };\n\n private renderMain = () => {\n const positions = this.getMonthPositions();\n const wrapperStyle = { height: themeConfig(this.theme).WRAPPER_HEIGHT };\n return (\n <div ref={this.refRoot} className={styles.root(this.theme)} data-tid=\"Calendar\">\n <div style={wrapperStyle} className={styles.wrapper()}>\n {this.state.months\n .map<[number, MonthViewModel]>((x, i) => [positions[i], x])\n .filter(([top, month]) => CalendarUtils.isMonthVisible(top, month, this.theme))\n .map(this.renderMonth, this)}\n </div>\n </div>\n );\n };\n\n private refRoot = (element: HTMLElement | null) => {\n if (!this.root && element) {\n if (isMobile) {\n element.addEventListener('touchstart', this.handleTouchStart);\n element.addEventListener('touchmove', this.throttledHandleTouchMove);\n } else {\n element.addEventListener('wheel', this.handleWheel, { passive: false });\n }\n }\n if (this.root && !element) {\n if (isMobile) {\n this.root.removeEventListener('touchstart', this.handleTouchStart);\n this.root.removeEventListener('touchmove', this.throttledHandleTouchMove);\n } else {\n this.root.removeEventListener('wheel', this.handleWheel);\n }\n }\n this.root = element;\n };\n\n private renderMonth([top, month]: [number, MonthViewModel]) {\n return (\n <Month\n key={month.month + '-' + month.year}\n top={top}\n month={month}\n maxDate={this.props.maxDate}\n minDate={this.props.minDate}\n today={this.state.today}\n value={this.props.value}\n onDateClick={this.props.onSelect}\n onMonthYearChange={this.handleMonthYearChange}\n isHoliday={this.props.isHoliday}\n />\n );\n }\n\n private getMonthPositions() {\n const { scrollPosition, months } = this.state;\n\n const positions = [scrollPosition - months[0].getHeight(this.theme)];\n for (let i = 1; i < months.length; i++) {\n const position = positions[i - 1] + months[i - 1].getHeight(this.theme);\n positions.push(position);\n }\n return positions;\n }\n\n private handleMonthYearChange = (month: number, year: number) => {\n this.scrollToMonth(month, year);\n };\n\n private executeAnimations = (pixelY: number) => {\n this.setState(({ months, scrollPosition }) => {\n const targetPosition = CalendarUtils.calculateScrollPosition(\n months,\n scrollPosition,\n pixelY,\n this.theme,\n ).scrollPosition;\n return { scrollTarget: targetPosition };\n }, this.handleWheelEnd);\n\n this.animation.animate(pixelY, (deltaY) =>\n // FIXME: Typescript not resolving setState cb type\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\n );\n\n CalendarScrollEvents.emit();\n };\n\n private handleTouchStart = (event: Event) => {\n if (!(event instanceof TouchEvent)) {\n return;\n }\n\n const clientY = event.targetTouches[0].clientY;\n this.touchStartY = clientY;\n };\n\n private handleTouchMove = (event: Event) => {\n if (!(event instanceof TouchEvent)) {\n return;\n }\n\n const { clientY } = event.changedTouches[0];\n\n const deltaY = (this.touchStartY || 0) - clientY;\n this.touchStartY = clientY;\n\n this.executeAnimations(deltaY);\n };\n\n private throttledHandleTouchMove = throttle(this.handleTouchMove, 10);\n\n private handleWheel = (event: Event) => {\n if (!(event instanceof WheelEvent)) {\n return;\n }\n event.preventDefault();\n const { pixelY } = normalizeWheel(event);\n\n this.executeAnimations(pixelY);\n };\n\n private handleWheelEnd = () => {\n if (this.wheelEndTimeout) {\n clearTimeout(this.wheelEndTimeout);\n }\n this.wheelEndTimeout = window.setTimeout(this.scrollToNearestWeek, 300);\n };\n private scrollToNearestWeek = () => {\n const { scrollTarget, scrollDirection } = this.state;\n\n const trasholdHeight = themeConfig(this.theme).MONTH_TITLE_OFFSET_HEIGHT + themeConfig(this.theme).DAY_SIZE;\n\n if (scrollTarget < trasholdHeight) {\n let targetPosition = 0;\n if (scrollDirection < 0) {\n targetPosition = trasholdHeight;\n }\n\n this.setState({ scrollTarget: targetPosition }, () => {\n const amount = scrollTarget - targetPosition;\n this.animation.animate(amount, (deltaY) =>\n // FIXME: Typescript not resolving setState cb type\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\n );\n });\n }\n };\n\n private scrollTo = (pos: number, onEnd?: () => void) => {\n const scrollAmmount = pos - this.state.scrollPosition;\n return this.scrollAmount(scrollAmmount, onEnd);\n };\n\n private scrollAmount = (scrollAmmount: number, onEnd?: () => void) => {\n return this.animation.animate(\n scrollAmmount,\n (deltaY) =>\n this.setState(({ scrollPosition }) => ({\n scrollPosition: scrollPosition + deltaY,\n })),\n onEnd,\n );\n };\n}\n"]}
|
|
@@ -90,7 +90,8 @@ export var ComboBoxMenu = (_dec = locale('ComboBox', CustomComboBoxLocaleHelper)
|
|
|
90
90
|
|
|
91
91
|
if (loading && (!items || !items.length)) {
|
|
92
92
|
return /*#__PURE__*/React.createElement(Menu, {
|
|
93
|
-
ref: refMenu
|
|
93
|
+
ref: refMenu,
|
|
94
|
+
"data-tid": "ComboBoxMenu__loading"
|
|
94
95
|
}, /*#__PURE__*/React.createElement(MenuItem, {
|
|
95
96
|
disabled: true
|
|
96
97
|
}, /*#__PURE__*/React.createElement(Spinner, {
|
|
@@ -102,7 +103,8 @@ export var ComboBoxMenu = (_dec = locale('ComboBox', CustomComboBoxLocaleHelper)
|
|
|
102
103
|
if (items === null && requestStatus === ComboBoxRequestStatus.Failed) {
|
|
103
104
|
return /*#__PURE__*/React.createElement(Menu, {
|
|
104
105
|
ref: refMenu,
|
|
105
|
-
maxHeight: maxMenuHeight
|
|
106
|
+
maxHeight: maxMenuHeight,
|
|
107
|
+
"data-tid": "ComboBoxMenu__failed"
|
|
106
108
|
}, /*#__PURE__*/React.createElement(MenuItem, {
|
|
107
109
|
disabled: true,
|
|
108
110
|
key: "message"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ComboBoxMenu.tsx"],"names":["React","Component","locale","isReactUINode","Menu","MenuItem","Spinner","MenuSeparator","ComboBoxRequestStatus","CustomComboBoxLocaleHelper","ComboBoxMenu","renderItem","item","index","props","onValueChange","isValidElement","element","Object","assign","key","onClick","cloneElement","state","render","opened","items","totalCount","loading","refMenu","renderNotFound","notFound","renderTotalCount","maxMenuHeight","requestStatus","errorNetworkButton","errorNetworkMessage","renderAddButton","length","Failed","maxWidth","whiteSpace","repeatRequest","notFoundValue","total","renderedItems","map","countItems","filter","fontSize","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\n\nimport { locale } from '../../lib/locale/decorators';\nimport { isReactUINode } from '../../lib/utils';\nimport { Menu } from '../Menu';\nimport { MenuItem, MenuItemState } from '../../components/MenuItem';\nimport { Spinner } from '../../components/Spinner';\nimport { Nullable } from '../../typings/utility-types';\nimport { MenuSeparator } from '../../components/MenuSeparator';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { ComboBoxLocale, CustomComboBoxLocaleHelper } from './locale';\n\nexport interface ComboBoxMenuProps<T> {\n opened?: boolean;\n items?: Nullable<T[]>;\n totalCount?: number;\n loading?: boolean;\n maxMenuHeight?: number | string;\n refMenu?: (menu: Nullable<Menu>) => void;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state: MenuItemState) => React.ReactNode;\n onValueChange: (value: T) => any;\n renderAddButton?: () => React.ReactNode;\n caption?: React.ReactNode;\n repeatRequest?: () => void;\n requestStatus?: ComboBoxRequestStatus;\n}\n\n@locale('ComboBox', CustomComboBoxLocaleHelper)\nexport class ComboBoxMenu<T> extends Component<ComboBoxMenuProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxMenu';\n\n public static defaultProps = {\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n };\n\n private readonly locale!: ComboBoxLocale;\n\n public render() {\n const {\n opened,\n items,\n totalCount,\n loading,\n refMenu,\n renderNotFound = () => notFound,\n renderTotalCount,\n maxMenuHeight,\n requestStatus,\n } = this.props;\n\n const { notFound, errorNetworkButton, errorNetworkMessage } = this.locale;\n\n if (!opened) {\n return null;\n }\n\n let renderAddButton = null;\n if (this.props.renderAddButton) {\n renderAddButton = this.props.renderAddButton();\n }\n\n if (loading && (!items || !items.length)) {\n return (\n <Menu ref={refMenu}>\n <MenuItem disabled>\n <Spinner type=\"mini\" dimmed />\n </MenuItem>\n </Menu>\n );\n }\n\n if (items === null && requestStatus === ComboBoxRequestStatus.Failed) {\n return (\n <Menu ref={refMenu} maxHeight={maxMenuHeight}>\n <MenuItem disabled key=\"message\">\n <div style={{ maxWidth: 300, whiteSpace: 'normal' }}>{errorNetworkMessage}</div>\n </MenuItem>\n <MenuItem link onClick={this.props.repeatRequest} key=\"retry\">\n {errorNetworkButton}\n </MenuItem>\n </Menu>\n );\n }\n\n if ((items == null || items.length === 0) && renderNotFound) {\n const notFoundValue = renderNotFound();\n if (renderAddButton) return <Menu ref={refMenu}>{renderAddButton}</Menu>;\n if (notFoundValue)\n return (\n <Menu ref={refMenu}>\n <MenuItem data-tid=\"ComboBoxMenu__notFound\" disabled>\n {notFoundValue}\n </MenuItem>\n </Menu>\n );\n return null;\n }\n\n let total = null;\n const renderedItems = items && items.map(this.renderItem);\n const countItems = renderedItems?.filter((item) => isReactUINode('MenuItem', item)).length;\n\n if (countItems && renderTotalCount && totalCount && countItems < totalCount) {\n total = (\n <MenuItem disabled key=\"total\">\n <div style={{ fontSize: 12 }}>{renderTotalCount(countItems, totalCount)}</div>\n </MenuItem>\n );\n }\n\n return (\n <Menu data-tid=\"ComboBoxMenu__items\" ref={refMenu} maxHeight={maxMenuHeight}>\n {renderedItems}\n {total}\n {renderAddButton && [<MenuSeparator key=\"separator\" />, renderAddButton]}\n </Menu>\n );\n }\n\n private renderItem = (item: T, index: number): React.ReactNode => {\n // NOTE this is undesireable feature, better\n // to remove it from further versions\n const { renderItem, onValueChange } = this.props;\n if (typeof item === 'function' || React.isValidElement(item)) {\n // @ts-ignore\n const element = typeof item === 'function' ? item() : item;\n const props = Object.assign(\n {\n key: index,\n onClick: () => onValueChange(element.props),\n },\n element.props,\n );\n return React.cloneElement(element, props);\n }\n\n return (\n <MenuItem data-tid=\"ComboBoxMenu__item\" onClick={() => onValueChange(item)} key={index}>\n {(state) => renderItem(item, state)}\n </MenuItem>\n );\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["ComboBoxMenu.tsx"],"names":["React","Component","locale","isReactUINode","Menu","MenuItem","Spinner","MenuSeparator","ComboBoxRequestStatus","CustomComboBoxLocaleHelper","ComboBoxMenu","renderItem","item","index","props","onValueChange","isValidElement","element","Object","assign","key","onClick","cloneElement","state","render","opened","items","totalCount","loading","refMenu","renderNotFound","notFound","renderTotalCount","maxMenuHeight","requestStatus","errorNetworkButton","errorNetworkMessage","renderAddButton","length","Failed","maxWidth","whiteSpace","repeatRequest","notFoundValue","total","renderedItems","map","countItems","filter","fontSize","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\n\nimport { locale } from '../../lib/locale/decorators';\nimport { isReactUINode } from '../../lib/utils';\nimport { Menu } from '../Menu';\nimport { MenuItem, MenuItemState } from '../../components/MenuItem';\nimport { Spinner } from '../../components/Spinner';\nimport { Nullable } from '../../typings/utility-types';\nimport { MenuSeparator } from '../../components/MenuSeparator';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { ComboBoxLocale, CustomComboBoxLocaleHelper } from './locale';\n\nexport interface ComboBoxMenuProps<T> {\n opened?: boolean;\n items?: Nullable<T[]>;\n totalCount?: number;\n loading?: boolean;\n maxMenuHeight?: number | string;\n refMenu?: (menu: Nullable<Menu>) => void;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state: MenuItemState) => React.ReactNode;\n onValueChange: (value: T) => any;\n renderAddButton?: () => React.ReactNode;\n caption?: React.ReactNode;\n repeatRequest?: () => void;\n requestStatus?: ComboBoxRequestStatus;\n}\n\n@locale('ComboBox', CustomComboBoxLocaleHelper)\nexport class ComboBoxMenu<T> extends Component<ComboBoxMenuProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxMenu';\n\n public static defaultProps = {\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n };\n\n private readonly locale!: ComboBoxLocale;\n\n public render() {\n const {\n opened,\n items,\n totalCount,\n loading,\n refMenu,\n renderNotFound = () => notFound,\n renderTotalCount,\n maxMenuHeight,\n requestStatus,\n } = this.props;\n\n const { notFound, errorNetworkButton, errorNetworkMessage } = this.locale;\n\n if (!opened) {\n return null;\n }\n\n let renderAddButton = null;\n if (this.props.renderAddButton) {\n renderAddButton = this.props.renderAddButton();\n }\n\n if (loading && (!items || !items.length)) {\n return (\n <Menu ref={refMenu} data-tid=\"ComboBoxMenu__loading\">\n <MenuItem disabled>\n <Spinner type=\"mini\" dimmed />\n </MenuItem>\n </Menu>\n );\n }\n\n if (items === null && requestStatus === ComboBoxRequestStatus.Failed) {\n return (\n <Menu ref={refMenu} maxHeight={maxMenuHeight} data-tid=\"ComboBoxMenu__failed\">\n <MenuItem disabled key=\"message\">\n <div style={{ maxWidth: 300, whiteSpace: 'normal' }}>{errorNetworkMessage}</div>\n </MenuItem>\n <MenuItem link onClick={this.props.repeatRequest} key=\"retry\">\n {errorNetworkButton}\n </MenuItem>\n </Menu>\n );\n }\n\n if ((items == null || items.length === 0) && renderNotFound) {\n const notFoundValue = renderNotFound();\n if (renderAddButton) return <Menu ref={refMenu}>{renderAddButton}</Menu>;\n if (notFoundValue)\n return (\n <Menu ref={refMenu}>\n <MenuItem data-tid=\"ComboBoxMenu__notFound\" disabled>\n {notFoundValue}\n </MenuItem>\n </Menu>\n );\n return null;\n }\n\n let total = null;\n const renderedItems = items && items.map(this.renderItem);\n const countItems = renderedItems?.filter((item) => isReactUINode('MenuItem', item)).length;\n\n if (countItems && renderTotalCount && totalCount && countItems < totalCount) {\n total = (\n <MenuItem disabled key=\"total\">\n <div style={{ fontSize: 12 }}>{renderTotalCount(countItems, totalCount)}</div>\n </MenuItem>\n );\n }\n\n return (\n <Menu data-tid=\"ComboBoxMenu__items\" ref={refMenu} maxHeight={maxMenuHeight}>\n {renderedItems}\n {total}\n {renderAddButton && [<MenuSeparator key=\"separator\" />, renderAddButton]}\n </Menu>\n );\n }\n\n private renderItem = (item: T, index: number): React.ReactNode => {\n // NOTE this is undesireable feature, better\n // to remove it from further versions\n const { renderItem, onValueChange } = this.props;\n if (typeof item === 'function' || React.isValidElement(item)) {\n // @ts-ignore\n const element = typeof item === 'function' ? item() : item;\n const props = Object.assign(\n {\n key: index,\n onClick: () => onValueChange(element.props),\n },\n element.props,\n );\n return React.cloneElement(element, props);\n }\n\n return (\n <MenuItem data-tid=\"ComboBoxMenu__item\" onClick={() => onValueChange(item)} key={index}>\n {(state) => renderItem(item, state)}\n </MenuItem>\n );\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ComboBoxView.tsx"],"names":["React","findDOMNode","isNonNullable","DropdownContainer","Input","InputLikeText","RenderLayer","Spinner","ArrowChevronDownIcon","CommonWrapper","ComboBoxMenu","ComboBoxRequestStatus","styles","ComboBoxView","input","renderAddButton","props","textValue","handleItemSelect","item","onValueChange","refInput","renderSpinner","spinnerWrapper","getRightIcon","loading","items","drawArrow","rightIcon","length","rightIconWrapper","componentDidMount","autoFocus","onFocus","componentDidUpdate","prevProps","editing","focus","render","menuAlign","onClickOutside","onFocusOutside","onMouseEnter","onMouseLeave","onMouseOver","opened","refMenu","maxMenuHeight","renderTotalCount","renderItem","renderNotFound","repeatRequest","requestStatus","totalCount","size","width","renderInput","topOffsets","spinner","arrow","root","disablePortal","align","borderless","disabled","error","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","placeholder","renderValue","value","warning","refInputLikeText","leftIcon","inputMode","maxLength","Component","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { DropdownContainer } from '../DropdownContainer';\nimport { Input, InputIconType } from '../../components/Input';\nimport { InputLikeText } from '../InputLikeText';\nimport { Menu } from '../Menu';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { RenderLayer } from '../RenderLayer';\nimport { Spinner } from '../../components/Spinner';\nimport { Nullable } from '../../typings/utility-types';\nimport { ArrowChevronDownIcon } from '../icons/16px';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { ComboBoxMenu } from './ComboBoxMenu';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { styles } from './CustomComboBox.styles';\n\ninterface ComboBoxViewProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n editing?: boolean;\n error?: boolean;\n items?: Nullable<T[]>;\n loading?: boolean;\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\n warning?: boolean;\n width?: string | number;\n maxLength?: number;\n maxMenuHeight?: number | string;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n\n onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => void;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n renderItem?: (item: T, state: MenuItemState) => React.ReactNode;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderValue?: (item: T) => React.ReactNode;\n renderAddButton: (query?: string) => React.ReactNode;\n repeatRequest?: () => void;\n requestStatus?: ComboBoxRequestStatus;\n refInput?: (input: Nullable<Input>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n}\n\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n\n public static defaultProps = {\n renderItem: (item: any) => item,\n renderValue: (item: any) => item,\n renderAddButton: () => null,\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n onClickOutside: () => {\n /**/\n },\n onFocusOutside: () => {\n /**/\n },\n size: 'small',\n width: 250,\n };\n\n private input: Nullable<Input>;\n\n public componentDidMount() {\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n const {\n items,\n loading,\n menuAlign,\n onClickOutside,\n onFocusOutside,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n opened,\n refMenu,\n maxMenuHeight,\n renderTotalCount,\n renderItem,\n renderNotFound,\n repeatRequest,\n requestStatus,\n totalCount,\n size,\n width,\n } = this.props;\n\n const input = this.renderInput();\n\n const topOffsets = {\n spinner: 6,\n arrow: 15,\n };\n if (size === 'medium') {\n topOffsets.spinner += 4;\n topOffsets.arrow += 4;\n }\n if (size === 'large') {\n topOffsets.spinner += 6;\n topOffsets.arrow += 6;\n }\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n style={{ width }}\n className={styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {input}\n {opened && (\n <DropdownContainer\n align={menuAlign}\n getParent={() => findDOMNode(this)}\n offsetY={1}\n disablePortal={this.props.disablePortal}\n >\n <ComboBoxMenu\n items={items}\n loading={loading}\n maxMenuHeight={maxMenuHeight}\n onValueChange={this.handleItemSelect}\n opened={opened}\n refMenu={refMenu}\n renderTotalCount={renderTotalCount}\n renderItem={renderItem!}\n renderNotFound={renderNotFound}\n renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n />\n </DropdownContainer>\n )}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderAddButton = (): React.ReactNode => {\n return this.props.renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const {\n align,\n borderless,\n disabled,\n editing,\n error,\n onFocus,\n onInputBlur,\n onInputValueChange,\n onInputFocus,\n onInputClick,\n onInputKeyDown,\n placeholder,\n renderValue,\n size,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n if (editing) {\n return (\n <Input\n align={align}\n borderless={borderless}\n disabled={disabled}\n error={error}\n maxLength={this.props.maxLength}\n onBlur={onInputBlur}\n onValueChange={onInputValueChange}\n onFocus={onInputFocus}\n onClick={onInputClick}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n value={textValue || ''}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n width=\"100%\"\n size={size}\n ref={this.refInput}\n warning={warning}\n inputMode={inputMode}\n />\n );\n }\n\n return (\n <InputLikeText\n align={align}\n borderless={borderless}\n error={error}\n onFocus={onFocus}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n disabled={disabled}\n warning={warning}\n placeholder={placeholder}\n size={size}\n width=\"100%\"\n ref={refInputLikeText}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n };\n\n private refInput = (input: Nullable<Input>) => {\n if (this.props.refInput) {\n this.props.refInput(input);\n }\n this.input = input;\n };\n\n private renderSpinner = () => (\n <span className={styles.spinnerWrapper()}>\n <Spinner type=\"mini\" caption=\"\" dimmed />\n </span>\n );\n\n private getRightIcon = () => {\n const { loading, items, drawArrow, rightIcon } = this.props;\n\n if (loading && items && !!items.length) {\n return this.renderSpinner();\n }\n\n if (rightIcon || drawArrow) {\n return <span className={styles.rightIconWrapper()}>{rightIcon ?? <ArrowChevronDownIcon />}</span>;\n }\n\n return null;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["ComboBoxView.tsx"],"names":["React","findDOMNode","isNonNullable","DropdownContainer","Input","InputLikeText","RenderLayer","Spinner","ArrowChevronDownIcon","CommonWrapper","ComboBoxMenu","ComboBoxRequestStatus","styles","ComboBoxView","input","renderAddButton","props","textValue","handleItemSelect","item","onValueChange","refInput","renderSpinner","spinnerWrapper","getRightIcon","loading","items","drawArrow","rightIcon","length","rightIconWrapper","componentDidMount","autoFocus","onFocus","componentDidUpdate","prevProps","editing","focus","render","menuAlign","onClickOutside","onFocusOutside","onMouseEnter","onMouseLeave","onMouseOver","opened","refMenu","maxMenuHeight","renderTotalCount","renderItem","renderNotFound","repeatRequest","requestStatus","totalCount","size","width","renderInput","topOffsets","spinner","arrow","root","disablePortal","align","borderless","disabled","error","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","placeholder","renderValue","value","warning","refInputLikeText","leftIcon","inputMode","maxLength","Component","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { DropdownContainer } from '../DropdownContainer';\nimport { Input, InputIconType } from '../../components/Input';\nimport { InputLikeText } from '../InputLikeText';\nimport { Menu } from '../Menu';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { RenderLayer } from '../RenderLayer';\nimport { Spinner } from '../../components/Spinner';\nimport { Nullable } from '../../typings/utility-types';\nimport { ArrowChevronDownIcon } from '../icons/16px';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { ComboBoxMenu } from './ComboBoxMenu';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { styles } from './CustomComboBox.styles';\n\ninterface ComboBoxViewProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n editing?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n items?: Nullable<T[]>;\n loading?: boolean;\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: string | number;\n maxLength?: number;\n maxMenuHeight?: number | string;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n\n onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => void;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n renderItem?: (item: T, state: MenuItemState) => React.ReactNode;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderValue?: (item: T) => React.ReactNode;\n renderAddButton: (query?: string) => React.ReactNode;\n repeatRequest?: () => void;\n requestStatus?: ComboBoxRequestStatus;\n refInput?: (input: Nullable<Input>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n}\n\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n\n public static defaultProps = {\n renderItem: (item: any) => item,\n renderValue: (item: any) => item,\n renderAddButton: () => null,\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n onClickOutside: () => {\n /**/\n },\n onFocusOutside: () => {\n /**/\n },\n size: 'small',\n width: 250,\n };\n\n private input: Nullable<Input>;\n\n public componentDidMount() {\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n const {\n items,\n loading,\n menuAlign,\n onClickOutside,\n onFocusOutside,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n opened,\n refMenu,\n maxMenuHeight,\n renderTotalCount,\n renderItem,\n renderNotFound,\n repeatRequest,\n requestStatus,\n totalCount,\n size,\n width,\n } = this.props;\n\n const input = this.renderInput();\n\n const topOffsets = {\n spinner: 6,\n arrow: 15,\n };\n if (size === 'medium') {\n topOffsets.spinner += 4;\n topOffsets.arrow += 4;\n }\n if (size === 'large') {\n topOffsets.spinner += 6;\n topOffsets.arrow += 6;\n }\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n style={{ width }}\n className={styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {input}\n {opened && (\n <DropdownContainer\n align={menuAlign}\n getParent={() => findDOMNode(this)}\n offsetY={1}\n disablePortal={this.props.disablePortal}\n >\n <ComboBoxMenu\n items={items}\n loading={loading}\n maxMenuHeight={maxMenuHeight}\n onValueChange={this.handleItemSelect}\n opened={opened}\n refMenu={refMenu}\n renderTotalCount={renderTotalCount}\n renderItem={renderItem!}\n renderNotFound={renderNotFound}\n renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n />\n </DropdownContainer>\n )}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderAddButton = (): React.ReactNode => {\n return this.props.renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const {\n align,\n borderless,\n disabled,\n editing,\n error,\n onFocus,\n onInputBlur,\n onInputValueChange,\n onInputFocus,\n onInputClick,\n onInputKeyDown,\n placeholder,\n renderValue,\n size,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n if (editing) {\n return (\n <Input\n align={align}\n borderless={borderless}\n disabled={disabled}\n error={error}\n maxLength={this.props.maxLength}\n onBlur={onInputBlur}\n onValueChange={onInputValueChange}\n onFocus={onInputFocus}\n onClick={onInputClick}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n value={textValue || ''}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n width=\"100%\"\n size={size}\n ref={this.refInput}\n warning={warning}\n inputMode={inputMode}\n />\n );\n }\n\n return (\n <InputLikeText\n align={align}\n borderless={borderless}\n error={error}\n onFocus={onFocus}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n disabled={disabled}\n warning={warning}\n placeholder={placeholder}\n size={size}\n width=\"100%\"\n ref={refInputLikeText}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n };\n\n private refInput = (input: Nullable<Input>) => {\n if (this.props.refInput) {\n this.props.refInput(input);\n }\n this.input = input;\n };\n\n private renderSpinner = () => (\n <span className={styles.spinnerWrapper()}>\n <Spinner type=\"mini\" caption=\"\" dimmed />\n </span>\n );\n\n private getRightIcon = () => {\n const { loading, items, drawArrow, rightIcon } = this.props;\n\n if (loading && items && !!items.length) {\n return this.renderSpinner();\n }\n\n if (rightIcon || drawArrow) {\n return <span className={styles.rightIconWrapper()}>{rightIcon ?? <ArrowChevronDownIcon />}</span>;\n }\n\n return null;\n };\n}\n"]}
|
|
@@ -13,6 +13,9 @@ interface ComboBoxViewProps<T> extends CommonProps {
|
|
|
13
13
|
disablePortal?: boolean;
|
|
14
14
|
disabled?: boolean;
|
|
15
15
|
editing?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Cостояние валидации при ошибке.
|
|
18
|
+
*/
|
|
16
19
|
error?: boolean;
|
|
17
20
|
items?: Nullable<T[]>;
|
|
18
21
|
loading?: boolean;
|
|
@@ -24,6 +27,9 @@ interface ComboBoxViewProps<T> extends CommonProps {
|
|
|
24
27
|
textValue?: string;
|
|
25
28
|
totalCount?: number;
|
|
26
29
|
value?: Nullable<T>;
|
|
30
|
+
/**
|
|
31
|
+
* Cостояние валидации при предупреждении.
|
|
32
|
+
*/
|
|
27
33
|
warning?: boolean;
|
|
28
34
|
width?: string | number;
|
|
29
35
|
maxLength?: number;
|
|
@@ -6,7 +6,6 @@ import React from 'react';
|
|
|
6
6
|
import { CancelationError, taskWithDelay } from "../../../lib/utils";
|
|
7
7
|
import { fixClickFocusIE } from "../../../lib/events/fixClickFocusIE";
|
|
8
8
|
import { CommonWrapper } from "../../../internal/CommonWrapper";
|
|
9
|
-
import { isFirefox, isIE11 } from "../../../lib/client";
|
|
10
9
|
import { ComboBoxRequestStatus } from "../CustomComboBoxTypes";
|
|
11
10
|
import { reducer } from "../CustomComboBoxReducer";
|
|
12
11
|
import { ComboBoxView } from "../ComboBoxView";
|
|
@@ -146,21 +145,15 @@ export var CustomComboBox = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
146
145
|
return;
|
|
147
146
|
}
|
|
148
147
|
|
|
149
|
-
_this.focused = false;
|
|
148
|
+
_this.focused = false; // workaround for the similar bug with focusout
|
|
149
|
+
// in Firefox, Chrome and IE
|
|
150
|
+
// https://bugzilla.mozilla.org/show_bug.cgi?id=1363964
|
|
150
151
|
|
|
151
|
-
|
|
152
|
-
// workaround for the Firefox focusout bug
|
|
153
|
-
// https://bugzilla.mozilla.org/show_bug.cgi?id=1363964
|
|
154
|
-
setTimeout(function () {
|
|
155
|
-
_this.dispatch({
|
|
156
|
-
type: 'Blur'
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
} else {
|
|
152
|
+
setTimeout(function () {
|
|
160
153
|
_this.dispatch({
|
|
161
154
|
type: 'Blur'
|
|
162
155
|
});
|
|
163
|
-
}
|
|
156
|
+
});
|
|
164
157
|
};
|
|
165
158
|
|
|
166
159
|
_this.handleInputBlur = function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CustomComboBox.tsx"],"names":["React","CancelationError","taskWithDelay","fixClickFocusIE","CommonWrapper","isFirefox","isIE11","ComboBoxRequestStatus","reducer","ComboBoxView","DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","Unknown","CustomComboBox","state","input","menu","inputLikeText","requestId","loaderShowDelay","cancelationToken","cancelLoaderDelay","focus","props","disabled","selectInputText","selectAll","blur","handleBlur","dispatch","action","effects","nextState","setState","stateAndEffect","Array","forEach","handleEffect","effect","getState","getProps","handleValueChange","value","type","keepFocus","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","resolve","cancelLoader","race","code","cancelSearch","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","refInputLikeText","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { isFirefox, isIE11 } from '../../lib/client';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n error?: boolean;\n maxLength?: number;\n menuAlign?: 'left' | 'right';\n drawArrow?: boolean;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n searchOnFocus?: boolean;\n onValueChange?: (value: T) => void;\n onInputValueChange?: (value: string) => Nullable<string> | void;\n onUnexpectedInput?: (value: string) => void | null | T;\n onFocus?: () => void;\n onBlur?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n warning?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state?: MenuItemState) => React.ReactNode;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<T[]>;\n inputChanged: boolean;\n focused: boolean;\n repeatRequest: () => void;\n requestStatus: ComboBoxRequestStatus;\n}\n\nexport const DELAY_BEFORE_SHOW_LOADER = 300;\nexport const LOADER_SHOW_TIME = 1000;\n\nexport const DefaultState = {\n inputChanged: false,\n editing: false,\n items: null,\n loading: false,\n opened: false,\n focused: false,\n textValue: '',\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.input) {\n this.input.focus();\n } else if (this.inputLikeText) {\n this.inputLikeText.focus();\n }\n };\n\n /**\n * @public\n */\n public selectInputText = () => {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.selectAll();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n\n /**\n * @public\n */\n public async search(query: string = this.state.textValue) {\n const { getItems } = this.props;\n\n const cancelPromise: Promise<never> = new Promise((_, reject) => (this.cancelationToken = reject));\n const expectingId = (this.requestId += 1);\n\n if (!this.loaderShowDelay) {\n this.loaderShowDelay = new Promise<void>((resolve) => {\n const cancelLoader = taskWithDelay(() => {\n this.dispatch({ type: 'RequestItems' });\n setTimeout(resolve, LOADER_SHOW_TIME);\n }, DELAY_BEFORE_SHOW_LOADER);\n\n cancelPromise.catch(() => cancelLoader());\n\n this.cancelLoaderDelay = () => {\n cancelLoader();\n resolve();\n };\n });\n }\n\n try {\n const items = await Promise.race([getItems(query), cancelPromise]);\n if (this.state.loading) {\n await Promise.race([this.loaderShowDelay, cancelPromise]);\n }\n if (expectingId === this.requestId) {\n this.dispatch({\n type: 'ReceiveItems',\n items,\n });\n }\n } catch (error) {\n if (error && error.code === 'CancelationError') {\n this.dispatch({ type: 'CancelRequest' });\n } else if (expectingId === this.requestId) {\n this.dispatch({\n type: 'RequestFailure',\n repeatRequest: () => {\n this.search(query);\n if (this.input) {\n this.input.focus();\n }\n },\n });\n }\n } finally {\n if (expectingId === this.requestId) {\n if (!this.state.loading) {\n this.cancelLoaderDelay();\n }\n this.cancelationToken = null;\n this.loaderShowDelay = null;\n }\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.cancelationToken) {\n this.cancelationToken(new CancelationError());\n }\n }\n\n /**\n * @public\n */\n public open() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\n this.dispatch({ type: 'Close' });\n }\n\n public render() {\n const viewProps = {\n align: this.props.align,\n borderless: this.props.borderless,\n disabled: this.props.disabled,\n disablePortal: this.props.disablePortal,\n editing: this.state.editing,\n error: this.props.error,\n items: this.state.items,\n loading: this.state.loading,\n menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n width: this.props.width,\n maxLength: this.props.maxLength,\n maxMenuHeight: this.props.maxMenuHeight,\n leftIcon: this.props.leftIcon,\n rightIcon: this.props.rightIcon,\n inputMode: this.props.inputMode,\n\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\n onFocusOutside: this.handleBlur,\n onInputBlur: this.handleInputBlur,\n onInputValueChange: (value: string) => this.dispatch({ type: 'TextChange', value }),\n onInputFocus: this.handleFocus,\n onInputClick: this.handleInputClick,\n onInputKeyDown: (event: React.KeyboardEvent) => {\n event.persist();\n this.dispatch({ type: 'KeyPress', event });\n },\n onMouseEnter: this.props.onMouseEnter,\n onMouseOver: this.props.onMouseOver,\n onMouseLeave: this.props.onMouseLeave,\n renderItem: this.props.renderItem,\n renderNotFound: this.props.renderNotFound,\n renderValue: this.props.renderValue,\n renderTotalCount: this.props.renderTotalCount,\n renderAddButton: this.props.renderAddButton,\n repeatRequest: this.state.repeatRequest,\n requestStatus: this.state.requestStatus,\n\n refInput: (input: Nullable<Input>) => {\n this.input = input;\n },\n refMenu: (menu: Nullable<Menu>) => {\n this.menu = menu;\n },\n refInputLikeText: (inputLikeText: Nullable<InputLikeText>) => {\n this.inputLikeText = inputLikeText;\n },\n };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' });\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate(prevProps: CustomComboBoxProps<T>, prevState: CustomComboBoxState<T>) {\n if (prevState.editing && !this.state.editing) {\n this.handleBlur();\n }\n this.dispatch({ type: 'DidUpdate', prevProps, prevState });\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\n };\n\n private getProps = () => this.props;\n\n private getState = () => this.state;\n\n private handleValueChange = (value: T) => {\n this.dispatch({\n type: 'ValueChange',\n value,\n keepFocus: true,\n });\n };\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n if (this.state.opened) {\n this.close();\n }\n return;\n }\n this.focused = false;\n if (isFirefox || isIE11) {\n // workaround for the Firefox focusout bug\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n });\n } else {\n this.dispatch({ type: 'Blur' });\n }\n };\n\n private handleInputBlur = () => {\n // If menu opened, RenderLayer is active and\n // it would call handleFocusOutside\n // In that way handleBlur would be called\n if (this.state.opened) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["CustomComboBox.tsx"],"names":["React","CancelationError","taskWithDelay","fixClickFocusIE","CommonWrapper","ComboBoxRequestStatus","reducer","ComboBoxView","DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","Unknown","CustomComboBox","state","input","menu","inputLikeText","requestId","loaderShowDelay","cancelationToken","cancelLoaderDelay","focus","props","disabled","selectInputText","selectAll","blur","handleBlur","dispatch","action","effects","nextState","setState","stateAndEffect","Array","forEach","handleEffect","effect","getState","getProps","handleValueChange","value","type","keepFocus","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","resolve","cancelLoader","race","code","cancelSearch","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","refInputLikeText","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","PureComponent","__KONTUR_REACT_UI__"],"mappings":"qSAAA,OAAOA,KAAP,MAAkB,OAAlB;;;;;;;AAOA,SAASC,gBAAT,EAA2BC,aAA3B,QAAgD,iBAAhD;AACA,SAASC,eAAT,QAAgC,kCAAhC;AACA,SAAsBC,aAAtB,QAA2C,8BAA3C;;AAEA,SAASC,qBAAT,QAAsC,uBAAtC;AACA,SAAqDC,OAArD,QAAoE,yBAApE;AACA,SAASC,YAAT,QAA6B,gBAA7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,OAAO,IAAMC,wBAAwB,GAAG,GAAjC;AACP,OAAO,IAAMC,gBAAgB,GAAG,IAAzB;;AAEP,OAAO,IAAMC,YAAY,GAAG;AAC1BC,EAAAA,YAAY,EAAE,KADY;AAE1BC,EAAAA,OAAO,EAAE,KAFiB;AAG1BC,EAAAA,KAAK,EAAE,IAHmB;AAI1BC,EAAAA,OAAO,EAAE,KAJiB;AAK1BC,EAAAA,MAAM,EAAE,KALkB;AAM1BC,EAAAA,OAAO,EAAE,KANiB;AAO1BC,EAAAA,SAAS,EAAE,EAPe;AAQ1BC,EAAAA,aAAa,EAAE,iCAAMC,SAAN,EARW;AAS1BC,EAAAA,aAAa,EAAEf,qBAAqB,CAACgB,OATX,EAArB;;;AAYP,WAAaC,cAAb;;;AAGSC,IAAAA,KAHT,GAGyCb,YAHzC;AAISc,IAAAA,KAJT;AAKSC,IAAAA,IALT;AAMSC,IAAAA,aANT;AAOSC,IAAAA,SAPT,GAOqB,CAPrB;AAQSC,IAAAA,eART;AASUZ,IAAAA,OATV,GASoB,KATpB;AAUUa,IAAAA,gBAVV,GAUiE,IAVjE;;AAYUvB,IAAAA,OAZV,GAYoBA,OAZpB;AAaSwB,IAAAA,iBAbT,GAayC,oBAAM,IAAN,EAbzC;;;;;AAkBSC,IAAAA,KAlBT,GAkBiB,YAAM;AACnB,UAAI,MAAKC,KAAL,CAAWC,QAAf,EAAyB;AACvB;AACD;;AAED,UAAI,MAAKT,KAAT,EAAgB;AACd,cAAKA,KAAL,CAAWO,KAAX;AACD,OAFD,MAEO,IAAI,MAAKL,aAAT,EAAwB;AAC7B,cAAKA,aAAL,CAAmBK,KAAnB;AACD;AACF,KA5BH;;;;;AAiCSG,IAAAA,eAjCT,GAiC2B,YAAM;AAC7B,UAAI,MAAKF,KAAL,CAAWC,QAAf,EAAyB;AACvB;AACD;AACD,UAAI,MAAKT,KAAT,EAAgB;AACd,cAAKA,KAAL,CAAWW,SAAX;AACD;AACF,KAxCH;;;;;AA6CSC,IAAAA,IA7CT,GA6CgB,YAAM;AAClB,UAAI,MAAKJ,KAAL,CAAWC,QAAf,EAAyB;AACvB;AACD;;AAED,YAAKI,UAAL;AACD,KAnDH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiOUC,IAAAA,QAjOV,GAiOqB,UAACC,MAAD,EAAqC;AACtD,UAAIC,OAAJ;AACA,UAAIC,SAAJ;;AAEA,YAAKC,QAAL;AACE,gBAACnB,KAAD,EAAW;AACT,YAAMoB,cAAc,GAAG,MAAKrC,OAAL,CAAaiB,KAAb,EAAoB,MAAKS,KAAzB,EAAgCO,MAAhC,CAAvB,CADS;;AAGcI,QAAAA,cAAc,YAAYC,KAA1B,GAAkCD,cAAlC,GAAmD,CAACA,cAAD,EAAiB,EAAjB,CAHjE,CAGRF,SAHQ,WAGGD,OAHH;;AAKT,eAAOC,SAAP;AACD,OAPH;AAQE,kBAAM;AACJD,QAAAA,OAAO,CAACK,OAAR,CAAgB,MAAKC,YAArB;AACD,OAVH;;AAYD,KAjPH;;AAmPUA,IAAAA,YAnPV,GAmPyB,UAACC,MAAD,EAAqC;AAC1DA,MAAAA,MAAM,CAAC,MAAKT,QAAN,EAAgB,MAAKU,QAArB,EAA+B,MAAKC,QAApC,EAA8C,mDAA9C,CAAN;AACD,KArPH;;AAuPUA,IAAAA,QAvPV,GAuPqB,oBAAM,MAAKjB,KAAX,EAvPrB;;AAyPUgB,IAAAA,QAzPV,GAyPqB,oBAAM,MAAKzB,KAAX,EAzPrB;;AA2PU2B,IAAAA,iBA3PV,GA2P8B,UAACC,KAAD,EAAc;AACxC,YAAKb,QAAL,CAAc;AACZc,QAAAA,IAAI,EAAE,aADM;AAEZD,QAAAA,KAAK,EAALA,KAFY;AAGZE,QAAAA,SAAS,EAAE,IAHC,EAAd;;AAKD,KAjQH;;AAmQUC,IAAAA,WAnQV,GAmQwB,YAAM;AAC1B,UAAI,MAAKtC,OAAT,EAAkB;AAChB;AACD;AACD,YAAKA,OAAL,GAAe,IAAf;AACA,YAAKsB,QAAL,CAAc,EAAEc,IAAI,EAAE,OAAR,EAAd;AACD,KAzQH;;AA2QUG,IAAAA,kBA3QV,GA2Q+B,UAACC,CAAD,EAAc;AACzCrD,MAAAA,eAAe,CAACqD,CAAD,CAAf;AACA,YAAKnB,UAAL;AACD,KA9QH;;AAgRUA,IAAAA,UAhRV,GAgRuB,YAAM;AACzB,UAAI,CAAC,MAAKrB,OAAV,EAAmB;AACjB,YAAI,MAAKO,KAAL,CAAWR,MAAf,EAAuB;AACrB,gBAAK0C,KAAL;AACD;AACD;AACD;AACD,YAAKzC,OAAL,GAAe,KAAf;AACA;AACA;AACA;AACA0C,MAAAA,UAAU,CAAC,YAAM;AACf,cAAKpB,QAAL,CAAc,EAAEc,IAAI,EAAE,MAAR,EAAd;AACD,OAFS,CAAV;AAGD,KA9RH;;AAgSUO,IAAAA,eAhSV,GAgS4B,YAAM;AAC9B;AACA;AACA;AACA,UAAI,MAAKpC,KAAL,CAAWR,MAAf,EAAuB;AACrB;AACD;AACD,YAAKsB,UAAL;AACD,KAxSH;;AA0SUuB,IAAAA,gBA1SV,GA0S6B,YAAM;AAC/B,UAAI,CAAC,MAAK/B,gBAAV,EAA4B;AAC1B,cAAKS,QAAL,CAAc,EAAEc,IAAI,EAAE,YAAR,EAAd;AACD;AACF,KA9SH,sDAqDE;AACF;AACA,KAvDA,OAwDeS,MAxDf,oGAwDE,iBAAoBC,KAApB,gMAAoBA,KAApB,cAAoBA,KAApB,GAAoC,KAAKvC,KAAL,CAAWN,SAA/C,EACU8C,QADV,GACuB,KAAK/B,KAD5B,CACU+B,QADV,CAGQC,aAHR,GAGwC,IAAIC,OAAJ,CAAY,UAACC,CAAD,EAAIC,MAAJ,UAAgB,MAAI,CAACtC,gBAAL,GAAwBsC,MAAxC,EAAZ,CAHxC,CAIQC,WAJR,GAIuB,KAAKzC,SAAL,IAAkB,CAJzC,CAME,IAAI,CAAC,KAAKC,eAAV,EAA2B,CACzB,KAAKA,eAAL,GAAuB,IAAIqC,OAAJ,CAAkB,UAACI,OAAD,EAAa,CACpD,IAAMC,YAAY,GAAGpE,aAAa,CAAC,YAAM,CACvC,MAAI,CAACoC,QAAL,CAAc,EAAEc,IAAI,EAAE,cAAR,EAAd,EACAM,UAAU,CAACW,OAAD,EAAU5D,gBAAV,CAAV,CACD,CAHiC,EAG/BD,wBAH+B,CAAlC,CAKAwD,aAAa,SAAb,CAAoB,oBAAMM,YAAY,EAAlB,EAApB,EAEA,MAAI,CAACxC,iBAAL,GAAyB,YAAM,CAC7BwC,YAAY,GACZD,OAAO,GACR,CAHD,CAID,CAZsB,CAAvB,CAaD,CApBH,2CAuBwBJ,OAAO,CAACM,IAAR,CAAa,CAACR,QAAQ,CAACD,KAAD,CAAT,EAAkBE,aAAlB,CAAb,CAvBxB,QAuBUnD,KAvBV,sBAwBQ,KAAKU,KAAL,CAAWT,OAxBnB,uDAyBYmD,OAAO,CAACM,IAAR,CAAa,CAAC,KAAK3C,eAAN,EAAuBoC,aAAvB,CAAb,CAzBZ,SA2BI,IAAII,WAAW,KAAK,KAAKzC,SAAzB,EAAoC,CAClC,KAAKW,QAAL,CAAc,EACZc,IAAI,EAAE,cADM,EAEZvC,KAAK,EAALA,KAFY,EAAd,EAID,CAhCL,uFAkCI,IAAI,eAAS,YAAM2D,IAAN,KAAe,kBAA5B,EAAgD,CAC9C,KAAKlC,QAAL,CAAc,EAAEc,IAAI,EAAE,eAAR,EAAd,EACD,CAFD,MAEO,IAAIgB,WAAW,KAAK,KAAKzC,SAAzB,EAAoC,CACzC,KAAKW,QAAL,CAAc,EACZc,IAAI,EAAE,gBADM,EAEZlC,aAAa,EAAE,yBAAM,CACnB,MAAI,CAAC2C,MAAL,CAAYC,KAAZ,EACA,IAAI,MAAI,CAACtC,KAAT,EAAgB,CACd,MAAI,CAACA,KAAL,CAAWO,KAAX,GACD,CACF,CAPW,EAAd,EASD,CA9CL,2BAgDI,IAAIqC,WAAW,KAAK,KAAKzC,SAAzB,EAAoC,CAClC,IAAI,CAAC,KAAKJ,KAAL,CAAWT,OAAhB,EAAyB,CACvB,KAAKgB,iBAAL,GACD,CACD,KAAKD,gBAAL,GAAwB,IAAxB,CACA,KAAKD,eAAL,GAAuB,IAAvB,CACD,CAtDL,6GAxDF,iFAkHE;AACF;AACA,KApHA,QAqHS6C,YArHT,GAqHE,wBAAsB,CACpB,IAAI,KAAK5C,gBAAT,EAA2B,CACzB,KAAKA,gBAAL,CAAsB,IAAI5B,gBAAJ,EAAtB,EACD,CACF,CAzHH,CA2HE;AACF;AACA,KA7HA,QA8HSyE,IA9HT,GA8HE,gBAAc,CACZ,KAAKpC,QAAL,CAAc,EAAEc,IAAI,EAAE,MAAR,EAAd,EACD,CAhIH,CAkIE;AACF;AACA,KApIA,QAqISK,KArIT,GAqIE,iBAAe,CACb,KAAKnB,QAAL,CAAc,EAAEc,IAAI,EAAE,OAAR,EAAd,EACD,CAvIH,QAyISuB,MAzIT,GAyIE,kBAAgB,mBACd,IAAMC,SAAS,GAAG,EAChBC,KAAK,EAAE,KAAK7C,KAAL,CAAW6C,KADF,EAEhBC,UAAU,EAAE,KAAK9C,KAAL,CAAW8C,UAFP,EAGhB7C,QAAQ,EAAE,KAAKD,KAAL,CAAWC,QAHL,EAIhB8C,aAAa,EAAE,KAAK/C,KAAL,CAAW+C,aAJV,EAKhBnE,OAAO,EAAE,KAAKW,KAAL,CAAWX,OALJ,EAMhBoE,KAAK,EAAE,KAAKhD,KAAL,CAAWgD,KANF,EAOhBnE,KAAK,EAAE,KAAKU,KAAL,CAAWV,KAPF,EAQhBC,OAAO,EAAE,KAAKS,KAAL,CAAWT,OARJ,EAShBmE,SAAS,EAAE,KAAKjD,KAAL,CAAWiD,SATN,EAUhBlE,MAAM,EAAE,KAAKQ,KAAL,CAAWR,MAVH,EAWhBmE,SAAS,EAAE,KAAKlD,KAAL,CAAWkD,SAXN,EAYhBC,WAAW,EAAE,KAAKnD,KAAL,CAAWmD,WAZR,EAahBC,IAAI,EAAE,KAAKpD,KAAL,CAAWoD,IAbD,EAchBnE,SAAS,EAAE,KAAKM,KAAL,CAAWN,SAdN,EAehBoE,UAAU,EAAE,KAAKrD,KAAL,CAAWqD,UAfP,EAgBhBlC,KAAK,EAAE,KAAKnB,KAAL,CAAWmB,KAhBF,EAiBhBmC,OAAO,EAAE,KAAKtD,KAAL,CAAWsD,OAjBJ,EAkBhBC,KAAK,EAAE,KAAKvD,KAAL,CAAWuD,KAlBF,EAmBhBC,SAAS,EAAE,KAAKxD,KAAL,CAAWwD,SAnBN,EAoBhBC,aAAa,EAAE,KAAKzD,KAAL,CAAWyD,aApBV,EAqBhBC,QAAQ,EAAE,KAAK1D,KAAL,CAAW0D,QArBL,EAsBhBC,SAAS,EAAE,KAAK3D,KAAL,CAAW2D,SAtBN,EAuBhBC,SAAS,EAAE,KAAK5D,KAAL,CAAW4D,SAvBN,EAyBhBC,aAAa,EAAE,KAAK3C,iBAzBJ,EA0BhB4C,cAAc,EAAE,KAAKvC,kBA1BL,EA2BhBwC,OAAO,EAAE,KAAKzC,WA3BE,EA4BhB0C,cAAc,EAAE,KAAK3D,UA5BL,EA6BhB4D,WAAW,EAAE,KAAKtC,eA7BF,EA8BhBuC,kBAAkB,EAAE,4BAAC/C,KAAD,UAAmB,MAAI,CAACb,QAAL,CAAc,EAAEc,IAAI,EAAE,YAAR,EAAsBD,KAAK,EAALA,KAAtB,EAAd,CAAnB,EA9BJ,EA+BhBgD,YAAY,EAAE,KAAK7C,WA/BH,EAgChB8C,YAAY,EAAE,KAAKxC,gBAhCH,EAiChByC,cAAc,EAAE,wBAACC,KAAD,EAAgC,CAC9CA,KAAK,CAACC,OAAN,GACA,MAAI,CAACjE,QAAL,CAAc,EAAEc,IAAI,EAAE,UAAR,EAAoBkD,KAAK,EAALA,KAApB,EAAd,EACD,CApCe,EAqChBE,YAAY,EAAE,KAAKxE,KAAL,CAAWwE,YArCT,EAsChBC,WAAW,EAAE,KAAKzE,KAAL,CAAWyE,WAtCR,EAuChBC,YAAY,EAAE,KAAK1E,KAAL,CAAW0E,YAvCT,EAwChBC,UAAU,EAAE,KAAK3E,KAAL,CAAW2E,UAxCP,EAyChBC,cAAc,EAAE,KAAK5E,KAAL,CAAW4E,cAzCX,EA0ChBC,WAAW,EAAE,KAAK7E,KAAL,CAAW6E,WA1CR,EA2ChBC,gBAAgB,EAAE,KAAK9E,KAAL,CAAW8E,gBA3Cb,EA4ChBC,eAAe,EAAE,KAAK/E,KAAL,CAAW+E,eA5CZ,EA6ChB7F,aAAa,EAAE,KAAKK,KAAL,CAAWL,aA7CV,EA8ChBE,aAAa,EAAE,KAAKG,KAAL,CAAWH,aA9CV,EAgDhB4F,QAAQ,EAAE,kBAACxF,KAAD,EAA4B,CACpC,MAAI,CAACA,KAAL,GAAaA,KAAb,CACD,CAlDe,EAmDhByF,OAAO,EAAE,iBAACxF,IAAD,EAA0B,CACjC,MAAI,CAACA,IAAL,GAAYA,IAAZ,CACD,CArDe,EAsDhByF,gBAAgB,EAAE,0BAACxF,aAAD,EAA4C,CAC5D,MAAI,CAACA,aAAL,GAAqBA,aAArB,CACD,CAxDe,EAAlB,CA2DA,oBACE,oBAAC,aAAD,EAAmB,KAAKM,KAAxB,eACE,oBAAC,YAAD,EAAkB4C,SAAlB,CADF,CADF,CAKD,CA1MH,QA4MSuC,iBA5MT,GA4ME,6BAA2B,CACzB,KAAK7E,QAAL,CAAc,EAAEc,IAAI,EAAE,OAAR,EAAd,EACA,IAAI,KAAKpB,KAAL,CAAWoF,SAAf,EAA0B,CACxB,KAAKrF,KAAL,GACD,CACF,CAjNH,QAmNSsF,kBAnNT,GAmNE,4BAA0BC,SAA1B,EAA6DC,SAA7D,EAAgG,CAC9F,IAAIA,SAAS,CAAC3G,OAAV,IAAqB,CAAC,KAAKW,KAAL,CAAWX,OAArC,EAA8C,CAC5C,KAAKyB,UAAL,GACD,CACD,KAAKC,QAAL,CAAc,EAAEc,IAAI,EAAE,WAAR,EAAqBkE,SAAS,EAATA,SAArB,EAAgCC,SAAS,EAATA,SAAhC,EAAd,EACD,CAxNH,CA0NE;AACF;AACA,KA5NA,QA6NSC,KA7NT,GA6NE,iBAAe,CACb,KAAKlF,QAAL,CAAc,EAAEc,IAAI,EAAE,OAAR,EAAd,EACD,CA/NH,yBAAuCpD,KAAK,CAACyH,aAA7C,EAAanG,c,CACGoG,mB,GAAsB,gB","sourcesContent":["import React from 'react';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n maxLength?: number;\n menuAlign?: 'left' | 'right';\n drawArrow?: boolean;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n searchOnFocus?: boolean;\n onValueChange?: (value: T) => void;\n onInputValueChange?: (value: string) => Nullable<string> | void;\n onUnexpectedInput?: (value: string) => void | null | T;\n onFocus?: () => void;\n onBlur?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state?: MenuItemState) => React.ReactNode;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<T[]>;\n inputChanged: boolean;\n focused: boolean;\n repeatRequest: () => void;\n requestStatus: ComboBoxRequestStatus;\n}\n\nexport const DELAY_BEFORE_SHOW_LOADER = 300;\nexport const LOADER_SHOW_TIME = 1000;\n\nexport const DefaultState = {\n inputChanged: false,\n editing: false,\n items: null,\n loading: false,\n opened: false,\n focused: false,\n textValue: '',\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.input) {\n this.input.focus();\n } else if (this.inputLikeText) {\n this.inputLikeText.focus();\n }\n };\n\n /**\n * @public\n */\n public selectInputText = () => {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.selectAll();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n\n /**\n * @public\n */\n public async search(query: string = this.state.textValue) {\n const { getItems } = this.props;\n\n const cancelPromise: Promise<never> = new Promise((_, reject) => (this.cancelationToken = reject));\n const expectingId = (this.requestId += 1);\n\n if (!this.loaderShowDelay) {\n this.loaderShowDelay = new Promise<void>((resolve) => {\n const cancelLoader = taskWithDelay(() => {\n this.dispatch({ type: 'RequestItems' });\n setTimeout(resolve, LOADER_SHOW_TIME);\n }, DELAY_BEFORE_SHOW_LOADER);\n\n cancelPromise.catch(() => cancelLoader());\n\n this.cancelLoaderDelay = () => {\n cancelLoader();\n resolve();\n };\n });\n }\n\n try {\n const items = await Promise.race([getItems(query), cancelPromise]);\n if (this.state.loading) {\n await Promise.race([this.loaderShowDelay, cancelPromise]);\n }\n if (expectingId === this.requestId) {\n this.dispatch({\n type: 'ReceiveItems',\n items,\n });\n }\n } catch (error) {\n if (error && error.code === 'CancelationError') {\n this.dispatch({ type: 'CancelRequest' });\n } else if (expectingId === this.requestId) {\n this.dispatch({\n type: 'RequestFailure',\n repeatRequest: () => {\n this.search(query);\n if (this.input) {\n this.input.focus();\n }\n },\n });\n }\n } finally {\n if (expectingId === this.requestId) {\n if (!this.state.loading) {\n this.cancelLoaderDelay();\n }\n this.cancelationToken = null;\n this.loaderShowDelay = null;\n }\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.cancelationToken) {\n this.cancelationToken(new CancelationError());\n }\n }\n\n /**\n * @public\n */\n public open() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\n this.dispatch({ type: 'Close' });\n }\n\n public render() {\n const viewProps = {\n align: this.props.align,\n borderless: this.props.borderless,\n disabled: this.props.disabled,\n disablePortal: this.props.disablePortal,\n editing: this.state.editing,\n error: this.props.error,\n items: this.state.items,\n loading: this.state.loading,\n menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n width: this.props.width,\n maxLength: this.props.maxLength,\n maxMenuHeight: this.props.maxMenuHeight,\n leftIcon: this.props.leftIcon,\n rightIcon: this.props.rightIcon,\n inputMode: this.props.inputMode,\n\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\n onFocusOutside: this.handleBlur,\n onInputBlur: this.handleInputBlur,\n onInputValueChange: (value: string) => this.dispatch({ type: 'TextChange', value }),\n onInputFocus: this.handleFocus,\n onInputClick: this.handleInputClick,\n onInputKeyDown: (event: React.KeyboardEvent) => {\n event.persist();\n this.dispatch({ type: 'KeyPress', event });\n },\n onMouseEnter: this.props.onMouseEnter,\n onMouseOver: this.props.onMouseOver,\n onMouseLeave: this.props.onMouseLeave,\n renderItem: this.props.renderItem,\n renderNotFound: this.props.renderNotFound,\n renderValue: this.props.renderValue,\n renderTotalCount: this.props.renderTotalCount,\n renderAddButton: this.props.renderAddButton,\n repeatRequest: this.state.repeatRequest,\n requestStatus: this.state.requestStatus,\n\n refInput: (input: Nullable<Input>) => {\n this.input = input;\n },\n refMenu: (menu: Nullable<Menu>) => {\n this.menu = menu;\n },\n refInputLikeText: (inputLikeText: Nullable<InputLikeText>) => {\n this.inputLikeText = inputLikeText;\n },\n };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' });\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate(prevProps: CustomComboBoxProps<T>, prevState: CustomComboBoxState<T>) {\n if (prevState.editing && !this.state.editing) {\n this.handleBlur();\n }\n this.dispatch({ type: 'DidUpdate', prevProps, prevState });\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\n };\n\n private getProps = () => this.props;\n\n private getState = () => this.state;\n\n private handleValueChange = (value: T) => {\n this.dispatch({\n type: 'ValueChange',\n value,\n keepFocus: true,\n });\n };\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n if (this.state.opened) {\n this.close();\n }\n return;\n }\n this.focused = false;\n // workaround for the similar bug with focusout\n // in Firefox, Chrome and IE\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n });\n };\n\n private handleInputBlur = () => {\n // If menu opened, RenderLayer is active and\n // it would call handleFocusOutside\n // In that way handleBlur would be called\n if (this.state.opened) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n}\n"]}
|
|
@@ -12,6 +12,9 @@ export interface CustomComboBoxProps<T> extends CommonProps {
|
|
|
12
12
|
borderless?: boolean;
|
|
13
13
|
disablePortal?: boolean;
|
|
14
14
|
disabled?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Cостояние валидации при ошибке.
|
|
17
|
+
*/
|
|
15
18
|
error?: boolean;
|
|
16
19
|
maxLength?: number;
|
|
17
20
|
menuAlign?: 'left' | 'right';
|
|
@@ -32,6 +35,9 @@ export interface CustomComboBoxProps<T> extends CommonProps {
|
|
|
32
35
|
size?: 'small' | 'medium' | 'large';
|
|
33
36
|
totalCount?: number;
|
|
34
37
|
value?: Nullable<T>;
|
|
38
|
+
/**
|
|
39
|
+
* Cостояние валидации при предупреждении.
|
|
40
|
+
*/
|
|
35
41
|
warning?: boolean;
|
|
36
42
|
width?: string | number;
|
|
37
43
|
maxMenuHeight?: number | string;
|
|
@@ -105,7 +105,7 @@ export var InputLikeText = /*#__PURE__*/function (_React$Component) {
|
|
|
105
105
|
|
|
106
106
|
var rightSide = _this.renderRightSide();
|
|
107
107
|
|
|
108
|
-
var className = cx(styles.root(), jsInputStyles.root(_this.theme), _this.getSizeClassName(), (_cx = {}, _cx[jsInputStyles.focus(_this.theme)] = focused, _cx[jsInputStyles.blink(_this.theme)] = blinking, _cx[jsInputStyles.warning(_this.theme)] = !!warning, _cx[jsInputStyles.error(_this.theme)] = !!error, _cx[jsInputStyles.focusFallback(_this.theme)] = focused && (isIE11 || isEdge), _cx[jsInputStyles.warningFallback(_this.theme)] = !!warning && (isIE11 || isEdge), _cx[jsInputStyles.errorFallback(_this.theme)] = !!error && (isIE11 || isEdge), _cx[jsInputStyles.
|
|
108
|
+
var className = cx(styles.root(), jsInputStyles.root(_this.theme), _this.getSizeClassName(), (_cx = {}, _cx[jsInputStyles.disabled(_this.theme)] = !!disabled, _cx[jsInputStyles.borderless()] = !!borderless, _cx[jsInputStyles.focus(_this.theme)] = focused, _cx[jsInputStyles.blink(_this.theme)] = blinking, _cx[jsInputStyles.warning(_this.theme)] = !!warning, _cx[jsInputStyles.error(_this.theme)] = !!error, _cx[jsInputStyles.focusFallback(_this.theme)] = focused && (isIE11 || isEdge), _cx[jsInputStyles.warningFallback(_this.theme)] = !!warning && (isIE11 || isEdge), _cx[jsInputStyles.errorFallback(_this.theme)] = !!error && (isIE11 || isEdge), _cx[jsInputStyles.hideBlinkingCursor()] = isMobile, _cx));
|
|
109
109
|
var wrapperClass = cx(jsInputStyles.wrapper(), (_cx2 = {}, _cx2[styles.userSelectContain()] = focused, _cx2));
|
|
110
110
|
return /*#__PURE__*/React.createElement("span", _extends({}, rest, {
|
|
111
111
|
className: className,
|