@skbkontur/react-ui 6.0.0-beta.4 → 6.0.1-cd7d7.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 (75) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/README.md +2 -2
  3. package/components/DateInput/DateInput.js +1 -1
  4. package/components/DateInput/DateInput.js.map +1 -1
  5. package/components/FileUploader/FileUploader.js +1 -0
  6. package/components/FileUploader/FileUploader.js.map +1 -1
  7. package/components/FileUploader/FileUploader.styles.d.ts +1 -0
  8. package/components/FileUploader/FileUploader.styles.js +7 -4
  9. package/components/FileUploader/FileUploader.styles.js.map +1 -1
  10. package/components/SingleToast/SingleToast.js +1 -1
  11. package/components/SingleToast/SingleToast.js.map +1 -1
  12. package/components/Textarea/Textarea.styles.js +1 -1
  13. package/components/Textarea/Textarea.styles.js.map +1 -1
  14. package/components/TokenInput/TokenInput.js +1 -1
  15. package/components/TokenInput/TokenInput.js.map +1 -1
  16. package/components/TokenInput/TokenInput.styles.d.ts +1 -0
  17. package/components/TokenInput/TokenInput.styles.js +6 -2
  18. package/components/TokenInput/TokenInput.styles.js.map +1 -1
  19. package/components/Tooltip/Tooltip.js +5 -6
  20. package/components/Tooltip/Tooltip.js.map +1 -1
  21. package/internal/CustomComboBox/ComboBoxView.d.ts +1 -4
  22. package/internal/CustomComboBox/ComboBoxView.js +1 -1
  23. package/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  24. package/internal/CustomComboBox/CustomComboBox.js +1 -1
  25. package/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  26. package/internal/FocusTrap/FocusTrap.d.ts +1 -0
  27. package/internal/FocusTrap/FocusTrap.js +6 -6
  28. package/internal/FocusTrap/FocusTrap.js.map +1 -1
  29. package/internal/InputLikeText/InputLikeText.js +1 -1
  30. package/internal/InputLikeText/InputLikeText.js.map +1 -1
  31. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.js +0 -1
  32. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.js.map +1 -1
  33. package/internal/MobilePopup/MobilePopup.d.ts +7 -0
  34. package/internal/MobilePopup/MobilePopup.js +14 -1
  35. package/internal/MobilePopup/MobilePopup.js.map +1 -1
  36. package/internal/MobilePopup/MobilePopup.styles.js +1 -1
  37. package/internal/MobilePopup/MobilePopup.styles.js.map +1 -1
  38. package/internal/Popup/Popup.d.ts +15 -1
  39. package/internal/Popup/Popup.js +169 -33
  40. package/internal/Popup/Popup.js.map +1 -1
  41. package/internal/Popup/PopupHelper.d.ts +29 -2
  42. package/internal/Popup/PopupHelper.js +109 -7
  43. package/internal/Popup/PopupHelper.js.map +1 -1
  44. package/internal/RenderContainer/RenderContainer.d.ts +4 -0
  45. package/internal/RenderContainer/RenderContainer.js +52 -5
  46. package/internal/RenderContainer/RenderContainer.js.map +1 -1
  47. package/internal/RenderLayer/RenderLayer.d.ts +1 -0
  48. package/internal/RenderLayer/RenderLayer.js +5 -7
  49. package/internal/RenderLayer/RenderLayer.js.map +1 -1
  50. package/internal/themes/BasicTheme.d.ts +0 -2
  51. package/internal/themes/BasicTheme.js +7 -9
  52. package/internal/themes/BasicTheme.js.map +1 -1
  53. package/internal/themes/DarkTheme6_0.js +3 -3
  54. package/internal/themes/DarkTheme6_0.js.map +1 -1
  55. package/lib/getElementRef.js +1 -4
  56. package/lib/getElementRef.js.map +1 -1
  57. package/lib/listenFocusOutside.d.ts +2 -0
  58. package/lib/listenFocusOutside.js +19 -2
  59. package/lib/listenFocusOutside.js.map +1 -1
  60. package/lib/renderEnvironment/RenderEnvironmentContext.d.ts +5 -0
  61. package/lib/renderEnvironment/RenderEnvironmentContext.js +17 -11
  62. package/lib/renderEnvironment/RenderEnvironmentContext.js.map +1 -1
  63. package/lib/shadowDom/isShadowRoot.d.ts +1 -0
  64. package/lib/shadowDom/isShadowRoot.js +2 -0
  65. package/lib/shadowDom/isShadowRoot.js.map +1 -0
  66. package/lib/styles/ColorFunctions.d.ts +20 -0
  67. package/lib/styles/ColorFunctions.js +20 -1
  68. package/lib/styles/ColorFunctions.js.map +1 -1
  69. package/lib/styles/ColorKeywords.d.ts +1 -0
  70. package/lib/styles/ColorKeywords.js +1 -0
  71. package/lib/styles/ColorKeywords.js.map +1 -1
  72. package/lib/theming/Emotion.d.ts +27 -1
  73. package/lib/theming/Emotion.js +20 -5
  74. package/lib/theming/Emotion.js.map +1 -1
  75. package/package.json +5 -5
@@ -7,23 +7,27 @@ function getPositionObject(position) {
7
7
  align: x[1],
8
8
  };
9
9
  }
