@skbkontur/react-ui 3.10.0 → 3.11.0-csi.1

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 (202) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -21
  3. package/cjs/components/Button/Button.d.ts +1 -1
  4. package/cjs/components/Button/Button.js +4 -3
  5. package/cjs/components/Button/Button.js.map +1 -1
  6. package/cjs/components/Button/Button.styles.d.ts +1 -0
  7. package/cjs/components/Button/Button.styles.js +38 -28
  8. package/cjs/components/Button/Button.styles.js.map +1 -1
  9. package/cjs/components/CurrencyLabel/CurrencyLabel.md +23 -23
  10. package/cjs/components/DropdownMenu/DropdownMenu.d.ts +2 -2
  11. package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
  12. package/cjs/components/Gapped/Gapped.md +43 -43
  13. package/cjs/components/Hint/Hint.d.ts +2 -1
  14. package/cjs/components/Hint/Hint.js +0 -16
  15. package/cjs/components/Hint/Hint.js.map +1 -1
  16. package/cjs/components/Input/Input.md +13 -13
  17. package/cjs/components/Kebab/Kebab.d.ts +2 -2
  18. package/cjs/components/Kebab/Kebab.js.map +1 -1
  19. package/cjs/components/MenuItem/MenuItem.d.ts +1 -1
  20. package/cjs/components/MenuItem/MenuItem.js +1 -4
  21. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  22. package/cjs/components/Modal/Modal.d.ts +8 -0
  23. package/cjs/components/Modal/Modal.js +19 -2
  24. package/cjs/components/Modal/Modal.js.map +1 -1
  25. package/cjs/components/PasswordInput/PasswordInput.md +9 -9
  26. package/cjs/components/RadioGroup/RadioGroup.md +43 -43
  27. package/cjs/components/ScrollContainer/ScrollBar.js +4 -2
  28. package/cjs/components/ScrollContainer/ScrollBar.js.map +1 -1
  29. package/cjs/components/ScrollContainer/ScrollContainer.js +2 -1
  30. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  31. package/cjs/components/ScrollContainer/ScrollContainer.styles.d.ts +1 -0
  32. package/cjs/components/ScrollContainer/ScrollContainer.styles.js +12 -8
  33. package/cjs/components/ScrollContainer/ScrollContainer.styles.js.map +1 -1
  34. package/cjs/components/Select/Select.js +4 -1
  35. package/cjs/components/Select/Select.js.map +1 -1
  36. package/cjs/components/SidePage/SidePage.d.ts +9 -0
  37. package/cjs/components/SidePage/SidePage.js +33 -3
  38. package/cjs/components/SidePage/SidePage.js.map +1 -1
  39. package/cjs/components/Spinner/Spinner.d.ts +8 -0
  40. package/cjs/components/Spinner/Spinner.js +21 -3
  41. package/cjs/components/Spinner/Spinner.js.map +1 -1
  42. package/cjs/components/Spinner/Spinner.md +1 -0
  43. package/cjs/components/Spinner/Spinner.styles.d.ts +2 -1
  44. package/cjs/components/Spinner/Spinner.styles.js +13 -10
  45. package/cjs/components/Spinner/Spinner.styles.js.map +1 -1
  46. package/cjs/components/Switcher/Switcher.styles.js +4 -2
  47. package/cjs/components/Switcher/Switcher.styles.js.map +1 -1
  48. package/cjs/components/Token/Token.md +112 -112
  49. package/cjs/components/Tooltip/Tooltip.d.ts +8 -21
  50. package/cjs/components/Tooltip/Tooltip.js +14 -27
  51. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  52. package/cjs/components/TooltipMenu/TooltipMenu.d.ts +2 -2
  53. package/cjs/components/TooltipMenu/TooltipMenu.js.map +1 -1
  54. package/cjs/index.d.ts +1 -0
  55. package/cjs/index.js +2 -1
  56. package/cjs/index.js.map +1 -1
  57. package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -0
  58. package/cjs/internal/DropdownContainer/DropdownContainer.js +15 -2
  59. package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
  60. package/cjs/internal/DropdownContainer/DropdownContainer.styles.d.ts +3 -0
  61. package/cjs/internal/DropdownContainer/DropdownContainer.styles.js +9 -0
  62. package/cjs/internal/DropdownContainer/DropdownContainer.styles.js.map +1 -0
  63. package/cjs/internal/Menu/Menu.d.ts +2 -0
  64. package/cjs/internal/Menu/Menu.js +33 -3
  65. package/cjs/internal/Menu/Menu.js.map +1 -1
  66. package/cjs/internal/Menu/Menu.styles.d.ts +3 -0
  67. package/cjs/internal/Menu/Menu.styles.js +23 -3
  68. package/cjs/internal/Menu/Menu.styles.js.map +1 -1
  69. package/cjs/internal/Popup/Popup.d.ts +5 -4
  70. package/cjs/internal/Popup/Popup.js +13 -24
  71. package/cjs/internal/Popup/Popup.js.map +1 -1
  72. package/cjs/internal/Popup/PopupHelper.d.ts +2 -2
  73. package/cjs/internal/Popup/PopupHelper.js.map +1 -1
  74. package/cjs/internal/Popup/types.d.ts +1 -0
  75. package/cjs/internal/Popup/types.js +1 -0
  76. package/cjs/internal/Popup/types.js.map +1 -0
  77. package/cjs/internal/PopupMenu/PopupMenu.d.ts +3 -3
  78. package/cjs/internal/PopupMenu/PopupMenu.js +17 -3
  79. package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
  80. package/cjs/internal/PopupMenu/validatePositions.d.ts +2 -2
  81. package/cjs/internal/PopupMenu/validatePositions.js +2 -4
  82. package/cjs/internal/PopupMenu/validatePositions.js.map +1 -1
  83. package/cjs/internal/ThemeShowcase/ThemeShowcase.md +13 -13
  84. package/cjs/internal/icons/SpinnerIcon.d.ts +4 -1
  85. package/cjs/internal/icons/SpinnerIcon.js +5 -2
  86. package/cjs/internal/icons/SpinnerIcon.js.map +1 -1
  87. package/cjs/lib/ModalStack.js +16 -17
  88. package/cjs/lib/ModalStack.js.map +1 -1
  89. package/cjs/lib/theming/AnimationKeyframes.js +1 -1
  90. package/cjs/lib/theming/AnimationKeyframes.js.map +1 -1
  91. package/cjs/lib/theming/useTheme.d.ts +1 -0
  92. package/cjs/lib/theming/useTheme.js +7 -0
  93. package/cjs/lib/theming/useTheme.js.map +1 -0
  94. package/cjs/lib/utils.d.ts +32 -0
  95. package/cjs/lib/utils.js +62 -2
  96. package/cjs/lib/utils.js.map +1 -1
  97. package/cjs/typings/html-props.d.ts +123 -0
  98. package/components/Button/Button/Button.js +3 -7
  99. package/components/Button/Button/Button.js.map +1 -1
  100. package/components/Button/Button.d.ts +1 -1
  101. package/components/Button/Button.styles/Button.styles.js +31 -28
  102. package/components/Button/Button.styles/Button.styles.js.map +1 -1
  103. package/components/Button/Button.styles.d.ts +1 -0
  104. package/components/CurrencyLabel/CurrencyLabel.md +23 -23
  105. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
  106. package/components/DropdownMenu/DropdownMenu.d.ts +2 -2
  107. package/components/Gapped/Gapped.md +43 -43
  108. package/components/Hint/Hint/Hint.js.map +1 -1
  109. package/components/Hint/Hint.d.ts +2 -1
  110. package/components/Input/Input.md +13 -13
  111. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  112. package/components/Kebab/Kebab.d.ts +2 -2
  113. package/components/MenuItem/MenuItem/MenuItem.js +2 -7
  114. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  115. package/components/MenuItem/MenuItem.d.ts +1 -1
  116. package/components/Modal/Modal/Modal.js +19 -2
  117. package/components/Modal/Modal/Modal.js.map +1 -1
  118. package/components/Modal/Modal.d.ts +8 -0
  119. package/components/PasswordInput/PasswordInput.md +9 -9
  120. package/components/RadioGroup/RadioGroup.md +43 -43
  121. package/components/ScrollContainer/ScrollBar/ScrollBar.js +6 -2
  122. package/components/ScrollContainer/ScrollBar/ScrollBar.js.map +1 -1
  123. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +2 -1
  124. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  125. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js +11 -8
  126. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js.map +1 -1
  127. package/components/ScrollContainer/ScrollContainer.styles.d.ts +1 -0
  128. package/components/Select/Select/Select.js +5 -2
  129. package/components/Select/Select/Select.js.map +1 -1
  130. package/components/SidePage/SidePage/SidePage.js +37 -2
  131. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  132. package/components/SidePage/SidePage.d.ts +9 -0
  133. package/components/Spinner/Spinner/Spinner.js +6 -3
  134. package/components/Spinner/Spinner/Spinner.js.map +1 -1
  135. package/components/Spinner/Spinner.d.ts +8 -0
  136. package/components/Spinner/Spinner.md +1 -0
  137. package/components/Spinner/Spinner.styles/Spinner.styles.js +12 -9
  138. package/components/Spinner/Spinner.styles/Spinner.styles.js.map +1 -1
  139. package/components/Spinner/Spinner.styles.d.ts +2 -1
  140. package/components/Switcher/Switcher.styles/Switcher.styles.js +3 -1
  141. package/components/Switcher/Switcher.styles/Switcher.styles.js.map +1 -1
  142. package/components/Token/Token.md +112 -112
  143. package/components/Tooltip/Tooltip/Tooltip.js +2 -2
  144. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  145. package/components/Tooltip/Tooltip.d.ts +8 -21
  146. package/components/TooltipMenu/TooltipMenu/TooltipMenu.js.map +1 -1
  147. package/components/TooltipMenu/TooltipMenu.d.ts +2 -2
  148. package/index.d.ts +1 -0
  149. package/index.js +2 -1
  150. package/index.js.map +1 -1
  151. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +9 -2
  152. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
  153. package/internal/DropdownContainer/DropdownContainer.d.ts +1 -0
  154. package/internal/DropdownContainer/DropdownContainer.styles/DropdownContainer.styles.js +10 -0
  155. package/internal/DropdownContainer/DropdownContainer.styles/DropdownContainer.styles.js.map +1 -0
  156. package/internal/DropdownContainer/DropdownContainer.styles/package.json +6 -0
  157. package/internal/DropdownContainer/DropdownContainer.styles.d.ts +3 -0
  158. package/internal/Menu/Menu/Menu.js +30 -6
  159. package/internal/Menu/Menu/Menu.js.map +1 -1
  160. package/internal/Menu/Menu.d.ts +2 -0
  161. package/internal/Menu/Menu.styles/Menu.styles.js +12 -3
  162. package/internal/Menu/Menu.styles/Menu.styles.js.map +1 -1
  163. package/internal/Menu/Menu.styles.d.ts +3 -0
  164. package/internal/Popup/Popup/Popup.js +3 -2
  165. package/internal/Popup/Popup/Popup.js.map +1 -1
  166. package/internal/Popup/Popup.d.ts +5 -4
  167. package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
  168. package/internal/Popup/PopupHelper.d.ts +2 -2
  169. package/internal/Popup/types/package.json +6 -0
  170. package/internal/Popup/types/types.js +0 -0
  171. package/internal/Popup/types/types.js.map +1 -0
  172. package/internal/Popup/types.d.ts +1 -0
  173. package/internal/PopupMenu/PopupMenu/PopupMenu.js +3 -3
  174. package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
  175. package/internal/PopupMenu/PopupMenu.d.ts +3 -3
  176. package/internal/PopupMenu/validatePositions/validatePositions.js +2 -2
  177. package/internal/PopupMenu/validatePositions/validatePositions.js.map +1 -1
  178. package/internal/PopupMenu/validatePositions.d.ts +2 -2
  179. package/internal/ThemeShowcase/ThemeShowcase.md +13 -13
  180. package/internal/icons/SpinnerIcon/SpinnerIcon.js +5 -2
  181. package/internal/icons/SpinnerIcon/SpinnerIcon.js.map +1 -1
  182. package/internal/icons/SpinnerIcon.d.ts +4 -1
  183. package/lib/ModalStack/ModalStack.js +9 -13
  184. package/lib/ModalStack/ModalStack.js.map +1 -1
  185. package/lib/theming/AnimationKeyframes/AnimationKeyframes.js +1 -1
  186. package/lib/theming/AnimationKeyframes/AnimationKeyframes.js.map +1 -1
  187. package/lib/theming/useTheme/package.json +6 -0
  188. package/lib/theming/useTheme/useTheme.js +5 -0
  189. package/lib/theming/useTheme/useTheme.js.map +1 -0
  190. package/lib/theming/useTheme.d.ts +1 -0
  191. package/lib/utils/utils.js +66 -0
  192. package/lib/utils/utils.js.map +1 -1
  193. package/lib/utils.d.ts +32 -0
  194. package/package.json +7 -5
  195. package/typings/html-props.d.ts +123 -0
  196. package/cjs/internal/PopupMenu/PopupMenuPositions.d.ts +0 -2
  197. package/cjs/internal/PopupMenu/PopupMenuPositions.js +0 -15
  198. package/cjs/internal/PopupMenu/PopupMenuPositions.js.map +0 -1
  199. package/internal/PopupMenu/PopupMenuPositions/PopupMenuPositions.js +0 -1
  200. package/internal/PopupMenu/PopupMenuPositions/PopupMenuPositions.js.map +0 -1
  201. package/internal/PopupMenu/PopupMenuPositions/package.json +0 -6
  202. package/internal/PopupMenu/PopupMenuPositions.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":"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","sourcesContent":["import { PopupPosition } from './Popup';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: HTMLElement): Rect {\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean {\n const windowRelativeRect = _getWindowRelativeRect();\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\n// Can become fully visible by scrolling into viewport\nfunction canBecomeFullyVisible(positionName: PopupPosition, coordinates: Offset) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth) || window.innerWidth,\n height: _getViewProperty((x) => x.clientHeight) || window.innerHeight,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect): Rect {\n const offset = _getAbsoluteOffset();\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(): Offset {\n const scrollTop = window.pageYOffset || _getViewProperty((x) => x.scrollTop);\n const scrollLeft = window.pageXOffset || _getViewProperty((x) => x.scrollLeft);\n\n const clientTop = _getViewProperty((x) => x.clientTop);\n const clientLeft = _getViewProperty((x) => x.clientLeft);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\nfunction _getViewProperty(getProperty: (e: HTMLElement) => number): number {\n const views = [document.documentElement, document.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n};\n"]}
1
+ {"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,SAASA,iBAAT,CAA2BC,QAA3B,EAA6D;AAC3D,MAAMC,CAAC,GAAGD,QAAQ,CAACE,KAAT,CAAe,GAAf,CAAV;;AAEA,SAAO;AACLC,IAAAA,SAAS,EAAEF,CAAC,CAAC,CAAD,CADP;AAELG,IAAAA,KAAK,EAAEH,CAAC,CAAC,CAAD,CAFH,EAAP;;AAID;;AAED,SAASI,sBAAT,CAAgCC,OAAhC,EAA4D;AAC1D,MAAMC,IAAI,GAAGC,uBAAuB,CAACF,OAAD,CAApC;AACA,SAAOG,qBAAqB,CAACF,IAAD,CAA5B;AACD;;AAED,SAASG,0BAAT,CAAoCC,WAApC,EAAyDC,SAAzD,EAAmF;AACjF,MAAMC,kBAAkB,GAAGC,sBAAsB,EAAjD;AACA,MAAMC,kBAAkB,GAAGN,qBAAqB,CAACI,kBAAD,CAAhD;AACA,MAAMG,YAAY,GAAG;AACnBC,IAAAA,GAAG,EAAEN,WAAW,CAACM,GADE;AAEnBC,IAAAA,IAAI,EAAEP,WAAW,CAACO,IAFC;AAGnBC,IAAAA,MAAM,EAAEP,SAAS,CAACO,MAHC;AAInBC,IAAAA,KAAK,EAAER,SAAS,CAACQ,KAJE,EAArB;;;AAOA,SAAOC,iBAAiB,CAACN,kBAAD,EAAqBC,YAArB,CAAxB;AACD;;AAED;AACA,SAASM,qBAAT,CAA+BC,YAA/B,EAAiEZ,WAAjE,EAAsF;AACpF,MAAMX,QAAQ,GAAGD,iBAAiB,CAACwB,YAAD,CAAlC;;AAEA,MAAIvB,QAAQ,CAACG,SAAT,KAAuB,KAA3B,EAAkC;AAChC,QAAMqB,wBAAwB,GAAGf,qBAAqB,CAACK,sBAAsB,EAAvB,CAAtD;AACA,WAAOH,WAAW,CAACM,GAAZ,GAAkBO,wBAAwB,CAACP,GAA3C,IAAkD,CAAzD;AACD;;AAED,MAAIjB,QAAQ,CAACG,SAAT,KAAuB,MAA3B,EAAmC;AACjC,QAAMqB,yBAAwB,GAAGf,qBAAqB,CAACK,sBAAsB,EAAvB,CAAtD;AACA,WAAOH,WAAW,CAACO,IAAZ,GAAmBM,yBAAwB,CAACN,IAA5C,IAAoD,CAA3D;AACD;;AAED;AACA,SAAO,IAAP;AACD;;AAED,SAASV,uBAAT,CAAiCF,OAAjC,EAAuD;AACrD,MAAMC,IAAI,GAAGD,OAAO,CAACmB,qBAAR,EAAb;;AAEA,SAAO;AACLR,IAAAA,GAAG,EAAEV,IAAI,CAACU,GADL;AAELC,IAAAA,IAAI,EAAEX,IAAI,CAACW,IAFN;AAGLE,IAAAA,KAAK,EAAEb,IAAI,CAACmB,KAAL,GAAanB,IAAI,CAACW,IAHpB;AAILC,IAAAA,MAAM,EAAEZ,IAAI,CAACoB,MAAL,GAAcpB,IAAI,CAACU,GAJtB,EAAP;;AAMD;;AAED,SAASH,sBAAT,GAAwC;AACtC,SAAO;AACLG,IAAAA,GAAG,EAAE,CADA;AAELC,IAAAA,IAAI,EAAE,CAFD;AAGLE,IAAAA,KAAK,EAAEQ,gBAAgB,CAAC,UAAC3B,CAAD,UAAOA,CAAC,CAAC4B,WAAT,EAAD,CAAhB,IAA0CC,MAAM,CAACC,UAHnD;AAILZ,IAAAA,MAAM,EAAES,gBAAgB,CAAC,UAAC3B,CAAD,UAAOA,CAAC,CAAC+B,YAAT,EAAD,CAAhB,IAA2CF,MAAM,CAACG,WAJrD,EAAP;;AAMD;;AAED,SAASxB,qBAAT,CAA+BF,IAA/B,EAAiD;AAC/C,MAAM2B,MAAM,GAAGC,kBAAkB,EAAjC;;AAEA,SAAO;AACLlB,IAAAA,GAAG,EAAEV,IAAI,CAACU,GAAL,GAAWiB,MAAM,CAACjB,GADlB;AAELC,IAAAA,IAAI,EAAEX,IAAI,CAACW,IAAL,GAAYgB,MAAM,CAAChB,IAFpB;AAGLE,IAAAA,KAAK,EAAEb,IAAI,CAACa,KAHP;AAILD,IAAAA,MAAM,EAAEZ,IAAI,CAACY,MAJR,EAAP;;AAMD;;AAED,SAASgB,kBAAT,GAAsC;AACpC,MAAMC,SAAS,GAAGN,MAAM,CAACO,WAAP,IAAsBT,gBAAgB,CAAC,UAAC3B,CAAD,UAAOA,CAAC,CAACmC,SAAT,EAAD,CAAxD;AACA,MAAME,UAAU,GAAGR,MAAM,CAACS,WAAP,IAAsBX,gBAAgB,CAAC,UAAC3B,CAAD,UAAOA,CAAC,CAACqC,UAAT,EAAD,CAAzD;;AAEA,MAAME,SAAS,GAAGZ,gBAAgB,CAAC,UAAC3B,CAAD,UAAOA,CAAC,CAACuC,SAAT,EAAD,CAAlC;AACA,MAAMC,UAAU,GAAGb,gBAAgB,CAAC,UAAC3B,CAAD,UAAOA,CAAC,CAACwC,UAAT,EAAD,CAAnC;;AAEA,MAAMxB,GAAG,GAAGmB,SAAS,GAAGI,SAAxB;AACA,MAAMtB,IAAI,GAAGoB,UAAU,GAAGG,UAA1B;;AAEA,SAAO;AACLxB,IAAAA,GAAG,EAAHA,GADK;AAELC,IAAAA,IAAI,EAAJA,IAFK,EAAP;;AAID;;AAED,SAASG,iBAAT,CAA2BqB,SAA3B,EAA4CC,SAA5C,EAAsE;AACpE;AACEA,IAAAA,SAAS,CAAC1B,GAAV,GAAgByB,SAAS,CAACzB,GAA1B;AACA0B,IAAAA,SAAS,CAAC1B,GAAV,GAAgB0B,SAAS,CAACxB,MAA1B,GAAmCuB,SAAS,CAACzB,GAAV,GAAgByB,SAAS,CAACvB,MAD7D;AAEAwB,IAAAA,SAAS,CAACzB,IAAV,GAAiBwB,SAAS,CAACxB,IAF3B;AAGAyB,IAAAA,SAAS,CAACzB,IAAV,GAAiByB,SAAS,CAACvB,KAA3B,GAAmCsB,SAAS,CAACxB,IAAV,GAAiBwB,SAAS,CAACtB,KAJhE;;AAMD;;AAED,SAASQ,gBAAT,CAA0BgB,WAA1B,EAA2E;AACzE,MAAMC,KAAK,GAAG,CAACC,QAAQ,CAACC,eAAV,EAA2BD,QAAQ,CAACE,IAApC,CAAd;AACA,SAAOH,KAAK,CAACI,GAAN,CAAU,UAAChD,CAAD,UAAOA,CAAC,IAAI2C,WAAW,CAAC3C,CAAD,CAAvB,EAAV,EAAsCiD,IAAtC,CAA2CC,OAA3C,KAAuD,CAA9D;AACD;;AAED,OAAO,IAAMC,WAAW,GAAG;AACzBrD,EAAAA,iBAAiB,EAAjBA,iBADyB;AAEzBM,EAAAA,sBAAsB,EAAtBA,sBAFyB;AAGzBgD,EAAAA,cAAc,EAAE3C,0BAHS;AAIzBY,EAAAA,qBAAqB,EAArBA,qBAJyB,EAApB","sourcesContent":["import { PopupPositionsType } from './Popup';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: HTMLElement): Rect {\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean {\n const windowRelativeRect = _getWindowRelativeRect();\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\n// Can become fully visible by scrolling into viewport\nfunction canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth) || window.innerWidth,\n height: _getViewProperty((x) => x.clientHeight) || window.innerHeight,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect): Rect {\n const offset = _getAbsoluteOffset();\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(): Offset {\n const scrollTop = window.pageYOffset || _getViewProperty((x) => x.scrollTop);\n const scrollLeft = window.pageXOffset || _getViewProperty((x) => x.scrollLeft);\n\n const clientTop = _getViewProperty((x) => x.clientTop);\n const clientLeft = _getViewProperty((x) => x.clientLeft);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\nfunction _getViewProperty(getProperty: (e: HTMLElement) => number): number {\n const views = [document.documentElement, document.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { PopupPosition } from './Popup';
1
+ import { PopupPositionsType } from './Popup';
2
2
  export interface Rect {
3
3
  top: number;
4
4
  left: number;
@@ -16,7 +16,7 @@ export interface PositionObject {
16
16
  declare function getPositionObject(position: string): PositionObject;
17
17
  declare function getElementAbsoluteRect(element: HTMLElement): Rect;
18
18
  declare function isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean;
19
- declare function canBecomeFullyVisible(positionName: PopupPosition, coordinates: Offset): boolean;
19
+ declare function canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset): boolean;
20
20
  export declare const PopupHelper: {
21
21
  getPositionObject: typeof getPositionObject;
22
22
  getElementAbsoluteRect: typeof getElementAbsoluteRect;
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../cjs/internal/Popup/types.js",
3
+ "module": "types",
4
+ "types": "../types.d.ts",
5
+ "sideEffects": false
6
+ }
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -0,0 +1 @@
1
+ export type { PopupPositionsType } from './Popup';
@@ -10,13 +10,13 @@ import { Popup } from "../../Popup";
10
10
  import { RenderLayer } from "../../RenderLayer";
11
11
  import { CommonWrapper } from "../../../internal/CommonWrapper";
12
12
  import { rootNode } from "../../../lib/rootNode";
13
- import { PopupMenuPositions } from "../PopupMenuPositions";
14
13
  import { isValidPositions } from "../validatePositions";
15
14
  import { styles } from "../PopupMenu.styles";
16
15
  export var PopupMenuType = {
17
16
  Dropdown: 'dropdown',
18
17
  Tooltip: 'tooltip'
19
18
  };
19
+ var Positions = ['top left', 'top center', 'top right', 'right top', 'right middle', 'right bottom', 'bottom left', 'bottom center', 'bottom right', 'left top', 'left middle', 'left bottom'];
20
20
  export var PopupMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {
21
21
  _inheritsLoose(PopupMenu, _React$Component);
22
22
 
@@ -216,12 +216,12 @@ export var PopupMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/functio
216
216
  return this.props.positions;
217
217
  }
218
218
 
219
- return PopupMenuPositions;
219
+ return Positions;
220
220
  };
221
221
 
222
222
  return PopupMenu;
223
223
  }(React.Component), _class2.__KONTUR_REACT_UI__ = 'PopupMenu', _class2.defaultProps = {
224
- positions: PopupMenuPositions,
224
+ positions: Positions,
225
225
  type: PopupMenuType.Tooltip,
226
226
  popupHasPin: true,
227
227
  disableAnimations: false
@@ -1 +1 @@
1
- {"version":3,"sources":["PopupMenu.tsx"],"names":["React","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","someKeys","InternalMenu","Popup","RenderLayer","CommonWrapper","rootNode","PopupMenuPositions","isValidPositions","styles","PopupMenuType","Dropdown","Tooltip","PopupMenu","state","menuVisible","firstItemShouldBeSelected","captionWrapper","savedFocusableElement","menu","setRootNode","open","showMenu","close","hideMenu","refInternalMenu","element","handleOpen","focus","renderCaption","props","caption","opened","openMenu","closeMenu","toggleMenu","handleCaptionClick","handleCaptionKeyDown","hideMenuWithoutFocusing","saveFocus","setState","handleChangeMenuVisible","restoreFocus","e","preventDefault","handleKeyDown","document","activeElement","focusShouldBeRestored","onChangeMenuState","handleItemSelection","event","isDefaultPrevented","type","render","container","width","children","popupMargin","popupHasPin","popupPinOffset","getPositions","disableAnimations","menuWidth","menuMaxHeight","header","footer","positions","Component","__KONTUR_REACT_UI__","defaultProps","Type"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { InternalMenu } from '../InternalMenu';\nimport { Popup, PopupPosition } from '../Popup';\nimport { RenderLayer } from '../RenderLayer';\nimport { Nullable } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { PopupMenuPositions } from './PopupMenuPositions';\nimport { isValidPositions } from './validatePositions';\nimport { styles } from './PopupMenu.styles';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n}\n\nexport interface PopupMenuProps extends CommonProps {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPosition[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations: boolean;\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n};\n\n@rootNode\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n\n public static defaultProps = {\n positions: PopupMenuPositions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n disableAnimations: false,\n };\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<InternalMenu> = null;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div className={styles.container()} style={{ width: this.props.width }}>\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={this.props.popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={this.props.disableAnimations}\n onOpen={this.handleOpen}\n width={this.props.menuWidth || 'auto'}\n >\n <InternalMenu\n hasShadow={false}\n maxHeight={this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n cyclicSelection={false}\n ref={this.refInternalMenu}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </InternalMenu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n private refInternalMenu = (element: Nullable<InternalMenu>) => (this.menu = element);\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n });\n\n return (\n <span\n data-tid=\"PopupMenu__caption\"\n className={styles.caption()}\n ref={(element) => (this.captionWrapper = element)}\n >\n {caption}\n </span>\n );\n }\n\n return (\n <span\n data-tid=\"PopupMenu__caption\"\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => (this.captionWrapper = element)}\n className={styles.caption()}\n >\n {this.props.caption}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions() {\n if (this.props.positions && isValidPositions(this.props.positions)) {\n return this.props.positions;\n }\n\n return PopupMenuPositions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.setState(\n {\n menuVisible: true,\n firstItemShouldBeSelected,\n },\n () => {\n this.handleChangeMenuVisible(false);\n },\n );\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.setState(\n {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n },\n () => {\n this.handleChangeMenuVisible(!!restoreFocus);\n },\n );\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (document) {\n this.savedFocusableElement = document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleChangeMenuVisible = (focusShouldBeRestored: boolean): void => {\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n if (typeof this.props.onChangeMenuState === 'function') {\n this.props.onChangeMenuState(this.state.menuVisible, focusShouldBeRestored);\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
1
+ {"version":3,"sources":["PopupMenu.tsx"],"names":["React","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","someKeys","InternalMenu","Popup","RenderLayer","CommonWrapper","rootNode","isValidPositions","styles","PopupMenuType","Dropdown","Tooltip","Positions","PopupMenu","state","menuVisible","firstItemShouldBeSelected","captionWrapper","savedFocusableElement","menu","setRootNode","open","showMenu","close","hideMenu","refInternalMenu","element","handleOpen","focus","renderCaption","props","caption","opened","openMenu","closeMenu","toggleMenu","handleCaptionClick","handleCaptionKeyDown","hideMenuWithoutFocusing","saveFocus","setState","handleChangeMenuVisible","restoreFocus","e","preventDefault","handleKeyDown","document","activeElement","focusShouldBeRestored","onChangeMenuState","handleItemSelection","event","isDefaultPrevented","type","render","container","width","children","popupMargin","popupHasPin","popupPinOffset","getPositions","disableAnimations","menuWidth","menuMaxHeight","header","footer","positions","Component","__KONTUR_REACT_UI__","defaultProps","Type"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { InternalMenu } from '../InternalMenu';\nimport { Popup, PopupPositionsType } from '../Popup';\nimport { RenderLayer } from '../RenderLayer';\nimport { Nullable } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { isValidPositions } from './validatePositions';\nimport { styles } from './PopupMenu.styles';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n}\n\nexport interface PopupMenuProps extends CommonProps {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPositionsType[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations: boolean;\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n};\n\nconst Positions: PopupPositionsType[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n 'left top',\n 'left middle',\n 'left bottom',\n];\n\n@rootNode\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n\n public static defaultProps = {\n positions: Positions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n disableAnimations: false,\n };\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<InternalMenu> = null;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div className={styles.container()} style={{ width: this.props.width }}>\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={this.props.popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={this.props.disableAnimations}\n onOpen={this.handleOpen}\n width={this.props.menuWidth || 'auto'}\n >\n <InternalMenu\n hasShadow={false}\n maxHeight={this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n cyclicSelection={false}\n ref={this.refInternalMenu}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </InternalMenu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n private refInternalMenu = (element: Nullable<InternalMenu>) => (this.menu = element);\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n });\n\n return (\n <span\n data-tid=\"PopupMenu__caption\"\n className={styles.caption()}\n ref={(element) => (this.captionWrapper = element)}\n >\n {caption}\n </span>\n );\n }\n\n return (\n <span\n data-tid=\"PopupMenu__caption\"\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => (this.captionWrapper = element)}\n className={styles.caption()}\n >\n {this.props.caption}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions(): Readonly<PopupPositionsType[]> {\n if (this.props.positions && isValidPositions(this.props.positions)) {\n return this.props.positions;\n }\n\n return Positions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.setState(\n {\n menuVisible: true,\n firstItemShouldBeSelected,\n },\n () => {\n this.handleChangeMenuVisible(false);\n },\n );\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.setState(\n {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n },\n () => {\n this.handleChangeMenuVisible(!!restoreFocus);\n },\n );\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (document) {\n this.savedFocusableElement = document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleChangeMenuVisible = (focusShouldBeRestored: boolean): void => {\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n if (typeof this.props.onChangeMenuState === 'function') {\n this.props.onChangeMenuState(this.state.menuVisible, focusShouldBeRestored);\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { PopupPosition } from '../Popup';
2
+ import { PopupPositionsType } from '../Popup';
3
3
  import { CommonProps } from '../../internal/CommonWrapper';
4
4
  export interface PopupMenuCaptionProps {
5
5
  opened: boolean;
@@ -25,7 +25,7 @@ export interface PopupMenuProps extends CommonProps {
25
25
  header?: React.ReactNode;
26
26
  footer?: React.ReactNode;
27
27
  /** Массив разрешенных положений меню относительно caption'а. */
28
- positions?: PopupPosition[];
28
+ positions?: PopupPositionsType[];
29
29
  /** Колбэк, вызываемый после открытия/закрытия меню */
30
30
  onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;
31
31
  /** Пропсы, передающиеся в Popup */
@@ -46,7 +46,7 @@ export declare const PopupMenuType: {
46
46
  export declare class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {
47
47
  static __KONTUR_REACT_UI__: string;
48
48
  static defaultProps: {
49
- positions: PopupPosition[];
49
+ positions: ("top left" | "top center" | "top right" | "right top" | "right middle" | "right bottom" | "bottom right" | "bottom center" | "bottom left" | "left bottom" | "left middle" | "left top")[];
50
50
  type: string;
51
51
  popupHasPin: boolean;
52
52
  disableAnimations: boolean;
@@ -1,8 +1,8 @@
1
1
  import { isProductionEnv } from "../../../lib/currentEnvironment";
2
- import { PopupMenuPositions } from "../PopupMenuPositions";
2
+ import { PopupPositions } from "../../Popup";
3
3
 
4
4
  var isValidPosition = function isValidPosition(position) {
5
- return PopupMenuPositions.includes(position);
5
+ return PopupPositions.includes(position);
6
6
  };
7
7
 
8
8
  export var isValidPositions = function isValidPositions(positions) {
@@ -1 +1 @@
1
- {"version":3,"sources":["validatePositions.tsx"],"names":["isProductionEnv","PopupMenuPositions","isValidPosition","position","includes","isValidPositions","positions","every","item","Error"],"mappings":"AAAA,SAASA,eAAT,QAAgC,8BAAhC;;;AAGA,SAASC,kBAAT,QAAmC,sBAAnC;;AAEA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,QAAD,EAAsC;AAC5D,SAAOF,kBAAkB,CAACG,QAAnB,CAA4BD,QAA5B,CAAP;AACD,CAFD;;AAIA,OAAO,IAAME,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,SAAD,EAAyC;AACvE,SAAOA,SAAS,CAACC,KAAV,CAAgB,UAACC,IAAD,EAAU;AAC/B,QAAIR,eAAJ,EAAqB;AACnB,aAAOE,eAAe,CAACM,IAAD,CAAtB;AACD,KAFD,MAEO;AACL,UAAIN,eAAe,CAACM,IAAD,CAAnB,EAA2B;AACzB,eAAO,IAAP;AACD,OAFD,MAEO;AACL,cAAM,IAAIC,KAAJ,2BAAiCD,IAAjC,QAAN;AACD;AACF;AACF,GAVM,CAAP;AAWD,CAZM","sourcesContent":["import { isProductionEnv } from '../../lib/currentEnvironment';\nimport { PopupPosition } from '../Popup';\n\nimport { PopupMenuPositions } from './PopupMenuPositions';\n\nconst isValidPosition = (position: PopupPosition): boolean => {\n return PopupMenuPositions.includes(position);\n};\n\nexport const isValidPositions = (positions: PopupPosition[]): boolean => {\n return positions.every((item) => {\n if (isProductionEnv) {\n return isValidPosition(item);\n } else {\n if (isValidPosition(item)) {\n return true;\n } else {\n throw new Error(`Unxpected position \"${item}\"`);\n }\n }\n });\n};\n"]}
1
+ {"version":3,"sources":["validatePositions.ts"],"names":["isProductionEnv","PopupPositions","isValidPosition","position","includes","isValidPositions","positions","every","item","Error"],"mappings":"AAAA,SAASA,eAAT,QAAgC,8BAAhC;AACA,SAA6BC,cAA7B,QAAmD,UAAnD;;AAEA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,QAAD,EAA2C;AACjE,SAAOF,cAAc,CAACG,QAAf,CAAwBD,QAAxB,CAAP;AACD,CAFD;;AAIA,OAAO,IAAME,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,SAAD,EAA8C;AAC5E,SAAOA,SAAS,CAACC,KAAV,CAAgB,UAACC,IAAD,EAAU;AAC/B,QAAIR,eAAJ,EAAqB;AACnB,aAAOE,eAAe,CAACM,IAAD,CAAtB;AACD,KAFD,MAEO;AACL,UAAIN,eAAe,CAACM,IAAD,CAAnB,EAA2B;AACzB,eAAO,IAAP;AACD,OAFD,MAEO;AACL,cAAM,IAAIC,KAAJ,2BAAiCD,IAAjC,QAAN;AACD;AACF;AACF,GAVM,CAAP;AAWD,CAZM","sourcesContent":["import { isProductionEnv } from '../../lib/currentEnvironment';\nimport { PopupPositionsType, PopupPositions } from '../Popup';\n\nconst isValidPosition = (position: PopupPositionsType): boolean => {\n return PopupPositions.includes(position);\n};\n\nexport const isValidPositions = (positions: PopupPositionsType[]): boolean => {\n return positions.every((item) => {\n if (isProductionEnv) {\n return isValidPosition(item);\n } else {\n if (isValidPosition(item)) {\n return true;\n } else {\n throw new Error(`Unxpected position \"${item}\"`);\n }\n }\n });\n};\n"]}
@@ -1,2 +1,2 @@
1
- import { PopupPosition } from '../Popup';
2
- export declare const isValidPositions: (positions: PopupPosition[]) => boolean;
1
+ import { PopupPositionsType } from '../Popup';
2
+ export declare const isValidPositions: (positions: PopupPositionsType[]) => boolean;
@@ -1,13 +1,13 @@
1
- ### Таблица переменных
2
-
3
- Список использующихся переменных для каждого кастомизируемого компонента.
4
- <br/>
5
- Таблица фильтруется по названию переменной.
6
- <br/>
7
- Значения в колонке `Variable name` кликабельны.
8
-
9
- ```jsx harmony
10
- import { ThemeShowcase } from '@skbkontur/react-ui/internal/ThemeShowcase/ThemeShowcase';
11
-
12
- <ThemeShowcase />;
13
- ```
1
+ ### Таблица переменных
2
+
3
+ Список использующихся переменных для каждого кастомизируемого компонента.
4
+ <br/>
5
+ Таблица фильтруется по названию переменной.
6
+ <br/>
7
+ Значения в колонке `Variable name` кликабельны.
8
+
9
+ ```jsx harmony
10
+ import { ThemeShowcase } from '@skbkontur/react-ui/internal/ThemeShowcase/ThemeShowcase';
11
+
12
+ <ThemeShowcase />;
13
+ ```
@@ -25,7 +25,9 @@ export var sizes = {
25
25
  export var SpinnerIcon = function SpinnerIcon(_ref) {
26
26
  var size = _ref.size,
27
27
  className = _ref.className,
28
- dimmed = _ref.dimmed;
28
+ dimmed = _ref.dimmed,
29
+ width = _ref.width,
30
+ color = _ref.color;
29
31
  var currentSize = sizes[size];
30
32
  var svgRef = React.useRef(null);
31
33
 
@@ -78,9 +80,10 @@ export var SpinnerIcon = function SpinnerIcon(_ref) {
78
80
  width: currentSize.size,
79
81
  height: currentSize.size,
80
82
  fill: "none",
83
+ stroke: color,
81
84
  strokeDasharray: 10 * currentSize.radius / 6 + ", " + 27 * currentSize.radius / 6,
82
85
  strokeDashoffset: "0",
83
- strokeWidth: currentSize.width,
86
+ strokeWidth: width || currentSize.width,
84
87
  ref: svgRef
85
88
  }, /*#__PURE__*/React.createElement("circle", {
86
89
  cx: currentSize.size / 2,
@@ -1 +1 @@
1
- {"version":3,"sources":["SpinnerIcon.tsx"],"names":["React","isIE11","SpinnerFallbackAnimationRunner","createOffsetAnimation","createLengthAnimation","createColorAnimation","createRotationAnimation","isTestEnv","ThemeContext","cx","styles","sizes","big","size","width","radius","normal","mini","SpinnerIcon","className","dimmed","currentSize","svgRef","useRef","fallbackAnimationRef","useContext","red","yellow","green","brand","useEffect","setStyleProperty","svg","current","style","setProperty","fallbackAnimation","stop","removeAttribute","root","icon"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isIE11 } from '../../lib/client';\nimport {\n SpinnerFallbackAnimationRunner,\n createOffsetAnimation,\n createLengthAnimation,\n createColorAnimation,\n createRotationAnimation,\n} from '../../components/Spinner/SpinnerFallbackAnimation';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './SpinnerIcon.styles';\n\nexport interface SpinnerIconProps {\n className: string;\n size: 'mini' | 'normal' | 'big';\n dimmed?: boolean;\n}\n\nexport const sizes = {\n big: {\n size: 96,\n width: 4,\n radius: 32,\n },\n normal: {\n size: 48,\n width: 2,\n radius: 16,\n },\n mini: {\n size: 16,\n width: 1.5,\n radius: 6,\n },\n};\n\nexport const SpinnerIcon = ({ size, className, dimmed }: SpinnerIconProps) => {\n const currentSize = sizes[size];\n const svgRef = React.useRef<SVGSVGElement>(null);\n\n if (isIE11 && !isTestEnv) {\n // This condition will not change during app's life time\n // So its OK to use hooks here\n // https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const fallbackAnimationRef = React.useRef<SpinnerFallbackAnimationRunner | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { red, yellow, green, brand } = React.useContext(ThemeContext);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n const setStyleProperty: CSSStyleDeclaration['setProperty'] = (...args) => {\n const svg = svgRef.current;\n if (svg) {\n svg.style.setProperty(...args);\n }\n };\n\n fallbackAnimationRef.current = new SpinnerFallbackAnimationRunner(\n [\n createOffsetAnimation(0, -230, 1000, setStyleProperty, '%'),\n createLengthAnimation([62, 168], [187, 43], 2000, setStyleProperty, '%'),\n createRotationAnimation(0, 360, 2000, setStyleProperty),\n ...(dimmed ? [] : [createColorAnimation([red, yellow, green, brand], 1500, setStyleProperty)]),\n ],\n 1000 / 60,\n );\n\n return () => {\n const fallbackAnimation = fallbackAnimationRef.current;\n const svg = svgRef.current;\n if (fallbackAnimation) {\n fallbackAnimation.stop();\n }\n if (svg) {\n svg.removeAttribute('style');\n }\n };\n }, [dimmed, red, yellow, green, brand]);\n }\n\n return (\n <span className={styles.root()}>\n <svg\n viewBox={`0 0 ${currentSize.size} ${currentSize.size}`}\n className={cx(styles.icon(), className)}\n width={currentSize.size}\n height={currentSize.size}\n fill=\"none\"\n strokeDasharray={`${(10 * currentSize.radius) / 6}, ${(27 * currentSize.radius) / 6}`}\n strokeDashoffset=\"0\"\n strokeWidth={currentSize.width}\n ref={svgRef}\n >\n <circle cx={currentSize.size / 2} cy={currentSize.size / 2} r={currentSize.radius} />\n </svg>\n </span>\n );\n};\n"]}
1
+ {"version":3,"sources":["SpinnerIcon.tsx"],"names":["React","isIE11","SpinnerFallbackAnimationRunner","createOffsetAnimation","createLengthAnimation","createColorAnimation","createRotationAnimation","isTestEnv","ThemeContext","cx","styles","sizes","big","size","width","radius","normal","mini","SpinnerIcon","className","dimmed","color","currentSize","svgRef","useRef","fallbackAnimationRef","useContext","red","yellow","green","brand","useEffect","setStyleProperty","svg","current","style","setProperty","fallbackAnimation","stop","removeAttribute","root","icon"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isIE11 } from '../../lib/client';\nimport {\n SpinnerFallbackAnimationRunner,\n createOffsetAnimation,\n createLengthAnimation,\n createColorAnimation,\n createRotationAnimation,\n} from '../../components/Spinner/SpinnerFallbackAnimation';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './SpinnerIcon.styles';\n\nexport interface SpinnerIconProps {\n className: string;\n size: 'mini' | 'normal' | 'big';\n dimmed?: boolean;\n width?: number;\n color?: React.CSSProperties['color'];\n}\n\nexport const sizes = {\n big: {\n size: 96,\n width: 4,\n radius: 32,\n },\n normal: {\n size: 48,\n width: 2,\n radius: 16,\n },\n mini: {\n size: 16,\n width: 1.5,\n radius: 6,\n },\n};\n\nexport const SpinnerIcon = ({ size, className, dimmed, width, color }: SpinnerIconProps) => {\n const currentSize = sizes[size];\n const svgRef = React.useRef<SVGSVGElement>(null);\n\n if (isIE11 && !isTestEnv) {\n // This condition will not change during app's life time\n // So its OK to use hooks here\n // https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const fallbackAnimationRef = React.useRef<SpinnerFallbackAnimationRunner | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { red, yellow, green, brand } = React.useContext(ThemeContext);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n const setStyleProperty: CSSStyleDeclaration['setProperty'] = (...args) => {\n const svg = svgRef.current;\n if (svg) {\n svg.style.setProperty(...args);\n }\n };\n\n fallbackAnimationRef.current = new SpinnerFallbackAnimationRunner(\n [\n createOffsetAnimation(0, -230, 1000, setStyleProperty, '%'),\n createLengthAnimation([62, 168], [187, 43], 2000, setStyleProperty, '%'),\n createRotationAnimation(0, 360, 2000, setStyleProperty),\n ...(dimmed ? [] : [createColorAnimation([red, yellow, green, brand], 1500, setStyleProperty)]),\n ],\n 1000 / 60,\n );\n\n return () => {\n const fallbackAnimation = fallbackAnimationRef.current;\n const svg = svgRef.current;\n if (fallbackAnimation) {\n fallbackAnimation.stop();\n }\n if (svg) {\n svg.removeAttribute('style');\n }\n };\n }, [dimmed, red, yellow, green, brand]);\n }\n\n return (\n <span className={styles.root()}>\n <svg\n viewBox={`0 0 ${currentSize.size} ${currentSize.size}`}\n className={cx(styles.icon(), className)}\n width={currentSize.size}\n height={currentSize.size}\n fill=\"none\"\n stroke={color}\n strokeDasharray={`${(10 * currentSize.radius) / 6}, ${(27 * currentSize.radius) / 6}`}\n strokeDashoffset=\"0\"\n strokeWidth={width || currentSize.width}\n ref={svgRef}\n >\n <circle cx={currentSize.size / 2} cy={currentSize.size / 2} r={currentSize.radius} />\n </svg>\n </span>\n );\n};\n"]}
@@ -1,7 +1,10 @@
1
+ import React from 'react';
1
2
  export interface SpinnerIconProps {
2
3
  className: string;
3
4
  size: 'mini' | 'normal' | 'big';
4
5
  dimmed?: boolean;
6
+ width?: number;
7
+ color?: React.CSSProperties['color'];
5
8
  }
6
9
  export declare const sizes: {
7
10
  big: {
@@ -20,4 +23,4 @@ export declare const sizes: {
20
23
  radius: number;
21
24
  };
22
25
  };
23
- export declare const SpinnerIcon: ({ size, className, dimmed }: SpinnerIconProps) => JSX.Element;
26
+ export declare const SpinnerIcon: ({ size, className, dimmed, width, color }: SpinnerIconProps) => JSX.Element;
@@ -92,21 +92,17 @@ export var ModalStack = /*#__PURE__*/function () {
92
92
 
93
93
  return ModalStack;
94
94
  }();
95
-
96
- var isSidePage = function isSidePage(component) {
97
- return isReactUIInstance('SidePage', component);
98
- };
99
-
100
- var isModal = function isModal(component) {
101
- return isReactUIInstance('Modal', component);
102
- };
103
95
  /**
104
96
  * Specific check for component type by its instance
105
97
  */
106
98
 
99
+ var isReactUIInstance = function isReactUIInstance(componentName) {
100
+ return function (instance) {
101
+ var constructor = instance.constructor;
102
+ return Object.prototype.hasOwnProperty.call(constructor, '__KONTUR_REACT_UI__') && // @ts-ignore
103
+ constructor.__KONTUR_REACT_UI__ === componentName;
104
+ };
105
+ };
107
106
 
108
- var isReactUIInstance = function isReactUIInstance(componentName, instance) {
109
- var constructor = instance.constructor;
110
- return Object.prototype.hasOwnProperty.call(constructor, '__KONTUR_REACT_UI__') && // @ts-ignore
111
- constructor.__KONTUR_REACT_UI__ === componentName;
112
- };
107
+ var isSidePage = isReactUIInstance('SidePage');
108
+ var isModal = isReactUIInstance('Modal');
@@ -1 +1 @@
1
- {"version":3,"sources":["ModalStack.ts"],"names":["EventEmitter","ModalStack","add","component","onChange","getStackInfo","emitter","mounted","unshift","changeHandler","_token","addListener","emit","remove","removeListener","index","indexOf","splice","isBlocking","length","wantsToBlock","globalWithStack","global","__ReactUIStackInfo","isModal","isSidePage","deepestSidePages","filter","i","pop","props","blockBackground","isReactUIInstance","componentName","instance","constructor","Object","prototype","hasOwnProperty","call","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\nimport EventEmitter from 'eventemitter3';\n\nimport { SidePageProps } from '../components/SidePage';\nimport { ModalProps } from '../components/Modal';\n\ninterface StackInfo {\n emitter: EventEmitter;\n mounted: React.Component[];\n}\n\ninterface GlobalWithStackInfo {\n __ReactUIStackInfo?: StackInfo;\n}\n\nexport interface ModalStackSubscription {\n remove: () => void;\n}\n\nexport class ModalStack {\n public static add(\n component: React.Component,\n onChange: (stack: ReadonlyArray<React.Component>) => void,\n ): ModalStackSubscription {\n const { emitter, mounted } = ModalStack.getStackInfo();\n mounted.unshift(component);\n const changeHandler = () => onChange([...mounted]);\n const _token = emitter.addListener('change', changeHandler);\n emitter.emit('change');\n return {\n remove: () => {\n // Backwards compatible with versions 0.x and 1.w which using the fbemitter package\n if ('remove' in _token) {\n // @ts-ignore\n _token.remove();\n return;\n }\n\n emitter.removeListener('change', changeHandler);\n },\n };\n }\n\n public static remove(component: React.Component) {\n const { emitter, mounted } = ModalStack.getStackInfo();\n const index = mounted.indexOf(component);\n if (index !== -1) {\n mounted.splice(index, 1);\n }\n emitter.emit('change');\n }\n\n /**\n * Determines if stack component is allowed to block background\n */\n public static isBlocking(component: React.Component): boolean {\n const { mounted } = ModalStack.getStackInfo();\n for (let index = 0; index < mounted.length; index++) {\n if (ModalStack.wantsToBlock(mounted[index])) {\n // only the highest component in stack\n // that wants to block is allowed to do it\n return component === mounted[index];\n }\n }\n return false;\n }\n\n private static getStackInfo(): StackInfo {\n const globalWithStack = global as GlobalWithStackInfo;\n return (\n globalWithStack.__ReactUIStackInfo ||\n (globalWithStack.__ReactUIStackInfo = {\n emitter: new EventEmitter(),\n mounted: [],\n })\n );\n }\n\n private static wantsToBlock(component: React.Component): boolean {\n if (isModal(component)) {\n return true;\n }\n\n if (isSidePage(component)) {\n const { mounted } = ModalStack.getStackInfo();\n const deepestSidePages = mounted.filter((i) => isSidePage(i)).pop();\n return !!component.props.blockBackground && component === deepestSidePages;\n }\n\n return false;\n }\n}\n\nconst isSidePage = (component: React.Component): component is React.Component<SidePageProps> => {\n return isReactUIInstance('SidePage', component);\n};\n\nconst isModal = (component: React.Component): component is React.Component<ModalProps> => {\n return isReactUIInstance('Modal', component);\n};\n\n/**\n * Specific check for component type by its instance\n */\nconst isReactUIInstance = (componentName: string, instance: React.Component) => {\n const { constructor } = instance;\n return (\n Object.prototype.hasOwnProperty.call(constructor, '__KONTUR_REACT_UI__') &&\n // @ts-ignore\n constructor.__KONTUR_REACT_UI__ === componentName\n );\n};\n"]}
1
+ {"version":3,"sources":["ModalStack.ts"],"names":["EventEmitter","ModalStack","add","component","onChange","getStackInfo","emitter","mounted","unshift","changeHandler","_token","addListener","emit","remove","removeListener","index","indexOf","splice","isBlocking","length","wantsToBlock","globalWithStack","global","__ReactUIStackInfo","isModal","isSidePage","deepestSidePages","filter","i","pop","props","blockBackground","isReactUIInstance","componentName","instance","constructor","Object","prototype","hasOwnProperty","call","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\nimport EventEmitter from 'eventemitter3';\n\nimport { SidePageProps } from '../components/SidePage';\nimport { ModalProps } from '../components/Modal';\n\ninterface StackInfo {\n emitter: EventEmitter;\n mounted: React.Component[];\n}\n\ninterface GlobalWithStackInfo {\n __ReactUIStackInfo?: StackInfo;\n}\n\nexport interface ModalStackSubscription {\n remove: () => void;\n}\n\nexport class ModalStack {\n public static add(\n component: React.Component,\n onChange: (stack: ReadonlyArray<React.Component>) => void,\n ): ModalStackSubscription {\n const { emitter, mounted } = ModalStack.getStackInfo();\n mounted.unshift(component);\n const changeHandler = () => onChange([...mounted]);\n const _token = emitter.addListener('change', changeHandler);\n emitter.emit('change');\n return {\n remove: () => {\n // Backwards compatible with versions 0.x and 1.w which using the fbemitter package\n if ('remove' in _token) {\n // @ts-ignore\n _token.remove();\n return;\n }\n\n emitter.removeListener('change', changeHandler);\n },\n };\n }\n\n public static remove(component: React.Component) {\n const { emitter, mounted } = ModalStack.getStackInfo();\n const index = mounted.indexOf(component);\n if (index !== -1) {\n mounted.splice(index, 1);\n }\n emitter.emit('change');\n }\n\n /**\n * Determines if stack component is allowed to block background\n */\n public static isBlocking(component: React.Component): boolean {\n const { mounted } = ModalStack.getStackInfo();\n for (let index = 0; index < mounted.length; index++) {\n if (ModalStack.wantsToBlock(mounted[index])) {\n // only the highest component in stack\n // that wants to block is allowed to do it\n return component === mounted[index];\n }\n }\n return false;\n }\n\n private static getStackInfo(): StackInfo {\n const globalWithStack = global as GlobalWithStackInfo;\n return (\n globalWithStack.__ReactUIStackInfo ||\n (globalWithStack.__ReactUIStackInfo = {\n emitter: new EventEmitter(),\n mounted: [],\n })\n );\n }\n\n private static wantsToBlock(component: React.Component): boolean {\n if (isModal(component)) {\n return true;\n }\n\n if (isSidePage(component)) {\n const { mounted } = ModalStack.getStackInfo();\n const deepestSidePages = mounted.filter((i) => isSidePage(i)).pop();\n return !!component.props.blockBackground && component === deepestSidePages;\n }\n\n return false;\n }\n}\n\n/**\n * Specific check for component type by its instance\n */\nconst isReactUIInstance = <T>(componentName: string) => {\n return (instance: React.Component): instance is React.Component<T> => {\n const { constructor } = instance;\n\n return (\n Object.prototype.hasOwnProperty.call(constructor, '__KONTUR_REACT_UI__') &&\n // @ts-ignore\n constructor.__KONTUR_REACT_UI__ === componentName\n );\n };\n};\n\nconst isSidePage = isReactUIInstance<SidePageProps>('SidePage');\n\nconst isModal = isReactUIInstance<ModalProps>('Modal');\n"]}
@@ -11,7 +11,7 @@ export var AnimationKeyframes = {
11
11
  return keyframes(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n 0% { stroke-dasharray: 10, 96; }\n 50% { stroke-dasharray: 50, 56; }\n 100% { stroke-dasharray: 10, 96;}\n "])));
12
12
  },
13
13
  spinnerCircleOffset: function spinnerCircleOffset(t) {
14
- return keyframes(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n 0% { stroke-dashoffset: 0; }\n 100% { stroke-dashoffset: -231.25%; }\n "])));
14
+ return keyframes(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n 0% { stroke-dashoffset: 231.25%; }\n 100% { stroke-dashoffset: 0%; }\n "])));
15
15
  },
16
16
  spinnerCircleLength: function spinnerCircleLength(t) {
17
17
  return keyframes(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n 0% { stroke-dasharray: 62.5%, 168.75%; }\n 50% { stroke-dasharray: 187.5%, 43.75%; }\n 100% { stroke-dasharray: 62.5%, 168.75%; }\n "])));
@@ -1 +1 @@
1
- {"version":3,"sources":["AnimationKeyframes.ts"],"names":["keyframes","AnimationKeyframes","spinnerCloudOffset","t","spinnerCloudLength","spinnerCircleOffset","spinnerCircleLength","spinnerCircleRotate","spinnerColor","red","yellow","green","brand"],"mappings":"8MAAA,SAASA,SAAT,QAA0B,WAA1B;;;AAGA,OAAO,IAAMC,kBAAkB,GAAG;AAChCC,EAAAA,kBADgC,8BACbC,CADa,EACH;AAC3B,WAAOH,SAAP;;;;AAID,GAN+B;;AAQhCI,EAAAA,kBARgC,8BAQbD,CARa,EAQH;AAC3B,WAAOH,SAAP;;;;;AAKD,GAd+B;AAehCK,EAAAA,mBAfgC,+BAeZF,CAfY,EAeF;AAC5B,WAAOH,SAAP;;;;AAID,GApB+B;AAqBhCM,EAAAA,mBArBgC,+BAqBZH,CArBY,EAqBF;AAC5B,WAAOH,SAAP;;;;;AAKD,GA3B+B;AA4BhCO,EAAAA,mBA5BgC,+BA4BZJ,CA5BY,EA4BF;AAC5B,WAAOH,SAAP;;;AAGD,GAhC+B;AAiChCQ,EAAAA,YAjCgC,wBAiCnBL,CAjCmB,EAiCT;AACrB,WAAOH,SAAP;AACyBG,IAAAA,CAAC,CAACM,GAD3B;AAEoBN,IAAAA,CAAC,CAACO,MAFtB;AAGoBP,IAAAA,CAAC,CAACQ,KAHtB;AAIyBR,IAAAA,CAAC,CAACS,KAJ3B;;AAMD,GAxC+B,EAA3B","sourcesContent":["import { keyframes } from './Emotion';\nimport { Theme } from './Theme';\n\nexport const AnimationKeyframes = {\n spinnerCloudOffset(t: Theme) {\n return keyframes`\n 0% { stroke-dashoffset: 10; }\n 100% { stroke-dashoffset: 116; }\n `;\n },\n\n spinnerCloudLength(t: Theme) {\n return keyframes`\n 0% { stroke-dasharray: 10, 96; }\n 50% { stroke-dasharray: 50, 56; }\n 100% { stroke-dasharray: 10, 96;}\n `;\n },\n spinnerCircleOffset(t: Theme) {\n return keyframes`\n 0% { stroke-dashoffset: 0; }\n 100% { stroke-dashoffset: -231.25%; }\n `;\n },\n spinnerCircleLength(t: Theme) {\n return keyframes`\n 0% { stroke-dasharray: 62.5%, 168.75%; }\n 50% { stroke-dasharray: 187.5%, 43.75%; }\n 100% { stroke-dasharray: 62.5%, 168.75%; }\n `;\n },\n spinnerCircleRotate(t: Theme) {\n return keyframes`\n 100% { transform: rotate(360deg); }\n `;\n },\n spinnerColor(t: Theme) {\n return keyframes`\n 100%, 0% { stroke: ${t.red}; }\n 40% { stroke: ${t.yellow}; }\n 66% { stroke: ${t.green}; }\n 80%, 90% { stroke: ${t.brand}; }\n `;\n },\n};\n"]}
1
+ {"version":3,"sources":["AnimationKeyframes.ts"],"names":["keyframes","AnimationKeyframes","spinnerCloudOffset","t","spinnerCloudLength","spinnerCircleOffset","spinnerCircleLength","spinnerCircleRotate","spinnerColor","red","yellow","green","brand"],"mappings":"8MAAA,SAASA,SAAT,QAA0B,WAA1B;;;AAGA,OAAO,IAAMC,kBAAkB,GAAG;AAChCC,EAAAA,kBADgC,8BACbC,CADa,EACH;AAC3B,WAAOH,SAAP;;;;AAID,GAN+B;;AAQhCI,EAAAA,kBARgC,8BAQbD,CARa,EAQH;AAC3B,WAAOH,SAAP;;;;;AAKD,GAd+B;AAehCK,EAAAA,mBAfgC,+BAeZF,CAfY,EAeF;AAC5B,WAAOH,SAAP;;;;AAID,GApB+B;AAqBhCM,EAAAA,mBArBgC,+BAqBZH,CArBY,EAqBF;AAC5B,WAAOH,SAAP;;;;;AAKD,GA3B+B;AA4BhCO,EAAAA,mBA5BgC,+BA4BZJ,CA5BY,EA4BF;AAC5B,WAAOH,SAAP;;;AAGD,GAhC+B;AAiChCQ,EAAAA,YAjCgC,wBAiCnBL,CAjCmB,EAiCT;AACrB,WAAOH,SAAP;AACyBG,IAAAA,CAAC,CAACM,GAD3B;AAEoBN,IAAAA,CAAC,CAACO,MAFtB;AAGoBP,IAAAA,CAAC,CAACQ,KAHtB;AAIyBR,IAAAA,CAAC,CAACS,KAJ3B;;AAMD,GAxC+B,EAA3B","sourcesContent":["import { keyframes } from './Emotion';\nimport { Theme } from './Theme';\n\nexport const AnimationKeyframes = {\n spinnerCloudOffset(t: Theme) {\n return keyframes`\n 0% { stroke-dashoffset: 10; }\n 100% { stroke-dashoffset: 116; }\n `;\n },\n\n spinnerCloudLength(t: Theme) {\n return keyframes`\n 0% { stroke-dasharray: 10, 96; }\n 50% { stroke-dasharray: 50, 56; }\n 100% { stroke-dasharray: 10, 96;}\n `;\n },\n spinnerCircleOffset(t: Theme) {\n return keyframes`\n 0% { stroke-dashoffset: 231.25%; }\n 100% { stroke-dashoffset: 0%; }\n `;\n },\n spinnerCircleLength(t: Theme) {\n return keyframes`\n 0% { stroke-dasharray: 62.5%, 168.75%; }\n 50% { stroke-dasharray: 187.5%, 43.75%; }\n 100% { stroke-dasharray: 62.5%, 168.75%; }\n `;\n },\n spinnerCircleRotate(t: Theme) {\n return keyframes`\n 100% { transform: rotate(360deg); }\n `;\n },\n spinnerColor(t: Theme) {\n return keyframes`\n 100%, 0% { stroke: ${t.red}; }\n 40% { stroke: ${t.yellow}; }\n 66% { stroke: ${t.green}; }\n 80%, 90% { stroke: ${t.brand}; }\n `;\n },\n};\n"]}
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../cjs/lib/theming/useTheme.js",
3
+ "module": "useTheme",
4
+ "types": "../useTheme.d.ts",
5
+ "sideEffects": false
6
+ }
@@ -0,0 +1,5 @@
1
+ import { useContext } from 'react';
2
+ import { ThemeContext } from "../ThemeContext";
3
+ export var useTheme = function useTheme() {
4
+ return useContext(ThemeContext);
5
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useTheme.ts"],"names":["useContext","ThemeContext","useTheme"],"mappings":"AAAA,SAASA,UAAT,QAA2B,OAA3B;;AAEA,SAASC,YAAT,QAA6B,gBAA7B;;AAEA,OAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,GAAM;AAC5B,SAAOF,UAAU,CAACC,YAAD,CAAjB;AACD,CAFM","sourcesContent":["import { useContext } from 'react';\n\nimport { ThemeContext } from './ThemeContext';\n\nexport const useTheme = () => {\n return useContext(ThemeContext);\n};\n"]}
@@ -0,0 +1 @@
1
+ export declare const useTheme: () => Readonly<Readonly<typeof import("../../internal/themes/DefaultTheme").DefaultTheme>>;
@@ -87,4 +87,70 @@ export var isReactUINode = function isReactUINode(componentName, node) {
87
87
 
88
88
  export var isNonNullable = function isNonNullable(value) {
89
89
  return value !== null && value !== undefined;
90
+ };
91
+ /**
92
+ * Creates a function that checks if the given `child`
93
+ * is an instance of some component specified by `name`.
94
+ *
95
+ * @param name Component name for which function will be created.
96
+ * @returns A function that checks if the given `child` is an instance of the component specified by `name`.
97
+ */
98
+
99
+ export var isReactUIComponent = function isReactUIComponent(name) {
100
+ return function (child) {
101
+ var _child$type; // @ts-ignore
102
+
103
+
104
+ return (child == null ? void 0 : (_child$type = child.type) == null ? void 0 : _child$type.__KONTUR_REACT_UI__) === name;
105
+ };
106
+ };
107
+ /**
108
+ * Merges two or more refs into one.
109
+ *
110
+ * @param refs Array of refs.
111
+ * @returns A single ref composing all the refs passed.
112
+ *
113
+ * @example
114
+ * const SomeComponent = forwardRef((props, ref) => {
115
+ * const localRef = useRef();
116
+ *
117
+ * return <div ref={mergeRefs([localRef, ref])} />;
118
+ * });
119
+ */
120
+
121
+ export function mergeRefs(refs) {
122
+ return function (value) {
123
+ refs.forEach(function (ref) {
124
+ if (typeof ref === 'function') {
125
+ return ref(value);
126
+ } else if (isNonNullable(ref)) {
127
+ return ref.current = value;
128
+ }
129
+ });
130
+ };
131
+ }
132
+ /**
133
+ * Extracts all data attributes from props and returns them as well as props.
134
+ *
135
+ * @param props Props object to extract data attributes from.
136
+ * @returns Separated data attributes and all other props.
137
+ */
138
+
139
+ export var extractDataProps = function extractDataProps(props) {
140
+ var dataProps = {};
141
+ var restWithoutDataProps = {};
142
+ Object.entries(props).map(function (_ref) {
143
+ var name = _ref[0],
144
+ value = _ref[1];
145
+
146
+ if (name.startsWith('data-')) {
147
+ dataProps[name] = value;
148
+ } else {
149
+ restWithoutDataProps[name] = value;
150
+ }
151
+ });
152
+ return {
153
+ dataProps: dataProps,
154
+ restWithoutDataProps: restWithoutDataProps
155
+ };
90
156
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["utils.ts"],"names":["React","isForwardRef","isBrowser","delay","ms","Promise","resolve","setTimeout","emptyHandler","CancelationError","code","Error","taskWithDelay","task","cancelationToken","reject","then","isFunction","x","isFunctionalComponent","Component","Boolean","prototype","isReactComponent","isClassComponent","isIntrinsicElement","element","type","isRefableElement","escapeRegExpSpecChars","s","replace","getRandomID","Math","random","toString","slice","isExternalLink","link","RegExp","window","location","host","test","isReactUINode","componentName","node","isValidElement","Object","hasOwnProperty","call","__KONTUR_REACT_UI__","isNonNullable","value","undefined"],"mappings":"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","sourcesContent":["import { ReactComponentLike } from 'prop-types';\nimport React from 'react';\nimport { isForwardRef } from 'react-is';\n\nimport { isBrowser } from './client';\n\n// NOTE: Copy-paste from @types/react\nexport type Defaultize<P, D> = P extends any\n ? string extends keyof P\n ? P\n : Pick<P, Exclude<keyof P, keyof D>> &\n Partial<Pick<P, Extract<keyof P, keyof D>>> &\n Partial<Pick<D, Exclude<keyof D, keyof P>>>\n : never;\n\nexport type DefaultizeProps<C, P> = C extends { defaultProps: infer D } ? Defaultize<P, D> : P;\n\nexport const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport const emptyHandler = () => {\n /* noop */\n};\n\nexport class CancelationError extends Error {\n public code = 'CancelationError';\n}\n\nexport function taskWithDelay(task: () => void, ms: number) {\n let cancelationToken: () => void = () => null;\n\n new Promise((resolve, reject) => {\n cancelationToken = reject;\n setTimeout(resolve, ms);\n })\n .then(task)\n .catch(() => null);\n\n return cancelationToken;\n}\n\nexport function isFunction<T>(x: T | Function): x is Function {\n return typeof x === 'function';\n}\n\nexport function isFunctionalComponent(Component: ReactComponentLike): boolean {\n return Boolean(typeof Component === 'function' && !(Component.prototype && Component.prototype.isReactComponent));\n}\n\nexport function isClassComponent(Component: ReactComponentLike): boolean {\n return Boolean(typeof Component === 'function' && Component.prototype && Component.prototype.isReactComponent);\n}\n\nexport function isIntrinsicElement(element: React.ReactElement): boolean {\n return typeof element.type === 'string';\n}\n\nexport function isRefableElement(element: React.ReactElement): boolean {\n return Boolean(isIntrinsicElement(element) || isClassComponent(element.type) || isForwardRef(element));\n}\n\nexport function escapeRegExpSpecChars(s: string): string {\n return s.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nexport const getRandomID = (): string => Math.random().toString(16).slice(2);\n\nexport const isExternalLink = (link: string): boolean => {\n return new RegExp(`^(https?:)?//${isBrowser ? `(?!${window.location.host})` : ``}\\\\S+`, 'gi').test(link);\n};\n\n/**\n * Check if the given ReactNode is an element of the specified ReactUI component\n */\nexport const isReactUINode = (componentName: string, node: React.ReactNode): boolean => {\n if (React.isValidElement(node)) {\n return (\n Object.prototype.hasOwnProperty.call(node.type, '__KONTUR_REACT_UI__') &&\n // @ts-ignore\n node.type.__KONTUR_REACT_UI__ === componentName\n );\n }\n\n return false;\n};\n\n/**\n * Проверяет, не является ли переданный аргумент null или undefined и исключает типы null и undefined из типа аргумента\n *\n * @param value Значение, которое нужно проверить и исключить из него типы\n * @returns Возвращает true, если переданный аргумент не является null или undefined иначе false\n */\nexport const isNonNullable = <T>(value: T): value is NonNullable<T> => {\n return value !== null && value !== undefined;\n};\n"]}
1
+ {"version":3,"sources":["utils.ts"],"names":["React","isForwardRef","isBrowser","delay","ms","Promise","resolve","setTimeout","emptyHandler","CancelationError","code","Error","taskWithDelay","task","cancelationToken","reject","then","isFunction","x","isFunctionalComponent","Component","Boolean","prototype","isReactComponent","isClassComponent","isIntrinsicElement","element","type","isRefableElement","escapeRegExpSpecChars","s","replace","getRandomID","Math","random","toString","slice","isExternalLink","link","RegExp","window","location","host","test","isReactUINode","componentName","node","isValidElement","Object","hasOwnProperty","call","__KONTUR_REACT_UI__","isNonNullable","value","undefined","isReactUIComponent","name","child","mergeRefs","refs","forEach","ref","current","extractDataProps","props","dataProps","restWithoutDataProps","entries","map","startsWith"],"mappings":"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","sourcesContent":["import { ReactComponentLike } from 'prop-types';\nimport React from 'react';\nimport { isForwardRef } from 'react-is';\n\nimport { isBrowser } from './client';\n\n// NOTE: Copy-paste from @types/react\nexport type Defaultize<P, D> = P extends any\n ? string extends keyof P\n ? P\n : Pick<P, Exclude<keyof P, keyof D>> &\n Partial<Pick<P, Extract<keyof P, keyof D>>> &\n Partial<Pick<D, Exclude<keyof D, keyof P>>>\n : never;\n\nexport type DefaultizeProps<C, P> = C extends { defaultProps: infer D } ? Defaultize<P, D> : P;\n\nexport const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport const emptyHandler = () => {\n /* noop */\n};\n\nexport class CancelationError extends Error {\n public code = 'CancelationError';\n}\n\nexport function taskWithDelay(task: () => void, ms: number) {\n let cancelationToken: () => void = () => null;\n\n new Promise((resolve, reject) => {\n cancelationToken = reject;\n setTimeout(resolve, ms);\n })\n .then(task)\n .catch(() => null);\n\n return cancelationToken;\n}\n\nexport function isFunction<T>(x: T | Function): x is Function {\n return typeof x === 'function';\n}\n\nexport function isFunctionalComponent(Component: ReactComponentLike): boolean {\n return Boolean(typeof Component === 'function' && !(Component.prototype && Component.prototype.isReactComponent));\n}\n\nexport function isClassComponent(Component: ReactComponentLike): boolean {\n return Boolean(typeof Component === 'function' && Component.prototype && Component.prototype.isReactComponent);\n}\n\nexport function isIntrinsicElement(element: React.ReactElement): boolean {\n return typeof element.type === 'string';\n}\n\nexport function isRefableElement(element: React.ReactElement): boolean {\n return Boolean(isIntrinsicElement(element) || isClassComponent(element.type) || isForwardRef(element));\n}\n\nexport function escapeRegExpSpecChars(s: string): string {\n return s.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nexport const getRandomID = (): string => Math.random().toString(16).slice(2);\n\nexport const isExternalLink = (link: string): boolean => {\n return new RegExp(`^(https?:)?//${isBrowser ? `(?!${window.location.host})` : ``}\\\\S+`, 'gi').test(link);\n};\n\n/**\n * Check if the given ReactNode is an element of the specified ReactUI component\n */\nexport const isReactUINode = (componentName: string, node: React.ReactNode): boolean => {\n if (React.isValidElement(node)) {\n return (\n Object.prototype.hasOwnProperty.call(node.type, '__KONTUR_REACT_UI__') &&\n // @ts-ignore\n node.type.__KONTUR_REACT_UI__ === componentName\n );\n }\n\n return false;\n};\n\n/**\n * Проверяет, не является ли переданный аргумент null или undefined и исключает типы null и undefined из типа аргумента\n *\n * @param value Значение, которое нужно проверить и исключить из него типы\n * @returns Возвращает true, если переданный аргумент не является null или undefined иначе false\n */\nexport const isNonNullable = <T>(value: T): value is NonNullable<T> => {\n return value !== null && value !== undefined;\n};\n\n/**\n * Creates a function that checks if the given `child`\n * is an instance of some component specified by `name`.\n *\n * @param name Component name for which function will be created.\n * @returns A function that checks if the given `child` is an instance of the component specified by `name`.\n */\nexport const isReactUIComponent = <P = any>(name: string) => {\n return (child: React.ReactNode): child is React.ReactElement<P> => {\n // @ts-ignore\n return child?.type?.__KONTUR_REACT_UI__ === name;\n };\n};\n\n/**\n * Merges two or more refs into one.\n *\n * @param refs Array of refs.\n * @returns A single ref composing all the refs passed.\n *\n * @example\n * const SomeComponent = forwardRef((props, ref) => {\n * const localRef = useRef();\n *\n * return <div ref={mergeRefs([localRef, ref])} />;\n * });\n */\nexport function mergeRefs<T = any>(refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (isNonNullable(ref)) {\n return ((ref as React.MutableRefObject<T | null>).current = value);\n }\n });\n };\n}\n\n/**\n * Extracts all data attributes from props and returns them as well as props.\n *\n * @param props Props object to extract data attributes from.\n * @returns Separated data attributes and all other props.\n */\nexport const extractDataProps = <T>(props: T) => {\n const dataProps: Record<string, any> = {};\n const restWithoutDataProps: Record<string, any> = {};\n\n Object.entries(props).map(([name, value]) => {\n if (name.startsWith('data-')) {\n dataProps[name] = value;\n } else {\n restWithoutDataProps[name] = value;\n }\n });\n\n return { dataProps, restWithoutDataProps };\n};\n"]}
package/lib/utils.d.ts CHANGED
@@ -29,3 +29,35 @@ export declare const isReactUINode: (componentName: string, node: React.ReactNod
29
29
  * @returns Возвращает true, если переданный аргумент не является null или undefined иначе false
30
30
  */
31
31
  export declare const isNonNullable: <T>(value: T) => value is NonNullable<T>;
32
+ /**
33
+ * Creates a function that checks if the given `child`
34
+ * is an instance of some component specified by `name`.
35
+ *
36
+ * @param name Component name for which function will be created.
37
+ * @returns A function that checks if the given `child` is an instance of the component specified by `name`.
38
+ */
39
+ export declare const isReactUIComponent: <P = any>(name: string) => (child: React.ReactNode) => child is React.ReactElement<P, string | React.JSXElementConstructor<any>>;
40
+ /**
41
+ * Merges two or more refs into one.
42
+ *
43
+ * @param refs Array of refs.
44
+ * @returns A single ref composing all the refs passed.
45
+ *
46
+ * @example
47
+ * const SomeComponent = forwardRef((props, ref) => {
48
+ * const localRef = useRef();
49
+ *
50
+ * return <div ref={mergeRefs([localRef, ref])} />;
51
+ * });
52
+ */
53
+ export declare function mergeRefs<T = any>(refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>): React.RefCallback<T>;
54
+ /**
55
+ * Extracts all data attributes from props and returns them as well as props.
56
+ *
57
+ * @param props Props object to extract data attributes from.
58
+ * @returns Separated data attributes and all other props.
59
+ */
60
+ export declare const extractDataProps: <T>(props: T) => {
61
+ dataProps: Record<string, any>;
62
+ restWithoutDataProps: Record<string, any>;
63
+ };