@skbkontur/react-ui 4.25.2 → 4.26.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.
Files changed (67) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +41 -13
  3. package/cjs/components/Autocomplete/Autocomplete.md +76 -3
  4. package/cjs/components/Button/Button.md +38 -11
  5. package/cjs/components/Calendar/Calendar.md +40 -0
  6. package/cjs/components/DropdownMenu/DropdownMenu.md +39 -0
  7. package/cjs/components/FileUploader/FileUploader.d.ts +2 -0
  8. package/cjs/components/FileUploader/FileUploader.js +32 -9
  9. package/cjs/components/FileUploader/FileUploader.js.map +1 -1
  10. package/cjs/components/FileUploader/FileUploader.md +29 -0
  11. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -0
  12. package/cjs/components/ScrollContainer/ScrollContainer.js +6 -0
  13. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  14. package/cjs/hooks/useDrop.d.ts +1 -1
  15. package/cjs/hooks/useDrop.js.map +1 -1
  16. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.d.ts +5 -2
  17. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js +16 -3
  18. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js.map +1 -1
  19. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -0
  20. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +4 -2
  21. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
  22. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
  23. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js +3 -2
  24. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
  25. package/cjs/internal/RenderContainer/RenderContainer.d.ts +2 -0
  26. package/cjs/internal/RenderContainer/RenderContainer.js +6 -3
  27. package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
  28. package/cjs/internal/RenderContainer/RenderInnerContainer.js +3 -2
  29. package/cjs/internal/RenderContainer/RenderInnerContainer.js.map +1 -1
  30. package/cjs/internal/ZIndex/ZIndex.d.ts +7 -3
  31. package/cjs/internal/ZIndex/ZIndex.js +41 -3
  32. package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
  33. package/cjs/lib/listenFocusOutside.js +4 -2
  34. package/cjs/lib/listenFocusOutside.js.map +1 -1
  35. package/components/Autocomplete/Autocomplete.md +76 -3
  36. package/components/Button/Button.md +38 -11
  37. package/components/Calendar/Calendar.md +40 -0
  38. package/components/DropdownMenu/DropdownMenu.md +39 -0
  39. package/components/FileUploader/FileUploader/FileUploader.js +30 -8
  40. package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
  41. package/components/FileUploader/FileUploader.d.ts +2 -0
  42. package/components/FileUploader/FileUploader.md +29 -0
  43. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +5 -0
  44. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  45. package/components/ScrollContainer/ScrollContainer.d.ts +1 -0
  46. package/hooks/useDrop/useDrop.js.map +1 -1
  47. package/hooks/useDrop.d.ts +1 -1
  48. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js +12 -3
  49. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js.map +1 -1
  50. package/internal/FileUploaderControl/FileUploaderControlProvider.d.ts +5 -2
  51. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +4 -2
  52. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
  53. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -0
  54. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js +4 -2
  55. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
  56. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
  57. package/internal/RenderContainer/RenderContainer/RenderContainer.js +3 -1
  58. package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
  59. package/internal/RenderContainer/RenderContainer.d.ts +2 -0
  60. package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js +5 -4
  61. package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js.map +1 -1
  62. package/internal/ZIndex/ZIndex/ZIndex.js +55 -7
  63. package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
  64. package/internal/ZIndex/ZIndex.d.ts +7 -3
  65. package/lib/listenFocusOutside/listenFocusOutside.js +3 -2
  66. package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
  67. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploader.tsx"],"names":["stopPropagation","e","FileUploaderDataTids","root","content","link","input","defaultRenderFile","file","fileNode","_FileUploader","props","ref","theme","ThemeContext","_isTheme2022","disabled","error","warning","multiple","width","fileUploaderWidth","hideFiles","onBlur","onFocus","onChange","request","validateBeforeUpload","onRequestSuccess","onRequestError","size","renderFile","inputProps","FileUploaderControlContext","files","setFiles","removeFile","reset","setFileValidationResult","isMinLengthReached","locale","inputRef","fileDivRef","isAsync","isSingleMode","isLinkVisible","setIsLinkVisible","upload","tryValidateAndUpload","forEach","validationMessage","id","FileUploaderFileValidationResult","sizeClassName","small","jsStyles","sizeSmall","medium","sizeMedium","large","sizeLarge","sizeIconClass","iconSmall","iconMedium","iconLarge","contentInnerClass","contentInnerSmall","contentInnerMedium","contentInnerLarge","handleChange","newFiles","filesArray","Array","from","attachedFiles","map","getAttachedFile","length","handleDrop","event","dataTransfer","clearData","onDrop","isDraggable","labelRef","isWindowDraggable","windowRef","globalObject","current","document","focus","keyListener","isTabPressed","blur","getRootNode","rootNodeRef","focusedByTab","setFocusedByTab","handleInputChange","target","handleFocus","requestAnimationFrame","handleBlur","hovered","setHovered","uploadButtonClassNames","uploadButton","uploadButtonFocus","dragOver","canDrop","uploadButtonWrapperClassNames","windowDragOver","windowDragOver2022","uploadButtonIconClassNames","icon","iconDisabled","hasOneFile","hasOneFileForSingle","contentClassNames","contentWithFiles","linkClassNames","linkHovered","linkDisabled","iconSizes","parseInt","btnIconSizeSmall","btnIconSizeMedium","btnIconSizeLarge","choosedFile","chooseFile","String","fromCharCode","globalClasses","afterLinkText","afterLinkText_HasFiles","singleFile","orDragHere","visuallyHidden","FileUploader","React","memo","displayName"],"mappings":"mqBAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sD;;AAEA,IAAMA,eAAwC,GAAG,SAA3CA,eAA2C,CAACC,CAAD,UAAOA,CAAC,CAACD,eAAF,EAAP,EAAjD;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDO,IAAME,oBAAoB,GAAG;AAClCC,EAAAA,IAAI,EAAE,oBAD4B;AAElCC,EAAAA,OAAO,EAAE,uBAFyB;AAGlCC,EAAAA,IAAI,EAAE,oBAH4B;AAIlCC,EAAAA,KAAK,EAAE,qBAJ2B,EAA7B,C;;;AAOP,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,IAAD,EAAiCC,QAAjC,UAAkEA,QAAlE,EAA1B;;AAEA,IAAMC,aAAa,GAAG,0CAAuD,cAAvD,EAAuE,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAC3G,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,YAAY,GAAG,+BAAYF,KAAZ,CAArB;;AAEA;AACEG,EAAAA,QADF;;;;;;;;;;;;;;;;AAiBIL,EAAAA,KAjBJ,CACEK,QADF,CAEEC,KAFF,GAiBIN,KAjBJ,CAEEM,KAFF,CAGEC,OAHF,GAiBIP,KAjBJ,CAGEO,OAHF,mBAiBIP,KAjBJ,CAIEQ,QAJF,CAIEA,QAJF,gCAIa,KAJb,kCAiBIR,KAjBJ,CAKES,KALF,CAKEA,KALF,6BAKUP,KAAK,CAACQ,iBALhB,mCAiBIV,KAjBJ,CAMEW,SANF,CAMEA,SANF,iCAMc,KANd,oBAOEC,MAPF,GAiBIZ,KAjBJ,CAOEY,MAPF,CAQEC,OARF,GAiBIb,KAjBJ,CAQEa,OARF,CASEC,QATF,GAiBId,KAjBJ,CASEc,QATF,CAUEC,OAVF,GAiBIf,KAjBJ,CAUEe,OAVF,CAWEC,oBAXF,GAiBIhB,KAjBJ,CAWEgB,oBAXF,CAYEC,gBAZF,GAiBIjB,KAjBJ,CAYEiB,gBAZF,CAaEC,cAbF,GAiBIlB,KAjBJ,CAaEkB,cAbF,eAiBIlB,KAjBJ,CAcEmB,IAdF,CAcEA,IAdF,4BAcS,OAdT,mCAiBInB,KAjBJ,CAeEoB,UAfF,CAeEA,UAfF,kCAeexB,iBAff,qBAgBKyB,UAhBL,+CAiBIrB,KAjBJ;;AAmBA;AACE,yBAAWsB,sDAAX,CADF,CAAQC,KAAR,eAAQA,KAAR,CAAeC,QAAf,eAAeA,QAAf,CAAyBC,UAAzB,eAAyBA,UAAzB,CAAqCC,KAArC,eAAqCA,KAArC,CAA4CC,uBAA5C,eAA4CA,uBAA5C,CAAqEC,kBAArE,eAAqEA,kBAArE;;AAGA,MAAMC,MAAM,GAAG,yCAAf;;AAEA,MAAMC,QAAQ,GAAG,mBAAyB,IAAzB,CAAjB;AACA,MAAMC,UAAU,GAAG,mBAAuB,IAAvB,CAAnB;;AAEA,MAAMC,OAAO,GAAG,CAAC,CAACjB,OAAlB;AACA,MAAMkB,YAAY,GAAG,CAACzB,QAAtB;;AAEA,kBAA0C,qBAAS,IAAT,CAA1C,CAAO0B,aAAP,gBAAsBC,gBAAtB;AACA,MAAMC,MAAM,GAAG,0BAAUrB,OAAV,EAAmBE,gBAAnB,EAAqCC,cAArC,CAAf;;AAEA,MAAMmB,oBAAoB,GAAG;AAC3B,YAACd,KAAD,EAAuC;AACrCA,IAAAA,KAAK,CAACe,OAAN,+GAAc,iBAAOzC,IAAP;AACcmB,gBAAAA,oBADd,sEAC6CA,oBAAoB,CAACnB,IAAD,CADjE,2CACN0C,iBADM;;AAGZ,oBAAI,CAACA,iBAAL,EAAwB;AACtBP,kBAAAA,OAAO,IAAII,MAAM,CAACvC,IAAD,CAAjB;AACD,iBAFD,MAEO;AACL8B,kBAAAA,uBAAuB,CAAC9B,IAAI,CAAC2C,EAAN,EAAUC,mEAAiCnC,KAAjC,CAAuCiC,iBAAvC,CAAV,CAAvB;AACD,iBAPW,wDAAd;;AASD,GAX0B;AAY3B,GAACvB,oBAAD,EAAuBgB,OAAvB,EAAgCI,MAAhC,EAAwCT,uBAAxC,CAZ2B,CAA7B;;;AAeA,MAAMe,aAAa,GAAG,8CAAoBvB,IAApB,EAA0B;AAC9CwB,IAAAA,KAAK,EAAEC,wBAASC,SAAT,CAAmB3C,KAAnB,CADuC;AAE9C4C,IAAAA,MAAM,EAAEF,wBAASG,UAAT,CAAoB7C,KAApB,CAFsC;AAG9C8C,IAAAA,KAAK,EAAEJ,wBAASK,SAAT,CAAmB/C,KAAnB,CAHuC,EAA1B,CAAtB;;;AAMA,MAAMgD,aAAa,GAAG,8CAAoB/B,IAApB,EAA0B;AAC9CwB,IAAAA,KAAK,EAAEC,wBAASO,SAAT,CAAmBjD,KAAnB,CADuC;AAE9C4C,IAAAA,MAAM,EAAEF,wBAASQ,UAAT,CAAoBlD,KAApB,CAFsC;AAG9C8C,IAAAA,KAAK,EAAEJ,wBAASS,SAAT,CAAmBnD,KAAnB,CAHuC,EAA1B,CAAtB;;;AAMA,MAAMoD,iBAAiB,GAAG,8CAAoBnC,IAApB,EAA0B;AAClDwB,IAAAA,KAAK,EAAEC,wBAASW,iBAAT,CAA2BrD,KAA3B,CAD2C;AAElD4C,IAAAA,MAAM,EAAEF,wBAASY,kBAAT,CAA4BtD,KAA5B,CAF0C;AAGlD8C,IAAAA,KAAK,EAAEJ,wBAASa,iBAAT,CAA2BvD,KAA3B,CAH2C,EAA1B,CAA1B;;;AAMA;AACA,MAAMwD,YAAY,GAAG;AACnB,YAACC,QAAD,EAA+B;AAC7B,QAAI,CAACA,QAAL,EAAe;AACb;AACD;;AAED,QAAIC,UAAU,GAAGC,KAAK,CAACC,IAAN,CAAWH,QAAX,CAAjB;;AAEA,QAAI1B,YAAJ,EAAkB;AAChB2B,MAAAA,UAAU,GAAG,CAACA,UAAU,CAAC,CAAD,CAAX,CAAb;AACD;;AAED,QAAMG,aAAa,GAAGH,UAAU,CAACI,GAAX,CAAeC,0BAAf,CAAtB;;AAEA,QAAIhC,YAAY,IAAI8B,aAAa,CAACG,MAA9B,IAAwC3C,KAAK,CAAC2C,MAAlD,EAA0D;AACxDzC,MAAAA,UAAU,CAACF,KAAK,CAAC,CAAD,CAAL,CAASiB,EAAV,CAAV;AACD;;AAED,QAAIuB,aAAa,CAACG,MAAlB,EAA0B;AACxB1C,MAAAA,QAAQ,CAACuC,aAAD,CAAR;AACA1B,MAAAA,oBAAoB,CAAC0B,aAAD,CAApB;AACD;AACF,GAtBkB;AAuBnB,GAAC1B,oBAAD,EAAuBb,QAAvB,EAAiCS,YAAjC,EAA+CV,KAA/C,EAAsDE,UAAtD,CAvBmB,CAArB;;;AA0BA,MAAM0C,UAAU,GAAG;AACjB,YAACC,KAAD,EAAW;AACT,QAAI/D,QAAJ,EAAc;AACZ;AACD;;AAED,QAAQgE,YAAR,GAAyBD,KAAzB,CAAQC,YAAR;AACA,QAAQ9C,KAAR,GAAkB8C,YAAlB,CAAQ9C,KAAR;;AAEA,QAAI,CAAAA,KAAK,QAAL,YAAAA,KAAK,CAAE2C,MAAP,IAAgB,CAApB,EAAuB;AACrBR,MAAAA,YAAY,CAACnC,KAAD,CAAZ;AACA8C,MAAAA,YAAY,CAACC,SAAb;AACD;AACF,GAbgB;AAcjB,GAACZ,YAAD,EAAerD,QAAf,CAdiB,CAAnB;;;AAiBA,iBAAuC,uBAA0B,EAAEkE,MAAM,EAAEJ,UAAV,EAA1B,CAAvC,CAAQK,WAAR,YAAQA,WAAR,CAA0BC,QAA1B,YAAqBxE,GAArB;AACA,kBAA2D,wBAA3D,CAAqByE,iBAArB,aAAQF,WAAR,CAA6CG,SAA7C,aAAwC1E,GAAxC;;AAEA,MAAI,6BAAU2E,0BAAV,CAAJ,EAA6B;AAC3BD,IAAAA,SAAS,CAACE,OAAV,GAAoBD,2BAAaE,QAAjC;AACD;;AAED,MAAMC,KAAK,GAAG,wBAAY,YAAM;AAC9BC,6BAAYC,YAAZ,GAA2B,IAA3B;AACA,yBAAAnD,QAAQ,CAAC+C,OAAT,uCAAkBE,KAAlB;AACD,GAHa,EAGX,EAHW,CAAd;;AAKA,MAAMG,IAAI,GAAG,wBAAY,YAAM;AAC7B,0BAAApD,QAAQ,CAAC+C,OAAT,wCAAkBK,IAAlB;AACD,GAFY,EAEV,EAFU,CAAb;;AAIA,kCAAoBjF,GAApB,EAAyB,oBAAO,EAAE8E,KAAK,EAALA,KAAF,EAASG,IAAI,EAAJA,IAAT,EAAexD,KAAK,EAALA,KAAf,EAAsByD,WAAW,EAAE,+BAAMC,WAAW,CAACP,OAAlB,EAAnC,EAAP,EAAzB,EAAiG;AAC/F5E,EAAAA,GAD+F;AAE/FiF,EAAAA,IAF+F;AAG/FH,EAAAA,KAH+F;AAI/FrD,EAAAA,KAJ+F,CAAjG;;;AAOA,mBAAwC,qBAAS,KAAT,CAAxC,CAAO2D,YAAP,iBAAqBC,eAArB;AACA,MAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACnB,KAAD,EAAgD;AACxEtD,IAAAA,QAAQ,QAAR,YAAAA,QAAQ,CAAGsD,KAAH,CAAR;AACAV,IAAAA,YAAY,CAACU,KAAK,CAACoB,MAAN,CAAajE,KAAd,CAAZ;AACD,GAHD;;AAKA,MAAMkE,WAAW,GAAG,SAAdA,WAAc,CAACnG,CAAD,EAA2C;AAC7D,QAAI,CAACe,QAAL,EAAe;AACb;AACA;AACAuE,iCAAac,qBAAb,+CAAaA,qBAAb,CAAqC,YAAM;AACzC,YAAIV,yBAAYC,YAAhB,EAA8B;AAC5BK,UAAAA,eAAe,CAAC,IAAD,CAAf;AACD;AACF,OAJD;AAKAzE,MAAAA,OAAO,QAAP,YAAAA,OAAO,CAAGvB,CAAH,CAAP;AACD;AACF,GAXD;;AAaA,MAAMqG,UAAU,GAAG,SAAbA,UAAa,CAACrG,CAAD,EAA2C;AAC5DgG,IAAAA,eAAe,CAAC,KAAD,CAAf;AACA,QAAI,CAACjF,QAAL,EAAe;AACbO,MAAAA,MAAM,QAAN,YAAAA,MAAM,CAAGtB,CAAH,CAAN;AACD;AACF,GALD;;AAOA,mBAA8B,qBAAS,KAAT,CAA9B,CAAOsG,OAAP,iBAAgBC,UAAhB;;AAEA,MAAMC,sBAAsB,GAAG;AAC7BlD,0BAASmD,YAAT,CAAsB7F,KAAtB,CAD6B;AAE7BwC,EAAAA,aAF6B;AAG7B2C,EAAAA,YAAY,IAAIzC,wBAASoD,iBAAT,CAA2B9F,KAA3B,CAHa;AAI7BG,EAAAA,QAAQ,IAAIuC,wBAASvC,QAAT,CAAkBH,KAAlB,CAJiB;AAK7B,GAACG,QAAD,IAAauF,OAAb,IAAwBhD,wBAASgD,OAAT,CAAiB1F,KAAjB,CALK;AAM7B,GAAC,CAACK,OAAF,IAAaqC,wBAASrC,OAAT,CAAiBL,KAAjB,CANgB;AAO7B,GAAC,CAACI,KAAF,IAAWsC,wBAAStC,KAAT,CAAeJ,KAAf,CAPkB;AAQ7BsE,EAAAA,WAAW,IAAI,CAACnE,QAAhB,IAA4BuC,wBAASqD,QAAT,CAAkB/F,KAAlB,CARC,CAA/B;;;AAWA,MAAMgG,OAAO,GAAGxB,iBAAiB,IAAI,CAACrE,QAAtC;AACA,MAAM8F,6BAA6B,GAAG;AACpC,GAAC/F,YAAD,IAAiB8F,OAAjB,IAA4BtD,wBAASwD,cAAT,CAAwBlG,KAAxB,CADQ;AAEpCE,EAAAA,YAAY,IAAI8F,OAAhB,IAA2BtD,wBAASyD,kBAAT,CAA4BnG,KAA5B,CAFS,CAAtC;;;AAKA,MAAMoG,0BAA0B,GAAG,iBAAG1D,wBAAS2D,IAAT,CAAcrG,KAAd,CAAH,EAAyBgD,aAAzB,EAAwC7C,QAAQ,IAAIuC,wBAAS4D,YAAT,CAAsBtG,KAAtB,CAApD,CAAnC;;AAEA,MAAMuG,UAAU,GAAGlF,KAAK,CAAC2C,MAAN,KAAiB,CAApC;AACA,MAAMwC,mBAAmB,GAAGzE,YAAY,IAAIwE,UAAhB,IAA8B,CAAC9F,SAA3D;;AAEA,MAAMgG,iBAAiB,GAAG,iBAAG/D,wBAASnD,OAAT,EAAH,EAAuBiH,mBAAmB,IAAI9D,wBAASgE,gBAAT,EAA9C,CAA1B;;AAEA,MAAMC,cAAc,GAAG;AACrBjE,0BAASlD,IAAT,CAAcQ,KAAd,CADqB;AAErB,GAACG,QAAD,IAAauF,OAAb,IAAwBhD,wBAASkE,WAAT,CAAqB5G,KAArB,CAFH;AAGrBG,EAAAA,QAAQ,IAAIuC,wBAASmE,YAAT,CAAsB7G,KAAtB,CAHS,CAAvB;;;AAMA,wBAAU,YAAM;AACdiC,IAAAA,gBAAgB,CAACuE,mBAAmB,GAAG,CAAC9E,kBAAJ,GAAyB,IAA7C,CAAhB;AACD,GAFD,EAEG,CAACA,kBAAD,EAAqB8E,mBAArB,CAFH;;AAIA,MAAMtB,WAAW,GAAG,mBAAO,IAAP,CAApB;;AAEA,MAAM4B,SAAmC,GAAG;AAC1CrE,IAAAA,KAAK,EAAEsE,QAAQ,CAAC/G,KAAK,CAACgH,gBAAP,CAD2B;AAE1CpE,IAAAA,MAAM,EAAEmE,QAAQ,CAAC/G,KAAK,CAACiH,iBAAP,CAF0B;AAG1CnE,IAAAA,KAAK,EAAEiE,QAAQ,CAAC/G,KAAK,CAACkH,gBAAP,CAH2B,EAA5C;;AAKA,MAAMb,IAAI,GAAGnG,YAAY,gBAAG,6BAAC,sBAAD,IAAgB,IAAI,EAAE4G,SAAS,CAAC7F,IAAD,CAA/B,GAAH,gBAA+C,6BAAC,cAAD,OAAxE;;AAEA;AACE,iCAAC,4BAAD,EAAmBnB,KAAnB;AACE;AACE,kBAAUT,oBAAoB,CAACC,IADjC;AAEE,MAAA,SAAS,EAAEoD,wBAASpD,IAAT,CAAcU,KAAd,CAFb;AAGE,MAAA,KAAK,EAAE,kCAAc,EAAEO,KAAK,EAALA,KAAF,EAAd,CAHT;AAIE,MAAA,GAAG,EAAE2E,WAJP;;AAMG,KAACzE,SAAD,IAAc,CAACsB,YAAf,IAA+B,CAAC,CAACV,KAAK,CAAC2C,MAAvC,iBAAiD,6BAAC,0CAAD,IAAsB,UAAU,EAAE9C,UAAlC,EAA8C,IAAI,EAAED,IAApD,GANpD;AAOE,0CAAK,SAAS,EAAEgF,6BAAhB;AACE;AACE,MAAA,YAAY,EAAE,gCAAMN,UAAU,CAAC,IAAD,CAAhB,EADhB;AAEE,MAAA,YAAY,EAAE,gCAAMA,UAAU,CAAC,KAAD,CAAhB,EAFhB;AAGE,MAAA,GAAG,EAAEpB,QAHP;AAIE,MAAA,SAAS,EAAEqB,sBAJb;;AAME;AACE,kBAAUvG,oBAAoB,CAACE,OADjC;AAEE,MAAA,SAAS,EAAE,iBAAGkH,iBAAH,iBAAyBrD,iBAAzB,IAA6C,CAAC/B,KAAK,CAAC2C,MAAP,IAAiB,CAACjC,YAA/D,OAFb;;AAIGC,IAAAA,aAAa;AACZ,2CAAM,YAAU3C,oBAAoB,CAACG,IAArC,EAA2C,SAAS,EAAEmH,cAAtD;AACGH,IAAAA,mBAAmB,GAAG7E,MAAM,CAACwF,WAAV,GAAwBxF,MAAM,CAACyF,UADrD,CALJ;;;AASGpF,IAAAA,aAAa,IAAIqF,MAAM,CAACC,YAAP,CAAoB,IAApB,CATpB,CAS8C,YAT9C;AAUE;AACE,MAAA,SAAS,EAAE;AACTC,mCAAcC,aADL;AAEThB,MAAAA,mBAAmB,GAAG9D,wBAAS+E,sBAAT,CAAgCzH,KAAhC,CAAH,GAA4C0C,wBAAS8E,aAAT,CAAuBxH,KAAvB,CAFtD,CADb;;;AAMGwG,IAAAA,mBAAmB;AAClB,0CAAK,GAAG,EAAE3E,UAAV,EAAsB,SAAS,EAAEa,wBAASgF,UAAT,EAAjC;AACGxG,IAAAA,UAAU,CAACG,KAAK,CAAC,CAAD,CAAN,eAAW,6BAAC,kCAAD,IAAkB,IAAI,EAAEA,KAAK,CAAC,CAAD,CAA7B,EAAkC,IAAI,EAAEJ,IAAxC,GAAX,CADb,CADkB;;;AAKlB;AACGU,IAAAA,MAAM,CAACgG,UADV;AAEE,0CAAK,SAAS,EAAEvB,0BAAhB,IAA6CC,IAA7C,CAFF,CAXJ,CAVF,CANF;;;;;AAkCE,iCAAC,wCAAD,IAAqB,kBAAkB,EAAE,sCAAMjB,eAAe,CAAC,KAAD,CAArB,EAAzC;AACE;AACMjE,IAAAA,UADN;AAEE,kBAAU9B,oBAAoB,CAACI,KAFjC;AAGE,MAAA,GAAG,EAAEmC,QAHP;AAIE,MAAA,QAAQ,EAAEzB,QAAQ,GAAG,CAAC,CAAJ,GAAQ,CAJ5B;AAKE,MAAA,IAAI,EAAC,MALP;AAME,MAAA,QAAQ,EAAEA,QANZ;AAOE,MAAA,QAAQ,EAAEG,QAPZ;AAQE,MAAA,SAAS,EAAEoC,wBAASkF,cAAT,EARb;AASE,MAAA,OAAO,EAAEzI,eATX;AAUE,MAAA,QAAQ,EAAEkG,iBAVZ;AAWE,MAAA,OAAO,EAAEE,WAXX;AAYE,MAAA,MAAM,EAAEE;AACR;AAbF,QAcE,KAAK,EAAE,EAdT,IADF,CAlCF,CADF,CAPF,CADF,CADF;;;;;;;;AAmED,CAnRqB,CAAtB;;;;AAuRO,IAAMoC,YAAY,GAAG;AAC1BC,eAAMC,IAAN,CAAWlI,aAAX,CAD0B,CAArB,C;;AAGPgI,YAAY,CAACG,WAAb,GAA2B,cAA3B","sourcesContent":["import React, { useCallback, useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { FileUploaderAttachedFile, getAttachedFile } from '../../internal/FileUploaderControl/fileUtils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { InstanceWithRootNode } from '../../lib/rootNode';\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { FileUploaderControlContext } from '../../internal/FileUploaderControl/FileUploaderControlContext';\nimport { useControlLocale } from '../../internal/FileUploaderControl/hooks/useControlLocale';\nimport { useUpload } from '../../internal/FileUploaderControl/hooks/useUpload';\nimport { useDrop } from '../../hooks/useDrop';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { UploadIcon } from '../../internal/icons/16px';\nimport { FileUploaderControlProviderProps } from '../../internal/FileUploaderControl/FileUploaderControlProvider';\nimport { withFileUploaderControlProvider } from '../../internal/FileUploaderControl/withFileUploaderControlProvider';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { FileUploaderFile } from '../../internal/FileUploaderControl/FileUploaderFile/FileUploaderFile';\nimport { FileUploaderFileList } from '../../internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { FileUploaderFileValidationResult } from '../../internal/FileUploaderControl/FileUploaderFileValidationResult';\nimport { useFileUploaderSize } from '../../internal/FileUploaderControl/hooks/useFileUploaderSize';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { SizeProp } from '../../lib/types/props';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { UploadIcon as UploadIcon2022 } from './UploadIcon';\nimport { globalClasses, jsStyles } from './FileUploader.styles';\n\nconst stopPropagation: React.ReactEventHandler = (e) => e.stopPropagation();\n\n/**\n * @deprecated use SizeProp\n */\nexport type FileUploaderSize = SizeProp;\n\ntype FileUploaderOverriddenProps = 'size';\n\ninterface _FileUploaderProps\n extends CommonProps,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, FileUploaderOverriddenProps> {\n /** Состояние ошибки всего контрола */\n error?: boolean;\n /** Состояние предупреждения всего контрола */\n warning?: boolean;\n /** Свойство ширины. */\n width?: React.CSSProperties['width'];\n /**\n * Задаёт размер контрола.\n *\n * **Допустимые значения**: `\"small\"`, `\"medium\"`, `\"large\"`.\n */\n size?: SizeProp;\n /** Свойство, скрывающее отображение файлов. */\n hideFiles?: boolean;\n\n /** Функция, через которую отправляем файлы. Используется для отслеживания статуса загрузки файла. */\n request?: (file: FileUploaderAttachedFile) => Promise<void>;\n /** Срабатывает при удачной попытке отправки через request */\n onRequestSuccess?: (fileId: string) => void;\n /** Срабатывает при неудачной попытке отправки через request */\n onRequestError?: (fileId: string) => void;\n\n /**\n * Функция валидации каждого файла.\n * Срабатывает после выбора файлов и перед попыткой отправить в request.\n * Чтобы вывести валидацию ошибки, промис должен вернуть строку.\n * */\n validateBeforeUpload?: (file: FileUploaderAttachedFile) => Promise<Nullable<string>>;\n\n /**\n * Функция, позволяющая кастомизировать файлы.\n * Через нее можно вешать кастомные валидации на каждый файл.\n * */\n renderFile?: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n}\n\nexport interface FileUploaderRef extends InstanceWithRootNode {\n focus: () => void;\n blur: () => void;\n /** Сбрасывает выбранные файлы */\n reset: () => void;\n}\n\nexport const FileUploaderDataTids = {\n root: 'FileUploader__root',\n content: 'FileUploader__content',\n link: 'FileUploader__link',\n input: 'FileUploader__input',\n} as const;\n\nconst defaultRenderFile = (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => fileNode;\n\nconst _FileUploader = forwardRefAndName<FileUploaderRef, _FileUploaderProps>('FileUploader', (props, ref) => {\n const theme = useContext(ThemeContext);\n const _isTheme2022 = isTheme2022(theme);\n\n const {\n disabled,\n error,\n warning,\n multiple = false,\n width = theme.fileUploaderWidth,\n hideFiles = false,\n onBlur,\n onFocus,\n onChange,\n request,\n validateBeforeUpload,\n onRequestSuccess,\n onRequestError,\n size = 'small',\n renderFile = defaultRenderFile,\n ...inputProps\n } = props;\n\n const { files, setFiles, removeFile, reset, setFileValidationResult, isMinLengthReached } =\n useContext(FileUploaderControlContext);\n\n const locale = useControlLocale();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const fileDivRef = useRef<HTMLDivElement>(null);\n\n const isAsync = !!request;\n const isSingleMode = !multiple;\n\n const [isLinkVisible, setIsLinkVisible] = useState(true);\n const upload = useUpload(request, onRequestSuccess, onRequestError);\n\n const tryValidateAndUpload = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n files.forEach(async (file) => {\n const validationMessage = validateBeforeUpload && (await validateBeforeUpload(file));\n\n if (!validationMessage) {\n isAsync && upload(file);\n } else {\n setFileValidationResult(file.id, FileUploaderFileValidationResult.error(validationMessage));\n }\n });\n },\n [validateBeforeUpload, isAsync, upload, setFileValidationResult],\n );\n\n const sizeClassName = useFileUploaderSize(size, {\n small: jsStyles.sizeSmall(theme),\n medium: jsStyles.sizeMedium(theme),\n large: jsStyles.sizeLarge(theme),\n });\n\n const sizeIconClass = useFileUploaderSize(size, {\n small: jsStyles.iconSmall(theme),\n medium: jsStyles.iconMedium(theme),\n large: jsStyles.iconLarge(theme),\n });\n\n const contentInnerClass = useFileUploaderSize(size, {\n small: jsStyles.contentInnerSmall(theme),\n medium: jsStyles.contentInnerMedium(theme),\n large: jsStyles.contentInnerLarge(theme),\n });\n\n /** common part **/\n const handleChange = useCallback(\n (newFiles: FileList | null) => {\n if (!newFiles) {\n return;\n }\n\n let filesArray = Array.from(newFiles);\n\n if (isSingleMode) {\n filesArray = [filesArray[0]];\n }\n\n const attachedFiles = filesArray.map(getAttachedFile);\n\n if (isSingleMode && attachedFiles.length && files.length) {\n removeFile(files[0].id);\n }\n\n if (attachedFiles.length) {\n setFiles(attachedFiles);\n tryValidateAndUpload(attachedFiles);\n }\n },\n [tryValidateAndUpload, setFiles, isSingleMode, files, removeFile],\n );\n\n const handleDrop = useCallback(\n (event) => {\n if (disabled) {\n return;\n }\n\n const { dataTransfer } = event;\n const { files } = dataTransfer;\n\n if (files?.length > 0) {\n handleChange(files);\n dataTransfer.clearData();\n }\n },\n [handleChange, disabled],\n );\n\n const { isDraggable, ref: labelRef } = useDrop<HTMLLabelElement>({ onDrop: handleDrop });\n const { isDraggable: isWindowDraggable, ref: windowRef } = useDrop<Document>();\n\n if (isBrowser(globalObject)) {\n windowRef.current = globalObject.document;\n }\n\n const focus = useCallback(() => {\n keyListener.isTabPressed = true;\n inputRef.current?.focus();\n }, []);\n\n const blur = useCallback(() => {\n inputRef.current?.blur();\n }, []);\n\n useImperativeHandle(ref, () => ({ focus, blur, reset, getRootNode: () => rootNodeRef.current }), [\n ref,\n blur,\n focus,\n reset,\n ]);\n\n const [focusedByTab, setFocusedByTab] = useState(false);\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n handleChange(event.target.files);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n onFocus?.(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedByTab(false);\n if (!disabled) {\n onBlur?.(e);\n }\n };\n\n const [hovered, setHovered] = useState(false);\n\n const uploadButtonClassNames = cx(\n jsStyles.uploadButton(theme),\n sizeClassName,\n focusedByTab && jsStyles.uploadButtonFocus(theme),\n disabled && jsStyles.disabled(theme),\n !disabled && hovered && jsStyles.hovered(theme),\n !!warning && jsStyles.warning(theme),\n !!error && jsStyles.error(theme),\n isDraggable && !disabled && jsStyles.dragOver(theme),\n );\n\n const canDrop = isWindowDraggable && !disabled;\n const uploadButtonWrapperClassNames = cx(\n !_isTheme2022 && canDrop && jsStyles.windowDragOver(theme),\n _isTheme2022 && canDrop && jsStyles.windowDragOver2022(theme),\n );\n\n const uploadButtonIconClassNames = cx(jsStyles.icon(theme), sizeIconClass, disabled && jsStyles.iconDisabled(theme));\n\n const hasOneFile = files.length === 1;\n const hasOneFileForSingle = isSingleMode && hasOneFile && !hideFiles;\n\n const contentClassNames = cx(jsStyles.content(), hasOneFileForSingle && jsStyles.contentWithFiles());\n\n const linkClassNames = cx(\n jsStyles.link(theme),\n !disabled && hovered && jsStyles.linkHovered(theme),\n disabled && jsStyles.linkDisabled(theme),\n );\n\n useEffect(() => {\n setIsLinkVisible(hasOneFileForSingle ? !isMinLengthReached : true);\n }, [isMinLengthReached, hasOneFileForSingle]);\n\n const rootNodeRef = useRef(null);\n\n const iconSizes: Record<SizeProp, number> = {\n small: parseInt(theme.btnIconSizeSmall),\n medium: parseInt(theme.btnIconSizeMedium),\n large: parseInt(theme.btnIconSizeLarge),\n };\n const icon = _isTheme2022 ? <UploadIcon2022 size={iconSizes[size]} /> : <UploadIcon />;\n\n return (\n <CommonWrapper {...props}>\n <div\n data-tid={FileUploaderDataTids.root}\n className={jsStyles.root(theme)}\n style={useMemoObject({ width })}\n ref={rootNodeRef}\n >\n {!hideFiles && !isSingleMode && !!files.length && <FileUploaderFileList renderFile={renderFile} size={size} />}\n <div className={uploadButtonWrapperClassNames}>\n <label\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n ref={labelRef}\n className={uploadButtonClassNames}\n >\n <div\n data-tid={FileUploaderDataTids.content}\n className={cx(contentClassNames, { [contentInnerClass]: !files.length || !isSingleMode })}\n >\n {isLinkVisible && (\n <span data-tid={FileUploaderDataTids.link} className={linkClassNames}>\n {hasOneFileForSingle ? locale.choosedFile : locale.chooseFile}\n </span>\n )}\n {isLinkVisible && String.fromCharCode(0xa0) /* &nbsp; */}\n <div\n className={cx(\n globalClasses.afterLinkText,\n hasOneFileForSingle ? jsStyles.afterLinkText_HasFiles(theme) : jsStyles.afterLinkText(theme),\n )}\n >\n {hasOneFileForSingle ? (\n <div ref={fileDivRef} className={jsStyles.singleFile()}>\n {renderFile(files[0], <FileUploaderFile file={files[0]} size={size} />)}\n </div>\n ) : (\n <>\n {locale.orDragHere}&nbsp;\n <div className={uploadButtonIconClassNames}>{icon}</div>\n </>\n )}\n </div>\n </div>\n <FocusControlWrapper onBlurWhenDisabled={() => setFocusedByTab(false)}>\n <input\n {...inputProps}\n data-tid={FileUploaderDataTids.input}\n ref={inputRef}\n tabIndex={disabled ? -1 : 0}\n type=\"file\"\n disabled={disabled}\n multiple={multiple}\n className={jsStyles.visuallyHidden()}\n onClick={stopPropagation}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n // для того, чтобы срабатывало событие change при выборе одного и того же файла подряд\n value={''}\n />\n </FocusControlWrapper>\n </label>\n </div>\n </div>\n </CommonWrapper>\n );\n});\n\nexport interface FileUploaderProps extends _FileUploaderProps, FileUploaderControlProviderProps {}\n\nexport const FileUploader = withFileUploaderControlProvider<FileUploaderProps, FileUploaderRef>(\n React.memo(_FileUploader),\n);\nFileUploader.displayName = 'FileUploader';\n"]}
1
+ {"version":3,"sources":["FileUploader.tsx"],"names":["stopPropagation","e","FileUploaderDataTids","root","content","link","input","defaultRenderFile","file","fileNode","_FileUploader","props","ref","theme","ThemeContext","_isTheme2022","initialFiles","disabled","error","warning","multiple","width","fileUploaderWidth","hideFiles","onBlur","onFocus","onChange","request","validateBeforeUpload","onRequestSuccess","onRequestError","size","renderFile","inputProps","FileUploaderControlContext","files","setFiles","removeFile","reset","setFileValidationResult","isMinLengthReached","locale","inputRef","fileDivRef","isAsync","isSingleMode","isLinkVisible","setIsLinkVisible","upload","tryValidateAndUpload","forEach","validationMessage","id","FileUploaderFileValidationResult","sizeClassName","small","jsStyles","sizeSmall","medium","sizeMedium","large","sizeLarge","sizeIconClass","iconSmall","iconMedium","iconLarge","contentInnerClass","contentInnerSmall","contentInnerMedium","contentInnerLarge","handleChange","newFiles","length","filesArray","Array","from","attachedFiles","map","getAttachedFile","handleDrop","event","dataTransfer","clearData","onDrop","isDraggable","labelRef","isWindowDraggable","windowRef","globalObject","current","document","focus","keyListener","isTabPressed","blur","getRootNode","rootNodeRef","focusedByTab","setFocusedByTab","handleInputChange","target","handleFocus","requestAnimationFrame","handleBlur","handleRemoveFile","fileId","DataTransfer","filter","f","items","add","originalFile","hovered","setHovered","uploadButtonClassNames","uploadButton","uploadButtonFocus","dragOver","canDrop","uploadButtonWrapperClassNames","windowDragOver","windowDragOver2022","uploadButtonIconClassNames","icon","iconDisabled","hasOneFile","hasOneFileForSingle","contentClassNames","contentWithFiles","linkClassNames","linkHovered","linkDisabled","iconSizes","parseInt","btnIconSizeSmall","btnIconSizeMedium","btnIconSizeLarge","choosedFile","chooseFile","String","fromCharCode","globalClasses","afterLinkText","afterLinkText_HasFiles","singleFile","orDragHere","visuallyHidden","FileUploader","React","memo","displayName"],"mappings":"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","sourcesContent":["import React, { useCallback, useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { FileUploaderAttachedFile, getAttachedFile } from '../../internal/FileUploaderControl/fileUtils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { InstanceWithRootNode } from '../../lib/rootNode';\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { FileUploaderControlContext } from '../../internal/FileUploaderControl/FileUploaderControlContext';\nimport { useControlLocale } from '../../internal/FileUploaderControl/hooks/useControlLocale';\nimport { useUpload } from '../../internal/FileUploaderControl/hooks/useUpload';\nimport { useDrop } from '../../hooks/useDrop';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { UploadIcon } from '../../internal/icons/16px';\nimport { FileUploaderControlProviderProps } from '../../internal/FileUploaderControl/FileUploaderControlProvider';\nimport { withFileUploaderControlProvider } from '../../internal/FileUploaderControl/withFileUploaderControlProvider';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { FileUploaderFile } from '../../internal/FileUploaderControl/FileUploaderFile/FileUploaderFile';\nimport { FileUploaderFileList } from '../../internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { FileUploaderFileValidationResult } from '../../internal/FileUploaderControl/FileUploaderFileValidationResult';\nimport { useFileUploaderSize } from '../../internal/FileUploaderControl/hooks/useFileUploaderSize';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { SizeProp } from '../../lib/types/props';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { UploadIcon as UploadIcon2022 } from './UploadIcon';\nimport { globalClasses, jsStyles } from './FileUploader.styles';\n\nconst stopPropagation: React.ReactEventHandler = (e) => e.stopPropagation();\n\n/**\n * @deprecated use SizeProp\n */\nexport type FileUploaderSize = SizeProp;\n\ntype FileUploaderOverriddenProps = 'size';\n\ninterface _FileUploaderProps\n extends CommonProps,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, FileUploaderOverriddenProps> {\n /** Начальное состояние загруженных файлов */\n initialFiles?: File[];\n /** Состояние ошибки всего контрола */\n error?: boolean;\n /** Состояние предупреждения всего контрола */\n warning?: boolean;\n /** Свойство ширины. */\n width?: React.CSSProperties['width'];\n /**\n * Задаёт размер контрола.\n *\n * **Допустимые значения**: `\"small\"`, `\"medium\"`, `\"large\"`.\n */\n size?: SizeProp;\n /** Свойство, скрывающее отображение файлов. */\n hideFiles?: boolean;\n\n /** Функция, через которую отправляем файлы. Используется для отслеживания статуса загрузки файла. */\n request?: (file: FileUploaderAttachedFile) => Promise<void>;\n /** Срабатывает при удачной попытке отправки через request */\n onRequestSuccess?: (fileId: string) => void;\n /** Срабатывает при неудачной попытке отправки через request */\n onRequestError?: (fileId: string) => void;\n\n /**\n * Функция валидации каждого файла.\n * Срабатывает после выбора файлов и перед попыткой отправить в request.\n * Чтобы вывести валидацию ошибки, промис должен вернуть строку.\n * */\n validateBeforeUpload?: (file: FileUploaderAttachedFile) => Promise<Nullable<string>>;\n\n /**\n * Функция, позволяющая кастомизировать файлы.\n * Через нее можно вешать кастомные валидации на каждый файл.\n * */\n renderFile?: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n}\n\nexport interface FileUploaderRef extends InstanceWithRootNode {\n focus: () => void;\n blur: () => void;\n /** Сбрасывает выбранные файлы */\n reset: () => void;\n}\n\nexport const FileUploaderDataTids = {\n root: 'FileUploader__root',\n content: 'FileUploader__content',\n link: 'FileUploader__link',\n input: 'FileUploader__input',\n} as const;\n\nconst defaultRenderFile = (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => fileNode;\n\nconst _FileUploader = forwardRefAndName<FileUploaderRef, _FileUploaderProps>('FileUploader', (props, ref) => {\n const theme = useContext(ThemeContext);\n const _isTheme2022 = isTheme2022(theme);\n\n const {\n initialFiles,\n disabled,\n error,\n warning,\n multiple = false,\n width = theme.fileUploaderWidth,\n hideFiles = false,\n onBlur,\n onFocus,\n onChange,\n request,\n validateBeforeUpload,\n onRequestSuccess,\n onRequestError,\n size = 'small',\n renderFile = defaultRenderFile,\n ...inputProps\n } = props;\n\n const { files, setFiles, removeFile, reset, setFileValidationResult, isMinLengthReached } =\n useContext(FileUploaderControlContext);\n\n const locale = useControlLocale();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const fileDivRef = useRef<HTMLDivElement>(null);\n\n const isAsync = !!request;\n const isSingleMode = !multiple;\n\n const [isLinkVisible, setIsLinkVisible] = useState(true);\n const upload = useUpload(request, onRequestSuccess, onRequestError);\n\n const tryValidateAndUpload = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n files.forEach(async (file) => {\n const validationMessage = validateBeforeUpload && (await validateBeforeUpload(file));\n\n if (!validationMessage) {\n isAsync && upload(file);\n } else {\n setFileValidationResult(file.id, FileUploaderFileValidationResult.error(validationMessage));\n }\n });\n },\n [validateBeforeUpload, isAsync, upload, setFileValidationResult],\n );\n\n const sizeClassName = useFileUploaderSize(size, {\n small: jsStyles.sizeSmall(theme),\n medium: jsStyles.sizeMedium(theme),\n large: jsStyles.sizeLarge(theme),\n });\n\n const sizeIconClass = useFileUploaderSize(size, {\n small: jsStyles.iconSmall(theme),\n medium: jsStyles.iconMedium(theme),\n large: jsStyles.iconLarge(theme),\n });\n\n const contentInnerClass = useFileUploaderSize(size, {\n small: jsStyles.contentInnerSmall(theme),\n medium: jsStyles.contentInnerMedium(theme),\n large: jsStyles.contentInnerLarge(theme),\n });\n\n /** common part **/\n const handleChange = useCallback(\n (newFiles: FileList | null) => {\n if (!newFiles || !newFiles.length) {\n return;\n }\n\n let filesArray = Array.from(newFiles);\n\n if (isSingleMode) {\n filesArray = [filesArray[0]];\n }\n\n const attachedFiles = filesArray.map(getAttachedFile);\n\n if (isSingleMode && attachedFiles.length && files.length) {\n removeFile(files[0].id);\n }\n\n if (attachedFiles.length) {\n setFiles(attachedFiles);\n tryValidateAndUpload(attachedFiles);\n }\n },\n [tryValidateAndUpload, setFiles, isSingleMode, files, removeFile],\n );\n\n const handleDrop = useCallback(\n (event) => {\n if (disabled) {\n return;\n }\n\n const { dataTransfer } = event;\n const { files } = dataTransfer;\n\n if (files?.length > 0) {\n handleChange(files);\n dataTransfer.clearData();\n }\n },\n [handleChange, disabled],\n );\n\n const { isDraggable, ref: labelRef } = useDrop<HTMLLabelElement>({ onDrop: handleDrop });\n const { isDraggable: isWindowDraggable, ref: windowRef } = useDrop<Document>();\n\n if (isBrowser(globalObject)) {\n windowRef.current = globalObject.document;\n }\n\n const focus = useCallback(() => {\n keyListener.isTabPressed = true;\n inputRef.current?.focus();\n }, []);\n\n const blur = useCallback(() => {\n inputRef.current?.blur();\n }, []);\n\n useImperativeHandle(ref, () => ({ focus, blur, reset, getRootNode: () => rootNodeRef.current }), [\n ref,\n blur,\n focus,\n reset,\n ]);\n\n const [focusedByTab, setFocusedByTab] = useState(false);\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n handleChange(event.target.files);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n onFocus?.(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedByTab(false);\n if (!disabled) {\n onBlur?.(e);\n }\n };\n\n const handleRemoveFile = useCallback((fileId: string) => {\n const dataTransfer = new DataTransfer();\n files\n .filter((f) => f.id !== fileId)\n .forEach((file) => {\n dataTransfer.items.add(file.originalFile);\n });\n inputRef.current && (inputRef.current.files = dataTransfer.files);\n }, []);\n\n const [hovered, setHovered] = useState(false);\n\n const uploadButtonClassNames = cx(\n jsStyles.uploadButton(theme),\n sizeClassName,\n focusedByTab && jsStyles.uploadButtonFocus(theme),\n disabled && jsStyles.disabled(theme),\n !disabled && hovered && jsStyles.hovered(theme),\n !!warning && jsStyles.warning(theme),\n !!error && jsStyles.error(theme),\n isDraggable && !disabled && jsStyles.dragOver(theme),\n );\n\n const canDrop = isWindowDraggable && !disabled;\n const uploadButtonWrapperClassNames = cx(\n !_isTheme2022 && canDrop && jsStyles.windowDragOver(theme),\n _isTheme2022 && canDrop && jsStyles.windowDragOver2022(theme),\n );\n\n const uploadButtonIconClassNames = cx(jsStyles.icon(theme), sizeIconClass, disabled && jsStyles.iconDisabled(theme));\n\n const hasOneFile = files.length === 1;\n const hasOneFileForSingle = isSingleMode && hasOneFile && !hideFiles;\n\n const contentClassNames = cx(jsStyles.content(), hasOneFileForSingle && jsStyles.contentWithFiles());\n\n const linkClassNames = cx(\n jsStyles.link(theme),\n !disabled && hovered && jsStyles.linkHovered(theme),\n disabled && jsStyles.linkDisabled(theme),\n );\n\n useEffect(() => {\n setIsLinkVisible(hasOneFileForSingle ? !isMinLengthReached : true);\n }, [isMinLengthReached, hasOneFileForSingle]);\n\n useEffect(() => {\n if (!files || !files.length || !inputRef.current) {\n return;\n }\n\n const dataTransfer = new DataTransfer();\n files.forEach((file) => dataTransfer.items.add(file.originalFile));\n inputRef.current.files = dataTransfer.files;\n }, []);\n\n const rootNodeRef = useRef(null);\n\n const iconSizes: Record<SizeProp, number> = {\n small: parseInt(theme.btnIconSizeSmall),\n medium: parseInt(theme.btnIconSizeMedium),\n large: parseInt(theme.btnIconSizeLarge),\n };\n const icon = _isTheme2022 ? <UploadIcon2022 size={iconSizes[size]} /> : <UploadIcon />;\n\n return (\n <CommonWrapper {...props}>\n <div\n data-tid={FileUploaderDataTids.root}\n className={jsStyles.root(theme)}\n style={useMemoObject({ width })}\n ref={rootNodeRef}\n >\n {!hideFiles && !isSingleMode && !!files.length && (\n <FileUploaderFileList renderFile={renderFile} size={size} onRemove={handleRemoveFile} />\n )}\n <div className={uploadButtonWrapperClassNames}>\n <label\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n ref={labelRef}\n className={uploadButtonClassNames}\n >\n <div\n data-tid={FileUploaderDataTids.content}\n className={cx(contentClassNames, { [contentInnerClass]: !files.length || !isSingleMode })}\n >\n {isLinkVisible && (\n <span data-tid={FileUploaderDataTids.link} className={linkClassNames}>\n {hasOneFileForSingle ? locale.choosedFile : locale.chooseFile}\n </span>\n )}\n {isLinkVisible && String.fromCharCode(0xa0) /* &nbsp; */}\n <div\n className={cx(\n globalClasses.afterLinkText,\n hasOneFileForSingle ? jsStyles.afterLinkText_HasFiles(theme) : jsStyles.afterLinkText(theme),\n )}\n >\n {hasOneFileForSingle ? (\n <div ref={fileDivRef} className={jsStyles.singleFile()}>\n {renderFile(files[0], <FileUploaderFile file={files[0]} size={size} onRemove={handleRemoveFile} />)}\n </div>\n ) : (\n <>\n {locale.orDragHere}&nbsp;\n <div className={uploadButtonIconClassNames}>{icon}</div>\n </>\n )}\n </div>\n </div>\n <FocusControlWrapper onBlurWhenDisabled={() => setFocusedByTab(false)}>\n <input\n {...inputProps}\n data-tid={FileUploaderDataTids.input}\n ref={inputRef}\n tabIndex={disabled ? -1 : 0}\n type=\"file\"\n disabled={disabled}\n multiple={multiple}\n className={jsStyles.visuallyHidden()}\n onClick={stopPropagation}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n </FocusControlWrapper>\n </label>\n </div>\n </div>\n </CommonWrapper>\n );\n});\n\nexport interface FileUploaderProps extends _FileUploaderProps, FileUploaderControlProviderProps {}\n\nexport const FileUploader = withFileUploaderControlProvider<FileUploaderProps, FileUploaderRef>(\n React.memo(_FileUploader),\n);\nFileUploader.displayName = 'FileUploader';\n"]}
@@ -27,6 +27,35 @@ const request = () => Promise.reject();
27
27
  <FileUploader request={request} multiple />
28
28
  ```
29
29
 
30
+ Файлы по умолчанию
31
+ ```jsx harmony
32
+ import { FileUploader } from '@skbkontur/react-ui';
33
+
34
+ function createFile(filename, content) {
35
+ return new File(['content'], filename, { type: 'text/plain' });
36
+ };
37
+
38
+ const initialFiles = [createFile('test1.txt'), createFile('test2.txt')];
39
+ <FileUploader multiple initialFiles={initialFiles} />
40
+ ```
41
+
42
+ Файлы по умолчанию с кастомизацией рендеринга
43
+ ```jsx harmony
44
+ import { cloneElement } from 'react';
45
+ import { FileUploader } from '@skbkontur/react-ui';
46
+
47
+ function createFile(filename, content) {
48
+ return new File(['content'], filename, { type: 'text/plain' });
49
+ };
50
+
51
+ const initialFiles = [createFile('test1.txt'), createFile('test2.txt')];
52
+ <FileUploader
53
+ multiple
54
+ initialFiles={initialFiles}
55
+ renderFile={(file, fileNode) => cloneElement(fileNode, { showSize: false })}
56
+ />
57
+ ```
58
+
30
59
  Использование `accept`
31
60
  ```jsx harmony
32
61
  import { FileUploader } from '@skbkontur/react-ui';
@@ -59,6 +59,7 @@ export interface ScrollContainerProps extends CommonProps {
59
59
  * Отключить анимации
60
60
  */
61
61
  disableAnimations?: boolean;
62
+ scrollRef?: React.Ref<HTMLDivElement | null>;
62
63
  }
63
64
  export declare const ScrollContainerDataTids: {
64
65
  readonly root: "ScrollContainer__root";
@@ -13,6 +13,7 @@ var _rootNode = require("../../lib/rootNode");
13
13
  var _getDOMRect = require("../../lib/dom/getDOMRect");
14
14
  var _createPropsGetter = require("../../lib/createPropsGetter");
15
15
  var _currentEnvironment = require("../../lib/currentEnvironment");
16
+ var _callChildRef = require("../../lib/callChildRef/callChildRef");
16
17
 
17
18
  var _ScrollContainer = require("./ScrollContainer.styles");
18
19
  var _ScrollContainer2 = require("./ScrollContainer.constants");
@@ -81,6 +82,7 @@ var _ScrollBar = require("./ScrollBar");var _class, _class2, _temp;
81
82
 
82
83
 
83
84
 
85
+
84
86
 
85
87
 
86
88
  var ScrollContainerDataTids = {
@@ -344,6 +346,10 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
344
346
  _this.inner.removeEventListener('wheel', _this.handleInnerScrollWheel);
345
347
  }
346
348
  _this.inner = element;
349
+
350
+ if (_this.props.scrollRef) {
351
+ (0, _callChildRef.callChildRef)(_this.props.scrollRef, element);
352
+ }
347
353
  };_this.
348
354
 
349
355
  handleNativeScroll = function (event) {var _this$scrollY, _this$scrollX;
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollContainer.tsx"],"names":["ScrollContainerDataTids","root","inner","ScrollContainer","rootNode","getProps","defaultProps","initialIsScrollBarVisible","hideScrollBar","showScrollBar","state","isScrollBarXVisible","isScrollBarYVisible","isHovered","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","styles","handleMouseMove","handleMouseLeave","refInner","globalClasses","isIE11","innerIE11","handleNativeScroll","axis","offsetY","offsetX","invert","disableAnimations","isAxisX","refScrollBar","refScrollBarX","refScrollBarY","offset","isVisible","handleScroll","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","prevScrollState","showScrollBarOnMouseWheel","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","event","reflow","onScroll","preventDefault","LayoutEvents","emit","isScrollBarVisible","setState","isScrollBarXHovered","getHover","isScrollBarYHovered","hideScrollBarDelay","globalObject","WheelEvent","shiftKey","hasScrollBar","scrollSizeParametersNames","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","updateInnerElement","setInnerElement","componentDidMount","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","React","Component","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","bool","oneOfType","string","number","oneOf","func","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n /**\n * Скрывать скроллбар при отсутствии активности пользователя\n * @deprecated use showScrollBar\n */\n hideScrollBar?: boolean;\n /**\n * Показывать скроллбар\n */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n /**\n * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true` или `showScrollBar = 'scroll' | 'hover'`\n */\n hideScrollBarDelay?: number;\n /**\n * Отключить анимации\n */\n disableAnimations?: boolean;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n ScrollContainerProps,\n | 'invert'\n | 'scrollBehaviour'\n | 'preventWindowScroll'\n | 'hideScrollBar'\n | 'disableAnimations'\n | 'hideScrollBarDelay'\n | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n public static displayName = 'ScrollContainer';\n\n public inner: Nullable<HTMLElement>;\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n hideScrollBar: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = !this.getProps().hideScrollBar && this.getProps().showScrollBar === 'always';\n\n public state: ScrollContainerState = {\n isScrollBarXVisible: this.initialIsScrollBarVisible,\n isScrollBarYVisible: this.initialIsScrollBarVisible,\n isHovered: false,\n };\n\n public componentDidMount() {\n this.updateInnerElement();\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n\n if (prevProps.disabled !== this.props.disabled && !this.props.disabled) {\n this.updateInnerElement();\n }\n\n if (prevProps.showScrollBar !== this.props.showScrollBar) {\n if (this.props.showScrollBar === 'always') {\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true });\n } else if (this.props.showScrollBar === 'never') {\n this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n public hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const { offsetY, offsetX, invert, disableAnimations } = this.getProps();\n const isAxisX = axis === 'x';\n const refScrollBar = isAxisX ? this.refScrollBarX : this.refScrollBarY;\n const offset = isAxisX ? offsetX : offsetY;\n const isVisible = isAxisX ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={invert}\n onScroll={this.handleScroll}\n offset={offset}\n disableAnimations={disableAnimations}\n isVisible={isVisible}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private handleScroll = (\n axis: ScrollAxis,\n scrollState: ScrollBarScrollState,\n prevScrollState: ScrollBarScrollState,\n ) => {\n if (scrollState !== prevScrollState) {\n this.handleScrollStateChange(scrollState, axis);\n }\n const { hideScrollBar, showScrollBar } = this.getProps();\n (hideScrollBar || showScrollBar === 'scroll') && this.showScrollBarOnMouseWheel(axis);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollY?.reflow();\n this.scrollX?.reflow();\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private showScrollBarOnMouseWheel = (axis: ScrollAxis) => {\n const isScrollBarVisible = axis === 'x' ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n if (!isScrollBarVisible) {\n axis === 'x' ? this.setState({ isScrollBarXVisible: true }) : this.setState({ isScrollBarYVisible: true });\n }\n this.hideScrollBar(axis);\n };\n\n private readonly hideScrollBar = debounce((axis: ScrollAxis | 'both') => {\n if (this.state.isHovered) {\n return;\n }\n const isScrollBarXHovered = this.scrollX?.getHover();\n const isScrollBarYHovered = this.scrollY?.getHover();\n if (axis === 'both') {\n !isScrollBarXHovered && !isScrollBarYHovered\n ? this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false })\n : this.hideScrollBar('both');\n } else if (axis === 'x') {\n !isScrollBarXHovered ? this.setState({ isScrollBarXVisible: false }) : this.hideScrollBar('x');\n } else {\n !isScrollBarYHovered ? this.setState({ isScrollBarYVisible: false }) : this.hideScrollBar('y');\n }\n }, this.getProps().hideScrollBarDelay);\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n\n this.getProps().showScrollBar === 'hover' &&\n !this.state.isHovered &&\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true, isHovered: true });\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n if (this.getProps().showScrollBar === 'hover') {\n this.setState({ isHovered: false });\n this.hideScrollBar('both');\n }\n };\n\n private updateInnerElement = () => {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n };\n}\n"]}
1
+ {"version":3,"sources":["ScrollContainer.tsx"],"names":["ScrollContainerDataTids","root","inner","ScrollContainer","rootNode","getProps","defaultProps","initialIsScrollBarVisible","hideScrollBar","showScrollBar","state","isScrollBarXVisible","isScrollBarYVisible","isHovered","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","styles","handleMouseMove","handleMouseLeave","refInner","globalClasses","isIE11","innerIE11","handleNativeScroll","axis","offsetY","offsetX","invert","disableAnimations","isAxisX","refScrollBar","refScrollBarX","refScrollBarY","offset","isVisible","handleScroll","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","prevScrollState","showScrollBarOnMouseWheel","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","scrollRef","event","reflow","onScroll","preventDefault","LayoutEvents","emit","isScrollBarVisible","setState","isScrollBarXHovered","getHover","isScrollBarYHovered","hideScrollBarDelay","globalObject","WheelEvent","shiftKey","hasScrollBar","scrollSizeParametersNames","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","updateInnerElement","setInnerElement","componentDidMount","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","React","Component","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","bool","oneOfType","string","number","oneOf","func","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n /**\n * Скрывать скроллбар при отсутствии активности пользователя\n * @deprecated use showScrollBar\n */\n hideScrollBar?: boolean;\n /**\n * Показывать скроллбар\n */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n /**\n * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true` или `showScrollBar = 'scroll' | 'hover'`\n */\n hideScrollBarDelay?: number;\n /**\n * Отключить анимации\n */\n disableAnimations?: boolean;\n scrollRef?: React.Ref<HTMLDivElement | null>;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n ScrollContainerProps,\n | 'invert'\n | 'scrollBehaviour'\n | 'preventWindowScroll'\n | 'hideScrollBar'\n | 'disableAnimations'\n | 'hideScrollBarDelay'\n | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n public static displayName = 'ScrollContainer';\n\n public inner: Nullable<HTMLElement>;\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n hideScrollBar: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = !this.getProps().hideScrollBar && this.getProps().showScrollBar === 'always';\n\n public state: ScrollContainerState = {\n isScrollBarXVisible: this.initialIsScrollBarVisible,\n isScrollBarYVisible: this.initialIsScrollBarVisible,\n isHovered: false,\n };\n\n public componentDidMount() {\n this.updateInnerElement();\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n\n if (prevProps.disabled !== this.props.disabled && !this.props.disabled) {\n this.updateInnerElement();\n }\n\n if (prevProps.showScrollBar !== this.props.showScrollBar) {\n if (this.props.showScrollBar === 'always') {\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true });\n } else if (this.props.showScrollBar === 'never') {\n this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n public hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const { offsetY, offsetX, invert, disableAnimations } = this.getProps();\n const isAxisX = axis === 'x';\n const refScrollBar = isAxisX ? this.refScrollBarX : this.refScrollBarY;\n const offset = isAxisX ? offsetX : offsetY;\n const isVisible = isAxisX ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={invert}\n onScroll={this.handleScroll}\n offset={offset}\n disableAnimations={disableAnimations}\n isVisible={isVisible}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private handleScroll = (\n axis: ScrollAxis,\n scrollState: ScrollBarScrollState,\n prevScrollState: ScrollBarScrollState,\n ) => {\n if (scrollState !== prevScrollState) {\n this.handleScrollStateChange(scrollState, axis);\n }\n const { hideScrollBar, showScrollBar } = this.getProps();\n (hideScrollBar || showScrollBar === 'scroll') && this.showScrollBarOnMouseWheel(axis);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n\n if (this.props.scrollRef) {\n callChildRef(this.props.scrollRef, element);\n }\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollY?.reflow();\n this.scrollX?.reflow();\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private showScrollBarOnMouseWheel = (axis: ScrollAxis) => {\n const isScrollBarVisible = axis === 'x' ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n if (!isScrollBarVisible) {\n axis === 'x' ? this.setState({ isScrollBarXVisible: true }) : this.setState({ isScrollBarYVisible: true });\n }\n this.hideScrollBar(axis);\n };\n\n private readonly hideScrollBar = debounce((axis: ScrollAxis | 'both') => {\n if (this.state.isHovered) {\n return;\n }\n const isScrollBarXHovered = this.scrollX?.getHover();\n const isScrollBarYHovered = this.scrollY?.getHover();\n if (axis === 'both') {\n !isScrollBarXHovered && !isScrollBarYHovered\n ? this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false })\n : this.hideScrollBar('both');\n } else if (axis === 'x') {\n !isScrollBarXHovered ? this.setState({ isScrollBarXVisible: false }) : this.hideScrollBar('x');\n } else {\n !isScrollBarYHovered ? this.setState({ isScrollBarYVisible: false }) : this.hideScrollBar('y');\n }\n }, this.getProps().hideScrollBarDelay);\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n\n this.getProps().showScrollBar === 'hover' &&\n !this.state.isHovered &&\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true, isHovered: true });\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n if (this.getProps().showScrollBar === 'hover') {\n this.setState({ isHovered: false });\n this.hideScrollBar('both');\n }\n };\n\n private updateInnerElement = () => {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { MutableRefObject } from 'react';
2
2
  interface IUseDropProps {
3
- onDrop?: (event: Event) => void;
3
+ onDrop?: (event: DragEvent) => void;
4
4
  }
5
5
  declare type IElementWithListener = Pick<HTMLElement, 'addEventListener' | 'removeEventListener'>;
6
6
  interface IUseDropResult<TElement extends IElementWithListener> {
@@ -1 +1 @@
1
- {"version":3,"sources":["useDrop.ts"],"names":["useDrop","props","onDrop","droppableRef","overRef","timerId","isDraggable","setIsDraggable","clearTimer","current","globalObject","clearTimeout","handleDragOver","event","preventDefault","setTimeout","stopPropagation","handleDrop","ref","addEventListener","removeEventListener"],"mappings":"gEAAA;AACA;;;;;;;;;;;;;AAaO,IAAMA,OAAO,GAAG,SAAVA,OAAU,CAAwCC,KAAxC,EAAgG,KAAxDA,KAAwD,cAAxDA,KAAwD,GAAjC,EAAiC;AACrH,eAAmBA,KAAnB,CAAQC,MAAR,UAAQA,MAAR;;AAEA,MAAMC,YAAY,GAAG,mBAAiB,IAAjB,CAArB;AACA,MAAMC,OAAO,GAAG,mBAAgB,KAAhB,CAAhB;AACA,MAAMC,OAAO,GAAG,oBAAhB;AACA,kBAAsC,qBAAkB,KAAlB,CAAtC,CAAOC,WAAP,gBAAoBC,cAApB;;AAEA,MAAMC,UAAU,GAAG,wBAAY,YAAM;AACnCH,IAAAA,OAAO,CAACI,OAAR,IAAmBC,2BAAaC,YAAb,CAA0BN,OAAO,CAACI,OAAlC,CAAnB;AACD,GAFkB,EAEhB,EAFgB,CAAnB;;AAIA,MAAMG,cAAc,GAAG;AACrB,YAACC,KAAD,EAAW;AACTA,IAAAA,KAAK,CAACC,cAAN;AACAP,IAAAA,cAAc,CAAC,IAAD,CAAd;;AAEAC,IAAAA,UAAU;AACVH,IAAAA,OAAO,CAACI,OAAR,GAAkBC,2BAAaK,UAAb,CAAwB,YAAM;AAC9CX,MAAAA,OAAO,CAACK,OAAR,GAAkB,KAAlB;AACAF,MAAAA,cAAc,CAAC,KAAD,CAAd;AACD,KAHiB,EAGf,GAHe,CAAlB;AAID,GAVoB;AAWrB,GAACC,UAAD,CAXqB,CAAvB;;;AAcA,MAAMM,cAAc,GAAG,wBAAY,UAACD,KAAD,EAAW;AAC5CA,IAAAA,KAAK,CAACC,cAAN;AACAD,IAAAA,KAAK,CAACG,eAAN;AACD,GAHsB,EAGpB,EAHoB,CAAvB;;AAKA,MAAMC,UAAU,GAAG;AACjB,YAACJ,KAAD,EAAkB;AAChBC,IAAAA,cAAc,CAACD,KAAD,CAAd;AACAN,IAAAA,cAAc,CAAC,KAAD,CAAd;AACAH,IAAAA,OAAO,CAACK,OAAR,GAAkB,KAAlB;;AAEAP,IAAAA,MAAM,QAAN,YAAAA,MAAM,CAAGW,KAAH,CAAN;AACD,GAPgB;AAQjB,GAACC,cAAD,EAAiBZ,MAAjB,CARiB,CAAnB;;;AAWA,wBAAU,YAAM;AACd,QAAMgB,GAAG,GAAGf,YAAY,CAACM,OAAzB;;AAEA,QAAI,CAACS,GAAL,EAAU;AACR;AACD;;AAEDA,IAAAA,GAAG,CAACC,gBAAJ,CAAqB,WAArB,EAAkCL,cAAlC;AACAI,IAAAA,GAAG,CAACC,gBAAJ,CAAqB,WAArB,EAAkCL,cAAlC;AACAI,IAAAA,GAAG,CAACC,gBAAJ,CAAqB,UAArB,EAAiCP,cAAjC;AACAM,IAAAA,GAAG,CAACC,gBAAJ,CAAqB,MAArB,EAA6BF,UAA7B;;AAEA,WAAO,YAAM;AACXC,MAAAA,GAAG,CAACE,mBAAJ,CAAwB,WAAxB,EAAqCN,cAArC;AACAI,MAAAA,GAAG,CAACE,mBAAJ,CAAwB,WAAxB,EAAqCN,cAArC;AACAI,MAAAA,GAAG,CAACE,mBAAJ,CAAwB,UAAxB,EAAoCR,cAApC;AACAM,MAAAA,GAAG,CAACE,mBAAJ,CAAwB,MAAxB,EAAgCH,UAAhC;AACD,KALD;AAMD,GAlBD,EAkBG,CAACA,UAAD,EAAaL,cAAb,EAA6BE,cAA7B,CAlBH;;AAoBA,SAAO,EAAER,WAAW,EAAXA,WAAF,EAAeY,GAAG,EAAEf,YAApB,EAAP;AACD,CA/DM,C","sourcesContent":["import { MutableRefObject, useCallback, useEffect, useRef, useState } from 'react';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\ninterface IUseDropProps {\n onDrop?: (event: Event) => void;\n}\n\ntype IElementWithListener = Pick<HTMLElement, 'addEventListener' | 'removeEventListener'>;\n\ninterface IUseDropResult<TElement extends IElementWithListener> {\n isDraggable: boolean;\n ref: MutableRefObject<TElement | null>;\n}\n\nexport const useDrop = <TElement extends IElementWithListener>(props: IUseDropProps = {}): IUseDropResult<TElement> => {\n const { onDrop } = props;\n\n const droppableRef = useRef<TElement>(null);\n const overRef = useRef<boolean>(false);\n const timerId = useRef<SafeTimer>();\n const [isDraggable, setIsDraggable] = useState<boolean>(false);\n\n const clearTimer = useCallback(() => {\n timerId.current && globalObject.clearTimeout(timerId.current);\n }, []);\n\n const handleDragOver = useCallback(\n (event) => {\n event.preventDefault();\n setIsDraggable(true);\n\n clearTimer();\n timerId.current = globalObject.setTimeout(() => {\n overRef.current = false;\n setIsDraggable(false);\n }, 200);\n },\n [clearTimer],\n );\n\n const preventDefault = useCallback((event) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n const handleDrop = useCallback(\n (event: Event) => {\n preventDefault(event);\n setIsDraggable(false);\n overRef.current = false;\n\n onDrop?.(event);\n },\n [preventDefault, onDrop],\n );\n\n useEffect(() => {\n const ref = droppableRef.current;\n\n if (!ref) {\n return;\n }\n\n ref.addEventListener('dragenter', preventDefault);\n ref.addEventListener('dragleave', preventDefault);\n ref.addEventListener('dragover', handleDragOver);\n ref.addEventListener('drop', handleDrop);\n\n return () => {\n ref.removeEventListener('dragenter', preventDefault);\n ref.removeEventListener('dragleave', preventDefault);\n ref.removeEventListener('dragover', handleDragOver);\n ref.removeEventListener('drop', handleDrop);\n };\n }, [handleDrop, handleDragOver, preventDefault]);\n\n return { isDraggable, ref: droppableRef };\n};\n"]}
1
+ {"version":3,"sources":["useDrop.ts"],"names":["useDrop","props","onDrop","droppableRef","overRef","timerId","isDraggable","setIsDraggable","clearTimer","current","globalObject","clearTimeout","handleDragOver","event","preventDefault","setTimeout","stopPropagation","handleDrop","ref","addEventListener","removeEventListener"],"mappings":"gEAAA;AACA;;;;;;;;;;;;;AAaO,IAAMA,OAAO,GAAG,SAAVA,OAAU,CAAwCC,KAAxC,EAAgG,KAAxDA,KAAwD,cAAxDA,KAAwD,GAAjC,EAAiC;AACrH,eAAmBA,KAAnB,CAAQC,MAAR,UAAQA,MAAR;;AAEA,MAAMC,YAAY,GAAG,mBAAiB,IAAjB,CAArB;AACA,MAAMC,OAAO,GAAG,mBAAgB,KAAhB,CAAhB;AACA,MAAMC,OAAO,GAAG,oBAAhB;AACA,kBAAsC,qBAAkB,KAAlB,CAAtC,CAAOC,WAAP,gBAAoBC,cAApB;;AAEA,MAAMC,UAAU,GAAG,wBAAY,YAAM;AACnCH,IAAAA,OAAO,CAACI,OAAR,IAAmBC,2BAAaC,YAAb,CAA0BN,OAAO,CAACI,OAAlC,CAAnB;AACD,GAFkB,EAEhB,EAFgB,CAAnB;;AAIA,MAAMG,cAAc,GAAG;AACrB,YAACC,KAAD,EAAsB;AACpBA,IAAAA,KAAK,CAACC,cAAN;AACAP,IAAAA,cAAc,CAAC,IAAD,CAAd;;AAEAC,IAAAA,UAAU;AACVH,IAAAA,OAAO,CAACI,OAAR,GAAkBC,2BAAaK,UAAb,CAAwB,YAAM;AAC9CX,MAAAA,OAAO,CAACK,OAAR,GAAkB,KAAlB;AACAF,MAAAA,cAAc,CAAC,KAAD,CAAd;AACD,KAHiB,EAGf,GAHe,CAAlB;AAID,GAVoB;AAWrB,GAACC,UAAD,CAXqB,CAAvB;;;AAcA,MAAMM,cAAc,GAAG,wBAAY,UAACD,KAAD,EAAsB;AACvDA,IAAAA,KAAK,CAACC,cAAN;AACAD,IAAAA,KAAK,CAACG,eAAN;AACD,GAHsB,EAGpB,EAHoB,CAAvB;;AAKA,MAAMC,UAAU,GAAG;AACjB,YAACJ,KAAD,EAAsB;AACpBC,IAAAA,cAAc,CAACD,KAAD,CAAd;AACAN,IAAAA,cAAc,CAAC,KAAD,CAAd;AACAH,IAAAA,OAAO,CAACK,OAAR,GAAkB,KAAlB;;AAEAP,IAAAA,MAAM,QAAN,YAAAA,MAAM,CAAGW,KAAH,CAAN;AACD,GAPgB;AAQjB,GAACC,cAAD,EAAiBZ,MAAjB,CARiB,CAAnB;;;AAWA,wBAAU,YAAM;AACd,QAAMgB,GAAG,GAAGf,YAAY,CAACM,OAAzB;;AAEA,QAAI,CAACS,GAAL,EAAU;AACR;AACD;;AAEDA,IAAAA,GAAG,CAACC,gBAAJ,CAAqB,WAArB,EAAkCL,cAAlC;AACAI,IAAAA,GAAG,CAACC,gBAAJ,CAAqB,WAArB,EAAkCL,cAAlC;AACAI,IAAAA,GAAG,CAACC,gBAAJ,CAAqB,UAArB,EAAiCP,cAAjC;AACAM,IAAAA,GAAG,CAACC,gBAAJ,CAAqB,MAArB,EAA6BF,UAA7B;;AAEA,WAAO,YAAM;AACXC,MAAAA,GAAG,CAACE,mBAAJ,CAAwB,WAAxB,EAAqCN,cAArC;AACAI,MAAAA,GAAG,CAACE,mBAAJ,CAAwB,WAAxB,EAAqCN,cAArC;AACAI,MAAAA,GAAG,CAACE,mBAAJ,CAAwB,UAAxB,EAAoCR,cAApC;AACAM,MAAAA,GAAG,CAACE,mBAAJ,CAAwB,MAAxB,EAAgCH,UAAhC;AACD,KALD;AAMD,GAlBD,EAkBG,CAACA,UAAD,EAAaL,cAAb,EAA6BE,cAA7B,CAlBH;;AAoBA,SAAO,EAAER,WAAW,EAAXA,WAAF,EAAeY,GAAG,EAAEf,YAApB,EAAP;AACD,CA/DM,C","sourcesContent":["import { MutableRefObject, useCallback, useEffect, useRef, useState } from 'react';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\ninterface IUseDropProps {\n onDrop?: (event: DragEvent) => void;\n}\n\ntype IElementWithListener = Pick<HTMLElement, 'addEventListener' | 'removeEventListener'>;\n\ninterface IUseDropResult<TElement extends IElementWithListener> {\n isDraggable: boolean;\n ref: MutableRefObject<TElement | null>;\n}\n\nexport const useDrop = <TElement extends IElementWithListener>(props: IUseDropProps = {}): IUseDropResult<TElement> => {\n const { onDrop } = props;\n\n const droppableRef = useRef<TElement>(null);\n const overRef = useRef<boolean>(false);\n const timerId = useRef<SafeTimer>();\n const [isDraggable, setIsDraggable] = useState<boolean>(false);\n\n const clearTimer = useCallback(() => {\n timerId.current && globalObject.clearTimeout(timerId.current);\n }, []);\n\n const handleDragOver = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n setIsDraggable(true);\n\n clearTimer();\n timerId.current = globalObject.setTimeout(() => {\n overRef.current = false;\n setIsDraggable(false);\n }, 200);\n },\n [clearTimer],\n );\n\n const preventDefault = useCallback((event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n preventDefault(event);\n setIsDraggable(false);\n overRef.current = false;\n\n onDrop?.(event);\n },\n [preventDefault, onDrop],\n );\n\n useEffect(() => {\n const ref = droppableRef.current;\n\n if (!ref) {\n return;\n }\n\n ref.addEventListener('dragenter', preventDefault);\n ref.addEventListener('dragleave', preventDefault);\n ref.addEventListener('dragover', handleDragOver);\n ref.addEventListener('drop', handleDrop);\n\n return () => {\n ref.removeEventListener('dragenter', preventDefault);\n ref.removeEventListener('dragleave', preventDefault);\n ref.removeEventListener('dragover', handleDragOver);\n ref.removeEventListener('drop', handleDrop);\n };\n }, [handleDrop, handleDragOver, preventDefault]);\n\n return { isDraggable, ref: droppableRef };\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { PropsWithChildren } from 'react';
1
+ import React, { PropsWithChildren } from 'react';
2
2
  import { FileUploaderAttachedFile } from './fileUtils';
3
3
  export interface FileUploaderControlProviderProps {
4
4
  /** Срабатывает при выборе файлов */
@@ -9,6 +9,9 @@ export interface FileUploaderControlProviderProps {
9
9
  onValueChange?: (files: FileUploaderAttachedFile[]) => void;
10
10
  }
11
11
  export declare const FileUploaderControlProvider: {
12
- (props: PropsWithChildren<FileUploaderControlProviderProps>): JSX.Element;
12
+ (props: React.PropsWithChildren<FileUploaderControlProviderProps & {
13
+ initialFiles?: File[] | undefined;
14
+ multiple?: boolean | undefined;
15
+ }>): JSX.Element;
13
16
  displayName: string;
14
17
  };
@@ -40,10 +40,23 @@ getFileUpdatedProps)
40
40
  return newFiles;
41
41
  };
42
42
 
43
- var FileUploaderControlProvider = function FileUploaderControlProvider(props) {
44
- var children = props.children,onValueChange = props.onValueChange,onRemove = props.onRemove,onAttach = props.onAttach;
43
+ var FileUploaderControlProvider = function FileUploaderControlProvider(
44
+ props)
45
45
 
46
- var _useState = (0, _react.useState)([]),files = _useState[0],setFiles = _useState[1];
46
+
47
+
48
+
49
+
50
+ {
51
+ var initialFiles = props.initialFiles,multiple = props.multiple,children = props.children,onValueChange = props.onValueChange,onRemove = props.onRemove,onAttach = props.onAttach;
52
+
53
+ var _useState = (0, _react.useState)(function () {
54
+ if (initialFiles && initialFiles.length > 0) {
55
+ var attachedFiles = initialFiles.map(_fileUtils.getAttachedFile);
56
+ return multiple ? attachedFiles : [attachedFiles[0]];
57
+ }
58
+ return [];
59
+ }),files = _useState[0],setFiles = _useState[1];
47
60
  var _useState2 = (0, _react.useState)(false),isMinLengthReached = _useState2[0],setIsMinLengthReached = _useState2[1];
48
61
  var locale = (0, _useControlLocale.useControlLocale)();
49
62
 
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderControlProvider.tsx"],"names":["updateFile","files","fileId","getFileUpdatedProps","fileIndex","findIndex","file","id","newFiles","updatedProps","FileUploaderControlProvider","props","children","onValueChange","onRemove","onAttach","setFiles","isMinLengthReached","setIsMinLengthReached","locale","setFileStatus","status","validationResult","FileUploaderFileStatus","Error","FileUploaderFileValidationResult","error","requestErrorText","handleExternalSetFiles","state","removeFile","filter","setFileValidationResult","reset","React","useCallback","displayName"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useCallback, useState } from 'react';\n\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { useEffectWithoutInitCall } from '../../hooks/useEffectWithoutInitCall';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus } from './fileUtils';\nimport { FileUploaderControlContext } from './FileUploaderControlContext';\nimport { useControlLocale } from './hooks/useControlLocale';\nimport { FileUploaderFileValidationResult } from './FileUploaderFileValidationResult';\n\nexport interface FileUploaderControlProviderProps {\n /** Срабатывает при выборе файлов */\n onAttach?: (files: FileUploaderAttachedFile[]) => void;\n /** Срабатывает при удалении файла из контрола */\n onRemove?: (fileId: string) => void;\n /** Срабатывает при onAttach, onRemove и других изменениях файлов. В files передает текущее состояние всего списка файлов */\n onValueChange?: (files: FileUploaderAttachedFile[]) => void;\n}\n\nconst updateFile = (\n files: FileUploaderAttachedFile[],\n fileId: string,\n getFileUpdatedProps: (file: FileUploaderAttachedFile) => Partial<FileUploaderAttachedFile>,\n): FileUploaderAttachedFile[] => {\n const fileIndex = files.findIndex((file) => file.id === fileId);\n if (fileIndex === -1) {\n return files;\n }\n\n const newFiles = [...files];\n const file = files[fileIndex];\n\n const updatedProps = getFileUpdatedProps(file);\n\n newFiles[fileIndex] = {\n ...file,\n ...updatedProps,\n };\n\n return newFiles;\n};\n\nexport const FileUploaderControlProvider = (props: PropsWithChildren<FileUploaderControlProviderProps>) => {\n const { children, onValueChange, onRemove, onAttach } = props;\n\n const [files, setFiles] = useState<FileUploaderAttachedFile[]>([]);\n const [isMinLengthReached, setIsMinLengthReached] = useState<boolean>(false);\n const locale = useControlLocale();\n\n useEffectWithoutInitCall(() => {\n onValueChange?.(files);\n }, [files]);\n\n const setFileStatus = useCallback(\n (fileId: string, status: FileUploaderFileStatus) => {\n setFiles((files) =>\n updateFile(files, fileId, (file) => ({\n status,\n validationResult:\n status === FileUploaderFileStatus.Error\n ? FileUploaderFileValidationResult.error(locale.requestErrorText)\n : file.validationResult,\n })),\n );\n },\n [locale],\n );\n\n const handleExternalSetFiles = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n onAttach?.(files);\n setFiles((state) => [...state, ...files]);\n },\n [onAttach],\n );\n\n const removeFile = useCallback(\n (fileId: string) => {\n onRemove?.(fileId);\n setFiles((state) => state.filter((file) => file.id !== fileId));\n },\n [onRemove],\n );\n\n const setFileValidationResult = useCallback((fileId: string, validationResult: FileUploaderFileValidationResult) => {\n setFiles((files) => updateFile(files, fileId, () => ({ validationResult })));\n }, []);\n\n const reset = React.useCallback(() => {\n setFiles(() => [] as FileUploaderAttachedFile[]);\n }, []);\n\n return (\n <FileUploaderControlContext.Provider\n value={useMemoObject({\n setFileStatus,\n files,\n setFiles: handleExternalSetFiles,\n removeFile,\n setFileValidationResult,\n reset,\n isMinLengthReached,\n setIsMinLengthReached,\n })}\n >\n {children}\n </FileUploaderControlContext.Provider>\n );\n};\n\nFileUploaderControlProvider.displayName = 'FileUploaderControlProvider';\n"]}
1
+ {"version":3,"sources":["FileUploaderControlProvider.tsx"],"names":["updateFile","files","fileId","getFileUpdatedProps","fileIndex","findIndex","file","id","newFiles","updatedProps","FileUploaderControlProvider","props","initialFiles","multiple","children","onValueChange","onRemove","onAttach","length","attachedFiles","map","getAttachedFile","setFiles","isMinLengthReached","setIsMinLengthReached","locale","setFileStatus","status","validationResult","FileUploaderFileStatus","Error","FileUploaderFileValidationResult","error","requestErrorText","handleExternalSetFiles","state","removeFile","filter","setFileValidationResult","reset","React","useCallback","displayName"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useCallback, useState } from 'react';\n\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { useEffectWithoutInitCall } from '../../hooks/useEffectWithoutInitCall';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus, getAttachedFile } from './fileUtils';\nimport { FileUploaderControlContext } from './FileUploaderControlContext';\nimport { useControlLocale } from './hooks/useControlLocale';\nimport { FileUploaderFileValidationResult } from './FileUploaderFileValidationResult';\n\nexport interface FileUploaderControlProviderProps {\n /** Срабатывает при выборе файлов */\n onAttach?: (files: FileUploaderAttachedFile[]) => void;\n /** Срабатывает при удалении файла из контрола */\n onRemove?: (fileId: string) => void;\n /** Срабатывает при onAttach, onRemove и других изменениях файлов. В files передает текущее состояние всего списка файлов */\n onValueChange?: (files: FileUploaderAttachedFile[]) => void;\n}\n\nconst updateFile = (\n files: FileUploaderAttachedFile[],\n fileId: string,\n getFileUpdatedProps: (file: FileUploaderAttachedFile) => Partial<FileUploaderAttachedFile>,\n): FileUploaderAttachedFile[] => {\n const fileIndex = files.findIndex((file) => file.id === fileId);\n if (fileIndex === -1) {\n return files;\n }\n\n const newFiles = [...files];\n const file = files[fileIndex];\n\n const updatedProps = getFileUpdatedProps(file);\n\n newFiles[fileIndex] = {\n ...file,\n ...updatedProps,\n };\n\n return newFiles;\n};\n\nexport const FileUploaderControlProvider = (\n props: PropsWithChildren<\n FileUploaderControlProviderProps & {\n initialFiles?: File[];\n multiple?: boolean;\n }\n >,\n) => {\n const { initialFiles, multiple, children, onValueChange, onRemove, onAttach } = props;\n\n const [files, setFiles] = useState<FileUploaderAttachedFile[]>(() => {\n if (initialFiles && initialFiles.length > 0) {\n const attachedFiles = initialFiles.map(getAttachedFile);\n return multiple ? attachedFiles : [attachedFiles[0]];\n }\n return [];\n });\n const [isMinLengthReached, setIsMinLengthReached] = useState<boolean>(false);\n const locale = useControlLocale();\n\n useEffectWithoutInitCall(() => {\n onValueChange?.(files);\n }, [files]);\n\n const setFileStatus = useCallback(\n (fileId: string, status: FileUploaderFileStatus) => {\n setFiles((files) =>\n updateFile(files, fileId, (file) => ({\n status,\n validationResult:\n status === FileUploaderFileStatus.Error\n ? FileUploaderFileValidationResult.error(locale.requestErrorText)\n : file.validationResult,\n })),\n );\n },\n [locale],\n );\n\n const handleExternalSetFiles = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n onAttach?.(files);\n setFiles((state) => [...state, ...files]);\n },\n [onAttach],\n );\n\n const removeFile = useCallback(\n (fileId: string) => {\n onRemove?.(fileId);\n setFiles((state) => state.filter((file) => file.id !== fileId));\n },\n [onRemove],\n );\n\n const setFileValidationResult = useCallback((fileId: string, validationResult: FileUploaderFileValidationResult) => {\n setFiles((files) => updateFile(files, fileId, () => ({ validationResult })));\n }, []);\n\n const reset = React.useCallback(() => {\n setFiles(() => [] as FileUploaderAttachedFile[]);\n }, []);\n\n return (\n <FileUploaderControlContext.Provider\n value={useMemoObject({\n setFileStatus,\n files,\n setFiles: handleExternalSetFiles,\n removeFile,\n setFileValidationResult,\n reset,\n isMinLengthReached,\n setIsMinLengthReached,\n })}\n >\n {children}\n </FileUploaderControlContext.Provider>\n );\n};\n\nFileUploaderControlProvider.displayName = 'FileUploaderControlProvider';\n"]}
@@ -7,6 +7,7 @@ interface FileUploaderFileProps {
7
7
  size: SizeProp;
8
8
  /** Состояние ошибки контрола файла */
9
9
  error?: boolean;
10
+ onRemove(id: string): void;
10
11
  }
11
12
  export declare const FileUploaderFileDataTids: {
12
13
  readonly file: "FileUploader__file";
@@ -30,6 +30,7 @@ var _FileUploaderFileStatusIcon = require("./FileUploaderFileStatusIcon");
30
30
 
31
31
 
32
32
 
33
+
33
34
  var getTruncatedName = function getTruncatedName(fileNameWidth, fileNameElementWidth, name) {
34
35
  if (!fileNameWidth && !fileNameElementWidth) {
35
36
  return null;
@@ -69,7 +70,7 @@ var FileUploaderFileDataTids = {
69
70
  var FileUploaderFile = (0, _forwardRefAndName.forwardRefAndName)(
70
71
  'FileUploaderFile',
71
72
  function (props, ref) {var _cx, _cx2;
72
- var file = props.file,showSize = props.showSize,error = props.error,multiple = props.multiple,size = props.size;
73
+ var file = props.file,showSize = props.showSize,error = props.error,multiple = props.multiple,size = props.size,onRemove = props.onRemove;
73
74
  var id = file.id,originalFile = file.originalFile,status = file.status,validationResult = file.validationResult;
74
75
  var name = originalFile.name,fileSize = originalFile.size;
75
76
 
@@ -101,7 +102,8 @@ function (props, ref) {var _cx, _cx2;
101
102
 
102
103
  var removeUploadFile = (0, _react.useCallback)(function () {
103
104
  removeFile(id);
104
- }, [removeFile, id]);
105
+ onRemove(id);
106
+ }, [removeFile, id, onRemove]);
105
107
 
106
108
  var handleRemove = (0, _react.useCallback)(
107
109
  function (event) {
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFile.tsx"],"names":["getTruncatedName","fileNameWidth","fileNameElementWidth","name","charWidth","Math","ceil","length","maxCharsCountInSpan","calcTruncatedName","textHelperRef","fileNameElementRef","current","getTextWidth","width","MIN_CHARS_LENGTH","FileUploaderFileDataTids","file","fileTooltip","fileName","fileSize","fileIcon","FileUploaderFile","props","ref","showSize","error","multiple","size","id","originalFile","status","validationResult","hovered","setHovered","focusedByTab","setFocusedByTab","truncatedFileName","setTruncatedFileName","FileUploaderControlContext","removeFile","setIsMinLengthReached","isMinLengthReached","theme","ThemeContext","formattedSize","truncatedName","removeUploadFile","handleRemove","event","preventDefault","stopPropagation","isValid","message","isInvalid","sizeIconClass","small","jsStyles","iconSmall","medium","iconMedium","large","iconLarge","renderTooltipContent","sizeContentClass","contentSmall","contentMedium","contentLarge","contentClassNames","content","handleMouseEnter","handleMouseLeave","handleFocus","globalObject","requestAnimationFrame","keyListener","isTabPressed","handleBlur","handleIconKeyDown","e","iconClassNames","icon","focusedIcon","iconMultiple","isTruncated","root"],"mappings":"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","sourcesContent":["import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { forwardRefAndName } from '../../../lib/forwardRefAndName';\nimport { FileUploaderAttachedFile } from '../fileUtils';\nimport { formatBytes } from '../../../lib/utils';\nimport { TextWidthHelper } from '../../TextWidthHelper/TextWidthHelper';\nimport { truncate } from '../../../lib/stringUtils';\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { keyListener } from '../../../lib/events/keyListener';\nimport { isKeyEnter } from '../../../lib/events/keyboard/identifiers';\nimport { Nullable } from '../../../typings/utility-types';\nimport { Hint } from '../../../components/Hint';\nimport { Tooltip } from '../../../components/Tooltip';\nimport { getDOMRect } from '../../../lib/dom/getDOMRect';\nimport { useFileUploaderSize } from '../hooks/useFileUploaderSize';\nimport { SizeProp } from '../../../lib/types/props';\n\nimport { jsStyles } from './FileUploaderFile.styles';\nimport { FileUploaderFileStatusIcon } from './FileUploaderFileStatusIcon';\n\ninterface FileUploaderFileProps {\n file: FileUploaderAttachedFile;\n showSize?: boolean;\n multiple?: boolean;\n size: SizeProp;\n /** Состояние ошибки контрола файла */\n error?: boolean;\n}\n\nconst getTruncatedName = (fileNameWidth: number, fileNameElementWidth: number, name: string) => {\n if (!fileNameWidth && !fileNameElementWidth) {\n return null;\n }\n\n if (fileNameWidth <= fileNameElementWidth) {\n return name;\n }\n\n const charWidth = Math.ceil(fileNameWidth / name.length);\n const maxCharsCountInSpan = Math.ceil(fileNameElementWidth / charWidth);\n\n return truncate(name, maxCharsCountInSpan);\n};\n\nconst calcTruncatedName = (\n textHelperRef: React.RefObject<TextWidthHelper>,\n fileNameElementRef: React.RefObject<HTMLSpanElement>,\n name: string,\n) => {\n const fileNameWidth = textHelperRef.current?.getTextWidth() || 0;\n const fileNameElementWidth = getDOMRect(fileNameElementRef.current).width;\n\n return getTruncatedName(fileNameWidth, fileNameElementWidth, name);\n};\n\nconst MIN_CHARS_LENGTH = 3;\n\nexport const FileUploaderFileDataTids = {\n file: 'FileUploader__file',\n fileTooltip: 'FileUploader__fileTooltip',\n fileName: 'FileUploader__fileName',\n fileSize: 'FileUploader__fileSize',\n fileIcon: 'FileUploader__fileIcon',\n} as const;\n\nexport const FileUploaderFile = forwardRefAndName<HTMLDivElement, FileUploaderFileProps>(\n 'FileUploaderFile',\n (props, ref) => {\n const { file, showSize, error, multiple, size } = props;\n const { id, originalFile, status, validationResult } = file;\n const { name, size: fileSize } = originalFile;\n\n const [hovered, setHovered] = useState<boolean>(false);\n const [focusedByTab, setFocusedByTab] = useState(false);\n const [truncatedFileName, setTruncatedFileName] = useState<Nullable<string>>(null);\n\n const textHelperRef = useRef<TextWidthHelper>(null);\n const fileNameElementRef = useRef<HTMLSpanElement>(null);\n\n const { removeFile, setIsMinLengthReached, isMinLengthReached } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n const formattedSize = useMemo(() => formatBytes(fileSize, 1), [fileSize]);\n\n useEffect(() => {\n if (setIsMinLengthReached) {\n const truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);\n\n setIsMinLengthReached((truncatedName?.length ?? 0) <= MIN_CHARS_LENGTH);\n }\n }, [name, isMinLengthReached]);\n\n useEffect(() => {\n const truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);\n\n setTruncatedFileName(truncatedName);\n });\n\n const removeUploadFile = useCallback(() => {\n removeFile(id);\n }, [removeFile, id]);\n\n const handleRemove = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n removeUploadFile();\n },\n [removeUploadFile],\n );\n\n const { isValid, message } = validationResult;\n\n const isInvalid = error || !isValid;\n\n const sizeIconClass = useFileUploaderSize(size, {\n small: jsStyles.iconSmall(),\n medium: jsStyles.iconMedium(),\n large: jsStyles.iconLarge(),\n });\n\n const renderTooltipContent = useCallback((): ReactNode => {\n return !isValid && !error && message ? message : null;\n }, [isValid, error, message]);\n\n const sizeContentClass = useFileUploaderSize(size, {\n small: jsStyles.contentSmall(theme),\n medium: jsStyles.contentMedium(theme),\n large: jsStyles.contentLarge(theme),\n });\n\n const contentClassNames = cx(jsStyles.content(), {\n [sizeContentClass]: true,\n [jsStyles.error(theme)]: isInvalid,\n });\n\n const handleMouseEnter = useCallback(() => {\n setHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setHovered(false);\n }, []);\n\n const handleFocus = useCallback(() => {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n }, []);\n\n const handleBlur = useCallback(() => {\n setFocusedByTab(false);\n }, []);\n\n const handleIconKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEnter(e)) {\n removeUploadFile();\n }\n },\n [removeUploadFile],\n );\n\n const iconClassNames = cx(jsStyles.icon(theme), {\n [jsStyles.focusedIcon(theme)]: focusedByTab,\n [sizeIconClass]: true,\n [jsStyles.iconMultiple()]: multiple,\n });\n\n const isTruncated = truncatedFileName !== name;\n\n return (\n <div\n data-tid={FileUploaderFileDataTids.file}\n className={jsStyles.root()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n ref={ref}\n >\n <Tooltip data-tid={FileUploaderFileDataTids.fileTooltip} pos=\"right middle\" render={renderTooltipContent}>\n <div className={contentClassNames}>\n <TextWidthHelper ref={textHelperRef} text={name} />\n <Hint maxWidth={'100%'} text={isTruncated ? name : null}>\n <span data-tid={FileUploaderFileDataTids.fileName} ref={fileNameElementRef} className={jsStyles.name()}>\n {truncatedFileName}\n </span>\n </Hint>\n {!!showSize && formattedSize && (\n <span data-tid={FileUploaderFileDataTids.fileSize} className={jsStyles.size()}>\n {formattedSize}\n </span>\n )}\n <div\n className={iconClassNames}\n data-tid={FileUploaderFileDataTids.fileIcon}\n tabIndex={0}\n onClick={handleRemove}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleIconKeyDown}\n >\n <FileUploaderFileStatusIcon\n status={status}\n hovered={hovered}\n focusedByTab={focusedByTab}\n isInvalid={isInvalid}\n size={size}\n />\n </div>\n </div>\n </Tooltip>\n </div>\n );\n },\n);\n"]}
1
+ {"version":3,"sources":["FileUploaderFile.tsx"],"names":["getTruncatedName","fileNameWidth","fileNameElementWidth","name","charWidth","Math","ceil","length","maxCharsCountInSpan","calcTruncatedName","textHelperRef","fileNameElementRef","current","getTextWidth","width","MIN_CHARS_LENGTH","FileUploaderFileDataTids","file","fileTooltip","fileName","fileSize","fileIcon","FileUploaderFile","props","ref","showSize","error","multiple","size","onRemove","id","originalFile","status","validationResult","hovered","setHovered","focusedByTab","setFocusedByTab","truncatedFileName","setTruncatedFileName","FileUploaderControlContext","removeFile","setIsMinLengthReached","isMinLengthReached","theme","ThemeContext","formattedSize","truncatedName","removeUploadFile","handleRemove","event","preventDefault","stopPropagation","isValid","message","isInvalid","sizeIconClass","small","jsStyles","iconSmall","medium","iconMedium","large","iconLarge","renderTooltipContent","sizeContentClass","contentSmall","contentMedium","contentLarge","contentClassNames","content","handleMouseEnter","handleMouseLeave","handleFocus","globalObject","requestAnimationFrame","keyListener","isTabPressed","handleBlur","handleIconKeyDown","e","iconClassNames","icon","focusedIcon","iconMultiple","isTruncated","root"],"mappings":"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","sourcesContent":["import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { forwardRefAndName } from '../../../lib/forwardRefAndName';\nimport { FileUploaderAttachedFile } from '../fileUtils';\nimport { formatBytes } from '../../../lib/utils';\nimport { TextWidthHelper } from '../../TextWidthHelper/TextWidthHelper';\nimport { truncate } from '../../../lib/stringUtils';\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { keyListener } from '../../../lib/events/keyListener';\nimport { isKeyEnter } from '../../../lib/events/keyboard/identifiers';\nimport { Nullable } from '../../../typings/utility-types';\nimport { Hint } from '../../../components/Hint';\nimport { Tooltip } from '../../../components/Tooltip';\nimport { getDOMRect } from '../../../lib/dom/getDOMRect';\nimport { useFileUploaderSize } from '../hooks/useFileUploaderSize';\nimport { SizeProp } from '../../../lib/types/props';\n\nimport { jsStyles } from './FileUploaderFile.styles';\nimport { FileUploaderFileStatusIcon } from './FileUploaderFileStatusIcon';\n\ninterface FileUploaderFileProps {\n file: FileUploaderAttachedFile;\n showSize?: boolean;\n multiple?: boolean;\n size: SizeProp;\n /** Состояние ошибки контрола файла */\n error?: boolean;\n onRemove(id: string): void;\n}\n\nconst getTruncatedName = (fileNameWidth: number, fileNameElementWidth: number, name: string) => {\n if (!fileNameWidth && !fileNameElementWidth) {\n return null;\n }\n\n if (fileNameWidth <= fileNameElementWidth) {\n return name;\n }\n\n const charWidth = Math.ceil(fileNameWidth / name.length);\n const maxCharsCountInSpan = Math.ceil(fileNameElementWidth / charWidth);\n\n return truncate(name, maxCharsCountInSpan);\n};\n\nconst calcTruncatedName = (\n textHelperRef: React.RefObject<TextWidthHelper>,\n fileNameElementRef: React.RefObject<HTMLSpanElement>,\n name: string,\n) => {\n const fileNameWidth = textHelperRef.current?.getTextWidth() || 0;\n const fileNameElementWidth = getDOMRect(fileNameElementRef.current).width;\n\n return getTruncatedName(fileNameWidth, fileNameElementWidth, name);\n};\n\nconst MIN_CHARS_LENGTH = 3;\n\nexport const FileUploaderFileDataTids = {\n file: 'FileUploader__file',\n fileTooltip: 'FileUploader__fileTooltip',\n fileName: 'FileUploader__fileName',\n fileSize: 'FileUploader__fileSize',\n fileIcon: 'FileUploader__fileIcon',\n} as const;\n\nexport const FileUploaderFile = forwardRefAndName<HTMLDivElement, FileUploaderFileProps>(\n 'FileUploaderFile',\n (props, ref) => {\n const { file, showSize, error, multiple, size, onRemove } = props;\n const { id, originalFile, status, validationResult } = file;\n const { name, size: fileSize } = originalFile;\n\n const [hovered, setHovered] = useState<boolean>(false);\n const [focusedByTab, setFocusedByTab] = useState(false);\n const [truncatedFileName, setTruncatedFileName] = useState<Nullable<string>>(null);\n\n const textHelperRef = useRef<TextWidthHelper>(null);\n const fileNameElementRef = useRef<HTMLSpanElement>(null);\n\n const { removeFile, setIsMinLengthReached, isMinLengthReached } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n const formattedSize = useMemo(() => formatBytes(fileSize, 1), [fileSize]);\n\n useEffect(() => {\n if (setIsMinLengthReached) {\n const truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);\n\n setIsMinLengthReached((truncatedName?.length ?? 0) <= MIN_CHARS_LENGTH);\n }\n }, [name, isMinLengthReached]);\n\n useEffect(() => {\n const truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);\n\n setTruncatedFileName(truncatedName);\n });\n\n const removeUploadFile = useCallback(() => {\n removeFile(id);\n onRemove(id);\n }, [removeFile, id, onRemove]);\n\n const handleRemove = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n removeUploadFile();\n },\n [removeUploadFile],\n );\n\n const { isValid, message } = validationResult;\n\n const isInvalid = error || !isValid;\n\n const sizeIconClass = useFileUploaderSize(size, {\n small: jsStyles.iconSmall(),\n medium: jsStyles.iconMedium(),\n large: jsStyles.iconLarge(),\n });\n\n const renderTooltipContent = useCallback((): ReactNode => {\n return !isValid && !error && message ? message : null;\n }, [isValid, error, message]);\n\n const sizeContentClass = useFileUploaderSize(size, {\n small: jsStyles.contentSmall(theme),\n medium: jsStyles.contentMedium(theme),\n large: jsStyles.contentLarge(theme),\n });\n\n const contentClassNames = cx(jsStyles.content(), {\n [sizeContentClass]: true,\n [jsStyles.error(theme)]: isInvalid,\n });\n\n const handleMouseEnter = useCallback(() => {\n setHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setHovered(false);\n }, []);\n\n const handleFocus = useCallback(() => {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n }, []);\n\n const handleBlur = useCallback(() => {\n setFocusedByTab(false);\n }, []);\n\n const handleIconKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEnter(e)) {\n removeUploadFile();\n }\n },\n [removeUploadFile],\n );\n\n const iconClassNames = cx(jsStyles.icon(theme), {\n [jsStyles.focusedIcon(theme)]: focusedByTab,\n [sizeIconClass]: true,\n [jsStyles.iconMultiple()]: multiple,\n });\n\n const isTruncated = truncatedFileName !== name;\n\n return (\n <div\n data-tid={FileUploaderFileDataTids.file}\n className={jsStyles.root()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n ref={ref}\n >\n <Tooltip data-tid={FileUploaderFileDataTids.fileTooltip} pos=\"right middle\" render={renderTooltipContent}>\n <div className={contentClassNames}>\n <TextWidthHelper ref={textHelperRef} text={name} />\n <Hint maxWidth={'100%'} text={isTruncated ? name : null}>\n <span data-tid={FileUploaderFileDataTids.fileName} ref={fileNameElementRef} className={jsStyles.name()}>\n {truncatedFileName}\n </span>\n </Hint>\n {!!showSize && formattedSize && (\n <span data-tid={FileUploaderFileDataTids.fileSize} className={jsStyles.size()}>\n {formattedSize}\n </span>\n )}\n <div\n className={iconClassNames}\n data-tid={FileUploaderFileDataTids.fileIcon}\n tabIndex={0}\n onClick={handleRemove}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleIconKeyDown}\n >\n <FileUploaderFileStatusIcon\n status={status}\n hovered={hovered}\n focusedByTab={focusedByTab}\n isInvalid={isInvalid}\n size={size}\n />\n </div>\n </div>\n </Tooltip>\n </div>\n );\n },\n);\n"]}
@@ -4,6 +4,7 @@ import { SizeProp } from '../../../lib/types/props';
4
4
  interface FileUploaderFileListProps {
5
5
  renderFile: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;
6
6
  size: SizeProp;
7
+ onRemove(fileId: string): void;
7
8
  }
8
9
  export declare const FileUploaderFileDataTids: {
9
10
  readonly fileList: "FileUploader__fileList";