@skbkontur/react-ui 4.8.0 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/cjs/components/DatePicker/DatePicker.d.ts +11 -12
- package/cjs/components/DatePicker/DatePicker.js +0 -2
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Group/Group.d.ts +1 -0
- package/cjs/components/Group/Group.js +7 -11
- package/cjs/components/Group/Group.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.d.ts +1 -1
- package/cjs/components/MenuItem/MenuItem.js.map +1 -1
- package/cjs/components/Modal/ModalFooter.d.ts +14 -0
- package/cjs/components/Modal/ModalFooter.js +22 -1
- package/cjs/components/Modal/ModalFooter.js.map +1 -1
- package/cjs/components/RadioGroup/RadioGroup.d.ts +0 -14
- package/cjs/components/RadioGroup/RadioGroup.js +1 -16
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +1 -24
- package/cjs/components/Select/Select.js +2 -25
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePageFooter.d.ts +9 -1
- package/cjs/components/SidePage/SidePageFooter.js +16 -1
- package/cjs/components/SidePage/SidePageFooter.js.map +1 -1
- package/cjs/components/SidePage/SidePageHeader.d.ts +1 -1
- package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
- package/cjs/components/Sticky/Sticky.d.ts +1 -1
- package/cjs/components/Sticky/Sticky.js.map +1 -1
- package/cjs/components/Switcher/Switcher.d.ts +7 -0
- package/cjs/components/Switcher/Switcher.js +34 -10
- package/cjs/components/Switcher/Switcher.js.map +1 -1
- package/cjs/components/Switcher/Switcher.md +97 -0
- package/cjs/components/Tabs/Tab.d.ts +0 -8
- package/cjs/components/Tabs/Tab.js +1 -10
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Tabs/Tabs.d.ts +0 -8
- package/cjs/components/Tabs/Tabs.js +1 -9
- package/cjs/components/Tabs/Tabs.js.map +1 -1
- package/cjs/index.d.ts +2 -0
- package/cjs/index.js +54 -54
- package/cjs/index.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +1 -1
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/ThemePlayground/AnotherInputsPlayground.d.ts +1 -1
- package/cjs/internal/ThemePlayground/AnotherInputsPlayground.js.map +1 -1
- package/cjs/lib/theming/ThemeContext.md +18 -12
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +11 -12
- package/components/Group/Group/Group.js +5 -5
- package/components/Group/Group/Group.js.map +1 -1
- package/components/Group/Group.d.ts +1 -0
- package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +1 -1
- package/components/Modal/ModalFooter/ModalFooter.js +7 -1
- package/components/Modal/ModalFooter/ModalFooter.js.map +1 -1
- package/components/Modal/ModalFooter.d.ts +14 -0
- package/components/RadioGroup/RadioGroup/RadioGroup.js +1 -14
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +0 -14
- package/components/Select/Select/Select.js +1 -23
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +1 -24
- package/components/SidePage/SidePageFooter/SidePageFooter.js +6 -1
- package/components/SidePage/SidePageFooter/SidePageFooter.js.map +1 -1
- package/components/SidePage/SidePageFooter.d.ts +9 -1
- package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
- package/components/SidePage/SidePageHeader.d.ts +1 -1
- package/components/Sticky/Sticky/Sticky.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +1 -1
- package/components/Switcher/Switcher/Switcher.js +30 -11
- package/components/Switcher/Switcher/Switcher.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +7 -0
- package/components/Switcher/Switcher.md +97 -0
- package/components/Tabs/Tab/Tab.js +1 -8
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +0 -8
- package/components/Tabs/Tabs/Tabs.js +1 -8
- package/components/Tabs/Tabs/Tabs.js.map +1 -1
- package/components/Tabs/Tabs.d.ts +0 -8
- package/index.d.ts +2 -0
- package/index.js +3 -1
- package/index.js.map +1 -1
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +1 -1
- package/internal/ThemePlayground/AnotherInputsPlayground/AnotherInputsPlayground.js.map +1 -1
- package/internal/ThemePlayground/AnotherInputsPlayground.d.ts +1 -1
- package/lib/theming/ThemeContext.md +18 -12
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["DatePicker.tsx"],"names":["PropTypes","React","InternalDate","InternalDateTransformer","MAX_FULLDATE","MIN_FULLDATE","InternalDateOrder","InternalDateSeparator","InternalDateValidateCheck","DateInput","DropdownContainer","filterProps","CommonWrapper","isMobile","NativeDateInput","getRootNode","rootNode","isNonNullable","createPropsGetter","Picker","styles","INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePickerDataTids","root","pickerRoot","pickerTodayWrapper","DatePicker","getProps","defaultProps","state","opened","canUseMobileNativeDatePicker","input","focused","renderMain","props","picker","value","minDate","maxDate","internalDate","parseValueToDate","date","toNativeFormat","parsedMinDate","formattedMinDate","undefined","parsedMaxDate","formattedMaxDate","getParent","menuAlign","handlePick","handleSelect","enableTodayLink","isHoliday","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","dateToInternalString","month","year","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","focus","componentDidUpdate","render","setRootNode","validate","checks","NotNull","Native","PureComponent","__KONTUR_REACT_UI__","propTypes","bool","string","isRequired","oneOf","oneOfType","number","func","_day","range","order","DMY","separator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"iPAAA,OAAOA,SAAP,MAAsB,YAAtB;AACA,OAAOC,KAAP,MAAkB,OAAlB;;AAEA,SAASC,YAAT,QAA6B,6BAA7B;AACA,SAASC,uBAAT,QAAwC,wCAAxC;AACA,SAASC,YAAT,EAAuBC,YAAvB,QAA2C,0BAA3C;AACA,SAASC,iBAAT,EAA4BC,qBAA5B,EAAmDC,yBAAnD,QAAoF,sBAApF;;;AAGA,SAASC,SAAT,QAA0B,cAA1B;AACA,SAASC,iBAAT,QAAkC,kCAAlC;AACA,SAASC,WAAT,QAA4B,uBAA5B;AACA,SAASC,aAAT,QAAmE,8BAAnE;AACA,SAASC,QAAT,QAAyB,kBAAzB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,WAAT,EAAsBC,QAAtB,QAAoD,oBAApD;AACA,SAASC,aAAT,QAA8B,iBAA9B;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,MAAT,QAAuB,UAAvB;AACA,SAASC,MAAT,QAAuB,qBAAvB;;AAEA,IAAMC,gBAAgB,GAAG;AACvBC,EAAAA,SAAS,EAAE,IADY;AAEvBC,EAAAA,QAAQ,EAAE,IAFa;AAGvBC,EAAAA,OAAO,EAAE,IAHc;AAIvBC,EAAAA,KAAK,EAAE,IAJgB;AAKvBC,EAAAA,IAAI,EAAE,IALiB;AAMvBC,EAAAA,SAAS,EAAE,IANY,EAAzB;;;AASA,OAAO,IAAMC,SAAS,GAAG,GAAlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDP,OAAO,IAAMC,kBAAkB,GAAG;AAChCC,EAAAA,IAAI,EAAE,kBAD0B;AAEhCC,EAAAA,UAAU,EAAE,cAFoB;AAGhCC,EAAAA,kBAAkB,EAAE,sBAHY,EAA3B;;;;;;AASP,WAAaC,UAAb,GADCjB,QACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DUkB,IAAAA,QA3DV,GA2DqBhB,iBAAiB,CAACe,UAAU,CAACE,YAAZ,CA3DtC;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFSC,IAAAA,KAtFT,GAsFkC,EAAEC,MAAM,EAAE,KAAV,EAAiBC,4BAA4B,EAAE,KAA/C,EAtFlC;;AAwFUC,IAAAA,KAxFV,GAwFoC,IAxFpC;AAyFUC,IAAAA,OAzFV,GAyFoB,KAzFpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsJSC,IAAAA,UAtJT,GAsJsB,UAACC,KAAD,EAAqE;AACvF,UAAIC,MAAM,GAAG,IAAb;;AAEA,UAAQC,KAAR,GAAkB,MAAKF,KAAvB,CAAQE,KAAR;AACA,2BAA6B,MAAKV,QAAL,EAA7B,CAAQW,OAAR,kBAAQA,OAAR,CAAiBC,OAAjB,kBAAiBA,OAAjB;;AAEA,UAAMC,YAAY,GAAG,MAAKC,gBAAL,CAAsBJ,KAAtB,CAArB;AACA,UAAMK,IAAI,GAAGF,YAAY,GAAGA,YAAY,CAACG,cAAb,EAAH,GAAmC,IAA5D;;AAEA,UAAMC,aAAa,GAAG,MAAKH,gBAAL,CAAsBH,OAAtB,CAAtB;AACA,UAAMO,gBAAgB,GAAID,aAAa,IAAIA,aAAa,CAACD,cAAd,EAAlB,IAAqDG,SAA9E;;AAEA,UAAMC,aAAa,GAAG,MAAKN,gBAAL,CAAsBF,OAAtB,CAAtB;AACA,UAAMS,gBAAgB,GAAID,aAAa,IAAIA,aAAa,CAACJ,cAAd,EAAlB,IAAqDG,SAA9E;;AAEA,UAAI,MAAKjB,KAAL,CAAWC,MAAf,EAAuB;AACrBM,QAAAA,MAAM;AACJ,4BAAC,iBAAD;AACE,sBAAUd,kBAAkB,CAACC,IAD/B;AAEE,UAAA,SAAS,EAAE,MAAK0B,SAFlB;AAGE,UAAA,OAAO,EAAE,CAHX;AAIE,UAAA,KAAK,EAAE,MAAKd,KAAL,CAAWe,SAJpB;;AAME,4BAAC,MAAD;AACE,UAAA,KAAK,EAAER,IADT;AAEE,UAAA,OAAO,EAAEG,gBAFX;AAGE,UAAA,OAAO,EAAEG,gBAHX;AAIE,UAAA,MAAM,EAAE,MAAKG,UAJf;AAKE,UAAA,QAAQ,EAAE,MAAKC,YALjB;AAME,UAAA,eAAe,EAAE,MAAKjB,KAAL,CAAWkB,eAN9B;AAOE,UAAA,SAAS,EAAE,MAAKC,SAPlB,GANF,CADF;;;;AAkBD;;AAED;AACE;AACE,UAAA,SAAS,EAAEzC,MAAM,CAACU,IAAP,EADb;AAEE,UAAA,KAAK,EAAE,MAAKgC,YAAL,EAFT;AAGE,UAAA,YAAY,EAAE,MAAKpB,KAAL,CAAWqB,YAH3B;AAIE,UAAA,YAAY,EAAE,MAAKrB,KAAL,CAAWsB,YAJ3B;AAKE,UAAA,WAAW,EAAE,MAAKtB,KAAL,CAAWuB,WAL1B;;AAOE,4BAAC,SAAD;AACMtD,QAAAA,WAAW,CAAC+B,KAAD,EAAQrB,gBAAR,CADjB;AAEE,UAAA,GAAG,EAAE,MAAK6C,WAFZ;AAGE,UAAA,KAAK,EAAE,MAAKxB,KAAL,CAAWE,KAAX,IAAoB,EAH7B;AAIE,UAAA,KAAK,EAAC,MAJR;AAKE,UAAA,QAAQ,MALV;AAME,UAAA,OAAO,EAAEC,OANX;AAOE,UAAA,OAAO,EAAEC,OAPX;AAQE,UAAA,MAAM,EAAE,MAAKqB,UARf;AASE,UAAA,OAAO,EAAE,MAAKC,WAThB;AAUE,UAAA,aAAa,EAAE,MAAK1B,KAAL,CAAW2B,aAV5B,IAPF;;AAmBG,cAAKjC,KAAL,CAAWE,4BAAX;AACC,4BAAC,eAAD;AACE,UAAA,aAAa,EAAE,MAAKI,KAAL,CAAW2B,aAD5B;AAEE,UAAA,KAAK,EAAE,MAAK3B,KAAL,CAAWE,KAAX,IAAoB,EAF7B;AAGE,UAAA,OAAO,EAAEC,OAHX;AAIE,UAAA,OAAO,EAAEC,OAJX;AAKE,UAAA,QAAQ,EAAE,MAAKJ,KAAL,CAAWnB,QALvB,GApBJ;;;AA4BG,SAAC,MAAKa,KAAL,CAAWE,4BAAZ,IAA4CK,MA5B/C,CADF;;;AAgCD,KA1NH;;AA4NSa,IAAAA,SA5NT,GA4NqB,YAAM;AACvB,aAAOzC,WAAW,+BAAlB;AACD,KA9NH;;AAgOU+C,IAAAA,YAhOV,GAgOyB,YAAM;AAC3B,UAAQQ,KAAR,GAAkB,MAAK5B,KAAvB,CAAQ4B,KAAR;AACA,aAAOrD,aAAa,CAACqD,KAAD,CAAb,GAAuB,EAAEA,KAAK,EAALA,KAAF,EAAvB,GAAmC,EAAEC,QAAQ,EAAE3C,SAAZ,EAA1C;AACD,KAnOH;;AAqOUsC,IAAAA,WArOV,GAqOwB,UAACM,GAAD,EAA2B;AAC/C,YAAKjC,KAAL,GAAaiC,GAAb;AACD,KAvOH;;;;;;;;;;;;;AAoPUJ,IAAAA,WApPV,GAoPwB,YAAM;AAC1B,UAAI,MAAK5B,OAAT,EAAkB;AAChB;AACD;;AAED,YAAKA,OAAL,GAAe,IAAf;;AAEA,YAAKiC,QAAL,CAAc,EAAEpC,MAAM,EAAE,IAAV,EAAd;;AAEA,UAAI,MAAKK,KAAL,CAAWgC,OAAf,EAAwB;AACtB,cAAKhC,KAAL,CAAWgC,OAAX;AACD;AACF,KAhQH;;AAkQUP,IAAAA,UAlQV,GAkQuB,YAAM;AACzB,UAAI,CAAC,MAAK3B,OAAV,EAAmB;AACjB;AACD;;AAED,YAAKA,OAAL,GAAe,KAAf;AACA,YAAKmC,KAAL;;AAEA,UAAI,MAAKjC,KAAL,CAAWkC,MAAf,EAAuB;AACrB,cAAKlC,KAAL,CAAWkC,MAAX;AACD;AACF,KA7QH;;AA+QUlB,IAAAA,UA/QV,GA+QuB,UAACmB,SAAD,EAAkC;AACrD,YAAKlB,YAAL,CAAkBkB,SAAlB;AACA,YAAKC,IAAL;AACD,KAlRH;;AAoRUnB,IAAAA,YApRV,GAoRyB,UAACkB,SAAD,EAAyC;AAC9D,UAAI,CAACA,SAAL,EAAgB;AACd,eAAO,IAAP;AACD;;AAED,UAAMjC,KAAK,GAAGzC,uBAAuB,CAAC4E,oBAAxB,CAA6C;AACzD9B,QAAAA,IAAI,EAAE4B,SAAS,CAAC5B,IADyC;AAEzD+B,QAAAA,KAAK,EAAEH,SAAS,CAACG,KAAV,GAAkB,CAFgC;AAGzDC,QAAAA,IAAI,EAAEJ,SAAS,CAACI,IAHyC,EAA7C,CAAd;;AAKA,UAAI,MAAKvC,KAAL,CAAW2B,aAAf,EAA8B;AAC5B,cAAK3B,KAAL,CAAW2B,aAAX,CAAyBzB,KAAzB;AACD;AACF,KAjSH;;AAmSUiB,IAAAA,SAnSV,GAmSsB,gBAAkF,KAA/EZ,IAA+E,QAA/EA,IAA+E,CAAzE+B,KAAyE,QAAzEA,KAAyE,CAAlEC,IAAkE,QAAlEA,IAAkE,CAA5DC,SAA4D,QAA5DA,SAA4D;AACpG,UAAMC,UAAU,GAAGhF,uBAAuB,CAAC4E,oBAAxB,CAA6C,EAAE9B,IAAI,EAAJA,IAAF,EAAQ+B,KAAK,EAAEA,KAAK,GAAG,CAAvB,EAA0BC,IAAI,EAAJA,IAA1B,EAA7C,CAAnB;AACA,aAAO,MAAK/C,QAAL,GAAgB2B,SAAhB,CAA0BsB,UAA1B,EAAsCD,SAAtC,CAAP;AACD,KAtSH,wDA4FSE,iBA5FT,GA4FE,6BAA2B,CACzB,IAAI,KAAK1C,KAAL,CAAW2C,yBAAX,IAAwCxE,QAA5C,EAAsD,CACpD,KAAK4D,QAAL,CAAc,EACZnC,4BAA4B,EAAE,IADlB,EAAd,EAGD,CACD,IAAI,KAAKI,KAAL,CAAWpB,SAAf,EAA0B,CACxB,KAAKgE,KAAL,GACD,CACF,CArGH,QAuGSC,kBAvGT,GAuGE,8BAA4B,CAC1B,IAAQhE,QAAR,GAAqB,KAAKmB,KAA1B,CAAQnB,QAAR,CACA,IAAQc,MAAR,GAAmB,KAAKD,KAAxB,CAAQC,MAAR,CACA,IAAId,QAAQ,IAAIc,MAAhB,EAAwB,CACtB,KAAKsC,KAAL,GACD,CACF,CA7GH,CA+GE;AACF;AACA,KAjHA,QAkHSG,IAlHT,GAkHE,gBAAc,CACZ,IAAI,KAAKvC,KAAT,EAAgB,CACd,KAAKA,KAAL,CAAWuC,IAAX,GACD,CACD,KAAKX,UAAL,GACD,CAvHH,CAyHE;AACF;AACA,KA3HA,QA4HSmB,KA5HT,GA4HE,iBAAe,CACb,IAAI,KAAK5C,KAAL,CAAWnB,QAAf,EAAyB,CACvB,OACD,CACD,IAAI,KAAKgB,KAAT,EAAgB,CACd,KAAKA,KAAL,CAAW+C,KAAX,GACD,CACD,KAAKlB,WAAL,GACD,CApIH,CAsIE;AACF;AACA;AACA,KAzIA,QA0ISO,KA1IT,GA0IE,iBAAe,CACb,KAAKF,QAAL,CAAc,EAAEpC,MAAM,EAAE,KAAV,EAAd,EACD,CA5IH,QA8ISmD,MA9IT,GA8IE,kBAAgB,CACd,oBACE,oBAAC,aAAD,aAAe,WAAW,EAAE,KAAKC,WAAjC,IAAkD,KAAK/C,KAAvD,GACG,KAAKD,UADR,CADF,CAKD,CApJH,QAyOUO,gBAzOV,GAyOE,0BAAyBJ,KAAzB,EAA6E,CAC3E,IAAIA,KAAK,KAAKS,SAAV,IAAuBT,KAAK,KAAK,IAArC,EAA2C,CACzC,OAAOS,SAAP,CACD,CACD,IAAMJ,IAAI,GAAG,IAAI/C,YAAJ,CAAiB,EAAE0C,KAAK,EAALA,KAAF,EAAjB,CAAb,CACA,IAAIK,IAAI,CAACyC,QAAL,CAAc,EAAEC,MAAM,EAAE,CAACnF,yBAAyB,CAACoF,OAA3B,EAAoCpF,yBAAyB,CAACqF,MAA9D,CAAV,EAAd,CAAJ,EAAsG,CACpG,OAAO5C,IAAP,CACD,CACD,OAAOI,SAAP,CACD,CAlPH,qBAAgCpD,KAAK,CAAC6F,aAAtC,WACgBC,mBADhB,GACsC,YADtC,UAGgBC,SAHhB,GAG4B,EACxB1E,SAAS,EAAEtB,SAAS,CAACiG,IADG,EAGxB1E,QAAQ,EAAEvB,SAAS,CAACiG,IAHI,EAKxB;AACJ;AACA,KACIrC,eAAe,EAAE5D,SAAS,CAACiG,IARH,EAUxBxE,KAAK,EAAEzB,SAAS,CAACiG,IAVO,EAYxB;AACJ;AACA,KACInD,OAAO,EAAE9C,SAAS,CAACkG,MAAV,CAAiBC,UAfF,EAiBxB1C,SAAS,EAAEzD,SAAS,CAACoG,KAAV,CAAgB,CAAC,MAAD,EAAS,OAAT,CAAhB,CAjBa,EAmBxB;AACJ;AACA,KACIvD,OAAO,EAAE7C,SAAS,CAACkG,MAAV,CAAiBC,UAtBF,EAwBxB;AACJ;AACA,KACIvD,KAAK,EAAE5C,SAAS,CAACkG,MA3BO,EA6BxB1E,OAAO,EAAExB,SAAS,CAACiG,IA7BK,EA+BxB3B,KAAK,EAAEtE,SAAS,CAACqG,SAAV,CAAoB,CAACrG,SAAS,CAACsG,MAAX,EAAmBtG,SAAS,CAACkG,MAA7B,CAApB,EAA0DC,UA/BzC,EAiCxBvB,MAAM,EAAE5E,SAAS,CAACuG,IAjCM,EAmCxBlC,aAAa,EAAErE,SAAS,CAACuG,IAAV,CAAeJ,UAnCN,EAqCxBzB,OAAO,EAAE1E,SAAS,CAACuG,IArCK,EAuCxB5E,SAAS,EAAE3B,SAAS,CAACuG,IAvCG,EAyCxBxC,YAAY,EAAE/D,SAAS,CAACuG,IAzCA,EA2CxBvC,YAAY,EAAEhE,SAAS,CAACuG,IA3CA,EA6CxBtC,WAAW,EAAEjE,SAAS,CAACuG,IA7CC,EA+CxB1C,SAAS,EAAE7D,SAAS,CAACuG,IAAV,CAAeJ,UA/CF,EAH5B,UAqDgBhE,YArDhB,GAqDqD,EACjDU,OAAO,EAAExC,YADwC,EAEjDyC,OAAO,EAAE1C,YAFwC,EAGjDyD,SAAS,EAAE,mBAAC2C,IAAD,EAAwBtB,SAAxB,UAA+CA,SAA/C,EAHsC,EArDrD,UA6DgBQ,QA7DhB,GA6D2B,UAAC9C,KAAD,EAA0B6D,KAA1B,EAAiF,KAAvDA,KAAuD,cAAvDA,KAAuD,GAAP,EAAO,EACxG,IAAI,CAAC7D,KAAL,EAAY,CACV,OAAO,KAAP,CACD,CAED,aAA2D6D,KAA3D,yBAAQ5D,OAAR,CAAQA,OAAR,+BAAkBxC,YAAlB,0CAAgCyC,OAAhC,CAAgCA,OAAhC,+BAA0C1C,YAA1C,kBACA,IAAM2C,YAAY,GAAG,IAAI7C,YAAJ,CAAiB,EACpCwG,KAAK,EAAEpG,iBAAiB,CAACqG,GADW,EAEpCC,SAAS,EAAErG,qBAAqB,CAACsG,GAFG,EAAjB,EAIlBC,aAJkB,CAIJ,IAAI5G,YAAJ,CAAiB,EAAE0C,KAAK,EAAEC,OAAT,EAAjB,CAJI,EAKlBkE,WALkB,CAKN,IAAI7G,YAAJ,CAAiB,EAAE0C,KAAK,EAAEE,OAAT,EAAjB,CALM,EAMlBkE,UANkB,CAMPpE,KANO,CAArB,CAQA,OAAOG,YAAY,CAAC2C,QAAb,CAAsB,EAC3BC,MAAM,EAAE,CACNnF,yBAAyB,CAACoF,OADpB,EAENpF,yBAAyB,CAACyG,MAFpB,EAGNzG,yBAAyB,CAACqF,MAHpB,EAINrF,yBAAyB,CAAC0G,MAJpB,EAKN1G,yBAAyB,CAAC2G,KALpB,CADmB,EAAtB,CAAP,CASD,CApFH","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps<T> extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n minDate?: T;\n maxDate?: T;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: T | null;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: T) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {T} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday?: (day: T, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\ntype DatePickerValue = string;\n\nexport const DatePickerDataTids = {\n root: 'DatePicker__root',\n pickerRoot: 'Picker__root',\n pickerTodayWrapper: 'Picker__todayWrapper',\n} as const;\n\ntype DefaultProps<T> = Required<Pick<DatePickerProps<T>, 'minDate' | 'maxDate' | 'isHoliday'>>;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps<DatePickerValue>, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right']),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps: DefaultProps<string> = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n };\n\n private getProps = createPropsGetter(DatePicker.defaultProps);\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DatePickerProps<DatePickerValue>>) => {\n let picker = null;\n\n const { value } = this.props;\n const { minDate, maxDate } = this.getProps();\n\n const internalDate = this.parseValueToDate(value);\n const date = internalDate ? internalDate.toNativeFormat() : null;\n\n const parsedMinDate = this.parseValueToDate(minDate);\n const formattedMinDate = (parsedMinDate && parsedMinDate.toNativeFormat()) || undefined;\n\n const parsedMaxDate = this.parseValueToDate(maxDate);\n const formattedMaxDate = (parsedMaxDate && parsedMaxDate.toNativeFormat()) || undefined;\n\n if (this.state.opened) {\n picker = (\n <DropdownContainer\n data-tid={DatePickerDataTids.root}\n getParent={this.getParent}\n offsetY={2}\n align={this.props.menuAlign}\n >\n <Picker\n value={date}\n minDate={formattedMinDate}\n maxDate={formattedMaxDate}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={minDate}\n maxDate={maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={minDate}\n maxDate={maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = (dateShape: CalendarDateShape | null) => {\n if (!dateShape) {\n return null;\n }\n\n const value = InternalDateTransformer.dateToInternalString({\n date: dateShape.date,\n month: dateShape.month + 1,\n year: dateShape.year,\n });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.getProps().isHoliday(dateString, isWeekend);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["DatePicker.tsx"],"names":["PropTypes","React","InternalDate","InternalDateTransformer","MAX_FULLDATE","MIN_FULLDATE","InternalDateOrder","InternalDateSeparator","InternalDateValidateCheck","DateInput","DropdownContainer","filterProps","CommonWrapper","isMobile","NativeDateInput","getRootNode","rootNode","isNonNullable","createPropsGetter","Picker","styles","INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePickerDataTids","root","pickerRoot","pickerTodayWrapper","DatePicker","getProps","defaultProps","state","opened","canUseMobileNativeDatePicker","input","focused","renderMain","props","picker","value","minDate","maxDate","internalDate","parseValueToDate","date","toNativeFormat","parsedMinDate","formattedMinDate","undefined","parsedMaxDate","formattedMaxDate","getParent","menuAlign","handlePick","handleSelect","enableTodayLink","isHoliday","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","dateToInternalString","month","year","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","focus","componentDidUpdate","render","setRootNode","validate","checks","NotNull","Native","PureComponent","__KONTUR_REACT_UI__","propTypes","bool","string","isRequired","oneOf","oneOfType","number","func","_day","range","order","DMY","separator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n minDate?: string;\n maxDate?: string;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: string | null;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: string) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\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\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\nexport const DatePickerDataTids = {\n root: 'DatePicker__root',\n pickerRoot: 'Picker__root',\n pickerTodayWrapper: 'Picker__todayWrapper',\n} as const;\n\ntype DefaultProps = Required<Pick<DatePickerProps, 'minDate' | 'maxDate' | 'isHoliday'>>;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right']),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps: DefaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: string, isWeekend: boolean) => isWeekend,\n };\n\n private getProps = createPropsGetter(DatePicker.defaultProps);\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DatePickerProps>) => {\n let picker = null;\n\n const { value } = this.props;\n const { minDate, maxDate } = this.getProps();\n\n const internalDate = this.parseValueToDate(value);\n const date = internalDate ? internalDate.toNativeFormat() : null;\n\n const parsedMinDate = this.parseValueToDate(minDate);\n const formattedMinDate = (parsedMinDate && parsedMinDate.toNativeFormat()) || undefined;\n\n const parsedMaxDate = this.parseValueToDate(maxDate);\n const formattedMaxDate = (parsedMaxDate && parsedMaxDate.toNativeFormat()) || undefined;\n\n if (this.state.opened) {\n picker = (\n <DropdownContainer\n data-tid={DatePickerDataTids.root}\n getParent={this.getParent}\n offsetY={2}\n align={this.props.menuAlign}\n >\n <Picker\n value={date}\n minDate={formattedMinDate}\n maxDate={formattedMaxDate}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={minDate}\n maxDate={maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={minDate}\n maxDate={maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = (dateShape: CalendarDateShape | null) => {\n if (!dateShape) {\n return null;\n }\n\n const value = InternalDateTransformer.dateToInternalString({\n date: dateShape.date,\n month: dateShape.month + 1,\n year: dateShape.year,\n });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.getProps().isHoliday(dateString, isWeekend);\n };\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { Nullable } from '../../typings/utility-types';
|
|
4
4
|
import { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';
|
|
5
5
|
export declare const MIN_WIDTH = 120;
|
|
6
|
-
export interface DatePickerProps
|
|
6
|
+
export interface DatePickerProps extends CommonProps {
|
|
7
7
|
autoFocus?: boolean;
|
|
8
8
|
disabled?: boolean;
|
|
9
9
|
enableTodayLink?: boolean;
|
|
@@ -11,11 +11,11 @@ export interface DatePickerProps<T> extends CommonProps {
|
|
|
11
11
|
* Состояние валидации при ошибке.
|
|
12
12
|
*/
|
|
13
13
|
error?: boolean;
|
|
14
|
-
minDate?:
|
|
15
|
-
maxDate?:
|
|
14
|
+
minDate?: string;
|
|
15
|
+
maxDate?: string;
|
|
16
16
|
menuAlign?: 'left' | 'right';
|
|
17
17
|
size?: 'small' | 'medium' | 'large';
|
|
18
|
-
value?:
|
|
18
|
+
value?: string | null;
|
|
19
19
|
/**
|
|
20
20
|
* Состояние валидации при предупреждении.
|
|
21
21
|
*/
|
|
@@ -27,7 +27,7 @@ export interface DatePickerProps<T> extends CommonProps {
|
|
|
27
27
|
*
|
|
28
28
|
* @param value - строка в формате `dd.mm.yyyy`.
|
|
29
29
|
*/
|
|
30
|
-
onValueChange: (value:
|
|
30
|
+
onValueChange: (value: string) => void;
|
|
31
31
|
onFocus?: () => void;
|
|
32
32
|
onKeyDown?: (e: React.KeyboardEvent<any>) => void;
|
|
33
33
|
onMouseEnter?: (e: React.MouseEvent<any>) => void;
|
|
@@ -42,25 +42,24 @@ export interface DatePickerProps<T> extends CommonProps {
|
|
|
42
42
|
/**
|
|
43
43
|
* Функция для определения праздничных дней
|
|
44
44
|
* @default (_day, isWeekend) => isWeekend
|
|
45
|
-
* @param {
|
|
45
|
+
* @param {string} day - строка в формате `dd.mm.yyyy`
|
|
46
46
|
* @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)
|
|
47
47
|
*
|
|
48
48
|
* @returns {boolean} `true` для выходного или `false` для рабочего дня
|
|
49
49
|
*/
|
|
50
|
-
isHoliday?: (day:
|
|
50
|
+
isHoliday?: (day: string, isWeekend: boolean) => boolean;
|
|
51
51
|
}
|
|
52
52
|
export interface DatePickerState {
|
|
53
53
|
opened: boolean;
|
|
54
54
|
canUseMobileNativeDatePicker: boolean;
|
|
55
55
|
}
|
|
56
|
-
declare type DatePickerValue = string;
|
|
57
56
|
export declare const DatePickerDataTids: {
|
|
58
57
|
readonly root: "DatePicker__root";
|
|
59
58
|
readonly pickerRoot: "Picker__root";
|
|
60
59
|
readonly pickerTodayWrapper: "Picker__todayWrapper";
|
|
61
60
|
};
|
|
62
|
-
declare type DefaultProps
|
|
63
|
-
export declare class DatePicker extends React.PureComponent<DatePickerProps
|
|
61
|
+
declare type DefaultProps = Required<Pick<DatePickerProps, 'minDate' | 'maxDate' | 'isHoliday'>>;
|
|
62
|
+
export declare class DatePicker extends React.PureComponent<DatePickerProps, DatePickerState> {
|
|
64
63
|
static __KONTUR_REACT_UI__: string;
|
|
65
64
|
static propTypes: {
|
|
66
65
|
autoFocus: PropTypes.Requireable<boolean>;
|
|
@@ -94,7 +93,7 @@ export declare class DatePicker extends React.PureComponent<DatePickerProps<Date
|
|
|
94
93
|
onMouseOver: PropTypes.Requireable<(...args: any[]) => any>;
|
|
95
94
|
isHoliday: PropTypes.Validator<(...args: any[]) => any>;
|
|
96
95
|
};
|
|
97
|
-
static defaultProps: DefaultProps
|
|
96
|
+
static defaultProps: DefaultProps;
|
|
98
97
|
private getProps;
|
|
99
98
|
static validate: (value: Nullable<string>, range?: {
|
|
100
99
|
minDate?: string | undefined;
|
|
@@ -120,7 +119,7 @@ export declare class DatePicker extends React.PureComponent<DatePickerProps<Date
|
|
|
120
119
|
*/
|
|
121
120
|
close(): void;
|
|
122
121
|
render(): JSX.Element;
|
|
123
|
-
renderMain: (props: CommonWrapperRestProps<DatePickerProps
|
|
122
|
+
renderMain: (props: CommonWrapperRestProps<DatePickerProps>) => JSX.Element;
|
|
124
123
|
getParent: () => Nullable<Element>;
|
|
125
124
|
private getRootStyle;
|
|
126
125
|
private getInputRef;
|
|
@@ -29,19 +29,19 @@ var getLastChild = function getLastChild(children) {
|
|
|
29
29
|
return children == null ? void 0 : children[numberOfChildren - 1];
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
var getButtonCorners = function getButtonCorners(
|
|
33
|
-
if (
|
|
32
|
+
export var getButtonCorners = function getButtonCorners(isFirstChild, isLastChild) {
|
|
33
|
+
if (isFirstChild && isLastChild) {
|
|
34
34
|
return {};
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
if (
|
|
37
|
+
if (isFirstChild) {
|
|
38
38
|
return {
|
|
39
39
|
borderTopRightRadius: 0,
|
|
40
40
|
borderBottomRightRadius: 0
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
if (
|
|
44
|
+
if (isLastChild) {
|
|
45
45
|
return {
|
|
46
46
|
borderTopLeftRadius: 0,
|
|
47
47
|
borderBottomLeftRadius: 0
|
|
@@ -55,7 +55,7 @@ var getButtonCorners = function getButtonCorners(child, firstChild, lastChild) {
|
|
|
55
55
|
|
|
56
56
|
var passCornersIfButton = function passCornersIfButton(child, firstChild, lastChild) {
|
|
57
57
|
if (isButton(child)) {
|
|
58
|
-
var corners = getButtonCorners(child
|
|
58
|
+
var corners = getButtonCorners(child === firstChild, child === lastChild);
|
|
59
59
|
return /*#__PURE__*/React.cloneElement(child, {
|
|
60
60
|
corners: corners
|
|
61
61
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Group.tsx"],"names":["React","PropTypes","isIE11","isEdge","isButton","CommonWrapper","cx","rootNode","styles","getFirstChild","children","Array","isArray","getLastChild","numberOfChildren","Children","count","getButtonCorners","
|
|
1
|
+
{"version":3,"sources":["Group.tsx"],"names":["React","PropTypes","isIE11","isEdge","isButton","CommonWrapper","cx","rootNode","styles","getFirstChild","children","Array","isArray","getLastChild","numberOfChildren","Children","count","getButtonCorners","isFirstChild","isLastChild","borderTopRightRadius","borderBottomRightRadius","borderTopLeftRadius","borderBottomLeftRadius","borderRadius","passCornersIfButton","child","firstChild","lastChild","corners","cloneElement","GroupDataTids","root","Group","render","style","width","props","childrenArray","toArray","setRootNode","map","isValidElement","isWidthInPercent","Boolean","toString","includes","modifiedChild","fixed","stretch","stretchFallback","item","itemFirst","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","number","string"],"mappings":"2JAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;;AAEA,SAASC,MAAT,EAAiBC,MAAjB,QAA+B,kBAA/B;AACA,SAASC,QAAT,QAAyB,WAAzB;AACA,SAASC,aAAT,QAA2C,8BAA3C;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,QAAT,QAAuC,oBAAvC;;AAEA,SAASC,MAAT,QAAuB,gBAAvB;;;;;;;;;;;AAWA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAACC,QAAD,EAA+B;AACnD,MAAI,CAACC,KAAK,CAACC,OAAN,CAAcF,QAAd,CAAL,EAA8B;AAC5B,WAAOA,QAAP;AACD;;AAED,SAAOA,QAAP,oBAAOA,QAAQ,CAAG,CAAH,CAAf;AACD,CAND;;AAQA,IAAMG,YAAY,GAAG,SAAfA,YAAe,CAACH,QAAD,EAA+B;AAClD,MAAI,CAACC,KAAK,CAACC,OAAN,CAAcF,QAAd,CAAL,EAA8B;AAC5B,WAAOA,QAAP;AACD;;AAED,MAAMI,gBAAgB,GAAGd,KAAK,CAACe,QAAN,CAAeC,KAAf,CAAqBN,QAArB,CAAzB;;AAEA,SAAOA,QAAP,oBAAOA,QAAQ,CAAGI,gBAAgB,GAAG,CAAtB,CAAf;AACD,CARD;;AAUA,OAAO,IAAMG,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,YAAD,EAAwBC,WAAxB,EAAsE;AACpG,MAAID,YAAY,IAAIC,WAApB,EAAiC;AAC/B,WAAO,EAAP;AACD;;AAED,MAAID,YAAJ,EAAkB;AAChB,WAAO;AACLE,MAAAA,oBAAoB,EAAE,CADjB;AAELC,MAAAA,uBAAuB,EAAE,CAFpB,EAAP;;AAID;;AAED,MAAIF,WAAJ,EAAiB;AACf,WAAO;AACLG,MAAAA,mBAAmB,EAAE,CADhB;AAELC,MAAAA,sBAAsB,EAAE,CAFnB,EAAP;;AAID;;AAED,SAAO;AACLC,IAAAA,YAAY,EAAE,CADT,EAAP;;AAGD,CAtBM;;AAwBP,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,KAAD,EAAyBC,UAAzB,EAAsDC,SAAtD,EAAqF;AAC/G,MAAIxB,QAAQ,CAACsB,KAAD,CAAZ,EAAqB;AACnB,QAAMG,OAAO,GAAGZ,gBAAgB,CAACS,KAAK,KAAKC,UAAX,EAAuBD,KAAK,KAAKE,SAAjC,CAAhC;;AAEA,wBAAO5B,KAAK,CAAC8B,YAAN,CAAmBJ,KAAnB,EAA0B,EAAEG,OAAO,EAAPA,OAAF,EAA1B,CAAP;AACD;;AAED,SAAOH,KAAP;AACD,CARD;;AAUA,OAAO,IAAMK,aAAa,GAAG;AAC3BC,EAAAA,IAAI,EAAE,aADqB,EAAtB;;;;AAKP,WAAaC,KAAb,GADC1B,QACD;;;;;;;;AAQS2B,EAAAA,MART,GAQE,kBAAgB;AACd,QAAMC,KAA0B,GAAG;AACjCC,MAAAA,KAAK,EAAE,KAAKC,KAAL,CAAWD,KADe,EAAnC;;;AAIA,QAAME,aAAa,GAAGtC,KAAK,CAACe,QAAN,CAAewB,OAAf,CAAuB,KAAKF,KAAL,CAAW3B,QAAlC,CAAtB;AACA,QAAMiB,UAAU,GAAGlB,aAAa,CAAC6B,aAAD,CAAhC;AACA,QAAMV,SAAS,GAAGf,YAAY,CAACyB,aAAD,CAA9B;;AAEA;AACE,0BAAC,aAAD,aAAe,WAAW,EAAE,KAAKE,WAAjC,IAAkD,KAAKH,KAAvD;AACE,oCAAM,YAAUN,aAAa,CAACC,IAA9B,EAAoC,SAAS,EAAExB,MAAM,CAACwB,IAAP,EAA/C,EAA8D,KAAK,EAAEG,KAArE;AACGnC,MAAAA,KAAK,CAACe,QAAN,CAAe0B,GAAf,CAAmBH,aAAnB,EAAkC,UAACZ,KAAD,EAAW;AAC5C,YAAI,CAACA,KAAD,IAAU,eAAC1B,KAAK,CAAC0C,cAAN,CAAsChB,KAAtC,CAAf,EAA6D;AAC3D,iBAAO,IAAP;AACD;;AAED,YAAMiB,gBAAgB,GAAGC,OAAO,CAAClB,KAAK,CAACW,KAAN,CAAYD,KAAZ,IAAqBV,KAAK,CAACW,KAAN,CAAYD,KAAZ,CAAkBS,QAAlB,GAA6BC,QAA7B,CAAsC,GAAtC,CAAtB,CAAhC;;AAEA,YAAMC,aAAa,GAAGtB,mBAAmB,CAACC,KAAD,EAAQC,UAAR,EAAoBC,SAApB,CAAzC;;AAEA,YAAMV,YAAY,GAAGQ,KAAK,KAAKC,UAA/B;;AAEA;AACE;AACE,YAAA,SAAS,EAAErB,EAAE;AACVE,YAAAA,MAAM,CAACwC,KAAP,EADU,IACO,CAACL,gBADR;AAEVnC,YAAAA,MAAM,CAACyC,OAAP,EAFU,IAESN,gBAFT;AAGVnC,YAAAA,MAAM,CAAC0C,eAAP,EAHU,IAGiBN,OAAO,CAACD,gBAAgB,IAAI,KAAI,CAACN,KAAL,CAAWD,KAA/B,KAAyClC,MAAM,IAAIC,MAAnD,CAAD,CAHxB,OADf;;;AAOE;AACE,YAAA,SAAS,EAAEG,EAAE;AACVE,YAAAA,MAAM,CAAC2C,IAAP,EADU,IACM,IADN;AAEV3C,YAAAA,MAAM,CAAC4C,SAAP,EAFU,IAEWlC,YAFX,QADf;;;AAMG6B,UAAAA,aANH,CAPF,CADF;;;;AAkBD,OA7BA,CADH,CADF,CADF;;;;AAoCD,GArDH,gBAA2B/C,KAAK,CAACqD,SAAjC,WACgBC,mBADhB,GACsC,OADtC,UAIgBC,SAJhB,GAI4B,EACxBnB,KAAK,EAAEnC,SAAS,CAACuD,SAAV,CAAoB,CAACvD,SAAS,CAACwD,MAAX,EAAmBxD,SAAS,CAACyD,MAA7B,CAApB,CADiB,EAJ5B","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isIE11, isEdge } from '../../lib/client';\nimport { isButton } from '../Button';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Group.styles';\n\nexport interface GroupProps extends CommonProps {\n width?: React.CSSProperties['width'];\n}\n\ninterface GroupChildProps {\n width?: React.CSSProperties['width'];\n corners?: number;\n}\n\nconst getFirstChild = (children: React.ReactNode) => {\n if (!Array.isArray(children)) {\n return children;\n }\n\n return children?.[0] as React.ReactNode;\n};\n\nconst getLastChild = (children: React.ReactNode) => {\n if (!Array.isArray(children)) {\n return children;\n }\n\n const numberOfChildren = React.Children.count(children);\n\n return children?.[numberOfChildren - 1] as React.ReactNode;\n};\n\nexport const getButtonCorners = (isFirstChild: boolean, isLastChild: boolean): React.CSSProperties => {\n if (isFirstChild && isLastChild) {\n return {};\n }\n\n if (isFirstChild) {\n return {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n };\n }\n\n if (isLastChild) {\n return {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n };\n }\n\n return {\n borderRadius: 0,\n };\n};\n\nconst passCornersIfButton = (child: React.ReactNode, firstChild: React.ReactNode, lastChild: React.ReactNode) => {\n if (isButton(child)) {\n const corners = getButtonCorners(child === firstChild, child === lastChild);\n\n return React.cloneElement(child, { corners });\n }\n\n return child;\n};\n\nexport const GroupDataTids = {\n root: 'Group__root',\n} as const;\n\n@rootNode\nexport class Group extends React.Component<GroupProps> {\n public static __KONTUR_REACT_UI__ = 'Group';\n private setRootNode!: TSetRootNode;\n\n public static propTypes = {\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n };\n\n public render() {\n const style: React.CSSProperties = {\n width: this.props.width,\n };\n\n const childrenArray = React.Children.toArray(this.props.children);\n const firstChild = getFirstChild(childrenArray);\n const lastChild = getLastChild(childrenArray);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <span data-tid={GroupDataTids.root} className={styles.root()} style={style}>\n {React.Children.map(childrenArray, (child) => {\n if (!child || !React.isValidElement<GroupChildProps>(child)) {\n return null;\n }\n\n const isWidthInPercent = Boolean(child.props.width && child.props.width.toString().includes('%'));\n\n const modifiedChild = passCornersIfButton(child, firstChild, lastChild);\n\n const isFirstChild = child === firstChild;\n\n return (\n <div\n className={cx({\n [styles.fixed()]: !isWidthInPercent,\n [styles.stretch()]: isWidthInPercent,\n [styles.stretchFallback()]: Boolean(isWidthInPercent && this.props.width && (isIE11 || isEdge)),\n })}\n >\n <div\n className={cx({\n [styles.item()]: true,\n [styles.itemFirst()]: isFirstChild,\n })}\n >\n {modifiedChild}\n </div>\n </div>\n );\n })}\n </span>\n </CommonWrapper>\n );\n }\n}\n"]}
|
|
@@ -4,6 +4,7 @@ import { CommonProps } from '../../internal/CommonWrapper';
|
|
|
4
4
|
export interface GroupProps extends CommonProps {
|
|
5
5
|
width?: React.CSSProperties['width'];
|
|
6
6
|
}
|
|
7
|
+
export declare const getButtonCorners: (isFirstChild: boolean, isLastChild: boolean) => React.CSSProperties;
|
|
7
8
|
export declare const GroupDataTids: {
|
|
8
9
|
readonly root: "Group__root";
|
|
9
10
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MenuItem.tsx"],"names":["React","PropTypes","isExternalLink","isFunction","isReactUIComponent","ThemeContext","CommonWrapper","cx","rootNode","styles","MenuItemDataTids","root","comment","MenuItem","state","iconOffsetTop","mouseEntered","rootRef","renderMain","props","link","icon","loose","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","href","rel","rest","hover","disabled","iconElement","top","theme","className","rootMobile","selected","withIcon","Boolean","children","content","Component","getComponent","setRootRef","handleMouseEnterFix","handleMouseLeave","undefined","contentMobile","commentHover","e","element","render","setRootNode","componentDidMount","setState","window","getComputedStyle","getPropertyValue","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","node","bool","string","target","onClick","func","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode/rootNodeDecorator';\n\nimport { styles } from './MenuItem.styles';\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps extends CommonProps {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n };\n\n public state = {\n iconOffsetTop: 0,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef) {\n this.setState({ iconOffsetTop: window.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n ...rest\n } = props;\n\n const hover = state === 'hover' && !this.props.disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div style={{ top: this.state.iconOffsetTop }} className={cx({ [styles.icon(this.theme)]: true })}>\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected',\n [styles.link(this.theme)]: !!link,\n [styles.withIcon(this.theme)]: Boolean(iconElement) || !!_enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n state={state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.contentMobile()]: isMobile,\n })}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered && this.props.onMouseEnter) {\n this.mouseEntered = true;\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (disabled) {\n return 'button';\n }\n\n if (component) {\n return component;\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
|
|
1
|
+
{"version":3,"sources":["MenuItem.tsx"],"names":["React","PropTypes","isExternalLink","isFunction","isReactUIComponent","ThemeContext","CommonWrapper","cx","rootNode","styles","MenuItemDataTids","root","comment","MenuItem","state","iconOffsetTop","mouseEntered","rootRef","renderMain","props","link","icon","loose","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","href","rel","rest","hover","disabled","iconElement","top","theme","className","rootMobile","selected","withIcon","Boolean","children","content","Component","getComponent","setRootRef","handleMouseEnterFix","handleMouseLeave","undefined","contentMobile","commentHover","e","element","render","setRootNode","componentDidMount","setState","window","getComputedStyle","getPropertyValue","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","node","bool","string","target","onClick","func","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode/rootNodeDecorator';\n\nimport { styles } from './MenuItem.styles';\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps extends Omit<CommonProps, 'children'> {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n };\n\n public state = {\n iconOffsetTop: 0,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef) {\n this.setState({ iconOffsetTop: window.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n ...rest\n } = props;\n\n const hover = state === 'hover' && !this.props.disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div style={{ top: this.state.iconOffsetTop }} className={cx({ [styles.icon(this.theme)]: true })}>\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected',\n [styles.link(this.theme)]: !!link,\n [styles.withIcon(this.theme)]: Boolean(iconElement) || !!_enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n state={state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.contentMobile()]: isMobile,\n })}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered && this.props.onMouseEnter) {\n this.mouseEntered = true;\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (disabled) {\n return 'button';\n }\n\n if (component) {\n return component;\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { CommonProps } from '../../internal/CommonWrapper';
|
|
4
4
|
export declare type MenuItemState = null | 'hover' | 'selected' | void;
|
|
5
|
-
export interface MenuItemProps extends CommonProps {
|
|
5
|
+
export interface MenuItemProps extends Omit<CommonProps, 'children'> {
|
|
6
6
|
/**
|
|
7
7
|
* @ignore
|
|
8
8
|
*/
|
|
@@ -6,6 +6,8 @@ import { ZIndex } from "../../../internal/ZIndex";
|
|
|
6
6
|
import { CommonWrapper } from "../../../internal/CommonWrapper";
|
|
7
7
|
import { cx } from "../../../lib/theming/Emotion";
|
|
8
8
|
import { useResponsiveLayout } from "../../ResponsiveLayout";
|
|
9
|
+
import { Gapped } from "../../Gapped";
|
|
10
|
+
import { isNonNullable } from "../../../lib/utils";
|
|
9
11
|
import { styles } from "../Modal.styles";
|
|
10
12
|
import { ModalContext } from "../ModalContext";
|
|
11
13
|
export var ModalFooterDataTids = {
|
|
@@ -23,6 +25,7 @@ function ModalFooter(props) {
|
|
|
23
25
|
var layout = useResponsiveLayout();
|
|
24
26
|
var _props$sticky = props.sticky,
|
|
25
27
|
sticky = _props$sticky === void 0 ? !layout.isMobile : _props$sticky,
|
|
28
|
+
gap = props.gap,
|
|
26
29
|
panel = props.panel,
|
|
27
30
|
children = props.children;
|
|
28
31
|
useLayoutEffect(function () {
|
|
@@ -44,7 +47,10 @@ function ModalFooter(props) {
|
|
|
44
47
|
return /*#__PURE__*/React.createElement("div", {
|
|
45
48
|
"data-tid": ModalFooterDataTids.root,
|
|
46
49
|
className: cx((_cx = {}, _cx[styles.footer(theme)] = true, _cx[styles.fixedFooter(theme)] = fixed, _cx[styles.panel(theme)] = Boolean(panel), _cx[styles.fixedPanel(theme)] = fixed && Boolean(panel), _cx[styles.mobileFooter(theme)] = layout.isMobile, _cx))
|
|
47
|
-
},
|
|
50
|
+
}, isNonNullable(gap) ? /*#__PURE__*/React.createElement(Gapped, {
|
|
51
|
+
vertical: layout.isMobile,
|
|
52
|
+
gap: gap
|
|
53
|
+
}, children) : children);
|
|
48
54
|
};
|
|
49
55
|
|
|
50
56
|
return /*#__PURE__*/React.createElement(CommonWrapper, props, /*#__PURE__*/React.createElement(ZIndex, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ModalFooter.tsx"],"names":["React","useContext","useLayoutEffect","getScrollWidth","Sticky","ThemeContext","ZIndex","CommonWrapper","cx","useResponsiveLayout","styles","ModalContext","ModalFooterDataTids","root","ModalFooter","props","theme","modal","layout","sticky","isMobile","panel","children","setHasFooter","setHasPanel","renderContent","fixed","footer","fixedFooter","Boolean","fixedPanel","mobileFooter","footerWrapper","horizontalScroll","__KONTUR_REACT_UI__","__MODAL_FOOTER__"],"mappings":"AAAA,OAAOA,KAAP,IAA2BC,UAA3B,EAAuCC,eAAvC,QAA8D,OAA9D;;AAEA,SAASC,cAAT,QAA+B,8BAA/B;AACA,SAASC,MAAT,QAAuB,WAAvB;AACA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,aAAT,QAA2C,8BAA3C;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,mBAAT,QAAoC,qBAApC;;AAEA,SAASC,MAAT,QAAuB,gBAAvB;AACA,SAASC,YAAT,QAA6B,gBAA7B
|
|
1
|
+
{"version":3,"sources":["ModalFooter.tsx"],"names":["React","useContext","useLayoutEffect","getScrollWidth","Sticky","ThemeContext","ZIndex","CommonWrapper","cx","useResponsiveLayout","Gapped","isNonNullable","styles","ModalContext","ModalFooterDataTids","root","ModalFooter","props","theme","modal","layout","sticky","isMobile","gap","panel","children","setHasFooter","setHasPanel","renderContent","fixed","footer","fixedFooter","Boolean","fixedPanel","mobileFooter","footerWrapper","horizontalScroll","__KONTUR_REACT_UI__","__MODAL_FOOTER__"],"mappings":"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","sourcesContent":["import React, { ReactNode, useContext, useLayoutEffect } from 'react';\n\nimport { getScrollWidth } from '../../lib/dom/getScrollWidth';\nimport { Sticky } from '../Sticky';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { useResponsiveLayout } from '../ResponsiveLayout';\nimport { Gapped, GappedProps } from '../Gapped';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { styles } from './Modal.styles';\nimport { ModalContext } from './ModalContext';\n\nexport interface ModalFooterProps extends CommonProps {\n /**\n * Включает серый цвет в футере\n */\n panel?: boolean;\n /**\n * Закрепляет футер снизу модального окна\n *\n * На десктопе по умолчанию равен `true`\n * На мобильных по умолчанию равен `false`\n */\n sticky?: boolean;\n /**\n * Контент футера\n */\n children?: ReactNode;\n /**\n * Задаёт отступ между элементами футера\n */\n gap?: GappedProps['gap'];\n}\n\nexport const ModalFooterDataTids = {\n root: 'ModalFooter__root',\n} as const;\n\n/**\n * Футер модального окна.\n *\n * @visibleName Modal.Footer\n */\nfunction ModalFooter(props: ModalFooterProps) {\n const theme = useContext(ThemeContext);\n const modal = useContext(ModalContext);\n const layout = useResponsiveLayout();\n\n const { sticky = !layout.isMobile, gap, panel, children } = props;\n\n useLayoutEffect(() => {\n modal.setHasFooter?.();\n modal.setHasPanel?.(panel);\n\n return () => {\n modal.setHasFooter?.(false);\n modal.setHasPanel?.(false);\n };\n }, [panel]);\n\n const renderContent = (fixed = false) => {\n return (\n <div\n data-tid={ModalFooterDataTids.root}\n className={cx({\n [styles.footer(theme)]: true,\n [styles.fixedFooter(theme)]: fixed,\n [styles.panel(theme)]: Boolean(panel),\n [styles.fixedPanel(theme)]: fixed && Boolean(panel),\n [styles.mobileFooter(theme)]: layout.isMobile,\n })}\n >\n {isNonNullable(gap) ? (\n <Gapped vertical={layout.isMobile} gap={gap}>\n {children}\n </Gapped>\n ) : (\n children\n )}\n </div>\n );\n };\n\n return (\n <CommonWrapper {...props}>\n <ZIndex priority={'ModalFooter'} className={styles.footerWrapper()}>\n {sticky ? (\n <Sticky side=\"bottom\" offset={modal.horizontalScroll ? getScrollWidth() : 0}>\n {renderContent}\n </Sticky>\n ) : (\n renderContent()\n )}\n </ZIndex>\n </CommonWrapper>\n );\n}\n\nModalFooter.__KONTUR_REACT_UI__ = 'ModalFooter';\nModalFooter.__MODAL_FOOTER__ = true;\n\nexport { ModalFooter };\n"]}
|
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { CommonProps } from '../../internal/CommonWrapper';
|
|
3
|
+
import { GappedProps } from '../Gapped';
|
|
3
4
|
export interface ModalFooterProps extends CommonProps {
|
|
4
5
|
/**
|
|
5
6
|
* Включает серый цвет в футере
|
|
6
7
|
*/
|
|
7
8
|
panel?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Закрепляет футер снизу модального окна
|
|
11
|
+
*
|
|
12
|
+
* На десктопе по умолчанию равен `true`
|
|
13
|
+
* На мобильных по умолчанию равен `false`
|
|
14
|
+
*/
|
|
8
15
|
sticky?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Контент футера
|
|
18
|
+
*/
|
|
9
19
|
children?: ReactNode;
|
|
20
|
+
/**
|
|
21
|
+
* Задаёт отступ между элементами футера
|
|
22
|
+
*/
|
|
23
|
+
gap?: GappedProps['gap'];
|
|
10
24
|
}
|
|
11
25
|
export declare const ModalFooterDataTids: {
|
|
12
26
|
readonly root: "ModalFooter__root";
|
|
@@ -44,7 +44,6 @@ function _arrayLikeToArray(arr, len) {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
import React from 'react';
|
|
47
|
-
import PropTypes from 'prop-types';
|
|
48
47
|
import invariant from 'invariant';
|
|
49
48
|
import { getRandomID, isNonNullable } from "../../../lib/utils";
|
|
50
49
|
import { Radio } from "../../Radio";
|
|
@@ -216,19 +215,7 @@ var RadioGroup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_Re
|
|
|
216
215
|
};
|
|
217
216
|
|
|
218
217
|
return RadioGroup;
|
|
219
|
-
}(React.Component), _class2.__KONTUR_REACT_UI__ = 'RadioGroup', _class2.
|
|
220
|
-
children: PropTypes.node,
|
|
221
|
-
disabled: PropTypes.bool,
|
|
222
|
-
error: PropTypes.bool,
|
|
223
|
-
inline: PropTypes.bool,
|
|
224
|
-
name: PropTypes.string,
|
|
225
|
-
warning: PropTypes.bool,
|
|
226
|
-
width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
227
|
-
onBlur: PropTypes.func,
|
|
228
|
-
onMouseEnter: PropTypes.func,
|
|
229
|
-
onMouseLeave: PropTypes.func,
|
|
230
|
-
onMouseOver: PropTypes.func
|
|
231
|
-
}, _class2.defaultProps = {
|
|
218
|
+
}(React.Component), _class2.__KONTUR_REACT_UI__ = 'RadioGroup', _class2.defaultProps = {
|
|
232
219
|
renderItem: renderItem
|
|
233
220
|
}, _class2.Prevent = Prevent, _temp)) || _class;
|
|
234
221
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["RadioGroup.tsx"],"names":["React","PropTypes","invariant","getRandomID","isNonNullable","Radio","createPropsGetter","FocusTrap","ThemeContext","CommonWrapper","cx","rootNode","styles","Prevent","RadioGroupContext","RadioGroupDataTids","root","RadioGroup","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","item","theme","itemFirst","itemInline","inline","renderItem","toKey","undefined","ref","element","node","defaultValue","render","renderMain","width","onMouseLeave","onMouseOver","onMouseEnter","onBlur","style","handlers","setRootNode","renderChildren","focus","radio","querySelector","items","children","mapItems","Component","__KONTUR_REACT_UI__","propTypes","bool","string","oneOfType","number","func","_value","fn","result","entry","normalizeEntry","push","Array","isArray"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\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 /** Вызывается при изменении `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\n public static propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n inline: PropTypes.bool,\n name: PropTypes.string,\n warning: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onBlur: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n };\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 } = 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 data-tid={RadioGroupDataTids.root} ref={this.ref} style={style} className={styles.root()} {...handlers}>\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}>\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":["React","invariant","getRandomID","isNonNullable","Radio","createPropsGetter","FocusTrap","ThemeContext","CommonWrapper","cx","rootNode","styles","Prevent","RadioGroupContext","RadioGroupDataTids","root","RadioGroup","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","item","theme","itemFirst","itemInline","inline","renderItem","toKey","undefined","ref","element","node","defaultValue","render","renderMain","width","onMouseLeave","onMouseOver","onMouseEnter","onBlur","style","handlers","setRootNode","renderChildren","focus","radio","querySelector","items","children","mapItems","Component","__KONTUR_REACT_UI__","_value","fn","result","entry","normalizeEntry","push","Array","isArray"],"mappings":"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","sourcesContent":["import React 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 /** Вызывается при изменении `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\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 } = 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 data-tid={RadioGroupDataTids.root} ref={this.ref} style={style} className={styles.root()} {...handlers}>\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}>\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,5 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
2
|
import { CommonProps } from '../../internal/CommonWrapper';
|
|
4
3
|
import { Prevent } from './Prevent';
|
|
5
4
|
export interface RadioGroupProps<T = string | number> extends CommonProps {
|
|
@@ -84,19 +83,6 @@ declare type DefaultProps = Required<Pick<RadioGroupProps<unknown>, 'renderItem'
|
|
|
84
83
|
*/
|
|
85
84
|
export declare class RadioGroup<T> extends React.Component<RadioGroupProps<T>, RadioGroupState<T>> {
|
|
86
85
|
static __KONTUR_REACT_UI__: string;
|
|
87
|
-
static propTypes: {
|
|
88
|
-
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
89
|
-
disabled: PropTypes.Requireable<boolean>;
|
|
90
|
-
error: PropTypes.Requireable<boolean>;
|
|
91
|
-
inline: PropTypes.Requireable<boolean>;
|
|
92
|
-
name: PropTypes.Requireable<string>;
|
|
93
|
-
warning: PropTypes.Requireable<boolean>;
|
|
94
|
-
width: PropTypes.Requireable<string | number>;
|
|
95
|
-
onBlur: PropTypes.Requireable<(...args: any[]) => any>;
|
|
96
|
-
onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
|
|
97
|
-
onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
|
|
98
|
-
onMouseOver: PropTypes.Requireable<(...args: any[]) => any>;
|
|
99
|
-
};
|
|
100
86
|
static defaultProps: DefaultProps;
|
|
101
87
|
static Prevent: typeof Prevent;
|
|
102
88
|
private theme;
|