@skbkontur/react-ui 4.9.0 → 4.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/cjs/components/FileUploader/FileUploader.js +6 -5
  3. package/cjs/components/FileUploader/FileUploader.js.map +1 -1
  4. package/cjs/components/ResponsiveLayout/ResponsiveLayoutEvents.js +14 -11
  5. package/cjs/components/ResponsiveLayout/ResponsiveLayoutEvents.js.map +1 -1
  6. package/cjs/components/ScrollContainer/ScrollBar.d.ts +4 -0
  7. package/cjs/components/ScrollContainer/ScrollBar.js +24 -6
  8. package/cjs/components/ScrollContainer/ScrollBar.js.map +1 -1
  9. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +10 -0
  10. package/cjs/components/ScrollContainer/ScrollContainer.helpers.js +4 -0
  11. package/cjs/components/ScrollContainer/ScrollContainer.helpers.js.map +1 -1
  12. package/cjs/components/ScrollContainer/ScrollContainer.js +16 -1
  13. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  14. package/cjs/components/ScrollContainer/ScrollContainer.md +29 -0
  15. package/cjs/components/ScrollContainer/ScrollContainer.styles.d.ts +4 -0
  16. package/cjs/components/ScrollContainer/ScrollContainer.styles.js +23 -25
  17. package/cjs/components/ScrollContainer/ScrollContainer.styles.js.map +1 -1
  18. package/cjs/components/SidePage/SidePageHeader.js +1 -1
  19. package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
  20. package/cjs/components/Switcher/Switcher.d.ts +2 -1
  21. package/cjs/components/Switcher/Switcher.js +35 -26
  22. package/cjs/components/Switcher/Switcher.js.map +1 -1
  23. package/cjs/components/Switcher/helpers.d.ts +1 -0
  24. package/cjs/components/Switcher/helpers.js +1 -0
  25. package/cjs/components/Switcher/helpers.js.map +1 -0
  26. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +8 -6
  27. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
  28. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.d.ts +3 -3
  29. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.js +7 -12
  30. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.js.map +1 -1
  31. package/cjs/internal/icons/16px/index.js +2 -1
  32. package/cjs/internal/icons/16px/index.js.map +1 -1
  33. package/cjs/internal/icons/20px/svg.js +2 -1
  34. package/cjs/internal/icons/20px/svg.js.map +1 -1
  35. package/cjs/internal/icons/CloudIcon.js +1 -1
  36. package/cjs/internal/icons/CloudIcon.js.map +1 -1
  37. package/cjs/internal/icons/CrossIcon.js +2 -1
  38. package/cjs/internal/icons/CrossIcon.js.map +1 -1
  39. package/cjs/internal/icons/SpinnerIcon.js +3 -1
  40. package/cjs/internal/icons/SpinnerIcon.js.map +1 -1
  41. package/cjs/lib/SSRSafe.d.ts +1 -0
  42. package/cjs/lib/SSRSafe.js +7 -1
  43. package/cjs/lib/SSRSafe.js.map +1 -1
  44. package/components/FileUploader/FileUploader/FileUploader.js +3 -5
  45. package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
  46. package/components/ResponsiveLayout/ResponsiveLayoutEvents/ResponsiveLayoutEvents.js +18 -12
  47. package/components/ResponsiveLayout/ResponsiveLayoutEvents/ResponsiveLayoutEvents.js.map +1 -1
  48. package/components/ScrollContainer/ScrollBar/ScrollBar.js +22 -4
  49. package/components/ScrollContainer/ScrollBar/ScrollBar.js.map +1 -1
  50. package/components/ScrollContainer/ScrollBar.d.ts +4 -0
  51. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +8 -1
  52. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  53. package/components/ScrollContainer/ScrollContainer.d.ts +10 -0
  54. package/components/ScrollContainer/ScrollContainer.helpers/ScrollContainer.helpers.js +4 -1
  55. package/components/ScrollContainer/ScrollContainer.helpers/ScrollContainer.helpers.js.map +1 -1
  56. package/components/ScrollContainer/ScrollContainer.md +29 -0
  57. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js +15 -7
  58. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js.map +1 -1
  59. package/components/ScrollContainer/ScrollContainer.styles.d.ts +4 -0
  60. package/components/SidePage/SidePageHeader/SidePageHeader.js +1 -1
  61. package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
  62. package/components/Switcher/Switcher/Switcher.js +52 -33
  63. package/components/Switcher/Switcher/Switcher.js.map +1 -1
  64. package/components/Switcher/Switcher.d.ts +2 -1
  65. package/components/Switcher/helpers/helpers.js +3 -0
  66. package/components/Switcher/helpers/helpers.js.map +1 -0
  67. package/components/Switcher/helpers/package.json +6 -0
  68. package/components/Switcher/helpers.d.ts +1 -0
  69. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +8 -6
  70. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
  71. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles/FileUploaderFile.styles.js +7 -7
  72. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles/FileUploaderFile.styles.js.map +1 -1
  73. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.d.ts +3 -3
  74. package/internal/icons/16px/index/index.js +2 -1
  75. package/internal/icons/16px/index/index.js.map +1 -1
  76. package/internal/icons/20px/svg/svg.js +2 -1
  77. package/internal/icons/20px/svg/svg.js.map +1 -1
  78. package/internal/icons/CloudIcon/CloudIcon.js +3 -1
  79. package/internal/icons/CloudIcon/CloudIcon.js.map +1 -1
  80. package/internal/icons/CrossIcon/CrossIcon.js +2 -1
  81. package/internal/icons/CrossIcon/CrossIcon.js.map +1 -1
  82. package/internal/icons/SpinnerIcon/SpinnerIcon.js +3 -1
  83. package/internal/icons/SpinnerIcon/SpinnerIcon.js.map +1 -1
  84. package/lib/SSRSafe/SSRSafe.js +5 -0
  85. package/lib/SSRSafe/SSRSafe.js.map +1 -1
  86. package/lib/SSRSafe.d.ts +1 -0
  87. package/package.json +2 -2
@@ -1,11 +1,13 @@
1
1
  import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
2
2
 
3
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11;
4
4
 
5
5
  import { css, memoizeStyle, prefix } from "../../../lib/theming/Emotion";
6
6
  export var globalClasses = prefix('scroll-container')({
7
7
  scrollbarX: 'scrollbar-x',
8
8
  scrollbarY: 'scrollbar-y',
9
+ scrollbarContainerX: 'scrollbar-container-x',
10
+ scrollbarContainerY: 'scrollbar-container-y',
9
11
  inner: 'inner'
10
12
  });
11
13
  export var styles = memoizeStyle({
@@ -19,21 +21,27 @@ export var styles = memoizeStyle({
19
21
  return css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n margin-bottom: -1px;\n padding-bottom: 1px;\n margin-right: -1px;\n padding-right: 1px;\n "])));
20
22
  },
21
23
  scrollBar: function scrollBar(t) {
22
- return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n position: absolute;\n z-index: 200;\n\n &::after {\n content: '';\n display: block;\n border-radius: 5px;\n position: absolute;\n background: ", ";\n }\n "])), t.scrollContainerScrollBarColor);
24
+ return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n position: absolute;\n z-index: 200;\n border-radius: 5px;\n background: ", ";\n "])), t.scrollContainerScrollBarColor);
23
25
  },
24
26
  scrollBarInvert: function scrollBarInvert(t) {
25
- return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n &::after {\n background: #ccc;\n background: ", ";\n }\n "])), t.scrollContainerScrollBarInvertColor);
27
+ return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n background: #ccc;\n background: ", ";\n "])), t.scrollContainerScrollBarInvertColor);
28
+ },
29
+ scrollBarContainerY: function scrollBarContainerY() {
30
+ return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n position: absolute;\n right: 2px;\n top: 1px;\n bottom: 1px;\n width: 0;\n "])));
26
31
  },
27
32
  scrollBarY: function scrollBarY(t) {
28
- return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n right: 2px;\n transition: width 0.2s;\n width: ", ";\n\n &::after {\n bottom: 1px;\n left: 0;\n right: 0;\n top: 1px;\n }\n "])), t.scrollContainerScrollBarSize);
33
+ return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n right: 0;\n transition: width 0.2s;\n width: ", ";\n "])), t.scrollContainerScrollBarSize);
29
34
  },
30
35
  scrollBarYHover: function scrollBarYHover(t) {
31
- return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n width: ", ";\n "])), t.scrollContainerScrollBarHoverSize);
36
+ return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n width: ", ";\n "])), t.scrollContainerScrollBarHoverSize);
37
+ },
38
+ scrollBarContainerX: function scrollBarContainerX(t) {
39
+ return css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n position: absolute;\n right: 1px;\n bottom: 1px;\n left: 1px;\n height: 0;\n\n .", " ~ & {\n margin-right: calc(", " + 3px) !important;\n }\n\n & ~ .", " {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(", " + 2px);\n }\n }\n "])), globalClasses.scrollbarContainerY, t.scrollContainerScrollBarHoverSize, globalClasses.inner, t.scrollContainerScrollBarHoverSize);
32
40
  },
33
41
  scrollBarX: function scrollBarX(t) {
34
- return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n bottom: 1px;\n transition: height 0.2s;\n height: ", ";\n\n &::after {\n bottom: 0px;\n left: 1px;\n right: 1px;\n top: 0;\n }\n\n .", " ~ & {\n &::after {\n right: calc(", " + 4px) !important;\n }\n }\n\n & ~ .", " {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(", " + 2px);\n }\n }\n "])), t.scrollContainerScrollBarSize, globalClasses.scrollbarY, t.scrollContainerScrollBarHoverSize, globalClasses.inner, t.scrollContainerScrollBarHoverSize);
42
+ return css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteralLoose(["\n bottom: 0;\n transition: height 0.2s;\n height: ", ";\n "])), t.scrollContainerScrollBarSize);
35
43
  },
