@skbkontur/react-ui 6.1.4-6d143.0 → 6.1.4-88635.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 (224) hide show
  1. package/components/DateInput/DateFragmentsView.js +5 -2
  2. package/components/DateInput/DateFragmentsView.js.map +1 -1
  3. package/components/FxInput/FxInput.d.ts +1 -1
  4. package/components/FxInput/FxInput.js.map +1 -1
  5. package/components/MaskedInput/MaskedInput.d.ts +2 -3
  6. package/components/MaskedInput/MaskedInput.js +126 -10
  7. package/components/MaskedInput/MaskedInput.js.map +1 -1
  8. package/components/MaskedInput/MaskedInput.styles.js +1 -1
  9. package/components/MaskedInput/MaskedInput.styles.js.map +1 -1
  10. package/components/Tooltip/Tooltip.js +5 -6
  11. package/components/Tooltip/Tooltip.js.map +1 -1
  12. package/internal/FocusTrap/FocusTrap.d.ts +1 -0
  13. package/internal/FocusTrap/FocusTrap.js +6 -6
  14. package/internal/FocusTrap/FocusTrap.js.map +1 -1
  15. package/internal/Popup/Popup.d.ts +3 -1
  16. package/internal/Popup/Popup.js +55 -26
  17. package/internal/Popup/Popup.js.map +1 -1
  18. package/internal/Popup/PopupHelper.d.ts +5 -3
  19. package/internal/Popup/PopupHelper.js +15 -8
  20. package/internal/Popup/PopupHelper.js.map +1 -1
  21. package/internal/RenderContainer/RenderContainer.d.ts +27 -0
  22. package/internal/RenderContainer/RenderContainer.js +190 -4
  23. package/internal/RenderContainer/RenderContainer.js.map +1 -1
  24. package/internal/RenderContainer/getPortalOutletStyle.d.ts +2 -0
  25. package/internal/RenderContainer/getPortalOutletStyle.js +7 -0
  26. package/internal/RenderContainer/getPortalOutletStyle.js.map +1 -0
  27. package/internal/RenderLayer/RenderLayer.d.ts +2 -1
  28. package/internal/RenderLayer/RenderLayer.js +5 -7
  29. package/internal/RenderLayer/RenderLayer.js.map +1 -1
  30. package/internal/ZIndex/ZIndex.d.ts +3 -5
  31. package/internal/ZIndex/ZIndex.js +46 -43
  32. package/internal/ZIndex/ZIndex.js.map +1 -1
  33. package/internal/ZIndex/ZIndexDomContext.d.ts +12 -0
  34. package/internal/ZIndex/ZIndexDomContext.js +261 -0
  35. package/internal/ZIndex/ZIndexDomContext.js.map +1 -0
  36. package/internal/themes/BasicTheme.d.ts +162 -0
  37. package/internal/themes/BasicTheme.js +162 -0
  38. package/internal/themes/BasicTheme.js.map +1 -1
  39. package/lib/events/keyboard/KeyboardEventCodes.d.ts +0 -2
  40. package/lib/events/keyboard/KeyboardEventCodes.js +0 -2
  41. package/lib/events/keyboard/KeyboardEventCodes.js.map +1 -1
  42. package/lib/events/keyboard/KeyboardMapKeys.js +0 -2
  43. package/lib/events/keyboard/KeyboardMapKeys.js.map +1 -1
  44. package/lib/events/keyboard/identifiers.d.ts +0 -2
  45. package/lib/events/keyboard/identifiers.js +0 -6
  46. package/lib/events/keyboard/identifiers.js.map +1 -1
  47. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +0 -2
  48. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +0 -1
  49. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  50. package/lib/listenFocusOutside.d.ts +3 -1
  51. package/lib/listenFocusOutside.js +19 -2
  52. package/lib/listenFocusOutside.js.map +1 -1
  53. package/lib/renderEnvironment/RenderEnvironmentContext.d.ts +15 -0
  54. package/lib/renderEnvironment/RenderEnvironmentContext.js +10 -10
  55. package/lib/renderEnvironment/RenderEnvironmentContext.js.map +1 -1
  56. package/lib/shadowDom/isShadowRoot.d.ts +6 -0
  57. package/lib/shadowDom/isShadowRoot.js +17 -0
  58. package/lib/shadowDom/isShadowRoot.js.map +1 -0
  59. package/lib/styles/UiFont.d.ts +1 -2
  60. package/lib/styles/UiFont.js +4 -1
  61. package/lib/styles/UiFont.js.map +1 -1
  62. package/lib/theming/Emotion.d.ts +17 -1
  63. package/lib/theming/Emotion.js +16 -5
  64. package/lib/theming/Emotion.js.map +1 -1
  65. package/package.json +1 -4
  66. package/components/MaskedInput/MaskedInputLegacy.d.ts +0 -3
  67. package/components/MaskedInput/MaskedInputLegacy.js +0 -142
  68. package/components/MaskedInput/MaskedInputLegacy.js.map +0 -1
  69. package/components/MaskedInputV2/MaskedInputV2.d.ts +0 -58
  70. package/components/MaskedInputV2/MaskedInputV2.helpers.d.ts +0 -9
  71. package/components/MaskedInputV2/MaskedInputV2.helpers.js +0 -17
  72. package/components/MaskedInputV2/MaskedInputV2.helpers.js.map +0 -1
  73. package/components/MaskedInputV2/MaskedInputV2.js +0 -286
  74. package/components/MaskedInputV2/MaskedInputV2.js.map +0 -1
  75. package/components/MaskedInputV2/MaskedInputV2.styles.d.ts +0 -7
  76. package/components/MaskedInputV2/MaskedInputV2.styles.js +0 -19
  77. package/components/MaskedInputV2/MaskedInputV2.styles.js.map +0 -1
  78. package/components/MaskedInputV2/index.d.ts +0 -1
  79. package/components/MaskedInputV2/index.js +0 -2
  80. package/components/MaskedInputV2/index.js.map +0 -1
  81. package/components/MaskedInputV2/internal/MaskOverlay.d.ts +0 -19
  82. package/components/MaskedInputV2/internal/MaskOverlay.js +0 -54
  83. package/components/MaskedInputV2/internal/MaskOverlay.js.map +0 -1
  84. package/components/MaskedInputV2/internal/MaskedCore.d.ts +0 -8
  85. package/components/MaskedInputV2/internal/MaskedCore.js +0 -126
  86. package/components/MaskedInputV2/internal/MaskedCore.js.map +0 -1
  87. package/components/MaskedInputV2/internal/MaskedCore.types.d.ts +0 -32
  88. package/components/MaskedInputV2/internal/MaskedCore.types.js +0 -2
  89. package/components/MaskedInputV2/internal/MaskedCore.types.js.map +0 -1
  90. package/components/MaskedInputV2/internal/MaskedInternal.styles.d.ts +0 -15
  91. package/components/MaskedInputV2/internal/MaskedInternal.styles.js +0 -34
  92. package/components/MaskedInputV2/internal/MaskedInternal.styles.js.map +0 -1
  93. package/components/MaskedInputV2/internal/buildSlotMap.d.ts +0 -11
  94. package/components/MaskedInputV2/internal/buildSlotMap.js +0 -37
  95. package/components/MaskedInputV2/internal/buildSlotMap.js.map +0 -1
  96. package/components/MaskedInputV2/internal/computeMaskAlignPadding.d.ts +0 -6
  97. package/components/MaskedInputV2/internal/computeMaskAlignPadding.js +0 -47
  98. package/components/MaskedInputV2/internal/computeMaskAlignPadding.js.map +0 -1
  99. package/components/MaskedInputV2/internal/computePasteMaskedCursor.d.ts +0 -3
  100. package/components/MaskedInputV2/internal/computePasteMaskedCursor.js +0 -11
  101. package/components/MaskedInputV2/internal/computePasteMaskedCursor.js.map +0 -1
  102. package/components/MaskedInputV2/internal/extractRaw.d.ts +0 -10
  103. package/components/MaskedInputV2/internal/extractRaw.js +0 -16
  104. package/components/MaskedInputV2/internal/extractRaw.js.map +0 -1
  105. package/components/MaskedInputV2/internal/findNearestRawLeft.d.ts +0 -10
  106. package/components/MaskedInputV2/internal/findNearestRawLeft.js +0 -18
  107. package/components/MaskedInputV2/internal/findNearestRawLeft.js.map +0 -1
  108. package/components/MaskedInputV2/internal/helpers.d.ts +0 -8
  109. package/components/MaskedInputV2/internal/helpers.js +0 -9
  110. package/components/MaskedInputV2/internal/helpers.js.map +0 -1
  111. package/components/MaskedInputV2/internal/maskedCoreClipboard.d.ts +0 -25
  112. package/components/MaskedInputV2/internal/maskedCoreClipboard.js +0 -30
  113. package/components/MaskedInputV2/internal/maskedCoreClipboard.js.map +0 -1
  114. package/components/MaskedInputV2/internal/maskedCoreDeletion.d.ts +0 -28
  115. package/components/MaskedInputV2/internal/maskedCoreDeletion.js +0 -70
  116. package/components/MaskedInputV2/internal/maskedCoreDeletion.js.map +0 -1
  117. package/components/MaskedInputV2/internal/maskedCoreInputChange.d.ts +0 -35
  118. package/components/MaskedInputV2/internal/maskedCoreInputChange.js +0 -31
  119. package/components/MaskedInputV2/internal/maskedCoreInputChange.js.map +0 -1
  120. package/components/MaskedInputV2/internal/maskedCoreNavigation.d.ts +0 -13
  121. package/components/MaskedInputV2/internal/maskedCoreNavigation.js +0 -79
  122. package/components/MaskedInputV2/internal/maskedCoreNavigation.js.map +0 -1
  123. package/components/MaskedInputV2/internal/measureInputTextWidth.d.ts +0 -2
  124. package/components/MaskedInputV2/internal/measureInputTextWidth.js +0 -30
  125. package/components/MaskedInputV2/internal/measureInputTextWidth.js.map +0 -1
  126. package/components/MaskedInputV2/internal/setMaskInputSelectionRange.d.ts +0 -2
  127. package/components/MaskedInputV2/internal/setMaskInputSelectionRange.js +0 -25
  128. package/components/MaskedInputV2/internal/setMaskInputSelectionRange.js.map +0 -1
  129. package/components/MaskedInputV2/internal/showOverlay.d.ts +0 -3
  130. package/components/MaskedInputV2/internal/showOverlay.js +0 -14
  131. package/components/MaskedInputV2/internal/showOverlay.js.map +0 -1
  132. package/components/MaskedInputV2/internal/stripMaskChars.d.ts +0 -11
  133. package/components/MaskedInputV2/internal/stripMaskChars.js +0 -20
  134. package/components/MaskedInputV2/internal/stripMaskChars.js.map +0 -1
  135. package/components/MaskedInputV2/internal/types.d.ts +0 -74
  136. package/components/MaskedInputV2/internal/types.js +0 -2
  137. package/components/MaskedInputV2/internal/types.js.map +0 -1
  138. package/components/MaskedInputV2/internal/useInputOverflow.d.ts +0 -4
  139. package/components/MaskedInputV2/internal/useInputOverflow.js +0 -30
  140. package/components/MaskedInputV2/internal/useInputOverflow.js.map +0 -1
  141. package/components/MaskedInputV2/internal/useMaskAlignPadding.d.ts +0 -2
  142. package/components/MaskedInputV2/internal/useMaskAlignPadding.js +0 -33
  143. package/components/MaskedInputV2/internal/useMaskAlignPadding.js.map +0 -1
  144. package/components/MaskedInputV2/internal/useMaskEngine.d.ts +0 -42
  145. package/components/MaskedInputV2/internal/useMaskEngine.js +0 -82
  146. package/components/MaskedInputV2/internal/useMaskEngine.js.map +0 -1
  147. package/components/MaskedInputV2/internal/useMaskedCoreHandlers.d.ts +0 -33
  148. package/components/MaskedInputV2/internal/useMaskedCoreHandlers.js +0 -244
  149. package/components/MaskedInputV2/internal/useMaskedCoreHandlers.js.map +0 -1
  150. package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.d.ts +0 -16
  151. package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.js +0 -59
  152. package/components/MaskedInputV2/react-imask/imask/controls/html-input-mask-element.js.map +0 -1
  153. package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.d.ts +0 -20
  154. package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.js +0 -106
  155. package/components/MaskedInputV2/react-imask/imask/controls/html-mask-element.js.map +0 -1
  156. package/components/MaskedInputV2/react-imask/imask/controls/input-history.d.ts +0 -17
  157. package/components/MaskedInputV2/react-imask/imask/controls/input-history.js +0 -49
  158. package/components/MaskedInputV2/react-imask/imask/controls/input-history.js.map +0 -1
  159. package/components/MaskedInputV2/react-imask/imask/controls/input.d.ts +0 -95
  160. package/components/MaskedInputV2/react-imask/imask/controls/input.js +0 -420
  161. package/components/MaskedInputV2/react-imask/imask/controls/input.js.map +0 -1
  162. package/components/MaskedInputV2/react-imask/imask/controls/mask-element.d.ts +0 -30
  163. package/components/MaskedInputV2/react-imask/imask/controls/mask-element.js +0 -59
  164. package/components/MaskedInputV2/react-imask/imask/controls/mask-element.js.map +0 -1
  165. package/components/MaskedInputV2/react-imask/imask/core/action-details.d.ts +0 -30
  166. package/components/MaskedInputV2/react-imask/imask/core/action-details.js +0 -100
  167. package/components/MaskedInputV2/react-imask/imask/core/action-details.js.map +0 -1
  168. package/components/MaskedInputV2/react-imask/imask/core/change-details.d.ts +0 -20
  169. package/components/MaskedInputV2/react-imask/imask/core/change-details.js +0 -46
  170. package/components/MaskedInputV2/react-imask/imask/core/change-details.js.map +0 -1
  171. package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.d.ts +0 -21
  172. package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.js +0 -52
  173. package/components/MaskedInputV2/react-imask/imask/core/continuous-tail-details.js.map +0 -1
  174. package/components/MaskedInputV2/react-imask/imask/core/holder.d.ts +0 -34
  175. package/components/MaskedInputV2/react-imask/imask/core/holder.js +0 -38
  176. package/components/MaskedInputV2/react-imask/imask/core/holder.js.map +0 -1
  177. package/components/MaskedInputV2/react-imask/imask/core/tail-details.d.ts +0 -20
  178. package/components/MaskedInputV2/react-imask/imask/core/tail-details.js +0 -2
  179. package/components/MaskedInputV2/react-imask/imask/core/tail-details.js.map +0 -1
  180. package/components/MaskedInputV2/react-imask/imask/core/utils.d.ts +0 -24
  181. package/components/MaskedInputV2/react-imask/imask/core/utils.js +0 -100
  182. package/components/MaskedInputV2/react-imask/imask/core/utils.js.map +0 -1
  183. package/components/MaskedInputV2/react-imask/imask/imask.d.ts +0 -5
  184. package/components/MaskedInputV2/react-imask/imask/imask.js +0 -7
  185. package/components/MaskedInputV2/react-imask/imask/imask.js.map +0 -1
  186. package/components/MaskedInputV2/react-imask/imask/index.d.ts +0 -17
  187. package/components/MaskedInputV2/react-imask/imask/index.js +0 -16
  188. package/components/MaskedInputV2/react-imask/imask/index.js.map +0 -1
  189. package/components/MaskedInputV2/react-imask/imask/masked/base.d.ts +0 -114
  190. package/components/MaskedInputV2/react-imask/imask/masked/base.js +0 -411
  191. package/components/MaskedInputV2/react-imask/imask/masked/base.js.map +0 -1
  192. package/components/MaskedInputV2/react-imask/imask/masked/factory.d.ts +0 -62
  193. package/components/MaskedInputV2/react-imask/imask/masked/factory.js +0 -96
  194. package/components/MaskedInputV2/react-imask/imask/masked/factory.js.map +0 -1
  195. package/components/MaskedInputV2/react-imask/imask/masked/pattern.d.ts +0 -101
  196. package/components/MaskedInputV2/react-imask/imask/masked/pattern.js +0 -543
  197. package/components/MaskedInputV2/react-imask/imask/masked/pattern.js.map +0 -1
  198. package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.d.ts +0 -30
  199. package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.js +0 -2
  200. package/components/MaskedInputV2/react-imask/imask/masked/patterns/block.js.map +0 -1
  201. package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.d.ts +0 -21
  202. package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.js +0 -180
  203. package/components/MaskedInputV2/react-imask/imask/masked/patterns/chunk-tail-details.js.map +0 -1
  204. package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.d.ts +0 -31
  205. package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.js +0 -163
  206. package/components/MaskedInputV2/react-imask/imask/masked/patterns/cursor.js.map +0 -1
  207. package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.d.ts +0 -42
  208. package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.js +0 -158
  209. package/components/MaskedInputV2/react-imask/imask/masked/patterns/fixed-definition.js.map +0 -1
  210. package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.d.ts +0 -56
  211. package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.js +0 -185
  212. package/components/MaskedInputV2/react-imask/imask/masked/patterns/input-definition.js.map +0 -1
  213. package/components/MaskedInputV2/react-imask/imask/masked/regexp.d.ts +0 -17
  214. package/components/MaskedInputV2/react-imask/imask/masked/regexp.js +0 -36
  215. package/components/MaskedInputV2/react-imask/imask/masked/regexp.js.map +0 -1
  216. package/components/MaskedInputV2/react-imask/index.d.ts +0 -3
  217. package/components/MaskedInputV2/react-imask/index.js +0 -4
  218. package/components/MaskedInputV2/react-imask/index.js.map +0 -1
  219. package/components/MaskedInputV2/react-imask/input.d.ts +0 -8
  220. package/components/MaskedInputV2/react-imask/input.js +0 -35
  221. package/components/MaskedInputV2/react-imask/input.js.map +0 -1
  222. package/components/MaskedInputV2/react-imask/mixin.d.ts +0 -31
  223. package/components/MaskedInputV2/react-imask/mixin.js +0 -246
  224. package/components/MaskedInputV2/react-imask/mixin.js.map +0 -1
