@skbkontur/react-ui 4.25.1 → 4.25.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 CHANGED
@@ -3,6 +3,19 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.25.2](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.25.1...@skbkontur/react-ui@4.25.2) (2024-07-16)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **Loader:** fix Loader in 18 react ([#3467](https://github.com/skbkontur/retail-ui/issues/3467)) ([5c0fcce](https://github.com/skbkontur/retail-ui/commit/5c0fccefea1de468a9a796456f6a8a9163587a51))
12
+ * **Select:** pass disabled to _renderButton ([#3468](https://github.com/skbkontur/retail-ui/issues/3468)) ([bc4cac9](https://github.com/skbkontur/retail-ui/commit/bc4cac9444667bc10f499fec417cd67cc1081075))
13
+ * **validations:** program validation on multiple fields ([#3454](https://github.com/skbkontur/retail-ui/issues/3454)) ([8317e0b](https://github.com/skbkontur/retail-ui/commit/8317e0baac36346a15cfff7477f4b482430a007d))
14
+
15
+
16
+
17
+
18
+
6
19
  ## [4.25.1](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.25.0...@skbkontur/react-ui@4.25.1) (2024-06-17)
7
20
 
8
21
  **Note:** Version bump only for package @skbkontur/react-ui
@@ -28,18 +28,6 @@ export interface CalendarProps extends CommonProps {
28
28
  * Дата задаётся в формате `dd.mm.yyyy`
29
29
  */
30
30
  minDate?: string;
31
- /**
32
- * Задаёт начальную дату периода
33
- *
34
- * Дата задаётся в формате `dd.mm.yyyy`
35
- */
36
- periodStartDate?: string;
37
- /**
38
- * Задаёт конечную дату периода
39
- *
40
- * Дата задаётся в формате `dd.mm.yyyy`
41
- */
42
- periodEndDate?: string;
43
31
  /**
44
32
  * Функция для определения праздничных дней
45
33
  * @default (_day, isWeekend) => isWeekend
@@ -87,18 +87,6 @@ var _CalendarDay = require("./CalendarDay");var _class, _class2, _temp;
87
87
 
88
88
 
89
89
 
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
90
 
103
91
 
104
92
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Calendar.tsx"],"names":["CalendarDataTids","root","month","dayCell","headerMonth","monthSelectMobile","headerYear","yearSelectMobile","Calendar","rootNode","formatDate","date","year","InternalDate","setComponents","toString","withPad","props","getProps","defaultProps","animation","touchStartY","scrollToMonth","inProgress","finish","Promise","r","globalObject","setTimeout","minDate","getDateInNativeFormat","maxDate","currentMonth","state","months","diffInMonths","scrollTo","maxMonthsToAdd","theme","MAX_MONTHS_TO_APPEND_ON_SCROLL","onEnd","setState","CalendarUtils","getMonths","scrollPosition","isYearChanges","Math","abs","monthsToPrependCount","min","monthsToPrepend","Array","from","length","_","index","MonthViewModel","create","yearChanges","isFirstInYear","isLastInYear","concat","getMonthsHeight","targetPosition","getHeight","monthsToAppendCount","monthsToAppend","slice","handleMonthChange","visibleMonths","changeInfo","getMonthInHumanFormat","onMonthChange","getViewModel","item","renderMain","monthsForRender","getVisibleMonths","wrapperStyle","height","WRAPPER_HEIGHT","context","value","isHoliday","renderDay","today","getTodayDate","onDateClick","handleDateClick","setRootNode","refRoot","styles","wrapper","map","renderMonth","separator","element","isMobile","addEventListener","handleTouchStart","throttledHandleTouchMove","handleWheel","passive","removeEventListener","dateShape","InternalDateTransformer","dateToHumanString","onValueChange","handleMonthYearChange","executeAnimations","pixelY","calculateScrollPosition","scrollTarget","handleWheelEnd","animate","deltaY","applyDelta","CalendarScrollEvents","emit","event","TouchEvent","clientY","targetTouches","handleTouchMove","changedTouches","WheelEvent","preventDefault","wheelEndTimeout","clearTimeout","scrollToNearestWeek","scrollDirection","thresholdHeight","MONTH_TITLE_OFFSET_HEIGHT","DAY_HEIGHT","amount","pos","scrollAmmount","scrollAmount","minDateShape","maxDateShape","initialDate","getInitialDate","initialMonth","getMonthInNativeFormat","initialYear","componentDidUpdate","prevProps","prevState","parseValue","getComponentsLikeNumber","visibleMonthsModels","prevFirstVisibleMonthModels","prevCurrentMonth","componentWillUnmount","cancel","render","top","toNativeFormat","getMonthPositions","positions","i","position","push","x","filter","isMonthVisible","React","Component","__KONTUR_REACT_UI__","displayName","Day","CalendarDay","MIN_DATE","MIN_MONTH","MIN_YEAR","MAX_DATE","MAX_MONTH","MAX_YEAR","_day","isWeekend"],"mappings":"2uBAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFO,IAAMA,gBAAgB,GAAG;AAC9BC,EAAAA,IAAI,EAAE,gBADwB;AAE9BC,EAAAA,KAAK,EAAE,kBAFuB;AAG9BC,EAAAA,OAAO,EAAE,mBAHqB;AAI9BC,EAAAA,WAAW,EAAE,wBAJiB;AAK9BC,EAAAA,iBAAiB,EAAE,8BALW;AAM9BC,EAAAA,UAAU,EAAE,uBANkB;AAO9BC,EAAAA,gBAAgB,EAAE,6BAPY,EAAzB,C;;;;;AAYP;AACA;AACA,G;;AAEaC,Q,OADZC,kB;;;;;;AAOgBC,EAAAA,U,GAAf,oBAA0BC,IAA1B,EAAwCT,KAAxC,EAAuDU,IAAvD,EAAqE;AACnE,WAAO,IAAIC,0BAAJ,GAAmBC,aAAnB,CAAiC,EAAEH,IAAI,EAAJA,IAAF,EAAQT,KAAK,EAALA,KAAR,EAAeU,IAAI,EAAJA,IAAf,EAAjC,EAAwDG,QAAxD,CAAiE,EAAEC,OAAO,EAAE,IAAX,EAAjE,CAAP;AACD,G;;;;;;;;;;;;;;;;;AAiBD,oBAAYC,MAAZ,EAAkC;AAChC,wCAAMA,MAAN,UADgC,MAT1BC,QAS0B,GATf,0CAAkBV,QAAQ,CAACW,YAA3B,CASe,OAJ1BC,SAI0B,GAJd,2BAIc,OAH1BC,WAG0B,GAHM,IAGN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsE3BC,IAAAA,aAtE2B,gHAsEX,iBAAOpB,KAAP,EAAsBU,IAAtB;AACjB,sBAAKQ,SAAL,CAAeG,UAAf,EADiB;AAEnB,sBAAKH,SAAL,CAAeI,MAAf;AACA;AAHmB,yCAIb,IAAIC,OAAJ,CAAY,UAACC,CAAD,UAAOC,2BAAaC,UAAb,CAAwBF,CAAxB,EAA2B,CAA3B,CAAP,EAAZ,CAJa;;;AAOfG,gBAAAA,OAPe,GAOL,MAAKC,qBAAL,CAA2B,MAAKZ,QAAL,GAAgBW,OAA3C,CAPK;AAQfE,gBAAAA,OARe,GAQL,MAAKD,qBAAL,CAA2B,MAAKZ,QAAL,GAAgBa,OAA3C,CARK;;AAUjBF,gBAAAA,OAAO,IAAI,kCAAUA,OAAV,EAAmB,+BAAO,EAAP,EAAW3B,KAAX,EAAkBU,IAAlB,CAAnB,CAVM;AAWnB,sBAAKU,aAAL,CAAmBO,OAAO,CAAC3B,KAA3B,EAAkC2B,OAAO,CAACjB,IAA1C,EAXmB;;;;AAejBmB,gBAAAA,OAAO,IAAI,+BAAOA,OAAP,EAAgB,+BAAO,CAAP,EAAU7B,KAAV,EAAiBU,IAAjB,CAAhB,CAfM;AAgBnB,sBAAKU,aAAL,CAAmBS,OAAO,CAAC7B,KAA3B,EAAkC6B,OAAO,CAACnB,IAA1C,EAhBmB;;;;AAoBfoB,gBAAAA,YApBe,GAoBA,MAAKC,KAAL,CAAWC,MAAX,CAAkB,CAAlB,CApBA;AAqBfC,gBAAAA,YArBe,GAqBAH,YAAY,CAAC9B,KAAb,GAAqB8B,YAAY,CAACpB,IAAb,GAAoB,EAAzC,GAA8CV,KAA9C,GAAsDU,IAAI,GAAG,EArB7D;;AAuBjBuB,gBAAAA,YAAY,KAAK,CAvBA;AAwBnB,sBAAKC,QAAL,CAAc,CAAd,EAxBmB;;;;AA4BfC,gBAAAA,cA5Be,GA4BE,yBAAY,MAAKC,KAAjB,EAAwBC,8BA5B1B;;AA8BfC,gBAAAA,KA9Be,GA8BP,SAARA,KAAQ,GAAM;AAClB,wBAAKC,QAAL,CAAc;AACZP,oBAAAA,MAAM,EAAEQ,aAAa,CAACC,SAAd,CAAwBzC,KAAxB,EAA+BU,IAA/B,CADI;AAEZgC,oBAAAA,cAAc,EAAE,CAFJ,EAAd;;AAID,iBAnCoB;;AAqCfC,gBAAAA,aArCe,GAqCC,SAAhBA,aAAgB,CAACZ,KAAD,EAA0B;AAC9C;AACEA,oBAAAA,KAAK,CAACC,MAAN,CAAa,CAAb,EAAgBtB,IAAhB,KAAyBA,IAAzB;AACA;AACA;AACA;AACAkC,oBAAAA,IAAI,CAACC,GAAL,CAASZ,YAAT,IAAyB,CAL3B;;AAOD,iBA7CoB;;AA+CrB;AACA;AACA,oBAAIA,YAAY,GAAG,CAAnB,EAAsB;AACda,kBAAAA,oBADc,GACSF,IAAI,CAACG,GAAL,CAASH,IAAI,CAACC,GAAL,CAASZ,YAAT,IAAyB,CAAlC,EAAqCE,cAArC,CADT;AAEda,kBAAAA,eAFc,GAEIC,KAAK,CAACC,IAAN,CAAW,EAAEC,MAAM,EAAEL,oBAAV,EAAX,EAA6C,UAACM,CAAD,EAAIC,KAAJ,EAAc;AACjF,2BAAOC,+BAAeC,MAAf,CAAsBvD,KAAK,GAAGqD,KAA9B,EAAqC3C,IAArC,CAAP;AACD,mBAFuB,CAFJ;AAKpB,wBAAK6B,QAAL;AACE,4BAACR,KAAD,EAAW;AACT,wBAAMyB,WAAW,GAAGb,aAAa,CAACZ,KAAD,CAAjC;AACA,wBAAIyB,WAAJ,EAAiB;AACf;AACA;AACAzB,sBAAAA,KAAK,CAACC,MAAN,CAAa,CAAb,EAAgByB,aAAhB,GAAgC,IAAhC;AACA,0BAAIT,eAAe,CAACG,MAApB,EAA4B;AAC1B;AACAH,wBAAAA,eAAe,CAACA,eAAe,CAACG,MAAhB,GAAyB,CAA1B,CAAf,CAA4CO,YAA5C,GAA2D,IAA3D;AACD;AACF;AACD,2BAAO;AACL1B,sBAAAA,MAAM,EAAEgB,eAAe,CAACW,MAAhB,CAAuB5B,KAAK,CAACC,MAA7B,CADH;AAELU,sBAAAA,cAAc,EAAE,CAACF,aAAa,CAACoB,eAAd,CAA8BZ,eAA9B,EAA+C,MAAKZ,KAApD,CAFZ,EAAP;;AAID,mBAhBH;AAiBE,8BAAM;AACJ,wBAAMyB,cAAc,GAAG,MAAK9B,KAAL,CAAWC,MAAX,CAAkB,CAAlB,EAAqB8B,SAArB,CAA+B,MAAK1B,KAApC,CAAvB;AACA,0BAAKF,QAAL,CAAc2B,cAAd,EAA8BvB,KAA9B;AACD,mBApBH;;AAsBD;;AAED;AACA;AACA,oBAAIL,YAAY,GAAG,CAAnB,EAAsB;AACd8B,kBAAAA,mBADc,GACQnB,IAAI,CAACG,GAAL,CAASH,IAAI,CAACC,GAAL,CAASZ,YAAT,CAAT,EAAiCE,cAAjC,CADR;AAEd6B,kBAAAA,cAFc,GAEGf,KAAK,CAACC,IAAN,CAAW,EAAEC,MAAM,EAAEY,mBAAV,EAAX,EAA4C,UAACX,CAAD,EAAIC,KAAJ,EAAc;AAC/E,2BAAOC,+BAAeC,MAAf,CAAsBvD,KAAK,GAAGqD,KAAR,GAAgBU,mBAAhB,GAAsC,CAA5D,EAA+DrD,IAA/D,CAAP;AACD,mBAFsB,CAFH;AAKpB,wBAAK6B,QAAL;AACE,4BAACR,KAAD,EAAW;AACT,wBAAIY,aAAa,CAACZ,KAAD,CAAjB,EAA0B;AACxB;AACA;AACAA,sBAAAA,KAAK,CAACC,MAAN,CAAaD,KAAK,CAACC,MAAN,CAAamB,MAAb,GAAsB,CAAnC,EAAsCO,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,EAAEzB,MAAM,EAAED,KAAK,CAACC,MAAN,CAAa2B,MAAb,CAAoBK,cAApB,CAAV,EAAP;AACD,mBAZH;AAaE,8BAAM;AACJ,wBAAMH,cAAc,GAAG,CAAC,CAAD,GAAKrB,aAAa,CAACoB,eAAd,CAA8B,MAAK7B,KAAL,CAAWC,MAAX,CAAkBiC,KAAlB,CAAwB,CAAxB,EAA2B,CAAC,CAA5B,CAA9B,EAA8D,MAAK7B,KAAnE,CAA5B;AACA,0BAAKF,QAAL,CAAc2B,cAAd,EAA8BvB,KAA9B;AACD,mBAhBH;;AAkBD,iBAvGoB,yDAtEW;;;AAgL1B4B,IAAAA,iBAhL0B,GAgLN,UAACC,aAAD,EAA2C;AACrE,UAAMrC,YAAY,GAAGqC,aAAa,CAAC,CAAD,CAAlC;AACA,UAAMC,UAAU,GAAG;AACjBpE,QAAAA,KAAK,EAAEwC,aAAa,CAAC6B,qBAAd,CAAoCvC,YAAY,CAAC9B,KAAjD,CADU;AAEjBU,QAAAA,IAAI,EAAEoB,YAAY,CAACpB,IAFF,EAAnB;;;AAKA,YAAKK,KAAL,CAAWuD,aAAX,0BAAKvD,KAAL,CAAWuD,aAAX,CAA2BF,UAA3B;AACD,KAxLiC;;AA0L1BG,IAAAA,YA1L0B,GA0LX,UAACC,IAAD,UAAoDA,IAAI,CAAC,CAAD,CAAxD,EA1LW;;AA4L1BC,IAAAA,UA5L0B,GA4Lb,YAAM;AACzB,UAAMC,eAAe,GAAG,MAAKC,gBAAL,CAAsB,MAAK5C,KAA3B,CAAxB;AACA,UAAM6C,YAAY,GAAG,EAAEC,MAAM,EAAE,yBAAY,MAAKzC,KAAjB,EAAwB0C,cAAlC,EAArB;;AAEA,UAAM/D,KAAK,GAAG,MAAKC,QAAL,EAAd;;AAEA,UAAM+D,OAA6B,GAAG;AACpCC,QAAAA,KAAK,EAAE,MAAKpD,qBAAL,CAA2Bb,KAAK,CAACiE,KAAjC,CAD6B;AAEpCrD,QAAAA,OAAO,EAAE,MAAKC,qBAAL,CAA2Bb,KAAK,CAACY,OAAjC,CAF2B;AAGpCE,QAAAA,OAAO,EAAE,MAAKD,qBAAL,CAA2Bb,KAAK,CAACc,OAAjC,CAH2B;AAIpCoD,QAAAA,SAAS,EAAElE,KAAK,CAACkE,SAJmB;AAKpCC,QAAAA,SAAS,EAAEnE,KAAK,CAACmE,SALmB;AAMpCC,QAAAA,KAAK,EAAE3C,aAAa,CAAC4C,YAAd,EAN6B;AAOpCC,QAAAA,WAAW,EAAE,MAAKC,eAPkB,EAAtC;;;AAUA;AACE,qCAAC,4BAAD,2BAAe,WAAW,EAAE,MAAKC,WAAjC,IAAkDxE,KAAlD;AACE,8CAAK,GAAG,EAAE,MAAKyE,OAAf,EAAwB,YAAU1F,gBAAgB,CAACC,IAAnD,EAAyD,SAAS,EAAE,iBAAG0F,iBAAO1F,IAAP,CAAY,MAAKqC,KAAjB,CAAH,CAApE;AACE,8CAAK,KAAK,EAAEwC,YAAZ,EAA0B,SAAS,EAAEa,iBAAOC,OAAP,EAArC;AACE,qCAAC,gCAAD,CAAiB,QAAjB,IAA0B,KAAK,EAAEX,OAAjC;AACGL,QAAAA,eAAe,CAACiB,GAAhB,CAAoB,MAAKC,WAAzB,8CADH,CADF,CADF;;;AAME,8CAAK,SAAS,EAAEH,iBAAOI,SAAP,CAAiB,MAAKzD,KAAtB,CAAhB,GANF,CADF,CADF;;;;AAYD,KAxNiC;;AA0N1BoD,IAAAA,OA1N0B,GA0NhB,UAACM,OAAD,EAAiC;AACjD,UAAI,CAAC,MAAK/F,IAAN,IAAc+F,OAAlB,EAA2B;AACzB,YAAIC,gBAAJ,EAAc;AACZD,UAAAA,OAAO,CAACE,gBAAR,CAAyB,YAAzB,EAAuC,MAAKC,gBAA5C;AACAH,UAAAA,OAAO,CAACE,gBAAR,CAAyB,WAAzB,EAAsC,MAAKE,wBAA3C;AACD,SAHD,MAGO;AACLJ,UAAAA,OAAO,CAACE,gBAAR,CAAyB,OAAzB,EAAkC,MAAKG,WAAvC,EAAoD,EAAEC,OAAO,EAAE,KAAX,EAApD;AACD;AACF;AACD,UAAI,MAAKrG,IAAL,IAAa,CAAC+F,OAAlB,EAA2B;AACzB,YAAIC,gBAAJ,EAAc;AACZ,gBAAKhG,IAAL,CAAUsG,mBAAV,CAA8B,YAA9B,EAA4C,MAAKJ,gBAAjD;AACA,gBAAKlG,IAAL,CAAUsG,mBAAV,CAA8B,WAA9B,EAA2C,MAAKH,wBAAhD;AACD,SAHD,MAGO;AACL,gBAAKnG,IAAL,CAAUsG,mBAAV,CAA8B,OAA9B,EAAuC,MAAKF,WAA5C;AACD;AACF;AACD,YAAKpG,IAAL,GAAY+F,OAAZ;AACD,KA5OiC;;;;;;;;;;;;;AAyP1BR,IAAAA,eAzP0B,GAyPR,UAACgB,SAAD,EAAkC;AAC1D,UAAMtB,KAAK,GAAGuB,iDAAwBC,iBAAxB,CAA0CF,SAA1C,CAAd;;AAEA,YAAKvF,KAAL,CAAW0F,aAAX,0BAAK1F,KAAL,CAAW0F,aAAX,CAA2BzB,KAA3B;AACD,KA7PiC;;;;;;;;;;;;;;;;;;;;;;;;AAqR1B0B,IAAAA,qBArR0B,GAqRF,UAAC1G,KAAD,EAAgBU,IAAhB,EAAiC;AAC/D,YAAKU,aAAL,CAAmBpB,KAAnB,EAA0BU,IAA1B;AACD,KAvRiC;;AAyR1BiG,IAAAA,iBAzR0B,GAyRN,UAACC,MAAD,EAAoB;AAC9C,YAAKrE,QAAL,CAAc,iBAAgC,KAA7BP,MAA6B,SAA7BA,MAA6B,CAArBU,cAAqB,SAArBA,cAAqB;AAC5C,YAAMmB,cAAc,GAAGrB,aAAa,CAACqE,uBAAd;AACrB7E,QAAAA,MADqB;AAErBU,QAAAA,cAFqB;AAGrBkE,QAAAA,MAHqB;AAIrB,cAAKxE,KAJgB;AAKrBM,QAAAA,cALF;AAMA,eAAO,EAAEoE,YAAY,EAAEjD,cAAhB,EAAP;AACD,OARD,EAQG,MAAKkD,cARR;;AAUA,YAAK7F,SAAL,CAAe8F,OAAf,CAAuBJ,MAAvB,EAA+B,UAACK,MAAD,EAAY;AACzC;AACA,cAAK1E,QAAL,CAAcC,aAAa,CAAC0E,UAAd,CAAyBD,MAAzB,EAAiC,MAAK7E,KAAtC,CAAd;AACD,OAHD;;AAKA+E,MAAAA,oBAAoB,CAACC,IAArB;AACD,KA1SiC;;AA4S1BnB,IAAAA,gBA5S0B,GA4SP,UAACoB,KAAD,EAAkB;AAC3C,UAAI,CAAC,gCAAaA,KAAb,EAAoB5F,2BAAa6F,UAAjC,CAAL,EAAmD;AACjD;AACD;;AAED,UAAMC,OAAO,GAAGF,KAAK,CAACG,aAAN,CAAoB,CAApB,EAAuBD,OAAvC;AACA,YAAKpG,WAAL,GAAmBoG,OAAnB;AACD,KAnTiC;;AAqT1BE,IAAAA,eArT0B,GAqTR,UAACJ,KAAD,EAAkB;AAC1C,UAAI,CAAC,gCAAaA,KAAb,EAAoB5F,2BAAa6F,UAAjC,CAAL,EAAmD;AACjD;AACD;;AAED,UAAQC,OAAR,GAAoBF,KAAK,CAACK,cAAN,CAAqB,CAArB,CAApB,CAAQH,OAAR;;AAEA,UAAMN,MAAM,GAAG,CAAC,MAAK9F,WAAL,IAAoB,CAArB,IAA0BoG,OAAzC;AACA,YAAKpG,WAAL,GAAmBoG,OAAnB;;AAEA,YAAKZ,iBAAL,CAAuBM,MAAvB;AACD,KAhUiC;;AAkU1Bf,IAAAA,wBAlU0B,GAkUC,qBAAS,MAAKuB,eAAd,EAA+B,EAA/B,CAlUD;;AAoU1BtB,IAAAA,WApU0B,GAoUZ,UAACkB,KAAD,EAAkB;AACtC,UAAI,CAAC,gCAAaA,KAAb,EAAoB5F,2BAAakG,UAAjC,CAAL,EAAmD;AACjD;AACD;AACDN,MAAAA,KAAK,CAACO,cAAN;AACA,4BAAmB,8BAAeP,KAAf,CAAnB,CAAQT,MAAR,mBAAQA,MAAR;;AAEA,YAAKD,iBAAL,CAAuBC,MAAvB;AACD,KA5UiC;;AA8U1BG,IAAAA,cA9U0B,GA8UT,YAAM;AAC7B,UAAI,MAAKc,eAAT,EAA0B;AACxBpG,mCAAaqG,YAAb,CAA0B,MAAKD,eAA/B;AACD;AACD,YAAKA,eAAL,GAAuBpG,2BAAaC,UAAb,CAAwB,MAAKqG,mBAA7B,EAAkD,GAAlD,CAAvB;AACD,KAnViC;AAoV1BA,IAAAA,mBApV0B,GAoVJ,YAAM;AAClC,wBAA0C,MAAKhG,KAA/C,CAAQ+E,YAAR,eAAQA,YAAR,CAAsBkB,eAAtB,eAAsBA,eAAtB;;AAEA,UAAMC,eAAe,GAAG,yBAAY,MAAK7F,KAAjB,EAAwB8F,yBAAxB,GAAoD,yBAAY,MAAK9F,KAAjB,EAAwB+F,UAApG;;AAEA,UAAIrB,YAAY,GAAGmB,eAAnB,EAAoC;AAClC,YAAIpE,cAAc,GAAG,CAArB;AACA,YAAImE,eAAe,GAAG,CAAtB,EAAyB;AACvBnE,UAAAA,cAAc,GAAGoE,eAAjB;AACD;;AAED,cAAK1F,QAAL,CAAc,EAAEuE,YAAY,EAAEjD,cAAhB,EAAd,EAAgD,YAAM;AACpD,cAAMuE,MAAM,GAAGtB,YAAY,GAAGjD,cAA9B;AACA,gBAAK3C,SAAL,CAAe8F,OAAf,CAAuBoB,MAAvB,EAA+B,UAACnB,MAAD,EAAY;AACzC;AACA,kBAAK1E,QAAL,CAAcC,aAAa,CAAC0E,UAAd,CAAyBD,MAAzB,EAAiC,MAAK7E,KAAtC,CAAd;AACD,WAHD;AAID,SAND;AAOD;AACF,KAvWiC;;AAyW1BF,IAAAA,QAzW0B,GAyWf,UAACmG,GAAD,EAAc/F,KAAd,EAAqC;AACtD,UAAMgG,aAAa,GAAGD,GAAG,GAAG,MAAKtG,KAAL,CAAWW,cAAvC;AACA,aAAO,MAAK6F,YAAL,CAAkBD,aAAlB,EAAiChG,KAAjC,CAAP;AACD,KA5WiC;;AA8W1BiG,IAAAA,YA9W0B,GA8WX,UAACD,aAAD,EAAwBhG,KAAxB,EAA+C;AACpE,aAAO,MAAKpB,SAAL,CAAe8F,OAAf;AACLsB,MAAAA,aADK;AAEL,gBAACrB,MAAD,EAAY;AACV,cAAK1E,QAAL,CAAc,sBAAGG,cAAH,SAAGA,cAAH,QAAyB;AACrCA,YAAAA,cAAc,EAAEA,cAAc,GAAGuE,MADI,EAAzB,EAAd;;AAGD,OANI;AAOL3E,MAAAA,KAPK,CAAP;;AASD,KAxXiC,CAGhC,qBAAoC,MAAKtB,QAAL,EAApC,CAAQW,QAAR,kBAAQA,OAAR,CAAiBE,QAAjB,kBAAiBA,OAAjB,CAA0BmD,MAA1B,kBAA0BA,KAA1B,CAEA,IAAMwD,YAAY,GAAG,MAAK5G,qBAAL,CAA2BD,QAA3B,CAArB,CACA,IAAM8G,YAAY,GAAG,MAAK7G,qBAAL,CAA2BC,QAA3B,CAArB,CACA,IAAMyE,UAAS,GAAG,MAAK1E,qBAAL,CAA2BoD,MAA3B,CAAlB,CAEA,IAAMG,KAAK,GAAG3C,aAAa,CAAC4C,YAAd,EAAd,CACA,IAAMsD,WAAW,GAAGlG,aAAa,CAACmG,cAAd,CAA6B,EAC/CxD,KAAK,EAALA,KAD+C,EAE/C1E,IAAI,EAAE6F,UAFyC,EAG/C3E,OAAO,EAAE6G,YAHsC,EAI/C3G,OAAO,EAAE4G,YAJsC,EAA7B,CAApB,CAOA,IAAMG,YAAY,GAAG,MAAK7H,KAAL,CAAW6H,YAAX,GACjBpG,aAAa,CAACqG,sBAAd,CAAqC,MAAK9H,KAAL,CAAW6H,YAAhD,CADiB,GAEjBF,WAAW,CAAC1I,KAFhB,CAGA,IAAM8I,WAAW,4BAAG,MAAK/H,KAAL,CAAW+H,WAAd,oCAA6BJ,WAAW,CAAChI,IAA1D,CAEA,MAAKqB,KAAL,GAAa,EACXW,cAAc,EAAE,CADL,EAEXV,MAAM,EAAEQ,aAAa,CAACC,SAAd,CAAwBmG,YAAxB,EAAsCE,WAAtC,CAFG,EAGXd,eAAe,EAAE,CAHN,EAIXlB,YAAY,EAAE,CAJH,EAAb,CAtBgC,aA4BjC,C,uCAEMiC,kB,GAAP,4BAA0BC,SAA1B,EAA8DC,SAA9D,EAAwG,CACtG,kBAAiC,KAAKlI,KAAtC,CAAQiE,KAAR,eAAQA,KAAR,CAAeV,aAAf,eAAeA,aAAf,CACA,IAAIU,KAAK,IAAI,CAAC,2BAAaA,KAAb,EAAoBgE,SAAS,CAAChE,KAA9B,CAAd,EAAoD,CAClD,IAAMvE,KAAI,GAAG,IAAIE,0BAAJ,GAAmBuI,UAAnB,CAA8BlE,KAA9B,EAAqCmE,uBAArC,EAAb,CACA,KAAK/H,aAAL,CAAmBX,KAAI,CAACT,KAAL,GAAa,CAAhC,EAAmCS,KAAI,CAACC,IAAxC,EACD,CAED,IAAI4D,aAAJ,EAAmB,CACjB,IAAM8E,mBAAmB,GAAG,KAAKzE,gBAAL,CAAsB,KAAK5C,KAA3B,EAAkC4D,GAAlC,CAAsC,KAAKpB,YAA3C,CAA5B,CACA,IAAM8E,2BAA2B,GAAG,KAAK1E,gBAAL,CAAsBsE,SAAtB,EAAiCtD,GAAjC,CAAqC,KAAKpB,YAA1C,CAApC,CACA,IAAMzC,YAAY,GAAGsH,mBAAmB,CAAC,CAAD,CAAnB,CAAuBpJ,KAA5C,CACA,IAAMsJ,gBAAgB,GAAGD,2BAA2B,CAAC,CAAD,CAA3B,CAA+BrJ,KAAxD,CAEA,IAAI8B,YAAY,KAAKwH,gBAArB,EAAuC,CACrC,KAAKpF,iBAAL,CAAuBkF,mBAAvB,EACD,CACF,CACF,C,QAEMG,oB,GAAP,gCAA8B,CAC5B,IAAI,KAAKrI,SAAL,CAAeG,UAAf,EAAJ,EAAiC,CAC/B,KAAKH,SAAL,CAAesI,MAAf,GACD,CACF,C,QAEMC,M,GAAP,kBAAgB,mBACd,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACrH,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACqC,UAAL,EAAP,CACD,CAJH,CADF,CAQD,C,CAED;AACF;AACA;AACA,K,QAyKUmB,W,GAAR,4BAA4D,KAAvC8D,GAAuC,YAAlC1J,KAAkC,YAC1D,oBACE,6BAAC,YAAD,IACE,GAAG,EAAEA,KAAK,CAACA,KAAN,GAAc,GAAd,GAAoBA,KAAK,CAACU,IADjC,EAEE,GAAG,EAAEgJ,GAFP,EAGE,KAAK,EAAE1J,KAHT,EAIE,iBAAiB,EAAE,KAAK0G,qBAJ1B,GADF,CAQD,C,QAQO9E,qB,GAAR,+BAA8BnB,IAA9B,EAAsD,CACpD,OAAO,IAAIE,0BAAJ,GAAmBuI,UAAnB,CAA8BzI,IAA9B,EAAoCkJ,cAApC,EAAP,CACD,C,QAEOC,iB,GAAR,2BAA0B5H,MAA1B,EAAoDU,cAApD,EAA4E,CAC1E,IAAMmH,SAAS,GAAG,CAACnH,cAAc,GAAGV,MAAM,CAAC,CAAD,CAAN,CAAU8B,SAAV,CAAoB,KAAK1B,KAAzB,CAAlB,CAAlB,CACA,KAAK,IAAI0H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG9H,MAAM,CAACmB,MAA3B,EAAmC2G,CAAC,EAApC,EAAwC,CACtC,IAAMC,QAAQ,GAAGF,SAAS,CAACC,CAAC,GAAG,CAAL,CAAT,GAAmB9H,MAAM,CAAC8H,CAAC,GAAG,CAAL,CAAN,CAAchG,SAAd,CAAwB,KAAK1B,KAA7B,CAApC,CACAyH,SAAS,CAACG,IAAV,CAAeD,QAAf,EACD,CACD,OAAOF,SAAP,CACD,C,QAEOlF,gB,GAAR,0BAAyB5C,KAAzB,EAA0F,mBACxF,IAAQC,MAAR,GAAmCD,KAAnC,CAAQC,MAAR,CAAgBU,cAAhB,GAAmCX,KAAnC,CAAgBW,cAAhB,CACA,IAAMmH,SAAS,GAAG,KAAKD,iBAAL,CAAuB5H,MAAvB,EAA+BU,cAA/B,CAAlB,CAEA,OAAOV,MAAM,CACV2D,GADI,CAC0B,UAACsE,CAAD,EAAIH,CAAJ,UAAU,CAACD,SAAS,CAACC,CAAD,CAAV,EAAeG,CAAf,CAAV,EAD1B,EAEJC,MAFI,CAEG,sBAAER,GAAF,YAAO1J,KAAP,mBAAkBwC,aAAa,CAAC2H,cAAd,CAA6BT,GAA7B,EAAkC1J,KAAlC,EAAyC,MAAI,CAACoC,KAA9C,CAAlB,EAFH,CAAP,CAGD,C,mBA5S2BgI,eAAMC,S,WACpBC,mB,GAAsB,U,UACtBC,W,GAAc,U,UAEdC,G,GAAMC,wB,UAMNxJ,Y,GAA6B,EACzCU,OAAO,EAAErB,OAAQ,CAACE,UAAT,CAAoBkK,mBAApB,EAA8BC,oBAA9B,EAAyCC,mBAAzC,CADgC,EAEzC/I,OAAO,EAAEvB,OAAQ,CAACE,UAAT,CAAoBqK,mBAApB,EAA8BC,oBAA9B,EAAyCC,mBAAzC,CAFgC,EAGzC9F,SAAS,EAAE,mBAAC+F,IAAD,EAAeC,SAAf,UAAsCA,SAAtC,EAH8B,E","sourcesContent":["import React from 'react';\nimport normalizeWheel from 'normalize-wheel';\nimport throttle from 'lodash.throttle';\nimport shallowEqual from 'shallowequal';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { cx } from '../../lib/theming/Emotion';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { MAX_DATE, MAX_MONTH, MAX_YEAR, MIN_DATE, MIN_MONTH, MIN_YEAR } from '../../lib/date/constants';\nimport { Nullable, Range } 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';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\n\nimport { themeConfig } from './config';\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';\nimport * as CalendarUtils from './CalendarUtils';\nimport { CalendarContext, CalendarContextProps } from './CalendarContext';\nimport { CalendarDay, CalendarDayProps } from './CalendarDay';\n\nexport interface CalendarProps extends CommonProps {\n /**\n * Вызывается при изменении `value`\n *\n * В аргументе хранится дата в формате `dd.mm.yyyy`\n */\n onValueChange?: (date: string) => void;\n /**\n * Задаёт текущую дату\n *\n * Дата задаётся в формате `dd.mm.yyyy`\n */\n value: Nullable<string>;\n /**\n * Задаёт максимальную возможную дату\n *\n * Дата задаётся в формате `dd.mm.yyyy`\n */\n maxDate?: string;\n /**\n * Задаёт минимальную возможную дату\n *\n * Дата задаётся в формате `dd.mm.yyyy`\n */\n minDate?: string;\n /**\n * Задаёт начальную дату периода\n *\n * Дата задаётся в формате `dd.mm.yyyy`\n */\n periodStartDate?: string;\n /**\n * Задаёт конечную дату периода\n *\n * Дата задаётся в формате `dd.mm.yyyy`\n */\n periodEndDate?: string;\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {string} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday?: (day: string, isWeekend: boolean) => boolean;\n /**\n * Позволяет задать начальный месяц\n */\n initialMonth?: Range<1, 13>;\n /**\n * Позволяет задать начальный год\n */\n initialYear?: number;\n /**\n * Метод отрисовки дат в календаре\n * @default (props: CalendarDayProps) => <CalendarDay {...props} />\n * @param {CalendarDayProps} props\n *\n * @returns {ReactElement} Элемент, который отрисовывает контент числа месяца.\n */\n renderDay?: (props: CalendarDayProps) => React.ReactElement;\n\n /**\n * Вызывается при каждом изменении месяца\n * @param {CalendarMonthChangeInfo} changeInfo - информация о изменении отображаемого месяца, где\n * `month: number` - номер текущего отображаемого месяца от 1 до 12,\n * `year: number` - отображаемый год,\n */\n onMonthChange?: (changeInfo: CalendarMonthChangeInfo) => void;\n}\n\nexport interface CalendarState {\n scrollPosition: number;\n months: MonthViewModel[];\n scrollDirection: number;\n scrollTarget: number;\n}\n\nexport interface CalendarMonthChangeInfo {\n month: number;\n year: number;\n}\n\nexport const CalendarDataTids = {\n root: 'Calendar__root',\n month: 'MonthView__month',\n dayCell: 'DayCellView__root',\n headerMonth: 'MonthView__headerMonth',\n monthSelectMobile: 'MonthView__monthSelectMobile',\n headerYear: 'MonthView__headerYear',\n yearSelectMobile: 'MonthView__yearSelectMobile',\n} as const;\n\ntype DefaultProps = Required<Pick<CalendarProps, 'minDate' | 'maxDate' | 'isHoliday'>>;\n\n/**\n * Компонент календаря из [DatePicker](https://tech.skbkontur.ru/react-ui/#/Components/DatePicker)'а\n */\n@rootNode\nexport class Calendar extends React.Component<CalendarProps, CalendarState> {\n public static __KONTUR_REACT_UI__ = 'Calendar';\n public static displayName = 'Calendar';\n\n public static Day = CalendarDay;\n\n private static formatDate(date: number, month: number, year: number) {\n return new InternalDate().setComponents({ date, month, year }).toString({ withPad: true });\n }\n\n public static defaultProps: DefaultProps = {\n minDate: Calendar.formatDate(MIN_DATE, MIN_MONTH, MIN_YEAR),\n maxDate: Calendar.formatDate(MAX_DATE, MAX_MONTH, MAX_YEAR),\n isHoliday: (_day: string, isWeekend: boolean) => isWeekend,\n };\n\n private getProps = createPropsGetter(Calendar.defaultProps);\n\n private theme!: Theme;\n private wheelEndTimeout: SafeTimer;\n private root: Nullable<HTMLElement>;\n private animation = animation();\n private touchStartY: Nullable<number> = null;\n private setRootNode!: TSetRootNode;\n\n constructor(props: CalendarProps) {\n super(props);\n\n const { minDate, maxDate, value } = this.getProps();\n\n const minDateShape = this.getDateInNativeFormat(minDate);\n const maxDateShape = this.getDateInNativeFormat(maxDate);\n const dateShape = this.getDateInNativeFormat(value);\n\n const today = CalendarUtils.getTodayDate();\n const initialDate = CalendarUtils.getInitialDate({\n today,\n date: dateShape,\n minDate: minDateShape,\n maxDate: maxDateShape,\n });\n\n const initialMonth = this.props.initialMonth\n ? CalendarUtils.getMonthInNativeFormat(this.props.initialMonth)\n : initialDate.month;\n const initialYear = this.props.initialYear ?? initialDate.year;\n\n this.state = {\n scrollPosition: 0,\n months: CalendarUtils.getMonths(initialMonth, initialYear),\n scrollDirection: 1,\n scrollTarget: 0,\n };\n }\n\n public componentDidUpdate(prevProps: Readonly<CalendarProps>, prevState: Readonly<CalendarState>): void {\n const { value, onMonthChange } = this.props;\n if (value && !shallowEqual(value, prevProps.value)) {\n const date = new InternalDate().parseValue(value).getComponentsLikeNumber();\n this.scrollToMonth(date.month - 1, date.year);\n }\n\n if (onMonthChange) {\n const visibleMonthsModels = this.getVisibleMonths(this.state).map(this.getViewModel);\n const prevFirstVisibleMonthModels = this.getVisibleMonths(prevState).map(this.getViewModel);\n const currentMonth = visibleMonthsModels[0].month;\n const prevCurrentMonth = prevFirstVisibleMonthModels[0].month;\n\n if (currentMonth !== prevCurrentMonth) {\n this.handleMonthChange(visibleMonthsModels);\n }\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 * Прокручивает календарь до переданной даты\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) => globalObject.setTimeout(r, 0));\n }\n\n const minDate = this.getDateInNativeFormat(this.getProps().minDate);\n const maxDate = this.getDateInNativeFormat(this.getProps().maxDate);\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\n const isYearChanges = (state: CalendarState) => {\n return (\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 };\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 return 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 return 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 handleMonthChange = (visibleMonths: MonthViewModel[]): void => {\n const currentMonth = visibleMonths[0];\n const changeInfo = {\n month: CalendarUtils.getMonthInHumanFormat(currentMonth.month),\n year: currentMonth.year,\n };\n\n this.props.onMonthChange?.(changeInfo);\n };\n\n private getViewModel = (item: [number, MonthViewModel]): MonthViewModel => item[1];\n\n private renderMain = () => {\n const monthsForRender = this.getVisibleMonths(this.state);\n const wrapperStyle = { height: themeConfig(this.theme).WRAPPER_HEIGHT };\n\n const props = this.getProps();\n\n const context: CalendarContextProps = {\n value: this.getDateInNativeFormat(props.value),\n minDate: this.getDateInNativeFormat(props.minDate),\n maxDate: this.getDateInNativeFormat(props.maxDate),\n isHoliday: props.isHoliday,\n renderDay: props.renderDay,\n today: CalendarUtils.getTodayDate(),\n onDateClick: this.handleDateClick,\n };\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...props}>\n <div ref={this.refRoot} data-tid={CalendarDataTids.root} className={cx(styles.root(this.theme))}>\n <div style={wrapperStyle} className={styles.wrapper()}>\n <CalendarContext.Provider value={context}>\n {monthsForRender.map(this.renderMonth, this)}\n </CalendarContext.Provider>\n </div>\n <div className={styles.separator(this.theme)} />\n </div>\n </CommonWrapper>\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 onMonthYearChange={this.handleMonthYearChange}\n />\n );\n }\n\n private handleDateClick = (dateShape: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToHumanString(dateShape);\n\n this.props.onValueChange?.(value);\n };\n\n private getDateInNativeFormat(date: Nullable<string>) {\n return new InternalDate().parseValue(date).toNativeFormat();\n }\n\n private getMonthPositions(months: MonthViewModel[], scrollPosition: number) {\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 getVisibleMonths(state: Readonly<CalendarState>): Array<[number, MonthViewModel]> {\n const { months, scrollPosition } = state;\n const positions = this.getMonthPositions(months, scrollPosition);\n\n return months\n .map<[number, MonthViewModel]>((x, i) => [positions[i], x])\n .filter(([top, month]) => CalendarUtils.isMonthVisible(top, month, this.theme));\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 (!isInstanceOf(event, globalObject.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 (!isInstanceOf(event, globalObject.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 (!isInstanceOf(event, globalObject.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 globalObject.clearTimeout(this.wheelEndTimeout);\n }\n this.wheelEndTimeout = globalObject.setTimeout(this.scrollToNearestWeek, 300);\n };\n private scrollToNearestWeek = () => {\n const { scrollTarget, scrollDirection } = this.state;\n\n const thresholdHeight = themeConfig(this.theme).MONTH_TITLE_OFFSET_HEIGHT + themeConfig(this.theme).DAY_HEIGHT;\n\n if (scrollTarget < thresholdHeight) {\n let targetPosition = 0;\n if (scrollDirection < 0) {\n targetPosition = thresholdHeight;\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 },\n onEnd,\n );\n };\n}\n"]}
1
+ {"version":3,"sources":["Calendar.tsx"],"names":["CalendarDataTids","root","month","dayCell","headerMonth","monthSelectMobile","headerYear","yearSelectMobile","Calendar","rootNode","formatDate","date","year","InternalDate","setComponents","toString","withPad","props","getProps","defaultProps","animation","touchStartY","scrollToMonth","inProgress","finish","Promise","r","globalObject","setTimeout","minDate","getDateInNativeFormat","maxDate","currentMonth","state","months","diffInMonths","scrollTo","maxMonthsToAdd","theme","MAX_MONTHS_TO_APPEND_ON_SCROLL","onEnd","setState","CalendarUtils","getMonths","scrollPosition","isYearChanges","Math","abs","monthsToPrependCount","min","monthsToPrepend","Array","from","length","_","index","MonthViewModel","create","yearChanges","isFirstInYear","isLastInYear","concat","getMonthsHeight","targetPosition","getHeight","monthsToAppendCount","monthsToAppend","slice","handleMonthChange","visibleMonths","changeInfo","getMonthInHumanFormat","onMonthChange","getViewModel","item","renderMain","monthsForRender","getVisibleMonths","wrapperStyle","height","WRAPPER_HEIGHT","context","value","isHoliday","renderDay","today","getTodayDate","onDateClick","handleDateClick","setRootNode","refRoot","styles","wrapper","map","renderMonth","separator","element","isMobile","addEventListener","handleTouchStart","throttledHandleTouchMove","handleWheel","passive","removeEventListener","dateShape","InternalDateTransformer","dateToHumanString","onValueChange","handleMonthYearChange","executeAnimations","pixelY","calculateScrollPosition","scrollTarget","handleWheelEnd","animate","deltaY","applyDelta","CalendarScrollEvents","emit","event","TouchEvent","clientY","targetTouches","handleTouchMove","changedTouches","WheelEvent","preventDefault","wheelEndTimeout","clearTimeout","scrollToNearestWeek","scrollDirection","thresholdHeight","MONTH_TITLE_OFFSET_HEIGHT","DAY_HEIGHT","amount","pos","scrollAmmount","scrollAmount","minDateShape","maxDateShape","initialDate","getInitialDate","initialMonth","getMonthInNativeFormat","initialYear","componentDidUpdate","prevProps","prevState","parseValue","getComponentsLikeNumber","visibleMonthsModels","prevFirstVisibleMonthModels","prevCurrentMonth","componentWillUnmount","cancel","render","top","toNativeFormat","getMonthPositions","positions","i","position","push","x","filter","isMonthVisible","React","Component","__KONTUR_REACT_UI__","displayName","Day","CalendarDay","MIN_DATE","MIN_MONTH","MIN_YEAR","MAX_DATE","MAX_MONTH","MAX_YEAR","_day","isWeekend"],"mappings":"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","sourcesContent":["import React from 'react';\nimport normalizeWheel from 'normalize-wheel';\nimport throttle from 'lodash.throttle';\nimport shallowEqual from 'shallowequal';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { cx } from '../../lib/theming/Emotion';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { MAX_DATE, MAX_MONTH, MAX_YEAR, MIN_DATE, MIN_MONTH, MIN_YEAR } from '../../lib/date/constants';\nimport { Nullable, Range } 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';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\n\nimport { themeConfig } from './config';\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';\nimport * as CalendarUtils from './CalendarUtils';\nimport { CalendarContext, CalendarContextProps } from './CalendarContext';\nimport { CalendarDay, CalendarDayProps } from './CalendarDay';\n\nexport interface CalendarProps extends CommonProps {\n /**\n * Вызывается при изменении `value`\n *\n * В аргументе хранится дата в формате `dd.mm.yyyy`\n */\n onValueChange?: (date: string) => void;\n /**\n * Задаёт текущую дату\n *\n * Дата задаётся в формате `dd.mm.yyyy`\n */\n value: Nullable<string>;\n /**\n * Задаёт максимальную возможную дату\n *\n * Дата задаётся в формате `dd.mm.yyyy`\n */\n maxDate?: string;\n /**\n * Задаёт минимальную возможную дату\n *\n * Дата задаётся в формате `dd.mm.yyyy`\n */\n minDate?: string;\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {string} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday?: (day: string, isWeekend: boolean) => boolean;\n /**\n * Позволяет задать начальный месяц\n */\n initialMonth?: Range<1, 13>;\n /**\n * Позволяет задать начальный год\n */\n initialYear?: number;\n /**\n * Метод отрисовки дат в календаре\n * @default (props: CalendarDayProps) => <CalendarDay {...props} />\n * @param {CalendarDayProps} props\n *\n * @returns {ReactElement} Элемент, который отрисовывает контент числа месяца.\n */\n renderDay?: (props: CalendarDayProps) => React.ReactElement;\n\n /**\n * Вызывается при каждом изменении месяца\n * @param {CalendarMonthChangeInfo} changeInfo - информация о изменении отображаемого месяца, где\n * `month: number` - номер текущего отображаемого месяца от 1 до 12,\n * `year: number` - отображаемый год,\n */\n onMonthChange?: (changeInfo: CalendarMonthChangeInfo) => void;\n}\n\nexport interface CalendarState {\n scrollPosition: number;\n months: MonthViewModel[];\n scrollDirection: number;\n scrollTarget: number;\n}\n\nexport interface CalendarMonthChangeInfo {\n month: number;\n year: number;\n}\n\nexport const CalendarDataTids = {\n root: 'Calendar__root',\n month: 'MonthView__month',\n dayCell: 'DayCellView__root',\n headerMonth: 'MonthView__headerMonth',\n monthSelectMobile: 'MonthView__monthSelectMobile',\n headerYear: 'MonthView__headerYear',\n yearSelectMobile: 'MonthView__yearSelectMobile',\n} as const;\n\ntype DefaultProps = Required<Pick<CalendarProps, 'minDate' | 'maxDate' | 'isHoliday'>>;\n\n/**\n * Компонент календаря из [DatePicker](https://tech.skbkontur.ru/react-ui/#/Components/DatePicker)'а\n */\n@rootNode\nexport class Calendar extends React.Component<CalendarProps, CalendarState> {\n public static __KONTUR_REACT_UI__ = 'Calendar';\n public static displayName = 'Calendar';\n\n public static Day = CalendarDay;\n\n private static formatDate(date: number, month: number, year: number) {\n return new InternalDate().setComponents({ date, month, year }).toString({ withPad: true });\n }\n\n public static defaultProps: DefaultProps = {\n minDate: Calendar.formatDate(MIN_DATE, MIN_MONTH, MIN_YEAR),\n maxDate: Calendar.formatDate(MAX_DATE, MAX_MONTH, MAX_YEAR),\n isHoliday: (_day: string, isWeekend: boolean) => isWeekend,\n };\n\n private getProps = createPropsGetter(Calendar.defaultProps);\n\n private theme!: Theme;\n private wheelEndTimeout: SafeTimer;\n private root: Nullable<HTMLElement>;\n private animation = animation();\n private touchStartY: Nullable<number> = null;\n private setRootNode!: TSetRootNode;\n\n constructor(props: CalendarProps) {\n super(props);\n\n const { minDate, maxDate, value } = this.getProps();\n\n const minDateShape = this.getDateInNativeFormat(minDate);\n const maxDateShape = this.getDateInNativeFormat(maxDate);\n const dateShape = this.getDateInNativeFormat(value);\n\n const today = CalendarUtils.getTodayDate();\n const initialDate = CalendarUtils.getInitialDate({\n today,\n date: dateShape,\n minDate: minDateShape,\n maxDate: maxDateShape,\n });\n\n const initialMonth = this.props.initialMonth\n ? CalendarUtils.getMonthInNativeFormat(this.props.initialMonth)\n : initialDate.month;\n const initialYear = this.props.initialYear ?? initialDate.year;\n\n this.state = {\n scrollPosition: 0,\n months: CalendarUtils.getMonths(initialMonth, initialYear),\n scrollDirection: 1,\n scrollTarget: 0,\n };\n }\n\n public componentDidUpdate(prevProps: Readonly<CalendarProps>, prevState: Readonly<CalendarState>): void {\n const { value, onMonthChange } = this.props;\n if (value && !shallowEqual(value, prevProps.value)) {\n const date = new InternalDate().parseValue(value).getComponentsLikeNumber();\n this.scrollToMonth(date.month - 1, date.year);\n }\n\n if (onMonthChange) {\n const visibleMonthsModels = this.getVisibleMonths(this.state).map(this.getViewModel);\n const prevFirstVisibleMonthModels = this.getVisibleMonths(prevState).map(this.getViewModel);\n const currentMonth = visibleMonthsModels[0].month;\n const prevCurrentMonth = prevFirstVisibleMonthModels[0].month;\n\n if (currentMonth !== prevCurrentMonth) {\n this.handleMonthChange(visibleMonthsModels);\n }\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 * Прокручивает календарь до переданной даты\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) => globalObject.setTimeout(r, 0));\n }\n\n const minDate = this.getDateInNativeFormat(this.getProps().minDate);\n const maxDate = this.getDateInNativeFormat(this.getProps().maxDate);\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\n const isYearChanges = (state: CalendarState) => {\n return (\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 };\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 return 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 return 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 handleMonthChange = (visibleMonths: MonthViewModel[]): void => {\n const currentMonth = visibleMonths[0];\n const changeInfo = {\n month: CalendarUtils.getMonthInHumanFormat(currentMonth.month),\n year: currentMonth.year,\n };\n\n this.props.onMonthChange?.(changeInfo);\n };\n\n private getViewModel = (item: [number, MonthViewModel]): MonthViewModel => item[1];\n\n private renderMain = () => {\n const monthsForRender = this.getVisibleMonths(this.state);\n const wrapperStyle = { height: themeConfig(this.theme).WRAPPER_HEIGHT };\n\n const props = this.getProps();\n\n const context: CalendarContextProps = {\n value: this.getDateInNativeFormat(props.value),\n minDate: this.getDateInNativeFormat(props.minDate),\n maxDate: this.getDateInNativeFormat(props.maxDate),\n isHoliday: props.isHoliday,\n renderDay: props.renderDay,\n today: CalendarUtils.getTodayDate(),\n onDateClick: this.handleDateClick,\n };\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...props}>\n <div ref={this.refRoot} data-tid={CalendarDataTids.root} className={cx(styles.root(this.theme))}>\n <div style={wrapperStyle} className={styles.wrapper()}>\n <CalendarContext.Provider value={context}>\n {monthsForRender.map(this.renderMonth, this)}\n </CalendarContext.Provider>\n </div>\n <div className={styles.separator(this.theme)} />\n </div>\n </CommonWrapper>\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 onMonthYearChange={this.handleMonthYearChange}\n />\n );\n }\n\n private handleDateClick = (dateShape: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToHumanString(dateShape);\n\n this.props.onValueChange?.(value);\n };\n\n private getDateInNativeFormat(date: Nullable<string>) {\n return new InternalDate().parseValue(date).toNativeFormat();\n }\n\n private getMonthPositions(months: MonthViewModel[], scrollPosition: number) {\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 getVisibleMonths(state: Readonly<CalendarState>): Array<[number, MonthViewModel]> {\n const { months, scrollPosition } = state;\n const positions = this.getMonthPositions(months, scrollPosition);\n\n return months\n .map<[number, MonthViewModel]>((x, i) => [positions[i], x])\n .filter(([top, month]) => CalendarUtils.isMonthVisible(top, month, this.theme));\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 (!isInstanceOf(event, globalObject.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 (!isInstanceOf(event, globalObject.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 (!isInstanceOf(event, globalObject.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 globalObject.clearTimeout(this.wheelEndTimeout);\n }\n this.wheelEndTimeout = globalObject.setTimeout(this.scrollToNearestWeek, 300);\n };\n private scrollToNearestWeek = () => {\n const { scrollTarget, scrollDirection } = this.state;\n\n const thresholdHeight = themeConfig(this.theme).MONTH_TITLE_OFFSET_HEIGHT + themeConfig(this.theme).DAY_HEIGHT;\n\n if (scrollTarget < thresholdHeight) {\n let targetPosition = 0;\n if (scrollDirection < 0) {\n targetPosition = thresholdHeight;\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 },\n onEnd,\n );\n };\n}\n"]}
@@ -274,30 +274,23 @@ class DatePickerFormatting extends React.Component {
274
274
  <DatePickerFormatting />;
275
275
  ```
276
276
 
277
- ### Период дат
278
- Подбробный пример в [Calendar](#/Components/Calendar)
279
-
280
- ```jsx harmony
281
- const [value, setValue] = React.useState('12.05.2022');
282
-
283
- <DatePicker
284
- value={value}
285
- onValueChange={setValue}
286
- periodStartDate="16.05.2022"
287
- periodEndDate="20.05.2022"
288
- />;
289
- ```
290
-
291
277
  ### Кастомный рендер дня
292
278
  Подбробный пример в [Calendar](#/Components/Calendar)
293
279
 
294
280
  ```jsx harmony
281
+ import { CalendarDay } from "@skbkontur/react-ui";
282
+
295
283
  const [value, setValue] = React.useState('12.05.2022');
296
284
 
297
- const renderDay = (date, defaultProps, RenderDefault) => {
298
- const isEven = defaultProps.children % 2 === 0;
285
+ const renderDay = (props) => {
286
+ const [date] = props.date.split('.').map(Number);
287
+ const isEven = date % 2 === 0;
299
288
 
300
- return <RenderDefault {...defaultProps} isDisabled={isEven} />;
289
+ if (isEven) {
290
+ return <CalendarDay {...props} style={{ background: '#e9f8e3' }} />
291
+ }
292
+
293
+ return <CalendarDay {...props} />
301
294
  };
302
295
 
303
296
 
@@ -11,6 +11,7 @@ var _ThemeContext = require("../../lib/theming/ThemeContext");
11
11
  var _CommonWrapper = require("../../internal/CommonWrapper");
12
12
  var _Emotion = require("../../lib/theming/Emotion");
13
13
  var _rootNode = require("../../lib/rootNode");
14
+ var _getVisualStateDataAttributes = require("../../internal/CommonWrapper/utils/getVisualStateDataAttributes");
14
15
 
15
16
  var _RadioGroup = require("./RadioGroup.styles");
16
17
  var _Prevent = require("./Prevent");
@@ -197,6 +198,14 @@ RadioGroup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/fu
197
198
 
198
199
 
199
200
 
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
200
209
 
201
210
 
202
211
 
@@ -253,7 +262,7 @@ RadioGroup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/fu
253
262
 
254
263
  ref = function (element) {
255
264
  _this.node = element;
256
- };_this.state = { activeItem: _this.props.defaultValue };return _this;}var _proto = RadioGroup.prototype;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _this$props = this.props,width = _this$props.width,onMouseLeave = _this$props.onMouseLeave,onMouseOver = _this$props.onMouseOver,onMouseEnter = _this$props.onMouseEnter,onBlur = _this$props.onBlur,ariaDescribedby = _this$props['aria-describedby'];var style = { width: width != null ? width : 'auto' };var handlers = { onMouseOver: onMouseOver, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave };return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_FocusTrap.FocusTrap, { onBlur: onBlur }, /*#__PURE__*/_react.default.createElement("span", (0, _extends2.default)({ "data-tid": RadioGroupDataTids.root, ref: this.ref, style: style, className: _RadioGroup.styles.root(), role: "radiogroup" }, handlers, { "aria-describedby": ariaDescribedby }), /*#__PURE__*/_react.default.createElement(_RadioGroupContext.RadioGroupContext.Provider, { value: this.getRadioGroupContextValue() }, this.renderChildren()))));} /**
265
+ };_this.state = { activeItem: _this.props.defaultValue };return _this;}var _proto = RadioGroup.prototype;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _this$props = this.props,width = _this$props.width,onMouseLeave = _this$props.onMouseLeave,onMouseOver = _this$props.onMouseOver,onMouseEnter = _this$props.onMouseEnter,onBlur = _this$props.onBlur,ariaDescribedby = _this$props['aria-describedby'],disabled = _this$props.disabled;var style = { width: width != null ? width : 'auto' };var handlers = { onMouseOver: onMouseOver, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave };return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props, (0, _getVisualStateDataAttributes.getVisualStateDataAttributes)({ disabled: disabled })), /*#__PURE__*/_react.default.createElement(_FocusTrap.FocusTrap, { onBlur: onBlur }, /*#__PURE__*/_react.default.createElement("span", (0, _extends2.default)({ "data-tid": RadioGroupDataTids.root, ref: this.ref, style: style, className: _RadioGroup.styles.root(), role: "radiogroup" }, handlers, { "aria-describedby": ariaDescribedby }), /*#__PURE__*/_react.default.createElement(_RadioGroupContext.RadioGroupContext.Provider, { value: this.getRadioGroupContextValue() }, this.renderChildren()))));} /**
257
266
  * @public
258
267
  */;_proto.focus = function focus() {var node = this.node;if (!node) {return;}var radio = node.querySelector('input[type="radio"]:checked'); // If no checked radios, try get first radio
259
268
  if (!radio || radio.disabled) {radio = node.querySelector('input[type="radio"]:not([disabled])');}if (radio) {radio.focus();}};_proto.renderChildren = function renderChildren() {var _this$props2 = this.props,items = _this$props2.items,children = _this$props2.children;(0, _invariant.default)(!items && children || items && !children, 'Either items or children must be passed, not both');return items ? mapItems(this.renderRadio, items) : children;};return RadioGroup;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'RadioGroup', _class2.displayName = 'RadioGroup', _class2.defaultProps = { renderItem: renderItem }, _class2.Prevent = _Prevent.Prevent, _temp)) || _class;exports.RadioGroup = RadioGroup;function renderItem(_value, data) {
@@ -1 +1 @@
1
- {"version":3,"sources":["RadioGroup.tsx"],"names":["RadioGroupDataTids","root","RadioGroup","rootNode","props","name","getProps","defaultProps","getRadioGroupContextValue","activeItem","getValue","onSelect","handleSelect","getName","disabled","error","warning","isControlled","value","state","setState","onValueChange","renderRadio","itemValue","data","index","itemProps","key","getKeyByItem","className","styles","item","theme","itemFirst","itemInline","inline","renderItem","toKey","undefined","ref","element","node","defaultValue","render","renderMain","width","onMouseLeave","onMouseOver","onMouseEnter","onBlur","ariaDescribedby","style","handlers","setRootNode","renderChildren","focus","radio","querySelector","items","children","mapItems","React","Component","__KONTUR_REACT_UI__","displayName","Prevent","_value","fn","result","entry","normalizeEntry","push","Array","isArray"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport invariant from 'invariant';\n\nimport { getRandomID, isNonNullable } from '../../lib/utils';\nimport { Radio } from '../Radio';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { FocusTrap } from '../../internal/FocusTrap';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './RadioGroup.styles';\nimport { Prevent } from './Prevent';\nimport { RadioGroupContext, RadioGroupContextType } from './RadioGroupContext';\n\nexport interface RadioGroupProps<T = string | number> extends CommonProps {\n /**\n * Значение по умолчанию. Должно быть одним из значений дочерних радиокнопок\n * или значений из параметра `items`\n */\n defaultValue?: T;\n /**\n * Значение радиогруппы. Должно быть одним из значений радиокнопок.\n * Если не указано, то компонент будет работать, как неконтролируемый\n */\n value?: T;\n /**\n * Может быть использовано, если не передан параметр `children`\n *\n * Массив параметров радиокнопок. Может быть типа `Array<Value>` или\n * `Array<[Value, Data]>`, где тип `Value` — значение радиокнопки, а `Data`\n * — значение которое будет использовано вторым параметром в `renderItem`.\n * Если тип `items: Array<Value>`, то он будет приведен к типу\n * `Array<[Value, Value]>`\n */\n items?: T[] | Array<[T, React.ReactNode]>;\n /**\n * Аттрибут name для вложенных радиокнопок. Если не указан, то сгенерируется\n * случайное имя\n */\n name?: string;\n\n /**\n * Метод получения уникального ключа по элементу\n * @param item\n */\n toKey?: (item: T) => string | number;\n /**\n * Дизейблит все радиокнопки\n */\n disabled?: boolean;\n /**\n * Переводит все радиокнопки в состояние валидации: предупреждение.\n */\n warning?: boolean;\n /**\n * Переводит все радиокнопки в состояние валидации: ошибка.\n */\n error?: boolean;\n /**\n * Выравнивает элементы в строку. Не работает с `children`\n */\n inline?: boolean;\n /**\n * Ширина радиогруппы. Не работает с `children`\n */\n width?: React.CSSProperties['width'];\n /**\n * Метод отрисовки контента радиокнопки. Не работает с `children`.\n *\n * Принимает два аргумента: `(value: Value, data: Data) => React.Node`\n */\n renderItem?: (itemValue: T, data: React.ReactNode) => React.ReactNode;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n /** Вызывается при изменении `value` */\n onValueChange?: (value: T) => void;\n onBlur?: (event: FocusEvent) => void;\n onMouseLeave?: () => any;\n onMouseOver?: () => any;\n onMouseEnter?: () => any;\n}\n\nexport interface RadioGroupState<T> {\n activeItem?: T;\n}\n\nexport const RadioGroupDataTids = {\n root: 'RadioGroup__root',\n} as const;\n\ntype DefaultProps = Required<Pick<RadioGroupProps<unknown>, 'renderItem'>>;\n\n/**\n *\n * `children` может содержать любую разметку с компонентами Radio,\n * если не передан параметр `items`.\n * Каждому компоненту Radio нужно указать параметр `value`, такого же типа\n * как и параметр `value` самой радиогруппы.\n *\n * Значения активного элемента сравниваются по строгому равенству `===`\n */\n@rootNode\nexport class RadioGroup<T> extends React.Component<RadioGroupProps<T>, RadioGroupState<T>> {\n public static __KONTUR_REACT_UI__ = 'RadioGroup';\n public static displayName = 'RadioGroup';\n\n public static defaultProps: DefaultProps = {\n renderItem,\n };\n\n public static Prevent = Prevent;\n\n private theme!: Theme;\n\n private node: Nullable<HTMLSpanElement>;\n private name = getRandomID();\n private getProps = createPropsGetter(RadioGroup.defaultProps);\n private setRootNode!: TSetRootNode;\n\n constructor(props: RadioGroupProps<T>) {\n super(props);\n\n this.state = {\n activeItem: this.props.defaultValue,\n };\n }\n\n private getRadioGroupContextValue = (): RadioGroupContextType<T> => {\n return {\n activeItem: this.getValue(),\n onSelect: this.handleSelect,\n name: this.getName(),\n disabled: this.props.disabled,\n error: this.props.error,\n warning: this.props.warning,\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 public renderMain() {\n const { width, onMouseLeave, onMouseOver, onMouseEnter, onBlur, 'aria-describedby': ariaDescribedby } = this.props;\n const style = {\n width: width ?? 'auto',\n };\n const handlers = {\n onMouseOver,\n onMouseEnter,\n onMouseLeave,\n };\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <FocusTrap onBlur={onBlur}>\n <span\n data-tid={RadioGroupDataTids.root}\n ref={this.ref}\n style={style}\n className={styles.root()}\n role=\"radiogroup\"\n {...handlers}\n aria-describedby={ariaDescribedby}\n >\n <RadioGroupContext.Provider value={this.getRadioGroupContextValue()}>\n {this.renderChildren()}\n </RadioGroupContext.Provider>\n </span>\n </FocusTrap>\n </CommonWrapper>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n const node = this.node;\n if (!node) {\n return;\n }\n\n let radio = node.querySelector('input[type=\"radio\"]:checked') as Nullable<HTMLInputElement>;\n\n // If no checked radios, try get first radio\n if (!radio || radio.disabled) {\n radio = node.querySelector('input[type=\"radio\"]:not([disabled])') as Nullable<HTMLInputElement>;\n }\n\n if (radio) {\n radio.focus();\n }\n }\n\n private getValue = () => (this.isControlled() ? this.props.value : this.state.activeItem);\n\n private getName = () => this.props.name || this.name;\n\n private isControlled = () => isNonNullable(this.props.value);\n\n private handleSelect = (value: T) => {\n if (!this.isControlled()) {\n this.setState({ activeItem: value });\n }\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private renderChildren() {\n const { items, children } = this.props;\n invariant((!items && children) || (items && !children), 'Either items or children must be passed, not both');\n return items ? mapItems<T>(this.renderRadio, items) : children;\n }\n\n private renderRadio = (itemValue: T, data: React.ReactNode, index: number): JSX.Element => {\n const itemProps = {\n key: this.getKeyByItem(itemValue),\n className: cx({\n [styles.item(this.theme)]: true,\n [styles.itemFirst()]: index === 0,\n [styles.itemInline()]: !!this.props.inline,\n }),\n };\n\n return (\n <span {...itemProps} role=\"presentation\">\n <Radio value={itemValue}>{this.getProps().renderItem(itemValue, data)}</Radio>\n </span>\n );\n };\n\n private getKeyByItem = (itemValue: T) => {\n if (this.props.toKey) {\n return this.props.toKey(itemValue);\n }\n return typeof itemValue === 'string' || typeof itemValue === 'number' ? itemValue : undefined;\n };\n\n private ref = (element: HTMLSpanElement) => {\n this.node = element;\n };\n}\n\nfunction renderItem<T>(_value: T, data: React.ReactNode) {\n return data;\n}\n\nfunction mapItems<T>(\n fn: (value: T, data: React.ReactNode, index: number) => React.ReactNode,\n items: T[] | Array<[T, React.ReactNode]>,\n) {\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, data] = normalizeEntry<T>(entry);\n result.push(fn(value, data, index));\n ++index;\n }\n return result;\n}\n\nfunction normalizeEntry<T>(entry: T | [T, React.ReactNode]): [T, React.ReactNode] {\n if (!Array.isArray(entry)) {\n return [entry, entry];\n }\n return entry;\n}\n"]}
1
+ {"version":3,"sources":["RadioGroup.tsx"],"names":["RadioGroupDataTids","root","RadioGroup","rootNode","props","name","getProps","defaultProps","getRadioGroupContextValue","activeItem","getValue","onSelect","handleSelect","getName","disabled","error","warning","isControlled","value","state","setState","onValueChange","renderRadio","itemValue","data","index","itemProps","key","getKeyByItem","className","styles","item","theme","itemFirst","itemInline","inline","renderItem","toKey","undefined","ref","element","node","defaultValue","render","renderMain","width","onMouseLeave","onMouseOver","onMouseEnter","onBlur","ariaDescribedby","style","handlers","setRootNode","renderChildren","focus","radio","querySelector","items","children","mapItems","React","Component","__KONTUR_REACT_UI__","displayName","Prevent","_value","fn","result","entry","normalizeEntry","push","Array","isArray"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport invariant from 'invariant';\n\nimport { getRandomID, isNonNullable } from '../../lib/utils';\nimport { Radio } from '../Radio';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { FocusTrap } from '../../internal/FocusTrap';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { styles } from './RadioGroup.styles';\nimport { Prevent } from './Prevent';\nimport { RadioGroupContext, RadioGroupContextType } from './RadioGroupContext';\n\nexport interface RadioGroupProps<T = string | number> extends CommonProps {\n /**\n * Значение по умолчанию. Должно быть одним из значений дочерних радиокнопок\n * или значений из параметра `items`\n */\n defaultValue?: T;\n /**\n * Значение радиогруппы. Должно быть одним из значений радиокнопок.\n * Если не указано, то компонент будет работать, как неконтролируемый\n */\n value?: T;\n /**\n * Может быть использовано, если не передан параметр `children`\n *\n * Массив параметров радиокнопок. Может быть типа `Array<Value>` или\n * `Array<[Value, Data]>`, где тип `Value` — значение радиокнопки, а `Data`\n * — значение которое будет использовано вторым параметром в `renderItem`.\n * Если тип `items: Array<Value>`, то он будет приведен к типу\n * `Array<[Value, Value]>`\n */\n items?: T[] | Array<[T, React.ReactNode]>;\n /**\n * Аттрибут name для вложенных радиокнопок. Если не указан, то сгенерируется\n * случайное имя\n */\n name?: string;\n\n /**\n * Метод получения уникального ключа по элементу\n * @param item\n */\n toKey?: (item: T) => string | number;\n /**\n * Дизейблит все радиокнопки\n */\n disabled?: boolean;\n /**\n * Переводит все радиокнопки в состояние валидации: предупреждение.\n */\n warning?: boolean;\n /**\n * Переводит все радиокнопки в состояние валидации: ошибка.\n */\n error?: boolean;\n /**\n * Выравнивает элементы в строку. Не работает с `children`\n */\n inline?: boolean;\n /**\n * Ширина радиогруппы. Не работает с `children`\n */\n width?: React.CSSProperties['width'];\n /**\n * Метод отрисовки контента радиокнопки. Не работает с `children`.\n *\n * Принимает два аргумента: `(value: Value, data: Data) => React.Node`\n */\n renderItem?: (itemValue: T, data: React.ReactNode) => React.ReactNode;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n /** Вызывается при изменении `value` */\n onValueChange?: (value: T) => void;\n onBlur?: (event: FocusEvent) => void;\n onMouseLeave?: () => any;\n onMouseOver?: () => any;\n onMouseEnter?: () => any;\n}\n\nexport interface RadioGroupState<T> {\n activeItem?: T;\n}\n\nexport const RadioGroupDataTids = {\n root: 'RadioGroup__root',\n} as const;\n\ntype DefaultProps = Required<Pick<RadioGroupProps<unknown>, 'renderItem'>>;\n\n/**\n *\n * `children` может содержать любую разметку с компонентами Radio,\n * если не передан параметр `items`.\n * Каждому компоненту Radio нужно указать параметр `value`, такого же типа\n * как и параметр `value` самой радиогруппы.\n *\n * Значения активного элемента сравниваются по строгому равенству `===`\n */\n@rootNode\nexport class RadioGroup<T> extends React.Component<RadioGroupProps<T>, RadioGroupState<T>> {\n public static __KONTUR_REACT_UI__ = 'RadioGroup';\n public static displayName = 'RadioGroup';\n\n public static defaultProps: DefaultProps = {\n renderItem,\n };\n\n public static Prevent = Prevent;\n\n private theme!: Theme;\n\n private node: Nullable<HTMLSpanElement>;\n private name = getRandomID();\n private getProps = createPropsGetter(RadioGroup.defaultProps);\n private setRootNode!: TSetRootNode;\n\n constructor(props: RadioGroupProps<T>) {\n super(props);\n\n this.state = {\n activeItem: this.props.defaultValue,\n };\n }\n\n private getRadioGroupContextValue = (): RadioGroupContextType<T> => {\n return {\n activeItem: this.getValue(),\n onSelect: this.handleSelect,\n name: this.getName(),\n disabled: this.props.disabled,\n error: this.props.error,\n warning: this.props.warning,\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 public renderMain() {\n const {\n width,\n onMouseLeave,\n onMouseOver,\n onMouseEnter,\n onBlur,\n 'aria-describedby': ariaDescribedby,\n disabled,\n } = this.props;\n const style = {\n width: width ?? 'auto',\n };\n const handlers = {\n onMouseOver,\n onMouseEnter,\n onMouseLeave,\n };\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props} {...getVisualStateDataAttributes({ disabled })}>\n <FocusTrap onBlur={onBlur}>\n <span\n data-tid={RadioGroupDataTids.root}\n ref={this.ref}\n style={style}\n className={styles.root()}\n role=\"radiogroup\"\n {...handlers}\n aria-describedby={ariaDescribedby}\n >\n <RadioGroupContext.Provider value={this.getRadioGroupContextValue()}>\n {this.renderChildren()}\n </RadioGroupContext.Provider>\n </span>\n </FocusTrap>\n </CommonWrapper>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n const node = this.node;\n if (!node) {\n return;\n }\n\n let radio = node.querySelector('input[type=\"radio\"]:checked') as Nullable<HTMLInputElement>;\n\n // If no checked radios, try get first radio\n if (!radio || radio.disabled) {\n radio = node.querySelector('input[type=\"radio\"]:not([disabled])') as Nullable<HTMLInputElement>;\n }\n\n if (radio) {\n radio.focus();\n }\n }\n\n private getValue = () => (this.isControlled() ? this.props.value : this.state.activeItem);\n\n private getName = () => this.props.name || this.name;\n\n private isControlled = () => isNonNullable(this.props.value);\n\n private handleSelect = (value: T) => {\n if (!this.isControlled()) {\n this.setState({ activeItem: value });\n }\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private renderChildren() {\n const { items, children } = this.props;\n invariant((!items && children) || (items && !children), 'Either items or children must be passed, not both');\n return items ? mapItems<T>(this.renderRadio, items) : children;\n }\n\n private renderRadio = (itemValue: T, data: React.ReactNode, index: number): JSX.Element => {\n const itemProps = {\n key: this.getKeyByItem(itemValue),\n className: cx({\n [styles.item(this.theme)]: true,\n [styles.itemFirst()]: index === 0,\n [styles.itemInline()]: !!this.props.inline,\n }),\n };\n\n return (\n <span {...itemProps} role=\"presentation\">\n <Radio value={itemValue}>{this.getProps().renderItem(itemValue, data)}</Radio>\n </span>\n );\n };\n\n private getKeyByItem = (itemValue: T) => {\n if (this.props.toKey) {\n return this.props.toKey(itemValue);\n }\n return typeof itemValue === 'string' || typeof itemValue === 'number' ? itemValue : undefined;\n };\n\n private ref = (element: HTMLSpanElement) => {\n this.node = element;\n };\n}\n\nfunction renderItem<T>(_value: T, data: React.ReactNode) {\n return data;\n}\n\nfunction mapItems<T>(\n fn: (value: T, data: React.ReactNode, index: number) => React.ReactNode,\n items: T[] | Array<[T, React.ReactNode]>,\n) {\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, data] = normalizeEntry<T>(entry);\n result.push(fn(value, data, index));\n ++index;\n }\n return result;\n}\n\nfunction normalizeEntry<T>(entry: T | [T, React.ReactNode]): [T, React.ReactNode] {\n if (!Array.isArray(entry)) {\n return [entry, entry];\n }\n return entry;\n}\n"]}
@@ -367,7 +367,8 @@ Select = (_dec = (0, _decorators.locale)('Select', _locale.SelectLocaleHelper),
367
367
  isPlaceholder: isPlaceholder,
368
368
  onClick: _this.toggle,
369
369
  onKeyDown: _this.handleKey,
370
- size: _this.getProps().size };
370
+ size: _this.getProps().size,
371
+ disabled: _this.getProps().disabled };
371
372
 
372
373
 
373
374
  return buttonParams;