@skbkontur/react-ui 6.1.4 → 6.1.6-00fed.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/components/Button/Button.classes.d.ts +8 -0
  3. package/components/Button/Button.classes.js +10 -0
  4. package/components/Button/Button.classes.js.map +1 -0
  5. package/components/Button/Button.mixins.js +1 -1
  6. package/components/Button/Button.mixins.js.map +1 -1
  7. package/components/Button/Button.styles.d.ts +2 -8
  8. package/components/Button/Button.styles.js +3 -9
  9. package/components/Button/Button.styles.js.map +1 -1
  10. package/components/Calendar/Calendar.d.ts +2 -8
  11. package/components/Calendar/Calendar.js +2 -7
  12. package/components/Calendar/Calendar.js.map +1 -1
  13. package/components/Calendar/CalendarDay.js +1 -1
  14. package/components/Calendar/CalendarDay.js.map +1 -1
  15. package/components/Calendar/MonthView.js +1 -1
  16. package/components/Calendar/MonthView.js.map +1 -1
  17. package/components/Calendar/MonthViewModel.js +1 -2
  18. package/components/Calendar/MonthViewModel.js.map +1 -1
  19. package/components/Calendar/tids.d.ts +7 -0
  20. package/components/Calendar/tids.js +8 -0
  21. package/components/Calendar/tids.js.map +1 -0
  22. package/components/FileUploader/FileUploaderFile.d.ts +1 -1
  23. package/components/FileUploader/FileUploaderFile.js +1 -1
  24. package/components/FileUploader/FileUploaderFile.js.map +1 -1
  25. package/components/FxInput/FxInput.d.ts +1 -1
  26. package/components/FxInput/FxInput.js.map +1 -1
  27. package/components/MaskedInput/MaskedInput.d.ts +6 -2
  28. package/components/MaskedInput/MaskedInput.js +10 -126
  29. package/components/MaskedInput/MaskedInput.js.map +1 -1
  30. package/components/MaskedInput/MaskedInputLegacy.d.ts +3 -0
  31. package/components/MaskedInput/MaskedInputLegacy.js +142 -0
  32. package/components/MaskedInput/MaskedInputLegacy.js.map +1 -0
  33. package/components/MaskedInput/index.d.ts +1 -0
  34. package/components/MaskedInput/index.js +1 -0
  35. package/components/MaskedInput/index.js.map +1 -1
  36. package/components/MaskedInputV2/MaskedInputV2.d.ts +62 -0
  37. package/components/MaskedInputV2/MaskedInputV2.helpers.d.ts +9 -0
  38. package/components/MaskedInputV2/MaskedInputV2.helpers.js +17 -0
  39. package/components/MaskedInputV2/MaskedInputV2.helpers.js.map +1 -0
  40. package/components/MaskedInputV2/MaskedInputV2.js +307 -0
  41. package/components/MaskedInputV2/MaskedInputV2.js.map +1 -0
  42. package/components/MaskedInputV2/MaskedInputV2.phone.d.ts +28 -0
  43. package/components/MaskedInputV2/MaskedInputV2.phone.js +38 -0
  44. package/components/MaskedInputV2/MaskedInputV2.phone.js.map +1 -0
  45. package/components/MaskedInputV2/MaskedInputV2.styles.d.ts +7 -0
  46. package/components/MaskedInputV2/MaskedInputV2.styles.js +19 -0
  47. package/components/MaskedInputV2/MaskedInputV2.styles.js.map +1 -0
  48. package/components/MaskedInputV2/index.d.ts +2 -0
  49. package/components/MaskedInputV2/index.js +3 -0
  50. package/components/MaskedInputV2/index.js.map +1 -0
  51. package/components/MaskedInputV2/internal/MaskOverlay.d.ts +19 -0
  52. package/components/MaskedInputV2/internal/MaskOverlay.js +54 -0
  53. package/components/MaskedInputV2/internal/MaskOverlay.js.map +1 -0
  54. package/components/MaskedInputV2/internal/MaskedCore.d.ts +8 -0
  55. package/components/MaskedInputV2/internal/MaskedCore.js +186 -0
  56. package/components/MaskedInputV2/internal/MaskedCore.js.map +1 -0
  57. package/components/MaskedInputV2/internal/MaskedCore.types.d.ts +37 -0
  58. package/components/MaskedInputV2/internal/MaskedCore.types.js +2 -0
  59. package/components/MaskedInputV2/internal/MaskedCore.types.js.map +1 -0
  60. package/components/MaskedInputV2/internal/MaskedInternal.styles.d.ts +15 -0
  61. package/components/MaskedInputV2/internal/MaskedInternal.styles.js +34 -0
  62. package/components/MaskedInputV2/internal/MaskedInternal.styles.js.map +1 -0
  63. package/components/MaskedInputV2/internal/buildSlotMap.d.ts +11 -0
  64. package/components/MaskedInputV2/internal/buildSlotMap.js +37 -0
  65. package/components/MaskedInputV2/internal/buildSlotMap.js.map +1 -0
  66. package/components/MaskedInputV2/internal/computeMaskAlignPadding.d.ts +6 -0
  67. package/components/MaskedInputV2/internal/computeMaskAlignPadding.js +47 -0
  68. package/components/MaskedInputV2/internal/computeMaskAlignPadding.js.map +1 -0
  69. package/components/MaskedInputV2/internal/computePasteMaskedCursor.d.ts +3 -0
  70. package/components/MaskedInputV2/internal/computePasteMaskedCursor.js +11 -0
  71. package/components/MaskedInputV2/internal/computePasteMaskedCursor.js.map +1 -0
  72. package/components/MaskedInputV2/internal/extractRaw.d.ts +10 -0
  73. package/components/MaskedInputV2/internal/extractRaw.js +16 -0
  74. package/components/MaskedInputV2/internal/extractRaw.js.map +1 -0
  75. package/components/MaskedInputV2/internal/findNearestRawLeft.d.ts +10 -0
  76. package/components/MaskedInputV2/internal/findNearestRawLeft.js +18 -0
  77. package/components/MaskedInputV2/internal/findNearestRawLeft.js.map +1 -0
  78. package/components/MaskedInputV2/internal/helpers.d.ts +8 -0
  79. package/components/MaskedInputV2/internal/helpers.js +9 -0
  80. package/components/MaskedInputV2/internal/helpers.js.map +1 -0
  81. package/components/MaskedInputV2/internal/maskedCoreClipboard.d.ts +37 -0
  82. package/components/MaskedInputV2/internal/maskedCoreClipboard.js +52 -0
  83. package/components/MaskedInputV2/internal/maskedCoreClipboard.js.map +1 -0
  84. package/components/MaskedInputV2/internal/maskedCoreDeletion.d.ts +28 -0
  85. package/components/MaskedInputV2/internal/maskedCoreDeletion.js +70 -0
  86. package/components/MaskedInputV2/internal/maskedCoreDeletion.js.map +1 -0
  87. package/components/MaskedInputV2/internal/maskedCoreInputChange.d.ts +38 -0
  88. package/components/MaskedInputV2/internal/maskedCoreInputChange.js +49 -0
  89. package/components/MaskedInputV2/internal/maskedCoreInputChange.js.map +1 -0
  90. package/components/MaskedInputV2/internal/maskedCoreNavigation.d.ts +13 -0
  91. package/components/MaskedInputV2/internal/maskedCoreNavigation.js +79 -0
  92. package/components/MaskedInputV2/internal/maskedCoreNavigation.js.map +1 -0
  93. package/components/MaskedInputV2/internal/measureInputTextWidth.d.ts +2 -0
  94. package/components/MaskedInputV2/internal/measureInputTextWidth.js +30 -0
  95. package/components/MaskedInputV2/internal/measureInputTextWidth.js.map +1 -0
  96. package/components/MaskedInputV2/internal/setMaskInputSelectionRange.d.ts +2 -0
  97. package/components/MaskedInputV2/internal/setMaskInputSelectionRange.js +25 -0
  98. package/components/MaskedInputV2/internal/setMaskInputSelectionRange.js.map +1 -0
  99. package/components/MaskedInputV2/internal/showOverlay.d.ts +3 -0
  100. package/components/MaskedInputV2/internal/showOverlay.js +16 -0
  101. package/components/MaskedInputV2/internal/showOverlay.js.map +1 -0
  102. package/components/MaskedInputV2/internal/stripMaskChars.d.ts +11 -0
  103. package/components/MaskedInputV2/internal/stripMaskChars.js +20 -0
  104. package/components/MaskedInputV2/internal/stripMaskChars.js.map +1 -0
  105. package/components/MaskedInputV2/internal/types.d.ts +74 -0
  106. package/components/MaskedInputV2/internal/types.js +2 -0
  107. package/components/MaskedInputV2/internal/types.js.map +1 -0
  108. package/components/MaskedInputV2/internal/useInputOverflow.d.ts +4 -0
  109. package/components/MaskedInputV2/internal/useInputOverflow.js +34 -0
  110. package/components/MaskedInputV2/internal/useInputOverflow.js.map +1 -0
  111. package/components/MaskedInputV2/internal/useMaskAlignPadding.d.ts +2 -0
  112. package/components/MaskedInputV2/internal/useMaskAlignPadding.js +33 -0
  113. package/components/MaskedInputV2/internal/useMaskAlignPadding.js.map +1 -0
  114. package/components/MaskedInputV2/internal/useMaskEngine.d.ts +42 -0
  115. package/components/MaskedInputV2/internal/useMaskEngine.js +128 -0
  116. package/components/MaskedInputV2/internal/useMaskEngine.js.map +1 -0
  117. package/components/MaskedInputV2/internal/useMaskedCoreHandlers.d.ts +34 -0
  118. package/components/MaskedInputV2/internal/useMaskedCoreHandlers.js +335 -0
  119. package/components/MaskedInputV2/internal/useMaskedCoreHandlers.js.map +1 -0
  120. package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.d.ts +16 -0
  121. package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.js +59 -0
  122. package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.js.map +1 -0
  123. package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.d.ts +20 -0
  124. package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.js +106 -0
  125. package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.js.map +1 -0
  126. package/components/MaskedInputV2/react-imask/imask/controls/input-history.d.ts +17 -0
  127. package/components/MaskedInputV2/react-imask/imask/controls/input-history.js +49 -0
  128. package/components/MaskedInputV2/react-imask/imask/controls/input-history.js.map +1 -0
  129. package/components/MaskedInputV2/react-imask/imask/controls/input.d.ts +95 -0
  130. package/components/MaskedInputV2/react-imask/imask/controls/input.js +420 -0
  131. package/components/MaskedInputV2/react-imask/imask/controls/input.js.map +1 -0
  132. package/components/MaskedInputV2/react-imask/imask/controls/mask-element.d.ts +30 -0
  133. package/components/MaskedInputV2/react-imask/imask/controls/mask-element.js +59 -0
  134. package/components/MaskedInputV2/react-imask/imask/controls/mask-element.js.map +1 -0
  135. package/components/MaskedInputV2/react-imask/imask/core/action-details.d.ts +30 -0
  136. package/components/MaskedInputV2/react-imask/imask/core/action-details.js +100 -0
  137. package/components/MaskedInputV2/react-imask/imask/core/action-details.js.map +1 -0
  138. package/components/MaskedInputV2/react-imask/imask/core/change-details.d.ts +20 -0
  139. package/components/MaskedInputV2/react-imask/imask/core/change-details.js +46 -0
  140. package/components/MaskedInputV2/react-imask/imask/core/change-details.js.map +1 -0
  141. package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.d.ts +21 -0
  142. package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.js +52 -0
  143. package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.js.map +1 -0
  144. package/components/MaskedInputV2/react-imask/imask/core/holder.d.ts +34 -0
  145. package/components/MaskedInputV2/react-imask/imask/core/holder.js +38 -0
  146. package/components/MaskedInputV2/react-imask/imask/core/holder.js.map +1 -0
  147. package/components/MaskedInputV2/react-imask/imask/core/tail-details.d.ts +20 -0
  148. package/components/MaskedInputV2/react-imask/imask/core/tail-details.js +2 -0
  149. package/components/MaskedInputV2/react-imask/imask/core/tail-details.js.map +1 -0
  150. package/components/MaskedInputV2/react-imask/imask/core/utils.d.ts +24 -0
  151. package/components/MaskedInputV2/react-imask/imask/core/utils.js +100 -0
  152. package/components/MaskedInputV2/react-imask/imask/core/utils.js.map +1 -0
  153. package/components/MaskedInputV2/react-imask/imask/imask.d.ts +5 -0
  154. package/components/MaskedInputV2/react-imask/imask/imask.js +7 -0
  155. package/components/MaskedInputV2/react-imask/imask/imask.js.map +1 -0
  156. package/components/MaskedInputV2/react-imask/imask/index.d.ts +17 -0
  157. package/components/MaskedInputV2/react-imask/imask/index.js +16 -0
  158. package/components/MaskedInputV2/react-imask/imask/index.js.map +1 -0
  159. package/components/MaskedInputV2/react-imask/imask/masked/base.d.ts +114 -0
  160. package/components/MaskedInputV2/react-imask/imask/masked/base.js +411 -0
  161. package/components/MaskedInputV2/react-imask/imask/masked/base.js.map +1 -0
  162. package/components/MaskedInputV2/react-imask/imask/masked/create.d.ts +14 -0
  163. package/components/MaskedInputV2/react-imask/imask/masked/create.js +11 -0
  164. package/components/MaskedInputV2/react-imask/imask/masked/create.js.map +1 -0
  165. package/components/MaskedInputV2/react-imask/imask/masked/factory.d.ts +62 -0
  166. package/components/MaskedInputV2/react-imask/imask/masked/factory.js +107 -0
  167. package/components/MaskedInputV2/react-imask/imask/masked/factory.js.map +1 -0
  168. package/components/MaskedInputV2/react-imask/imask/masked/pattern.d.ts +101 -0
  169. package/components/MaskedInputV2/react-imask/imask/masked/pattern.js +549 -0
  170. package/components/MaskedInputV2/react-imask/imask/masked/pattern.js.map +1 -0
  171. package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.d.ts +30 -0
  172. package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.js +2 -0
  173. package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.js.map +1 -0
  174. package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.d.ts +20 -0
  175. package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.js +182 -0
  176. package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.js.map +1 -0
  177. package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.d.ts +31 -0
  178. package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.js +163 -0
  179. package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.js.map +1 -0
  180. package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.d.ts +42 -0
  181. package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.js +158 -0
  182. package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.js.map +1 -0
  183. package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.d.ts +56 -0
  184. package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.js +185 -0
  185. package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.js.map +1 -0
  186. package/components/MaskedInputV2/react-imask/imask/masked/regexp.d.ts +17 -0
  187. package/components/MaskedInputV2/react-imask/imask/masked/regexp.js +36 -0
  188. package/components/MaskedInputV2/react-imask/imask/masked/regexp.js.map +1 -0
  189. package/components/MaskedInputV2/react-imask/index.d.ts +3 -0
  190. package/components/MaskedInputV2/react-imask/index.js +4 -0
  191. package/components/MaskedInputV2/react-imask/index.js.map +1 -0
  192. package/components/MaskedInputV2/react-imask/input.d.ts +8 -0
  193. package/components/MaskedInputV2/react-imask/input.js +35 -0
  194. package/components/MaskedInputV2/react-imask/input.js.map +1 -0
  195. package/components/MaskedInputV2/react-imask/mixin.d.ts +31 -0
  196. package/components/MaskedInputV2/react-imask/mixin.js +246 -0
  197. package/components/MaskedInputV2/react-imask/mixin.js.map +1 -0
  198. package/components/MenuItem/MenuItem.mixins.d.ts +1 -0
  199. package/components/MenuItem/MenuItem.mixins.js +6 -1
  200. package/components/MenuItem/MenuItem.mixins.js.map +1 -1
  201. package/components/MenuItem/MenuItem.styles.d.ts +2 -1
  202. package/components/MenuItem/MenuItem.styles.js +2 -7
  203. package/components/MenuItem/MenuItem.styles.js.map +1 -1
  204. package/components/MiniModal/MiniModal.d.ts +2 -16
  205. package/components/MiniModal/MiniModal.js +2 -16
  206. package/components/MiniModal/MiniModal.js.map +1 -1
  207. package/components/MiniModal/MiniModalBody.js +1 -1
  208. package/components/MiniModal/MiniModalBody.js.map +1 -1
  209. package/components/MiniModal/MiniModalFooter.js +1 -1
  210. package/components/MiniModal/MiniModalFooter.js.map +1 -1
  211. package/components/MiniModal/MiniModalHeader.js +1 -1
  212. package/components/MiniModal/MiniModalHeader.js.map +1 -1
  213. package/components/MiniModal/MiniModalIndent.js +1 -1
  214. package/components/MiniModal/MiniModalIndent.js.map +1 -1
  215. package/components/MiniModal/tids.d.ts +7 -0
  216. package/components/MiniModal/tids.js +8 -0
  217. package/components/MiniModal/tids.js.map +1 -0
  218. package/components/Modal/Modal.constants.d.ts +9 -0
  219. package/components/Modal/Modal.constants.js +10 -0
  220. package/components/Modal/Modal.constants.js.map +1 -0
  221. package/components/Modal/Modal.d.ts +2 -15
  222. package/components/Modal/Modal.js +2 -14
  223. package/components/Modal/Modal.js.map +1 -1
  224. package/components/Modal/ModalBody.js +1 -1
  225. package/components/Modal/ModalBody.js.map +1 -1
  226. package/components/Modal/ModalClose.js +1 -1
  227. package/components/Modal/ModalClose.js.map +1 -1
  228. package/components/Switcher/Switcher.d.ts +3 -3
  229. package/components/Switcher/Switcher.js +1 -1
  230. package/components/Switcher/Switcher.js.map +1 -1
  231. package/components/Tabs/Tab.d.ts +4 -5
  232. package/components/Tabs/Tab.js +0 -1
  233. package/components/Tabs/Tab.js.map +1 -1
  234. package/components/Tabs/Tabs.d.ts +2 -2
  235. package/components/Tabs/Tabs.js +1 -1
  236. package/components/Tabs/Tabs.js.map +1 -1
  237. package/components/Toggle/Toggle.classes.d.ts +8 -0
  238. package/components/Toggle/Toggle.classes.js +10 -0
  239. package/components/Toggle/Toggle.classes.js.map +1 -0
  240. package/components/Toggle/Toggle.mixins.js +1 -1
  241. package/components/Toggle/Toggle.mixins.js.map +1 -1
  242. package/components/Toggle/Toggle.styles.d.ts +2 -8
  243. package/components/Toggle/Toggle.styles.js +3 -9
  244. package/components/Toggle/Toggle.styles.js.map +1 -1
  245. package/components/Token/Token.d.ts +1 -1
  246. package/components/Token/Token.js +1 -1
  247. package/components/Token/Token.js.map +1 -1
  248. package/components/TokenInput/TokenInput.d.ts +1 -1
  249. package/components/TokenInput/TokenInput.js +1 -1
  250. package/components/TokenInput/TokenInput.js.map +1 -1
  251. package/lib/date/InternalDateValidator.js +1 -2
  252. package/lib/date/InternalDateValidator.js.map +1 -1
  253. package/lib/events/keyboard/KeyboardEventCodes.d.ts +2 -0
  254. package/lib/events/keyboard/KeyboardEventCodes.js +2 -0
  255. package/lib/events/keyboard/KeyboardEventCodes.js.map +1 -1
  256. package/lib/events/keyboard/KeyboardMapKeys.js +2 -0
  257. package/lib/events/keyboard/KeyboardMapKeys.js.map +1 -1
  258. package/lib/events/keyboard/identifiers.d.ts +2 -0
  259. package/lib/events/keyboard/identifiers.js +6 -0
  260. package/lib/events/keyboard/identifiers.js.map +1 -1
  261. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  262. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +1 -0
  263. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  264. package/package.json +4 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.constants.js","sourceRoot":"","sources":["Modal.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,iBAAiB;IAC5B,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,aAAa;CACZ,CAAC;AAEX,MAAM,CAAC,IAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;CACF,CAAC","sourcesContent":["export const ModalDataTids = {\n container: 'modal-container',\n content: 'modal-content',\n close: 'modal-close',\n} as const;\n\nexport const ModalZIndexPriority = {\n Cross: 2,\n Content: 1,\n} as const;\n"]}