36
44
  scrollBarXHover: function scrollBarXHover(t) {
37
- return css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n height: ", ";\n "])), t.scrollContainerScrollBarHoverSize);
45
+ return css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteralLoose(["\n height: ", ";\n "])), t.scrollContainerScrollBarHoverSize);
38
46
  }
39
47
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollContainer.styles.ts"],"names":["css","memoizeStyle","prefix","globalClasses","scrollbarX","scrollbarY","inner","styles","root","innerIE11","scrollBar","t","scrollContainerScrollBarColor","scrollBarInvert","scrollContainerScrollBarInvertColor","scrollBarY","scrollContainerScrollBarSize","scrollBarYHover","scrollContainerScrollBarHoverSize","scrollBarX","scrollBarXHover"],"mappings":"oQAAA,SAASA,GAAT,EAAcC,YAAd,EAA4BC,MAA5B,QAA0C,2BAA1C;;;AAGA,OAAO,IAAMC,aAAa,GAAGD,MAAM,CAAC,kBAAD,CAAN,CAA2B;AACtDE,EAAAA,UAAU,EAAE,aAD0C;AAEtDC,EAAAA,UAAU,EAAE,aAF0C;AAGtDC,EAAAA,KAAK,EAAE,OAH+C,EAA3B,CAAtB;;;AAMP,OAAO,IAAMC,MAAM,GAAGN,YAAY,CAAC;AACjCO,EAAAA,IADiC,kBAC1B;AACL,WAAOR,GAAP;;;;;AAKD,GAPgC;;AASjCM,EAAAA,KATiC,mBASzB;AACN,WAAON,GAAP;;;;;;;;;;;;;;AAcD,GAxBgC;;AA0BjCS,EAAAA,SA1BiC,uBA0BrB;AACV,WAAOT,GAAP;;;;;;;AAOD,GAlCgC;;AAoCjCU,EAAAA,SApCiC,qBAoCvBC,CApCuB,EAoCb;AAClB,WAAOX,GAAP;;;;;;;;;AASkBW,IAAAA,CAAC,CAACC,6BATpB;;;AAYD,GAjDgC;;AAmDjCC,EAAAA,eAnDiC,2BAmDjBF,CAnDiB,EAmDP;AACxB,WAAOX,GAAP;;;AAGkBW,IAAAA,CAAC,CAACG,mCAHpB;;;AAMD,GA1DgC;;AA4DjCC,EAAAA,UA5DiC,sBA4DtBJ,CA5DsB,EA4DZ;AACnB,WAAOX,GAAP;;;AAGWW,IAAAA,CAAC,CAACK,4BAHb;;;;;;;;;AAYD,GAzEgC;;AA2EjCC,EAAAA,eA3EiC,2BA2EjBN,CA3EiB,EA2EP;AACxB,WAAOX,GAAP;AACWW,IAAAA,CAAC,CAACO,iCADb;;AAGD,GA/EgC;;AAiFjCC,EAAAA,UAjFiC,sBAiFtBR,CAjFsB,EAiFZ;AACnB,WAAOX,GAAP;;;AAGYW,IAAAA,CAAC,CAACK,4BAHd;;;;;;;;;AAYKb,IAAAA,aAAa,CAACE,UAZnB;;AAcoBM,IAAAA,CAAC,CAACO,iCAdtB;;;;AAkBSf,IAAAA,aAAa,CAACG,KAlBvB;;;;;AAuBqBK,IAAAA,CAAC,CAACO,iCAvBvB;;;;AA2BD,GA7GgC;;AA+GjCE,EAAAA,eA/GiC,2BA+GjBT,CA/GiB,EA+GP;AACxB,WAAOX,GAAP;AACYW,IAAAA,CAAC,CAACO,iCADd;;AAGD,GAnHgC,EAAD,CAA3B","sourcesContent":["import { css, memoizeStyle, prefix } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const globalClasses = prefix('scroll-container')({\n scrollbarX: 'scrollbar-x',\n scrollbarY: 'scrollbar-y',\n inner: 'inner',\n});\n\nexport const styles = memoizeStyle({\n root() {\n return css`\n height: 100%;\n overflow: hidden;\n position: relative;\n `;\n },\n\n inner() {\n return css`\n position: relative;\n overflow: scroll;\n max-height: 100%;\n max-width: 100%;\n\n /* Hide scrobars without losing functionality */\n scrollbar-width: none;\n -ms-overflow-style: none;\n &::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n `;\n },\n\n innerIE11() {\n return css`\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n margin-bottom: -1px;\n padding-bottom: 1px;\n margin-right: -1px;\n padding-right: 1px;\n `;\n },\n\n scrollBar(t: Theme) {\n return css`\n position: absolute;\n z-index: 200;\n\n &::after {\n content: '';\n display: block;\n border-radius: 5px;\n position: absolute;\n background: ${t.scrollContainerScrollBarColor};\n }\n `;\n },\n\n scrollBarInvert(t: Theme) {\n return css`\n &::after {\n background: #ccc;\n background: ${t.scrollContainerScrollBarInvertColor};\n }\n `;\n },\n\n scrollBarY(t: Theme) {\n return css`\n right: 2px;\n transition: width 0.2s;\n width: ${t.scrollContainerScrollBarSize};\n\n &::after {\n bottom: 1px;\n left: 0;\n right: 0;\n top: 1px;\n }\n `;\n },\n\n scrollBarYHover(t: Theme) {\n return css`\n width: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n\n scrollBarX(t: Theme) {\n return css`\n bottom: 1px;\n transition: height 0.2s;\n height: ${t.scrollContainerScrollBarSize};\n\n &::after {\n bottom: 0px;\n left: 1px;\n right: 1px;\n top: 0;\n }\n\n .${globalClasses.scrollbarY} ~ & {\n &::after {\n right: calc(${t.scrollContainerScrollBarHoverSize} + 4px) !important;\n }\n }\n\n & ~ .${globalClasses.inner} {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(${t.scrollContainerScrollBarHoverSize} + 2px);\n }\n }\n `;\n },\n\n scrollBarXHover(t: Theme) {\n return css`\n height: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n});\n"]}
1
+ {"version":3,"sources":["ScrollContainer.styles.ts"],"names":["css","memoizeStyle","prefix","globalClasses","scrollbarX","scrollbarY","scrollbarContainerX","scrollbarContainerY","inner","styles","root","innerIE11","scrollBar","t","scrollContainerScrollBarColor","scrollBarInvert","scrollContainerScrollBarInvertColor","scrollBarContainerY","scrollBarY","scrollContainerScrollBarSize","scrollBarYHover","scrollContainerScrollBarHoverSize","scrollBarContainerX","scrollBarX","scrollBarXHover"],"mappings":"0SAAA,SAASA,GAAT,EAAcC,YAAd,EAA4BC,MAA5B,QAA0C,2BAA1C;;;AAGA,OAAO,IAAMC,aAAa,GAAGD,MAAM,CAAC,kBAAD,CAAN,CAA2B;AACtDE,EAAAA,UAAU,EAAE,aAD0C;AAEtDC,EAAAA,UAAU,EAAE,aAF0C;AAGtDC,EAAAA,mBAAmB,EAAE,uBAHiC;AAItDC,EAAAA,mBAAmB,EAAE,uBAJiC;AAKtDC,EAAAA,KAAK,EAAE,OAL+C,EAA3B,CAAtB;;;AAQP,OAAO,IAAMC,MAAM,GAAGR,YAAY,CAAC;AACjCS,EAAAA,IADiC,kBAC1B;AACL,WAAOV,GAAP;;;;;AAKD,GAPgC;;AASjCQ,EAAAA,KATiC,mBASzB;AACN,WAAOR,GAAP;;;;;;;;;;;;;;AAcD,GAxBgC;;AA0BjCW,EAAAA,SA1BiC,uBA0BrB;AACV,WAAOX,GAAP;;;;;;;AAOD,GAlCgC;;AAoCjCY,EAAAA,SApCiC,qBAoCvBC,CApCuB,EAoCb;AAClB,WAAOb,GAAP;;;;AAIgBa,IAAAA,CAAC,CAACC,6BAJlB;;AAMD,GA3CgC;;AA6CjCC,EAAAA,eA7CiC,2BA6CjBF,CA7CiB,EA6CP;AACxB,WAAOb,GAAP;;AAEgBa,IAAAA,CAAC,CAACG,mCAFlB;;AAID,GAlDgC;;AAoDjCC,EAAAA,mBApDiC,iCAoDX;AACpB,WAAOjB,GAAP;;;;;;;AAOD,GA5DgC;;AA8DjCkB,EAAAA,UA9DiC,sBA8DtBL,CA9DsB,EA8DZ;AACnB,WAAOb,GAAP;;;AAGWa,IAAAA,CAAC,CAACM,4BAHb;;AAKD,GApEgC;;AAsEjCC,EAAAA,eAtEiC,2BAsEjBP,CAtEiB,EAsEP;AACxB,WAAOb,GAAP;AACWa,IAAAA,CAAC,CAACQ,iCADb;;AAGD,GA1EgC;;AA4EjCC,EAAAA,mBA5EiC,+BA4EbT,CA5Ea,EA4EH;AAC5B,WAAOb,GAAP;;;;;;;AAOKG,IAAAA,aAAa,CAACI,mBAPnB;AAQyBM,IAAAA,CAAC,CAACQ,iCAR3B;;;AAWSlB,IAAAA,aAAa,CAACK,KAXvB;;;;;AAgBqBK,IAAAA,CAAC,CAACQ,iCAhBvB;;;;AAoBD,GAjGgC;;AAmGjCE,EAAAA,UAnGiC,sBAmGtBV,CAnGsB,EAmGZ;AACnB,WAAOb,GAAP;;;AAGYa,IAAAA,CAAC,CAACM,4BAHd;;AAKD,GAzGgC;;AA2GjCK,EAAAA,eA3GiC,2BA2GjBX,CA3GiB,EA2GP;AACxB,WAAOb,GAAP;AACYa,IAAAA,CAAC,CAACQ,iCADd;;AAGD,GA/GgC,EAAD,CAA3B","sourcesContent":["import { css, memoizeStyle, prefix } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const globalClasses = prefix('scroll-container')({\n scrollbarX: 'scrollbar-x',\n scrollbarY: 'scrollbar-y',\n scrollbarContainerX: 'scrollbar-container-x',\n scrollbarContainerY: 'scrollbar-container-y',\n inner: 'inner',\n});\n\nexport const styles = memoizeStyle({\n root() {\n return css`\n height: 100%;\n overflow: hidden;\n position: relative;\n `;\n },\n\n inner() {\n return css`\n position: relative;\n overflow: scroll;\n max-height: 100%;\n max-width: 100%;\n\n /* Hide scrobars without losing functionality */\n scrollbar-width: none;\n -ms-overflow-style: none;\n &::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n `;\n },\n\n innerIE11() {\n return css`\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n margin-bottom: -1px;\n padding-bottom: 1px;\n margin-right: -1px;\n padding-right: 1px;\n `;\n },\n\n scrollBar(t: Theme) {\n return css`\n position: absolute;\n z-index: 200;\n border-radius: 5px;\n background: ${t.scrollContainerScrollBarColor};\n `;\n },\n\n scrollBarInvert(t: Theme) {\n return css`\n background: #ccc;\n background: ${t.scrollContainerScrollBarInvertColor};\n `;\n },\n\n scrollBarContainerY() {\n return css`\n position: absolute;\n right: 2px;\n top: 1px;\n bottom: 1px;\n width: 0;\n `;\n },\n\n scrollBarY(t: Theme) {\n return css`\n right: 0;\n transition: width 0.2s;\n width: ${t.scrollContainerScrollBarSize};\n `;\n },\n\n scrollBarYHover(t: Theme) {\n return css`\n width: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n\n scrollBarContainerX(t: Theme) {\n return css`\n position: absolute;\n right: 1px;\n bottom: 1px;\n left: 1px;\n height: 0;\n\n .${globalClasses.scrollbarContainerY} ~ & {\n margin-right: calc(${t.scrollContainerScrollBarHoverSize} + 3px) !important;\n }\n\n & ~ .${globalClasses.inner} {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(${t.scrollContainerScrollBarHoverSize} + 2px);\n }\n }\n `;\n },\n\n scrollBarX(t: Theme) {\n return css`\n bottom: 0;\n transition: height 0.2s;\n height: ${t.scrollContainerScrollBarSize};\n `;\n },\n\n scrollBarXHover(t: Theme) {\n return css`\n height: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n});\n"]}
@@ -2,6 +2,8 @@ import { Theme } from '../../lib/theming/Theme';
2
2
  export declare const globalClasses: {
3
3
  scrollbarX: string;
4
4
  scrollbarY: string;
5
+ scrollbarContainerX: string;
6
+ scrollbarContainerY: string;
5
7
  inner: string;
6
8
  };
