@chayns-components/core 5.2.4-alpha.0 → 5.2.4
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/lib/cjs/components/skeleton/base-skeleton/BaseSkeleton.styles.js +0 -2
- package/lib/cjs/components/skeleton/base-skeleton/BaseSkeleton.styles.js.map +1 -1
- package/lib/cjs/hooks/element.js +32 -12
- package/lib/cjs/hooks/element.js.map +1 -1
- package/lib/esm/components/skeleton/base-skeleton/BaseSkeleton.styles.js +0 -2
- package/lib/esm/components/skeleton/base-skeleton/BaseSkeleton.styles.js.map +1 -1
- package/lib/esm/hooks/element.js +32 -12
- package/lib/esm/hooks/element.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseSkeleton.styles.js","names":["_styledComponents","_interopRequireWildcard","require","_react","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","StyledBaseSkeleton","exports","styled","div","$borderRadius","$backgroundColor","$width","$shouldUseNativeTag","$height","css","StyledMotionBaseSkeletonShimmer","motion","$color","StyledMotionBaseSkeletonPulse"],"sources":["../../../../../src/components/skeleton/base-skeleton/BaseSkeleton.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { motion } from 'motion/react';\nimport { WithTheme } from '../../color-scheme-provider/ColorSchemeProvider';\n\ntype StyledBaseSkeletonProps = WithTheme<{\n $borderRadius: number | string;\n $backgroundColor: string;\n $width: number | string;\n $height: number | string;\n $shouldUseNativeTag: boolean;\n}>;\n\nexport const StyledBaseSkeleton = styled.div<StyledBaseSkeletonProps>`\n position: relative;\n overflow: hidden;\n border-radius: ${({ $borderRadius }) =>\n `${$borderRadius}${typeof $borderRadius === 'number' ? 'px' : ''}`};\n\n background-color: ${({ $backgroundColor }) => $backgroundColor};\n\n width: ${({ $width }) => `${$width}${typeof $width === 'number' ? 'px' : ''}`};\n\n user-select: none;\n\n
|
|
1
|
+
{"version":3,"file":"BaseSkeleton.styles.js","names":["_styledComponents","_interopRequireWildcard","require","_react","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","StyledBaseSkeleton","exports","styled","div","$borderRadius","$backgroundColor","$width","$shouldUseNativeTag","$height","css","StyledMotionBaseSkeletonShimmer","motion","$color","StyledMotionBaseSkeletonPulse"],"sources":["../../../../../src/components/skeleton/base-skeleton/BaseSkeleton.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { motion } from 'motion/react';\nimport { WithTheme } from '../../color-scheme-provider/ColorSchemeProvider';\n\ntype StyledBaseSkeletonProps = WithTheme<{\n $borderRadius: number | string;\n $backgroundColor: string;\n $width: number | string;\n $height: number | string;\n $shouldUseNativeTag: boolean;\n}>;\n\nexport const StyledBaseSkeleton = styled.div<StyledBaseSkeletonProps>`\n position: relative;\n overflow: hidden;\n border-radius: ${({ $borderRadius }) =>\n `${$borderRadius}${typeof $borderRadius === 'number' ? 'px' : ''}`};\n\n background-color: ${({ $backgroundColor }) => $backgroundColor};\n\n width: ${({ $width }) => `${$width}${typeof $width === 'number' ? 'px' : ''}`};\n\n user-select: none;\n\n ${({ $shouldUseNativeTag, $height }) =>\n $shouldUseNativeTag\n ? css`\n color: transparent;\n `\n : css`\n height: ${$height}${typeof $height === 'number' ? 'px' : ''};\n `}\n`;\n\ntype StyledMotionBaseSkeletonShimmerProps = WithTheme<{\n $color: string;\n}>;\n\nexport const StyledMotionBaseSkeletonShimmer = styled(\n motion.div,\n)<StyledMotionBaseSkeletonShimmerProps>`\n background: ${({ $color }) =>\n `linear-gradient(\n 90deg,\n transparent 0%,\n ${$color} 50%,\n transparent 100%\n )`};\n\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n\n width: 100%;\n height: 100%;\n\n pointer-events: none;\n border-radius: 0;\n\n will-change: transform;\n\n opacity: 0.06;\n`;\n\ntype StyledMotionBaseSkeletonPulseProps = WithTheme<{\n $color: string;\n}>;\n\nexport const StyledMotionBaseSkeletonPulse = styled(motion.div)<StyledMotionBaseSkeletonPulseProps>`\n width: 100%;\n height: 100%;\n\n position: absolute;\n\n opacity: 0.06;\n\n background-color: ${({ $color }) => $color};\n`;\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAsC,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAW/B,MAAMkB,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAGE,yBAAM,CAACC,GAA4B;AACrE;AACA;AACA,qBAAqB,CAAC;EAAEC;AAAc,CAAC,KAC/B,GAAGA,aAAa,GAAG,OAAOA,aAAa,KAAK,QAAQ,GAAG,IAAI,GAAG,EAAE,EAAE;AAC1E;AACA,wBAAwB,CAAC;EAAEC;AAAiB,CAAC,KAAKA,gBAAgB;AAClE;AACA,aAAa,CAAC;EAAEC;AAAO,CAAC,KAAK,GAAGA,MAAM,GAAG,OAAOA,MAAM,KAAK,QAAQ,GAAG,IAAI,GAAG,EAAE,EAAE;AACjF;AACA;AACA;AACA,MAAM,CAAC;EAAEC,mBAAmB;EAAEC;AAAQ,CAAC,KAC/BD,mBAAmB,GACb,IAAAE,qBAAG;AACjB;AACA,eAAe,GACD,IAAAA,qBAAG;AACjB,4BAA4BD,OAAO,GAAG,OAAOA,OAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,EAAE;AAC7E,eAAe;AACf,CAAC;AAMM,MAAME,+BAA+B,GAAAT,OAAA,CAAAS,+BAAA,GAAG,IAAAR,yBAAM,EACjDS,aAAM,CAACR,GACX,CAAuC;AACvC,kBAAkB,CAAC;EAAES;AAAO,CAAC,KACrB;AACR;AACA;AACA,cAAcA,MAAM;AACpB;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAMM,MAAMC,6BAA6B,GAAAZ,OAAA,CAAAY,6BAAA,GAAG,IAAAX,yBAAM,EAACS,aAAM,CAACR,GAAG,CAAqC;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,CAAC;EAAES;AAAO,CAAC,KAAKA,MAAM;AAC9C,CAAC","ignoreList":[]}
|
package/lib/cjs/hooks/element.js
CHANGED
|
@@ -6,6 +6,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useMeasuredClone = exports.useIsMeasuredClone = exports.useElementSize = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
9
|
+
const isSameRect = (a, b) => {
|
|
10
|
+
if (!a || !b) return false;
|
|
11
|
+
return a.width === b.width && a.height === b.height && a.x === b.x && a.y === b.y;
|
|
12
|
+
};
|
|
9
13
|
const useElementSize = (ref, {
|
|
10
14
|
shouldUseChildElement = false,
|
|
11
15
|
shouldUseParentElement = false
|
|
@@ -15,24 +19,34 @@ const useElementSize = (ref, {
|
|
|
15
19
|
let target = ref.current;
|
|
16
20
|
if (shouldUseParentElement) {
|
|
17
21
|
var _ref$current;
|
|
18
|
-
target = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.parentElement;
|
|
22
|
+
target = ((_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.parentElement) ?? null;
|
|
19
23
|
}
|
|
20
24
|
if (shouldUseChildElement) {
|
|
21
25
|
var _ref$current2;
|
|
22
26
|
target = (_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.firstElementChild;
|
|
23
27
|
}
|
|
24
|
-
if (!target) return
|
|
25
|
-
|
|
26
|
-
updateSize
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
if (!target) return undefined;
|
|
29
|
+
let frameId;
|
|
30
|
+
const updateSize = nextSize => {
|
|
31
|
+
if (frameId) {
|
|
32
|
+
window.cancelAnimationFrame(frameId);
|
|
33
|
+
}
|
|
34
|
+
frameId = window.requestAnimationFrame(() => {
|
|
35
|
+
setSize(currentSize => isSameRect(currentSize, nextSize) ? currentSize : nextSize);
|
|
32
36
|
});
|
|
37
|
+
};
|
|
38
|
+
updateSize(target.getBoundingClientRect());
|
|
39
|
+
const observer = new ResizeObserver(([entry]) => {
|
|
40
|
+
if (!entry || entry.target !== target) return;
|
|
41
|
+
updateSize(entry.contentRect);
|
|
33
42
|
});
|
|
34
43
|
observer.observe(target);
|
|
35
|
-
return () =>
|
|
44
|
+
return () => {
|
|
45
|
+
if (frameId) {
|
|
46
|
+
window.cancelAnimationFrame(frameId);
|
|
47
|
+
}
|
|
48
|
+
observer.disconnect();
|
|
49
|
+
};
|
|
36
50
|
}, [ref, shouldUseChildElement, shouldUseParentElement]);
|
|
37
51
|
return size;
|
|
38
52
|
};
|
|
@@ -40,8 +54,14 @@ exports.useElementSize = useElementSize;
|
|
|
40
54
|
const cloneWithTabIndex = node => {
|
|
41
55
|
if (! /*#__PURE__*/(0, _react.isValidElement)(node)) return node;
|
|
42
56
|
const element = node;
|
|
43
|
-
|
|
44
|
-
|
|
57
|
+
if (element.type === _react.default.Fragment) {
|
|
58
|
+
const children = _react.Children.map(element.props.children, cloneWithTabIndex);
|
|
59
|
+
return /*#__PURE__*/(0, _react.cloneElement)(element, {
|
|
60
|
+
...element.props,
|
|
61
|
+
children
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const children = element.props.children ? _react.Children.map(element.props.children, cloneWithTabIndex) : element.props.children;
|
|
45
65
|
if (element.type.displayName === 'Button') {
|
|
46
66
|
return (
|
|
47
67
|
/*#__PURE__*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["_react","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useElementSize","ref","shouldUseChildElement","shouldUseParentElement","size","setSize","useState","useEffect","target","current","_ref$current","parentElement","_ref$current2","firstElementChild","updateSize","getBoundingClientRect","observer","ResizeObserver","entries","forEach","entry","contentRect","observe","disconnect","exports","cloneWithTabIndex","node","isValidElement","element","tmpChildren","props","children","Children","map","type","displayName","createElement","tabIndex","cloneElement","getClonedElement","content","preventEvents","onClick","stopPropagation","onMouseDown","onMouseUp","onKeyDown","onKeyUp","onFocus","onBlur","useMeasuredClone","shouldPreventTextWrapping","useRef","width","height","clonedElement","measure","offsetWidth","offsetHeight","measuredElement","style","position","opacity","pointerEvents","userSelect","zIndex","visibility","inert","useIsMeasuredClone","isClone","setIsClone","el","hasAttribute"],"sources":["../../../src/hooks/element.tsx"],"sourcesContent":["import React, {\n Children,\n cloneElement,\n HTMLAttributes,\n isValidElement,\n MutableRefObject,\n ReactElement,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\ninterface UseElementSizeOptions {\n shouldUseChildElement?: boolean;\n shouldUseParentElement?: boolean;\n}\n\nexport const useElementSize = (\n ref: MutableRefObject<HTMLDivElement | HTMLLabelElement | null>,\n { shouldUseChildElement = false, shouldUseParentElement = false }: UseElementSizeOptions = {},\n): DOMRectReadOnly | undefined => {\n const [size, setSize] = useState<DOMRectReadOnly>();\n\n useEffect(() => {\n let target = ref.current as HTMLElement | null;\n\n if (shouldUseParentElement) {\n target = ref.current?.parentElement as HTMLElement | null;\n }\n\n if (shouldUseChildElement) {\n target = ref.current?.firstElementChild as HTMLElement | null;\n }\n\n if (!target) return () => {};\n\n const updateSize = () => setSize(target.getBoundingClientRect());\n\n updateSize();\n\n const observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.target === target) {\n setSize(entry.contentRect);\n }\n });\n });\n\n observer.observe(target);\n\n return () => observer.disconnect();\n }, [ref, shouldUseChildElement, shouldUseParentElement]);\n\n return size;\n};\n\nconst cloneWithTabIndex = (node: ReactNode): ReactNode => {\n if (!isValidElement(node)) return node;\n\n const element = node as ReactElement;\n\n const tmpChildren = (element.props as { children: ReactNode[] }).children;\n\n const children = tmpChildren ? Children.map(tmpChildren, cloneWithTabIndex) : tmpChildren;\n\n if ((element.type as unknown as { displayName: string }).displayName === 'Button') {\n return (\n // eslint-disable-next-line react/button-has-type\n <button tabIndex={-1}>{children}</button>\n );\n }\n\n return cloneElement(element, {\n ...element.props,\n tabIndex: -1,\n children,\n });\n};\n\nconst getClonedElement = (content: ReactNode) => {\n const preventEvents: Partial<HTMLAttributes<never>> = {\n onClick: (e) => e.stopPropagation(),\n onMouseDown: (e) => e.stopPropagation(),\n onMouseUp: (e) => e.stopPropagation(),\n onKeyDown: (e) => e.stopPropagation(),\n onKeyUp: (e) => e.stopPropagation(),\n onFocus: (e) => e.stopPropagation(),\n onBlur: (e) => e.stopPropagation(),\n };\n\n if (typeof content === 'string') {\n return (\n <span tabIndex={-1} data-measured-clone>\n {content}\n </span>\n );\n }\n\n if (isValidElement(content)) {\n return cloneWithTabIndex(\n cloneElement(content, {\n ...preventEvents,\n 'data-measured-clone': true,\n }),\n );\n }\n\n return content;\n};\n\ninterface UseMeasuredCloneOptions {\n content: ReactNode;\n shouldPreventTextWrapping?: boolean;\n}\n\nexport const useMeasuredClone = ({\n content,\n shouldPreventTextWrapping = true,\n}: UseMeasuredCloneOptions) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n const clonedElement = getClonedElement(content);\n\n useEffect(() => {\n const measure = () => {\n if (!ref.current) return;\n\n const { offsetWidth: width, offsetHeight: height } = ref.current;\n\n setSize({ width: width + (shouldPreventTextWrapping ? 10 : 0), height });\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n if (ref.current) observer.observe(ref.current);\n\n return () => observer.disconnect();\n }, [shouldPreventTextWrapping]);\n\n const measuredElement = (\n <div\n data-measured-clone=\"true\"\n ref={ref}\n style={{\n position: 'fixed',\n opacity: 0,\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: -1,\n height: 'auto',\n width: 'auto',\n visibility: 'hidden',\n }}\n inert=\"true\"\n tabIndex={-1}\n >\n {clonedElement}\n </div>\n );\n\n return {\n measuredElement,\n width: size.width,\n height: size.height,\n };\n};\n\nexport const useIsMeasuredClone = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n\n const [isClone, setIsClone] = useState(false);\n\n useEffect(() => {\n if (!ref.current) return;\n\n let el: HTMLElement | null = ref.current;\n\n while (el) {\n if (el.hasAttribute('data-measured-clone')) {\n setIsClone(true);\n\n return;\n }\n\n el = el.parentElement;\n }\n\n setIsClone(false);\n }, []);\n\n return [isClone, ref] as const;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"element.js","names":["_react","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","isSameRect","a","b","width","height","x","y","useElementSize","ref","shouldUseChildElement","shouldUseParentElement","size","setSize","useState","useEffect","target","current","_ref$current","parentElement","_ref$current2","firstElementChild","undefined","frameId","updateSize","nextSize","window","cancelAnimationFrame","requestAnimationFrame","currentSize","getBoundingClientRect","observer","ResizeObserver","entry","contentRect","observe","disconnect","exports","cloneWithTabIndex","node","isValidElement","element","type","React","Fragment","children","Children","map","props","cloneElement","displayName","createElement","tabIndex","getClonedElement","content","preventEvents","onClick","stopPropagation","onMouseDown","onMouseUp","onKeyDown","onKeyUp","onFocus","onBlur","useMeasuredClone","shouldPreventTextWrapping","useRef","clonedElement","measure","offsetWidth","offsetHeight","measuredElement","style","position","opacity","pointerEvents","userSelect","zIndex","visibility","inert","useIsMeasuredClone","isClone","setIsClone","el","hasAttribute"],"sources":["../../../src/hooks/element.tsx"],"sourcesContent":["import React, {\n Children,\n cloneElement,\n HTMLAttributes,\n isValidElement,\n MutableRefObject,\n ReactElement,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\ninterface UseElementSizeOptions {\n shouldUseChildElement?: boolean;\n shouldUseParentElement?: boolean;\n}\n\nconst isSameRect = (a?: DOMRectReadOnly, b?: DOMRectReadOnly) => {\n if (!a || !b) return false;\n\n return a.width === b.width && a.height === b.height && a.x === b.x && a.y === b.y;\n};\n\nexport const useElementSize = (\n ref: MutableRefObject<HTMLDivElement | HTMLLabelElement | null>,\n { shouldUseChildElement = false, shouldUseParentElement = false }: UseElementSizeOptions = {},\n): DOMRectReadOnly | undefined => {\n const [size, setSize] = useState<DOMRectReadOnly>();\n\n useEffect(() => {\n let target: HTMLElement | null = ref.current;\n\n if (shouldUseParentElement) {\n target = ref.current?.parentElement ?? null;\n }\n\n if (shouldUseChildElement) {\n target = ref.current?.firstElementChild as HTMLElement | null;\n }\n\n if (!target) return undefined;\n\n let frameId: number | undefined;\n\n const updateSize = (nextSize: DOMRectReadOnly) => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n frameId = window.requestAnimationFrame(() => {\n setSize((currentSize) =>\n isSameRect(currentSize, nextSize) ? currentSize : nextSize,\n );\n });\n };\n\n updateSize(target.getBoundingClientRect());\n\n const observer = new ResizeObserver(([entry]) => {\n if (!entry || entry.target !== target) return;\n\n updateSize(entry.contentRect);\n });\n\n observer.observe(target);\n\n return () => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n observer.disconnect();\n };\n }, [ref, shouldUseChildElement, shouldUseParentElement]);\n\n return size;\n};\n\nconst cloneWithTabIndex = (node: ReactNode): ReactNode => {\n if (!isValidElement(node)) return node;\n\n const element = node as ReactElement;\n\n if (element.type === React.Fragment) {\n const children = Children.map(element.props.children, cloneWithTabIndex);\n\n return cloneElement(element, {\n ...element.props,\n children,\n });\n }\n\n const children = element.props.children\n ? Children.map(element.props.children, cloneWithTabIndex)\n : element.props.children;\n\n if ((element.type as any).displayName === 'Button') {\n return (\n // eslint-disable-next-line react/button-has-type\n <button tabIndex={-1}>{children}</button>\n );\n }\n\n return cloneElement(element, {\n ...element.props,\n tabIndex: -1,\n children,\n });\n};\n\nconst getClonedElement = (content: ReactNode) => {\n const preventEvents: Partial<HTMLAttributes<never>> = {\n onClick: (e) => e.stopPropagation(),\n onMouseDown: (e) => e.stopPropagation(),\n onMouseUp: (e) => e.stopPropagation(),\n onKeyDown: (e) => e.stopPropagation(),\n onKeyUp: (e) => e.stopPropagation(),\n onFocus: (e) => e.stopPropagation(),\n onBlur: (e) => e.stopPropagation(),\n };\n\n if (typeof content === 'string') {\n return (\n <span tabIndex={-1} data-measured-clone>\n {content}\n </span>\n );\n }\n\n if (isValidElement(content)) {\n return cloneWithTabIndex(\n cloneElement(content, {\n ...preventEvents,\n 'data-measured-clone': true,\n }),\n );\n }\n\n return content;\n};\n\ninterface UseMeasuredCloneOptions {\n content: ReactNode;\n shouldPreventTextWrapping?: boolean;\n}\n\nexport const useMeasuredClone = ({\n content,\n shouldPreventTextWrapping = true,\n}: UseMeasuredCloneOptions) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n const clonedElement = getClonedElement(content);\n\n useEffect(() => {\n const measure = () => {\n if (!ref.current) return;\n\n const { offsetWidth: width, offsetHeight: height } = ref.current;\n\n setSize({ width: width + (shouldPreventTextWrapping ? 10 : 0), height });\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n if (ref.current) observer.observe(ref.current);\n\n return () => observer.disconnect();\n }, [shouldPreventTextWrapping]);\n\n const measuredElement = (\n <div\n data-measured-clone=\"true\"\n ref={ref}\n style={{\n position: 'fixed',\n opacity: 0,\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: -1,\n height: 'auto',\n width: 'auto',\n visibility: 'hidden',\n }}\n inert=\"true\"\n tabIndex={-1}\n >\n {clonedElement}\n </div>\n );\n\n return {\n measuredElement,\n width: size.width,\n height: size.height,\n };\n};\n\nexport const useIsMeasuredClone = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n\n const [isClone, setIsClone] = useState(false);\n\n useEffect(() => {\n if (!ref.current) return;\n\n let el: HTMLElement | null = ref.current;\n\n while (el) {\n if (el.hasAttribute('data-measured-clone')) {\n setIsClone(true);\n\n return;\n }\n\n el = el.parentElement;\n }\n\n setIsClone(false);\n }, []);\n\n return [isClone, ref] as const;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseSkeleton.styles.js","names":["styled","css","motion","StyledBaseSkeleton","div","$borderRadius","$backgroundColor","$width","$shouldUseNativeTag","$height","StyledMotionBaseSkeletonShimmer","$color","StyledMotionBaseSkeletonPulse"],"sources":["../../../../../src/components/skeleton/base-skeleton/BaseSkeleton.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { motion } from 'motion/react';\nimport { WithTheme } from '../../color-scheme-provider/ColorSchemeProvider';\n\ntype StyledBaseSkeletonProps = WithTheme<{\n $borderRadius: number | string;\n $backgroundColor: string;\n $width: number | string;\n $height: number | string;\n $shouldUseNativeTag: boolean;\n}>;\n\nexport const StyledBaseSkeleton = styled.div<StyledBaseSkeletonProps>`\n position: relative;\n overflow: hidden;\n border-radius: ${({ $borderRadius }) =>\n `${$borderRadius}${typeof $borderRadius === 'number' ? 'px' : ''}`};\n\n background-color: ${({ $backgroundColor }) => $backgroundColor};\n\n width: ${({ $width }) => `${$width}${typeof $width === 'number' ? 'px' : ''}`};\n\n user-select: none;\n\n
|
|
1
|
+
{"version":3,"file":"BaseSkeleton.styles.js","names":["styled","css","motion","StyledBaseSkeleton","div","$borderRadius","$backgroundColor","$width","$shouldUseNativeTag","$height","StyledMotionBaseSkeletonShimmer","$color","StyledMotionBaseSkeletonPulse"],"sources":["../../../../../src/components/skeleton/base-skeleton/BaseSkeleton.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { motion } from 'motion/react';\nimport { WithTheme } from '../../color-scheme-provider/ColorSchemeProvider';\n\ntype StyledBaseSkeletonProps = WithTheme<{\n $borderRadius: number | string;\n $backgroundColor: string;\n $width: number | string;\n $height: number | string;\n $shouldUseNativeTag: boolean;\n}>;\n\nexport const StyledBaseSkeleton = styled.div<StyledBaseSkeletonProps>`\n position: relative;\n overflow: hidden;\n border-radius: ${({ $borderRadius }) =>\n `${$borderRadius}${typeof $borderRadius === 'number' ? 'px' : ''}`};\n\n background-color: ${({ $backgroundColor }) => $backgroundColor};\n\n width: ${({ $width }) => `${$width}${typeof $width === 'number' ? 'px' : ''}`};\n\n user-select: none;\n\n ${({ $shouldUseNativeTag, $height }) =>\n $shouldUseNativeTag\n ? css`\n color: transparent;\n `\n : css`\n height: ${$height}${typeof $height === 'number' ? 'px' : ''};\n `}\n`;\n\ntype StyledMotionBaseSkeletonShimmerProps = WithTheme<{\n $color: string;\n}>;\n\nexport const StyledMotionBaseSkeletonShimmer = styled(\n motion.div,\n)<StyledMotionBaseSkeletonShimmerProps>`\n background: ${({ $color }) =>\n `linear-gradient(\n 90deg,\n transparent 0%,\n ${$color} 50%,\n transparent 100%\n )`};\n\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n\n width: 100%;\n height: 100%;\n\n pointer-events: none;\n border-radius: 0;\n\n will-change: transform;\n\n opacity: 0.06;\n`;\n\ntype StyledMotionBaseSkeletonPulseProps = WithTheme<{\n $color: string;\n}>;\n\nexport const StyledMotionBaseSkeletonPulse = styled(motion.div)<StyledMotionBaseSkeletonPulseProps>`\n width: 100%;\n height: 100%;\n\n position: absolute;\n\n opacity: 0.06;\n\n background-color: ${({ $color }) => $color};\n`;\n"],"mappings":"AAAA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAC/C,SAASC,MAAM,QAAQ,cAAc;AAWrC,OAAO,MAAMC,kBAAkB,GAAGH,MAAM,CAACI,GAA4B;AACrE;AACA;AACA,qBAAqB,CAAC;EAAEC;AAAc,CAAC,KAC/B,GAAGA,aAAa,GAAG,OAAOA,aAAa,KAAK,QAAQ,GAAG,IAAI,GAAG,EAAE,EAAE;AAC1E;AACA,wBAAwB,CAAC;EAAEC;AAAiB,CAAC,KAAKA,gBAAgB;AAClE;AACA,aAAa,CAAC;EAAEC;AAAO,CAAC,KAAK,GAAGA,MAAM,GAAG,OAAOA,MAAM,KAAK,QAAQ,GAAG,IAAI,GAAG,EAAE,EAAE;AACjF;AACA;AACA;AACA,MAAM,CAAC;EAAEC,mBAAmB;EAAEC;AAAQ,CAAC,KAC/BD,mBAAmB,GACbP,GAAG;AACjB;AACA,eAAe,GACDA,GAAG;AACjB,4BAA4BQ,OAAO,GAAG,OAAOA,OAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,EAAE;AAC7E,eAAe;AACf,CAAC;AAMD,OAAO,MAAMC,+BAA+B,GAAGV,MAAM,CACjDE,MAAM,CAACE,GACX,CAAuC;AACvC,kBAAkB,CAAC;EAAEO;AAAO,CAAC,KACrB;AACR;AACA;AACA,cAAcA,MAAM;AACpB;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAMD,OAAO,MAAMC,6BAA6B,GAAGZ,MAAM,CAACE,MAAM,CAACE,GAAG,CAAqC;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,CAAC;EAAEO;AAAO,CAAC,KAAKA,MAAM;AAC9C,CAAC","ignoreList":[]}
|
package/lib/esm/hooks/element.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import React, { Children, cloneElement, isValidElement, useEffect, useRef, useState } from 'react';
|
|
2
|
+
const isSameRect = (a, b) => {
|
|
3
|
+
if (!a || !b) return false;
|
|
4
|
+
return a.width === b.width && a.height === b.height && a.x === b.x && a.y === b.y;
|
|
5
|
+
};
|
|
2
6
|
export const useElementSize = (ref, {
|
|
3
7
|
shouldUseChildElement = false,
|
|
4
8
|
shouldUseParentElement = false
|
|
@@ -7,31 +11,47 @@ export const useElementSize = (ref, {
|
|
|
7
11
|
useEffect(() => {
|
|
8
12
|
let target = ref.current;
|
|
9
13
|
if (shouldUseParentElement) {
|
|
10
|
-
target = ref.current?.parentElement;
|
|
14
|
+
target = ref.current?.parentElement ?? null;
|
|
11
15
|
}
|
|
12
16
|
if (shouldUseChildElement) {
|
|
13
17
|
target = ref.current?.firstElementChild;
|
|
14
18
|
}
|
|
15
|
-
if (!target) return
|
|
16
|
-
|
|
17
|
-
updateSize
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
if (!target) return undefined;
|
|
20
|
+
let frameId;
|
|
21
|
+
const updateSize = nextSize => {
|
|
22
|
+
if (frameId) {
|
|
23
|
+
window.cancelAnimationFrame(frameId);
|
|
24
|
+
}
|
|
25
|
+
frameId = window.requestAnimationFrame(() => {
|
|
26
|
+
setSize(currentSize => isSameRect(currentSize, nextSize) ? currentSize : nextSize);
|
|
23
27
|
});
|
|
28
|
+
};
|
|
29
|
+
updateSize(target.getBoundingClientRect());
|
|
30
|
+
const observer = new ResizeObserver(([entry]) => {
|
|
31
|
+
if (!entry || entry.target !== target) return;
|
|
32
|
+
updateSize(entry.contentRect);
|
|
24
33
|
});
|
|
25
34
|
observer.observe(target);
|
|
26
|
-
return () =>
|
|
35
|
+
return () => {
|
|
36
|
+
if (frameId) {
|
|
37
|
+
window.cancelAnimationFrame(frameId);
|
|
38
|
+
}
|
|
39
|
+
observer.disconnect();
|
|
40
|
+
};
|
|
27
41
|
}, [ref, shouldUseChildElement, shouldUseParentElement]);
|
|
28
42
|
return size;
|
|
29
43
|
};
|
|
30
44
|
const cloneWithTabIndex = node => {
|
|
31
45
|
if (! /*#__PURE__*/isValidElement(node)) return node;
|
|
32
46
|
const element = node;
|
|
33
|
-
|
|
34
|
-
|
|
47
|
+
if (element.type === React.Fragment) {
|
|
48
|
+
const children = Children.map(element.props.children, cloneWithTabIndex);
|
|
49
|
+
return /*#__PURE__*/cloneElement(element, {
|
|
50
|
+
...element.props,
|
|
51
|
+
children
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const children = element.props.children ? Children.map(element.props.children, cloneWithTabIndex) : element.props.children;
|
|
35
55
|
if (element.type.displayName === 'Button') {
|
|
36
56
|
return (
|
|
37
57
|
/*#__PURE__*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["React","Children","cloneElement","isValidElement","useEffect","useRef","useState","useElementSize","ref","shouldUseChildElement","shouldUseParentElement","size","setSize","target","current","parentElement","firstElementChild","updateSize","getBoundingClientRect","observer","ResizeObserver","entries","forEach","entry","contentRect","observe","disconnect","cloneWithTabIndex","node","element","tmpChildren","props","children","map","type","displayName","createElement","tabIndex","getClonedElement","content","preventEvents","onClick","e","stopPropagation","onMouseDown","onMouseUp","onKeyDown","onKeyUp","onFocus","onBlur","useMeasuredClone","shouldPreventTextWrapping","width","height","clonedElement","measure","offsetWidth","offsetHeight","measuredElement","style","position","opacity","pointerEvents","userSelect","zIndex","visibility","inert","useIsMeasuredClone","isClone","setIsClone","el","hasAttribute"],"sources":["../../../src/hooks/element.tsx"],"sourcesContent":["import React, {\n Children,\n cloneElement,\n HTMLAttributes,\n isValidElement,\n MutableRefObject,\n ReactElement,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\ninterface UseElementSizeOptions {\n shouldUseChildElement?: boolean;\n shouldUseParentElement?: boolean;\n}\n\nexport const useElementSize = (\n ref: MutableRefObject<HTMLDivElement | HTMLLabelElement | null>,\n { shouldUseChildElement = false, shouldUseParentElement = false }: UseElementSizeOptions = {},\n): DOMRectReadOnly | undefined => {\n const [size, setSize] = useState<DOMRectReadOnly>();\n\n useEffect(() => {\n let target = ref.current as HTMLElement | null;\n\n if (shouldUseParentElement) {\n target = ref.current?.parentElement as HTMLElement | null;\n }\n\n if (shouldUseChildElement) {\n target = ref.current?.firstElementChild as HTMLElement | null;\n }\n\n if (!target) return () => {};\n\n const updateSize = () => setSize(target.getBoundingClientRect());\n\n updateSize();\n\n const observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.target === target) {\n setSize(entry.contentRect);\n }\n });\n });\n\n observer.observe(target);\n\n return () => observer.disconnect();\n }, [ref, shouldUseChildElement, shouldUseParentElement]);\n\n return size;\n};\n\nconst cloneWithTabIndex = (node: ReactNode): ReactNode => {\n if (!isValidElement(node)) return node;\n\n const element = node as ReactElement;\n\n const tmpChildren = (element.props as { children: ReactNode[] }).children;\n\n const children = tmpChildren ? Children.map(tmpChildren, cloneWithTabIndex) : tmpChildren;\n\n if ((element.type as unknown as { displayName: string }).displayName === 'Button') {\n return (\n // eslint-disable-next-line react/button-has-type\n <button tabIndex={-1}>{children}</button>\n );\n }\n\n return cloneElement(element, {\n ...element.props,\n tabIndex: -1,\n children,\n });\n};\n\nconst getClonedElement = (content: ReactNode) => {\n const preventEvents: Partial<HTMLAttributes<never>> = {\n onClick: (e) => e.stopPropagation(),\n onMouseDown: (e) => e.stopPropagation(),\n onMouseUp: (e) => e.stopPropagation(),\n onKeyDown: (e) => e.stopPropagation(),\n onKeyUp: (e) => e.stopPropagation(),\n onFocus: (e) => e.stopPropagation(),\n onBlur: (e) => e.stopPropagation(),\n };\n\n if (typeof content === 'string') {\n return (\n <span tabIndex={-1} data-measured-clone>\n {content}\n </span>\n );\n }\n\n if (isValidElement(content)) {\n return cloneWithTabIndex(\n cloneElement(content, {\n ...preventEvents,\n 'data-measured-clone': true,\n }),\n );\n }\n\n return content;\n};\n\ninterface UseMeasuredCloneOptions {\n content: ReactNode;\n shouldPreventTextWrapping?: boolean;\n}\n\nexport const useMeasuredClone = ({\n content,\n shouldPreventTextWrapping = true,\n}: UseMeasuredCloneOptions) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n const clonedElement = getClonedElement(content);\n\n useEffect(() => {\n const measure = () => {\n if (!ref.current) return;\n\n const { offsetWidth: width, offsetHeight: height } = ref.current;\n\n setSize({ width: width + (shouldPreventTextWrapping ? 10 : 0), height });\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n if (ref.current) observer.observe(ref.current);\n\n return () => observer.disconnect();\n }, [shouldPreventTextWrapping]);\n\n const measuredElement = (\n <div\n data-measured-clone=\"true\"\n ref={ref}\n style={{\n position: 'fixed',\n opacity: 0,\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: -1,\n height: 'auto',\n width: 'auto',\n visibility: 'hidden',\n }}\n inert=\"true\"\n tabIndex={-1}\n >\n {clonedElement}\n </div>\n );\n\n return {\n measuredElement,\n width: size.width,\n height: size.height,\n };\n};\n\nexport const useIsMeasuredClone = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n\n const [isClone, setIsClone] = useState(false);\n\n useEffect(() => {\n if (!ref.current) return;\n\n let el: HTMLElement | null = ref.current;\n\n while (el) {\n if (el.hasAttribute('data-measured-clone')) {\n setIsClone(true);\n\n return;\n }\n\n el = el.parentElement;\n }\n\n setIsClone(false);\n }, []);\n\n return [isClone, ref] as const;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"element.js","names":["React","Children","cloneElement","isValidElement","useEffect","useRef","useState","isSameRect","a","b","width","height","x","y","useElementSize","ref","shouldUseChildElement","shouldUseParentElement","size","setSize","target","current","parentElement","firstElementChild","undefined","frameId","updateSize","nextSize","window","cancelAnimationFrame","requestAnimationFrame","currentSize","getBoundingClientRect","observer","ResizeObserver","entry","contentRect","observe","disconnect","cloneWithTabIndex","node","element","type","Fragment","children","map","props","displayName","createElement","tabIndex","getClonedElement","content","preventEvents","onClick","e","stopPropagation","onMouseDown","onMouseUp","onKeyDown","onKeyUp","onFocus","onBlur","useMeasuredClone","shouldPreventTextWrapping","clonedElement","measure","offsetWidth","offsetHeight","measuredElement","style","position","opacity","pointerEvents","userSelect","zIndex","visibility","inert","useIsMeasuredClone","isClone","setIsClone","el","hasAttribute"],"sources":["../../../src/hooks/element.tsx"],"sourcesContent":["import React, {\n Children,\n cloneElement,\n HTMLAttributes,\n isValidElement,\n MutableRefObject,\n ReactElement,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\ninterface UseElementSizeOptions {\n shouldUseChildElement?: boolean;\n shouldUseParentElement?: boolean;\n}\n\nconst isSameRect = (a?: DOMRectReadOnly, b?: DOMRectReadOnly) => {\n if (!a || !b) return false;\n\n return a.width === b.width && a.height === b.height && a.x === b.x && a.y === b.y;\n};\n\nexport const useElementSize = (\n ref: MutableRefObject<HTMLDivElement | HTMLLabelElement | null>,\n { shouldUseChildElement = false, shouldUseParentElement = false }: UseElementSizeOptions = {},\n): DOMRectReadOnly | undefined => {\n const [size, setSize] = useState<DOMRectReadOnly>();\n\n useEffect(() => {\n let target: HTMLElement | null = ref.current;\n\n if (shouldUseParentElement) {\n target = ref.current?.parentElement ?? null;\n }\n\n if (shouldUseChildElement) {\n target = ref.current?.firstElementChild as HTMLElement | null;\n }\n\n if (!target) return undefined;\n\n let frameId: number | undefined;\n\n const updateSize = (nextSize: DOMRectReadOnly) => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n frameId = window.requestAnimationFrame(() => {\n setSize((currentSize) =>\n isSameRect(currentSize, nextSize) ? currentSize : nextSize,\n );\n });\n };\n\n updateSize(target.getBoundingClientRect());\n\n const observer = new ResizeObserver(([entry]) => {\n if (!entry || entry.target !== target) return;\n\n updateSize(entry.contentRect);\n });\n\n observer.observe(target);\n\n return () => {\n if (frameId) {\n window.cancelAnimationFrame(frameId);\n }\n\n observer.disconnect();\n };\n }, [ref, shouldUseChildElement, shouldUseParentElement]);\n\n return size;\n};\n\nconst cloneWithTabIndex = (node: ReactNode): ReactNode => {\n if (!isValidElement(node)) return node;\n\n const element = node as ReactElement;\n\n if (element.type === React.Fragment) {\n const children = Children.map(element.props.children, cloneWithTabIndex);\n\n return cloneElement(element, {\n ...element.props,\n children,\n });\n }\n\n const children = element.props.children\n ? Children.map(element.props.children, cloneWithTabIndex)\n : element.props.children;\n\n if ((element.type as any).displayName === 'Button') {\n return (\n // eslint-disable-next-line react/button-has-type\n <button tabIndex={-1}>{children}</button>\n );\n }\n\n return cloneElement(element, {\n ...element.props,\n tabIndex: -1,\n children,\n });\n};\n\nconst getClonedElement = (content: ReactNode) => {\n const preventEvents: Partial<HTMLAttributes<never>> = {\n onClick: (e) => e.stopPropagation(),\n onMouseDown: (e) => e.stopPropagation(),\n onMouseUp: (e) => e.stopPropagation(),\n onKeyDown: (e) => e.stopPropagation(),\n onKeyUp: (e) => e.stopPropagation(),\n onFocus: (e) => e.stopPropagation(),\n onBlur: (e) => e.stopPropagation(),\n };\n\n if (typeof content === 'string') {\n return (\n <span tabIndex={-1} data-measured-clone>\n {content}\n </span>\n );\n }\n\n if (isValidElement(content)) {\n return cloneWithTabIndex(\n cloneElement(content, {\n ...preventEvents,\n 'data-measured-clone': true,\n }),\n );\n }\n\n return content;\n};\n\ninterface UseMeasuredCloneOptions {\n content: ReactNode;\n shouldPreventTextWrapping?: boolean;\n}\n\nexport const useMeasuredClone = ({\n content,\n shouldPreventTextWrapping = true,\n}: UseMeasuredCloneOptions) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const [size, setSize] = useState({ width: 0, height: 0 });\n\n const clonedElement = getClonedElement(content);\n\n useEffect(() => {\n const measure = () => {\n if (!ref.current) return;\n\n const { offsetWidth: width, offsetHeight: height } = ref.current;\n\n setSize({ width: width + (shouldPreventTextWrapping ? 10 : 0), height });\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n if (ref.current) observer.observe(ref.current);\n\n return () => observer.disconnect();\n }, [shouldPreventTextWrapping]);\n\n const measuredElement = (\n <div\n data-measured-clone=\"true\"\n ref={ref}\n style={{\n position: 'fixed',\n opacity: 0,\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: -1,\n height: 'auto',\n width: 'auto',\n visibility: 'hidden',\n }}\n inert=\"true\"\n tabIndex={-1}\n >\n {clonedElement}\n </div>\n );\n\n return {\n measuredElement,\n width: size.width,\n height: size.height,\n };\n};\n\nexport const useIsMeasuredClone = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n\n const [isClone, setIsClone] = useState(false);\n\n useEffect(() => {\n if (!ref.current) return;\n\n let el: HTMLElement | null = ref.current;\n\n while (el) {\n if (el.hasAttribute('data-measured-clone')) {\n setIsClone(true);\n\n return;\n }\n\n el = el.parentElement;\n }\n\n setIsClone(false);\n }, []);\n\n return [isClone, ref] as const;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chayns-components/core",
|
|
3
|
-
"version": "5.2.4
|
|
3
|
+
"version": "5.2.4",
|
|
4
4
|
"description": "A set of beautiful React components for developing your own applications with chayns.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"browserslist": [
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"publishConfig": {
|
|
89
89
|
"access": "public"
|
|
90
90
|
},
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "ad65db8803761ed1bb154b1161a4a513c3ac9503"
|
|
92
92
|
}
|