@@ -24,6 +24,7 @@ import { MaskCharLowLine } from '../../internal/MaskCharLowLine/index.js';
24
24
  import { InternalDateValidator } from '../../lib/date/InternalDateValidator.js';
25
25
  import { InternalDateComponentType } from '../../lib/date/types.js';
26
26
  import { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';
27
+ import { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';
27
28
  import { ThemeContext } from '../../lib/theming/ThemeContext.js';
28
29
  import { getStyles } from './DateFragmentsView.styles.js';
29
30
  var DateFragmentsView = /** @class */ (function (_super) {
@@ -88,8 +89,10 @@ var DateFragmentsView = /** @class */ (function (_super) {
88
89
  ? Math.max(length - valueMask.toString().length, 0)
89
90
  : length;
90
91
  var handleMouseUp = function (e) {
91
- var _a, _b;
92
- if ((_b = (_a = _this.globalObject.document) === null || _a === void 0 ? void 0 : _a.activeElement) === null || _b === void 0 ? void 0 : _b.contains(e.currentTarget)) {
92
+ var _a, _b, _c, _d;
93
+ var root = (_a = _this.rootNode) === null || _a === void 0 ? void 0 : _a.getRootNode();
94
+ if ((isShadowRoot(root) && ((_b = root.activeElement) === null || _b === void 0 ? void 0 : _b.contains(e.currentTarget))) ||
95
+ ((_d = (_c = _this.globalObject.document) === null || _c === void 0 ? void 0 : _c.activeElement) === null || _d === void 0 ? void 0 : _d.contains(e.currentTarget))) {
93
96
  onSelectDateComponent(type, e);
94
97
  }
95
98
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DateFragmentsView.js","sourceRoot":"","sources":["DateFragmentsView.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React, { type JSX } from 'react';\n\nimport { MaskCharLowLine } from '../../internal/MaskCharLowLine/index.js';\nimport { InternalDateValidator } from '../../lib/date/InternalDateValidator.js';\nimport { InternalDateComponentType } from '../../lib/date/types.js';\nimport type { InternalDateFragment } from '../../lib/date/types.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { getStyles } from './DateFragmentsView.styles.js';\n\ninterface DateFragmentViewProps {\n selected: InternalDateComponentType | null;\n fragments: InternalDateFragment[];\n inputMode: boolean;\n onSelectDateComponent: (type: InternalDateComponentType, e: React.MouseEvent<HTMLSpanElement>) => void;\n}\n\n@withRenderEnvironment\nexport class DateFragmentsView extends React.Component<DateFragmentViewProps> {\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 rootNode: HTMLSpanElement | null = null;\n\n public isFragment = (el: HTMLElement | EventTarget): boolean => {\n if (this.rootNode) {\n // NOTE: NodeList doesn't support method 'forEach' in IE11\n const fragments: HTMLSpanElement[] = Array.from(this.rootNode.querySelectorAll('[data-fragment]'));\n return fragments.some((fragment) => fragment === el || fragment.contains(el as HTMLSpanElement));\n }\n return false;\n };\n\n public getRootNode = (): HTMLSpanElement | null => this.rootNode;\n\n public render(): React.JSX.Element {\n this.styles = getStyles(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 private renderMain() {\n return (\n <span\n ref={this.rootRef}\n className={this.cx({\n [this.styles.root()]: true,\n [this.styles.selected(this.theme)]: true,\n })}\n >\n {this.props.fragments.map((fragment, index) =>\n fragment.type === InternalDateComponentType.Separator\n ? this.renderSeparator(fragment, index)\n : this.renderDateComponent(fragment, index),\n )}\n </span>\n );\n }\n\n private renderSeparator(fragment: InternalDateFragment, index: number): JSX.Element {\n const separatorClassName = this.cx({\n [this.styles.mask(this.theme)]: true,\n [this.styles.delimiterFilled()]: this.props.fragments[index + 1].value !== null,\n });\n\n return (\n <span key={index} className={separatorClassName}>\n {fragment.value}\n </span>\n );\n }\n\n private renderDateComponent(fragment: InternalDateFragment, index: number): JSX.Element {\n const { inputMode, onSelectDateComponent, selected } = this.props;\n const { type, value, length, valueWithPad } = fragment;\n\n const getValueMask = () => {\n if (value === null || (selected === type && inputMode)) {\n return value;\n }\n\n return valueWithPad || value;\n };\n\n const valueMask = getValueMask();\n\n const lengthMask = InternalDateValidator.testParseToNumber(valueMask)\n ? Math.max(length - valueMask.toString().length, 0)\n : length;\n\n const handleMouseUp = (e: React.MouseEvent<HTMLSpanElement>) => {\n if (this.globalObject.document?.activeElement?.contains(e.currentTarget)) {\n onSelectDateComponent(type, e);\n }\n };\n\n return (\n <span key={index} data-fragment=\"\" onMouseUp={handleMouseUp}>\n {valueMask}\n <span data-tid=\"DateFragmentsView__placeholder\" className={this.styles.mask(this.theme)}>\n {Array(lengthMask)\n .fill('')\n .map((_, i) => (\n <MaskCharLowLine key={i} />\n ))}\n </span>\n </span>\n );\n }\n\n private rootRef = (el: HTMLSpanElement | null) => {\n this.rootNode = el;\n };\n}\n"]}
1
+ {"version":3,"file":"DateFragmentsView.js","sourceRoot":"","sources":["DateFragmentsView.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React, { type JSX } from 'react';\n\nimport { MaskCharLowLine } from '../../internal/MaskCharLowLine/index.js';\nimport { InternalDateValidator } from '../../lib/date/InternalDateValidator.js';\nimport { InternalDateComponentType } from '../../lib/date/types.js';\nimport type { InternalDateFragment } from '../../lib/date/types.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { getStyles } from './DateFragmentsView.styles.js';\n\ninterface DateFragmentViewProps {\n selected: InternalDateComponentType | null;\n fragments: InternalDateFragment[];\n inputMode: boolean;\n onSelectDateComponent: (type: InternalDateComponentType, e: React.MouseEvent<HTMLSpanElement>) => void;\n}\n\n@withRenderEnvironment\nexport class DateFragmentsView extends React.Component<DateFragmentViewProps> {\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 rootNode: HTMLSpanElement | null = null;\n\n public isFragment = (el: HTMLElement | EventTarget): boolean => {\n if (this.rootNode) {\n // NOTE: NodeList doesn't support method 'forEach' in IE11\n const fragments: HTMLSpanElement[] = Array.from(this.rootNode.querySelectorAll('[data-fragment]'));\n return fragments.some((fragment) => fragment === el || fragment.contains(el as HTMLSpanElement));\n }\n return false;\n };\n\n public getRootNode = (): HTMLSpanElement | null => this.rootNode;\n\n public render(): React.JSX.Element {\n this.styles = getStyles(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 private renderMain() {\n return (\n <span\n ref={this.rootRef}\n className={this.cx({\n [this.styles.root()]: true,\n [this.styles.selected(this.theme)]: true,\n })}\n >\n {this.props.fragments.map((fragment, index) =>\n fragment.type === InternalDateComponentType.Separator\n ? this.renderSeparator(fragment, index)\n : this.renderDateComponent(fragment, index),\n )}\n </span>\n );\n }\n\n private renderSeparator(fragment: InternalDateFragment, index: number): JSX.Element {\n const separatorClassName = this.cx({\n [this.styles.mask(this.theme)]: true,\n [this.styles.delimiterFilled()]: this.props.fragments[index + 1].value !== null,\n });\n\n return (\n <span key={index} className={separatorClassName}>\n {fragment.value}\n </span>\n );\n }\n\n private renderDateComponent(fragment: InternalDateFragment, index: number): JSX.Element {\n const { inputMode, onSelectDateComponent, selected } = this.props;\n const { type, value, length, valueWithPad } = fragment;\n\n const getValueMask = () => {\n if (value === null || (selected === type && inputMode)) {\n return value;\n }\n\n return valueWithPad || value;\n };\n\n const valueMask = getValueMask();\n\n const lengthMask = InternalDateValidator.testParseToNumber(valueMask)\n ? Math.max(length - valueMask.toString().length, 0)\n : length;\n\n const handleMouseUp = (e: any) => {\n const root = this.rootNode?.getRootNode() as ShadowRoot | Document;\n if (\n (isShadowRoot(root) && root.activeElement?.contains(e.currentTarget)) ||\n this.globalObject.document?.activeElement?.contains(e.currentTarget)\n ) {\n onSelectDateComponent(type, e);\n }\n };\n\n return (\n <span key={index} data-fragment=\"\" onMouseUp={handleMouseUp}>\n {valueMask}\n <span data-tid=\"DateFragmentsView__placeholder\" className={this.styles.mask(this.theme)}>\n {Array(lengthMask)\n .fill('')\n .map((_, i) => (\n <MaskCharLowLine key={i} />\n ))}\n </span>\n </span>\n );\n }\n\n private rootRef = (el: HTMLSpanElement | null) => {\n this.rootNode = el;\n };\n}\n"]}
@@ -8,7 +8,7 @@ import { CurrencyInput } from '../CurrencyInput/index.js';
8
8
  import type { CurrencyInputProps } from '../CurrencyInput/index.js';
9
9
  import { Input } from '../Input/index.js';
10
10
  import type { InputProps } from '../Input/Input.js';
11
- import { type MaskedInputProps } from '../MaskedInput/index.js';
11
+ import type { MaskedInputProps } from '../MaskedInput/index.js';
12
12
  export interface FxInputProps extends Pick<AriaAttributes, 'aria-label'>, CommonProps, Pick<Partial<MaskedInputProps>, 'alwaysShowMask' | 'mask' | 'maskChar' | 'formatChars'>, Override<Omit<CurrencyInputProps, 'alwaysShowMask' | 'mask' | 'maskChar' | 'formatChars'>, {
13
13
  /** Управляет видимостью кнопки Restore:
14
14
  * - true — кнопка Restore не отображается. Значение в поле является автоматически рассчитанным.
@@ -1 +1 @@
1
- {"version":3,"file":"FxInput.js","sourceRoot":"","sources":["FxInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { AriaAttributes } from 'react';\nimport React from 'react';\nimport warning from 'warning';\n\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper/types.js';\nimport type { DefaultizedProps } from '../../lib/createPropsGetter.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.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 { Override } from '../../typings/utility-types.js';\nimport { CurrencyInput } from '../CurrencyInput/index.js';\nimport type { CurrencyInputProps } from '../CurrencyInput/index.js';\nimport { Group } from '../Group/index.js';\nimport { Input } from '../Input/index.js';\nimport type { InputProps } from '../Input/Input.js';\nimport { MaskedInput, type MaskedInputProps } from '../MaskedInput/index.js';\nimport { FxInputRestoreBtn } from './FxInputRestoreBtn.js';\nimport { MathFunctionIcon } from './MathFunctionIcon.js';\n\nexport interface FxInputProps\n extends\n Pick<AriaAttributes, 'aria-label'>,\n CommonProps,\n Pick<Partial<MaskedInputProps>, 'alwaysShowMask' | 'mask' | 'maskChar' | 'formatChars'>,\n Override<\n Omit<CurrencyInputProps, 'alwaysShowMask' | 'mask' | 'maskChar' | 'formatChars'>,\n {\n /** Управляет видимостью кнопки Restore:\n * - true — кнопка Restore не отображается. Значение в поле является автоматически рассчитанным.\n * - false — кнопка Restore отображается в поле. Значение в поле считается отредактированным. */\n auto?: boolean;\n\n /** Тип поля. */\n type?: 'currency' | InputProps['type'];\n\n /** Событие нажатия на кнопку Restore. */\n onRestore?: () => void;\n\n /** Событие изменения value. */\n onValueChange: CurrencyInputProps['onValueChange'] | InputProps['onValueChange'];\n\n /** Значение поля. */\n value?: string | number;\n\n /** Задаёт ref поля. */\n refInput?: (element: CurrencyInput | Input | null) => void;\n\n /** Убирает лишние нули после запятой. */\n hideTrailingZeros?: boolean;\n\n /** Атрибут aria-label кнопке Restore. */\n buttonAriaLabel?: AriaAttributes['aria-label'];\n\n /** @ignore */\n corners?: React.CSSProperties;\n }\n > {}\n\nexport const FxInputDataTids = {\n root: 'FxInput__root',\n} as const;\n\ntype DefaultProps = Required<Pick<FxInputProps, 'width' | 'type' | 'value' | 'auto'>>;\ntype DefaultizedFxInputProps = DefaultizedProps<FxInputProps, DefaultProps>;\n\n/** В автополе можно вывести автоматически рассчитанное цифровое значение. В него можно передавать итог любого вычисления, например, сумму других полей, процент или более сложную функцию.\n *\n * У поля есть иконка математической формулы и кнопка Restore — с её помощью пользователь может вернуть исходное значение, если редактировал поле. Видимость кнопки и поведение при нажатии нужно прописывать в компоненте самостоятельно.\n */\n@rootNode\n@withSize\nexport class FxInput extends React.Component<FxInputProps> {\n public static __KONTUR_REACT_UI__ = 'FxInput';\n public static displayName = 'FxInput';\n\n public static defaultProps: DefaultProps = {\n width: 250,\n type: 'text',\n value: '',\n auto: false,\n };\n\n private theme!: Theme;\n private size!: SizeProp;\n private input: Input | CurrencyInput | null = null;\n\n private getProps = createPropsGetter(FxInput.defaultProps);\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n private validateProps(props: FxInputProps) {\n if (props.type === 'currency' && props.mask !== undefined) {\n warning(false, '[FxInput]: Prop \"mask\" is not supported when type=\"currency\"');\n }\n }\n\n public componentDidMount() {\n this.validateProps(this.getProps());\n }\n\n public componentDidUpdate() {\n this.validateProps(this.getProps());\n }\n\n public render(): React.JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DefaultizedFxInputProps>): React.JSX.Element => {\n const button = props.auto ? null : (\n <FxInputRestoreBtn\n size={props.size}\n onRestore={props.onRestore}\n corners={props.corners}\n disabled={props.disabled}\n borderless={props.borderless}\n aria-label={props.buttonAriaLabel}\n />\n );\n\n return (\n <Group data-tid={FxInputDataTids.root} width={props.width}>\n {button}\n {this.getInput(props)}\n </Group>\n );\n };\n\n /** Программно устанавливает фокус на поле.\n * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus = (): void => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n /** Программно снимает фокус с кнопки.\n * @public\n */\n public blur = (): void => {\n if (this.input) {\n this.input.blur();\n }\n };\n\n private refInput = (element: Input | CurrencyInput | null) => {\n this.input = element;\n\n if (this.props.refInput) {\n this.props.refInput(this.input);\n }\n };\n\n private getLeftIcon = (props: FxInputProps) => {\n if (!props.auto) {\n return null;\n }\n\n const iconSizes: Record<SizeProp, number> = {\n small: parseInt(this.theme.inputIconSizeSmall),\n medium: parseInt(this.theme.inputIconSizeMedium),\n large: parseInt(this.theme.inputIconSizeLarge),\n };\n const size = this.size;\n\n return <MathFunctionIcon size={iconSizes[size]} />;\n };\n\n private getInput = (props: FxInputProps) => {\n const {\n type,\n onRestore,\n auto,\n refInput,\n value,\n width,\n size: _size,\n mask,\n maskChar,\n formatChars,\n alwaysShowMask,\n signed,\n integerDigits,\n fractionDigits,\n hideTrailingZeros,\n buttonAriaLabel,\n corners: originalCorners,\n ...rest\n } = props;\n const corners: InputProps['corners'] = auto\n ? originalCorners\n : { borderBottomLeftRadius: 0, borderTopLeftRadius: 0, ...originalCorners };\n const size = this.size;\n const commonInputProps = {\n corners,\n size,\n width: '100%',\n ref: this.refInput,\n ...rest,\n };\n\n if (type === 'currency') {\n return (\n <CurrencyInput\n {...commonInputProps}\n signed={signed}\n integerDigits={integerDigits}\n fractionDigits={fractionDigits}\n value={value as CurrencyInputProps['value']}\n onValueChange={this.props.onValueChange as CurrencyInputProps['onValueChange']}\n />\n );\n }\n if (mask) {\n return (\n <MaskedInput\n {...commonInputProps}\n leftIcon={this.getLeftIcon(props)}\n align=\"right\"\n mask={mask}\n maskChar={maskChar}\n formatChars={formatChars}\n alwaysShowMask={alwaysShowMask}\n value={value as MaskedInputProps['value']}\n onValueChange={this.props.onValueChange as MaskedInputProps['onValueChange']}\n />\n );\n }\n return (\n <Input\n {...commonInputProps}\n leftIcon={this.getLeftIcon(props)}\n align=\"right\"\n type={type}\n value={value as InputProps['value']}\n onValueChange={this.props.onValueChange as InputProps['onValueChange']}\n />\n );\n };\n}\n"]}
1
+ {"version":3,"file":"FxInput.js","sourceRoot":"","sources":["FxInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAGtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAyCzD,MAAM,CAAC,IAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,eAAe;CACb,CAAC;AAKX;;;GAGG;AAGH;IAA6B,2BAA6B;IAA1D;;QAaU,WAAK,GAAiC,IAAI,CAAC;QAE3C,cAAQ,GAAG,iBAAiB,CAAC,SAAO,CAAC,YAAY,CAAC,CAAC;QAiCpD,gBAAU,GAAG,UAAC,KAAsD;YACzE,IAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACjC,oBAAC,iBAAiB,IAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,UAAU,EAAE,KAAK,CAAC,UAAU,gBAChB,KAAK,CAAC,eAAe,GACjC,CACH,CAAC;YAEF,OAAO,CACL,oBAAC,KAAK,gBAAW,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;gBACtD,MAAM;gBACN,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CACf,CACT,CAAC;QACJ,CAAC,CAAC;QAEF;;;WAGG;QACI,WAAK,GAAG;YACb,IAAI,KAAI,CAAC,KAAK,EAAE,CAAC;gBACf,KAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;QAEF;;WAEG;QACI,UAAI,GAAG;YACZ,IAAI,KAAI,CAAC,KAAK,EAAE,CAAC;gBACf,KAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QAEM,cAAQ,GAAG,UAAC,OAAqC;YACvD,KAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YAErB,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;QAEM,iBAAW,GAAG,UAAC,KAAmB;YACxC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAM,SAAS,GAA6B;gBAC1C,KAAK,EAAE,QAAQ,CAAC,KAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;gBAC9C,MAAM,EAAE,QAAQ,CAAC,KAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBAChD,KAAK,EAAE,QAAQ,CAAC,KAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;aAC/C,CAAC;YACF,IAAM,IAAI,GAAG,KAAI,CAAC,IAAI,CAAC;YAEvB,OAAO,oBAAC,gBAAgB,IAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,GAAI,CAAC;QACrD,CAAC,CAAC;QAEM,cAAQ,GAAG,UAAC,KAAmB;YAEnC,IAAA,IAAI,GAkBF,KAAK,KAlBH,EACJ,SAAS,GAiBP,KAAK,UAjBE,EACT,IAAI,GAgBF,KAAK,KAhBH,EACJ,QAAQ,GAeN,KAAK,SAfC,EACR,KAAK,GAcH,KAAK,MAdF,EACL,KAAK,GAaH,KAAK,MAbF,EACC,KAAK,GAYT,KAAK,KAZI,EACX,IAAI,GAWF,KAAK,KAXH,EACJ,QAAQ,GAUN,KAAK,SAVC,EACR,WAAW,GAST,KAAK,YATI,EACX,cAAc,GAQZ,KAAK,eARO,EACd,MAAM,GAOJ,KAAK,OAPD,EACN,aAAa,GAMX,KAAK,cANM,EACb,cAAc,GAKZ,KAAK,eALO,EACd,iBAAiB,GAIf,KAAK,kBAJU,EACjB,eAAe,GAGb,KAAK,gBAHQ,EACN,eAAe,GAEtB,KAAK,QAFiB,EACrB,IAAI,UACL,KAAK,EAnBH,wNAmBL,CADQ,CACC;YACV,IAAM,OAAO,GAA0B,IAAI;gBACzC,CAAC,CAAC,eAAe;gBACjB,CAAC,YAAG,sBAAsB,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,IAAK,eAAe,CAAE,CAAC;YAC9E,IAAM,IAAI,GAAG,KAAI,CAAC,IAAI,CAAC;YACvB,IAAM,gBAAgB,cACpB,OAAO,SAAA,EACP,IAAI,MAAA,EACJ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,KAAI,CAAC,QAAQ,IACf,IAAI,CACR,CAAC;YAEF,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,OAAO,CACL,oBAAC,aAAa,eACR,gBAAgB,IACpB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAoC,EAC3C,aAAa,EAAE,KAAI,CAAC,KAAK,CAAC,aAAoD,IAC9E,CACH,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CACL,oBAAC,WAAW,eACN,gBAAgB,IACpB,QAAQ,EAAE,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EACjC,KAAK,EAAC,OAAO,EACb,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAkC,EACzC,aAAa,EAAE,KAAI,CAAC,KAAK,CAAC,aAAkD,IAC5E,CACH,CAAC;YACJ,CAAC;YACD,OAAO,CACL,oBAAC,KAAK,eACA,gBAAgB,IACpB,QAAQ,EAAE,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EACjC,KAAK,EAAC,OAAO,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAA4B,EACnC,aAAa,EAAE,KAAI,CAAC,KAAK,CAAC,aAA4C,IACtE,CACH,CAAC;QACJ,CAAC,CAAC;;IACJ,CAAC;gBArLY,OAAO;IAmBV,+BAAa,GAArB,UAAsB,KAAmB;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1D,OAAO,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAEM,mCAAiB,GAAxB;QACE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,CAAC;IAEM,oCAAkB,GAAzB;QACE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,CAAC;IAEM,wBAAM,GAAb;QAAA,iBAaC;QAZC,OAAO,CACL,oBAAC,YAAY,CAAC,QAAQ,QACnB,UAAC,KAAK;YACL,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,OAAO,CACL,oBAAC,aAAa,aAAC,WAAW,EAAE,KAAI,CAAC,WAAW,IAAM,KAAI,CAAC,QAAQ,EAAE,GAC9D,KAAI,CAAC,UAAU,CACF,CACjB,CAAC;QACJ,CAAC,CACqB,CACzB,CAAC;IACJ,CAAC;;IA7Ca,2BAAmB,GAAG,SAAS,AAAZ,CAAa;IAChC,mBAAW,GAAG,SAAS,AAAZ,CAAa;IAExB,oBAAY,GAAiB;QACzC,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,KAAK;KACZ,AALyB,CAKxB;IATS,OAAO;QAFnB,QAAQ;QACR,QAAQ;OACI,OAAO,CAqLnB;IAAD,cAAC;CAAA,AArLD,CAA6B,KAAK,CAAC,SAAS,GAqL3C;SArLY,OAAO","sourcesContent":["import type { AriaAttributes } from 'react';\nimport React from 'react';\nimport warning from 'warning';\n\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper/types.js';\nimport type { DefaultizedProps } from '../../lib/createPropsGetter.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.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 { Override } from '../../typings/utility-types.js';\nimport { CurrencyInput } from '../CurrencyInput/index.js';\nimport type { CurrencyInputProps } from '../CurrencyInput/index.js';\nimport { Group } from '../Group/index.js';\nimport { Input } from '../Input/index.js';\nimport type { InputProps } from '../Input/Input.js';\nimport { MaskedInput } from '../MaskedInput/index.js';\nimport type { MaskedInputProps } from '../MaskedInput/index.js';\nimport { FxInputRestoreBtn } from './FxInputRestoreBtn.js';\nimport { MathFunctionIcon } from './MathFunctionIcon.js';\n\nexport interface FxInputProps\n extends\n Pick<AriaAttributes, 'aria-label'>,\n CommonProps,\n Pick<Partial<MaskedInputProps>, 'alwaysShowMask' | 'mask' | 'maskChar' | 'formatChars'>,\n Override<\n Omit<CurrencyInputProps, 'alwaysShowMask' | 'mask' | 'maskChar' | 'formatChars'>,\n {\n /** Управляет видимостью кнопки Restore:\n * - true — кнопка Restore не отображается. Значение в поле является автоматически рассчитанным.\n * - false — кнопка Restore отображается в поле. Значение в поле считается отредактированным. */\n auto?: boolean;\n\n /** Тип поля. */\n type?: 'currency' | InputProps['type'];\n\n /** Событие нажатия на кнопку Restore. */\n onRestore?: () => void;\n\n /** Событие изменения value. */\n onValueChange: CurrencyInputProps['onValueChange'] | InputProps['onValueChange'];\n\n /** Значение поля. */\n value?: string | number;\n\n /** Задаёт ref поля. */\n refInput?: (element: CurrencyInput | Input | null) => void;\n\n /** Убирает лишние нули после запятой. */\n hideTrailingZeros?: boolean;\n\n /** Атрибут aria-label кнопке Restore. */\n buttonAriaLabel?: AriaAttributes['aria-label'];\n\n /** @ignore */\n corners?: React.CSSProperties;\n }\n > {}\n\nexport const FxInputDataTids = {\n root: 'FxInput__root',\n} as const;\n\ntype DefaultProps = Required<Pick<FxInputProps, 'width' | 'type' | 'value' | 'auto'>>;\ntype DefaultizedFxInputProps = DefaultizedProps<FxInputProps, DefaultProps>;\n\n/** В автополе можно вывести автоматически рассчитанное цифровое значение. В него можно передавать итог любого вычисления, например, сумму других полей, процент или более сложную функцию.\n *\n * У поля есть иконка математической формулы и кнопка Restore — с её помощью пользователь может вернуть исходное значение, если редактировал поле. Видимость кнопки и поведение при нажатии нужно прописывать в компоненте самостоятельно.\n */\n@rootNode\n@withSize\nexport class FxInput extends React.Component<FxInputProps> {\n public static __KONTUR_REACT_UI__ = 'FxInput';\n public static displayName = 'FxInput';\n\n public static defaultProps: DefaultProps = {\n width: 250,\n type: 'text',\n value: '',\n auto: false,\n };\n\n private theme!: Theme;\n private size!: SizeProp;\n private input: Input | CurrencyInput | null = null;\n\n private getProps = createPropsGetter(FxInput.defaultProps);\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n private validateProps(props: FxInputProps) {\n if (props.type === 'currency' && props.mask !== undefined) {\n warning(false, '[FxInput]: Prop \"mask\" is not supported when type=\"currency\"');\n }\n }\n\n public componentDidMount() {\n this.validateProps(this.getProps());\n }\n\n public componentDidUpdate() {\n this.validateProps(this.getProps());\n }\n\n public render(): React.JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DefaultizedFxInputProps>): React.JSX.Element => {\n const button = props.auto ? null : (\n <FxInputRestoreBtn\n size={props.size}\n onRestore={props.onRestore}\n corners={props.corners}\n disabled={props.disabled}\n borderless={props.borderless}\n aria-label={props.buttonAriaLabel}\n />\n );\n\n return (\n <Group data-tid={FxInputDataTids.root} width={props.width}>\n {button}\n {this.getInput(props)}\n </Group>\n );\n };\n\n /** Программно устанавливает фокус на поле.\n * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus = (): void => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n /** Программно снимает фокус с кнопки.\n * @public\n */\n public blur = (): void => {\n if (this.input) {\n this.input.blur();\n }\n };\n\n private refInput = (element: Input | CurrencyInput | null) => {\n this.input = element;\n\n if (this.props.refInput) {\n this.props.refInput(this.input);\n }\n };\n\n private getLeftIcon = (props: FxInputProps) => {\n if (!props.auto) {\n return null;\n }\n\n const iconSizes: Record<SizeProp, number> = {\n small: parseInt(this.theme.inputIconSizeSmall),\n medium: parseInt(this.theme.inputIconSizeMedium),\n large: parseInt(this.theme.inputIconSizeLarge),\n };\n const size = this.size;\n\n return <MathFunctionIcon size={iconSizes[size]} />;\n };\n\n private getInput = (props: FxInputProps) => {\n const {\n type,\n onRestore,\n auto,\n refInput,\n value,\n width,\n size: _size,\n mask,\n maskChar,\n formatChars,\n alwaysShowMask,\n signed,\n integerDigits,\n fractionDigits,\n hideTrailingZeros,\n buttonAriaLabel,\n corners: originalCorners,\n ...rest\n } = props;\n const corners: InputProps['corners'] = auto\n ? originalCorners\n : { borderBottomLeftRadius: 0, borderTopLeftRadius: 0, ...originalCorners };\n const size = this.size;\n const commonInputProps = {\n corners,\n size,\n width: '100%',\n ref: this.refInput,\n ...rest,\n };\n\n if (type === 'currency') {\n return (\n <CurrencyInput\n {...commonInputProps}\n signed={signed}\n integerDigits={integerDigits}\n fractionDigits={fractionDigits}\n value={value as CurrencyInputProps['value']}\n onValueChange={this.props.onValueChange as CurrencyInputProps['onValueChange']}\n />\n );\n }\n if (mask) {\n return (\n <MaskedInput\n {...commonInputProps}\n leftIcon={this.getLeftIcon(props)}\n align=\"right\"\n mask={mask}\n maskChar={maskChar}\n formatChars={formatChars}\n alwaysShowMask={alwaysShowMask}\n value={value as MaskedInputProps['value']}\n onValueChange={this.props.onValueChange as MaskedInputProps['onValueChange']}\n />\n );\n }\n return (\n <Input\n {...commonInputProps}\n leftIcon={this.getLeftIcon(props)}\n align=\"right\"\n type={type}\n value={value as InputProps['value']}\n onValueChange={this.props.onValueChange as InputProps['onValueChange']}\n />\n );\n };\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import type { IMaskInputProps } from '@skbkontur/react-imask';
2
- import type { Input, InputProps, InputType } from '../Input/index.js';
2
+ import type { InputProps, InputType } from '../Input/index.js';
3
+ import { Input } from '../Input/index.js';
3
4
  export type MaskedInputOnBeforePasteValue = (value: string) => string;
4
5
  export interface MaskedProps {
5
6
  /** Шаблон ввода, определяющий допустимые символы. */
@@ -50,7 +51,5 @@ export interface MaskedInputProps extends MaskedProps, Omit<InputProps, 'showCle
50
51
  type?: MaskInputType;
51
52
  }
52
53
  /** Поле ввода, которое ограничивает формат вводимого значения по заданной маске. Такое поле облегчает пользователю ввод и снижает количество ошибок.
53
- *
54
- * Для исправленной реализации включите фичафлаг `useFixedMaskedInput` в {@link ReactUIFeatureFlagsContext}.
55
54
  */
56
55
  export declare const MaskedInput: import("../../lib/forwardRefAndName.js").ReactUIComponentWithRef<Input, MaskedInputProps> & Record<never, never>;
@@ -9,11 +9,27 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import React, { useContext } from 'react';
13
- import { ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext/index.js';
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import React, { useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';
24
+ import { isKeyBackspace, isKeyDelete } from '../../lib/events/keyboard/identifiers.js';
14
25
  import { forwardRefAndName } from '../../lib/forwardRefAndName.js';
15
- import { MaskedInputV2 } from '../MaskedInputV2/index.js';
16
- import { MaskedInputLegacy } from './MaskedInputLegacy.js';
26
+ import { useEmotion, useStyles } from '../../lib/renderEnvironment/index.js';
27
+ import { ThemeContext } from '../../lib/theming/ThemeContext.js';
28
+ import { Input } from '../Input/index.js';
29
+ import { ColorableInputElement } from './ColorableInputElement/index.js';
30
+ import { FixedIMaskInput } from './FixedIMaskInput.js';
31
+ import { getDefinitions, getMaskChar } from './MaskedInput.helpers.js';
32
+ import { getStyles, globalClasses } from './MaskedInput.styles.js';
17
33
  export var getSafeMaskInputType = function (type) {
18
34
  if (!type) {
19
35
  return type;
@@ -29,14 +45,114 @@ export var getSafeMaskInputType = function (type) {
29
45
  }
30
46
  };
31
47
  /** Поле ввода, которое ограничивает формат вводимого значения по заданной маске. Такое поле облегчает пользователю ввод и снижает количество ошибок.
32
- *
33
- * Для исправленной реализации включите фичафлаг `useFixedMaskedInput` в {@link ReactUIFeatureFlagsContext}.
34
48
  */
35
49
  export var MaskedInput = forwardRefAndName('MaskedInput', function MaskedInput(props, ref) {
36
- var useFixedMaskedInput = useContext(ReactUIFeatureFlagsContext).useFixedMaskedInput;
37
- if (useFixedMaskedInput) {
38
- return React.createElement(MaskedInputV2, __assign({ ref: ref, __fromMaskedInputFacade: true }, props));
50
+ var mask = props.mask, maskChar = props.maskChar, formatChars = props.formatChars, _a = props.alwaysShowMask, alwaysShowMask = _a === void 0 ? false : _a, _b = props.colored, colored = _b === void 0 ? true : _b, _c = props.imaskProps, customIMaskProps = _c === void 0 ? {} : _c, _d = props.unmask, unmask = _d === void 0 ? false : _d, onValueChange = props.onValueChange, onUnexpectedInput = props.onUnexpectedInput, onChange = props.onChange, onBeforePasteValue = props.onBeforePasteValue, element = props.element, className = props.className,
51
+ // @ts-expect-error: могут передавать игнорируя ошибку
52
+ maxLength = props.maxLength, inputProps = __rest(props, ["mask", "maskChar", "formatChars", "alwaysShowMask", "colored", "imaskProps", "unmask", "onValueChange", "onUnexpectedInput", "onChange", "onBeforePasteValue", "element", "className", "maxLength"]);
53
+ var theme = useContext(ThemeContext);
54
+ var cx = useEmotion().cx;
55
+ var styles = useStyles(getStyles);
56
+ var inputRef = useRef(null);
57
+ var _e = useState(false), focused = _e[0], setFocused = _e[1];
58
+ var prevValue = useRef(props.value || String(props.defaultValue) || '');
59
+ var prevSelectionStart = useRef(null);
60
+ useImperativeHandle(ref, function () {
61
+ return inputRef.current &&
62
+ Object.assign(inputRef.current, {
63
+ selectAll: function () {
64
+ var _a, _b;
65
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
66
+ (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.delaySelectAll();
67
+ },
68
+ });
69
+ }, []);
70
+ useEffect(function () {
71
+ var _a;
72
+ // Для корректной работы onUnexpectedInput надо знать предыдущий value,
73
+ // но imask при монтировании не вызывает onAccept, если value невалиден или laze=false.
74
+ // Поэтому актуальный value при монтировании надо получать вручную
75
+ if ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.input) {
76
+ prevValue.current = inputRef.current.input.value;
77
+ prevSelectionStart.current = inputRef.current.input.selectionStart;
78
+ }
79
+ }, []);
80
+ var imaskProps = getCompatibleIMaskProps();
81
+ return (React.createElement(Input, __assign({ ref: inputRef }, inputProps, { onFocus: handleFocus, onBlur: handleBlur, onInput: handleInput, onKeyDown: handleKeyDown, onPaste: handlePaste, className: cx(globalClasses.root, className, styles.root(theme)), element: colored ? (React.createElement(ColorableInputElement, { showOnFocus: false, alwaysShowMask: alwaysShowMask },
82
+ React.createElement(FixedIMaskInput, __assign({}, imaskProps, { onAccept: handleAccept })))) : (React.createElement(FixedIMaskInput, __assign({}, imaskProps, { onAccept: handleAccept }))) })));
83
+ function handlePaste(event) {
84
+ var _a, _b, _c;
85
+ if (onBeforePasteValue && onValueChange) {
86
+ event.preventDefault();
87
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(onBeforePasteValue((_b = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text')) !== null && _b !== void 0 ? _b : ''));
88
+ }
89
+ (_c = props.onPaste) === null || _c === void 0 ? void 0 : _c.call(props, event);
90
+ }
91
+ function getCompatibleIMaskProps() {
92
+ return __assign({ mask: mask.replace(/0/g, '{\\0}'), placeholderChar: getMaskChar(maskChar), definitions: getDefinitions(formatChars),
93
+ // FIXME: Должно быть eager=true, но в imask ломается удаление по delete
94
+ eager: 'append', overwrite: 'shift', lazy: !alwaysShowMask && (props.disabled || !focused), unmask: unmask }, customIMaskProps);
95
+ }
96
+ function handleAccept() {
97
+ var args = [];
98
+ for (var _i = 0; _i < arguments.length; _i++) {
99
+ args[_i] = arguments[_i];
100
+ }
101
+ var value = args[0], e = args[2];
102
+ // Метод onAccept может вызываться при монтировании, если не задан проп defaultValue.
103
+ // Но нативный input никогда не вызывает onChange при монтировании.
104
+ // Наше событие onValueChange в Input вывается в тех же случаях, что и нативный onChange,
105
+ // поэтому чтобы сохранить консинстентность будем ориентироваться на наличие аргумента e.
106
+ // Он содержит нативное событие, вызвавшее изменение.
107
+ e && (onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(value));
108
+ !e && (prevValue.current = value);
109
+ }
110
+ /**
111
+ * Отслеживаем неожиданные нажатия
112
+ * handleAccept не вызывается когда значение с маской не меняется
113
+ * Сначала вызывается handleAccept, затем handleInput
114
+ */
115
+ function handleInput(e) {
116
+ var _a;
117
+ var _b = e.currentTarget, value = _b.value, selectionStart = _b.selectionStart;
118
+ // При вводе неожиданных символов или удалении каретка может перепрыгивать фиксированные символы.
119
+ // Такие случаи не расцениваем как неожиданный ввод, т.к. пользователь может намеренно их вводить.
120
+ if (prevValue.current === value && selectionStart === prevSelectionStart.current) {
121
+ handleUnexpectedInput(value);
122
+ }
123
+ prevValue.current = value;
124
+ prevSelectionStart.current = selectionStart;
125
+ (_a = props.onInput) === null || _a === void 0 ? void 0 : _a.call(props, e);
126
+ }
127
+ function handleFocus(e) {
128
+ var _a, _b;
129
+ setFocused(true);
130
+ (_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e);
131
+ // Если value из пропсов отличается от value, которое получит input после обработки,
132
+ // то imask будет ставить каретку за последним валидным символом.
133
+ props.selectAllOnFocus && ((_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.delaySelectAll());
134
+ }
135
+ function handleUnexpectedInput(value) {
136
+ var _a;
137
+ var blink = ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blink.bind(inputRef.current)) || (function () { return undefined; });
138
+ onUnexpectedInput ? onUnexpectedInput(value, blink) : blink();
139
+ }
140
+ function handleBlur(e) {
141
+ var _a;
142
+ setFocused(false);
143
+ (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
144
+ }
145
+ function handleKeyDown(e) {
146
+ var _a;
147
+ var _b = e.currentTarget, value = _b.value, selectionStart = _b.selectionStart, selectionEnd = _b.selectionEnd;
148
+ if ((isKeyBackspace(e) && selectionStart === 0 && selectionEnd === 0) ||
149
+ (isKeyDelete(e) && prevSelectionStart.current === value.length)) {
150
+ // Случаи, когда нажатие клавиш не тригерит `onInput`
151
+ handleUnexpectedInput(value);
152
+ prevValue.current = e.currentTarget.value;
153
+ }
154
+ prevSelectionStart.current = selectionStart;
155
+ (_a = props.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(props, e);
39
156
  }
40
- return React.createElement(MaskedInputLegacy, __assign({ ref: ref }, props));
41
157
  });
42
158
  //# sourceMappingURL=MaskedInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInput.js","sourceRoot":"","sources":["MaskedInput.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,aAAa,EAA2B,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA0D3D,MAAM,CAAC,IAAM,oBAAoB,GAAG,UAAC,IAAgB;IACnD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU;YACb,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAYF;;;GAGG;AACH,MAAM,CAAC,IAAM,WAAW,GAAG,iBAAiB,CAC1C,aAAa,EACb,SAAS,WAAW,CAAC,KAAuB,EAAE,GAAsB;IAC1D,IAAA,mBAAmB,GAAK,UAAU,CAAC,0BAA0B,CAAC,oBAA3C,CAA4C;IAEvE,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,oBAAC,aAAa,aAAC,GAAG,EAAE,GAAG,EAAE,uBAAuB,UAAM,KAA4B,EAAI,CAAC;IAChG,CAAC;IAED,OAAO,oBAAC,iBAAiB,aAAC,GAAG,EAAE,GAAG,IAAM,KAAK,EAAI,CAAC;AACpD,CAAC,CACF,CAAC","sourcesContent":["import type { IMaskInputProps } from '@skbkontur/react-imask';\nimport React, { useContext } from 'react';\nimport type { Ref } from 'react';\n\nimport { ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext/index.js';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName.js';\nimport type { Input, InputProps, InputType } from '../Input/index.js';\nimport { MaskedInputV2, type MaskedInputV2Props } from '../MaskedInputV2/index.js';\nimport { MaskedInputLegacy } from './MaskedInputLegacy.js';\n\nexport type MaskedInputOnBeforePasteValue = (value: string) => string;\n\nexport interface MaskedProps {\n /** Шаблон ввода, определяющий допустимые символы. */\n mask: string;\n\n /** Плейсхолдер, который отображается на месте ещё не введённых пользователем символов.\n * @default _ */\n maskChar?: string;\n\n /** Словарь правил для настройки маски, где:\n * ключ — символ для использования в маске;\n * значение — регулярка-правило.\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' } */\n formatChars?: Record<string, string>;\n\n /** Всегда показывать символы маски, независимо от фокуса в поле.\n * @default false */\n alwaysShowMask?: boolean;\n\n /** Событие некорректного ввода.\n * Вторым аргументом передаётся метод вспыхивания рамки поля.\n *\n * Если обработчик не задан, то при событии рамка всегда вспыхивает.\n *\n * @param value значение поля\n * @param blink метод вспыхивания рамки поля\n */\n onUnexpectedInput?: (value: string, blink: () => void) => void;\n\n /**\n * Событие перед вставкой текста в поле.\n * Вызывается с аргументом value — текст из буфера.\n *\n * Обработчик должен вернуть текст — он попадёт в поле.\n *\n * @param value значение вставки.\n */\n onBeforePasteValue?: MaskedInputOnBeforePasteValue;\n\n /** Убирает из value символы маски, которые пользователь не вводил.\n * @default false */\n unmask?: boolean;\n\n /** Раскрашивает символы маски.\n * @default true\n * @ignore */\n colored?: boolean;\n\n /** Задает пропсы для компонента `IMaskInput`. Необходимы для юнит-тестов\n * @ignore */\n imaskProps?: IMaskInputProps<HTMLInputElement>;\n}\n\nexport type MaskInputType = Exclude<InputType, 'number' | 'date' | 'time' | 'password'>;\n\nexport const getSafeMaskInputType = (type?: InputType): MaskInputType | undefined => {\n if (!type) {\n return type;\n }\n\n switch (type) {\n case 'number':\n case 'date':\n case 'time':\n case 'password':\n return 'text';\n default:\n return type;\n }\n};\n\nexport interface MaskedInputProps\n extends\n MaskedProps,\n Omit<\n InputProps,\n 'showClearIcon' | 'mask' | 'maxLength' | 'type' | 'alwaysShowMask' | 'onUnexpectedInput' | 'maskChar'\n > {\n type?: MaskInputType;\n}\n\n/** Поле ввода, которое ограничивает формат вводимого значения по заданной маске. Такое поле облегчает пользователю ввод и снижает количество ошибок.\n *\n * Для исправленной реализации включите фичафлаг `useFixedMaskedInput` в {@link ReactUIFeatureFlagsContext}.\n */\nexport const MaskedInput = forwardRefAndName(\n 'MaskedInput',\n function MaskedInput(props: MaskedInputProps, ref: Ref<Input | null>) {\n const { useFixedMaskedInput } = useContext(ReactUIFeatureFlagsContext);\n\n if (useFixedMaskedInput) {\n return <MaskedInputV2 ref={ref} __fromMaskedInputFacade {...(props as MaskedInputV2Props)} />;\n }\n\n return <MaskedInputLegacy ref={ref} {...props} />;\n },\n);\n"]}
1
+ {"version":3,"file":"MaskedInput.js","sourceRoot":"","sources":["MaskedInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { IMaskInputProps } from '@skbkontur/react-imask';\nimport React, { useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport type { Ref } from 'react';\n\nimport { isKeyBackspace, isKeyDelete } from '../../lib/events/keyboard/identifiers.js';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName.js';\nimport { useEmotion, useStyles } from '../../lib/renderEnvironment/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { InputProps, InputType } from '../Input/index.js';\nimport { Input } from '../Input/index.js';\nimport { ColorableInputElement } from './ColorableInputElement/index.js';\nimport { FixedIMaskInput } from './FixedIMaskInput.js';\nimport { getDefinitions, getMaskChar } from './MaskedInput.helpers.js';\nimport { getStyles, globalClasses } from './MaskedInput.styles.js';\n\nexport type MaskedInputOnBeforePasteValue = (value: string) => string;\n\nexport interface MaskedProps {\n /** Шаблон ввода, определяющий допустимые символы. */\n mask: string;\n\n /** Плейсхолдер, который отображается на месте ещё не введённых пользователем символов.\n * @default _ */\n maskChar?: string;\n\n /** Словарь правил для настройки маски, где:\n * ключ — символ для использования в маске;\n * значение — регулярка-правило.\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' } */\n formatChars?: Record<string, string>;\n\n /** Всегда показывать символы маски, независимо от фокуса в поле.\n * @default false */\n alwaysShowMask?: boolean;\n\n /** Событие некорректного ввода.\n * Вторым аргументом передаётся метод вспыхивания рамки поля.\n *\n * Если обработчик не задан, то при событии рамка всегда вспыхивает.\n *\n * @param value значение поля\n * @param blink метод вспыхивания рамки поля\n */\n onUnexpectedInput?: (value: string, blink: () => void) => void;\n\n /**\n * Событие перед вставкой текста в поле.\n * Вызывается с аргументом value — текст из буфера.\n *\n * Обработчик должен вернуть текст — он попадёт в поле.\n *\n * @param value значение вставки.\n */\n onBeforePasteValue?: MaskedInputOnBeforePasteValue;\n\n /** Убирает из value символы маски, которые пользователь не вводил.\n * @default false */\n unmask?: boolean;\n\n /** Раскрашивает символы маски.\n * @default true\n * @ignore */\n colored?: boolean;\n\n /** Задает пропсы для компонента `IMaskInput`. Необходимы для юнит-тестов\n * @ignore */\n imaskProps?: IMaskInputProps<HTMLInputElement>;\n}\n\nexport type MaskInputType = Exclude<InputType, 'number' | 'date' | 'time' | 'password'>;\n\nexport const getSafeMaskInputType = (type?: InputType): MaskInputType | undefined => {\n if (!type) {\n return type;\n }\n\n switch (type) {\n case 'number':\n case 'date':\n case 'time':\n case 'password':\n return 'text';\n default:\n return type;\n }\n};\n\nexport interface MaskedInputProps\n extends\n MaskedProps,\n Omit<\n InputProps,\n 'showClearIcon' | 'mask' | 'maxLength' | 'type' | 'alwaysShowMask' | 'onUnexpectedInput' | 'maskChar'\n > {\n type?: MaskInputType;\n}\n\n/** Поле ввода, которое ограничивает формат вводимого значения по заданной маске. Такое поле облегчает пользователю ввод и снижает количество ошибок.\n */\nexport const MaskedInput = forwardRefAndName(\n 'MaskedInput',\n function MaskedInput(props: MaskedInputProps, ref: Ref<Input | null>) {\n const {\n mask,\n maskChar,\n formatChars,\n alwaysShowMask = false,\n colored = true,\n imaskProps: customIMaskProps = {},\n unmask = false,\n onValueChange,\n onUnexpectedInput,\n onChange,\n onBeforePasteValue,\n element,\n className,\n // @ts-expect-error: могут передавать игнорируя ошибку\n maxLength,\n ...inputProps\n } = props;\n const theme = useContext(ThemeContext);\n const { cx } = useEmotion();\n const styles = useStyles(getStyles);\n\n const inputRef = useRef<Input>(null);\n\n const [focused, setFocused] = useState(false);\n const prevValue = useRef<string>(props.value || String(props.defaultValue) || '');\n const prevSelectionStart = useRef<number | null>(null);\n\n useImperativeHandle<typeof inputRef.current, typeof inputRef.current>(\n ref,\n () =>\n inputRef.current &&\n Object.assign(inputRef.current, {\n selectAll: () => {\n inputRef.current?.focus();\n inputRef.current?.delaySelectAll();\n },\n }),\n [],\n );\n\n useEffect(() => {\n // Для корректной работы onUnexpectedInput надо знать предыдущий value,\n // но imask при монтировании не вызывает onAccept, если value невалиден или laze=false.\n // Поэтому актуальный value при монтировании надо получать вручную\n if (inputRef.current?.input) {\n prevValue.current = inputRef.current.input.value;\n prevSelectionStart.current = inputRef.current.input.selectionStart;\n }\n }, []);\n\n const imaskProps = getCompatibleIMaskProps();\n\n return (\n <Input\n ref={inputRef}\n {...inputProps}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n className={cx(globalClasses.root, className, styles.root(theme))}\n element={\n colored ? (\n <ColorableInputElement showOnFocus={false} alwaysShowMask={alwaysShowMask}>\n <FixedIMaskInput {...imaskProps} onAccept={handleAccept} />\n </ColorableInputElement>\n ) : (\n <FixedIMaskInput {...imaskProps} onAccept={handleAccept} />\n )\n }\n />\n );\n\n function handlePaste(event: React.ClipboardEvent<HTMLInputElement>) {\n if (onBeforePasteValue && onValueChange) {\n event.preventDefault();\n onValueChange?.(onBeforePasteValue(event.clipboardData?.getData('text') ?? ''));\n }\n\n props.onPaste?.(event);\n }\n\n function getCompatibleIMaskProps(): IMaskInputProps<HTMLInputElement> {\n return {\n mask: mask.replace(/0/g, '{\\\\0}') as any,\n placeholderChar: getMaskChar(maskChar),\n definitions: getDefinitions(formatChars),\n // FIXME: Должно быть eager=true, но в imask ломается удаление по delete\n eager: 'append',\n overwrite: 'shift',\n lazy: !alwaysShowMask && (props.disabled || !focused),\n unmask,\n ...customIMaskProps,\n } as IMaskInputProps<HTMLInputElement>;\n }\n\n function handleAccept(...args: Parameters<Required<IMaskInputProps<HTMLInputElement>>['onAccept']>) {\n const [value, , e] = args;\n\n // Метод onAccept может вызываться при монтировании, если не задан проп defaultValue.\n // Но нативный input никогда не вызывает onChange при монтировании.\n // Наше событие onValueChange в Input вывается в тех же случаях, что и нативный onChange,\n // поэтому чтобы сохранить консинстентность будем ориентироваться на наличие аргумента e.\n // Он содержит нативное событие, вызвавшее изменение.\n e && onValueChange?.(value);\n !e && (prevValue.current = value);\n }\n\n /**\n * Отслеживаем неожиданные нажатия\n * handleAccept не вызывается когда значение с маской не меняется\n * Сначала вызывается handleAccept, затем handleInput\n */\n function handleInput(e: React.ChangeEvent<HTMLInputElement>) {\n const { value, selectionStart } = e.currentTarget;\n\n // При вводе неожиданных символов или удалении каретка может перепрыгивать фиксированные символы.\n // Такие случаи не расцениваем как неожиданный ввод, т.к. пользователь может намеренно их вводить.\n if (prevValue.current === value && selectionStart === prevSelectionStart.current) {\n handleUnexpectedInput(value);\n }\n prevValue.current = value;\n prevSelectionStart.current = selectionStart;\n\n props.onInput?.(e);\n }\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(true);\n props.onFocus?.(e);\n\n // Если value из пропсов отличается от value, которое получит input после обработки,\n // то imask будет ставить каретку за последним валидным символом.\n props.selectAllOnFocus && inputRef.current?.delaySelectAll();\n }\n\n function handleUnexpectedInput(value: string) {\n const blink = inputRef.current?.blink.bind(inputRef.current) || (() => undefined);\n onUnexpectedInput ? onUnexpectedInput(value, blink) : blink();\n }\n\n function handleBlur(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(false);\n props.onBlur?.(e);\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n const { value, selectionStart, selectionEnd } = e.currentTarget;\n\n if (\n (isKeyBackspace(e) && selectionStart === 0 && selectionEnd === 0) ||\n (isKeyDelete(e) && prevSelectionStart.current === value.length)\n ) {\n // Случаи, когда нажатие клавиш не тригерит `onInput`\n handleUnexpectedInput(value);\n prevValue.current = e.currentTarget.value;\n }\n prevSelectionStart.current = selectionStart;\n\n props.onKeyDown?.(e);\n }\n },\n);\n"]}
@@ -8,7 +8,7 @@ export var globalClasses = prefix('masked-input')({
8
8
  root: 'root',
9
9
  });
10
10
  export var getStyles = memoizeGetStyles(function (emotion) {
11
- injectGlobalFont(emotion);
11
+ injectGlobalFont();
12
12
  return {
13
13
  root: function (t) {
14
14
  return emotion.css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n font-family: ", ", ", ";\n font-variant-numeric: tabular-nums;\n "], ["\n font-family: ", ", ", ";\n font-variant-numeric: tabular-nums;\n "])), UI_FONT_NAME, t.baseFontFamily);
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInput.styles.js","sourceRoot":"","sources":["MaskedInput.styles.ts"],"names":[],"mappings":";;;;AAEA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAGxE,MAAM,CAAC,IAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAClD,IAAI,EAAE,MAAM;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,IAAM,SAAS,GAAG,gBAAgB,CAAC,UAAC,OAAgB;IACzD,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO;QACL,IAAI,YAAC,CAAQ;YACX,OAAO,OAAO,CAAC,GAAG,4JAAA,yBACD,EAAY,IAAK,EAAgB,wDAEjD,KAFgB,YAAY,EAAK,CAAC,CAAC,cAAc,EAEhD;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { UI_FONT_NAME, injectGlobalFont } from '../../lib/styles/UiFont.js';\nimport { memoizeGetStyles, prefix } from '../../lib/theming/Emotion.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\n\nexport const globalClasses = prefix('masked-input')({\n root: 'root',\n});\n\nexport const getStyles = memoizeGetStyles((emotion: Emotion) => {\n injectGlobalFont(emotion);\n return {\n root(t: Theme) {\n return emotion.css`\n font-family: ${UI_FONT_NAME}, ${t.baseFontFamily};\n font-variant-numeric: tabular-nums;\n `;\n },\n };\n});\n"]}
1
+ {"version":3,"file":"MaskedInput.styles.js","sourceRoot":"","sources":["MaskedInput.styles.ts"],"names":[],"mappings":";;;;AAEA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAGxE,MAAM,CAAC,IAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAClD,IAAI,EAAE,MAAM;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,IAAM,SAAS,GAAG,gBAAgB,CAAC,UAAC,OAAgB;IACzD,gBAAgB,EAAE,CAAC;IACnB,OAAO;QACL,IAAI,YAAC,CAAQ;YACX,OAAO,OAAO,CAAC,GAAG,4JAAA,yBACD,EAAY,IAAK,EAAgB,wDAEjD,KAFgB,YAAY,EAAK,CAAC,CAAC,cAAc,EAEhD;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { UI_FONT_NAME, injectGlobalFont } from '../../lib/styles/UiFont.js';\nimport { memoizeGetStyles, prefix } from '../../lib/theming/Emotion.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\n\nexport const globalClasses = prefix('masked-input')({\n root: 'root',\n});\n\nexport const getStyles = memoizeGetStyles((emotion: Emotion) => {\n injectGlobalFont();\n return {\n root(t: Theme) {\n return emotion.css`\n font-family: ${UI_FONT_NAME}, ${t.baseFontFamily};\n font-variant-numeric: tabular-nums;\n `;\n },\n };\n});\n"]}
@@ -38,10 +38,10 @@ import { Popup } from '../../internal/Popup/index.js';
38
38
  import { RenderLayer } from '../../internal/RenderLayer/index.js';
39
39
  import { createPropsGetter } from '../../lib/createPropsGetter.js';
40
40
  import { isTestEnv } from '../../lib/currentEnvironment.js';
41
- import { isInstanceOf } from '../../lib/isInstanceOf.js';
42
- import { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside.js';
41
+ import { clickOutsideContent } from '../../lib/listenFocusOutside.js';
43
42
  import { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';
44
43
  import { rootNode } from '../../lib/rootNode/index.js';
44
+ import { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';
45
45
  import { withSize } from '../../lib/size/SizeDecorator.js';
46
46
  import { ThemeContext } from '../../lib/theming/ThemeContext.js';
47
47
  import { ThemeFactory } from '../../lib/theming/ThemeFactory.js';
@@ -425,10 +425,9 @@ var Tooltip = /** @class */ (function (_super) {
425
425
  }
426
426
  };
427
427
  Tooltip.prototype.isClickOutsideContent = function (event) {
428
- if (this.contentElement && isInstanceOf(event.target, this.globalObject.Element)) {
429
- return !containsTargetOrRenderContainer(event.target)(this.contentElement);
430
- }
431
- return true;
428
+ var node = this.contentElement;
429
+ var isShadowRootElement = isShadowRoot(this.emotion.sheet.container.getRootNode());
430
+ return clickOutsideContent(event, node, isShadowRootElement, this.globalObject);
432
431
  };
433
432
  var Tooltip_1;
434
433
  Tooltip.__KONTUR_REACT_UI__ = 'Tooltip';
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["Tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React, { type JSX } from 'react';\nimport warning from 'warning';\n\nimport { CloseButtonIcon } from '../../internal/CloseButtonIcon/CloseButtonIcon.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { PopupPositionsType, PopupProps, ShortPopupPositionsType } from '../../internal/Popup/index.js';\nimport { Popup } from '../../internal/Popup/index.js';\nimport { RenderLayer } from '../../internal/RenderLayer/index.js';\nimport type { RenderLayerProps } from '../../internal/RenderLayer/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport type { GlobalObject, SafeTimer } from '../../lib/globalObject.js';\nimport type { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement.js';\nimport { isInstanceOf } from '../../lib/isInstanceOf.js';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside.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 { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { isNullable } from '../../lib/utils.js';\nimport type { MouseEventType } from '../../typings/event-types.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { ResponsiveLayout } from '../ResponsiveLayout/ResponsiveLayout.js';\nimport { getStyles } from './Tooltip.styles.js';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /** @ignore */\n children?: React.ReactNode;\n\n /** Функция, возвращающая содержимое тултипа. При возврате `null` тултип не показывается. */\n render?: Nullable<() => React.ReactNode>;\n\n /** Размер тултипа.\n * @default small */\n size?: SizeProp;\n\n /** Приоритетное расположение тултипа относительно элемента. */\n pos?: ShortPopupPositionsType | PopupPositionsType;\n\n /** Список позиций, которые может занимать тултип. В списке обязательно должна быть позиция из пропа `pos`. */\n allowedPositions?: PopupPositionsType[];\n\n /** Триггер открытия тултипа. */\n trigger?: TooltipTrigger;\n\n /** Показывает крестик для закрытия тултипа.\n * По умолчанию крестик показывается, если проп `trigger` не равен `hover` или `focus`. */\n closeButton?: boolean;\n\n /** Элемент, относительно которого позиционируется тултип. */\n anchorElement?: HTMLElement;\n\n /** Отключает анимацию.\n * @default false */\n disableAnimations?: boolean;\n\n /** Оборачивает вложенные элементы в `<span />`.\n *\n * _Примечание_: при двух и более вложенных элементах обёртка будет добавлена автоматически. */\n useWrapper?: boolean;\n\n /** Задержка в миллисекундах до появления тултипа. */\n delayBeforeShow?: number;\n\n /** Событие нажатия на крестик. */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /** Событие нажатия на крестик или снаружи тултипа. */\n onCloseRequest?: (event?: Event | React.MouseEvent) => void;\n\n /** Событие закрытия тултипа. */\n onClose?: () => void;\n\n /** Событие открытия тултипа. */\n onOpen?: () => void;\n}\n\nconst DEFAULT_DELAY = 100;\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport const TooltipDataTids = {\n root: 'Tooltip__root',\n content: 'Tooltip__content',\n crossIcon: 'Tooltip__crossIcon',\n} as const;\n\nconst DefaultPositions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\nconst MobilePositions: PopupPositionsType[] = [\n 'top right',\n 'top center',\n 'top left',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\ninterface TooltipSizeVariables {\n closeButtonStyle: string;\n contentStyle: string;\n borderRadius: string;\n pinSize: string;\n pinOffsetX: string;\n pinOffsetY: string;\n margin: string;\n}\n\ntype DefaultProps = Required<Pick<TooltipProps, 'trigger' | 'disableAnimations' | 'useWrapper' | 'delayBeforeShow'>>;\n\n/**\n * Подсказка, которая объясняет состояние контрола или даёт контекстную справку.\n *\n * Открывается по клику, фокусу на элемент или наведению.\n * Может содержать изображения, кнопки, ссылки и прочие интерактивные элементы.\n */\n@withRenderEnvironment\n@rootNode\n@withSize\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n public static displayName = 'Tooltip';\n\n public static defaultProps: DefaultProps = {\n trigger: 'hover',\n disableAnimations: isTestEnv,\n useWrapper: false,\n delayBeforeShow: DEFAULT_DELAY,\n };\n\n private getProps = createPropsGetter(Tooltip.defaultProps);\n private validateProps(props: TooltipProps): void {\n warning(\n props.children || props.anchorElement,\n `[Tooltip]: you must provide either 'children' or 'anchorElement' prop for Tooltip to work properly`,\n );\n }\n\n public static delay = DEFAULT_DELAY;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n private static triggersToOverrideOnMobile: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private isMobileLayout = false;\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 size!: SizeProp;\n private sizeVariables!: TooltipSizeVariables;\n private hoverTimeout: SafeTimer;\n private contentElement: Nullable<HTMLElement> = null;\n private clickedOutside = true;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n\n public getAllowedPositions(): string[] {\n return this.props.allowedPositions ? this.props.allowedPositions : DefaultPositions;\n }\n\n public componentDidMount(): void {\n this.validateProps(this.getProps());\n }\n\n public componentDidUpdate() {\n const { trigger } = this.getProps();\n\n this.validateProps(this.getProps());\n if (trigger === 'closed' && this.state.opened) {\n this.close();\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n this.sizeVariables = this.getSizeVariables();\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupBackground: theme.tooltipBg,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: this.sizeVariables.borderRadius,\n popupPinSize: this.sizeVariables.pinSize,\n popupPinOffsetX: this.sizeVariables.pinOffsetX,\n popupPinOffsetY: this.sizeVariables.pinOffsetY,\n popupMargin: this.sizeVariables.margin,\n },\n theme,\n )}\n >\n <ResponsiveLayout>\n {(layout) => {\n this.isMobileLayout = layout.isMobile;\n return this.renderMain();\n }}\n </ResponsiveLayout>\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = (): React.JSX.Element | null => {\n const content = this.props.render ? this.props.render() : null;\n if (isNullable(content)) {\n return null;\n }\n\n return (\n <div\n ref={this.refContent}\n className={this.cx(this.styles.tooltipContent(this.theme), this.sizeVariables.contentStyle)}\n data-tid={TooltipDataTids.content}\n >\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton(): React.JSX.Element | null {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.getTrigger())\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n const icon = (\n <CloseButtonIcon\n tabbable={false}\n side={parseInt(this.theme.tooltipCloseBtnSide)}\n color={this.theme.tooltipCloseBtnColor}\n colorHover={this.theme.tooltipCloseBtnHoverColor}\n />\n );\n\n return (\n <div\n className={this.cx(this.styles.closeButton(this.theme), this.sizeVariables.closeButtonStyle)}\n onClick={this.handleCloseButtonClick}\n data-tid={TooltipDataTids.crossIcon}\n >\n {icon}\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Открывает тултип.\n * <p>Не работает при `trigger` = \"opened\" | \"closed\"`.</p>\n * @public\n */\n public show(): void {\n if (this.state.opened) {\n return;\n }\n const trigger = this.getTrigger();\n if (trigger === 'opened' || trigger === 'closed') {\n warning(false, `Function 'show' is not supported with trigger specified '${trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Закрывает тултип.\n * <p>Не работает при `trigger` = \"opened\" | \"closed\"`.</p>\n * @public\n */\n public hide(): void {\n const trigger = this.getTrigger();\n if (trigger === 'opened' || trigger === 'closed') {\n warning(false, `Function 'hide' is not supported with trigger specified '${trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getPopupAndLayerProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n const { disableAnimations } = this.getProps();\n const trigger = this.getTrigger();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n data-tid={TooltipDataTids.root}\n anchorElement={anchorElement}\n hasPin\n hasShadow\n {...(this.isMobileLayout ? {} : { maxWidth: 'none' })}\n opened={this.state.opened}\n disableAnimations={disableAnimations}\n positions={this.getPositions()}\n pos={this.getPos()}\n ignoreHover={trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n withoutMobile\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private getTrigger = (): TooltipTrigger => {\n const trigger = this.getProps().trigger;\n return this.isMobileLayout && Tooltip.triggersToOverrideOnMobile.includes(trigger) ? 'click' : trigger;\n };\n\n private getPos = (): TooltipProps['pos'] => {\n const positions = this.getPositions();\n const pos = this.props.pos;\n\n if (pos && positions.some((item) => item.startsWith(pos))) {\n return pos;\n }\n\n return positions[0];\n };\n\n private getPositions = (): PopupPositionsType[] => {\n const validPositions = this.isMobileLayout ? MobilePositions : DefaultPositions;\n\n return this.props.allowedPositions\n ? this.props.allowedPositions.filter((item) => validPositions.includes(item))\n : validPositions;\n };\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPopupAndLayerProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && this.getProps().useWrapper;\n const trigger = this.getTrigger();\n\n const defaultPopupAndLayerProps: ReturnType<typeof this.getPopupAndLayerProps> = {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n switch (trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return defaultPopupAndLayerProps;\n default:\n warning(false, `Unknown trigger specified: ${trigger}. Returning default value.`);\n return defaultPopupAndLayerProps;\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n const isHoverAnchor = this.getProps().trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n this.hoverTimeout = setTimeout(this.open, this.getProps().delayBeforeShow);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n const trigger = this.getTrigger();\n if (\n (trigger === 'hover&focus' && this.state.focused) ||\n (trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n if (this.isMobileLayout && this.state.opened) {\n this.close();\n return;\n }\n\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && isInstanceOf(event.target, this.globalObject.Element)) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n const trigger = this.getTrigger();\n if (trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n\n this.close();\n };\n\n private getSizeVariables = (): TooltipSizeVariables => {\n switch (this.size) {\n case 'small':\n return {\n closeButtonStyle: this.styles.closeButtonSmall(this.theme),\n contentStyle: this.styles.tooltipContentSmall(this.theme),\n borderRadius: this.theme.tooltipBorderRadiusSmall,\n pinSize: this.theme.tooltipPinSizeSmall,\n pinOffsetX: this.theme.tooltipPinOffsetXSmall,\n pinOffsetY: this.theme.tooltipPinOffsetYSmall,\n margin: this.theme.tooltipMarginSmall,\n };\n case 'medium':\n return {\n closeButtonStyle: this.styles.closeButtonMedium(this.theme),\n contentStyle: this.styles.tooltipContentMedium(this.theme),\n borderRadius: this.theme.tooltipBorderRadiusMedium,\n pinSize: this.theme.tooltipPinSizeMedium,\n pinOffsetX: this.theme.tooltipPinOffsetXMedium,\n pinOffsetY: this.theme.tooltipPinOffsetYMedium,\n margin: this.theme.tooltipMarginMedium,\n };\n case 'large':\n return {\n closeButtonStyle: this.styles.closeButtonLarge(this.theme),\n contentStyle: this.styles.tooltipContentLarge(this.theme),\n borderRadius: this.theme.tooltipBorderRadiusLarge,\n pinSize: this.theme.tooltipPinSizeLarge,\n pinOffsetX: this.theme.tooltipPinOffsetXLarge,\n pinOffsetY: this.theme.tooltipPinOffsetYLarge,\n margin: this.theme.tooltipMarginLarge,\n };\n default:\n warning(false, `Can't get size variables: invalid value in size prop '${this.props.size}'. Returning default`);\n return {\n closeButtonStyle: this.styles.closeButtonSmall(this.theme),\n contentStyle: this.styles.tooltipContentSmall(this.theme),\n borderRadius: this.theme.tooltipBorderRadiusSmall,\n pinSize: this.theme.tooltipPinSizeSmall,\n pinOffsetX: this.theme.tooltipPinOffsetXSmall,\n pinOffsetY: this.theme.tooltipPinOffsetYSmall,\n margin: this.theme.tooltipMarginSmall,\n };\n }\n };\n}\n"]}
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["Tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React, { type JSX } from 'react';\nimport warning from 'warning';\n\nimport { CloseButtonIcon } from '../../internal/CloseButtonIcon/CloseButtonIcon.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { PopupPositionsType, PopupProps, ShortPopupPositionsType } from '../../internal/Popup/index.js';\nimport { Popup } from '../../internal/Popup/index.js';\nimport { RenderLayer } from '../../internal/RenderLayer/index.js';\nimport type { RenderLayerProps } from '../../internal/RenderLayer/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport type { GlobalObject, SafeTimer } from '../../lib/globalObject.js';\nimport type { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement.js';\nimport { clickOutsideContent } from '../../lib/listenFocusOutside.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 { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { isNullable } from '../../lib/utils.js';\nimport type { MouseEventType } from '../../typings/event-types.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { ResponsiveLayout } from '../ResponsiveLayout/ResponsiveLayout.js';\nimport { getStyles } from './Tooltip.styles.js';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /** @ignore */\n children?: React.ReactNode;\n\n /** Функция, возвращающая содержимое тултипа. При возврате `null` тултип не показывается. */\n render?: Nullable<() => React.ReactNode>;\n\n /** Размер тултипа.\n * @default small */\n size?: SizeProp;\n\n /** Приоритетное расположение тултипа относительно элемента. */\n pos?: ShortPopupPositionsType | PopupPositionsType;\n\n /** Список позиций, которые может занимать тултип. В списке обязательно должна быть позиция из пропа `pos`. */\n allowedPositions?: PopupPositionsType[];\n\n /** Триггер открытия тултипа. */\n trigger?: TooltipTrigger;\n\n /** Показывает крестик для закрытия тултипа.\n * По умолчанию крестик показывается, если проп `trigger` не равен `hover` или `focus`. */\n closeButton?: boolean;\n\n /** Элемент, относительно которого позиционируется тултип. */\n anchorElement?: HTMLElement;\n\n /** Отключает анимацию.\n * @default false */\n disableAnimations?: boolean;\n\n /** Оборачивает вложенные элементы в `<span />`.\n *\n * _Примечание_: при двух и более вложенных элементах обёртка будет добавлена автоматически. */\n useWrapper?: boolean;\n\n /** Задержка в миллисекундах до появления тултипа. */\n delayBeforeShow?: number;\n\n /** Событие нажатия на крестик. */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /** Событие нажатия на крестик или снаружи тултипа. */\n onCloseRequest?: (event?: Event | React.MouseEvent) => void;\n\n /** Событие закрытия тултипа. */\n onClose?: () => void;\n\n /** Событие открытия тултипа. */\n onOpen?: () => void;\n}\n\nconst DEFAULT_DELAY = 100;\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport const TooltipDataTids = {\n root: 'Tooltip__root',\n content: 'Tooltip__content',\n crossIcon: 'Tooltip__crossIcon',\n} as const;\n\nconst DefaultPositions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\nconst MobilePositions: PopupPositionsType[] = [\n 'top right',\n 'top center',\n 'top left',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\ninterface TooltipSizeVariables {\n closeButtonStyle: string;\n contentStyle: string;\n borderRadius: string;\n pinSize: string;\n pinOffsetX: string;\n pinOffsetY: string;\n margin: string;\n}\n\ntype DefaultProps = Required<Pick<TooltipProps, 'trigger' | 'disableAnimations' | 'useWrapper' | 'delayBeforeShow'>>;\n\n/**\n * Подсказка, которая объясняет состояние контрола или даёт контекстную справку.\n *\n * Открывается по клику, фокусу на элемент или наведению.\n * Может содержать изображения, кнопки, ссылки и прочие интерактивные элементы.\n */\n@withRenderEnvironment\n@rootNode\n@withSize\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n public static displayName = 'Tooltip';\n\n public static defaultProps: DefaultProps = {\n trigger: 'hover',\n disableAnimations: isTestEnv,\n useWrapper: false,\n delayBeforeShow: DEFAULT_DELAY,\n };\n\n private getProps = createPropsGetter(Tooltip.defaultProps);\n private validateProps(props: TooltipProps): void {\n warning(\n props.children || props.anchorElement,\n `[Tooltip]: you must provide either 'children' or 'anchorElement' prop for Tooltip to work properly`,\n );\n }\n\n public static delay = DEFAULT_DELAY;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n private static triggersToOverrideOnMobile: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private isMobileLayout = false;\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 size!: SizeProp;\n private sizeVariables!: TooltipSizeVariables;\n private hoverTimeout: SafeTimer;\n private contentElement: Nullable<HTMLElement> = null;\n private clickedOutside = true;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n\n public getAllowedPositions(): string[] {\n return this.props.allowedPositions ? this.props.allowedPositions : DefaultPositions;\n }\n\n public componentDidMount(): void {\n this.validateProps(this.getProps());\n }\n\n public componentDidUpdate() {\n const { trigger } = this.getProps();\n\n this.validateProps(this.getProps());\n if (trigger === 'closed' && this.state.opened) {\n this.close();\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n this.sizeVariables = this.getSizeVariables();\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupBackground: theme.tooltipBg,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: this.sizeVariables.borderRadius,\n popupPinSize: this.sizeVariables.pinSize,\n popupPinOffsetX: this.sizeVariables.pinOffsetX,\n popupPinOffsetY: this.sizeVariables.pinOffsetY,\n popupMargin: this.sizeVariables.margin,\n },\n theme,\n )}\n >\n <ResponsiveLayout>\n {(layout) => {\n this.isMobileLayout = layout.isMobile;\n return this.renderMain();\n }}\n </ResponsiveLayout>\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = (): React.JSX.Element | null => {\n const content = this.props.render ? this.props.render() : null;\n if (isNullable(content)) {\n return null;\n }\n\n return (\n <div\n ref={this.refContent}\n className={this.cx(this.styles.tooltipContent(this.theme), this.sizeVariables.contentStyle)}\n data-tid={TooltipDataTids.content}\n >\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton(): React.JSX.Element | null {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.getTrigger())\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n const icon = (\n <CloseButtonIcon\n tabbable={false}\n side={parseInt(this.theme.tooltipCloseBtnSide)}\n color={this.theme.tooltipCloseBtnColor}\n colorHover={this.theme.tooltipCloseBtnHoverColor}\n />\n );\n\n return (\n <div\n className={this.cx(this.styles.closeButton(this.theme), this.sizeVariables.closeButtonStyle)}\n onClick={this.handleCloseButtonClick}\n data-tid={TooltipDataTids.crossIcon}\n >\n {icon}\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Открывает тултип.\n * <p>Не работает при `trigger` = \"opened\" | \"closed\"`.</p>\n * @public\n */\n public show(): void {\n if (this.state.opened) {\n return;\n }\n const trigger = this.getTrigger();\n if (trigger === 'opened' || trigger === 'closed') {\n warning(false, `Function 'show' is not supported with trigger specified '${trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Закрывает тултип.\n * <p>Не работает при `trigger` = \"opened\" | \"closed\"`.</p>\n * @public\n */\n public hide(): void {\n const trigger = this.getTrigger();\n if (trigger === 'opened' || trigger === 'closed') {\n warning(false, `Function 'hide' is not supported with trigger specified '${trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getPopupAndLayerProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n const { disableAnimations } = this.getProps();\n const trigger = this.getTrigger();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n data-tid={TooltipDataTids.root}\n anchorElement={anchorElement}\n hasPin\n hasShadow\n {...(this.isMobileLayout ? {} : { maxWidth: 'none' })}\n opened={this.state.opened}\n disableAnimations={disableAnimations}\n positions={this.getPositions()}\n pos={this.getPos()}\n ignoreHover={trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n withoutMobile\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private getTrigger = (): TooltipTrigger => {\n const trigger = this.getProps().trigger;\n return this.isMobileLayout && Tooltip.triggersToOverrideOnMobile.includes(trigger) ? 'click' : trigger;\n };\n\n private getPos = (): TooltipProps['pos'] => {\n const positions = this.getPositions();\n const pos = this.props.pos;\n\n if (pos && positions.some((item) => item.startsWith(pos))) {\n return pos;\n }\n\n return positions[0];\n };\n\n private getPositions = (): PopupPositionsType[] => {\n const validPositions = this.isMobileLayout ? MobilePositions : DefaultPositions;\n\n return this.props.allowedPositions\n ? this.props.allowedPositions.filter((item) => validPositions.includes(item))\n : validPositions;\n };\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPopupAndLayerProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && this.getProps().useWrapper;\n const trigger = this.getTrigger();\n\n const defaultPopupAndLayerProps: ReturnType<typeof this.getPopupAndLayerProps> = {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n switch (trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return defaultPopupAndLayerProps;\n default:\n warning(false, `Unknown trigger specified: ${trigger}. Returning default value.`);\n return defaultPopupAndLayerProps;\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n const isHoverAnchor = this.getProps().trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n this.hoverTimeout = setTimeout(this.open, this.getProps().delayBeforeShow);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n const trigger = this.getTrigger();\n if (\n (trigger === 'hover&focus' && this.state.focused) ||\n (trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n if (this.isMobileLayout && this.state.opened) {\n this.close();\n return;\n }\n\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n const node = this.contentElement;\n const isShadowRootElement = isShadowRoot(this.emotion.sheet.container.getRootNode());\n return clickOutsideContent(event, node, isShadowRootElement, this.globalObject);\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n const trigger = this.getTrigger();\n if (trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n\n this.close();\n };\n\n private getSizeVariables = (): TooltipSizeVariables => {\n switch (this.size) {\n case 'small':\n return {\n closeButtonStyle: this.styles.closeButtonSmall(this.theme),\n contentStyle: this.styles.tooltipContentSmall(this.theme),\n borderRadius: this.theme.tooltipBorderRadiusSmall,\n pinSize: this.theme.tooltipPinSizeSmall,\n pinOffsetX: this.theme.tooltipPinOffsetXSmall,\n pinOffsetY: this.theme.tooltipPinOffsetYSmall,\n margin: this.theme.tooltipMarginSmall,\n };\n case 'medium':\n return {\n closeButtonStyle: this.styles.closeButtonMedium(this.theme),\n contentStyle: this.styles.tooltipContentMedium(this.theme),\n borderRadius: this.theme.tooltipBorderRadiusMedium,\n pinSize: this.theme.tooltipPinSizeMedium,\n pinOffsetX: this.theme.tooltipPinOffsetXMedium,\n pinOffsetY: this.theme.tooltipPinOffsetYMedium,\n margin: this.theme.tooltipMarginMedium,\n };\n case 'large':\n return {\n closeButtonStyle: this.styles.closeButtonLarge(this.theme),\n contentStyle: this.styles.tooltipContentLarge(this.theme),\n borderRadius: this.theme.tooltipBorderRadiusLarge,\n pinSize: this.theme.tooltipPinSizeLarge,\n pinOffsetX: this.theme.tooltipPinOffsetXLarge,\n pinOffsetY: this.theme.tooltipPinOffsetYLarge,\n margin: this.theme.tooltipMarginLarge,\n };\n default:\n warning(false, `Can't get size variables: invalid value in size prop '${this.props.size}'. Returning default`);\n return {\n closeButtonStyle: this.styles.closeButtonSmall(this.theme),\n contentStyle: this.styles.tooltipContentSmall(this.theme),\n borderRadius: this.theme.tooltipBorderRadiusSmall,\n pinSize: this.theme.tooltipPinSizeSmall,\n pinOffsetX: this.theme.tooltipPinOffsetXSmall,\n pinOffsetY: this.theme.tooltipPinOffsetYSmall,\n margin: this.theme.tooltipMarginSmall,\n };\n }\n };\n}\n"]}