@@ -3,9 +3,11 @@ import React from 'react';
3
3
  import type { CommonProps } from '../../internal/CommonWrapper/index.js';
4
4
  import { type TGetRootNode } from '../../lib/rootNode/index.js';
5
5
  import type { ThemeIn } from '../../lib/theming/Theme.js';
6
+ import { ModalDataTids, ModalZIndexPriority } from './Modal.constants.js';
6
7
  import { ModalBody } from './ModalBody.js';
7
8
  import { ModalFooter } from './ModalFooter.js';
8
9
  import { ModalHeader } from './ModalHeader.js';
10
+ export { ModalDataTids, ModalZIndexPriority };
9
11
  export type MobileModalAppearance = 'auto' | 'top' | 'center' | 'bottom' | 'fullscreen-spacing' | 'fullscreen';
10
12
  export interface ModalProps extends CommonProps, Pick<HTMLAttributes<unknown>, 'role'>, Pick<AriaAttributes, 'aria-label' | 'aria-labelledby'> {
11
13
  /** Отключает событие `onClose` и блокирует кнопку закрытия модального окна. */
@@ -46,22 +48,8 @@ export interface ModalState {
46
48
  hasFooter: boolean;
47
49
  hasPanel: boolean;
48
50
  }
49
- export declare const ModalDataTids: {
50
- readonly container: "modal-container";
51
- readonly content: "modal-content";
52
- readonly close: "modal-close";
53
- };
54
- export declare const ModalZIndexPriority: {
55
- readonly Cross: 2;
56
- readonly Content: 1;
57
- };
58
51
  type DefaultProps = Required<Pick<ModalProps, 'disableFocusLock' | 'role' | 'mobileAppearance'>>;
59
52
  /** Модальное окно — это эмуляция диалогового окна браузера, оно появляется поверх страницы в ответ на действия пользователя и блокирует доступ к основному содержимому страницы.
60
- *
61
- * Составной компонент, включает в себя:
62
- * - «шапку» [Modal.Header](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalheader--docs), состоящую из заголовка и крестика закрытия окна;
63
- * - контент-зону [Modal.Body](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalbody--docs);
64
- * - футер [Modal.Footer](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalfooter--docs).
65
53
  */
66
54
  export declare class Modal extends React.Component<ModalProps, ModalState> {
67
55
  static __KONTUR_REACT_UI__: string;
@@ -102,4 +90,3 @@ export declare class Modal extends React.Component<ModalProps, ModalState> {
102
90
  private setHasFooter;
103
91
  private setHasPanel;
104
92
  }
105
- export {};
@@ -49,28 +49,16 @@ import { catchUnreachableWarning } from '../../lib/typeGuards.js';
49
49
  import { isNonNullable } from '../../lib/utils.js';
50
50
  import { ResponsiveLayout } from '../ResponsiveLayout/index.js';
51
51
  import { getModalTheme } from './getModalTheme.js';
52
+ import { ModalDataTids, ModalZIndexPriority } from './Modal.constants.js';
52
53
  import { getStyles } from './Modal.styles.js';
53
54
  import { ModalBody } from './ModalBody.js';
54
55
  import { ModalClose } from './ModalClose.js';
55
56
  import { ModalContext } from './ModalContext.js';
56
57
  import { ModalFooter } from './ModalFooter.js';
57
58
  import { ModalHeader } from './ModalHeader.js';
59
+ export { ModalDataTids, ModalZIndexPriority };
58
60
  var mountedModalsCount = 0;
59
- export var ModalDataTids = {
60
- container: 'modal-container',
61
- content: 'modal-content',
62
- close: 'modal-close',
63
- };
64
- export var ModalZIndexPriority = {
65
- Cross: 2,
66
- Content: 1,
67
- };
68
61
  /** Модальное окно — это эмуляция диалогового окна браузера, оно появляется поверх страницы в ответ на действия пользователя и блокирует доступ к основному содержимому страницы.
69
- *
70
- * Составной компонент, включает в себя:
71
- * - «шапку» [Modal.Header](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalheader--docs), состоящую из заголовка и крестика закрытия окна;
72
- * - контент-зону [Modal.Body](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalbody--docs);
73
- * - футер [Modal.Footer](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalfooter--docs).
74
62
  */
75
63
  var Modal = /** @class */ (function (_super) {
76
64
  __extends(Modal, _super);
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["Modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport throttle from 'lodash.throttle';\nimport type { AriaAttributes, HTMLAttributes, JSX } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll/index.js';\nimport { FocusLock } from '../../internal/react-focus-lock/index.js';\nimport { RenderContainer } from '../../internal/RenderContainer/index.js';\nimport { ResizeDetector } from '../../internal/ResizeDetector/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { ModalStack } from '../../lib/ModalStack.js';\nimport type { ModalStackSubscription } from '../../lib/ModalStack.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport { type TGetRootNode, type TSetRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { catchUnreachableWarning } from '../../lib/typeGuards.js';\nimport { isNonNullable } from '../../lib/utils.js';\nimport { ResponsiveLayout } from '../ResponsiveLayout/index.js';\nimport { getModalTheme } from './getModalTheme.js';\nimport { getStyles } from './Modal.styles.js';\nimport { ModalBody } from './ModalBody.js';\nimport { ModalClose } from './ModalClose.js';\nimport { ModalContext } from './ModalContext.js';\nimport type { ModalContextProps } from './ModalContext.js';\nimport { ModalFooter } from './ModalFooter.js';\nimport { ModalHeader } from './ModalHeader.js';\n\nlet mountedModalsCount = 0;\n\nexport type MobileModalAppearance = 'auto' | 'top' | 'center' | 'bottom' | 'fullscreen-spacing' | 'fullscreen';\n\nexport interface ModalProps\n extends CommonProps, Pick<HTMLAttributes<unknown>, 'role'>, Pick<AriaAttributes, 'aria-label' | 'aria-labelledby'> {\n /** Отключает событие `onClose` и блокирует кнопку закрытия модального окна. */\n disableClose?: boolean;\n\n /** Выравнивает модальное окно по верху страницы. */\n alignTop?: boolean;\n\n /** Оставляет модальное окно открытым, когда пользователь кликнул на фон вне модального окна. */\n ignoreBackgroundClick?: boolean;\n\n /** Скрывает крестик для закрытия модального окна. */\n noClose?: boolean;\n\n /** Ширина модального окна. */\n width?: number | string;\n\n /** Событие закрытия модального окна. Вызывается при клике на фон или крестик, и при нажатии Esc. */\n onClose?: () => void;\n\n /** Выключает ограничение на фокус. По умолчанию модальное окно не позволяет установить фокус за переделами своего содержимого.*/\n disableFocusLock?: boolean;\n\n /** Объект с переменными темы. Он будет объединён с темой из `<ThemeContext>`.\n *\n * Общие переменные темы и переменные для модального окна (с префиксом modal) смотрите на странице [ThemePlayground](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_information-themeplayground--docs).\n */\n theme?: ThemeIn;\n\n /** Задаёт внешний вид модального окна в мобильном режиме. Работает с версией темы >= 5_2.\n * - `\"auto\"` — если футера нет, модальное окно распологается в центре экрана, если есть — модальное окно растягивается на весь экран с отступами и закругленными краями.\n * - `\"top\"` — модальное окно располагается сверху независимо от наличия футера.\n * - `\"center\"` — модальное окно располагается в центре независимо от наличия футера.\n * - `\"bottom\"` — модальное окно располагается снизу независимо от наличия футера.\n * - `\"fullscreen-spacing\"` — модальное окно растягивается на весь экран с отступами и закругленными краями.\n * - `\"fullscreen\"` — модальное окно растягивается на весь экран.\n * @default auto\n */\n mobileAppearance?: MobileModalAppearance;\n}\n\nexport interface ModalState {\n stackPosition: number;\n hasBackground: boolean;\n horizontalScroll: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\nexport const ModalDataTids = {\n container: 'modal-container',\n content: 'modal-content',\n close: 'modal-close',\n} as const;\n\nexport const ModalZIndexPriority = {\n Cross: 2,\n Content: 1,\n} as const;\n\ntype DefaultProps = Required<Pick<ModalProps, 'disableFocusLock' | 'role' | 'mobileAppearance'>>;\n\n/** Модальное окно — это эмуляция диалогового окна браузера, оно появляется поверх страницы в ответ на действия пользователя и блокирует доступ к основному содержимому страницы.\n *\n * Составной компонент, включает в себя:\n * - «шапку» [Modal.Header](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalheader--docs), состоящую из заголовка и крестика закрытия окна;\n * - контент-зону [Modal.Body](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalbody--docs);\n * - футер [Modal.Footer](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalfooter--docs).\n */\n@withRenderEnvironment\n@rootNode\nexport class Modal extends React.Component<ModalProps, ModalState> {\n public static __KONTUR_REACT_UI__ = 'Modal';\n public static displayName = 'Modal';\n\n public static Header = ModalHeader;\n public static Body = ModalBody;\n public static Footer = ModalFooter;\n\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public static defaultProps: DefaultProps = {\n disableFocusLock: false,\n role: 'dialog',\n mobileAppearance: 'auto',\n };\n\n private getProps = createPropsGetter(Modal.defaultProps);\n\n public state: ModalState = {\n stackPosition: 0,\n hasBackground: true,\n horizontalScroll: false,\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private containerNode: HTMLDivElement | null = null;\n private mouseDownTarget: EventTarget | null = null;\n private mouseUpTarget: EventTarget | null = null;\n\n public componentDidMount() {\n this.stackSubscription = ModalStack.add(this, this.handleStackChange, this.globalObject);\n\n if (mountedModalsCount === 0) {\n this.globalObject.addEventListener?.('resize', this.throttledCheckHorizontalScroll);\n }\n\n mountedModalsCount++;\n this.globalObject.addEventListener?.('keydown', this.handleKeyDown);\n this.checkHorizontalScrollAppearance();\n\n if (this.containerNode) {\n this.containerNode.addEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public componentWillUnmount() {\n if (--mountedModalsCount === 0) {\n this.globalObject.removeEventListener?.('resize', this.throttledCheckHorizontalScroll);\n LayoutEvents.emit();\n }\n\n this.globalObject.removeEventListener?.('keydown', this.handleKeyDown);\n if (isNonNullable(this.stackSubscription)) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this, this.globalObject);\n\n if (this.containerNode) {\n this.containerNode.removeEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public render(): JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getModalTheme(theme, this.props.theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private getMobileContainerClassName = () => {\n const mobileAppearance = this.getProps().mobileAppearance;\n switch (mobileAppearance) {\n case 'fullscreen-spacing':\n return;\n case 'auto':\n if (this.state.hasFooter) {\n return;\n }\n return [this.styles.mobileContainerSmall5_2()];\n case 'fullscreen':\n return [this.styles.mobileContainerFullscreen5_2()];\n case 'center':\n return [this.styles.mobileContainerSmall5_2()];\n case 'bottom':\n return [this.styles.mobileContainerSmall5_2(), this.styles.mobileContainerSmallBottom5_2()];\n case 'top':\n return [this.styles.mobileContainerSmall5_2(), this.styles.mobileContainerSmallTop5_2()];\n default:\n return catchUnreachableWarning(mobileAppearance, false);\n }\n };\n\n private renderMain() {\n const {\n noClose,\n disableClose,\n width,\n mobileAppearance,\n alignTop,\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n } = this.props;\n const { hasHeader, hasFooter, hasPanel } = this.state;\n const { role, disableFocusLock } = this.getProps();\n\n const modalContextProps: ModalContextProps = {\n hasHeader,\n horizontalScroll: this.state.horizontalScroll,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n mobileOnFullScreen: this.props.mobileAppearance === 'fullscreen',\n };\n if (!noClose) {\n modalContextProps.close = {\n disableClose,\n requestClose: this.requestClose,\n };\n }\n if (!hasFooter || hasPanel) {\n modalContextProps.additionalPadding = true;\n }\n\n const style: { width?: number | string } = {};\n const containerStyle: { width?: number | string } = {};\n\n if (width) {\n style.width = width;\n } else {\n containerStyle.width = 'auto';\n }\n\n const getMobileCenterContainerClassNames = () => {\n return this.cx(this.styles.mobileCenterContainer(this.theme), {\n [this.styles.mobileCenterContainerBig(this.theme)]:\n mobileAppearance === 'fullscreen-spacing' || (mobileAppearance === 'auto' && hasFooter),\n [this.styles.mobileCenterContainerFullscreen()]: mobileAppearance === 'fullscreen',\n });\n };\n\n return (\n <RenderContainer>\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <ZIndex priority={'Modal'} className={this.styles.root()}>\n <HideBodyVerticalScroll />\n {this.state.hasBackground && (\n <div\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n className={this.styles.bg(this.theme)}\n />\n )}\n <ResponsiveLayout>\n {({ isMobile }) => (\n <div\n aria-labelledby={ariaLabelledby}\n ref={this.refContainer}\n className={this.cx(\n this.styles.container(),\n !isMobile && this.styles.containerDesktop(),\n isMobile && this.getMobileContainerClassName(),\n )}\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n data-tid={ModalDataTids.container}\n >\n <div\n aria-modal\n aria-label={ariaLabel}\n role={role}\n className={this.cx({\n [this.styles.centerContainer()]: true,\n [getMobileCenterContainerClassNames()]: isMobile,\n [this.styles.alignTop()]: Boolean(alignTop),\n })}\n style={isMobile ? undefined : containerStyle}\n data-tid={ModalDataTids.content}\n >\n <div\n className={this.cx({\n [this.styles.window(this.theme)]: true,\n [this.styles.mobileWindow()]: isMobile,\n [this.styles.mobileWindowFullscreen()]: isMobile && mobileAppearance === 'fullscreen',\n })}\n style={isMobile ? undefined : style}\n >\n <ResizeDetector onResize={this.handleResize} fullHeight={isMobile}>\n <FocusLock\n disabled={disableFocusLock}\n autoFocus={false}\n className={this.cx({ [this.styles.columnFlexContainer()]: isMobile }, 'focus-lock-container')}\n >\n {!hasHeader && !noClose && (\n <ZIndex\n priority={ModalZIndexPriority.Cross}\n className={this.cx({\n [this.styles.closeWrapper(this.theme)]: true,\n [this.styles.mobileCloseWrapper(this.theme)]: isMobile,\n })}\n >\n <ModalClose\n className={this.cx({\n [this.styles.mobileCloseWithoutHeader(this.theme)]: isMobile && !this.state.hasHeader,\n })}\n requestClose={this.requestClose}\n disableClose={disableClose}\n />\n </ZIndex>\n )}\n <ModalContext.Provider value={modalContextProps}>{children}</ModalContext.Provider>\n </FocusLock>\n </ResizeDetector>\n </div>\n </div>\n </div>\n )}\n </ResponsiveLayout>\n </ZIndex>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private refContainer = (center: HTMLDivElement | null) => {\n this.containerNode = center;\n };\n\n private handleStackChange = (stack: readonly React.Component[]) => {\n this.setState({\n stackPosition: stack.indexOf(this),\n hasBackground: ModalStack.isBlocking(this, this.globalObject),\n });\n };\n\n private handleContainerMouseDown = (event: React.MouseEvent) => {\n this.mouseDownTarget = event.target;\n };\n\n private handleContainerMouseUp = (event: React.MouseEvent) => {\n this.mouseUpTarget = event.target;\n };\n\n private handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.props.ignoreBackgroundClick) {\n const { target, currentTarget } = event;\n if (target === currentTarget && this.mouseDownTarget === currentTarget && this.mouseUpTarget === currentTarget) {\n this.requestClose();\n }\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n e.stopPropagation();\n this.requestClose();\n }\n };\n\n private checkHorizontalScrollAppearance = () => {\n let hasScroll = false;\n\n if (this.containerNode) {\n const containerClientWidth = this.containerNode.clientWidth;\n const containerScrollWidth = this.containerNode.scrollWidth;\n hasScroll = containerClientWidth < containerScrollWidth;\n }\n if (hasScroll && !this.state.horizontalScroll) {\n this.setState({ horizontalScroll: true });\n } else if (this.state.horizontalScroll) {\n this.setState({ horizontalScroll: false });\n }\n };\n\n private throttledCheckHorizontalScroll = throttle(this.checkHorizontalScrollAppearance, 100);\n\n private handleResize = () => {\n LayoutEvents.emit();\n };\n\n private setHasHeader = (hasHeader: boolean) => {\n this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter: boolean) => {\n this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel: boolean) => {\n this.setState({ hasPanel });\n };\n}\n"]}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["Modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport throttle from 'lodash.throttle';\nimport type { AriaAttributes, HTMLAttributes, JSX } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll/index.js';\nimport { FocusLock } from '../../internal/react-focus-lock/index.js';\nimport { RenderContainer } from '../../internal/RenderContainer/index.js';\nimport { ResizeDetector } from '../../internal/ResizeDetector/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { ModalStack } from '../../lib/ModalStack.js';\nimport type { ModalStackSubscription } from '../../lib/ModalStack.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport { type TGetRootNode, type TSetRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { catchUnreachableWarning } from '../../lib/typeGuards.js';\nimport { isNonNullable } from '../../lib/utils.js';\nimport { ResponsiveLayout } from '../ResponsiveLayout/index.js';\nimport { getModalTheme } from './getModalTheme.js';\nimport { ModalDataTids, ModalZIndexPriority } from './Modal.constants.js';\nimport { getStyles } from './Modal.styles.js';\nimport { ModalBody } from './ModalBody.js';\nimport { ModalClose } from './ModalClose.js';\nimport { ModalContext } from './ModalContext.js';\nimport type { ModalContextProps } from './ModalContext.js';\nimport { ModalFooter } from './ModalFooter.js';\nimport { ModalHeader } from './ModalHeader.js';\n\nexport { ModalDataTids, ModalZIndexPriority };\n\nlet mountedModalsCount = 0;\n\nexport type MobileModalAppearance = 'auto' | 'top' | 'center' | 'bottom' | 'fullscreen-spacing' | 'fullscreen';\n\nexport interface ModalProps\n extends CommonProps, Pick<HTMLAttributes<unknown>, 'role'>, Pick<AriaAttributes, 'aria-label' | 'aria-labelledby'> {\n /** Отключает событие `onClose` и блокирует кнопку закрытия модального окна. */\n disableClose?: boolean;\n\n /** Выравнивает модальное окно по верху страницы. */\n alignTop?: boolean;\n\n /** Оставляет модальное окно открытым, когда пользователь кликнул на фон вне модального окна. */\n ignoreBackgroundClick?: boolean;\n\n /** Скрывает крестик для закрытия модального окна. */\n noClose?: boolean;\n\n /** Ширина модального окна. */\n width?: number | string;\n\n /** Событие закрытия модального окна. Вызывается при клике на фон или крестик, и при нажатии Esc. */\n onClose?: () => void;\n\n /** Выключает ограничение на фокус. По умолчанию модальное окно не позволяет установить фокус за переделами своего содержимого.*/\n disableFocusLock?: boolean;\n\n /** Объект с переменными темы. Он будет объединён с темой из `<ThemeContext>`.\n *\n * Общие переменные темы и переменные для модального окна (с префиксом modal) смотрите на странице [ThemePlayground](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_information-themeplayground--docs).\n */\n theme?: ThemeIn;\n\n /** Задаёт внешний вид модального окна в мобильном режиме. Работает с версией темы >= 5_2.\n * - `\"auto\"` — если футера нет, модальное окно распологается в центре экрана, если есть — модальное окно растягивается на весь экран с отступами и закругленными краями.\n * - `\"top\"` — модальное окно располагается сверху независимо от наличия футера.\n * - `\"center\"` — модальное окно располагается в центре независимо от наличия футера.\n * - `\"bottom\"` — модальное окно располагается снизу независимо от наличия футера.\n * - `\"fullscreen-spacing\"` — модальное окно растягивается на весь экран с отступами и закругленными краями.\n * - `\"fullscreen\"` — модальное окно растягивается на весь экран.\n * @default auto\n */\n mobileAppearance?: MobileModalAppearance;\n}\n\nexport interface ModalState {\n stackPosition: number;\n hasBackground: boolean;\n horizontalScroll: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\ntype DefaultProps = Required<Pick<ModalProps, 'disableFocusLock' | 'role' | 'mobileAppearance'>>;\n\n/** Модальное окно — это эмуляция диалогового окна браузера, оно появляется поверх страницы в ответ на действия пользователя и блокирует доступ к основному содержимому страницы.\n */\n@withRenderEnvironment\n@rootNode\nexport class Modal extends React.Component<ModalProps, ModalState> {\n public static __KONTUR_REACT_UI__ = 'Modal';\n public static displayName = 'Modal';\n\n public static Header = ModalHeader;\n public static Body = ModalBody;\n public static Footer = ModalFooter;\n\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public static defaultProps: DefaultProps = {\n disableFocusLock: false,\n role: 'dialog',\n mobileAppearance: 'auto',\n };\n\n private getProps = createPropsGetter(Modal.defaultProps);\n\n public state: ModalState = {\n stackPosition: 0,\n hasBackground: true,\n horizontalScroll: false,\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private containerNode: HTMLDivElement | null = null;\n private mouseDownTarget: EventTarget | null = null;\n private mouseUpTarget: EventTarget | null = null;\n\n public componentDidMount() {\n this.stackSubscription = ModalStack.add(this, this.handleStackChange, this.globalObject);\n\n if (mountedModalsCount === 0) {\n this.globalObject.addEventListener?.('resize', this.throttledCheckHorizontalScroll);\n }\n\n mountedModalsCount++;\n this.globalObject.addEventListener?.('keydown', this.handleKeyDown);\n this.checkHorizontalScrollAppearance();\n\n if (this.containerNode) {\n this.containerNode.addEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public componentWillUnmount() {\n if (--mountedModalsCount === 0) {\n this.globalObject.removeEventListener?.('resize', this.throttledCheckHorizontalScroll);\n LayoutEvents.emit();\n }\n\n this.globalObject.removeEventListener?.('keydown', this.handleKeyDown);\n if (isNonNullable(this.stackSubscription)) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this, this.globalObject);\n\n if (this.containerNode) {\n this.containerNode.removeEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public render(): JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getModalTheme(theme, this.props.theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private getMobileContainerClassName = () => {\n const mobileAppearance = this.getProps().mobileAppearance;\n switch (mobileAppearance) {\n case 'fullscreen-spacing':\n return;\n case 'auto':\n if (this.state.hasFooter) {\n return;\n }\n return [this.styles.mobileContainerSmall5_2()];\n case 'fullscreen':\n return [this.styles.mobileContainerFullscreen5_2()];\n case 'center':\n return [this.styles.mobileContainerSmall5_2()];\n case 'bottom':\n return [this.styles.mobileContainerSmall5_2(), this.styles.mobileContainerSmallBottom5_2()];\n case 'top':\n return [this.styles.mobileContainerSmall5_2(), this.styles.mobileContainerSmallTop5_2()];\n default:\n return catchUnreachableWarning(mobileAppearance, false);\n }\n };\n\n private renderMain() {\n const {\n noClose,\n disableClose,\n width,\n mobileAppearance,\n alignTop,\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n } = this.props;\n const { hasHeader, hasFooter, hasPanel } = this.state;\n const { role, disableFocusLock } = this.getProps();\n\n const modalContextProps: ModalContextProps = {\n hasHeader,\n horizontalScroll: this.state.horizontalScroll,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n mobileOnFullScreen: this.props.mobileAppearance === 'fullscreen',\n };\n if (!noClose) {\n modalContextProps.close = {\n disableClose,\n requestClose: this.requestClose,\n };\n }\n if (!hasFooter || hasPanel) {\n modalContextProps.additionalPadding = true;\n }\n\n const style: { width?: number | string } = {};\n const containerStyle: { width?: number | string } = {};\n\n if (width) {\n style.width = width;\n } else {\n containerStyle.width = 'auto';\n }\n\n const getMobileCenterContainerClassNames = () => {\n return this.cx(this.styles.mobileCenterContainer(this.theme), {\n [this.styles.mobileCenterContainerBig(this.theme)]:\n mobileAppearance === 'fullscreen-spacing' || (mobileAppearance === 'auto' && hasFooter),\n [this.styles.mobileCenterContainerFullscreen()]: mobileAppearance === 'fullscreen',\n });\n };\n\n return (\n <RenderContainer>\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <ZIndex priority={'Modal'} className={this.styles.root()}>\n <HideBodyVerticalScroll />\n {this.state.hasBackground && (\n <div\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n className={this.styles.bg(this.theme)}\n />\n )}\n <ResponsiveLayout>\n {({ isMobile }) => (\n <div\n aria-labelledby={ariaLabelledby}\n ref={this.refContainer}\n className={this.cx(\n this.styles.container(),\n !isMobile && this.styles.containerDesktop(),\n isMobile && this.getMobileContainerClassName(),\n )}\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n data-tid={ModalDataTids.container}\n >\n <div\n aria-modal\n aria-label={ariaLabel}\n role={role}\n className={this.cx({\n [this.styles.centerContainer()]: true,\n [getMobileCenterContainerClassNames()]: isMobile,\n [this.styles.alignTop()]: Boolean(alignTop),\n })}\n style={isMobile ? undefined : containerStyle}\n data-tid={ModalDataTids.content}\n >\n <div\n className={this.cx({\n [this.styles.window(this.theme)]: true,\n [this.styles.mobileWindow()]: isMobile,\n [this.styles.mobileWindowFullscreen()]: isMobile && mobileAppearance === 'fullscreen',\n })}\n style={isMobile ? undefined : style}\n >\n <ResizeDetector onResize={this.handleResize} fullHeight={isMobile}>\n <FocusLock\n disabled={disableFocusLock}\n autoFocus={false}\n className={this.cx({ [this.styles.columnFlexContainer()]: isMobile }, 'focus-lock-container')}\n >\n {!hasHeader && !noClose && (\n <ZIndex\n priority={ModalZIndexPriority.Cross}\n className={this.cx({\n [this.styles.closeWrapper(this.theme)]: true,\n [this.styles.mobileCloseWrapper(this.theme)]: isMobile,\n })}\n >\n <ModalClose\n className={this.cx({\n [this.styles.mobileCloseWithoutHeader(this.theme)]: isMobile && !this.state.hasHeader,\n })}\n requestClose={this.requestClose}\n disableClose={disableClose}\n />\n </ZIndex>\n )}\n <ModalContext.Provider value={modalContextProps}>{children}</ModalContext.Provider>\n </FocusLock>\n </ResizeDetector>\n </div>\n </div>\n </div>\n )}\n </ResponsiveLayout>\n </ZIndex>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private refContainer = (center: HTMLDivElement | null) => {\n this.containerNode = center;\n };\n\n private handleStackChange = (stack: readonly React.Component[]) => {\n this.setState({\n stackPosition: stack.indexOf(this),\n hasBackground: ModalStack.isBlocking(this, this.globalObject),\n });\n };\n\n private handleContainerMouseDown = (event: React.MouseEvent) => {\n this.mouseDownTarget = event.target;\n };\n\n private handleContainerMouseUp = (event: React.MouseEvent) => {\n this.mouseUpTarget = event.target;\n };\n\n private handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.props.ignoreBackgroundClick) {\n const { target, currentTarget } = event;\n if (target === currentTarget && this.mouseDownTarget === currentTarget && this.mouseUpTarget === currentTarget) {\n this.requestClose();\n }\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n e.stopPropagation();\n this.requestClose();\n }\n };\n\n private checkHorizontalScrollAppearance = () => {\n let hasScroll = false;\n\n if (this.containerNode) {\n const containerClientWidth = this.containerNode.clientWidth;\n const containerScrollWidth = this.containerNode.scrollWidth;\n hasScroll = containerClientWidth < containerScrollWidth;\n }\n if (hasScroll && !this.state.horizontalScroll) {\n this.setState({ horizontalScroll: true });\n } else if (this.state.horizontalScroll) {\n this.setState({ horizontalScroll: false });\n }\n };\n\n private throttledCheckHorizontalScroll = throttle(this.checkHorizontalScrollAppearance, 100);\n\n private handleResize = () => {\n LayoutEvents.emit();\n };\n\n private setHasHeader = (hasHeader: boolean) => {\n this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter: boolean) => {\n this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel: boolean) => {\n this.setState({ hasPanel });\n };\n}\n"]}
@@ -40,7 +40,7 @@ import { rootNode } from '../../lib/rootNode/index.js';
40
40
  import { ThemeContext } from '../../lib/theming/ThemeContext.js';
41
41
  import { responsiveLayout } from '../ResponsiveLayout/decorator.js';
42
42
  import { getModalBodyTheme } from './getModalBodyTheme.js';
43
- import { ModalZIndexPriority } from './Modal.js';
43
+ import { ModalZIndexPriority } from './Modal.constants.js';
44
44
  import { getStyles } from './Modal.styles.js';
45
45
  import { ModalContext } from './ModalContext.js';
46
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ModalBody.js","sourceRoot":"","sources":["ModalBody.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React, { type JSX } from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { ResizeDetector } from '../../internal/ResizeDetector/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator.js';\nimport { getModalBodyTheme } from './getModalBodyTheme.js';\nimport { ModalZIndexPriority } from './Modal.js';\nimport { getStyles } from './Modal.styles.js';\nimport { ModalContext } from './ModalContext.js';\n\nexport interface ModalBodyProps extends CommonProps {\n /** Убирает отступы. */\n noPadding?: boolean;\n}\n\n/**\n * Контейнер с отступами для содержимого модального окна.\n *\n * @visibleName Modal.Body\n */\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\nexport class ModalBody extends React.Component<ModalBodyProps> {\n public static __KONTUR_REACT_UI__ = 'ModalBody';\n public static displayName = 'ModalBody';\n public static __MODAL_BODY__ = true;\n\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private isMobileLayout!: boolean;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getModalBodyTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private handleResize = () => {\n LayoutEvents.emit();\n };\n\n public renderMain(): JSX.Element {\n const { noPadding } = this.props;\n return (\n <ModalContext.Consumer>\n {({ additionalPadding, hasHeader }) => (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <ZIndex\n priority={ModalZIndexPriority.Content}\n className={this.cx({\n [this.styles.body(this.theme)]: true,\n [this.styles.mobileBody(this.theme)]: this.isMobileLayout,\n [this.styles.bodyWithoutHeader(this.theme)]: !hasHeader,\n [this.styles.bodyAddPaddingForPanel(this.theme)]: additionalPadding,\n [this.styles.mobileBodyAddPaddingForPanel(this.theme)]: additionalPadding && this.isMobileLayout,\n [this.styles.mobileBodyWithoutHeader(this.theme)]: !hasHeader && this.isMobileLayout,\n [this.styles.bodyWithoutPadding()]: noPadding,\n })}\n >\n {this.isMobileLayout ? (\n <ResizeDetector onResize={this.handleResize}>{this.props.children}</ResizeDetector>\n ) : (\n this.props.children\n )}\n </ZIndex>\n </CommonWrapper>\n )}\n </ModalContext.Consumer>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ModalBody.js","sourceRoot":"","sources":["ModalBody.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React, { type JSX } from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { ResizeDetector } from '../../internal/ResizeDetector/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator.js';\nimport { getModalBodyTheme } from './getModalBodyTheme.js';\nimport { ModalZIndexPriority } from './Modal.constants.js';\nimport { getStyles } from './Modal.styles.js';\nimport { ModalContext } from './ModalContext.js';\n\nexport interface ModalBodyProps extends CommonProps {\n /** Убирает отступы. */\n noPadding?: boolean;\n}\n\n/**\n * Контейнер с отступами для содержимого модального окна.\n *\n * @visibleName Modal.Body\n */\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\nexport class ModalBody extends React.Component<ModalBodyProps> {\n public static __KONTUR_REACT_UI__ = 'ModalBody';\n public static displayName = 'ModalBody';\n public static __MODAL_BODY__ = true;\n\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private isMobileLayout!: boolean;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getModalBodyTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private handleResize = () => {\n LayoutEvents.emit();\n };\n\n public renderMain(): JSX.Element {\n const { noPadding } = this.props;\n return (\n <ModalContext.Consumer>\n {({ additionalPadding, hasHeader }) => (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <ZIndex\n priority={ModalZIndexPriority.Content}\n className={this.cx({\n [this.styles.body(this.theme)]: true,\n [this.styles.mobileBody(this.theme)]: this.isMobileLayout,\n [this.styles.bodyWithoutHeader(this.theme)]: !hasHeader,\n [this.styles.bodyAddPaddingForPanel(this.theme)]: additionalPadding,\n [this.styles.mobileBodyAddPaddingForPanel(this.theme)]: additionalPadding && this.isMobileLayout,\n [this.styles.mobileBodyWithoutHeader(this.theme)]: !hasHeader && this.isMobileLayout,\n [this.styles.bodyWithoutPadding()]: noPadding,\n })}\n >\n {this.isMobileLayout ? (\n <ResizeDetector onResize={this.handleResize}>{this.props.children}</ResizeDetector>\n ) : (\n this.props.children\n )}\n </ZIndex>\n </CommonWrapper>\n )}\n </ModalContext.Consumer>\n );\n }\n}\n"]}
@@ -29,7 +29,7 @@ import { useEmotion, useGlobal, useStyles } from '../../lib/renderEnvironment/in
29
29
  import { ThemeContext } from '../../lib/theming/ThemeContext.js';
30
30
  import { ResponsiveLayout } from '../ResponsiveLayout/index.js';
31
31
  import { ModalLocaleHelper } from './locale/index.js';
32
- import { ModalDataTids } from './Modal.js';
32
+ import { ModalDataTids } from './Modal.constants.js';
33
33
  import { getStyles } from './Modal.styles.js';
34
34
  export function ModalClose(_a) {
35
35
  var disableClose = _a.disableClose, requestClose = _a.requestClose, otherProps = __rest(_a, ["disableClose", "requestClose"]);
@@ -1 +1 @@
1
- {"version":3,"file":"ModalClose.js","sourceRoot":"","sources":["ModalClose.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,MAAM,UAAU,UAAU,CAAC,EAAyD;IAAvD,IAAA,YAAY,kBAAA,EAAE,YAAY,kBAAA,EAAK,UAAU,cAA3C,gCAA6C,CAAF;IACpE,IAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAC/D,IAAM,YAAY,GAAG,SAAS,EAAE,CAAC;IACzB,IAAA,EAAE,GAAK,UAAU,EAAE,GAAjB,CAAkB;IAC5B,IAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,IAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAA,KAAkC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAtD,YAAY,QAAA,EAAE,eAAe,QAAyB,CAAC;IAE9D,IAAM,WAAW,GAAG;;QAClB,iDAAiD;QACjD,6CAA6C;QAC7C,MAAA,YAAY,CAAC,qBAAqB,6DAAG;YACnC,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;gBAC7B,eAAe,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAM,UAAU,GAAG;QACjB,eAAe,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,IAAM,IAAI,GAAG,oBAAC,cAAc,IAAC,KAAK,EAAC,MAAM,GAAG,CAAC;IAE7C,OAAO,CACL,oBAAC,aAAa,eAAK,UAAU;QAC3B,oBAAC,gBAAgB,QACd,UAAC,EAAY;;gBAAV,QAAQ,cAAA;YAAO,OAAA,CACjB,8CACc,MAAM,CAAC,oBAAoB,EACvC,SAAS,EAAE,EAAE;oBACX,GAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAG,IAAI;oBAC3B,GAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAG,QAAQ;oBACrC,GAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAG,YAAY;oBACtC,GAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAG,YAAY;wBACnC,EACF,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,cACR,aAAa,CAAC,KAAK,EAC7B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAE9B,IAAI,CACE,CACV;QAjBkB,CAiBlB,CACgB,CACL,CACjB,CAAC;AACJ,CAAC;AAED,UAAU,CAAC,mBAAmB,GAAG,YAAY,CAAC;AAC9C,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC","sourcesContent":["import React, { useContext } from 'react';\n\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { XIcon20Regular } from '../../internal/icons2022/XIcon/XIcon20Regular.js';\nimport { useKeyListener } from '../../lib/events/keyListener.js';\nimport { useLocaleForControl } from '../../lib/locale/useLocaleForControl.js';\nimport { useEmotion, useGlobal, useStyles } from '../../lib/renderEnvironment/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ResponsiveLayout } from '../ResponsiveLayout/index.js';\nimport { ModalLocaleHelper } from './locale/index.js';\nimport { ModalDataTids } from './Modal.js';\nimport { getStyles } from './Modal.styles.js';\nimport type { CloseProps } from './ModalContext.js';\n\nexport function ModalClose({ disableClose, requestClose, ...otherProps }: CloseProps): React.JSX.Element {\n const locale = useLocaleForControl('Modal', ModalLocaleHelper);\n const globalObject = useGlobal();\n const { cx } = useEmotion();\n const styles = useStyles(getStyles);\n const theme = useContext(ThemeContext);\n const keyListener = useKeyListener();\n const [focusedByTab, setFocusedByTab] = React.useState(false);\n\n const handleFocus = () => {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n };\n\n const handleBlur = () => {\n setFocusedByTab(false);\n };\n\n const icon = <XIcon20Regular align=\"none\" />;\n\n return (\n <CommonWrapper {...otherProps}>\n <ResponsiveLayout>\n {({ isMobile }) => (\n <button\n aria-label={locale.closeButtonAriaLabel}\n className={cx({\n [styles.close(theme)]: true,\n [styles.closeMobile(theme)]: isMobile,\n [styles.disabled(theme)]: disableClose,\n [styles.focus(theme)]: focusedByTab,\n })}\n onClick={requestClose}\n onFocus={handleFocus}\n onBlur={handleBlur}\n data-tid={ModalDataTids.close}\n tabIndex={disableClose ? -1 : 0}\n >\n {icon}\n </button>\n )}\n </ResponsiveLayout>\n </CommonWrapper>\n );\n}\n\nModalClose.__KONTUR_REACT_UI__ = 'ModalClose';\nModalClose.displayName = 'ModalClose';\n"]}
1
+ {"version":3,"file":"ModalClose.js","sourceRoot":"","sources":["ModalClose.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,MAAM,UAAU,UAAU,CAAC,EAAyD;IAAvD,IAAA,YAAY,kBAAA,EAAE,YAAY,kBAAA,EAAK,UAAU,cAA3C,gCAA6C,CAAF;IACpE,IAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAC/D,IAAM,YAAY,GAAG,SAAS,EAAE,CAAC;IACzB,IAAA,EAAE,GAAK,UAAU,EAAE,GAAjB,CAAkB;IAC5B,IAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,IAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAA,KAAkC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAtD,YAAY,QAAA,EAAE,eAAe,QAAyB,CAAC;IAE9D,IAAM,WAAW,GAAG;;QAClB,iDAAiD;QACjD,6CAA6C;QAC7C,MAAA,YAAY,CAAC,qBAAqB,6DAAG;YACnC,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;gBAC7B,eAAe,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAM,UAAU,GAAG;QACjB,eAAe,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,IAAM,IAAI,GAAG,oBAAC,cAAc,IAAC,KAAK,EAAC,MAAM,GAAG,CAAC;IAE7C,OAAO,CACL,oBAAC,aAAa,eAAK,UAAU;QAC3B,oBAAC,gBAAgB,QACd,UAAC,EAAY;;gBAAV,QAAQ,cAAA;YAAO,OAAA,CACjB,8CACc,MAAM,CAAC,oBAAoB,EACvC,SAAS,EAAE,EAAE;oBACX,GAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAG,IAAI;oBAC3B,GAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAG,QAAQ;oBACrC,GAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAG,YAAY;oBACtC,GAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAG,YAAY;wBACnC,EACF,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,cACR,aAAa,CAAC,KAAK,EAC7B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAE9B,IAAI,CACE,CACV;QAjBkB,CAiBlB,CACgB,CACL,CACjB,CAAC;AACJ,CAAC;AAED,UAAU,CAAC,mBAAmB,GAAG,YAAY,CAAC;AAC9C,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC","sourcesContent":["import React, { useContext } from 'react';\n\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { XIcon20Regular } from '../../internal/icons2022/XIcon/XIcon20Regular.js';\nimport { useKeyListener } from '../../lib/events/keyListener.js';\nimport { useLocaleForControl } from '../../lib/locale/useLocaleForControl.js';\nimport { useEmotion, useGlobal, useStyles } from '../../lib/renderEnvironment/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ResponsiveLayout } from '../ResponsiveLayout/index.js';\nimport { ModalLocaleHelper } from './locale/index.js';\nimport { ModalDataTids } from './Modal.constants.js';\nimport { getStyles } from './Modal.styles.js';\nimport type { CloseProps } from './ModalContext.js';\n\nexport function ModalClose({ disableClose, requestClose, ...otherProps }: CloseProps): React.JSX.Element {\n const locale = useLocaleForControl('Modal', ModalLocaleHelper);\n const globalObject = useGlobal();\n const { cx } = useEmotion();\n const styles = useStyles(getStyles);\n const theme = useContext(ThemeContext);\n const keyListener = useKeyListener();\n const [focusedByTab, setFocusedByTab] = React.useState(false);\n\n const handleFocus = () => {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n };\n\n const handleBlur = () => {\n setFocusedByTab(false);\n };\n\n const icon = <XIcon20Regular align=\"none\" />;\n\n return (\n <CommonWrapper {...otherProps}>\n <ResponsiveLayout>\n {({ isMobile }) => (\n <button\n aria-label={locale.closeButtonAriaLabel}\n className={cx({\n [styles.close(theme)]: true,\n [styles.closeMobile(theme)]: isMobile,\n [styles.disabled(theme)]: disableClose,\n [styles.focus(theme)]: focusedByTab,\n })}\n onClick={requestClose}\n onFocus={handleFocus}\n onBlur={handleBlur}\n data-tid={ModalDataTids.close}\n tabIndex={disableClose ? -1 : 0}\n >\n {icon}\n </button>\n )}\n </ResponsiveLayout>\n </CommonWrapper>\n );\n}\n\nModalClose.__KONTUR_REACT_UI__ = 'ModalClose';\nModalClose.displayName = 'ModalClose';\n"]}
@@ -10,7 +10,7 @@ export declare const SwitcherDataTids: {
10
10
  readonly root: "Switcher__root";
11
11
  };
12
12
  export interface SwitcherProps extends Pick<HTMLAttributes<unknown>, 'role'>, CommonProps {
13
- /** Задает список элементов в свитчере. Это массив строк или объектов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }` */
13
+ /** Задаёт список элементов в свитчере. Это массив строк или объектов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }` */
14
14
  items: SwitcherItems[];
15
15
  /** Значение свитчера. */
16
16
  value?: string;
@@ -26,7 +26,7 @@ export interface SwitcherProps extends Pick<HTMLAttributes<unknown>, 'role'>, Co
26
26
  width?: React.CSSProperties['width'];
27
27
  /** Блокирует свитчер. */
28
28
  disabled?: boolean;
29
- /** Задает функцию отрисовки элемента. Параметр `renderDefault` - это встроенная дефолтная функция отрисовки элемента, которую можно вызывать в `renderItem`. */
29
+ /** Задаёт функцию отрисовки элемента. Параметр `renderDefault` - это встроенная дефолтная функция отрисовки элемента, которую можно вызывать в `renderItem`. */
30
30
  renderItem?: (label: string, value: string, buttonProps: ButtonProps, renderDefault: () => React.ReactNode, ariaLabel?: string) => React.ReactNode;
31
31
  }
32
32
  type DefaultProps = Required<Pick<SwitcherProps, 'role'>>;
@@ -40,7 +40,7 @@ interface SwitcherItem {
40
40
  buttonProps?: Partial<ButtonProps>;
41
41
  }
42
42
  /**
43
- * Переключатель это замена группе радиокнопок. Переключатель меньше по высоте, это позволяет делать формы компактнее.
43
+ * Переключатель используется для выбора одного значения из нескольких. Похож на [группу радиокнопок]https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_input-data-radiogroup--docs), но более компактный.
44
44
  */
45
45
  export declare class Switcher extends React.Component<SwitcherProps, SwitcherState> {
46
46
  static __KONTUR_REACT_UI__: string;
@@ -54,7 +54,7 @@ export var SwitcherDataTids = {
54
54
  root: 'Switcher__root',
55
55
  };
56
56
  /**
57
- * Переключатель это замена группе радиокнопок. Переключатель меньше по высоте, это позволяет делать формы компактнее.
57
+ * Переключатель используется для выбора одного значения из нескольких. Похож на [группу радиокнопок]https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_input-data-radiogroup--docs), но более компактный.
58
58
  */
59
59
  var Switcher = /** @class */ (function (_super) {
60
60
  __extends(Switcher, _super);
@@ -1 +1 @@
1
- {"version":3,"file":"Switcher.js","sourceRoot":"","sources":["Switcher.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport type { HTMLAttributes } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { Button } from '../Button/index.js';\nimport type { ButtonProps } from '../Button/index.js';\nimport { Group, getButtonCorners } from '../Group/index.js';\nimport { mod } from './helpers.js';\nimport { getStyles } from './Switcher.styles.js';\nimport { getSwitcherTheme } from './switcherTheme.js';\n\nexport type SwitcherItems = string | SwitcherItem;\n\nexport const SwitcherDataTids = {\n root: 'Switcher__root',\n} as const;\n\nexport interface SwitcherProps extends Pick<HTMLAttributes<unknown>, 'role'>, CommonProps {\n /** Задает список элементов в свитчере. Это массив строк или объектов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }` */\n items: SwitcherItems[];\n\n /** Значение свитчера. */\n value?: string;\n\n /** Событие изменения значения свитчера (value). */\n onValueChange?: (value: string) => void;\n\n /** Подпись около свитчера. */\n caption?: string;\n\n /** Переводит свитчер в состояние ошибки. */\n error?: boolean;\n\n /** Размер свитчера. */\n size?: SizeProp;\n\n /** Ширина свитчера. С этим пропом элементы внутри автоматически равномерно растянутся. */\n width?: React.CSSProperties['width'];\n\n /** Блокирует свитчер. */\n disabled?: boolean;\n\n /** Задает функцию отрисовки элемента. Параметр `renderDefault` - это встроенная дефолтная функция отрисовки элемента, которую можно вызывать в `renderItem`. */\n renderItem?: (\n label: string,\n value: string,\n buttonProps: ButtonProps,\n renderDefault: () => React.ReactNode,\n ariaLabel?: string,\n ) => React.ReactNode;\n}\n\ntype DefaultProps = Required<Pick<SwitcherProps, 'role'>>;\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n value: string;\n label: string;\n 'aria-label'?: string;\n buttonProps?: Partial<ButtonProps>;\n}\n\n/**\n * Переключатель — это замена группе радиокнопок. Переключатель меньше по высоте, это позволяет делать формы компактнее.\n */\n@withRenderEnvironment\n@rootNode\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n public static displayName = 'Switcher';\n\n public static defaultProps: DefaultProps = {\n role: 'switch',\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\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 inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: this.styles.input(),\n };\n const items = <Group width={'100%'}>{this._renderItems()}</Group>;\n\n const captionClassName = this.cx(this.styles.caption(this.theme), this.getLabelSizeClassName());\n const wrapperClassName = this.cx(this.styles.wrap(), {\n [this.styles.error(this.theme)]: this.props.error,\n [this.styles.wrapCustomWidth()]: this.props.width !== undefined,\n });\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SwitcherDataTids.root} className={this.styles.root()} style={{ width: this.props.width }}>\n {this.props.caption ? <div className={captionClassName}>{this.props.caption}</div> : null}\n <div className={wrapperClassName}>\n <input {...inputProps} />\n {items}\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, width, disabled, role, renderItem } = this.props;\n\n return items.map((item, i) => {\n const {\n 'aria-label': ariaLabel,\n label,\n value: itemValue,\n buttonProps: customButtonProps,\n } = this._extractPropsFromItem(item);\n\n const isChecked = value === itemValue;\n const commonButtonProps = {\n use: 'default',\n _noWarningForUseDefault: true,\n 'aria-checked': isChecked,\n role,\n checked: isChecked,\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 } satisfies ButtonProps;\n\n const buttonProps = {\n ...commonButtonProps,\n ...customButtonProps,\n };\n\n if (!buttonProps.width && width) {\n buttonProps.width = '100%';\n }\n\n const renderDefault = () => this.renderDefaultItem(label, itemValue, buttonProps, ariaLabel);\n return renderItem ? renderItem(label, itemValue, buttonProps, renderDefault, ariaLabel) : renderDefault();\n });\n };\n\n private renderDefaultItem = (label: string, value: string, buttonProps: ButtonProps, ariaLabel?: string) => (\n <Button aria-label={ariaLabel} key={value} {...buttonProps}>\n {label}\n </Button>\n );\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return this.styles.captionLarge(this.theme);\n case 'medium':\n return this.styles.captionMedium(this.theme);\n case 'small':\n default:\n return this.styles.captionSmall(this.theme);\n }\n };\n}\n"]}
1
+ {"version":3,"file":"Switcher.js","sourceRoot":"","sources":["Switcher.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport type { HTMLAttributes } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { Button } from '../Button/index.js';\nimport type { ButtonProps } from '../Button/index.js';\nimport { Group, getButtonCorners } from '../Group/index.js';\nimport { mod } from './helpers.js';\nimport { getStyles } from './Switcher.styles.js';\nimport { getSwitcherTheme } from './switcherTheme.js';\n\nexport type SwitcherItems = string | SwitcherItem;\n\nexport const SwitcherDataTids = {\n root: 'Switcher__root',\n} as const;\n\nexport interface SwitcherProps extends Pick<HTMLAttributes<unknown>, 'role'>, CommonProps {\n /** Задаёт список элементов в свитчере. Это массив строк или объектов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }` */\n items: SwitcherItems[];\n\n /** Значение свитчера. */\n value?: string;\n\n /** Событие изменения значения свитчера (value). */\n onValueChange?: (value: string) => void;\n\n /** Подпись около свитчера. */\n caption?: string;\n\n /** Переводит свитчер в состояние ошибки. */\n error?: boolean;\n\n /** Размер свитчера. */\n size?: SizeProp;\n\n /** Ширина свитчера. С этим пропом элементы внутри автоматически равномерно растянутся. */\n width?: React.CSSProperties['width'];\n\n /** Блокирует свитчер. */\n disabled?: boolean;\n\n /** Задаёт функцию отрисовки элемента. Параметр `renderDefault` - это встроенная дефолтная функция отрисовки элемента, которую можно вызывать в `renderItem`. */\n renderItem?: (\n label: string,\n value: string,\n buttonProps: ButtonProps,\n renderDefault: () => React.ReactNode,\n ariaLabel?: string,\n ) => React.ReactNode;\n}\n\ntype DefaultProps = Required<Pick<SwitcherProps, 'role'>>;\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n value: string;\n label: string;\n 'aria-label'?: string;\n buttonProps?: Partial<ButtonProps>;\n}\n\n/**\n * Переключатель используется для выбора одного значения из нескольких. Похож на [группу радиокнопок]https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_input-data-radiogroup--docs), но более компактный.\n */\n@withRenderEnvironment\n@rootNode\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n public static displayName = 'Switcher';\n\n public static defaultProps: DefaultProps = {\n role: 'switch',\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\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 inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: this.styles.input(),\n };\n const items = <Group width={'100%'}>{this._renderItems()}</Group>;\n\n const captionClassName = this.cx(this.styles.caption(this.theme), this.getLabelSizeClassName());\n const wrapperClassName = this.cx(this.styles.wrap(), {\n [this.styles.error(this.theme)]: this.props.error,\n [this.styles.wrapCustomWidth()]: this.props.width !== undefined,\n });\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SwitcherDataTids.root} className={this.styles.root()} style={{ width: this.props.width }}>\n {this.props.caption ? <div className={captionClassName}>{this.props.caption}</div> : null}\n <div className={wrapperClassName}>\n <input {...inputProps} />\n {items}\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, width, disabled, role, renderItem } = this.props;\n\n return items.map((item, i) => {\n const {\n 'aria-label': ariaLabel,\n label,\n value: itemValue,\n buttonProps: customButtonProps,\n } = this._extractPropsFromItem(item);\n\n const isChecked = value === itemValue;\n const commonButtonProps = {\n use: 'default',\n _noWarningForUseDefault: true,\n 'aria-checked': isChecked,\n role,\n checked: isChecked,\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 } satisfies ButtonProps;\n\n const buttonProps = {\n ...commonButtonProps,\n ...customButtonProps,\n };\n\n if (!buttonProps.width && width) {\n buttonProps.width = '100%';\n }\n\n const renderDefault = () => this.renderDefaultItem(label, itemValue, buttonProps, ariaLabel);\n return renderItem ? renderItem(label, itemValue, buttonProps, renderDefault, ariaLabel) : renderDefault();\n });\n };\n\n private renderDefaultItem = (label: string, value: string, buttonProps: ButtonProps, ariaLabel?: string) => (\n <Button aria-label={ariaLabel} key={value} {...buttonProps}>\n {label}\n </Button>\n );\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return this.styles.captionLarge(this.theme);\n case 'medium':\n return this.styles.captionMedium(this.theme);\n case 'small':\n default:\n return this.styles.captionSmall(this.theme);\n }\n };\n}\n"]}
@@ -27,13 +27,13 @@ export interface TabProps<T extends string = string> extends Pick<AriaAttributes
27
27
  onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;
28
28
  /** Делает таб недоступным. */
29
29
  disabled?: boolean;
30
- /** Переводит таб в состояние валидации "Ошибка". */
30
+ /** Переводит таб в состояние ошибки. */
31
31
  error?: boolean;
32
- /** Переводит таб в состояние валидации "Предупреждение". */
32
+ /** Переводит таб в состояние предупреждения. */
33
33
  warning?: boolean;
34
- /** Переводит таб в состояние валидации "Успех". */
34
+ /** Переводит таб в состояние успеха. */
35
35
  success?: boolean;
36
- /** Задаёт визульное состояние главного элемента. */
36
+ /** Визульное состояние главного элемента. */
37
37
  primary?: boolean;
38
38
  }
39
39
  export interface TabState {
@@ -43,7 +43,6 @@ type DefaultProps = Required<Pick<TabProps, 'component' | 'href'>>;
43
43
  /**
44
44
  * Табы группируют контент и помогают в навигации.
45
45
  *
46
- * Для создания группы табов используйте специальный контейнер - компонент [Tabs](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_display-data-tabs-tabs--docs).
47
46
  */
48
47
  export declare class Tab<T extends string = string> extends React.Component<TabProps<T>, TabState> {
49
48
  static __KONTUR_REACT_UI__: string;
@@ -50,7 +50,6 @@ export var TabDataTids = {
50
50
  /**
51
51
  * Табы группируют контент и помогают в навигации.
52
52
  *
53
- * Для создания группы табов используйте специальный контейнер - компонент [Tabs](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_display-data-tabs-tabs--docs).
54
53
  */
55
54
  var Tab = /** @class */ (function (_super) {
56
55
  __extends(Tab, _super);
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.js","sourceRoot":"","sources":["Tab.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport invariant from 'invariant';\nimport type { AriaAttributes } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes.js';\nimport { ResizeDetector } from '../../internal/ResizeDetector/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isKeyArrow, isKeyArrowLeft, isKeyArrowUp } from '../../lib/events/keyboard/identifiers.js';\nimport { KeyListener } from '../../lib/events/keyListener.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { isFunctionalComponent } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getHorizontalStyles, getStyles, getVerticalStyles, globalClasses } from './Tab.styles.js';\nimport { TabsContext, TabsContextDefaultValue } from './TabsContext.js';\nimport type { TabsContextType } from './TabsContext.js';\n\nexport interface TabIndicators {\n error: boolean;\n warning: boolean;\n success: boolean;\n primary: boolean;\n disabled: boolean;\n}\n\nexport const TabDataTids = {\n root: 'Tab__root',\n} as const;\n\nexport interface TabProps<T extends string = string>\n extends Pick<AriaAttributes, 'aria-label' | 'aria-describedby'>, CommonProps {\n /** Компонент или тег для рендера корневого элемента. */\n component?: React.ComponentType<any> | string;\n\n /** HTML-атрибут `href`. */\n href?: string;\n\n /** Уникальный идентификатор таба. По нему компонент `<Tabs />` определяет выбранный таб. */\n id?: T;\n\n /**`HTML`-событие `onclick`. */\n onClick?: (event: React.MouseEvent<HTMLElement>) => void;\n\n /** `HTML`-событие `onkeydown`. */\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Делает таб недоступным. */\n disabled?: boolean;\n\n /** Переводит таб в состояние валидации \"Ошибка\". */\n error?: boolean;\n\n /** Переводит таб в состояние валидации \"Предупреждение\". */\n warning?: boolean;\n\n /** Переводит таб в состояние валидации \"Успех\". */\n success?: boolean;\n\n /** Задаёт визульное состояние главного элемента. */\n primary?: boolean;\n}\n\nexport interface TabState {\n focusedByKeyboard: boolean;\n}\n\ntype DefaultProps = Required<Pick<TabProps, 'component' | 'href'>>;\n\n/**\n * Табы группируют контент и помогают в навигации.\n *\n * Для создания группы табов используйте специальный контейнер - компонент [Tabs](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_display-data-tabs-tabs--docs).\n */\n@withRenderEnvironment\n@rootNode\nexport class Tab<T extends string = string> extends React.Component<TabProps<T>, TabState> {\n public static __KONTUR_REACT_UI__ = 'Tab';\n public static displayName = 'Tab';\n\n public static contextType = TabsContext;\n public context: TabsContextType = this.context;\n\n public static defaultProps: DefaultProps = {\n component: 'a',\n href: '',\n };\n\n private getProps = createPropsGetter(Tab.defaultProps);\n\n public state: TabState = {\n focusedByKeyboard: false,\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private horizontalStyles!: ReturnType<typeof getHorizontalStyles>;\n private verticalStyles!: ReturnType<typeof getVerticalStyles>;\n private theme!: Theme;\n private tabComponent: Nullable<React.ReactElement<Tab<T>>> = null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private keyListener!: KeyListener;\n\n constructor(props: TabProps<T>) {\n super(props);\n invariant(this.context !== TabsContextDefaultValue, 'Tab should be placed inside Tabs component');\n }\n\n public componentDidMount() {\n this.keyListener = new KeyListener(this.globalObject);\n const id = this.getId();\n if (typeof id === 'string') {\n this.context.addTab(id, this.getTabInstance);\n }\n }\n\n public componentDidUpdate() {\n if (this.context.activeTab === this.props.id) {\n this.context.notifyUpdate();\n }\n }\n\n public componentWillUnmount() {\n const id = this.getId();\n if (typeof id === 'string') {\n this.context.removeTab(id);\n }\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n this.horizontalStyles = getHorizontalStyles(this.emotion);\n this.verticalStyles = getVerticalStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public getIndicators(): TabIndicators {\n return {\n error: Boolean(this.props.error),\n warning: Boolean(this.props.warning),\n success: Boolean(this.props.success),\n primary: Boolean(this.props.primary),\n disabled: Boolean(this.props.disabled),\n };\n }\n\n public getUnderlyingNode(): Nullable<React.ReactElement<Tab<T>>> {\n return this.tabComponent;\n }\n\n private renderMain() {\n const {\n children,\n disabled,\n error,\n warning,\n success,\n primary,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n } = this.props;\n const { component: Component, href } = this.getProps();\n\n let isActive = false;\n let isVertical = false;\n\n const id = this.getId();\n if (typeof id === 'string') {\n isActive = this.context.activeTab === this.getId();\n isVertical = this.context.vertical;\n }\n const orientationStyles = isVertical ? this.verticalStyles : this.horizontalStyles;\n\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({ active: isActive, disabled })}\n {...this.props}\n >\n <Component\n data-tid={TabDataTids.root}\n className={this.cx({\n [this.styles.rootSmall(this.theme)]: this.context.size === 'small',\n [this.styles.rootMedium(this.theme)]: this.context.size === 'medium',\n [this.styles.rootLarge(this.theme)]: this.context.size === 'large',\n [this.styles.verticalSmall(this.theme)]: !!isVertical && this.context.size === 'small',\n [this.styles.verticalMedium(this.theme)]: !!isVertical && this.context.size === 'medium',\n [this.styles.verticalLarge(this.theme)]: !!isVertical && this.context.size === 'large',\n [orientationStyles.primary(this.theme)]: !!primary,\n [orientationStyles.success(this.theme)]: !!success,\n [orientationStyles.warning(this.theme)]: !!warning,\n [orientationStyles.error(this.theme)]: !!error,\n [this.styles.active()]: !!isActive,\n [orientationStyles.active(this.theme)]: !!isActive,\n [this.styles.disabled(this.theme)]: !!disabled,\n [orientationStyles.disabled()]: !!disabled,\n })}\n onBlur={this.handleBlur}\n onClick={this.switchTab}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n tabIndex={disabled ? -1 : 0}\n ref={isFunctionalComponent(Component) ? null : this.refTabComponent}\n href={href}\n aria-describedby={ariaDescribedby}\n aria-label={ariaLabel}\n >\n <ResizeDetector onResize={this.context.notifyUpdate}>{children}</ResizeDetector>\n {this.state.focusedByKeyboard && (\n <div\n className={this.cx(globalClasses.focus, {\n [this.styles.focusSmall(this.theme)]: this.context.size === 'small',\n [this.styles.focusMedium(this.theme)]: this.context.size === 'medium',\n [this.styles.focusLarge(this.theme)]: this.context.size === 'large',\n })}\n />\n )}\n </Component>\n </CommonWrapper>\n );\n }\n\n private getId = () => this.props.id || this.getProps().href;\n\n private refTabComponent = (instance: React.ReactElement<any>) => {\n this.tabComponent = instance;\n };\n\n private getTabInstance = () => this;\n\n private switchTab = (event: React.MouseEvent<HTMLElement>) => {\n if (this.props.disabled) {\n event.preventDefault();\n return;\n }\n const { href, component } = this.getProps();\n\n const id = this.props.id || href;\n if (this.props.onClick) {\n this.props.onClick(event);\n if (event.defaultPrevented) {\n return;\n }\n }\n if (typeof id === 'string') {\n this.context.switchTab(id);\n }\n if (component === 'a' && !href) {\n event.preventDefault();\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n if (e.defaultPrevented) {\n return;\n }\n }\n const id = this.getId();\n if (typeof id !== 'string') {\n return;\n }\n if (!isKeyArrow(e)) {\n return;\n }\n e.preventDefault();\n const delta = isKeyArrowLeft(e) || isKeyArrowUp(e) ? -1 : 1;\n this.context.shiftFocus(id, delta);\n };\n\n private handleFocus = () => {\n if (this.props.disabled) {\n return;\n }\n\n // focus event fires before keyDown eventlistener\n // so we should check focusKeyPressed in async way\n this.globalObject.requestAnimationFrame?.(() => {\n if (this.keyListener.isTabPressed || this.keyListener.isArrowPressed) {\n this.setState({ focusedByKeyboard: true });\n }\n });\n };\n\n private handleBlur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.setState({ focusedByKeyboard: false });\n };\n}\n"]}
1
+ {"version":3,"file":"Tab.js","sourceRoot":"","sources":["Tab.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport invariant from 'invariant';\nimport type { AriaAttributes } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes.js';\nimport { ResizeDetector } from '../../internal/ResizeDetector/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isKeyArrow, isKeyArrowLeft, isKeyArrowUp } from '../../lib/events/keyboard/identifiers.js';\nimport { KeyListener } from '../../lib/events/keyListener.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { isFunctionalComponent } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getHorizontalStyles, getStyles, getVerticalStyles, globalClasses } from './Tab.styles.js';\nimport { TabsContext, TabsContextDefaultValue } from './TabsContext.js';\nimport type { TabsContextType } from './TabsContext.js';\n\nexport interface TabIndicators {\n error: boolean;\n warning: boolean;\n success: boolean;\n primary: boolean;\n disabled: boolean;\n}\n\nexport const TabDataTids = {\n root: 'Tab__root',\n} as const;\n\nexport interface TabProps<T extends string = string>\n extends Pick<AriaAttributes, 'aria-label' | 'aria-describedby'>, CommonProps {\n /** Компонент или тег для рендера корневого элемента. */\n component?: React.ComponentType<any> | string;\n\n /** HTML-атрибут `href`. */\n href?: string;\n\n /** Уникальный идентификатор таба. По нему компонент `<Tabs />` определяет выбранный таб. */\n id?: T;\n\n /**`HTML`-событие `onclick`. */\n onClick?: (event: React.MouseEvent<HTMLElement>) => void;\n\n /** `HTML`-событие `onkeydown`. */\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Делает таб недоступным. */\n disabled?: boolean;\n\n /** Переводит таб в состояние ошибки. */\n error?: boolean;\n\n /** Переводит таб в состояние предупреждения. */\n warning?: boolean;\n\n /** Переводит таб в состояние успеха. */\n success?: boolean;\n\n /** Визульное состояние главного элемента. */\n primary?: boolean;\n}\n\nexport interface TabState {\n focusedByKeyboard: boolean;\n}\n\ntype DefaultProps = Required<Pick<TabProps, 'component' | 'href'>>;\n\n/**\n * Табы группируют контент и помогают в навигации.\n *\n */\n@withRenderEnvironment\n@rootNode\nexport class Tab<T extends string = string> extends React.Component<TabProps<T>, TabState> {\n public static __KONTUR_REACT_UI__ = 'Tab';\n public static displayName = 'Tab';\n\n public static contextType = TabsContext;\n public context: TabsContextType = this.context;\n\n public static defaultProps: DefaultProps = {\n component: 'a',\n href: '',\n };\n\n private getProps = createPropsGetter(Tab.defaultProps);\n\n public state: TabState = {\n focusedByKeyboard: false,\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private horizontalStyles!: ReturnType<typeof getHorizontalStyles>;\n private verticalStyles!: ReturnType<typeof getVerticalStyles>;\n private theme!: Theme;\n private tabComponent: Nullable<React.ReactElement<Tab<T>>> = null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private keyListener!: KeyListener;\n\n constructor(props: TabProps<T>) {\n super(props);\n invariant(this.context !== TabsContextDefaultValue, 'Tab should be placed inside Tabs component');\n }\n\n public componentDidMount() {\n this.keyListener = new KeyListener(this.globalObject);\n const id = this.getId();\n if (typeof id === 'string') {\n this.context.addTab(id, this.getTabInstance);\n }\n }\n\n public componentDidUpdate() {\n if (this.context.activeTab === this.props.id) {\n this.context.notifyUpdate();\n }\n }\n\n public componentWillUnmount() {\n const id = this.getId();\n if (typeof id === 'string') {\n this.context.removeTab(id);\n }\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n this.horizontalStyles = getHorizontalStyles(this.emotion);\n this.verticalStyles = getVerticalStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public getIndicators(): TabIndicators {\n return {\n error: Boolean(this.props.error),\n warning: Boolean(this.props.warning),\n success: Boolean(this.props.success),\n primary: Boolean(this.props.primary),\n disabled: Boolean(this.props.disabled),\n };\n }\n\n public getUnderlyingNode(): Nullable<React.ReactElement<Tab<T>>> {\n return this.tabComponent;\n }\n\n private renderMain() {\n const {\n children,\n disabled,\n error,\n warning,\n success,\n primary,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n } = this.props;\n const { component: Component, href } = this.getProps();\n\n let isActive = false;\n let isVertical = false;\n\n const id = this.getId();\n if (typeof id === 'string') {\n isActive = this.context.activeTab === this.getId();\n isVertical = this.context.vertical;\n }\n const orientationStyles = isVertical ? this.verticalStyles : this.horizontalStyles;\n\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({ active: isActive, disabled })}\n {...this.props}\n >\n <Component\n data-tid={TabDataTids.root}\n className={this.cx({\n [this.styles.rootSmall(this.theme)]: this.context.size === 'small',\n [this.styles.rootMedium(this.theme)]: this.context.size === 'medium',\n [this.styles.rootLarge(this.theme)]: this.context.size === 'large',\n [this.styles.verticalSmall(this.theme)]: !!isVertical && this.context.size === 'small',\n [this.styles.verticalMedium(this.theme)]: !!isVertical && this.context.size === 'medium',\n [this.styles.verticalLarge(this.theme)]: !!isVertical && this.context.size === 'large',\n [orientationStyles.primary(this.theme)]: !!primary,\n [orientationStyles.success(this.theme)]: !!success,\n [orientationStyles.warning(this.theme)]: !!warning,\n [orientationStyles.error(this.theme)]: !!error,\n [this.styles.active()]: !!isActive,\n [orientationStyles.active(this.theme)]: !!isActive,\n [this.styles.disabled(this.theme)]: !!disabled,\n [orientationStyles.disabled()]: !!disabled,\n })}\n onBlur={this.handleBlur}\n onClick={this.switchTab}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n tabIndex={disabled ? -1 : 0}\n ref={isFunctionalComponent(Component) ? null : this.refTabComponent}\n href={href}\n aria-describedby={ariaDescribedby}\n aria-label={ariaLabel}\n >\n <ResizeDetector onResize={this.context.notifyUpdate}>{children}</ResizeDetector>\n {this.state.focusedByKeyboard && (\n <div\n className={this.cx(globalClasses.focus, {\n [this.styles.focusSmall(this.theme)]: this.context.size === 'small',\n [this.styles.focusMedium(this.theme)]: this.context.size === 'medium',\n [this.styles.focusLarge(this.theme)]: this.context.size === 'large',\n })}\n />\n )}\n </Component>\n </CommonWrapper>\n );\n }\n\n private getId = () => this.props.id || this.getProps().href;\n\n private refTabComponent = (instance: React.ReactElement<any>) => {\n this.tabComponent = instance;\n };\n\n private getTabInstance = () => this;\n\n private switchTab = (event: React.MouseEvent<HTMLElement>) => {\n if (this.props.disabled) {\n event.preventDefault();\n return;\n }\n const { href, component } = this.getProps();\n\n const id = this.props.id || href;\n if (this.props.onClick) {\n this.props.onClick(event);\n if (event.defaultPrevented) {\n return;\n }\n }\n if (typeof id === 'string') {\n this.context.switchTab(id);\n }\n if (component === 'a' && !href) {\n event.preventDefault();\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n if (e.defaultPrevented) {\n return;\n }\n }\n const id = this.getId();\n if (typeof id !== 'string') {\n return;\n }\n if (!isKeyArrow(e)) {\n return;\n }\n e.preventDefault();\n const delta = isKeyArrowLeft(e) || isKeyArrowUp(e) ? -1 : 1;\n this.context.shiftFocus(id, delta);\n };\n\n private handleFocus = () => {\n if (this.props.disabled) {\n return;\n }\n\n // focus event fires before keyDown eventlistener\n // so we should check focusKeyPressed in async way\n this.globalObject.requestAnimationFrame?.(() => {\n if (this.keyListener.isTabPressed || this.keyListener.isArrowPressed) {\n this.setState({ focusedByKeyboard: true });\n }\n });\n };\n\n private handleBlur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.setState({ focusedByKeyboard: false });\n };\n}\n"]}
@@ -12,7 +12,7 @@ export interface TabsProps<T extends ValueBaseType = string> extends CommonProps
12
12
  size?: SizeProp;
13
13
  /** Идентификатор активного таба. Совпадает с `id` выбранного `<Tab />`. */
14
14
  value: T;
15
- /** Вызывается при смене активного таба. */
15
+ /** Событие смены активного таба. */
16
16
  onValueChange?: (value: T) => void;
17
17
  /** Располагает табы вертикально.
18
18
  * @default false */
@@ -28,7 +28,7 @@ export declare const TabsDataTids: {
28
28
  };
29
29
  type DefaultProps = Required<Pick<TabsProps, 'vertical' | 'size'>>;
30
30
  /**
31
- * Контейнер для компонента [Tab](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_display-data-tabs-tab--doc). Группирует табы и позволяет управлять их состоянием.
31
+ * Табы группируют контент и помогают в навигации.
32
32
  */
33
33
  export declare class Tabs<T extends string = string> extends React.Component<TabsProps<T>> {
34
34
  static __KONTUR_REACT_UI__: string;
@@ -47,7 +47,7 @@ export var TabsDataTids = {
47
47
  indicatorRoot: 'Indicator__root',
48
48
  };
49
49
  /**
50
- * Контейнер для компонента [Tab](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_display-data-tabs-tab--doc). Группирует табы и позволяет управлять их состоянием.
50
+ * Табы группируют контент и помогают в навигации.
51
51
  */
52
52
  var Tabs = /** @class */ (function (_super) {
53
53
  __extends(Tabs, _super);