@skbkontur/react-ui 3.12.6 → 3.12.8
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.
- package/CHANGELOG.md +22 -0
- package/README.md +25 -4
- package/cjs/components/DatePicker/DatePicker.d.ts +1 -1
- package/cjs/components/Hint/Hint.d.ts +5 -1
- package/cjs/components/Hint/Hint.js +9 -1
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/components/Toast/Toast.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +5 -3
- package/cjs/components/Tooltip/Tooltip.js +13 -10
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.d.ts +2 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.js +20 -6
- package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.js +22 -8
- package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
- package/cjs/internal/Menu/Menu.js +7 -3
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +2 -2
- package/cjs/internal/Popup/Popup.js +29 -21
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/Popup/PopupHelper.d.ts +1 -1
- package/cjs/internal/Popup/PopupHelper.js.map +1 -1
- package/cjs/internal/Popup/PopupPin.d.ts +1 -1
- package/cjs/internal/Popup/PopupPin.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.js +10 -0
- package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
- package/cjs/internal/RenderLayer/RenderLayer.d.ts +2 -1
- package/cjs/internal/RenderLayer/RenderLayer.js +11 -3
- package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
- package/cjs/lib/SSRSafe.d.ts +2 -0
- package/cjs/lib/SSRSafe.js +17 -1
- package/cjs/lib/SSRSafe.js.map +1 -1
- package/cjs/lib/dom/getDOMRect.d.ts +11 -0
- package/cjs/lib/dom/getDOMRect.js +36 -0
- package/cjs/lib/dom/getDOMRect.js.map +1 -0
- package/cjs/lib/instanceWithAnchorElement.d.ts +5 -0
- package/cjs/lib/instanceWithAnchorElement.js +9 -0
- package/cjs/lib/instanceWithAnchorElement.js.map +1 -0
- package/cjs/lib/listenFocusOutside.d.ts +1 -1
- package/cjs/lib/listenFocusOutside.js.map +1 -1
- package/cjs/lib/rootNode/getRootNode.d.ts +10 -1
- package/cjs/lib/rootNode/getRootNode.js +67 -12
- package/cjs/lib/rootNode/getRootNode.js.map +1 -1
- package/cjs/lib/rootNode/rootNodeDecorator.d.ts +22 -3
- package/cjs/lib/rootNode/rootNodeDecorator.js +40 -4
- package/cjs/lib/rootNode/rootNodeDecorator.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +1 -1
- package/components/Hint/Hint/Hint.js +9 -1
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +5 -1
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +1 -1
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +1 -1
- package/components/Toast/Toast/Toast.js.map +1 -1
- package/components/Tooltip/Tooltip/Tooltip.js +15 -11
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +5 -3
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +22 -7
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper.d.ts +2 -1
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/internal/InternalMenu/InternalMenu/InternalMenu.js +16 -6
- package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
- package/internal/Menu/Menu/Menu.js +6 -1
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/internal/Popup/Popup/Popup.js +36 -27
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +2 -2
- package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
- package/internal/Popup/PopupHelper.d.ts +1 -1
- package/internal/Popup/PopupPin/PopupPin.js.map +1 -1
- package/internal/Popup/PopupPin.d.ts +1 -1
- package/internal/RenderContainer/RenderContainer/RenderContainer.js +9 -0
- package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
- package/internal/RenderLayer/RenderLayer/RenderLayer.js +13 -6
- package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
- package/internal/RenderLayer/RenderLayer.d.ts +2 -1
- package/lib/SSRSafe/SSRSafe.js +14 -0
- package/lib/SSRSafe/SSRSafe.js.map +1 -1
- package/lib/SSRSafe.d.ts +2 -0
- package/lib/dom/getDOMRect/getDOMRect.js +40 -0
- package/lib/dom/getDOMRect/getDOMRect.js.map +1 -0
- package/lib/dom/getDOMRect/package.json +6 -0
- package/lib/dom/getDOMRect.d.ts +11 -0
- package/lib/instanceWithAnchorElement/instanceWithAnchorElement.js +3 -0
- package/lib/instanceWithAnchorElement/instanceWithAnchorElement.js.map +1 -0
- package/lib/instanceWithAnchorElement/package.json +6 -0
- package/lib/instanceWithAnchorElement.d.ts +5 -0
- package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
- package/lib/listenFocusOutside.d.ts +1 -1
- package/lib/rootNode/getRootNode/getRootNode.js +58 -12
- package/lib/rootNode/getRootNode/getRootNode.js.map +1 -1
- package/lib/rootNode/getRootNode.d.ts +10 -1
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js +24 -3
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js.map +1 -1
- package/lib/rootNode/rootNodeDecorator.d.ts +22 -3
- package/package.json +12 -9
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
-
import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
|
|
3
2
|
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
4
3
|
|
|
5
4
|
var _class, _class2, _temp;
|
|
@@ -30,7 +29,8 @@ export var RenderLayer = rootNode(_class = (_temp = _class2 = /*#__PURE__*/funct
|
|
|
30
29
|
|
|
31
30
|
_this.handleNativeDocClick = function (event) {
|
|
32
31
|
var target = event.target || event.srcElement;
|
|
33
|
-
|
|
32
|
+
|
|
33
|
+
var node = _this.getAnchorNode();
|
|
34
34
|
|
|
35
35
|
if (!node || target instanceof Element && containsTargetOrRenderContainer(target)(node)) {
|
|
36
36
|
return;
|
|
@@ -74,13 +74,20 @@ export var RenderLayer = rootNode(_class = (_temp = _class2 = /*#__PURE__*/funct
|
|
|
74
74
|
}, this.props), React.Children.only(this.props.children));
|
|
75
75
|
};
|
|
76
76
|
|
|
77
|
+
_proto.getAnchorNode = function getAnchorNode() {
|
|
78
|
+
var getAnchorElement = this.props.getAnchorElement;
|
|
79
|
+
return getAnchorElement ? getAnchorElement() : getRootNode(this);
|
|
80
|
+
};
|
|
81
|
+
|
|
77
82
|
_proto.attachListeners = function attachListeners() {
|
|
78
|
-
var
|
|
83
|
+
var node = this.getAnchorNode();
|
|
84
|
+
|
|
85
|
+
if (!node) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
79
88
|
|
|
80
|
-
var rootNode = getRootNode(this) || ((_this$props$getAnchor = (_this$props = this.props).getAnchorElement) == null ? void 0 : _this$props$getAnchor.call(_this$props));
|
|
81
|
-
if (!rootNode) return;
|
|
82
89
|
this.focusOutsideListenerToken = listenFocusOutside(function () {
|
|
83
|
-
return [
|
|
90
|
+
return [node];
|
|
84
91
|
}, this.handleFocusOutside);
|
|
85
92
|
window.addEventListener('blur', this.handleFocusOutside);
|
|
86
93
|
document.addEventListener('ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown', this.handleNativeDocClick);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["RenderLayer.tsx"],"names":["React","listen","listenFocusOutside","containsTargetOrRenderContainer","CommonWrapper","getRootNode","rootNode","RenderLayer","focusOutsideListenerToken","setRootNode","handleFocusOutside","event","props","onFocusOutside","handleNativeDocClick","target","srcElement","node","
|
|
1
|
+
{"version":3,"sources":["RenderLayer.tsx"],"names":["React","listen","listenFocusOutside","containsTargetOrRenderContainer","CommonWrapper","getRootNode","rootNode","RenderLayer","focusOutsideListenerToken","setRootNode","handleFocusOutside","event","props","onFocusOutside","handleNativeDocClick","target","srcElement","node","getAnchorNode","Element","onClickOutside","componentDidMount","active","attachListeners","componentDidUpdate","prevProps","detachListeners","componentWillUnmount","render","Children","only","children","getAnchorElement","window","addEventListener","document","documentElement","remove","removeEventListener","Component","__KONTUR_REACT_UI__","propTypes","propName","componentName","Error","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { listen as listenFocusOutside, containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { Nullable } from '../../typings/utility-types';\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\n@rootNode\nexport class RenderLayer extends React.Component<RenderLayerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderLayer';\n\n public static propTypes = {\n active(props: RenderLayerProps, propName: keyof RenderLayerProps, componentName: string) {\n const { active, onClickOutside, onFocusOutside } = props;\n if (active && !(onClickOutside || onFocusOutside)) {\n return new Error(\n `[${componentName}]: using the component without either 'onClickOutside' or 'onFocusOutside' callback is pointless.`,\n );\n }\n },\n };\n\n public static defaultProps = {\n active: true,\n };\n\n private focusOutsideListenerToken: {\n remove: () => void;\n } | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.active) {\n this.attachListeners();\n }\n }\n\n public componentDidUpdate(prevProps: RenderLayerProps) {\n if (!prevProps.active && this.props.active) {\n this.attachListeners();\n }\n if (prevProps.active && !this.props.active) {\n this.detachListeners();\n }\n }\n\n public componentWillUnmount() {\n if (this.props.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);\n window.addEventListener('blur', this.handleFocusOutside);\n document.addEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : '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 window.removeEventListener('blur', this.handleFocusOutside);\n document.removeEventListener(\n 'ontouchstart' in document.documentElement ? 'touchstart' : '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 || (target instanceof Element && containsTargetOrRenderContainer(target)(node))) {\n return;\n }\n\n if (this.props.onClickOutside) {\n this.props.onClickOutside(event);\n }\n };\n}\n"]}
|
|
@@ -6,7 +6,7 @@ export interface RenderLayerProps extends CommonProps {
|
|
|
6
6
|
onClickOutside?: (e: Event) => void;
|
|
7
7
|
onFocusOutside?: (e: Event) => void;
|
|
8
8
|
active?: boolean;
|
|
9
|
-
getAnchorElement?: () => Nullable<
|
|
9
|
+
getAnchorElement?: () => Nullable<Element>;
|
|
10
10
|
}
|
|
11
11
|
export declare class RenderLayer extends React.Component<RenderLayerProps> {
|
|
12
12
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -22,6 +22,7 @@ export declare class RenderLayer extends React.Component<RenderLayerProps> {
|
|
|
22
22
|
componentDidUpdate(prevProps: RenderLayerProps): void;
|
|
23
23
|
componentWillUnmount(): void;
|
|
24
24
|
render(): JSX.Element;
|
|
25
|
+
private getAnchorNode;
|
|
25
26
|
private attachListeners;
|
|
26
27
|
private detachListeners;
|
|
27
28
|
private handleFocusOutside;
|
package/lib/SSRSafe/SSRSafe.js
CHANGED
|
@@ -7,6 +7,13 @@ export function safePropTypesInstanceOf(getExpectedClass) {
|
|
|
7
7
|
|
|
8
8
|
return PropTypes.any;
|
|
9
9
|
}
|
|
10
|
+
export function isElement(el) {
|
|
11
|
+
if (isBrowser) {
|
|
12
|
+
return el instanceof Element;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
10
17
|
export function isHTMLElement(el) {
|
|
11
18
|
if (isBrowser) {
|
|
12
19
|
return el instanceof HTMLElement;
|
|
@@ -14,4 +21,11 @@ export function isHTMLElement(el) {
|
|
|
14
21
|
|
|
15
22
|
return false;
|
|
16
23
|
}
|
|
24
|
+
export function isNode(node) {
|
|
25
|
+
if (isBrowser) {
|
|
26
|
+
return node instanceof Node;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
17
31
|
export var globalThat = typeof globalThis === 'object' && globalThis || typeof global === 'object' && global || typeof window === 'object' && window || Function('return this')();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["SSRSafe.ts"],"names":["PropTypes","isBrowser","safePropTypesInstanceOf","getExpectedClass","instanceOf","any","
|
|
1
|
+
{"version":3,"sources":["SSRSafe.ts"],"names":["PropTypes","isBrowser","safePropTypesInstanceOf","getExpectedClass","instanceOf","any","isElement","el","Element","isHTMLElement","HTMLElement","isNode","node","Node","globalThat","globalThis","global","window","Function"],"mappings":"AAAA,OAAO,KAAKA,SAAZ,MAA2B,YAA3B;;AAEA,SAASC,SAAT,QAA0B,UAA1B;;AAEA,OAAO,SAASC,uBAAT;AACLC,gBADK;AAEqB;AAC1B,MAAIF,SAAJ,EAAe;AACb,WAAOD,SAAS,CAACI,UAAV,CAAqBD,gBAAgB,EAArC,CAAP;AACD;;AAED,SAAOH,SAAS,CAACK,GAAjB;AACD;;AAED,OAAO,SAASC,SAAT,CAAmBC,EAAnB,EAA+C;AACpD,MAAIN,SAAJ,EAAe;AACb,WAAOM,EAAE,YAAYC,OAArB;AACD;;AAED,SAAO,KAAP;AACD;;AAED,OAAO,SAASC,aAAT,CAAuBF,EAAvB,EAAmD;AACxD,MAAIN,SAAJ,EAAe;AACb,WAAOM,EAAE,YAAYG,WAArB;AACD;;AAED,SAAO,KAAP;AACD;;AAED,OAAO,SAASC,MAAT,CAAgBC,IAAhB,EAA6C;AAClD,MAAIX,SAAJ,EAAe;AACb,WAAOW,IAAI,YAAYC,IAAvB;AACD;;AAED,SAAO,KAAP;AACD;;AAED,OAAO,IAAMC,UAA6B;AACvC,OAAOC,UAAP,KAAsB,QAAtB,IAAkCA,UAAnC;AACC,OAAOC,MAAP,KAAkB,QAAlB,IAA8BA,MAD/B;AAEC,OAAOC,MAAP,KAAkB,QAAlB,IAA8BA,MAF/B;AAGAC,QAAQ,CAAC,aAAD,CAAR,EAJK","sourcesContent":["import * as PropTypes from 'prop-types';\n\nimport { isBrowser } from './client';\n\nexport function safePropTypesInstanceOf<T>(\n getExpectedClass: () => new (...args: any[]) => T,\n): PropTypes.Requireable<T> {\n if (isBrowser) {\n return PropTypes.instanceOf(getExpectedClass());\n }\n\n return PropTypes.any;\n}\n\nexport function isElement(el: unknown): el is Element {\n if (isBrowser) {\n return el instanceof Element;\n }\n\n return false;\n}\n\nexport function isHTMLElement(el: any): el is HTMLElement {\n if (isBrowser) {\n return el instanceof HTMLElement;\n }\n\n return false;\n}\n\nexport function isNode(node: unknown): node is Node {\n if (isBrowser) {\n return node instanceof Node;\n }\n\n return false;\n}\n\nexport const globalThat: typeof globalThis =\n (typeof globalThis === 'object' && globalThis) ||\n (typeof global === 'object' && global) ||\n (typeof window === 'object' && window) ||\n Function('return this')();\n"]}
|
package/lib/SSRSafe.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as PropTypes from 'prop-types';
|
|
2
2
|
export declare function safePropTypesInstanceOf<T>(getExpectedClass: () => new (...args: any[]) => T): PropTypes.Requireable<T>;
|
|
3
|
+
export declare function isElement(el: unknown): el is Element;
|
|
3
4
|
export declare function isHTMLElement(el: any): el is HTMLElement;
|
|
5
|
+
export declare function isNode(node: unknown): node is Node;
|
|
4
6
|
export declare const globalThat: typeof globalThis;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Возвращает размер элемента и его позицию относительно viewport
|
|
3
|
+
*
|
|
4
|
+
* @param element - ref элемента или сам элемент
|
|
5
|
+
* @returns - возвращает размер элемента и его позицию относительно viewport
|
|
6
|
+
*/
|
|
7
|
+
export var getDOMRect = function getDOMRect(element) {
|
|
8
|
+
var defaultValues = {
|
|
9
|
+
width: 0,
|
|
10
|
+
height: 0,
|
|
11
|
+
x: 0,
|
|
12
|
+
y: 0,
|
|
13
|
+
bottom: 0,
|
|
14
|
+
left: 0,
|
|
15
|
+
right: 0,
|
|
16
|
+
top: 0
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
if (element && 'current' in element) {
|
|
20
|
+
return getRefRect(defaultValues, element);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return getElementRect(defaultValues, element);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
var getElementRect = function getElementRect(defaultValues, element) {
|
|
27
|
+
if (element) {
|
|
28
|
+
return element.getBoundingClientRect();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return defaultValues;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
var getRefRect = function getRefRect(defaultValues, ref) {
|
|
35
|
+
if (ref != null && ref.current) {
|
|
36
|
+
return ref.current.getBoundingClientRect();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return defaultValues;
|
|
40
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["getDOMRect.ts"],"names":["getDOMRect","element","defaultValues","width","height","x","y","bottom","left","right","top","getRefRect","getElementRect","getBoundingClientRect","ref","current"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMA,UAAU,GAAG,SAAbA,UAAa,CAAoBC,OAApB,EAAwF;AAChH,MAAMC,aAAmC,GAAG;AAC1CC,IAAAA,KAAK,EAAE,CADmC;AAE1CC,IAAAA,MAAM,EAAE,CAFkC;AAG1CC,IAAAA,CAAC,EAAE,CAHuC;AAI1CC,IAAAA,CAAC,EAAE,CAJuC;AAK1CC,IAAAA,MAAM,EAAE,CALkC;AAM1CC,IAAAA,IAAI,EAAE,CANoC;AAO1CC,IAAAA,KAAK,EAAE,CAPmC;AAQ1CC,IAAAA,GAAG,EAAE,CARqC,EAA5C;;AAUA,MAAIT,OAAO,IAAI,aAAaA,OAA5B,EAAqC;AACnC,WAAOU,UAAU,CAACT,aAAD,EAAgBD,OAAhB,CAAjB;AACD;AACD,SAAOW,cAAc,CAACV,aAAD,EAAgBD,OAAhB,CAArB;AACD,CAfM;AAgBP,IAAMW,cAAc,GAAG,SAAjBA,cAAiB,CAACV,aAAD,EAAsCD,OAAtC,EAAqE;AAC1F,MAAIA,OAAJ,EAAa;AACX,WAAOA,OAAO,CAACY,qBAAR,EAAP;AACD;AACD,SAAOX,aAAP;AACD,CALD;AAMA,IAAMS,UAAU,GAAG,SAAbA,UAAa,CAAoBT,aAApB,EAAyDY,GAAzD,EAAqF;AACtG,MAAIA,GAAJ,YAAIA,GAAG,CAAEC,OAAT,EAAkB;AAChB,WAAOD,GAAG,CAACC,OAAJ,CAAYF,qBAAZ,EAAP;AACD;AACD,SAAOX,aAAP;AACD,CALD","sourcesContent":["import { Nullable } from '../../typings/utility-types';\ntype DOMRectDefaultValues = Omit<DOMRect, 'toJSON'>;\n/**\n * Возвращает размер элемента и его позицию относительно viewport\n *\n * @param element - ref элемента или сам элемент\n * @returns - возвращает размер элемента и его позицию относительно viewport\n */\nexport const getDOMRect = <T extends Element>(element: Nullable<T> | React.RefObject<T>): DOMRectDefaultValues => {\n const defaultValues: DOMRectDefaultValues = {\n width: 0,\n height: 0,\n x: 0,\n y: 0,\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n };\n if (element && 'current' in element) {\n return getRefRect(defaultValues, element);\n }\n return getElementRect(defaultValues, element);\n};\nconst getElementRect = (defaultValues: DOMRectDefaultValues, element: Nullable<Element>) => {\n if (element) {\n return element.getBoundingClientRect();\n }\n return defaultValues;\n};\nconst getRefRect = <T extends Element>(defaultValues: DOMRectDefaultValues, ref: React.RefObject<T>) => {\n if (ref?.current) {\n return ref.current.getBoundingClientRect();\n }\n return defaultValues;\n};\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { Nullable } from '../../typings/utility-types';
|
|
3
|
+
declare type DOMRectDefaultValues = Omit<DOMRect, 'toJSON'>;
|
|
4
|
+
/**
|
|
5
|
+
* Возвращает размер элемента и его позицию относительно viewport
|
|
6
|
+
*
|
|
7
|
+
* @param element - ref элемента или сам элемент
|
|
8
|
+
* @returns - возвращает размер элемента и его позицию относительно viewport
|
|
9
|
+
*/
|
|
10
|
+
export declare const getDOMRect: <T extends Element>(element: Nullable<T> | import("react").RefObject<T>) => DOMRectDefaultValues;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["instanceWithAnchorElement.ts"],"names":["isInstanceWithAnchorElement","instance","Boolean","Object","prototype","hasOwnProperty","call"],"mappings":";;;;;;AAMA,OAAO,IAAMA,2BAA2B,GAAG,SAA9BA,2BAA8B,CAACC,QAAD,EAA8D;AACvG,SAAOC,OAAO,CAACD,QAAD,CAAP,IAAqBE,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCL,QAArC,EAA+C,kBAA/C,CAA5B;AACD,CAFM","sourcesContent":["import { Nullable } from '../typings/utility-types';\n\nexport interface InstanceWithAnchorElement {\n getAnchorElement: () => Nullable<Element>;\n}\n\nexport const isInstanceWithAnchorElement = (instance: unknown): instance is InstanceWithAnchorElement => {\n return Boolean(instance) && Object.prototype.hasOwnProperty.call(instance, 'getAnchorElement');\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["listenFocusOutside.ts"],"names":["ReactDOM","debounce","isBrowser","isFirefox","handlers","addHandleEvent","document","body","addEventListener","handleNativeFocus","leading","trailing","capture","readyState","window","event","target","srcElement","forEach","handler","elements","some","containsTargetOrRenderContainer","unstable_batchedUpdates","callback","element","contains","container","findRenderContainer","node","rootNode","currentNode","parentNode","documentElement","Element","newContainerId","getAttribute","nextNode","querySelector","Error","listen","push","remove","index","indexOf","splice"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["listenFocusOutside.ts"],"names":["ReactDOM","debounce","isBrowser","isFirefox","handlers","addHandleEvent","document","body","addEventListener","handleNativeFocus","leading","trailing","capture","readyState","window","event","target","srcElement","forEach","handler","elements","some","containsTargetOrRenderContainer","unstable_batchedUpdates","callback","element","contains","container","findRenderContainer","node","rootNode","currentNode","parentNode","documentElement","Element","newContainerId","getAttribute","nextNode","querySelector","Error","listen","push","remove","index","indexOf","splice"],"mappings":"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","sourcesContent":["import ReactDOM from 'react-dom';\nimport debounce from 'lodash.debounce';\n\nimport { isBrowser, isFirefox } from './client';\n\ninterface FocusOutsideEventHandler {\n elements: Element[] | (() => Element[]);\n callback: (event: Event) => void;\n}\n\nconst handlers: FocusOutsideEventHandler[] = [];\n\nfunction addHandleEvent() {\n /**\n * Firefox do not supports 'focusin' event.\n * Focus events bubbles multiple time\n * without possibilty to cancell bubbling.\n * Using debounce to capture only first focus event\n * Mozilla Firefix\n * ¯\\_(ツ)_/¯\n */\n document.body.addEventListener(\n isFirefox ? 'focus' : ('focusin' as 'focus'),\n isFirefox ? debounce(handleNativeFocus, 0, { leading: true, trailing: false }) : handleNativeFocus,\n { capture: true },\n );\n}\n\nif (isBrowser) {\n if (document.readyState === 'complete') {\n addHandleEvent();\n } else {\n window.addEventListener('load', addHandleEvent);\n }\n}\n\nfunction handleNativeFocus(event: UIEvent) {\n // FIXME: not safe casting\n const target: HTMLElement = (event.target || event.srcElement) as HTMLElement;\n\n handlers.forEach((handler) => {\n let elements = handler.elements;\n if (typeof elements === 'function') {\n elements = elements();\n }\n\n if (elements.some(containsTargetOrRenderContainer(target))) {\n return;\n }\n ReactDOM.unstable_batchedUpdates(() => handler.callback(event));\n });\n}\n\nexport function containsTargetOrRenderContainer(target: Element) {\n return (element: Element) => {\n if (!element) {\n return false;\n }\n if (element.contains(target)) {\n return true;\n }\n const container = findRenderContainer(target, element);\n return !!container && element.contains(container);\n };\n}\n\n/**\n * Searches RenderContainer placed in \"rootNode\" for \"node\"\n */\nexport function findRenderContainer(node: Element, rootNode: Element, container?: Element): Element | null {\n const currentNode = node.parentNode;\n if (\n !currentNode ||\n node === rootNode ||\n currentNode === rootNode ||\n currentNode === document.body ||\n currentNode === document.documentElement ||\n !(currentNode instanceof Element)\n ) {\n return container ? container : null;\n }\n\n const newContainerId = currentNode.getAttribute('data-rendered-container-id');\n if (newContainerId) {\n const nextNode = document.querySelector(`[data-render-container-id~=\"${newContainerId}\"]`);\n\n if (!nextNode) {\n throw Error(`Origin node for container with id ${newContainerId} was not found`);\n }\n\n return findRenderContainer(nextNode, rootNode, nextNode);\n }\n\n return findRenderContainer(currentNode, rootNode, container);\n}\n\nexport function listen(elements: Element[] | (() => Element[]), callback: (event: Event) => void) {\n const handler = {\n elements,\n callback,\n };\n handlers.push(handler);\n\n return {\n remove() {\n const index = handlers.indexOf(handler);\n if (index > -1) {\n handlers.splice(index, 1);\n }\n },\n };\n}\n"]}
|
|
@@ -3,6 +3,6 @@ export declare function containsTargetOrRenderContainer(target: Element): (eleme
|
|
|
3
3
|
* Searches RenderContainer placed in "rootNode" for "node"
|
|
4
4
|
*/
|
|
5
5
|
export declare function findRenderContainer(node: Element, rootNode: Element, container?: Element): Element | null;
|
|
6
|
-
export declare function listen(elements:
|
|
6
|
+
export declare function listen(elements: Element[] | (() => Element[]), callback: (event: Event) => void): {
|
|
7
7
|
remove(): void;
|
|
8
8
|
};
|
|
@@ -1,25 +1,71 @@
|
|
|
1
|
+
/* eslint-disable react/no-find-dom-node */
|
|
1
2
|
import { findDOMNode } from 'react-dom';
|
|
2
|
-
import
|
|
3
|
+
import warning from 'warning';
|
|
4
|
+
import { isElement, isNode } from "../../SSRSafe";
|
|
3
5
|
import { canUseDOM } from "../../client";
|
|
4
|
-
import {
|
|
6
|
+
import { isInstanceWithRootNode } from "../rootNodeDecorator";
|
|
7
|
+
/**
|
|
8
|
+
* Extracts component's root Element (HTMLElement/SVGElement) out of it's instance
|
|
9
|
+
* following the "StrictMode support convention" (@see README.md#strictmode, #2518).
|
|
10
|
+
*
|
|
11
|
+
* Replaces findDOMNode but falls back to it if "convention" is not respected.
|
|
12
|
+
*
|
|
13
|
+
* @param instance Component's instance provided by React.Ref or `this` inside class-components.
|
|
14
|
+
* @returns Component's root `Element` or null
|
|
15
|
+
*/
|
|
16
|
+
|
|
5
17
|
export var getRootNode = function getRootNode(instance) {
|
|
6
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Options of what instance can be:
|
|
20
|
+
* 1. null or undefined
|
|
21
|
+
* 2. DOM Element
|
|
22
|
+
* 3. class Component instance (object)
|
|
23
|
+
* 4. literally anything, returned from useImperativeHandle
|
|
24
|
+
*/
|
|
25
|
+
if (!canUseDOM || !instance) {
|
|
26
|
+
// instance can be `null` if component was unmounted
|
|
27
|
+
// also checking undefined for convenient usage
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
7
30
|
|
|
8
|
-
if (
|
|
31
|
+
if (isElement(instance)) {
|
|
32
|
+
// instance can be an Element already if its coming
|
|
33
|
+
// from Refs of intrinsic elements (<div />, <button />, etc.)
|
|
9
34
|
return instance;
|
|
10
35
|
}
|
|
11
36
|
|
|
12
|
-
var
|
|
13
|
-
var node;
|
|
37
|
+
var rootNode;
|
|
14
38
|
|
|
15
|
-
if (
|
|
16
|
-
|
|
39
|
+
if (isInstanceWithRootNode(instance)) {
|
|
40
|
+
// it happened to be that native Node interface also has
|
|
41
|
+
// the "getRootNode" method, but we can ignore it here
|
|
42
|
+
// because we'd already checked the instance on being an Element
|
|
43
|
+
// which is a subclass of Node, so, just fixing types here
|
|
44
|
+
if (!isNode(instance)) {
|
|
45
|
+
rootNode = instance.getRootNode();
|
|
46
|
+
}
|
|
17
47
|
}
|
|
18
48
|
|
|
19
|
-
if (
|
|
20
|
-
|
|
49
|
+
if (rootNode !== undefined) {
|
|
50
|
+
// the getter exists and has returned something, it should be what we are looking for
|
|
51
|
+
// probably its an Element or null (which is also OK, e.g. Popup/Tooltip/Hint before opening)
|
|
52
|
+
return rootNode;
|
|
21
53
|
}
|
|
22
54
|
|
|
23
|
-
|
|
24
|
-
|
|
55
|
+
try {
|
|
56
|
+
// rootNode is undefined, which means that the getter doesn't exists or returns the undefined
|
|
57
|
+
// anyway, it tell us that the convention is not respected,
|
|
58
|
+
// so, we have to fall back to the deprecated findDOMNode, which breaks StrictMode
|
|
59
|
+
// instance can still be a class component or an imperative handle (i.e., anything, except null/undefined/Element)
|
|
60
|
+
rootNode = findDOMNode(instance);
|
|
61
|
+
} catch (e) {
|
|
62
|
+
// but findDOMNode doesn`t accept everything that instance can be at this point,
|
|
63
|
+
// so we have to handle exceptions
|
|
64
|
+
// see https://github.com/facebook/react/blob/cae63505/packages/react-dom/src/__tests__/findDOMNode-test.js#L66-L86
|
|
65
|
+
warning(false, '[getRootNode]: can`t fallback to findDOMNode.' + '\n' + 'See https://github.com/skbkontur/retail-ui/blob/master/packages/react-ui/README.md#strictmode' + '\n\n' + e.message);
|
|
66
|
+
return null;
|
|
67
|
+
} // the findDOMNode can also return Text, but we are only interested in Elements, so just filter it
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
return isElement(rootNode) ? rootNode : null;
|
|
25
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["getRootNode.ts"],"names":["findDOMNode","
|
|
1
|
+
{"version":3,"sources":["getRootNode.ts"],"names":["findDOMNode","warning","isElement","isNode","canUseDOM","isInstanceWithRootNode","getRootNode","instance","rootNode","undefined","e","message"],"mappings":"AAAA;AACA,SAASA,WAAT,QAA4B,WAA5B;;AAEA,OAAOC,OAAP,MAAoB,SAApB;;;AAGA,SAASC,SAAT,EAAoBC,MAApB,QAAkC,YAAlC;AACA,SAASC,SAAT,QAA0B,WAA1B;;AAEA,SAASC,sBAAT,QAAuC,qBAAvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,QAAD,EAAgE;AACzF;AACF;AACA;AACA;AACA;AACA;AACA;;AAEE,MAAI,CAACH,SAAD,IAAc,CAACG,QAAnB,EAA6B;AAC3B;AACA;AACA,WAAO,IAAP;AACD;;AAED,MAAIL,SAAS,CAACK,QAAD,CAAb,EAAyB;AACvB;AACA;AACA,WAAOA,QAAP;AACD;AACD,MAAIC,QAAJ;AACA,MAAIH,sBAAsB,CAACE,QAAD,CAA1B,EAAsC;AACpC;AACA;AACA;AACA;AACA,QAAI,CAACJ,MAAM,CAACI,QAAD,CAAX,EAAuB;AACrBC,MAAAA,QAAQ,GAAGD,QAAQ,CAACD,WAAT,EAAX;AACD;AACF;;AAED,MAAIE,QAAQ,KAAKC,SAAjB,EAA4B;AAC1B;AACA;AACA,WAAOD,QAAP;AACD;;AAED,MAAI;AACF;AACA;AACA;AACA;AACAA,IAAAA,QAAQ,GAAGR,WAAW,CAACO,QAAD,CAAtB;AACD,GAND,CAME,OAAOG,CAAP,EAAe;AACf;AACA;AACA;AACAT,IAAAA,OAAO;AACL,SADK;AAEL;AACE,QADF;AAEE,mGAFF;AAGE,UAHF;AAIES,IAAAA,CAAC,CAACC,OANC,CAAP;;AAQA,WAAO,IAAP;AACD;;AAED;AACA,SAAOT,SAAS,CAACM,QAAD,CAAT,GAAsBA,QAAtB,GAAiC,IAAxC;AACD,CA5DM","sourcesContent":["/* eslint-disable react/no-find-dom-node */\nimport { findDOMNode } from 'react-dom';\nimport React from 'react';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isElement, isNode } from '../SSRSafe';\nimport { canUseDOM } from '../client';\n\nimport { isInstanceWithRootNode } from './rootNodeDecorator';\n\n/**\n * Extracts component's root Element (HTMLElement/SVGElement) out of it's instance\n * following the \"StrictMode support convention\" (@see README.md#strictmode, #2518).\n *\n * Replaces findDOMNode but falls back to it if \"convention\" is not respected.\n *\n * @param instance Component's instance provided by React.Ref or `this` inside class-components.\n * @returns Component's root `Element` or null\n */\n\nexport const getRootNode = (instance: Nullable<React.ReactInstance>): Nullable<Element> => {\n /**\n * Options of what instance can be:\n * 1. null or undefined\n * 2. DOM Element\n * 3. class Component instance (object)\n * 4. literally anything, returned from useImperativeHandle\n */\n\n if (!canUseDOM || !instance) {\n // instance can be `null` if component was unmounted\n // also checking undefined for convenient usage\n return null;\n }\n\n if (isElement(instance)) {\n // instance can be an Element already if its coming\n // from Refs of intrinsic elements (<div />, <button />, etc.)\n return instance;\n }\n let rootNode;\n if (isInstanceWithRootNode(instance)) {\n // it happened to be that native Node interface also has\n // the \"getRootNode\" method, but we can ignore it here\n // because we'd already checked the instance on being an Element\n // which is a subclass of Node, so, just fixing types here\n if (!isNode(instance)) {\n rootNode = instance.getRootNode();\n }\n }\n\n if (rootNode !== undefined) {\n // the getter exists and has returned something, it should be what we are looking for\n // probably its an Element or null (which is also OK, e.g. Popup/Tooltip/Hint before opening)\n return rootNode;\n }\n\n try {\n // rootNode is undefined, which means that the getter doesn't exists or returns the undefined\n // anyway, it tell us that the convention is not respected,\n // so, we have to fall back to the deprecated findDOMNode, which breaks StrictMode\n // instance can still be a class component or an imperative handle (i.e., anything, except null/undefined/Element)\n rootNode = findDOMNode(instance);\n } catch (e: any) {\n // but findDOMNode doesn`t accept everything that instance can be at this point,\n // so we have to handle exceptions\n // see https://github.com/facebook/react/blob/cae63505/packages/react-dom/src/__tests__/findDOMNode-test.js#L66-L86\n warning(\n false,\n '[getRootNode]: can`t fallback to findDOMNode.' +\n '\\n' +\n 'See https://github.com/skbkontur/retail-ui/blob/master/packages/react-ui/README.md#strictmode' +\n '\\n\\n' +\n e.message,\n );\n return null;\n }\n\n // the findDOMNode can also return Text, but we are only interested in Elements, so just filter it\n return isElement(rootNode) ? rootNode : null;\n};\n"]}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Nullable } from '../../typings/utility-types';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Extracts component's root Element (HTMLElement/SVGElement) out of it's instance
|
|
5
|
+
* following the "StrictMode support convention" (@see README.md#strictmode, #2518).
|
|
6
|
+
*
|
|
7
|
+
* Replaces findDOMNode but falls back to it if "convention" is not respected.
|
|
8
|
+
*
|
|
9
|
+
* @param instance Component's instance provided by React.Ref or `this` inside class-components.
|
|
10
|
+
* @returns Component's root `Element` or null
|
|
11
|
+
*/
|
|
12
|
+
export declare const getRootNode: (instance: Nullable<React.ReactInstance>) => Nullable<Element>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
2
|
+
import EventEmitter from 'eventemitter3';
|
|
2
3
|
import { getRootNode } from "../getRootNode";
|
|
3
4
|
export function rootNode(Component) {
|
|
4
5
|
var _temp;
|
|
@@ -10,16 +11,33 @@ export function rootNode(Component) {
|
|
|
10
11
|
var _this;
|
|
11
12
|
|
|
12
13
|
_this = _Component.call(this, arguments.length <= 0 ? undefined : arguments[0]) || this;
|
|
13
|
-
_this.rootNode =
|
|
14
|
+
_this.rootNode = Component.defaultRootNode;
|
|
15
|
+
_this.rootNodeEmitter = new EventEmitter();
|
|
14
16
|
|
|
15
17
|
_this.setRootNode = function (instance) {
|
|
16
|
-
|
|
18
|
+
var _rootNode = getRootNode(instance);
|
|
19
|
+
|
|
20
|
+
if (_rootNode !== _this.rootNode) {
|
|
21
|
+
_this.rootNode = _rootNode;
|
|
22
|
+
|
|
23
|
+
_this.rootNodeEmitter.emit('change', _rootNode);
|
|
24
|
+
}
|
|
17
25
|
};
|
|
18
26
|
|
|
19
27
|
_this.getRootNode = function () {
|
|
20
28
|
return _this.rootNode;
|
|
21
29
|
};
|
|
22
30
|
|
|
31
|
+
_this.addRootNodeChangeListener = function (callback) {
|
|
32
|
+
_this.rootNodeEmitter.addListener('change', callback);
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
remove: function remove() {
|
|
36
|
+
_this.rootNodeEmitter.removeListener('change', callback);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
|
|
23
41
|
return _this;
|
|
24
42
|
}
|
|
25
43
|
|
|
@@ -34,4 +52,7 @@ export function rootNode(Component) {
|
|
|
34
52
|
}
|
|
35
53
|
|
|
36
54
|
return rootNode;
|
|
37
|
-
}
|
|
55
|
+
}
|
|
56
|
+
export var isInstanceWithRootNode = function isInstanceWithRootNode(instance) {
|
|
57
|
+
return Boolean(instance) && Object.prototype.hasOwnProperty.call(instance, 'getRootNode');
|
|
58
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["rootNodeDecorator.tsx"],"names":["getRootNode","rootNode","Component","setRootNode","instance","nameDescriptor","Object","getOwnPropertyDescriptor","configurable","defineProperty","value","name"],"mappings":";;;;AAIA,
|
|
1
|
+
{"version":3,"sources":["rootNodeDecorator.tsx"],"names":["EventEmitter","getRootNode","rootNode","Component","defaultRootNode","rootNodeEmitter","setRootNode","instance","emit","addRootNodeChangeListener","callback","addListener","remove","removeListener","nameDescriptor","Object","getOwnPropertyDescriptor","configurable","defineProperty","value","name","isInstanceWithRootNode","Boolean","prototype","hasOwnProperty","call"],"mappings":";AACA,OAAOA,YAAP,MAAyB,eAAzB;;;;AAIA,SAASC,WAAT,QAA4B,eAA5B;;;;;;;;;;;;;;;;;;;;;AAqBA,OAAO,SAASC,QAAT,CAAuDC,SAAvD,EAAqE;AAC1E,MAAMD,QAAQ;;;AAGZ,wBAAmC;AACjC,8FADiC,MAF5BA,QAE4B,GAFEC,SAAS,CAACC,eAEZ,OAD5BC,eAC4B,GADV,IAAIL,YAAJ,EACU;;;AAI5BM,MAAAA,WAJ4B,GAId,UAACC,QAAD,EAA6C;AAChE,YAAML,SAAQ,GAAGD,WAAW,CAACM,QAAD,CAA5B;AACA,YAAIL,SAAQ,KAAK,MAAKA,QAAtB,EAAgC;AAC9B,gBAAKA,QAAL,GAAgBA,SAAhB;AACA,gBAAKG,eAAL,CAAqBG,IAArB,CAA0B,QAA1B,EAAoCN,SAApC;AACD;AACF,OAVkC;;AAY5BD,MAAAA,WAZ4B,GAYd,YAAyB;AAC5C,eAAO,MAAKC,QAAZ;AACD,OAdkC;;AAgB5BO,MAAAA,yBAhB4B,GAgBA,UAACC,QAAD,EAAwE;AACzG,cAAKL,eAAL,CAAqBM,WAArB,CAAiC,QAAjC,EAA2CD,QAA3C;AACA,eAAO;AACLE,UAAAA,MAAM,EAAE,kBAAM;AACZ,kBAAKP,eAAL,CAAqBQ,cAArB,CAAoC,QAApC,EAA8CH,QAA9C;AACD,WAHI,EAAP;;AAKD,OAvBkC,cAElC,CALW,kBAAiBP,SAAjB,SAAd;;;AA6BA,MAAMW,cAAc,GAAGC,MAAM,CAACC,wBAAP,CAAgCd,QAAhC,EAA0C,MAA1C,CAAvB;AACA,MAAI,CAACY,cAAD,IAAmBA,cAAc,CAACG,YAAtC,EAAoD;AAClDF,IAAAA,MAAM,CAACG,cAAP,CAAsBhB,QAAtB,EAAgC,MAAhC,EAAwC,EAAEiB,KAAK,EAAEhB,SAAS,CAACiB,IAAnB,EAAxC;AACD;;AAED,SAAOlB,QAAP;AACD;;AAED,OAAO,IAAMmB,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACd,QAAD,EAAyD;AAC7F,SAAOe,OAAO,CAACf,QAAD,CAAP,IAAqBQ,MAAM,CAACQ,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqClB,QAArC,EAA+C,aAA/C,CAA5B;AACD,CAFM","sourcesContent":["import React from 'react';\nimport EventEmitter from 'eventemitter3';\n\nimport { Nullable } from '../../typings/utility-types';\n\nimport { getRootNode } from './getRootNode';\n\nexport type TSetRootNode = (e: Nullable<React.ReactNode>) => void;\n\nexport type TRootNodeSubscription = {\n remove: () => void;\n};\n\nexport interface InstanceWithRootNode {\n getRootNode: () => Nullable<Element>;\n addRootNodeChangeListener?: (callback: (node: Nullable<Element>) => void) => TRootNodeSubscription;\n}\n\ninterface ComponentWithDefaultRootNode {\n defaultRootNode?: Element | null;\n}\n\ninterface DecoratableClassComponent extends ComponentWithDefaultRootNode {\n new (...args: any[]): React.Component;\n}\n\nexport function rootNode<T extends DecoratableClassComponent>(Component: T) {\n const rootNode = class extends Component implements InstanceWithRootNode {\n public rootNode: Nullable<Element> = Component.defaultRootNode;\n public rootNodeEmitter = new EventEmitter();\n public constructor(...args: any[]) {\n super(args[0]);\n }\n\n public setRootNode = (instance: Nullable<React.ReactInstance>) => {\n const rootNode = getRootNode(instance);\n if (rootNode !== this.rootNode) {\n this.rootNode = rootNode;\n this.rootNodeEmitter.emit('change', rootNode);\n }\n };\n\n public getRootNode = (): Nullable<Element> => {\n return this.rootNode;\n };\n\n public addRootNodeChangeListener = (callback: (node: Nullable<Element>) => void): TRootNodeSubscription => {\n this.rootNodeEmitter.addListener('change', callback);\n return {\n remove: () => {\n this.rootNodeEmitter.removeListener('change', callback);\n },\n };\n };\n };\n\n const nameDescriptor = Object.getOwnPropertyDescriptor(rootNode, 'name');\n if (!nameDescriptor || nameDescriptor.configurable) {\n Object.defineProperty(rootNode, 'name', { value: Component.name });\n }\n\n return rootNode;\n}\n\nexport const isInstanceWithRootNode = (instance: unknown): instance is InstanceWithRootNode => {\n return Boolean(instance) && Object.prototype.hasOwnProperty.call(instance, 'getRootNode');\n};\n"]}
|
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import EventEmitter from 'eventemitter3';
|
|
2
3
|
import { Nullable } from '../../typings/utility-types';
|
|
3
4
|
export declare type TSetRootNode = (e: Nullable<React.ReactNode>) => void;
|
|
4
|
-
export declare
|
|
5
|
+
export declare type TRootNodeSubscription = {
|
|
6
|
+
remove: () => void;
|
|
7
|
+
};
|
|
8
|
+
export interface InstanceWithRootNode {
|
|
9
|
+
getRootNode: () => Nullable<Element>;
|
|
10
|
+
addRootNodeChangeListener?: (callback: (node: Nullable<Element>) => void) => TRootNodeSubscription;
|
|
11
|
+
}
|
|
12
|
+
interface ComponentWithDefaultRootNode {
|
|
13
|
+
defaultRootNode?: Element | null;
|
|
14
|
+
}
|
|
15
|
+
interface DecoratableClassComponent extends ComponentWithDefaultRootNode {
|
|
16
|
+
new (...args: any[]): React.Component;
|
|
17
|
+
}
|
|
18
|
+
export declare function rootNode<T extends DecoratableClassComponent>(Component: T): {
|
|
5
19
|
new (...args: any[]): {
|
|
6
|
-
rootNode: Nullable<
|
|
20
|
+
rootNode: Nullable<Element>;
|
|
21
|
+
rootNodeEmitter: EventEmitter<string | symbol, any>;
|
|
7
22
|
setRootNode: (instance: Nullable<React.ReactInstance>) => void;
|
|
8
|
-
getRootNode: () => Nullable<
|
|
23
|
+
getRootNode: () => Nullable<Element>;
|
|
24
|
+
addRootNodeChangeListener: (callback: (node: Nullable<Element>) => void) => TRootNodeSubscription;
|
|
9
25
|
context: any;
|
|
10
26
|
setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<{}>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
|
|
11
27
|
forceUpdate(callback?: (() => void) | undefined): void;
|
|
@@ -30,4 +46,7 @@ export declare function rootNode<T extends new (...args: any[]) => React.Compone
|
|
|
30
46
|
componentWillUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): void;
|
|
31
47
|
UNSAFE_componentWillUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): void;
|
|
32
48
|
};
|
|
49
|
+
defaultRootNode?: Element | null | undefined;
|
|
33
50
|
} & T;
|
|
51
|
+
export declare const isInstanceWithRootNode: (instance: unknown) => instance is InstanceWithRootNode;
|
|
52
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skbkontur/react-ui",
|
|
3
|
-
"version": "3.12.
|
|
3
|
+
"version": "3.12.8",
|
|
4
4
|
"description": "UI Components",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "index.js",
|
|
7
7
|
"sideEffects": false,
|
|
8
|
-
"homepage": "https://tech.skbkontur.ru/react-ui/3.12.
|
|
8
|
+
"homepage": "https://tech.skbkontur.ru/react-ui/3.12.8/",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
11
|
"url": "git@github.com:skbkontur/retail-ui.git"
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"fix": "run-s -c fix:*",
|
|
39
39
|
"fix:eslint": "yarn lint:eslint --fix",
|
|
40
40
|
"fix:prettier": "yarn prettier --write .",
|
|
41
|
-
"test": "cross-env BABEL_ENV=cjs jest",
|
|
41
|
+
"test": "cross-env BABEL_ENV=cjs jest --detectOpenHandles",
|
|
42
42
|
"test:watch": "yarn test --watch",
|
|
43
43
|
"creevey": "wait-on -t 300000 http-get://localhost:6060/ && cross-env BABEL_ENV=cjs creevey -c .creevey/config.js",
|
|
44
44
|
"creevey:ui": "yarn creevey --ui",
|
|
@@ -85,9 +85,9 @@
|
|
|
85
85
|
"@testing-library/react": "12.1.2",
|
|
86
86
|
"@testing-library/react-hooks": "^7.0.2",
|
|
87
87
|
"@testing-library/user-event": "13.5.0",
|
|
88
|
-
"@types/enzyme": "
|
|
88
|
+
"@types/enzyme": "3.10.10",
|
|
89
89
|
"@types/invariant": "^2.2.33",
|
|
90
|
-
"@types/jest": "
|
|
90
|
+
"@types/jest": "27.0.3",
|
|
91
91
|
"@types/jest-axe": "^3.5.3",
|
|
92
92
|
"@types/lodash.debounce": "^4.0.6",
|
|
93
93
|
"@types/lodash.isequal": "^4.5.5",
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"fs-readdir-recursive": "^1.1.0",
|
|
123
123
|
"gh-pages": "^3.1.0",
|
|
124
124
|
"identity-obj-proxy": "^3.0.0",
|
|
125
|
-
"jest": "
|
|
125
|
+
"jest": "27.4.5",
|
|
126
126
|
"jest-axe": "^5.0.1",
|
|
127
127
|
"jest-teamcity-reporter": "^0.9.0",
|
|
128
128
|
"npm-run-all": "^4.1.5",
|
|
@@ -150,15 +150,18 @@
|
|
|
150
150
|
"jest": {
|
|
151
151
|
"testResultsProcessor": "jest-teamcity-reporter",
|
|
152
152
|
"moduleNameMapper": {
|
|
153
|
-
"\\.(
|
|
154
|
-
"\\.(css)$": "identity-obj-proxy"
|
|
153
|
+
"\\.(css|less)$": "identity-obj-proxy"
|
|
155
154
|
},
|
|
156
155
|
"transform": {
|
|
157
|
-
"
|
|
156
|
+
"\\.[jt]sx?$": "babel-jest"
|
|
158
157
|
},
|
|
159
158
|
"testRegex": "__tests__(\\\\|/).*(\\.|-)test\\.(j|t)sx?$",
|
|
159
|
+
"testEnvironment": "jsdom",
|
|
160
160
|
"setupFilesAfterEnv": [
|
|
161
161
|
"<rootDir>/test-setup.js"
|
|
162
|
+
],
|
|
163
|
+
"transformIgnorePatterns": [
|
|
164
|
+
"<rootDir>/node_modules/"
|
|
162
165
|
]
|
|
163
166
|
},
|
|
164
167
|
"publishConfig": {
|