@skbkontur/react-ui 6.5.1 → 6.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,6 +3,16 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
3
3
  return cooked;
4
4
  };
5
5
  import { memoizeGetStyles } from '../../lib/theming/Emotion.js';
6
+ import { PopupPositions } from './Popup.js';
7
+ import { PopupHelper } from './PopupHelper.js';
8
+ var ENTER_TIMING = '0.18s cubic-bezier(0.22, 0.61, 0.36, 1)';
9
+ var ENTER_TRANSFORM = {
10
+ top: 'translateY(10px)',
11
+ bottom: 'translateY(-10px)',
12
+ left: 'translateX(10px)',
13
+ right: 'translateX(-10px)',
14
+ middle: 'translate(0, 0)',
15
+ };
6
16
  export var getStyles = memoizeGetStyles(function (_a) {
7
17
  var css = _a.css;
8
18
  return ({
@@ -40,30 +50,40 @@ export var getStyles = memoizeGetStyles(function (_a) {
40
50
  return css(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n opacity: 0.01;\n "], ["\n opacity: 0.01;\n "])));
41
51
  },
42
52
  'transition-enter-top': function () {
43
- return css(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n transform: translateY(10px);\n "], ["\n transform: translateY(10px);\n "])));
53
+ return css(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n transform: ", ";\n "], ["\n transform: ", ";\n "])), ENTER_TRANSFORM.top);
44
54
  },
45
55
  'transition-enter-middle': function () {
46
56
  return css(templateObject_13 || (templateObject_13 = __makeTemplateObject([""], [""])));
47
57
  },
48
58
  'transition-enter-bottom': function () {
49
- return css(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n transform: translateY(-10px);\n "], ["\n transform: translateY(-10px);\n "])));
59
+ return css(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n transform: ", ";\n "], ["\n transform: ", ";\n "])), ENTER_TRANSFORM.bottom);
50
60
  },
51
61
  'transition-enter-left': function () {
52
- return css(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n transform: translateX(10px);\n "], ["\n transform: translateX(10px);\n "])));
62
+ return css(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n transform: ", ";\n "], ["\n transform: ", ";\n "])), ENTER_TRANSFORM.left);
53
63
  },
54
64
  'transition-enter-right': function () {
55
- return css(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n transform: translateX(-10px);\n "], ["\n transform: translateX(-10px);\n "])));
65
+ return css(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n transform: ", ";\n "], ["\n transform: ", ";\n "])), ENTER_TRANSFORM.right);
56
66
  },
57
67
  transitionEnterActive: function () {
58
- return css(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n transition:\n transform 0.18s cubic-bezier(0.22, 0.61, 0.36, 1),\n opacity 0.18s cubic-bezier(0.22, 0.61, 0.36, 1);\n opacity: 1;\n transform: translate(0, 0);\n "], ["\n transition:\n transform 0.18s cubic-bezier(0.22, 0.61, 0.36, 1),\n opacity 0.18s cubic-bezier(0.22, 0.61, 0.36, 1);\n opacity: 1;\n transform: translate(0, 0);\n "])));
68
+ return css(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n transition:\n transform ", ",\n opacity ", ";\n opacity: 1;\n transform: translate(0, 0);\n "], ["\n transition:\n transform ", ",\n opacity ", ";\n opacity: 1;\n transform: translate(0, 0);\n "])), ENTER_TIMING, ENTER_TIMING);
69
+ },
70
+ positionChangeAnimation: function () {
71
+ return css(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n ", "\n "], ["\n ", "\n "])), PopupPositions.map(function (position) {
72
+ var direction = PopupHelper.getPositionObject(position).direction;
73
+ var transform = ENTER_TRANSFORM[direction];
74
+ var suffix = position.replace(' ', '-');
75
+ // Different alignments also need distinct names to restart the animation.
76
+ var name = "popup-enter-".concat(suffix);
77
+ return "\n &.popup-position-".concat(suffix, " {\n animation: ").concat(name, " ").concat(ENTER_TIMING, ";\n }\n @keyframes ").concat(name, " {\n from { opacity: 0.01; transform: ").concat(transform, "; }\n to { opacity: 1; transform: translate(0, 0); }\n }\n ");
78
+ }));
59
79
  },
60
80
  transitionExit: function () {
61
- return css(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n opacity: 0.01;\n transition: opacity 0.15s ease-out;\n transform: translate(0, 0);\n "], ["\n opacity: 0.01;\n transition: opacity 0.15s ease-out;\n transform: translate(0, 0);\n "])));
81
+ return css(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n opacity: 0.01;\n transition: opacity 0.15s ease-out;\n transform: translate(0, 0);\n "], ["\n opacity: 0.01;\n transition: opacity 0.15s ease-out;\n transform: translate(0, 0);\n "])));
62
82
  },
63
83
  absoluteParent: function () {
64
- return css(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n position: absolute;\n text-align: initial;\n "], ["\n position: absolute;\n text-align: initial;\n "])));
84
+ return css(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n position: absolute;\n text-align: initial;\n "], ["\n position: absolute;\n text-align: initial;\n "])));
65
85
  },
66
86
  });
67
87
  });
68
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19;
88
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20;
69
89
  //# sourceMappingURL=Popup.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popup.styles.js","sourceRoot":"","sources":["Popup.styles.ts"],"names":[],"mappings":";;;;AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,MAAM,CAAC,IAAM,SAAS,GAAG,gBAAgB,CAAC,UAAC,EAAgB;QAAd,GAAG,SAAA;IAAgB,OAAA,CAAC;QAC/D,KAAK,YAAC,CAAQ;YACZ,OAAO,GAAG,uOAAA,oDAES,EAAmB,mBAC1B,EAAa,GAAI,EAAkB,oFAI9C,KALkB,CAAC,CAAC,iBAAiB,EAC1B,CAAC,CAAC,WAAW,EAAI,CAAC,CAAC,gBAAgB,EAI7C;QACJ,CAAC;QAED,gBAAgB;YACd,OAAO,GAAG,wGAAA,qCAET,KAAC;QACJ,CAAC;QAED,WAAW;YACT,OAAO,GAAG,mIAAA,gEAGT,KAAC;QACJ,CAAC;QAED,cAAc;YACZ,OAAO,GAAG,gLAAA,6GAKT,KAAC;QACJ,CAAC;QAED,iBAAiB;YACf,OAAO,GAAG,6KAAA,0GAKT,KAAC;QACJ,CAAC;QAED,eAAe;YACb,OAAO,GAAG,8KAAA,2GAKT,KAAC;QACJ,CAAC;QAED,gBAAgB;YACd,OAAO,GAAG,6KAAA,0GAKT,KAAC;QACJ,CAAC;QAED,OAAO,YAAC,CAAQ;YACd,OAAO,GAAG,2MAAA,kDAES,EAAmB,oFAIrC,KAJkB,CAAC,CAAC,iBAAiB,EAIpC;QACJ,CAAC;QAED,YAAY,YAAC,CAAQ;YACnB,OAAO,GAAG,wHAAA,iBACC,EAAgB,uBACX,EAAiB,SAChC,KAFU,CAAC,CAAC,cAAc,EACX,CAAC,CAAC,eAAe,EAC/B;QACJ,CAAC;QAED,MAAM,YAAC,CAAQ;YACb,OAAO,GAAG,sGAAA,sBACM,EAAgB,SAC/B,KADe,CAAC,CAAC,cAAc,EAC9B;QACJ,CAAC;QAED,eAAe;YACb,OAAO,GAAG,mGAAA,8BAET,KAAC;QACJ,CAAC;QACD,sBAAsB;YACpB,OAAO,GAAG,iHAAA,4CAET,KAAC;QACJ,CAAC;QACD,yBAAyB;YACvB,OAAO,GAAG,uEAAA,EAAE,KAAC;QACf,CAAC;QACD,yBAAyB;YACvB,OAAO,GAAG,kHAAA,6CAET,KAAC;QACJ,CAAC;QACD,uBAAuB;YACrB,OAAO,GAAG,iHAAA,4CAET,KAAC;QACJ,CAAC;QACD,wBAAwB;YACtB,OAAO,GAAG,kHAAA,6CAET,KAAC;QACJ,CAAC;QACD,qBAAqB;YACnB,OAAO,GAAG,4QAAA,uMAMT,KAAC;QACJ,CAAC;QACD,cAAc;YACZ,OAAO,GAAG,iLAAA,4GAIT,KAAC;QACJ,CAAC;QACD,cAAc;YACZ,OAAO,GAAG,oIAAA,+DAGT,KAAC;QACJ,CAAC;KACF,CAAC;AAtI8D,CAsI9D,CAAC,CAAC","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { memoizeGetStyles } from '../../lib/theming/Emotion.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\n\nexport const getStyles = memoizeGetStyles(({ css }: Emotion) => ({\n popup(t: Theme) {\n return css`\n position: absolute;\n border-radius: ${t.popupBorderRadius};\n border: ${t.popupBorder} ${t.popupBorderColor};\n display: flex;\n width: max-content;\n overflow: visible;\n `;\n },\n\n popupIgnoreHover() {\n return css`\n pointer-events: none;\n `;\n },\n\n hoverBridge() {\n return css`\n position: absolute;\n pointer-events: auto;\n `;\n },\n\n hoverBridgeTop() {\n return css`\n left: 0;\n right: 0;\n bottom: 100%;\n height: var(--popup-hover-bridge-size);\n `;\n },\n\n hoverBridgeBottom() {\n return css`\n left: 0;\n right: 0;\n top: 100%;\n height: var(--popup-hover-bridge-size);\n `;\n },\n\n hoverBridgeLeft() {\n return css`\n top: 0;\n bottom: 0;\n right: 100%;\n width: var(--popup-hover-bridge-size);\n `;\n },\n\n hoverBridgeRight() {\n return css`\n top: 0;\n bottom: 0;\n left: 100%;\n width: var(--popup-hover-bridge-size);\n `;\n },\n\n content(t: Theme) {\n return css`\n overflow: hidden;\n border-radius: ${t.popupBorderRadius};\n flex-shrink: 0;\n max-width: 100%;\n line-height: normal;\n `;\n },\n\n contentInner(t: Theme) {\n return css`\n color: ${t.popupTextColor};\n background: ${t.popupBackground};\n `;\n },\n\n shadow(t: Theme) {\n return css`\n box-shadow: ${t.popupBoxShadow};\n `;\n },\n\n transitionEnter() {\n return css`\n opacity: 0.01;\n `;\n },\n 'transition-enter-top'() {\n return css`\n transform: translateY(10px);\n `;\n },\n 'transition-enter-middle'() {\n return css``;\n },\n 'transition-enter-bottom'() {\n return css`\n transform: translateY(-10px);\n `;\n },\n 'transition-enter-left'() {\n return css`\n transform: translateX(10px);\n `;\n },\n 'transition-enter-right'() {\n return css`\n transform: translateX(-10px);\n `;\n },\n transitionEnterActive() {\n return css`\n transition:\n transform 0.18s cubic-bezier(0.22, 0.61, 0.36, 1),\n opacity 0.18s cubic-bezier(0.22, 0.61, 0.36, 1);\n opacity: 1;\n transform: translate(0, 0);\n `;\n },\n transitionExit() {\n return css`\n opacity: 0.01;\n transition: opacity 0.15s ease-out;\n transform: translate(0, 0);\n `;\n },\n absoluteParent() {\n return css`\n position: absolute;\n text-align: initial;\n `;\n },\n}));\n"]}
1
+ {"version":3,"file":"Popup.styles.js","sourceRoot":"","sources":["Popup.styles.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { memoizeGetStyles } from '../../lib/theming/Emotion.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { PopupPositions } from './Popup.js';\nimport { PopupHelper } from './PopupHelper.js';\n\nconst ENTER_TIMING = '0.18s cubic-bezier(0.22, 0.61, 0.36, 1)';\nconst ENTER_TRANSFORM: Record<string, string> = {\n top: 'translateY(10px)',\n bottom: 'translateY(-10px)',\n left: 'translateX(10px)',\n right: 'translateX(-10px)',\n middle: 'translate(0, 0)',\n};\n\nexport const getStyles = memoizeGetStyles(({ css }: Emotion) => ({\n popup(t: Theme) {\n return css`\n position: absolute;\n border-radius: ${t.popupBorderRadius};\n border: ${t.popupBorder} ${t.popupBorderColor};\n display: flex;\n width: max-content;\n overflow: visible;\n `;\n },\n\n popupIgnoreHover() {\n return css`\n pointer-events: none;\n `;\n },\n\n hoverBridge() {\n return css`\n position: absolute;\n pointer-events: auto;\n `;\n },\n\n hoverBridgeTop() {\n return css`\n left: 0;\n right: 0;\n bottom: 100%;\n height: var(--popup-hover-bridge-size);\n `;\n },\n\n hoverBridgeBottom() {\n return css`\n left: 0;\n right: 0;\n top: 100%;\n height: var(--popup-hover-bridge-size);\n `;\n },\n\n hoverBridgeLeft() {\n return css`\n top: 0;\n bottom: 0;\n right: 100%;\n width: var(--popup-hover-bridge-size);\n `;\n },\n\n hoverBridgeRight() {\n return css`\n top: 0;\n bottom: 0;\n left: 100%;\n width: var(--popup-hover-bridge-size);\n `;\n },\n\n content(t: Theme) {\n return css`\n overflow: hidden;\n border-radius: ${t.popupBorderRadius};\n flex-shrink: 0;\n max-width: 100%;\n line-height: normal;\n `;\n },\n\n contentInner(t: Theme) {\n return css`\n color: ${t.popupTextColor};\n background: ${t.popupBackground};\n `;\n },\n\n shadow(t: Theme) {\n return css`\n box-shadow: ${t.popupBoxShadow};\n `;\n },\n\n transitionEnter() {\n return css`\n opacity: 0.01;\n `;\n },\n 'transition-enter-top'() {\n return css`\n transform: ${ENTER_TRANSFORM.top};\n `;\n },\n 'transition-enter-middle'() {\n return css``;\n },\n 'transition-enter-bottom'() {\n return css`\n transform: ${ENTER_TRANSFORM.bottom};\n `;\n },\n 'transition-enter-left'() {\n return css`\n transform: ${ENTER_TRANSFORM.left};\n `;\n },\n 'transition-enter-right'() {\n return css`\n transform: ${ENTER_TRANSFORM.right};\n `;\n },\n transitionEnterActive() {\n return css`\n transition:\n transform ${ENTER_TIMING},\n opacity ${ENTER_TIMING};\n opacity: 1;\n transform: translate(0, 0);\n `;\n },\n positionChangeAnimation() {\n return css`\n ${PopupPositions.map((position) => {\n const { direction } = PopupHelper.getPositionObject(position);\n const transform = ENTER_TRANSFORM[direction];\n const suffix = position.replace(' ', '-');\n // Different alignments also need distinct names to restart the animation.\n const name = `popup-enter-${suffix}`;\n\n return `\n &.popup-position-${suffix} {\n animation: ${name} ${ENTER_TIMING};\n }\n @keyframes ${name} {\n from { opacity: 0.01; transform: ${transform}; }\n to { opacity: 1; transform: translate(0, 0); }\n }\n `;\n })}\n `;\n },\n transitionExit() {\n return css`\n opacity: 0.01;\n transition: opacity 0.15s ease-out;\n transform: translate(0, 0);\n `;\n },\n absoluteParent() {\n return css`\n position: absolute;\n text-align: initial;\n `;\n },\n}));\n"]}
@@ -21,8 +21,6 @@ declare function getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align:
21
21
  declare function getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number): number;
22
22
  declare function getElementAbsoluteRect(element: Element): Rect;
23
23
  declare function isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect, globalObject: GlobalObject): boolean;
24
- /** Может стать полностью видимым после прокрутки в область видимости */
25
- declare function canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset, globalObject: GlobalObject): boolean;
26
24
  /** Прямоугольник вьюпорта в координатах документа (абсолютных) */
27
25
  declare function getViewportAbsoluteRect(globalObject: GlobalObject): Rect;
28
26
  export interface OverflowEdges {
@@ -50,7 +48,6 @@ export declare const PopupHelper: {
50
48
  getElementAbsoluteRect: typeof getElementAbsoluteRect;
51
49
  getPopupViewportSidePadding: typeof getPopupViewportSidePadding;
52
50
  isFullyVisible: typeof isAbsoluteRectFullyVisible;
53
- canBecomeFullyVisible: typeof canBecomeFullyVisible;
54
51
  getViewportAbsoluteRect: typeof getViewportAbsoluteRect;
55
52
  getOverflowEdges: typeof getOverflowEdges;
56
53
  getOverflowCount: typeof getOverflowCount;
@@ -53,20 +53,6 @@ function isAbsoluteRectFullyVisible(coordinates, popupRect, globalObject) {
53
53
  };
54
54
  return _rectContainsRect(windowAbsoluteRect, absoluteRect);
55
55
  }
56
- /** Может стать полностью видимым после прокрутки в область видимости */
57
- function canBecomeFullyVisible(positionName, coordinates, globalObject) {
58
- var position = getPositionObject(positionName);
59
- if (position.direction === 'top') {
60
- var availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);
61
- return coordinates.top + availableScrollDistances.top >= 0;
62
- }
63
- if (position.direction === 'left') {
64
- var availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);
65
- return coordinates.left + availableScrollDistances.left >= 0;
66
- }
67
- // NOTE: в случаях bottom/right браузер всегда расширяет размер документа
68
- return true;
69
- }
70
56
  function _getElementRelativeRect(element) {
71
57
  var rect = getDOMRect(element);
72
58
  return {
@@ -221,7 +207,6 @@ export var PopupHelper = {
221
207
  getElementAbsoluteRect: getElementAbsoluteRect,
222
208
  getPopupViewportSidePadding: getPopupViewportSidePadding,
223
209
  isFullyVisible: isAbsoluteRectFullyVisible,
224
- canBecomeFullyVisible: canBecomeFullyVisible,
225
210
  getViewportAbsoluteRect: getViewportAbsoluteRect,
226
211
  getOverflowEdges: getOverflowEdges,
227
212
  getOverflowCount: getOverflowCount,
@@ -1 +1 @@
1
- {"version":3,"file":"PopupHelper.js","sourceRoot":"","sources":["PopupHelper.tsx"],"names":[],"mappings":"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","sourcesContent":["import warning from 'warning';\n\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { getOwnerGlobalObject } from '../../lib/globalObject.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { isThemeGTE } from '../../lib/theming/ThemeHelpers.js';\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 right?: 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 getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n const defaultHorizontalPosition = anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return defaultHorizontalPosition;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'left', 'center', 'right'. Returning default value.`,\n );\n return defaultHorizontalPosition;\n }\n}\n\nfunction getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n const defaultVerticalPosition = anchorRect.top - popupOffset;\n\n switch (align) {\n case 'top':\n return defaultVerticalPosition;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'top', 'middle', 'bottom'. Returning default value.`,\n );\n return defaultVerticalPosition;\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/** Может стать полностью видимым после прокрутки в область видимости */\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\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\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 getPopupViewportSidePadding(theme: Theme, isMobile: boolean): number {\n if (!isMobile || !isThemeGTE(theme, '6.1')) {\n return 0;\n }\n\n return parseInt(theme.popupViewportSidePadding) || 0;\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 getHorizontalPosition,\n getVerticalPosition,\n getElementAbsoluteRect,\n getPopupViewportSidePadding,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n getViewportAbsoluteRect,\n getOverflowEdges,\n getOverflowCount,\n getPreferredDirection,\n getOrderedFallbackCandidates,\n};\n"]}
1
+ {"version":3,"file":"PopupHelper.js","sourceRoot":"","sources":["PopupHelper.tsx"],"names":[],"mappings":"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","sourcesContent":["import warning from 'warning';\n\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { getOwnerGlobalObject } from '../../lib/globalObject.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { isThemeGTE } from '../../lib/theming/ThemeHelpers.js';\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 right?: 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 getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n const defaultHorizontalPosition = anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return defaultHorizontalPosition;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'left', 'center', 'right'. Returning default value.`,\n );\n return defaultHorizontalPosition;\n }\n}\n\nfunction getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n const defaultVerticalPosition = anchorRect.top - popupOffset;\n\n switch (align) {\n case 'top':\n return defaultVerticalPosition;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'top', 'middle', 'bottom'. Returning default value.`,\n );\n return defaultVerticalPosition;\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\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\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 getPopupViewportSidePadding(theme: Theme, isMobile: boolean): number {\n if (!isMobile || !isThemeGTE(theme, '6.1')) {\n return 0;\n }\n\n return parseInt(theme.popupViewportSidePadding) || 0;\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 getHorizontalPosition,\n getVerticalPosition,\n getElementAbsoluteRect,\n getPopupViewportSidePadding,\n isFullyVisible: isAbsoluteRectFullyVisible,\n getViewportAbsoluteRect,\n getOverflowEdges,\n getOverflowCount,\n getPreferredDirection,\n getOrderedFallbackCandidates,\n};\n"]}
@@ -1,18 +1,36 @@
1
1
  import React from 'react';
2
+ import { ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext/ReactUIFeatureFlagsContext.js';
2
3
  export interface ResizeDetectorProps {
3
4
  onResize?: (event: UIEvent) => void;
5
+ /**
6
+ * Использовать ResizeObserver, если он доступен, иначе — iframe. По умолчанию true.
7
+ * При включённом глобальном флаге resizeDetectorUseIframe используется iframe.
8
+ */
9
+ useResizeObserver?: boolean;
4
10
  fullHeight?: boolean;
5
11
  alignBaseline?: boolean;
6
12
  }
7
13
  export declare class ResizeDetector extends React.Component<React.PropsWithChildren<ResizeDetectorProps>> {
8
14
  static __KONTUR_REACT_UI__: string;
9
15
  static displayName: string;
10
- private iframeWindow;
11
- private styles;
16
+ static defaultProps: {
17
+ useResizeObserver: boolean;
18
+ };
19
+ static contextType: React.Context<import("../../lib/featureFlagsContext/ReactUIFeatureFlagsContext.js").ReactUIFeatureFlags>;
20
+ context: React.ContextType<typeof ReactUIFeatureFlagsContext>;
21
+ private globalObject;
12
22
  private emotion;
13
23
  private cx;
24
+ private iframeWindow;
25
+ private shouldUseResizeObserver;
26
+ private handleIframeResize;
27
+ private iframeRef;
28
+ private resizeObserver;
29
+ private elementRef;
30
+ private observedElement;
31
+ private setupObserver;
14
32
  componentDidMount(): void;
33
+ componentWillUnmount(): void;
34
+ private setElementRef;
15
35
  render(): React.JSX.Element;
16
- private handleResize;
17
- private iframeRef;
18
36
  }
@@ -20,6 +20,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
20
20
  return c > 3 && r && Object.defineProperty(target, key, r), r;
21
21
  };
22
22
  import React from 'react';
23
+ import { getFullReactUIFlagsContext } from '../../lib/featureFlagsContext/FeatureFlagsHelpers.js';
24
+ import { ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext/ReactUIFeatureFlagsContext.js';
25
+ import { getElementRef } from '../../lib/getElementRef.js';
26
+ import { mergeRefs } from '../../lib/mergeRefs.js';
23
27
  import { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';
24
28
  import { getStyles } from './ResizeDetector.styles.js';
25
29
  var ResizeDetector = /** @class */ (function (_super) {
@@ -27,36 +31,95 @@ var ResizeDetector = /** @class */ (function (_super) {
27
31
  function ResizeDetector() {
28
32
  var _this = _super !== null && _super.apply(this, arguments) || this;
29
33
  _this.iframeWindow = null;
30
- _this.handleResize = function (event) {
31
- if (_this.props.onResize) {
32
- _this.props.onResize(event);
33
- }
34
+ _this.shouldUseResizeObserver = function () {
35
+ var flags = getFullReactUIFlagsContext(_this.context);
36
+ return (!flags.resizeDetectorUseIframe &&
37
+ _this.props.useResizeObserver !== false &&
38
+ Boolean(_this.globalObject.ResizeObserver));
39
+ };
40
+ _this.handleIframeResize = function (event) {
41
+ var _a, _b;
42
+ (_b = (_a = _this.props).onResize) === null || _b === void 0 ? void 0 : _b.call(_a, event);
34
43
  };
35
44
  _this.iframeRef = function (iframe) {
36
- if (iframe && iframe.contentWindow) {
37
- _this.iframeWindow = iframe.contentWindow;
45
+ var _a, _b, _c;
46
+ (_a = _this.iframeWindow) === null || _a === void 0 ? void 0 : _a.removeEventListener('resize', _this.handleIframeResize);
47
+ _this.iframeWindow = (_b = iframe === null || iframe === void 0 ? void 0 : iframe.contentWindow) !== null && _b !== void 0 ? _b : null;
48
+ (_c = _this.iframeWindow) === null || _c === void 0 ? void 0 : _c.addEventListener('resize', _this.handleIframeResize);
49
+ };
50
+ _this.resizeObserver = null;
51
+ _this.elementRef = null;
52
+ _this.observedElement = null;
53
+ _this.setupObserver = function (element) {
54
+ var _a;
55
+ if (_this.observedElement === element && _this.resizeObserver) {
56
+ return;
38
57
  }
58
+ (_a = _this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
59
+ _this.observedElement = null;
60
+ if (!element || !_this.shouldUseResizeObserver() || !_this.globalObject.ResizeObserver) {
61
+ return;
62
+ }
63
+ _this.resizeObserver = new _this.globalObject.ResizeObserver(function (entries) {
64
+ if (entries.length > 0 && _this.props.onResize) {
65
+ var event_1 = new UIEvent('resize', {
66
+ bubbles: false,
67
+ cancelable: false,
68
+ });
69
+ _this.props.onResize(event_1);
70
+ }
71
+ });
72
+ if (_this.resizeObserver) {
73
+ _this.resizeObserver.observe(element);
74
+ _this.observedElement = element;
75
+ }
76
+ };
77
+ _this.setElementRef = function (element) {
78
+ _this.elementRef = element;
79
+ _this.setupObserver(element);
39
80
  };
40
81
  return _this;
41
82
  }
42
83
  ResizeDetector.prototype.componentDidMount = function () {
43
- if (this.iframeWindow) {
44
- this.iframeWindow.addEventListener('resize', this.handleResize);
84
+ var _a;
85
+ this.setupObserver(this.elementRef);
86
+ (_a = this.iframeWindow) === null || _a === void 0 ? void 0 : _a.addEventListener('resize', this.handleIframeResize);
87
+ };
88
+ ResizeDetector.prototype.componentWillUnmount = function () {
89
+ var _a;
90
+ (_a = this.iframeWindow) === null || _a === void 0 ? void 0 : _a.removeEventListener('resize', this.handleIframeResize);
91
+ if (this.resizeObserver) {
92
+ this.resizeObserver.disconnect();
93
+ this.resizeObserver = null;
45
94
  }
95
+ this.observedElement = null;
46
96
  };
47
97
  ResizeDetector.prototype.render = function () {
48
98
  var _a;
49
- this.styles = getStyles(this.emotion);
50
- return (React.createElement("div", { className: this.styles.root() },
51
- React.createElement("iframe", { title: "resizeDetector", ref: this.iframeRef, className: this.styles.iframe(), tabIndex: -1 }),
52
- React.createElement("div", { className: this.cx((_a = {},
53
- _a[this.styles.content()] = true,
54
- _a[this.styles.fullHeight()] = this.props.fullHeight,
55
- _a[this.styles.flex()] = this.props.alignBaseline,
56
- _a)) }, this.props.children)));
99
+ var _b = this.props, children = _b.children, fullHeight = _b.fullHeight, alignBaseline = _b.alignBaseline;
100
+ if (!this.shouldUseResizeObserver()) {
101
+ var styles = getStyles(this.emotion);
102
+ return (React.createElement("div", { className: styles.root() },
103
+ React.createElement("iframe", { title: "resizeDetector", ref: this.iframeRef, className: styles.iframe(), tabIndex: -1 }),
104
+ React.createElement("div", { className: this.cx(styles.content(), (_a = {},
105
+ _a[styles.fullHeight()] = fullHeight,
106
+ _a[styles.flex()] = alignBaseline,
107
+ _a)) }, children)));
108
+ }
109
+ // Observe DOM elements directly; wrap other children to obtain a DOM ref.
110
+ if (React.Children.count(children) === 1 && React.isValidElement(children) && typeof children.type === 'string') {
111
+ var child = children;
112
+ var existingRef = getElementRef(child);
113
+ return React.cloneElement(child, {
114
+ ref: mergeRefs(existingRef, this.setElementRef),
115
+ });
116
+ }
117
+ return React.createElement("div", { ref: this.setElementRef }, children);
57
118
  };
58
119
  ResizeDetector.__KONTUR_REACT_UI__ = 'ResizeDetector';
59
120
  ResizeDetector.displayName = 'ResizeDetector';
121
+ ResizeDetector.defaultProps = { useResizeObserver: true };
122
+ ResizeDetector.contextType = ReactUIFeatureFlagsContext;
60
123
  ResizeDetector = __decorate([
61
124
  withRenderEnvironment
62
125
  ], ResizeDetector);
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeDetector.js","sourceRoot":"","sources":["ResizeDetector.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AASvD;IAAoC,kCAA6D;IAAjG;;QAIU,kBAAY,GAAkB,IAAI,CAAC;QA8BnC,kBAAY,GAAG,UAAC,KAAc;YACpC,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;QAEM,eAAS,GAAG,UAAC,MAAyB;YAC5C,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACnC,KAAI,CAAC,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;;IACJ,CAAC;IApCQ,0CAAiB,GAAxB;QACE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAEM,+BAAM,GAAb;;QACE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtC,OAAO,CACL,6BAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAChC,gCAAQ,KAAK,EAAC,gBAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAI;YACrG,6BACE,SAAS,EAAE,IAAI,CAAC,EAAE;oBAChB,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAG,IAAI;oBAC7B,GAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAG,IAAI,CAAC,KAAK,CAAC,UAAU;oBACjD,GAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAG,IAAI,CAAC,KAAK,CAAC,aAAa;wBAC9C,IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAChB,CACF,CACP,CAAC;IACJ,CAAC;IA/Ba,kCAAmB,GAAG,gBAAgB,AAAnB,CAAoB;IACvC,0BAAW,GAAG,gBAAgB,AAAnB,CAAoB;IAFlC,cAAc;QAD1B,qBAAqB;OACT,cAAc,CA6C1B;IAAD,qBAAC;CAAA,AA7CD,CAAoC,KAAK,CAAC,SAAS,GA6ClD;SA7CY,cAAc","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React from 'react';\n\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport { getStyles } from './ResizeDetector.styles.js';\n\nexport interface ResizeDetectorProps {\n onResize?: (event: UIEvent) => void;\n fullHeight?: boolean;\n alignBaseline?: boolean;\n}\n\n@withRenderEnvironment\nexport class ResizeDetector extends React.Component<React.PropsWithChildren<ResizeDetectorProps>> {\n public static __KONTUR_REACT_UI__ = 'ResizeDetector';\n public static displayName = 'ResizeDetector';\n\n private iframeWindow: Window | null = null;\n private styles!: ReturnType<typeof getStyles>;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n\n public componentDidMount() {\n if (this.iframeWindow) {\n this.iframeWindow.addEventListener('resize', this.handleResize);\n }\n }\n\n public render() {\n this.styles = getStyles(this.emotion);\n\n return (\n <div className={this.styles.root()}>\n <iframe title=\"resizeDetector\" ref={this.iframeRef} className={this.styles.iframe()} tabIndex={-1} />\n <div\n className={this.cx({\n [this.styles.content()]: true,\n [this.styles.fullHeight()]: this.props.fullHeight,\n [this.styles.flex()]: this.props.alignBaseline,\n })}\n >\n {this.props.children}\n </div>\n </div>\n );\n }\n\n private handleResize = (event: UIEvent) => {\n if (this.props.onResize) {\n this.props.onResize(event);\n }\n };\n\n private iframeRef = (iframe: HTMLIFrameElement) => {\n if (iframe && iframe.contentWindow) {\n this.iframeWindow = iframe.contentWindow;\n }\n };\n}\n"]}
1
+ {"version":3,"file":"ResizeDetector.js","sourceRoot":"","sources":["ResizeDetector.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sDAAsD,CAAC;AAClG,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAcvD;IAAoC,kCAA6D;IAAjG;;QAUU,kBAAY,GAAkB,IAAI,CAAC;QAEnC,6BAAuB,GAAG;YAChC,IAAM,KAAK,GAAG,0BAA0B,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;YACvD,OAAO,CACL,CAAC,KAAK,CAAC,uBAAuB;gBAC9B,KAAI,CAAC,KAAK,CAAC,iBAAiB,KAAK,KAAK;gBACtC,OAAO,CAAC,KAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAC1C,CAAC;QACJ,CAAC,CAAC;QAEM,wBAAkB,GAAG,UAAC,KAAc;;YAC1C,MAAA,MAAA,KAAI,CAAC,KAAK,EAAC,QAAQ,mDAAG,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEM,eAAS,GAAG,UAAC,MAAgC;;YACnD,MAAA,KAAI,CAAC,YAAY,0CAAE,mBAAmB,CAAC,QAAQ,EAAE,KAAI,CAAC,kBAAkB,CAAC,CAAC;YAC1E,KAAI,CAAC,YAAY,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,mCAAI,IAAI,CAAC;YAClD,MAAA,KAAI,CAAC,YAAY,0CAAE,gBAAgB,CAAC,QAAQ,EAAE,KAAI,CAAC,kBAAkB,CAAC,CAAC;QACzE,CAAC,CAAC;QAEM,oBAAc,GAA6B,IAAI,CAAC;QAChD,gBAAU,GAAmB,IAAI,CAAC;QAClC,qBAAe,GAAmB,IAAI,CAAC;QAEvC,mBAAa,GAAG,UAAC,OAAuB;;YAC9C,IAAI,KAAI,CAAC,eAAe,KAAK,OAAO,IAAI,KAAI,CAAC,cAAc,EAAE,CAAC;gBAC5D,OAAO;YACT,CAAC;YAED,MAAA,KAAI,CAAC,cAAc,0CAAE,UAAU,EAAE,CAAC;YAClC,KAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAE5B,IAAI,CAAC,OAAO,IAAI,CAAC,KAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;gBACrF,OAAO;YACT,CAAC;YAED,KAAI,CAAC,cAAc,GAAG,IAAI,KAAI,CAAC,YAAY,CAAC,cAAc,CAAC,UAAC,OAAO;gBACjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC9C,IAAM,OAAK,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE;wBAClC,OAAO,EAAE,KAAK;wBACd,UAAU,EAAE,KAAK;qBAClB,CAAC,CAAC;oBAEH,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAK,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,KAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACrC,KAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;QAgBM,mBAAa,GAAG,UAAC,OAAuB;YAC9C,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC;YAC1B,KAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC;;IAgCJ,CAAC;IAjDQ,0CAAiB,GAAxB;;QACE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,MAAA,IAAI,CAAC,YAAY,0CAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACzE,CAAC;IAEM,6CAAoB,GAA3B;;QACE,MAAA,IAAI,CAAC,YAAY,0CAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAOM,+BAAM,GAAb;;QACQ,IAAA,KAA0C,IAAI,CAAC,KAAK,EAAlD,QAAQ,cAAA,EAAE,UAAU,gBAAA,EAAE,aAAa,mBAAe,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACpC,IAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO,CACL,6BAAK,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE;gBAC3B,gCAAQ,KAAK,EAAC,gBAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAI;gBAChG,6BACE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;wBACjC,GAAC,MAAM,CAAC,UAAU,EAAE,IAAG,UAAU;wBACjC,GAAC,MAAM,CAAC,IAAI,EAAE,IAAG,aAAa;4BAC9B,IAED,QAAQ,CACL,CACF,CACP,CAAC;QACJ,CAAC;QACD,0EAA0E;QAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChH,IAAM,KAAK,GAAG,QAEZ,CAAC;YACH,IAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAuB,CAAC;YAC/D,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE;gBAC/B,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;aAChD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,6BAAK,GAAG,EAAE,IAAI,CAAC,aAAa,IAAG,QAAQ,CAAO,CAAC;IACxD,CAAC;IA/Ga,kCAAmB,GAAG,gBAAgB,AAAnB,CAAoB;IACvC,0BAAW,GAAG,gBAAgB,AAAnB,CAAoB;IAC/B,2BAAY,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,AAA9B,CAA+B;IAC3C,0BAAW,GAAG,0BAA0B,AAA7B,CAA8B;IAJ5C,cAAc;QAD1B,qBAAqB;OACT,cAAc,CAiH1B;IAAD,qBAAC;CAAA,AAjHD,CAAoC,KAAK,CAAC,SAAS,GAiHlD;SAjHY,cAAc","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React from 'react';\n\nimport { getFullReactUIFlagsContext } from '../../lib/featureFlagsContext/FeatureFlagsHelpers.js';\nimport { ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext/ReactUIFeatureFlagsContext.js';\nimport { getElementRef } from '../../lib/getElementRef.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { mergeRefs } from '../../lib/mergeRefs.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getStyles } from './ResizeDetector.styles.js';\n\nexport interface ResizeDetectorProps {\n onResize?: (event: UIEvent) => void;\n /**\n * Использовать ResizeObserver, если он доступен, иначе — iframe. По умолчанию true.\n * При включённом глобальном флаге resizeDetectorUseIframe используется iframe.\n */\n useResizeObserver?: boolean;\n fullHeight?: boolean;\n alignBaseline?: boolean;\n}\n\n@withRenderEnvironment\nexport class ResizeDetector extends React.Component<React.PropsWithChildren<ResizeDetectorProps>> {\n public static __KONTUR_REACT_UI__ = 'ResizeDetector';\n public static displayName = 'ResizeDetector';\n public static defaultProps = { useResizeObserver: true };\n public static contextType = ReactUIFeatureFlagsContext;\n public context!: React.ContextType<typeof ReactUIFeatureFlagsContext>;\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private iframeWindow: Window | null = null;\n\n private shouldUseResizeObserver = () => {\n const flags = getFullReactUIFlagsContext(this.context);\n return (\n !flags.resizeDetectorUseIframe &&\n this.props.useResizeObserver !== false &&\n Boolean(this.globalObject.ResizeObserver)\n );\n };\n\n private handleIframeResize = (event: UIEvent) => {\n this.props.onResize?.(event);\n };\n\n private iframeRef = (iframe: HTMLIFrameElement | null) => {\n this.iframeWindow?.removeEventListener('resize', this.handleIframeResize);\n this.iframeWindow = iframe?.contentWindow ?? null;\n this.iframeWindow?.addEventListener('resize', this.handleIframeResize);\n };\n\n private resizeObserver: Nullable<ResizeObserver> = null;\n private elementRef: Element | null = null;\n private observedElement: Element | null = null;\n\n private setupObserver = (element: Element | null) => {\n if (this.observedElement === element && this.resizeObserver) {\n return;\n }\n\n this.resizeObserver?.disconnect();\n this.observedElement = null;\n\n if (!element || !this.shouldUseResizeObserver() || !this.globalObject.ResizeObserver) {\n return;\n }\n\n this.resizeObserver = new this.globalObject.ResizeObserver((entries) => {\n if (entries.length > 0 && this.props.onResize) {\n const event = new UIEvent('resize', {\n bubbles: false,\n cancelable: false,\n });\n\n this.props.onResize(event);\n }\n });\n\n if (this.resizeObserver) {\n this.resizeObserver.observe(element);\n this.observedElement = element;\n }\n };\n\n public componentDidMount() {\n this.setupObserver(this.elementRef);\n this.iframeWindow?.addEventListener('resize', this.handleIframeResize);\n }\n\n public componentWillUnmount() {\n this.iframeWindow?.removeEventListener('resize', this.handleIframeResize);\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n this.observedElement = null;\n }\n\n private setElementRef = (element: Element | null) => {\n this.elementRef = element;\n this.setupObserver(element);\n };\n\n public render() {\n const { children, fullHeight, alignBaseline } = this.props;\n if (!this.shouldUseResizeObserver()) {\n const styles = getStyles(this.emotion);\n return (\n <div className={styles.root()}>\n <iframe title=\"resizeDetector\" ref={this.iframeRef} className={styles.iframe()} tabIndex={-1} />\n <div\n className={this.cx(styles.content(), {\n [styles.fullHeight()]: fullHeight,\n [styles.flex()]: alignBaseline,\n })}\n >\n {children}\n </div>\n </div>\n );\n }\n // Observe DOM elements directly; wrap other children to obtain a DOM ref.\n if (React.Children.count(children) === 1 && React.isValidElement(children) && typeof children.type === 'string') {\n const child = children as React.ReactElement<{\n ref?: React.Ref<Element>;\n }>;\n const existingRef = getElementRef(child) as React.Ref<Element>;\n return React.cloneElement(child, {\n ref: mergeRefs(existingRef, this.setElementRef),\n });\n }\n return <div ref={this.setElementRef}>{children}</div>;\n }\n}\n"]}
@@ -7,7 +7,7 @@ export var getStyles = memoizeGetStyles(function (_a) {
7
7
  var css = _a.css;
8
8
  return ({
9
9
  root: function () {
10
- return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: relative;\n height: 100%;\n "], ["\n position: relative;\n height: 100%;\n "])));
10
+ return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: relative;\n height: 100%;\n min-width: 0;\n max-width: 100%;\n "], ["\n position: relative;\n height: 100%;\n min-width: 0;\n max-width: 100%;\n "])));
11
11
  },
12
12
  iframe: function () {
13
13
  return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n opacity: 0;\n "], ["\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n opacity: 0;\n "])));
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeDetector.styles.js","sourceRoot":"","sources":["ResizeDetector.styles.ts"],"names":[],"mappings":";;;;AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,CAAC,IAAM,SAAS,GAAG,gBAAgB,CAAC,UAAC,EAAgB;QAAd,GAAG,SAAA;IAAgB,OAAA,CAAC;QAC/D,IAAI;YACF,OAAO,GAAG,2HAAA,wDAGT,KAAC;QACJ,CAAC;QAED,MAAM;YACJ,OAAO,GAAG,wRAAA,qNAWT,KAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,GAAG,sGAAA,mCAET,KAAC;QACJ,CAAC;QAED,UAAU;YACR,OAAO,GAAG,gGAAA,6BAET,KAAC;QACJ,CAAC;QAED,IAAI;YACF,OAAO,GAAG,iGAAA,8BAET,KAAC;QACJ,CAAC;KACF,CAAC;AAxC8D,CAwC9D,CAAC,CAAC","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { memoizeGetStyles } from '../../lib/theming/Emotion.js';\n\nexport const getStyles = memoizeGetStyles(({ css }: Emotion) => ({\n root() {\n return css`\n position: relative;\n height: 100%;\n `;\n },\n\n iframe() {\n return css`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n opacity: 0;\n `;\n },\n\n content() {\n return css`\n position: relative;\n `;\n },\n\n fullHeight() {\n return css`\n height: 100%;\n `;\n },\n\n flex() {\n return css`\n display: flex;\n `;\n },\n}));\n"]}
1
+ {"version":3,"file":"ResizeDetector.styles.js","sourceRoot":"","sources":["ResizeDetector.styles.ts"],"names":[],"mappings":";;;;AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,CAAC,IAAM,SAAS,GAAG,gBAAgB,CAAC,UAAC,EAAgB;QAAd,GAAG,SAAA;IAAgB,OAAA,CAAC;QAC/D,IAAI;YACF,OAAO,GAAG,wKAAA,qGAKT,KAAC;QACJ,CAAC;QAED,MAAM;YACJ,OAAO,GAAG,wRAAA,qNAWT,KAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,GAAG,sGAAA,mCAET,KAAC;QACJ,CAAC;QAED,UAAU;YACR,OAAO,GAAG,gGAAA,6BAET,KAAC;QACJ,CAAC;QAED,IAAI;YACF,OAAO,GAAG,iGAAA,8BAET,KAAC;QACJ,CAAC;KACF,CAAC;AA1C8D,CA0C9D,CAAC,CAAC","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { memoizeGetStyles } from '../../lib/theming/Emotion.js';\n\nexport const getStyles = memoizeGetStyles(({ css }: Emotion) => ({\n root() {\n return css`\n position: relative;\n height: 100%;\n min-width: 0;\n max-width: 100%;\n `;\n },\n\n iframe() {\n return css`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n opacity: 0;\n `;\n },\n\n content() {\n return css`\n position: relative;\n `;\n },\n\n fullHeight() {\n return css`\n height: 100%;\n `;\n },\n\n flex() {\n return css`\n display: flex;\n `;\n },\n}));\n"]}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  export interface ReactUIFeatureFlags {
3
+ resizeDetectorUseIframe?: boolean;
3
4
  maskedInputUseLegacyBehavior?: boolean;
4
5
  selectAutoScrollToSelectedItem?: boolean;
5
6
  }
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  export var reactUIFeatureFlagsDefault = {
3
+ resizeDetectorUseIframe: false,
3
4
  selectAutoScrollToSelectedItem: false,
4
5
  maskedInputUseLegacyBehavior: false,
5
6
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ReactUIFeatureFlagsContext.js","sourceRoot":"","sources":["ReactUIFeatureFlagsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,MAAM,CAAC,IAAM,0BAA0B,GAAwB;IAC7D,8BAA8B,EAAE,KAAK;IACrC,4BAA4B,EAAE,KAAK;CACpC,CAAC;AAEF,MAAM,CAAC,IAAM,0BAA0B,GAAG,KAAK,CAAC,aAAa,CAAsB,0BAA0B,CAAC,CAAC;AAE/G,0BAA0B,CAAC,WAAW,GAAG,4BAA4B,CAAC;AACtE,0BAA0B,CAAC,mBAAmB,GAAG,4BAA4B,CAAC","sourcesContent":["import React from 'react';\n\nexport interface ReactUIFeatureFlags {\n maskedInputUseLegacyBehavior?: boolean;\n selectAutoScrollToSelectedItem?: boolean;\n}\n\nexport const reactUIFeatureFlagsDefault: ReactUIFeatureFlags = {\n selectAutoScrollToSelectedItem: false,\n maskedInputUseLegacyBehavior: false,\n};\n\nexport const ReactUIFeatureFlagsContext = React.createContext<ReactUIFeatureFlags>(reactUIFeatureFlagsDefault);\n\nReactUIFeatureFlagsContext.displayName = 'ReactUIFeatureFlagsContext';\nReactUIFeatureFlagsContext.__KONTUR_REACT_UI__ = 'ReactUIFeatureFlagsContext';\n"]}
1
+ {"version":3,"file":"ReactUIFeatureFlagsContext.js","sourceRoot":"","sources":["ReactUIFeatureFlagsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,CAAC,IAAM,0BAA0B,GAAwB;IAC7D,uBAAuB,EAAE,KAAK;IAC9B,8BAA8B,EAAE,KAAK;IACrC,4BAA4B,EAAE,KAAK;CACpC,CAAC;AAEF,MAAM,CAAC,IAAM,0BAA0B,GAAG,KAAK,CAAC,aAAa,CAAsB,0BAA0B,CAAC,CAAC;AAE/G,0BAA0B,CAAC,WAAW,GAAG,4BAA4B,CAAC;AACtE,0BAA0B,CAAC,mBAAmB,GAAG,4BAA4B,CAAC","sourcesContent":["import React from 'react';\n\nexport interface ReactUIFeatureFlags {\n resizeDetectorUseIframe?: boolean;\n maskedInputUseLegacyBehavior?: boolean;\n selectAutoScrollToSelectedItem?: boolean;\n}\n\nexport const reactUIFeatureFlagsDefault: ReactUIFeatureFlags = {\n resizeDetectorUseIframe: false,\n selectAutoScrollToSelectedItem: false,\n maskedInputUseLegacyBehavior: false,\n};\n\nexport const ReactUIFeatureFlagsContext = React.createContext<ReactUIFeatureFlags>(reactUIFeatureFlagsDefault);\n\nReactUIFeatureFlagsContext.displayName = 'ReactUIFeatureFlagsContext';\nReactUIFeatureFlagsContext.__KONTUR_REACT_UI__ = 'ReactUIFeatureFlagsContext';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "6.5.1",
3
+ "version": "6.5.2",
4
4
  "description": "UI Components",
5
5
  "homepage": "https://tech.skbkontur.ru/kontur-ui",
6
6
  "bugs": {