7
9
  export declare const styles: {
@@ -10,8 +12,10 @@ export declare const styles: {
10
12
  innerIE11(): string;
11
13
  scrollBar(t: Theme): string;
12
14
  scrollBarInvert(t: Theme): string;
15
+ scrollBarContainerY(): string;
13
16
  scrollBarY(t: Theme): string;
14
17
  scrollBarYHover(t: Theme): string;
18
+ scrollBarContainerX(t: Theme): string;
15
19
  scrollBarX(t: Theme): string;
16
20
  scrollBarXHover(t: Theme): string;
17
21
  };
@@ -90,7 +90,7 @@ export var SidePageHeader = responsiveLayout(_class = rootNode(_class = (_temp =
90
90
  var stickyOffset = parseInt(_this.theme.sidePageHeaderStickyOffset);
91
91
  return /*#__PURE__*/React.createElement("div", {
92
92
  className: cx(styles.wrapperClose(_this.theme), (_cx3 = {}, _cx3[styles.wrapperCloseFixed(_this.theme)] = fixed, _cx3[styles.mobileWrapperClose(_this.theme)] = _this.isMobileLayout, _cx3))
93
- }, _this.isMobileLayout ? _this.closeIcon : /*#__PURE__*/React.createElement(Sticky, {
93
+ }, _this.isMobileLayout ? _this.closeIcon() : /*#__PURE__*/React.createElement(Sticky, {
94
94
  side: "top",
95
95
  offset: stickyOffset
96
96
  }, _this.closeIcon));
@@ -1 +1 @@
1
- {"version":3,"sources":["SidePageHeader.tsx"],"names":["React","Sticky","CrossIcon","isFunction","ThemeContext","CommonWrapper","cx","keyListener","responsiveLayout","rootNode","getDOMRect","styles","SidePageContext","SidePageHeaderDataTids","root","close","SidePageHeader","context","state","isReadyToFix","focusedByTab","wrapper","sticky","lastRegularHeight","componentDidMount","window","addEventListener","update","setHasHeader","headerRef","componentWillUnmount","removeEventListener","reflow","updateReadyToFix","renderHeader","fixed","header","theme","headerFixed","mobileHeader","isMobileLayout","renderClose","title","mobileTitle","titleFixed","props","children","stickyOffset","parseInt","sidePageHeaderStickyOffset","wrapperClose","wrapperCloseFixed","mobileWrapperClose","closeIcon","requestClose","closeFocus","handleFocus","handleBlur","wrapperScrolledUp","top","regularHeight","fixedHeaderHeight","setState","wrapperRef","el","stickyRef","requestAnimationFrame","isTabPressed","render","renderMain","getStickyProp","isStickyDesktop","isStickyMobile","setRootNode","headerWrapper","height","sidePageHeaderFixedLineHeight","sidePageHeaderFixedPaddingY","Component","__KONTUR_REACT_UI__","contextType"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Sticky } from '../Sticky';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './SidePage.styles';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\n\nexport interface SidePageHeaderProps extends Omit<CommonProps, 'children'> {\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n sticky?: boolean;\n}\n\nexport interface SidePageHeaderState {\n isReadyToFix: boolean;\n focusedByTab: boolean;\n}\n\nexport const SidePageHeaderDataTids = {\n root: 'SidePageHeader__root',\n close: 'SidePage__close',\n} as const;\n\n/**\n * Шапка сайдпейджа\n *\n * @visibleName SidePage.Header\n */\n@responsiveLayout\n@rootNode\nexport class SidePageHeader extends React.Component<SidePageHeaderProps, SidePageHeaderState> {\n public static __KONTUR_REACT_UI__ = 'SidePageHeader';\n\n public static contextType = SidePageContext;\n public context: SidePageContextType = this.context;\n\n private isMobileLayout!: boolean;\n\n public state: SidePageHeaderState = {\n isReadyToFix: false,\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private wrapper: HTMLElement | null = null;\n private sticky: Sticky | null = null;\n private lastRegularHeight = 0;\n private setRootNode!: TSetRootNode;\n\n public get regularHeight(): number {\n const { isReadyToFix } = this.state;\n if (!this.wrapper) {\n return 0;\n }\n if (!isReadyToFix) {\n this.lastRegularHeight = getDOMRect(this.wrapper).height;\n }\n return this.lastRegularHeight;\n }\n\n public get fixedHeaderHeight(): number {\n const { theme } = this;\n return parseInt(theme.sidePageHeaderFixedLineHeight) + parseInt(theme.sidePageHeaderFixedPaddingY) * 2;\n }\n\n public componentDidMount = () => {\n window.addEventListener('scroll', this.update, true);\n this.context.setHasHeader?.();\n this.context.headerRef(this);\n };\n\n public componentWillUnmount = () => {\n window.removeEventListener('scroll', this.update, true);\n this.context.setHasHeader?.(false);\n this.context.headerRef(null);\n };\n\n public update = () => {\n this.sticky?.reflow();\n this.updateReadyToFix();\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public getStickyProp() {\n if (typeof this.props.sticky !== 'undefined') {\n return this.props.sticky;\n }\n\n if (this.isMobileLayout) {\n return false;\n }\n\n return true;\n }\n\n private renderMain() {\n const { isReadyToFix } = this.state;\n\n const isStickyDesktop = !this.isMobileLayout && this.getStickyProp() && isReadyToFix;\n const isStickyMobile = this.isMobileLayout && this.getStickyProp();\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SidePageHeaderDataTids.root} ref={this.wrapperRef} className={styles.headerWrapper()}>\n {isStickyDesktop || isStickyMobile ? (\n <Sticky ref={this.stickyRef} side=\"top\">\n {this.renderHeader}\n </Sticky>\n ) : (\n this.renderHeader()\n )}\n </div>\n </CommonWrapper>\n );\n }\n\n private renderHeader = (fixed = false) => {\n return (\n <div\n className={cx(styles.header(this.theme), {\n [styles.headerFixed(this.theme)]: fixed,\n [styles.mobileHeader(this.theme)]: this.isMobileLayout,\n })}\n >\n {this.renderClose(fixed)}\n <div\n className={cx(styles.title(this.theme), {\n [styles.mobileTitle(this.theme)]: this.isMobileLayout,\n [styles.titleFixed()]: fixed,\n })}\n >\n {isFunction(this.props.children) ? this.props.children(fixed) : this.props.children}\n </div>\n </div>\n );\n };\n\n private renderClose = (fixed: boolean) => {\n const stickyOffset = parseInt(this.theme.sidePageHeaderStickyOffset);\n return (\n <div\n className={cx(styles.wrapperClose(this.theme), {\n [styles.wrapperCloseFixed(this.theme)]: fixed,\n [styles.mobileWrapperClose(this.theme)]: this.isMobileLayout,\n })}\n >\n {this.isMobileLayout ? (\n this.closeIcon\n ) : (\n <Sticky side=\"top\" offset={stickyOffset}>\n {this.closeIcon}\n </Sticky>\n )}\n </div>\n );\n };\n\n private closeIcon = () => (\n <SidePageContext.Consumer>\n {({ requestClose }) => (\n <button\n className={cx(styles.close(this.theme), {\n [styles.closeFocus(this.theme)]: this.state.focusedByTab,\n })}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onClick={requestClose}\n data-tid={SidePageHeaderDataTids.close}\n tabIndex={0}\n >\n <CrossIcon />\n </button>\n )}\n </SidePageContext.Consumer>\n );\n\n private updateReadyToFix = () => {\n if (this.wrapper) {\n const wrapperScrolledUp = getDOMRect(this.wrapper).top;\n const isReadyToFix = this.regularHeight + wrapperScrolledUp <= this.fixedHeaderHeight;\n this.setState((state) => (state.isReadyToFix !== isReadyToFix ? { ...state, isReadyToFix } : state));\n }\n };\n\n private wrapperRef = (el: HTMLElement | null) => {\n this.wrapper = el;\n };\n\n private stickyRef = (el: Sticky | null) => {\n this.sticky = el;\n };\n\n private handleFocus = () => {\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n}\n"]}
1
+ {"version":3,"sources":["SidePageHeader.tsx"],"names":["React","Sticky","CrossIcon","isFunction","ThemeContext","CommonWrapper","cx","keyListener","responsiveLayout","rootNode","getDOMRect","styles","SidePageContext","SidePageHeaderDataTids","root","close","SidePageHeader","context","state","isReadyToFix","focusedByTab","wrapper","sticky","lastRegularHeight","componentDidMount","window","addEventListener","update","setHasHeader","headerRef","componentWillUnmount","removeEventListener","reflow","updateReadyToFix","renderHeader","fixed","header","theme","headerFixed","mobileHeader","isMobileLayout","renderClose","title","mobileTitle","titleFixed","props","children","stickyOffset","parseInt","sidePageHeaderStickyOffset","wrapperClose","wrapperCloseFixed","mobileWrapperClose","closeIcon","requestClose","closeFocus","handleFocus","handleBlur","wrapperScrolledUp","top","regularHeight","fixedHeaderHeight","setState","wrapperRef","el","stickyRef","requestAnimationFrame","isTabPressed","render","renderMain","getStickyProp","isStickyDesktop","isStickyMobile","setRootNode","headerWrapper","height","sidePageHeaderFixedLineHeight","sidePageHeaderFixedPaddingY","Component","__KONTUR_REACT_UI__","contextType"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Sticky } from '../Sticky';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './SidePage.styles';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\n\nexport interface SidePageHeaderProps extends Omit<CommonProps, 'children'> {\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n sticky?: boolean;\n}\n\nexport interface SidePageHeaderState {\n isReadyToFix: boolean;\n focusedByTab: boolean;\n}\n\nexport const SidePageHeaderDataTids = {\n root: 'SidePageHeader__root',\n close: 'SidePage__close',\n} as const;\n\n/**\n * Шапка сайдпейджа\n *\n * @visibleName SidePage.Header\n */\n@responsiveLayout\n@rootNode\nexport class SidePageHeader extends React.Component<SidePageHeaderProps, SidePageHeaderState> {\n public static __KONTUR_REACT_UI__ = 'SidePageHeader';\n\n public static contextType = SidePageContext;\n public context: SidePageContextType = this.context;\n\n private isMobileLayout!: boolean;\n\n public state: SidePageHeaderState = {\n isReadyToFix: false,\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private wrapper: HTMLElement | null = null;\n private sticky: Sticky | null = null;\n private lastRegularHeight = 0;\n private setRootNode!: TSetRootNode;\n\n public get regularHeight(): number {\n const { isReadyToFix } = this.state;\n if (!this.wrapper) {\n return 0;\n }\n if (!isReadyToFix) {\n this.lastRegularHeight = getDOMRect(this.wrapper).height;\n }\n return this.lastRegularHeight;\n }\n\n public get fixedHeaderHeight(): number {\n const { theme } = this;\n return parseInt(theme.sidePageHeaderFixedLineHeight) + parseInt(theme.sidePageHeaderFixedPaddingY) * 2;\n }\n\n public componentDidMount = () => {\n window.addEventListener('scroll', this.update, true);\n this.context.setHasHeader?.();\n this.context.headerRef(this);\n };\n\n public componentWillUnmount = () => {\n window.removeEventListener('scroll', this.update, true);\n this.context.setHasHeader?.(false);\n this.context.headerRef(null);\n };\n\n public update = () => {\n this.sticky?.reflow();\n this.updateReadyToFix();\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public getStickyProp() {\n if (typeof this.props.sticky !== 'undefined') {\n return this.props.sticky;\n }\n\n if (this.isMobileLayout) {\n return false;\n }\n\n return true;\n }\n\n private renderMain() {\n const { isReadyToFix } = this.state;\n\n const isStickyDesktop = !this.isMobileLayout && this.getStickyProp() && isReadyToFix;\n const isStickyMobile = this.isMobileLayout && this.getStickyProp();\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SidePageHeaderDataTids.root} ref={this.wrapperRef} className={styles.headerWrapper()}>\n {isStickyDesktop || isStickyMobile ? (\n <Sticky ref={this.stickyRef} side=\"top\">\n {this.renderHeader}\n </Sticky>\n ) : (\n this.renderHeader()\n )}\n </div>\n </CommonWrapper>\n );\n }\n\n private renderHeader = (fixed = false) => {\n return (\n <div\n className={cx(styles.header(this.theme), {\n [styles.headerFixed(this.theme)]: fixed,\n [styles.mobileHeader(this.theme)]: this.isMobileLayout,\n })}\n >\n {this.renderClose(fixed)}\n <div\n className={cx(styles.title(this.theme), {\n [styles.mobileTitle(this.theme)]: this.isMobileLayout,\n [styles.titleFixed()]: fixed,\n })}\n >\n {isFunction(this.props.children) ? this.props.children(fixed) : this.props.children}\n </div>\n </div>\n );\n };\n\n private renderClose = (fixed: boolean) => {\n const stickyOffset = parseInt(this.theme.sidePageHeaderStickyOffset);\n return (\n <div\n className={cx(styles.wrapperClose(this.theme), {\n [styles.wrapperCloseFixed(this.theme)]: fixed,\n [styles.mobileWrapperClose(this.theme)]: this.isMobileLayout,\n })}\n >\n {this.isMobileLayout ? (\n this.closeIcon()\n ) : (\n <Sticky side=\"top\" offset={stickyOffset}>\n {this.closeIcon}\n </Sticky>\n )}\n </div>\n );\n };\n\n private closeIcon = () => (\n <SidePageContext.Consumer>\n {({ requestClose }) => (\n <button\n className={cx(styles.close(this.theme), {\n [styles.closeFocus(this.theme)]: this.state.focusedByTab,\n })}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onClick={requestClose}\n data-tid={SidePageHeaderDataTids.close}\n tabIndex={0}\n >\n <CrossIcon />\n </button>\n )}\n </SidePageContext.Consumer>\n );\n\n private updateReadyToFix = () => {\n if (this.wrapper) {\n const wrapperScrolledUp = getDOMRect(this.wrapper).top;\n const isReadyToFix = this.regularHeight + wrapperScrolledUp <= this.fixedHeaderHeight;\n this.setState((state) => (state.isReadyToFix !== isReadyToFix ? { ...state, isReadyToFix } : state));\n }\n };\n\n private wrapperRef = (el: HTMLElement | null) => {\n this.wrapper = el;\n };\n\n private stickyRef = (el: Sticky | null) => {\n this.sticky = el;\n };\n\n private handleFocus = () => {\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n}\n"]}
@@ -14,6 +14,7 @@ import { cx } from "../../../lib/theming/Emotion";
14
14
  import { rootNode } from "../../../lib/rootNode";
15
15
  import { styles } from "../Switcher.styles";
16
16
  import { getSwitcherTheme } from "../switcherTheme";
17
+ import { mod } from "../helpers";
17
18
  export var SwitcherDataTids = {
18
19
  root: 'Switcher__root'
19
20
  };
@@ -54,26 +55,6 @@ export var Switcher = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
54
55
  });
55
56
  };
56
57
 
57
- _this.move = function (step) {
58
- var selectedIndex = _this.state.focusedIndex;
59
-
60
- if (typeof selectedIndex !== 'number') {
61
- return;
62
- }
63
-
64
- var items = _this._extractValuesFromItems();
65
-
66
- selectedIndex += step;
67
-
68
- if (selectedIndex < 0) {
69
- selectedIndex = items.length - 1;
70
- } else if (selectedIndex >= items.length) {
71
- selectedIndex = 0;
72
- }
73
-
74
- _this._focus(selectedIndex);
75
- };
76
-
77
58
  _this._focus = function (index) {
78
59
  _this.setState({
79
60
  focusedIndex: index
@@ -90,9 +71,12 @@ export var Switcher = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
90
71
  if (isKeyEnter(e)) {
91
72
  if (_this.props.onValueChange) {
92
73
  var _this$_extractPropsFr2 = _this._extractPropsFromItem(_this.props.items[focusedIndex]),
93
- _value = _this$_extractPropsFr2.value;
74
+ _value = _this$_extractPropsFr2.value,
75
+ _buttonProps = _this$_extractPropsFr2.buttonProps;
94
76
 
95
- _this.selectItem(_value);
77
+ if (!(_buttonProps != null && _buttonProps.disabled)) {
78
+ _this.selectItem(_value);
79
+ }
96
80
  }
97
81
 
98
82
  return;
@@ -101,8 +85,43 @@ export var Switcher = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
101
85
  if (isKeyArrowHorizontal(e)) {
102
86
  e.preventDefault();
103
87
 
104
- _this.move(isKeyArrowLeft(e) ? -1 : 1);
88
+ _this.move(isKeyArrowLeft(e));
89
+ }
90
+ };
91
+
92
+ _this.move = function (left) {
93
+ var selectedIndex = _this.state.focusedIndex;
94
+
95
+ if (typeof selectedIndex !== 'number') {
96
+ return;
97
+ }
98
+
99
+ var newFocusedIndex = _this._getNextFocusedIndex(left, selectedIndex);
100
+
101
+ _this._focus(newFocusedIndex);
102
+ };
103
+
104
+ _this._getNextFocusedIndex = function (left, focusedIndex) {
105
+ var _this$props = _this.props,
106
+ items = _this$props.items,
107
+ disabled = _this$props.disabled;
108
+
109
+ if (disabled) {
110
+ return focusedIndex;
105
111
  }
112
+
113
+ for (var i = 1; i < items.length; i++) {
114
+ var index = mod(focusedIndex + (left ? -i : i), items.length);
115
+
116
+ var _this$_extractPropsFr3 = _this._extractPropsFromItem(items[index]),
117
+ _buttonProps2 = _this$_extractPropsFr3.buttonProps;
118
+
119
+ if (!(_buttonProps2 != null && _buttonProps2.disabled)) {
120
+ return index;
121
+ }
122
+ }
123
+
124
+ return focusedIndex;
106
125
  };
107
126
 
108
127
  _this._handleFocus = function () {
@@ -125,17 +144,17 @@ export var Switcher = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
125
144
  };
126
145
 
127
146
  _this._renderItems = function () {
128
- var _this$props = _this.props,
129
- items = _this$props.items,
130
- value = _this$props.value,
131
- size = _this$props.size,
132
- disabled = _this$props.disabled,
133
- renderItem = _this$props.renderItem;
147
+ var _this$props2 = _this.props,
148
+ items = _this$props2.items,
149
+ value = _this$props2.value,
150
+ size = _this$props2.size,
151
+ disabled = _this$props2.disabled,
152
+ renderItem = _this$props2.renderItem;
134
153
  return items.map(function (item, i) {
135
- var _this$_extractPropsFr3 = _this._extractPropsFromItem(item),
136
- label = _this$_extractPropsFr3.label,
137
- itemValue = _this$_extractPropsFr3.value,
138
- customButtonProps = _this$_extractPropsFr3.buttonProps;
154
+ var _this$_extractPropsFr4 = _this._extractPropsFromItem(item),
155
+ label = _this$_extractPropsFr4.label,
156
+ itemValue = _this$_extractPropsFr4.value,
157
+ customButtonProps = _this$_extractPropsFr4.buttonProps;
139
158
 
140
159
  var commonButtonProps = {
141
160
  checked: value === itemValue,
@@ -1 +1 @@
1
- {"version":3,"sources":["Switcher.tsx"],"names":["React","PropTypes","isKeyArrowHorizontal","isKeyArrowLeft","isKeyEnter","getButtonCorners","Group","Button","ThemeContext","CommonWrapper","cx","rootNode","styles","getSwitcherTheme","SwitcherDataTids","root","Switcher","state","focusedIndex","selectItem","value","props","onValueChange","_extractPropsFromItem","item","label","_extractValuesFromItems","items","map","move","step","selectedIndex","length","_focus","index","setState","handleKey","e","preventDefault","_handleFocus","currentIndex","indexOf","_handleBlur","_renderItems","size","disabled","renderItem","i","itemValue","customButtonProps","buttonProps","commonButtonProps","checked","visuallyFocused","onClick","disableFocus","corners","renderDefault","renderDefaultItem","getLabelSizeClassName","captionLarge","theme","captionMedium","captionSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","captionClassName","caption","setRootNode","wrap","Component","__KONTUR_REACT_UI__","propTypes","bool","oneOfType","arrayOf","string","shape","isRequired","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { getButtonCorners, Group } from '../Group';\nimport { Button, ButtonProps, ButtonSize } from '../Button';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Switcher.styles';\nimport { getSwitcherTheme } from './switcherTheme';\n\nexport type SwitcherSize = ButtonSize;\ntype SwitcherItems = string | SwitcherItem;\n\nexport const SwitcherDataTids = {\n root: 'Switcher__root',\n} as const;\n\nexport interface SwitcherProps extends CommonProps {\n /**\n * Список строк или список элементов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }`\n */\n items: SwitcherItems[];\n\n value?: string;\n\n onValueChange?: (value: string) => void;\n\n caption?: string;\n\n error?: boolean;\n\n /** Размер */\n size?: SwitcherSize;\n\n disabled?: boolean;\n\n /**\n * Функция для отрисовки элемента. Аргументы — `label`,\n * `value`, `buttonProps`, `renderDefault`\n */\n renderItem?: (\n label: string,\n value: string,\n buttonProps: ButtonProps,\n renderDefault: () => React.ReactNode,\n ) => React.ReactNode;\n}\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n label: string;\n value: string;\n buttonProps?: Partial<ButtonProps>;\n}\n\n@rootNode\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n\n public static propTypes = {\n error: PropTypes.bool,\n disabled: PropTypes.bool,\n items: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n ]).isRequired,\n caption: PropTypes.string,\n value: PropTypes.string,\n onValueChange: PropTypes.func,\n renderItem: PropTypes.func,\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getSwitcherTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const listClassName = cx({\n [styles.error(this.theme)]: !!this.props.error,\n });\n\n const inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: styles.input(),\n };\n\n const captionClassName = cx(styles.caption(this.theme), this.getLabelSizeClassName());\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SwitcherDataTids.root} className={styles.root()}>\n {this.props.caption ? <div className={captionClassName}>{this.props.caption}</div> : null}\n <div className={styles.wrap()}>\n <input {...inputProps} />\n <div className={listClassName}>\n <Group>{this._renderItems()}</Group>\n </div>\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n private selectItem = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private _extractPropsFromItem = (item: string | SwitcherItem): SwitcherItem => {\n return typeof item === 'object' ? item : { label: item, value: item };\n };\n\n private _extractValuesFromItems = (): string[] => {\n return this.props.items.map((item) => {\n const { value } = this._extractPropsFromItem(item);\n return value;\n });\n };\n\n private move = (step: number) => {\n let selectedIndex = this.state.focusedIndex;\n\n if (typeof selectedIndex !== 'number') {\n return;\n }\n\n const items = this._extractValuesFromItems();\n\n selectedIndex += step;\n\n if (selectedIndex < 0) {\n selectedIndex = items.length - 1;\n } else if (selectedIndex >= items.length) {\n selectedIndex = 0;\n }\n\n this._focus(selectedIndex);\n };\n\n private _focus = (index: number) => {\n this.setState({ focusedIndex: index });\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const focusedIndex = this.state.focusedIndex;\n if (typeof focusedIndex !== 'number') {\n return;\n }\n\n if (isKeyEnter(e)) {\n if (this.props.onValueChange) {\n const { value } = this._extractPropsFromItem(this.props.items[focusedIndex]);\n this.selectItem(value);\n }\n return;\n }\n\n if (isKeyArrowHorizontal(e)) {\n e.preventDefault();\n this.move(isKeyArrowLeft(e) ? -1 : 1);\n }\n };\n\n private _handleFocus = () => {\n const { value } = this.props;\n\n const items = this._extractValuesFromItems();\n const currentIndex = [...items].indexOf(value as string);\n const index = currentIndex > -1 ? currentIndex : 0;\n\n this.setState({ focusedIndex: index });\n };\n\n private _handleBlur = () => {\n this.setState({ focusedIndex: null });\n };\n\n private _renderItems = () => {\n const { items, value, size, disabled, renderItem } = this.props;\n return items.map((item, i) => {\n const { label, value: itemValue, buttonProps: customButtonProps } = this._extractPropsFromItem(item);\n const commonButtonProps = {\n checked: value === itemValue,\n visuallyFocused: this.state.focusedIndex === i,\n onClick: () => {\n this.selectItem(itemValue);\n },\n disableFocus: true,\n size,\n disabled,\n corners: getButtonCorners(i === 0, i === items.length - 1),\n };\n\n const buttonProps = {\n ...commonButtonProps,\n ...customButtonProps,\n };\n\n const renderDefault = () => this.renderDefaultItem(label, itemValue, buttonProps);\n\n return renderItem ? renderItem(label, itemValue, buttonProps, renderDefault) : renderDefault();\n });\n };\n\n private renderDefaultItem = (label: string, value: string, buttonProps: ButtonProps) => (\n <Button key={value} {...buttonProps}>\n {label}\n </Button>\n );\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return styles.captionLarge(this.theme);\n case 'medium':\n return styles.captionMedium(this.theme);\n case 'small':\n default:\n return styles.captionSmall(this.theme);\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["Switcher.tsx"],"names":["React","PropTypes","isKeyArrowHorizontal","isKeyArrowLeft","isKeyEnter","getButtonCorners","Group","Button","ThemeContext","CommonWrapper","cx","rootNode","styles","getSwitcherTheme","mod","SwitcherDataTids","root","Switcher","state","focusedIndex","selectItem","value","props","onValueChange","_extractPropsFromItem","item","label","_extractValuesFromItems","items","map","_focus","index","setState","handleKey","e","buttonProps","disabled","preventDefault","move","left","selectedIndex","newFocusedIndex","_getNextFocusedIndex","i","length","_handleFocus","currentIndex","indexOf","_handleBlur","_renderItems","size","renderItem","itemValue","customButtonProps","commonButtonProps","checked","visuallyFocused","onClick","disableFocus","corners","renderDefault","renderDefaultItem","getLabelSizeClassName","captionLarge","theme","captionMedium","captionSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","captionClassName","caption","setRootNode","wrap","Component","__KONTUR_REACT_UI__","propTypes","bool","oneOfType","arrayOf","string","shape","isRequired","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { getButtonCorners, Group } from '../Group';\nimport { Button, ButtonProps, ButtonSize } from '../Button';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Switcher.styles';\nimport { getSwitcherTheme } from './switcherTheme';\nimport { mod } from './helpers';\n\nexport type SwitcherSize = ButtonSize;\ntype SwitcherItems = string | SwitcherItem;\n\nexport const SwitcherDataTids = {\n root: 'Switcher__root',\n} as const;\n\nexport interface SwitcherProps extends CommonProps {\n /**\n * Список строк или список элементов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }`\n */\n items: SwitcherItems[];\n\n value?: string;\n\n onValueChange?: (value: string) => void;\n\n caption?: string;\n\n error?: boolean;\n\n /** Размер */\n size?: SwitcherSize;\n\n disabled?: boolean;\n\n /**\n * Функция для отрисовки элемента. Аргументы — `label`,\n * `value`, `buttonProps`, `renderDefault`\n */\n renderItem?: (\n label: string,\n value: string,\n buttonProps: ButtonProps,\n renderDefault: () => React.ReactNode,\n ) => React.ReactNode;\n}\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n label: string;\n value: string;\n buttonProps?: Partial<ButtonProps>;\n}\n\n@rootNode\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n\n public static propTypes = {\n error: PropTypes.bool,\n disabled: PropTypes.bool,\n items: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n ]).isRequired,\n caption: PropTypes.string,\n value: PropTypes.string,\n onValueChange: PropTypes.func,\n renderItem: PropTypes.func,\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getSwitcherTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const listClassName = cx({\n [styles.error(this.theme)]: !!this.props.error,\n });\n\n const inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: styles.input(),\n };\n\n const captionClassName = cx(styles.caption(this.theme), this.getLabelSizeClassName());\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SwitcherDataTids.root} className={styles.root()}>\n {this.props.caption ? <div className={captionClassName}>{this.props.caption}</div> : null}\n <div className={styles.wrap()}>\n <input {...inputProps} />\n <div className={listClassName}>\n <Group>{this._renderItems()}</Group>\n </div>\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n private selectItem = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private _extractPropsFromItem = (item: string | SwitcherItem): SwitcherItem => {\n return typeof item === 'object' ? item : { label: item, value: item };\n };\n\n private _extractValuesFromItems = (): string[] => {\n return this.props.items.map((item) => {\n const { value } = this._extractPropsFromItem(item);\n return value;\n });\n };\n\n private _focus = (index: number) => {\n this.setState({ focusedIndex: index });\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const focusedIndex = this.state.focusedIndex;\n if (typeof focusedIndex !== 'number') {\n return;\n }\n\n if (isKeyEnter(e)) {\n if (this.props.onValueChange) {\n const { value, buttonProps } = this._extractPropsFromItem(this.props.items[focusedIndex]);\n if (!buttonProps?.disabled) {\n this.selectItem(value);\n }\n }\n return;\n }\n\n if (isKeyArrowHorizontal(e)) {\n e.preventDefault();\n this.move(isKeyArrowLeft(e));\n }\n };\n\n private move = (left: boolean) => {\n const selectedIndex = this.state.focusedIndex;\n\n if (typeof selectedIndex !== 'number') {\n return;\n }\n const newFocusedIndex = this._getNextFocusedIndex(left, selectedIndex);\n this._focus(newFocusedIndex);\n };\n\n private _getNextFocusedIndex = (left: boolean, focusedIndex: number): number => {\n const { items, disabled } = this.props;\n if (disabled) {\n return focusedIndex;\n }\n\n for (let i = 1; i < items.length; i++) {\n const index = mod(focusedIndex + (left ? -i : i), items.length);\n const { buttonProps } = this._extractPropsFromItem(items[index]);\n if (!buttonProps?.disabled) {\n return index;\n }\n }\n return focusedIndex;\n };\n\n private _handleFocus = () => {\n const { value } = this.props;\n\n const items = this._extractValuesFromItems();\n const currentIndex = [...items].indexOf(value as string);\n const index = currentIndex > -1 ? currentIndex : 0;\n\n this.setState({ focusedIndex: index });\n };\n\n private _handleBlur = () => {\n this.setState({ focusedIndex: null });\n };\n\n private _renderItems = () => {\n const { items, value, size, disabled, renderItem } = this.props;\n return items.map((item, i) => {\n const { label, value: itemValue, buttonProps: customButtonProps } = this._extractPropsFromItem(item);\n const commonButtonProps = {\n checked: value === itemValue,\n visuallyFocused: this.state.focusedIndex === i,\n onClick: () => {\n this.selectItem(itemValue);\n },\n disableFocus: true,\n size,\n disabled,\n corners: getButtonCorners(i === 0, i === items.length - 1),\n };\n\n const buttonProps = {\n ...commonButtonProps,\n ...customButtonProps,\n };\n\n const renderDefault = () => this.renderDefaultItem(label, itemValue, buttonProps);\n\n return renderItem ? renderItem(label, itemValue, buttonProps, renderDefault) : renderDefault();\n });\n };\n\n private renderDefaultItem = (label: string, value: string, buttonProps: ButtonProps) => (\n <Button key={value} {...buttonProps}>\n {label}\n </Button>\n );\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return styles.captionLarge(this.theme);\n case 'medium':\n return styles.captionMedium(this.theme);\n case 'small':\n default:\n return styles.captionSmall(this.theme);\n }\n };\n}\n"]}
@@ -56,9 +56,10 @@ export declare class Switcher extends React.Component<SwitcherProps, SwitcherSta
56
56
  private selectItem;
57
57
  private _extractPropsFromItem;
58
58
  private _extractValuesFromItems;
59
- private move;
60
59
  private _focus;
61
60
  private handleKey;
61
+ private move;
62
+ private _getNextFocusedIndex;
62
63
  private _handleFocus;
63
64
  private _handleBlur;
64
65
  private _renderItems;
@@ -0,0 +1,3 @@
1
+ export var mod = function mod(n, _mod) {
2
+ return (n % _mod + _mod) % _mod;
3
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["helpers.ts"],"names":["mod","n"],"mappings":"AAAA,OAAO,IAAMA,GAAG,GAAG,aAACC,CAAD,EAAYD,IAAZ,UAA4B,CAAEC,CAAC,GAAGD,IAAL,GAAYA,IAAb,IAAoBA,IAAhD,EAAZ","sourcesContent":["export const mod = (n: number, mod: number) => ((n % mod) + mod) % mod;\n"]}
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../cjs/components/Switcher/helpers.js",
3
+ "module": "helpers",
4
+ "types": "../helpers.d.ts",
5
+ "sideEffects": false
6
+ }
@@ -0,0 +1 @@
1
+ export declare const mod: (n: number, mod: number) => number;
@@ -86,10 +86,12 @@ export var FileUploaderFile = function FileUploaderFile(props) {
86
86
  return formatBytes(fileSize, 1);
87
87
  }, [fileSize]);
88
88
  useEffect(function () {
89
- var _truncatedName$length;
89
+ if (setIsMinLengthReached) {
90
+ var _truncatedName$length;
90
91
 
91
- var truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);
92
- setIsMinLengthReached(((_truncatedName$length = truncatedName == null ? void 0 : truncatedName.length) != null ? _truncatedName$length : 0) <= MIN_CHARS_LENGTH);
92
+ var truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);
93
+ setIsMinLengthReached(((_truncatedName$length = truncatedName == null ? void 0 : truncatedName.length) != null ? _truncatedName$length : 0) <= MIN_CHARS_LENGTH);
94
+ }
93
95
  }, [name, isMinLengthReached]);
94
96
  useEffect(function () {
95
97
  var truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);
@@ -137,9 +139,9 @@ export var FileUploaderFile = function FileUploaderFile(props) {
137
139
  }
138
140
  }, [hovered, status, isInvalid, theme, focusedByTab]);
139
141
  var sizeIconClass = useFileUploaderSize(size, {
140
- small: jsStyles.iconSmall(theme),
141
- medium: jsStyles.iconMedium(theme),
142
- large: jsStyles.iconLarge(theme)
142
+ small: jsStyles.iconSmall(),
143
+ medium: jsStyles.iconMedium(),
144
+ large: jsStyles.iconLarge()
143
145
  });
144
146
  var renderTooltipContent = useCallback(function () {
145
147
  return !isValid && !error && message ? message : null;
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFile.tsx"],"names":["React","useCallback","useContext","useEffect","useMemo","useRef","useState","FileUploaderFileStatus","formatBytes","TextWidthHelper","truncate","Spinner","FileUploaderControlContext","cx","ThemeContext","DeleteIcon","ErrorIcon","OkIcon","keyListener","isKeyEnter","Hint","Tooltip","getDOMRect","useFileUploaderSize","jsStyles","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","showSize","error","multiple","size","id","originalFile","status","validationResult","hovered","setHovered","focusedByTab","setFocusedByTab","truncatedFileName","setTruncatedFileName","removeFile","setIsMinLengthReached","isMinLengthReached","theme","formattedSize","truncatedName","removeUploadFile","handleRemove","event","preventDefault","stopPropagation","isValid","message","isInvalid","icon","deleteIcon","Loading","Uploaded","fileUploaderIconColor","sizeIconClass","small","iconSmall","medium","iconMedium","large","iconLarge","renderTooltipContent","sizeContentClass","contentSmall","contentMedium","contentLarge","contentClassNames","content","handleMouseEnter","handleMouseLeave","handleFocus","requestAnimationFrame","isTabPressed","handleBlur","handleIconKeyDown","e","iconClassNames","focusedIcon","iconMultiple","isTruncated","root","displayName"],"mappings":"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","sourcesContent":["import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus } from '../fileUtils';\nimport { formatBytes } from '../../../lib/utils';\nimport { TextWidthHelper } from '../../../internal/TextWidthHelper/TextWidthHelper';\nimport { truncate } from '../../../lib/stringUtils';\nimport { Spinner } from '../../../components/Spinner';\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { DeleteIcon, ErrorIcon, OkIcon } from '../../icons/16px';\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 { FileUploaderSize } from '../../../components/FileUploader';\nimport { useFileUploaderSize } from '../hooks/useFileUploaderSize';\n\nimport { jsStyles } from './FileUploaderFile.styles';\n\ninterface FileUploaderFileProps {\n file: FileUploaderAttachedFile;\n showSize?: boolean;\n multiple?: boolean;\n size: FileUploaderSize;\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 = (props: FileUploaderFileProps) => {\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 const truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);\n\n setIsMinLengthReached((truncatedName?.length ?? 0) <= MIN_CHARS_LENGTH);\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 icon: ReactNode = useMemo(() => {\n const deleteIcon = <DeleteIcon className={jsStyles.deleteIcon(theme)} />;\n\n if (hovered || focusedByTab) {\n return deleteIcon;\n }\n\n if (isInvalid) {\n return <ErrorIcon />;\n }\n\n switch (status) {\n case FileUploaderFileStatus.Loading:\n return <Spinner type=\"mini\" dimmed caption=\"\" />;\n case FileUploaderFileStatus.Uploaded:\n return <OkIcon color={theme.fileUploaderIconColor} />;\n default:\n return deleteIcon;\n }\n }, [hovered, status, isInvalid, theme, focusedByTab]);\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 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 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 >\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 {icon}\n </div>\n </div>\n </Tooltip>\n </div>\n );\n};\n\nFileUploaderFile.displayName = 'FileUploaderFile';\n"]}
1
+ {"version":3,"sources":["FileUploaderFile.tsx"],"names":["React","useCallback","useContext","useEffect","useMemo","useRef","useState","FileUploaderFileStatus","formatBytes","TextWidthHelper","truncate","Spinner","FileUploaderControlContext","cx","ThemeContext","DeleteIcon","ErrorIcon","OkIcon","keyListener","isKeyEnter","Hint","Tooltip","getDOMRect","useFileUploaderSize","jsStyles","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","showSize","error","multiple","size","id","originalFile","status","validationResult","hovered","setHovered","focusedByTab","setFocusedByTab","truncatedFileName","setTruncatedFileName","removeFile","setIsMinLengthReached","isMinLengthReached","theme","formattedSize","truncatedName","removeUploadFile","handleRemove","event","preventDefault","stopPropagation","isValid","message","isInvalid","icon","deleteIcon","Loading","Uploaded","fileUploaderIconColor","sizeIconClass","small","iconSmall","medium","iconMedium","large","iconLarge","renderTooltipContent","sizeContentClass","contentSmall","contentMedium","contentLarge","contentClassNames","content","handleMouseEnter","handleMouseLeave","handleFocus","requestAnimationFrame","isTabPressed","handleBlur","handleIconKeyDown","e","iconClassNames","focusedIcon","iconMultiple","isTruncated","root","displayName"],"mappings":"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","sourcesContent":["import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus } from '../fileUtils';\nimport { formatBytes } from '../../../lib/utils';\nimport { TextWidthHelper } from '../../../internal/TextWidthHelper/TextWidthHelper';\nimport { truncate } from '../../../lib/stringUtils';\nimport { Spinner } from '../../../components/Spinner';\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { DeleteIcon, ErrorIcon, OkIcon } from '../../icons/16px';\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 { FileUploaderSize } from '../../../components/FileUploader';\nimport { useFileUploaderSize } from '../hooks/useFileUploaderSize';\n\nimport { jsStyles } from './FileUploaderFile.styles';\n\ninterface FileUploaderFileProps {\n file: FileUploaderAttachedFile;\n showSize?: boolean;\n multiple?: boolean;\n size: FileUploaderSize;\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 = (props: FileUploaderFileProps) => {\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 icon: ReactNode = useMemo(() => {\n const deleteIcon = <DeleteIcon className={jsStyles.deleteIcon(theme)} />;\n\n if (hovered || focusedByTab) {\n return deleteIcon;\n }\n\n if (isInvalid) {\n return <ErrorIcon />;\n }\n\n switch (status) {\n case FileUploaderFileStatus.Loading:\n return <Spinner type=\"mini\" dimmed caption=\"\" />;\n case FileUploaderFileStatus.Uploaded:\n return <OkIcon color={theme.fileUploaderIconColor} />;\n default:\n return deleteIcon;\n }\n }, [hovered, status, isInvalid, theme, focusedByTab]);\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 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 >\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 {icon}\n </div>\n </div>\n </Tooltip>\n </div>\n );\n};\n\nFileUploaderFile.displayName = 'FileUploaderFile';\n"]}
@@ -20,16 +20,16 @@ var styles = {
20
20
  return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n margin-left: 28px;\n flex: 1 0 auto;\n "])));
21
21
  },
22
22
  icon: function icon(t) {
23
- return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n width: 16px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ", ";\n text-align: right;\n outline: none;\n\n position: absolute;\n "])), t.fileUploaderIconSize);
23
+ return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n width: 16px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ", ";\n text-align: right;\n outline: none;\n "])), t.fileUploaderIconSize);
24
24
  },
25
- iconSmall: function iconSmall(t) {
26
- return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n margin-left: 4px;\n right: ", ";\n "])), t.fileUploaderPaddingXSmall);
25
+ iconSmall: function iconSmall() {
26
+ return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n margin-left: 4px;\n "])));
27
27
  },
28
- iconMedium: function iconMedium(t) {
29
- return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n margin-left: 6px;\n right: ", ";\n width: 18px;\n "])), t.fileUploaderPaddingXMedium);
28
+ iconMedium: function iconMedium() {
29
+ return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n margin-left: 6px;\n width: 18px;\n "])));
30
30
  },
31
- iconLarge: function iconLarge(t) {
32
- return css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n margin-left: 6px;\n right: ", ";\n width: 20px;\n "])), t.fileUploaderPaddingXLarge);
31
+ iconLarge: function iconLarge() {
32
+ return css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n margin-left: 6px;\n width: 20px;\n "])));
33
33
  },
34
34
  iconMultiple: function iconMultiple() {
35
35
  return css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteralLoose(["\n position: static;\n "])));
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFile.styles.ts"],"names":["css","memoizeStyle","styles","root","content","error","t","fileUploaderBorderColorError","name","size","icon","fileUploaderIconSize","iconSmall","fileUploaderPaddingXSmall","iconMedium","fileUploaderPaddingXMedium","iconLarge","fileUploaderPaddingXLarge","iconMultiple","contentSmall","fileUploaderFontSizeSmall","contentMedium","fileUploaderFontSizeMedium","contentLarge","fileUploaderFontSizeLarge","deleteIcon","fileUploaderIconColor","fileUploaderIconHoverColor","focusedIcon","borderColorFocus","jsStyles"],"mappings":"sXAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;;AAObI,EAAAA,OAPa,qBAOH;AACR,WAAOJ,GAAP;;;;;AAKD,GAbY;;AAebK,EAAAA,KAfa,iBAePC,CAfO,EAeG;AACd,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACC,4BADb;;AAGD,GAnBY;;AAqBbC,EAAAA,IArBa,kBAqBN;AACL,WAAOR,GAAP;;;;AAID,GA1BY;;AA4BbS,EAAAA,IA5Ba,kBA4BN;AACL,WAAOT,GAAP;;;;AAID,GAjCY;;AAmCbU,EAAAA,IAnCa,gBAmCRJ,CAnCQ,EAmCE;AACb,WAAON,GAAP;;;;AAIeM,IAAAA,CAAC,CAACK,oBAJjB;;;;;;AAUD,GA9CY;;AAgDbC,EAAAA,SAhDa,qBAgDHN,CAhDG,EAgDO;AAClB,WAAON,GAAP;;AAEWM,IAAAA,CAAC,CAACO,yBAFb;;AAID,GArDY;;AAuDbC,EAAAA,UAvDa,sBAuDFR,CAvDE,EAuDQ;AACnB,WAAON,GAAP;;AAEWM,IAAAA,CAAC,CAACS,0BAFb;;;AAKD,GA7DY;;AA+DbC,EAAAA,SA/Da,qBA+DHV,CA/DG,EA+DO;AAClB,WAAON,GAAP;;AAEWM,IAAAA,CAAC,CAACW,yBAFb;;;AAKD,GArEY;;AAuEbC,EAAAA,YAvEa,0BAuEE;AACb,WAAOlB,GAAP;;;AAGD,GA3EY;;AA6EbmB,EAAAA,YA7Ea,wBA6EAb,CA7EA,EA6EU;AACrB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACc,yBADjB;;AAGD,GAjFY;;AAmFbC,EAAAA,aAnFa,yBAmFCf,CAnFD,EAmFW;AACtB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACgB,0BADjB;;AAGD,GAvFY;;AAyFbC,EAAAA,YAzFa,wBAyFAjB,CAzFA,EAyFU;AACrB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACkB,yBADjB;;AAGD,GA7FY;;AA+FbC,EAAAA,UA/Fa,sBA+FFnB,CA/FE,EA+FQ;AACnB,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACoB,qBADb;;AAGapB,IAAAA,CAAC,CAACqB,0BAHf;;;AAMD,GAtGY;;AAwGbC,EAAAA,WAxGa,uBAwGDtB,CAxGC,EAwGS;AACpB,WAAON,GAAP;AACuBM,IAAAA,CAAC,CAACuB,gBADzB;;AAGD,GA5GY,EAAf;;;AA+GA,OAAO,IAAMC,QAAQ,GAAG7B,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n root() {\n return css`\n width: 100%;\n `;\n },\n\n content() {\n return css`\n display: flex;\n width: 100%;\n align-items: center;\n `;\n },\n\n error(t: Theme) {\n return css`\n color: ${t.fileUploaderBorderColorError};\n `;\n },\n\n name() {\n return css`\n flex: 1 1 100%;\n overflow: hidden;\n `;\n },\n\n size() {\n return css`\n margin-left: 28px;\n flex: 1 0 auto;\n `;\n },\n\n icon(t: Theme) {\n return css`\n width: 16px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ${t.fileUploaderIconSize};\n text-align: right;\n outline: none;\n\n position: absolute;\n `;\n },\n\n iconSmall(t: Theme) {\n return css`\n margin-left: 4px;\n right: ${t.fileUploaderPaddingXSmall};\n `;\n },\n\n iconMedium(t: Theme) {\n return css`\n margin-left: 6px;\n right: ${t.fileUploaderPaddingXMedium};\n width: 18px;\n `;\n },\n\n iconLarge(t: Theme) {\n return css`\n margin-left: 6px;\n right: ${t.fileUploaderPaddingXLarge};\n width: 20px;\n `;\n },\n\n iconMultiple() {\n return css`\n position: static;\n `;\n },\n\n contentSmall(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeSmall};\n `;\n },\n\n contentMedium(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeMedium};\n `;\n },\n\n contentLarge(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeLarge};\n `;\n },\n\n deleteIcon(t: Theme) {\n return css`\n color: ${t.fileUploaderIconColor};\n &:hover {\n color: ${t.fileUploaderIconHoverColor};\n }\n `;\n },\n\n focusedIcon(t: Theme) {\n return css`\n outline: 1px solid ${t.borderColorFocus};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
1
+ {"version":3,"sources":["FileUploaderFile.styles.ts"],"names":["css","memoizeStyle","styles","root","content","error","t","fileUploaderBorderColorError","name","size","icon","fileUploaderIconSize","iconSmall","iconMedium","iconLarge","iconMultiple","contentSmall","fileUploaderFontSizeSmall","contentMedium","fileUploaderFontSizeMedium","contentLarge","fileUploaderFontSizeLarge","deleteIcon","fileUploaderIconColor","fileUploaderIconHoverColor","focusedIcon","borderColorFocus","jsStyles"],"mappings":"sXAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;;AAObI,EAAAA,OAPa,qBAOH;AACR,WAAOJ,GAAP;;;;;AAKD,GAbY;;AAebK,EAAAA,KAfa,iBAePC,CAfO,EAeG;AACd,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACC,4BADb;;AAGD,GAnBY;;AAqBbC,EAAAA,IArBa,kBAqBN;AACL,WAAOR,GAAP;;;;AAID,GA1BY;;AA4BbS,EAAAA,IA5Ba,kBA4BN;AACL,WAAOT,GAAP;;;;AAID,GAjCY;;AAmCbU,EAAAA,IAnCa,gBAmCRJ,CAnCQ,EAmCE;AACb,WAAON,GAAP;;;;AAIeM,IAAAA,CAAC,CAACK,oBAJjB;;;;AAQD,GA5CY;;AA8CbC,EAAAA,SA9Ca,uBA8CD;AACV,WAAOZ,GAAP;;;AAGD,GAlDY;;AAoDba,EAAAA,UApDa,wBAoDA;AACX,WAAOb,GAAP;;;;AAID,GAzDY;;AA2Dbc,EAAAA,SA3Da,uBA2DD;AACV,WAAOd,GAAP;;;;AAID,GAhEY;;AAkEbe,EAAAA,YAlEa,0BAkEE;AACb,WAAOf,GAAP;;;AAGD,GAtEY;;AAwEbgB,EAAAA,YAxEa,wBAwEAV,CAxEA,EAwEU;AACrB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACW,yBADjB;;AAGD,GA5EY;;AA8EbC,EAAAA,aA9Ea,yBA8ECZ,CA9ED,EA8EW;AACtB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACa,0BADjB;;AAGD,GAlFY;;AAoFbC,EAAAA,YApFa,wBAoFAd,CApFA,EAoFU;AACrB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACe,yBADjB;;AAGD,GAxFY;;AA0FbC,EAAAA,UA1Fa,sBA0FFhB,CA1FE,EA0FQ;AACnB,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACiB,qBADb;;AAGajB,IAAAA,CAAC,CAACkB,0BAHf;;;AAMD,GAjGY;;AAmGbC,EAAAA,WAnGa,uBAmGDnB,CAnGC,EAmGS;AACpB,WAAON,GAAP;AACuBM,IAAAA,CAAC,CAACoB,gBADzB;;AAGD,GAvGY,EAAf;;;AA0GA,OAAO,IAAMC,QAAQ,GAAG1B,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n root() {\n return css`\n width: 100%;\n `;\n },\n\n content() {\n return css`\n display: flex;\n width: 100%;\n align-items: center;\n `;\n },\n\n error(t: Theme) {\n return css`\n color: ${t.fileUploaderBorderColorError};\n `;\n },\n\n name() {\n return css`\n flex: 1 1 100%;\n overflow: hidden;\n `;\n },\n\n size() {\n return css`\n margin-left: 28px;\n flex: 1 0 auto;\n `;\n },\n\n icon(t: Theme) {\n return css`\n width: 16px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ${t.fileUploaderIconSize};\n text-align: right;\n outline: none;\n `;\n },\n\n iconSmall() {\n return css`\n margin-left: 4px;\n `;\n },\n\n iconMedium() {\n return css`\n margin-left: 6px;\n width: 18px;\n `;\n },\n\n iconLarge() {\n return css`\n margin-left: 6px;\n width: 20px;\n `;\n },\n\n iconMultiple() {\n return css`\n position: static;\n `;\n },\n\n contentSmall(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeSmall};\n `;\n },\n\n contentMedium(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeMedium};\n `;\n },\n\n contentLarge(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeLarge};\n `;\n },\n\n deleteIcon(t: Theme) {\n return css`\n color: ${t.fileUploaderIconColor};\n &:hover {\n color: ${t.fileUploaderIconHoverColor};\n }\n `;\n },\n\n focusedIcon(t: Theme) {\n return css`\n outline: 1px solid ${t.borderColorFocus};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
@@ -6,9 +6,9 @@ export declare const jsStyles: {
6
6
  name(): string;
7
7
  size(): string;
8
8
  icon(t: Theme): string;
9
- iconSmall(t: Theme): string;
10
- iconMedium(t: Theme): string;
11
- iconLarge(t: Theme): string;
9
+ iconSmall(): string;
10
+ iconMedium(): string;
11
+ iconLarge(): string;
12
12
  iconMultiple(): string;
13
13
  contentSmall(t: Theme): string;
14
14
  contentMedium(t: Theme): string;
@@ -23,7 +23,8 @@ var SvgIcon = forwardRefAndName('SvgIcon', function (_ref, ref) {
23
23
  }, rest), /*#__PURE__*/React.cloneElement(children, {
24
24
  className: styles.icon(),
25
25
  fill: 'currentColor',
26
- focusable: 'false'
26
+ focusable: 'false',
27
+ 'aria-hidden': 'true'
27
28
  }));
28
29
  });
29
30
  SvgIcon.propTypes = {