10
- function getElementAbsoluteRect(element) {
10
+ function getElementAbsoluteRect(element, deltaParentPosition) {
11
+ if (deltaParentPosition === void 0) { deltaParentPosition = { top: 0, left: 0 }; }
11
12
  var globalObject = getOwnerGlobalObject(element);
12
13
  var rect = _getElementRelativeRect(element);
14
+ rect.top = rect.top - deltaParentPosition.top;
15
+ rect.left = rect.left - deltaParentPosition.left;
13
16
  return convertRectToAbsolute(rect, globalObject);
14
17
  }
15
- function isAbsoluteRectFullyVisible(coordinates, popupRect, globalObject) {
18
+ function isAbsoluteRectFullyVisible(coordinates, popupRect, globalObject, deltaParentPosition) {
19
+ if (deltaParentPosition === void 0) { deltaParentPosition = { top: 0, left: 0 }; }
16
20
  var windowRelativeRect = _getWindowRelativeRect(globalObject);
17
21
  var windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect, globalObject);
18
22
  var absoluteRect = {
19
- top: coordinates.top,
20
- left: coordinates.left,
23
+ top: coordinates.top + deltaParentPosition.top,
24
+ left: coordinates.left + deltaParentPosition.left,
21
25
  height: popupRect.height,
22
26
  width: popupRect.width,
23
27
  };
24
28
  return _rectContainsRect(windowAbsoluteRect, absoluteRect);
25
29
  }
26
- // Can become fully visible by scrolling into viewport
30
+ /** Может стать полностью видимым после прокрутки в область видимости */
27
31
  function canBecomeFullyVisible(positionName, coordinates, globalObject) {
28
32
  var position = getPositionObject(positionName);
29
33
  if (position.direction === 'top') {
@@ -34,7 +38,7 @@ function canBecomeFullyVisible(positionName, coordinates, globalObject) {
34
38
  var availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);
35
39
  return coordinates.left + availableScrollDistances.left >= 0;
36
40
  }
37
- // NOTE: for bottom/right cases browser will always expand document size
41
+ // NOTE: в случаях bottom/right браузер всегда расширяет размер документа
38
42
  return true;
39
43
  }
40
44
  function _getElementRelativeRect(element) {
@@ -54,7 +58,7 @@ function _getWindowRelativeRect(globalObject) {
54
58
  height: _getViewProperty(function (x) { return x.clientHeight; }, globalObject) || globalObject.innerHeight || 0,
55
59
  };
56
60
  }
57
- function convertRectToAbsolute(rect, globalObject) {
61
+ export function convertRectToAbsolute(rect, globalObject) {
58
62
  var offset = _getAbsoluteOffset(globalObject);
59
63
  return {
60
64
  top: rect.top + offset.top,
@@ -81,6 +85,98 @@ function _rectContainsRect(outerRect, innerRect) {
81
85
  innerRect.left > outerRect.left &&
82
86
  innerRect.left + innerRect.width < outerRect.left + outerRect.width);
83
87
  }
88
+ /** Прямоугольник вьюпорта в координатах документа (абсолютных) */
89
+ function getViewportAbsoluteRect(globalObject) {
90
+ return convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);
91
+ }
92
+ /** Какие стороны попапа (с заданными координатами) выходят за пределы вьюпорта */
93
+ function getOverflowEdges(coordinates, popupRect, globalObject) {
94
+ var viewport = getViewportAbsoluteRect(globalObject);
95
+ var popup = {
96
+ top: coordinates.top,
97
+ left: coordinates.left,
98
+ width: popupRect.width,
99
+ height: popupRect.height,
100
+ };
101
+ return {
102
+ top: popup.top < viewport.top,
103
+ bottom: popup.top + popup.height > viewport.top + viewport.height,
104
+ left: popup.left < viewport.left,
105
+ right: popup.left + popup.width > viewport.left + viewport.width,
106
+ };
107
+ }
108
+ /** Количество сторон, по которым попап выходит за вьюпорт (0–4) */
109
+ function getOverflowCount(overflow) {
110
+ return [overflow.top, overflow.bottom, overflow.left, overflow.right].filter(Boolean).length;
111
+ }
112
+ /** Предпочтительное направление по вертикали при переполнении */
113
+ function getPreferredDirection(overflow, defaultPosition) {
114
+ if (overflow.bottom) {
115
+ return 'top';
116
+ }
117
+ if (overflow.top) {
118
+ return 'bottom';
119
+ }
120
+ return getPositionObject(defaultPosition).direction;
121
+ }
122
+ /**
123
+ * Упорядоченный список кандидатов для fallback-позиции: при горизонтальном переполнении
124
+ * сначала позиции с нужным align (в т.ч. из pinnablePositions), затем по direction и positions.
125
+ */
126
+ function getOrderedFallbackCandidates(positions, overflow, preferredDirection, preferredAlignOrder, pinnablePositions) {
127
+ var seen = new Set();
128
+ var add = function (p) {
129
+ if (!seen.has(p)) {
130
+ seen.add(p);
131
+ return true;
132
+ }
133
+ return false;
134
+ };
135
+ var candidates = [];
136
+ var hasHorizontalOverflow = overflow.left || overflow.right;
137
+ if (hasHorizontalOverflow) {
138
+ var preferredAlign = preferredAlignOrder[0];
139
+ for (var _i = 0, _a = ['bottom', 'top']; _i < _a.length; _i++) {
140
+ var dir = _a[_i];
141
+ var p = "".concat(dir, " ").concat(preferredAlign);
142
+ if (pinnablePositions.includes(p) && add(p)) {
143
+ candidates.push(p);
144
+ }
145
+ }
146
+ for (var _b = 0, preferredAlignOrder_1 = preferredAlignOrder; _b < preferredAlignOrder_1.length; _b++) {
147
+ var align = preferredAlignOrder_1[_b];
148
+ for (var _c = 0, positions_1 = positions; _c < positions_1.length; _c++) {
149
+ var p = positions_1[_c];
150
+ if (getPositionObject(p).align === align && add(p)) {
151
+ candidates.push(p);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ for (var _d = 0, preferredAlignOrder_2 = preferredAlignOrder; _d < preferredAlignOrder_2.length; _d++) {
157
+ var align = preferredAlignOrder_2[_d];
158
+ for (var _e = 0, positions_2 = positions; _e < positions_2.length; _e++) {
159
+ var p = positions_2[_e];
160
+ var pos = getPositionObject(p);
161
+ if (pos.direction === preferredDirection && pos.align === align && add(p)) {
162
+ candidates.push(p);
163
+ }
164
+ }
165
+ }
166
+ for (var _f = 0, positions_3 = positions; _f < positions_3.length; _f++) {
167
+ var p = positions_3[_f];
168
+ if (getPositionObject(p).direction === preferredDirection && add(p)) {
169
+ candidates.push(p);
170
+ }
171
+ }
172
+ for (var _g = 0, positions_4 = positions; _g < positions_4.length; _g++) {
173
+ var p = positions_4[_g];
174
+ if (add(p)) {
175
+ candidates.push(p);
176
+ }
177
+ }
178
+ return candidates;
179
+ }
84
180
  function _getViewProperty(getProperty, globalObject) {
85
181
  var _a, _b;
86
182
  var views = [(_a = globalObject.document) === null || _a === void 0 ? void 0 : _a.documentElement, (_b = globalObject.document) === null || _b === void 0 ? void 0 : _b.body];
@@ -90,6 +186,12 @@ export var PopupHelper = {
90
186
  getPositionObject: getPositionObject,
91
187
  getElementAbsoluteRect: getElementAbsoluteRect,
92
188
  isFullyVisible: isAbsoluteRectFullyVisible,
189
+ convertRectToAbsolute: convertRectToAbsolute,
93
190
  canBecomeFullyVisible: canBecomeFullyVisible,
191
+ getViewportAbsoluteRect: getViewportAbsoluteRect,
192
+ getOverflowEdges: getOverflowEdges,
193
+ getOverflowCount: getOverflowCount,
194
+ getPreferredDirection: getPreferredDirection,
195
+ getOrderedFallbackCandidates: getOrderedFallbackCandidates,
94
196
  };
95
197
  //# sourceMappingURL=PopupHelper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PopupHelper.js","sourceRoot":"","sources":["../../../internal/Popup/PopupHelper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { getOwnerGlobalObject } from '../../lib/globalObject.js';\n\nimport type { PopupPositionsType } from './Popup.js';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: Element): Rect {\n const globalObject = getOwnerGlobalObject(element);\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect, globalObject);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect, globalObject: GlobalObject): boolean {\n const windowRelativeRect = _getWindowRelativeRect(globalObject);\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect, globalObject);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\n// Can become fully visible by scrolling into viewport\nfunction canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset, globalObject: GlobalObject) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: Element) {\n const rect = getDOMRect(element);\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(globalObject: GlobalObject): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth, globalObject) || globalObject.innerWidth || 0,\n height: _getViewProperty((x) => x.clientHeight, globalObject) || globalObject.innerHeight || 0,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect, globalObject: GlobalObject): Rect {\n const offset = _getAbsoluteOffset(globalObject);\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(globalObject: GlobalObject): Offset {\n const scrollTop = globalObject.pageYOffset || _getViewProperty((x) => x.scrollTop, globalObject);\n const scrollLeft = globalObject.pageXOffset || _getViewProperty((x) => x.scrollLeft, globalObject);\n\n const clientTop = _getViewProperty((x) => x.clientTop, globalObject);\n const clientLeft = _getViewProperty((x) => x.clientLeft, globalObject);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\nfunction _getViewProperty(getProperty: (e: Element) => number, globalObject: GlobalObject): number {\n const views = [globalObject.document?.documentElement, globalObject.document?.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n};\n"]}
1
+ {"version":3,"file":"PopupHelper.js","sourceRoot":"","sources":["../../../internal/Popup/PopupHelper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { getOwnerGlobalObject } from '../../lib/globalObject.js';\n\nimport type { PopupPositionsType } from './Popup.js';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: Element, deltaParentPosition: Offset = { top: 0, left: 0 }): Rect {\n const globalObject = getOwnerGlobalObject(element);\n const rect = _getElementRelativeRect(element);\n rect.top = rect.top - deltaParentPosition.top;\n rect.left = rect.left - deltaParentPosition.left;\n return convertRectToAbsolute(rect, globalObject);\n}\n\nfunction isAbsoluteRectFullyVisible(\n coordinates: Offset,\n popupRect: Rect,\n globalObject: GlobalObject,\n deltaParentPosition: Offset = { top: 0, left: 0 },\n): boolean {\n const windowRelativeRect = _getWindowRelativeRect(globalObject);\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect, globalObject);\n const absoluteRect = {\n top: coordinates.top + deltaParentPosition.top,\n left: coordinates.left + deltaParentPosition.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\n/** Может стать полностью видимым после прокрутки в область видимости */\nfunction canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset, globalObject: GlobalObject) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: в случаях bottom/right браузер всегда расширяет размер документа\n return true;\n}\n\nfunction _getElementRelativeRect(element: Element) {\n const rect = getDOMRect(element);\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(globalObject: GlobalObject): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth, globalObject) || globalObject.innerWidth || 0,\n height: _getViewProperty((x) => x.clientHeight, globalObject) || globalObject.innerHeight || 0,\n };\n}\n\nexport function convertRectToAbsolute(rect: Rect, globalObject: GlobalObject): Rect {\n const offset = _getAbsoluteOffset(globalObject);\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(globalObject: GlobalObject): Offset {\n const scrollTop = globalObject.pageYOffset || _getViewProperty((x) => x.scrollTop, globalObject);\n const scrollLeft = globalObject.pageXOffset || _getViewProperty((x) => x.scrollLeft, globalObject);\n\n const clientTop = _getViewProperty((x) => x.clientTop, globalObject);\n const clientLeft = _getViewProperty((x) => x.clientLeft, globalObject);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\n/** Прямоугольник вьюпорта в координатах документа (абсолютных) */\nfunction getViewportAbsoluteRect(globalObject: GlobalObject): Rect {\n return convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n}\n\nexport interface OverflowEdges {\n top: boolean;\n bottom: boolean;\n left: boolean;\n right: boolean;\n}\n\n/** Какие стороны попапа (с заданными координатами) выходят за пределы вьюпорта */\nfunction getOverflowEdges(coordinates: Offset, popupRect: Rect, globalObject: GlobalObject): OverflowEdges {\n const viewport = getViewportAbsoluteRect(globalObject);\n const popup = {\n top: coordinates.top,\n left: coordinates.left,\n width: popupRect.width,\n height: popupRect.height,\n };\n return {\n top: popup.top < viewport.top,\n bottom: popup.top + popup.height > viewport.top + viewport.height,\n left: popup.left < viewport.left,\n right: popup.left + popup.width > viewport.left + viewport.width,\n };\n}\n\n/** Количество сторон, по которым попап выходит за вьюпорт (0–4) */\nfunction getOverflowCount(overflow: OverflowEdges): number {\n return [overflow.top, overflow.bottom, overflow.left, overflow.right].filter(Boolean).length;\n}\n\n/** Предпочтительное направление по вертикали при переполнении */\nfunction getPreferredDirection(overflow: OverflowEdges, defaultPosition: PopupPositionsType): string {\n if (overflow.bottom) {\n return 'top';\n }\n if (overflow.top) {\n return 'bottom';\n }\n return getPositionObject(defaultPosition).direction;\n}\n\n/**\n * Упорядоченный список кандидатов для fallback-позиции: при горизонтальном переполнении\n * сначала позиции с нужным align (в т.ч. из pinnablePositions), затем по direction и positions.\n */\nfunction getOrderedFallbackCandidates(\n positions: Readonly<PopupPositionsType[]>,\n overflow: OverflowEdges,\n preferredDirection: string,\n preferredAlignOrder: string[],\n pinnablePositions: Readonly<PopupPositionsType[]>,\n): PopupPositionsType[] {\n const seen = new Set<PopupPositionsType>();\n const add = (p: PopupPositionsType) => {\n if (!seen.has(p)) {\n seen.add(p);\n return true;\n }\n return false;\n };\n\n const candidates: PopupPositionsType[] = [];\n const hasHorizontalOverflow = overflow.left || overflow.right;\n\n if (hasHorizontalOverflow) {\n const preferredAlign = preferredAlignOrder[0];\n for (const dir of ['bottom', 'top']) {\n const p = `${dir} ${preferredAlign}` as PopupPositionsType;\n if (pinnablePositions.includes(p) && add(p)) {\n candidates.push(p);\n }\n }\n for (const align of preferredAlignOrder) {\n for (const p of positions) {\n if (getPositionObject(p).align === align && add(p)) {\n candidates.push(p);\n }\n }\n }\n }\n\n for (const align of preferredAlignOrder) {\n for (const p of positions) {\n const pos = getPositionObject(p);\n if (pos.direction === preferredDirection && pos.align === align && add(p)) {\n candidates.push(p);\n }\n }\n }\n for (const p of positions) {\n if (getPositionObject(p).direction === preferredDirection && add(p)) {\n candidates.push(p);\n }\n }\n for (const p of positions) {\n if (add(p)) {\n candidates.push(p);\n }\n }\n\n return candidates;\n}\n\nfunction _getViewProperty(getProperty: (e: Element) => number, globalObject: GlobalObject): number {\n const views = [globalObject.document?.documentElement, globalObject.document?.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n convertRectToAbsolute,\n canBecomeFullyVisible,\n getViewportAbsoluteRect,\n getOverflowEdges,\n getOverflowCount,\n getPreferredDirection,\n getOrderedFallbackCandidates,\n};\n"]}
@@ -12,11 +12,15 @@ export declare class RenderContainer extends React.Component<RenderContainerProp
12
12
  private static getRootId;
13
13
  static readonly defaultRootNode: null;
14
14
  private domContainer;
15
+ private popupStrategy;
15
16
  private readonly rootId;
16
17
  getRootNode: TGetRootNode;
17
18
  shouldComponentUpdate(nextProps: RenderContainerProps): boolean;
18
19
  componentWillUnmount(): void;
20
+ private reflowContainer;
19
21
  render(): React.JSX.Element;
22
+ private debouncedReflowContainer;
23
+ renderMain(): React.JSX.Element;
20
24
  private createContainer;
21
25
  private mountContainer;
22
26
  private destroyContainer;
@@ -25,10 +25,13 @@ var __assign = (this && this.__assign) || function () {
25
25
  return __assign.apply(this, arguments);
26
26
  };
27
27
  import React from 'react';
28
+ import debounce from 'lodash.debounce';
28
29
  import { RenderEnvironmentContext } from '../../lib/renderEnvironment/index.js';
29
30
  import { getRandomID } from '../../lib/utils.js';
30
31
  import { Upgrade } from '../../lib/Upgrades.js';
31
32
  import { callChildRef } from '../../lib/callChildRef/callChildRef.js';
33
+ import { PopupConsumer } from '../../lib/theming/Emotion.js';
34
+ import { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';
32
35
  import { RenderInnerContainer } from './RenderInnerContainer.js';
33
36
  export var PORTAL_INLET_ATTR = 'data-render-container-id';
34
37
  export var PORTAL_OUTLET_ATTR = 'data-rendered-container-id';
@@ -39,6 +42,15 @@ var RenderContainer = /** @class */ (function (_super) {
39
42
  _this.domContainer = RenderContainer.defaultRootNode;
40
43
  _this.rootId = RenderContainer.getRootId();
41
44
  _this.getRootNode = function () { return _this.domContainer; };
45
+ _this.reflowContainer = function () {
46
+ var _a;
47
+ var root = _this.context.emotion.sheet.container.getRootNode();
48
+ var globalObject = _this.context.globalObject;
49
+ if (isShadowRoot(root) && _this.domContainer && globalObject) {
50
+ _this.domContainer.setAttribute('style', "position: fixed;z-index: 2;\n margin-top: -".concat(root.host.getBoundingClientRect().height + ((_a = globalObject.scrollY) !== null && _a !== void 0 ? _a : 0), "px;\n margin-left: -").concat(_this.context.globalObject.scrollX, "px;\n "));
51
+ }
52
+ };
53
+ _this.debouncedReflowContainer = debounce(_this.reflowContainer, 32);
42
54
  return _this;
43
55
  }
44
56
  RenderContainer.prototype.shouldComponentUpdate = function (nextProps) {
@@ -51,31 +63,66 @@ var RenderContainer = /** @class */ (function (_super) {
51
63
  return true;
52
64
  };
53
65
  RenderContainer.prototype.componentWillUnmount = function () {
66
+ var _a, _b, _c, _d;
54
67
  this.destroyContainer();
68
+ if (this.context.globalObject) {
69
+ (_b = (_a = this.context.globalObject).removeEventListener) === null || _b === void 0 ? void 0 : _b.call(_a, 'scroll', this.reflowContainer);
70
+ (_d = (_c = this.context.globalObject).removeEventListener) === null || _d === void 0 ? void 0 : _d.call(_c, 'resize', this.reflowContainer);
71
+ }
55
72
  };
56
73
  RenderContainer.prototype.render = function () {
74
+ var _this = this;
75
+ return (React.createElement(PopupConsumer, null, function (_a) {
76
+ var popupStrategy = _a.popupStrategy;
77
+ _this.popupStrategy = popupStrategy !== null && popupStrategy !== void 0 ? popupStrategy : 'auto';
78
+ return _this.renderMain();
79
+ }));
80
+ };
81
+ RenderContainer.prototype.renderMain = function () {
57
82
  if (this.props.children) {
58
83
  this.mountContainer();
59
84
  }
60
85
  return React.createElement(RenderInnerContainer, __assign({}, this.props, { domContainer: this.domContainer, rootId: this.rootId }));
61
86
  };
62
87
  RenderContainer.prototype.createContainer = function () {
63
- var _a;
64
- var domContainer = (_a = this.context.globalObject.document) === null || _a === void 0 ? void 0 : _a.createElement('div');
88
+ var _a, _b, _c, _d;
89
+ var globalObject = this.context.globalObject;
90
+ var domContainer = (_a = globalObject === null || globalObject === void 0 ? void 0 : globalObject.document) === null || _a === void 0 ? void 0 : _a.createElement('div');
65
91
  if (domContainer) {
66
92
  domContainer.setAttribute('class', Upgrade.getSpecificityClassName());
93
+ var root = this.context.emotion.sheet.container.getRootNode();
94
+ if (isShadowRoot(root) && globalObject) {
95
+ var rootHeight = root.host.getBoundingClientRect().height;
96
+ switch (this.popupStrategy) {
97
+ case 'relative':
98
+ domContainer.setAttribute('style', "position: relative; top: -".concat(rootHeight, "px"));
99
+ break;
100
+ case 'auto':
101
+ case 'absolute':
102
+ domContainer.setAttribute('style', "position: absolute; z-index: 2; margin-top: -".concat(rootHeight, "px;"));
103
+ break;
104
+ case 'fixed': {
105
+ (_b = globalObject.addEventListener) === null || _b === void 0 ? void 0 : _b.call(globalObject, 'scroll', this.debouncedReflowContainer);
106
+ (_c = globalObject.addEventListener) === null || _c === void 0 ? void 0 : _c.call(globalObject, 'resize', this.debouncedReflowContainer);
107
+ domContainer.setAttribute('style', "position: fixed;z-index: 2;\n margin-top: -".concat(rootHeight + ((_d = globalObject.scrollY) !== null && _d !== void 0 ? _d : 0), "px;\n margin-left: -").concat(globalObject.scrollX, "px;\n "));
108
+ break;
109
+ }
110
+ }
111
+ }
67
112
  domContainer.setAttribute(PORTAL_OUTLET_ATTR, "".concat(this.rootId));
68
113
  this.domContainer = domContainer;
69
114
  }
70
115
  };
71
116
  RenderContainer.prototype.mountContainer = function () {
72
- var _a, _b;
117
+ var _a, _b, _c;
73
118
  var globalWithReactTesting = this.context.globalObject;
74
119
  if (!this.domContainer) {
75
120
  this.createContainer();
76
121
  }
77
- if (this.domContainer && this.domContainer.parentNode !== ((_a = this.context.globalObject.document) === null || _a === void 0 ? void 0 : _a.body)) {
78
- (_b = this.context.globalObject.document) === null || _b === void 0 ? void 0 : _b.body.appendChild(this.domContainer);
122
+ var stylesRoot = (_b = (_a = this.context.emotion.sheet) === null || _a === void 0 ? void 0 : _a.container) === null || _b === void 0 ? void 0 : _b.getRootNode();
123
+ var rootElement = isShadowRoot(stylesRoot) && stylesRoot ? stylesRoot : (_c = this.context.globalObject.document) === null || _c === void 0 ? void 0 : _c.body;
124
+ if (this.domContainer && this.domContainer.parentNode !== rootElement) {
125
+ rootElement === null || rootElement === void 0 ? void 0 : rootElement.appendChild(this.domContainer);
79
126
  if (this.props.containerRef) {
80
127
  callChildRef(this.props.containerRef, this.domContainer);
81
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RenderContainer.js","sourceRoot":"","sources":["../../../internal/RenderContainer/RenderContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type { TGetRootNode } from '../../lib/rootNode/rootNodeDecorator.js';\nimport { RenderEnvironmentContext } from '../../lib/renderEnvironment/index.js';\nimport type { RenderEnvironmentContextType } from '../../lib/renderEnvironment/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getRandomID } from '../../lib/utils.js';\nimport { Upgrade } from '../../lib/Upgrades.js';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef.js';\n\nimport { RenderInnerContainer } from './RenderInnerContainer.js';\nimport type { RenderContainerProps } from './RenderContainerTypes.js';\n\ninterface GlobalWithReactTesting {\n ReactTesting?: any;\n}\n\nexport const PORTAL_INLET_ATTR = 'data-render-container-id';\nexport const PORTAL_OUTLET_ATTR = 'data-rendered-container-id';\n\nexport class RenderContainer extends React.Component<RenderContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderContainer';\n public static displayName = 'RenderContainer';\n\n public static contextType = RenderEnvironmentContext;\n public context!: RenderEnvironmentContextType;\n\n private static getRootId = () => getRandomID();\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n private domContainer: Nullable<HTMLElement> = RenderContainer.defaultRootNode;\n\n private readonly rootId: string = RenderContainer.getRootId();\n\n public getRootNode: TGetRootNode = (): Nullable<Element> => this.domContainer;\n\n public shouldComponentUpdate(nextProps: RenderContainerProps) {\n if (!this.props.children && nextProps.children) {\n this.mountContainer();\n }\n if (this.props.children && !nextProps.children) {\n this.unmountContainer();\n }\n return true;\n }\n\n public componentWillUnmount() {\n this.destroyContainer();\n }\n\n public render() {\n if (this.props.children) {\n this.mountContainer();\n }\n\n return <RenderInnerContainer {...this.props} domContainer={this.domContainer} rootId={this.rootId} />;\n }\n\n private createContainer() {\n const domContainer = this.context.globalObject.document?.createElement('div');\n if (domContainer) {\n domContainer.setAttribute('class', Upgrade.getSpecificityClassName());\n domContainer.setAttribute(PORTAL_OUTLET_ATTR, `${this.rootId}`);\n this.domContainer = domContainer;\n }\n }\n\n private mountContainer() {\n const globalWithReactTesting = this.context.globalObject as GlobalWithReactTesting;\n\n if (!this.domContainer) {\n this.createContainer();\n }\n if (this.domContainer && this.domContainer.parentNode !== this.context.globalObject.document?.body) {\n this.context.globalObject.document?.body.appendChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, this.domContainer);\n }\n if (globalWithReactTesting.ReactTesting) {\n globalWithReactTesting.ReactTesting.addRenderContainer(this.rootId, this);\n }\n }\n }\n\n private destroyContainer() {\n if (this.domContainer) {\n this.unmountContainer();\n this.domContainer = null;\n }\n }\n\n private unmountContainer() {\n if (this.domContainer && this.domContainer.parentNode) {\n this.domContainer.parentNode.removeChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, null);\n }\n\n const globalWithReactTesting = this.context.globalObject as GlobalWithReactTesting;\n if (globalWithReactTesting.ReactTesting) {\n globalWithReactTesting.ReactTesting.removeRenderContainer(this.rootId);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"RenderContainer.js","sourceRoot":"","sources":["../../../internal/RenderContainer/RenderContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport debounce from 'lodash.debounce';\n\nimport type { TGetRootNode } from '../../lib/rootNode/rootNodeDecorator.js';\nimport { RenderEnvironmentContext } from '../../lib/renderEnvironment/index.js';\nimport type { PopupStrategy, RenderEnvironmentContextType } from '../../lib/renderEnvironment/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getRandomID } from '../../lib/utils.js';\nimport { Upgrade } from '../../lib/Upgrades.js';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef.js';\nimport { PopupConsumer } from '../../lib/theming/Emotion.js';\nimport { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';\n\nimport { RenderInnerContainer } from './RenderInnerContainer.js';\nimport type { RenderContainerProps } from './RenderContainerTypes.js';\n\ninterface GlobalWithReactTesting {\n ReactTesting?: any;\n}\n\nexport const PORTAL_INLET_ATTR = 'data-render-container-id';\nexport const PORTAL_OUTLET_ATTR = 'data-rendered-container-id';\n\nexport class RenderContainer extends React.Component<RenderContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderContainer';\n public static displayName = 'RenderContainer';\n\n public static contextType = RenderEnvironmentContext;\n public context!: RenderEnvironmentContextType;\n\n private static getRootId = () => getRandomID();\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n private domContainer: Nullable<HTMLElement> = RenderContainer.defaultRootNode;\n private popupStrategy!: PopupStrategy;\n\n private readonly rootId: string = RenderContainer.getRootId();\n\n public getRootNode: TGetRootNode = (): Nullable<Element> => this.domContainer;\n\n public shouldComponentUpdate(nextProps: RenderContainerProps) {\n if (!this.props.children && nextProps.children) {\n this.mountContainer();\n }\n if (this.props.children && !nextProps.children) {\n this.unmountContainer();\n }\n return true;\n }\n\n public componentWillUnmount() {\n this.destroyContainer();\n if (this.context.globalObject) {\n this.context.globalObject.removeEventListener?.('scroll', this.reflowContainer);\n this.context.globalObject.removeEventListener?.('resize', this.reflowContainer);\n }\n }\n\n private reflowContainer = () => {\n const root = this.context.emotion.sheet.container.getRootNode() as ShadowRoot | Document;\n const globalObject = this.context.globalObject;\n if (isShadowRoot(root) && this.domContainer && globalObject) {\n this.domContainer.setAttribute(\n 'style',\n `position: fixed;z-index: 2;\n margin-top: -${root.host.getBoundingClientRect().height + (globalObject.scrollY ?? 0)}px;\n margin-left: -${this.context.globalObject.scrollX}px;\n `,\n );\n }\n };\n\n public render() {\n return (\n <PopupConsumer>\n {({ popupStrategy }) => {\n this.popupStrategy = popupStrategy ?? 'auto';\n return this.renderMain();\n }}\n </PopupConsumer>\n );\n }\n\n private debouncedReflowContainer = debounce(this.reflowContainer, 32);\n\n public renderMain() {\n if (this.props.children) {\n this.mountContainer();\n }\n\n return <RenderInnerContainer {...this.props} domContainer={this.domContainer} rootId={this.rootId} />;\n }\n\n private createContainer() {\n const globalObject = this.context.globalObject;\n const domContainer = globalObject?.document?.createElement('div');\n if (domContainer) {\n domContainer.setAttribute('class', Upgrade.getSpecificityClassName());\n\n const root = this.context.emotion.sheet.container.getRootNode() as ShadowRoot | Document;\n if (isShadowRoot(root) && globalObject) {\n const rootHeight = root.host.getBoundingClientRect().height;\n switch (this.popupStrategy) {\n case 'relative':\n domContainer.setAttribute('style', `position: relative; top: -${rootHeight}px`);\n break;\n case 'auto':\n case 'absolute':\n domContainer.setAttribute('style', `position: absolute; z-index: 2; margin-top: -${rootHeight}px;`);\n break;\n case 'fixed': {\n globalObject.addEventListener?.('scroll', this.debouncedReflowContainer);\n globalObject.addEventListener?.('resize', this.debouncedReflowContainer);\n domContainer.setAttribute(\n 'style',\n `position: fixed;z-index: 2;\n margin-top: -${rootHeight + (globalObject.scrollY ?? 0)}px;\n margin-left: -${globalObject.scrollX}px;\n `,\n );\n break;\n }\n }\n }\n\n domContainer.setAttribute(PORTAL_OUTLET_ATTR, `${this.rootId}`);\n this.domContainer = domContainer;\n }\n }\n\n private mountContainer() {\n const globalWithReactTesting = this.context.globalObject as GlobalWithReactTesting;\n\n if (!this.domContainer) {\n this.createContainer();\n }\n\n const stylesRoot = this.context.emotion.sheet?.container?.getRootNode();\n const rootElement = isShadowRoot(stylesRoot) && stylesRoot ? stylesRoot : this.context.globalObject.document?.body;\n\n if (this.domContainer && this.domContainer.parentNode !== rootElement) {\n rootElement?.appendChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, this.domContainer);\n }\n if (globalWithReactTesting.ReactTesting) {\n globalWithReactTesting.ReactTesting.addRenderContainer(this.rootId, this);\n }\n }\n }\n\n private destroyContainer() {\n if (this.domContainer) {\n this.unmountContainer();\n this.domContainer = null;\n }\n }\n\n private unmountContainer() {\n if (this.domContainer && this.domContainer.parentNode) {\n this.domContainer.parentNode.removeChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, null);\n }\n\n const globalWithReactTesting = this.context.globalObject as GlobalWithReactTesting;\n if (globalWithReactTesting.ReactTesting) {\n globalWithReactTesting.ReactTesting.removeRenderContainer(this.rootId);\n }\n }\n }\n}\n"]}
@@ -15,6 +15,7 @@ export declare class RenderLayer extends React.Component<RenderLayerProps> {
15
15
  static displayName: string;
16
16
  static defaultProps: DefaultProps;
17
17
  private globalObject;
18
+ private emotion;
18
19
  private getProps;
19
20
  private focusOutsideListenerToken;
20
21
  getRootNode: TGetRootNode;
@@ -31,11 +31,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
31
31
  return c > 3 && r && Object.defineProperty(target, key, r), r;
32
32
  };
33
33
  import React from 'react';
34
- import { listen as listenFocusOutside, containsTargetOrRenderContainer } from '../../lib/listenFocusOutside.js';
34
+ import { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';
35
+ import { listen as listenFocusOutside, clickOutsideContent } from '../../lib/listenFocusOutside.js';
35
36
  import { CommonWrapper } from '../CommonWrapper/index.js';
36
37
  import { getRootNode, rootNode } from '../../lib/rootNode/index.js';
37
38
  import { createPropsGetter } from '../../lib/createPropsGetter.js';
38
- import { isInstanceOf } from '../../lib/isInstanceOf.js';
39
39
  import { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';
40
40
  var RenderLayer = /** @class */ (function (_super) {
41
41
  __extends(RenderLayer, _super);
@@ -49,12 +49,10 @@ var RenderLayer = /** @class */ (function (_super) {
49
49
  }
50
50
  };
51
51
  _this.handleNativeDocClick = function (event) {
52
- var target = event.target || event.srcElement;
53
52
  var node = _this.getAnchorNode();
54
- if (!node || (isInstanceOf(target, _this.globalObject.Element) && containsTargetOrRenderContainer(target)(node))) {
55
- return;
56
- }
57
- if (_this.props.onClickOutside) {
53
+ var isShadowRootElement = isShadowRoot(_this.emotion.sheet.container.getRootNode());
54
+ var clickOutsideOfContent = clickOutsideContent(event, node, isShadowRootElement, _this.globalObject);
55
+ if (clickOutsideOfContent && _this.props.onClickOutside) {
58
56
  _this.props.onClickOutside(event);
59
57
  }
60
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RenderLayer.js","sourceRoot":"","sources":["../../../internal/RenderLayer/RenderLayer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { listen as listenFocusOutside, containsTargetOrRenderContainer } from '../../lib/listenFocusOutside.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isInstanceOf } from '../../lib/isInstanceOf.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\n\nexport interface RenderLayerProps extends CommonProps {\n children: JSX.Element;\n onClickOutside?: (e: Event) => void;\n onFocusOutside?: (e: Event) => void;\n active?: boolean;\n getAnchorElement?: () => Nullable<Element>;\n}\n\ntype DefaultProps = Required<Pick<RenderLayerProps, 'active'>>;\n\n@withRenderEnvironment\n@rootNode\nexport class RenderLayer extends React.Component<RenderLayerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderLayer';\n public static displayName = 'RenderLayer';\n\n public static defaultProps: DefaultProps = {\n active: true,\n };\n\n private globalObject!: GlobalObject;\n private getProps = createPropsGetter(RenderLayer.defaultProps);\n\n private focusOutsideListenerToken: {\n remove: () => void;\n } | null = null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.getProps().active) {\n this.attachListeners();\n }\n }\n\n public componentDidUpdate(prevProps: RenderLayerProps) {\n const { active } = this.getProps();\n\n if (!prevProps.active && active) {\n this.attachListeners();\n }\n if (prevProps.active && !active) {\n this.detachListeners();\n }\n }\n\n public componentWillUnmount() {\n if (this.getProps().active) {\n this.detachListeners();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {React.Children.only(this.props.children)}\n </CommonWrapper>\n );\n }\n\n private getAnchorNode(): Nullable<Element> {\n const { getAnchorElement } = this.props;\n return getAnchorElement ? getAnchorElement() : getRootNode(this);\n }\n\n private attachListeners() {\n const node = this.getAnchorNode();\n if (!node) {\n return;\n }\n\n this.focusOutsideListenerToken = listenFocusOutside(() => [node], this.handleFocusOutside, this.globalObject);\n this.globalObject.addEventListener?.('blur', this.handleFocusOutside);\n this.globalObject.document?.addEventListener(\n 'ontouchstart' in this.globalObject.document.documentElement &&\n 'onpointerup' in this.globalObject.document.documentElement\n ? 'pointerup'\n : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private detachListeners() {\n if (this.focusOutsideListenerToken) {\n this.focusOutsideListenerToken.remove();\n this.focusOutsideListenerToken = null;\n }\n\n this.globalObject.removeEventListener?.('blur', this.handleFocusOutside);\n this.globalObject.document?.removeEventListener(\n 'ontouchstart' in this.globalObject.document.documentElement &&\n 'onpointerup' in this.globalObject.document.documentElement\n ? 'pointerup'\n : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private handleFocusOutside = (event: Event) => {\n if (this.props.onFocusOutside) {\n this.props.onFocusOutside(event);\n }\n };\n\n private handleNativeDocClick = (event: Event) => {\n const target = event.target || event.srcElement;\n const node = this.getAnchorNode();\n\n if (!node || (isInstanceOf(target, this.globalObject.Element) && containsTargetOrRenderContainer(target)(node))) {\n return;\n }\n\n if (this.props.onClickOutside) {\n this.props.onClickOutside(event);\n }\n };\n}\n"]}
1
+ {"version":3,"file":"RenderLayer.js","sourceRoot":"","sources":["../../../internal/RenderLayer/RenderLayer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\nimport type { Emotion } from '@emotion/css/create-instance';\n\nimport { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { listen as listenFocusOutside, clickOutsideContent } from '../../lib/listenFocusOutside.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\n\nexport interface RenderLayerProps extends CommonProps {\n children: JSX.Element;\n onClickOutside?: (e: Event) => void;\n onFocusOutside?: (e: Event) => void;\n active?: boolean;\n getAnchorElement?: () => Nullable<Element>;\n}\n\ntype DefaultProps = Required<Pick<RenderLayerProps, 'active'>>;\n\n@withRenderEnvironment\n@rootNode\nexport class RenderLayer extends React.Component<RenderLayerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderLayer';\n public static displayName = 'RenderLayer';\n\n public static defaultProps: DefaultProps = {\n active: true,\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private getProps = createPropsGetter(RenderLayer.defaultProps);\n\n private focusOutsideListenerToken: {\n remove: () => void;\n } | null = null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.getProps().active) {\n this.attachListeners();\n }\n }\n\n public componentDidUpdate(prevProps: RenderLayerProps) {\n const { active } = this.getProps();\n\n if (!prevProps.active && active) {\n this.attachListeners();\n }\n if (prevProps.active && !active) {\n this.detachListeners();\n }\n }\n\n public componentWillUnmount() {\n if (this.getProps().active) {\n this.detachListeners();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {React.Children.only(this.props.children)}\n </CommonWrapper>\n );\n }\n\n private getAnchorNode(): Nullable<Element> {\n const { getAnchorElement } = this.props;\n return getAnchorElement ? getAnchorElement() : getRootNode(this);\n }\n\n private attachListeners() {\n const node = this.getAnchorNode();\n if (!node) {\n return;\n }\n\n this.focusOutsideListenerToken = listenFocusOutside(() => [node], this.handleFocusOutside, this.globalObject);\n this.globalObject.addEventListener?.('blur', this.handleFocusOutside);\n this.globalObject.document?.addEventListener(\n 'ontouchstart' in this.globalObject.document.documentElement &&\n 'onpointerup' in this.globalObject.document.documentElement\n ? 'pointerup'\n : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private detachListeners() {\n if (this.focusOutsideListenerToken) {\n this.focusOutsideListenerToken.remove();\n this.focusOutsideListenerToken = null;\n }\n\n this.globalObject.removeEventListener?.('blur', this.handleFocusOutside);\n this.globalObject.document?.removeEventListener(\n 'ontouchstart' in this.globalObject.document.documentElement &&\n 'onpointerup' in this.globalObject.document.documentElement\n ? 'pointerup'\n : 'mousedown',\n this.handleNativeDocClick,\n );\n }\n\n private handleFocusOutside = (event: Event) => {\n if (this.props.onFocusOutside) {\n this.props.onFocusOutside(event);\n }\n };\n\n private handleNativeDocClick = (event: Event) => {\n const node = this.getAnchorNode();\n const isShadowRootElement = isShadowRoot(this.emotion.sheet.container.getRootNode());\n const clickOutsideOfContent = clickOutsideContent(event, node, isShadowRootElement, this.globalObject);\n if (clickOutsideOfContent && this.props.onClickOutside) {\n this.props.onClickOutside(event);\n }\n };\n}\n"]}
@@ -1022,8 +1022,6 @@ export declare class BasicThemeClass {
1022
1022
  static get textareaMinHeightSmall(): string;
1023
1023
  static get textareaMinHeightMedium(): string;
1024
1024
  static get textareaMinHeightLarge(): string;
1025
- /** @deprecated Перестала использоваться с версии `react-ui@5.6.7`. */
1026
- static textareaWidth: string;
1027
1025
  static textareaPaddingXSmall: string;
1028
1026
  static textareaPaddingXMedium: string;
1029
1027
  static textareaPaddingXLarge: string;
@@ -3754,15 +3754,15 @@ var BasicThemeClass = /** @class */ (function () {
3754
3754
  BasicThemeClass.btnIconSizeSmall = '16px';
3755
3755
  BasicThemeClass.btnIconSizeMedium = '20px';
3756
3756
  BasicThemeClass.btnIconSizeLarge = '24px';
3757
- BasicThemeClass.btnDefaultBg = colors.shapeOtherBase;
3757
+ BasicThemeClass.btnDefaultBg = '#fff';
3758
3758
  BasicThemeClass.btnDefaultBgStart = 'none';
3759
3759
  BasicThemeClass.btnDefaultBgEnd = 'none';
3760
3760
  // TODO: create token in colors package
3761
- BasicThemeClass.btnDefaultHoverBg = '#F2F2F2';
3761
+ BasicThemeClass.btnDefaultHoverBg = '#f2f2f2';
3762
3762
  BasicThemeClass.btnDefaultHoverBgStart = 'none';
3763
3763
  BasicThemeClass.btnDefaultHoverBgEnd = 'none';
3764
3764
  // TODO: create token in colors package
3765
- BasicThemeClass.btnDefaultActiveBg = '#E4E4E4';
3765
+ BasicThemeClass.btnDefaultActiveBg = '#f2f2f2';
3766
3766
  BasicThemeClass.btnDefaultHoverTextColor = colors.textNeutralHeavy;
3767
3767
  BasicThemeClass.btnDefaultBorderColor = colors.lineNeutralPale;
3768
3768
  BasicThemeClass.btnDefaultActiveShadow = 'none';
@@ -3918,8 +3918,8 @@ var BasicThemeClass = /** @class */ (function () {
3918
3918
  BasicThemeClass.modalSeparatorBorderBottom = "1px solid ".concat(colors.lineNeutralFaint);
3919
3919
  BasicThemeClass.modalSeparatorMargin = '0 32px';
3920
3920
  BasicThemeClass.modalSeparatorFixedMargin = '0 16px';
3921
- BasicThemeClass.modalBodyTextColor = 'inherit';
3922
- BasicThemeClass.modalFooterTextColor = 'inherit';
3921
+ BasicThemeClass.modalBodyTextColor = _a.textColorDefault;
3922
+ BasicThemeClass.modalFooterTextColor = _a.textColorDefault;
3923
3923
  BasicThemeClass.modalBodyPaddingTop = '0';
3924
3924
  BasicThemeClass.modalBodyPaddingBottom = '20px';
3925
3925
  BasicThemeClass.modalBodyBorderRadius = '0px';
@@ -3961,8 +3961,8 @@ var BasicThemeClass = /** @class */ (function () {
3961
3961
  BasicThemeClass.sidePageFooterPaddingTop = '20px';
3962
3962
  BasicThemeClass.sidePageFooterPaddingBottom = '20px';
3963
3963
  BasicThemeClass.sidePageBgDefault = colors.surfaceHigh;
3964
- BasicThemeClass.sidePageBodyTextColor = 'inherit';
3965
- BasicThemeClass.sidePageFooterTextColor = 'inherit';
3964
+ BasicThemeClass.sidePageBodyTextColor = _a.textColorDefault;
3965
+ BasicThemeClass.sidePageFooterTextColor = _a.textColorDefault;
3966
3966
  BasicThemeClass.sidePageHeaderFontSize = '24px';
3967
3967
  BasicThemeClass.sidePageHeaderLineHeight = '32px';
3968
3968
  BasicThemeClass.sidePageHeaderPaddingBottom = '16px';
@@ -4275,8 +4275,6 @@ var BasicThemeClass = /** @class */ (function () {
4275
4275
  BasicThemeClass.textareaBorderColor = colors.lineNeutralPale;
4276
4276
  BasicThemeClass.textareaBackgroundClip = 'padding-box';
4277
4277
  BasicThemeClass.textareaBorderRadius = '2px';
4278
- /** @deprecated Перестала использоваться с версии `react-ui@5.6.7`. */
4279
- BasicThemeClass.textareaWidth = '250px';
4280
4278
  BasicThemeClass.textareaPaddingXSmall = '7px';
4281
4279
  BasicThemeClass.textareaPaddingXMedium = '11px';
4282
4280
  BasicThemeClass.textareaPaddingXLarge = '15px';