@hitachivantara/uikit-react-core 5.3.0 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
- package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
- package/dist/cjs/components/Dialog/Dialog.styles.cjs +3 -3
- package/dist/cjs/components/Dialog/Dialog.styles.cjs.map +1 -1
- package/dist/cjs/components/Forms/Suggestions/Suggestions.styles.cjs +4 -4
- package/dist/cjs/components/Forms/Suggestions/Suggestions.styles.cjs.map +1 -1
- package/dist/cjs/components/InlineEditor/InlineEditor.cjs +122 -0
- package/dist/cjs/components/InlineEditor/InlineEditor.cjs.map +1 -0
- package/dist/cjs/components/InlineEditor/InlineEditor.styles.cjs +74 -0
- package/dist/cjs/components/InlineEditor/InlineEditor.styles.cjs.map +1 -0
- package/dist/cjs/components/InlineEditor/inlineEditorClasses.cjs +8 -0
- package/dist/cjs/components/InlineEditor/inlineEditorClasses.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.cjs +51 -0
- package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.styles.cjs +54 -0
- package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.styles.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/horizontalScrollListItemClasses.cjs +8 -0
- package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/horizontalScrollListItemClasses.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.cjs +126 -0
- package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.styles.cjs +46 -0
- package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.styles.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Horizontal/scrollToHorizontalClasses.cjs +8 -0
- package/dist/cjs/components/ScrollTo/Horizontal/scrollToHorizontalClasses.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.cjs +90 -0
- package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.styles.cjs +43 -0
- package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.styles.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.cjs +71 -0
- package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.styles.cjs +54 -0
- package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.styles.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.cjs +8 -0
- package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/Vertical/scrollToVerticalClasses.cjs +8 -0
- package/dist/cjs/components/ScrollTo/Vertical/scrollToVerticalClasses.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/useScrollTo.cjs +103 -0
- package/dist/cjs/components/ScrollTo/useScrollTo.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/utils.cjs +76 -0
- package/dist/cjs/components/ScrollTo/utils.cjs.map +1 -0
- package/dist/cjs/components/ScrollTo/withTooltip.cjs +20 -0
- package/dist/cjs/components/ScrollTo/withTooltip.cjs.map +1 -0
- package/dist/cjs/components/TimeAgo/TimeAgo.cjs +39 -0
- package/dist/cjs/components/TimeAgo/TimeAgo.cjs.map +1 -0
- package/dist/cjs/components/TimeAgo/formatUtils.cjs +134 -0
- package/dist/cjs/components/TimeAgo/formatUtils.cjs.map +1 -0
- package/dist/cjs/components/TimeAgo/timeAgoClasses.cjs +8 -0
- package/dist/cjs/components/TimeAgo/timeAgoClasses.cjs.map +1 -0
- package/dist/cjs/components/TimeAgo/useTimeAgo.cjs +29 -0
- package/dist/cjs/components/TimeAgo/useTimeAgo.cjs.map +1 -0
- package/dist/cjs/components/TimeAgo/useTimeout.cjs +17 -0
- package/dist/cjs/components/TimeAgo/useTimeout.cjs.map +1 -0
- package/dist/cjs/hocs/withTooltip.cjs +4 -4
- package/dist/cjs/hocs/withTooltip.cjs.map +1 -1
- package/dist/cjs/index.cjs +23 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/utils/theme.cjs +9 -0
- package/dist/cjs/utils/theme.cjs.map +1 -1
- package/dist/cjs/utils/wrapperTooltip.cjs +1 -1
- package/dist/cjs/utils/wrapperTooltip.cjs.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js +2 -2
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.styles.js +3 -3
- package/dist/esm/components/Dialog/Dialog.styles.js.map +1 -1
- package/dist/esm/components/Forms/Suggestions/Suggestions.styles.js +5 -5
- package/dist/esm/components/Forms/Suggestions/Suggestions.styles.js.map +1 -1
- package/dist/esm/components/InlineEditor/InlineEditor.js +122 -0
- package/dist/esm/components/InlineEditor/InlineEditor.js.map +1 -0
- package/dist/esm/components/InlineEditor/InlineEditor.styles.js +74 -0
- package/dist/esm/components/InlineEditor/InlineEditor.styles.js.map +1 -0
- package/dist/esm/components/InlineEditor/inlineEditorClasses.js +8 -0
- package/dist/esm/components/InlineEditor/inlineEditorClasses.js.map +1 -0
- package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.js +51 -0
- package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.js.map +1 -0
- package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.styles.js +54 -0
- package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.styles.js.map +1 -0
- package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/horizontalScrollListItemClasses.js +8 -0
- package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/horizontalScrollListItemClasses.js.map +1 -0
- package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.js +126 -0
- package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.js.map +1 -0
- package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.styles.js +46 -0
- package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.styles.js.map +1 -0
- package/dist/esm/components/ScrollTo/Horizontal/scrollToHorizontalClasses.js +8 -0
- package/dist/esm/components/ScrollTo/Horizontal/scrollToHorizontalClasses.js.map +1 -0
- package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.js +90 -0
- package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.js.map +1 -0
- package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.styles.js +43 -0
- package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.styles.js.map +1 -0
- package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.js +71 -0
- package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.js.map +1 -0
- package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.styles.js +54 -0
- package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.styles.js.map +1 -0
- package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.js +8 -0
- package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.js.map +1 -0
- package/dist/esm/components/ScrollTo/Vertical/scrollToVerticalClasses.js +8 -0
- package/dist/esm/components/ScrollTo/Vertical/scrollToVerticalClasses.js.map +1 -0
- package/dist/esm/components/ScrollTo/useScrollTo.js +103 -0
- package/dist/esm/components/ScrollTo/useScrollTo.js.map +1 -0
- package/dist/esm/components/ScrollTo/utils.js +76 -0
- package/dist/esm/components/ScrollTo/utils.js.map +1 -0
- package/dist/esm/components/ScrollTo/withTooltip.js +20 -0
- package/dist/esm/components/ScrollTo/withTooltip.js.map +1 -0
- package/dist/esm/components/TimeAgo/TimeAgo.js +37 -0
- package/dist/esm/components/TimeAgo/TimeAgo.js.map +1 -0
- package/dist/esm/components/TimeAgo/formatUtils.js +126 -0
- package/dist/esm/components/TimeAgo/formatUtils.js.map +1 -0
- package/dist/esm/components/TimeAgo/timeAgoClasses.js +8 -0
- package/dist/esm/components/TimeAgo/timeAgoClasses.js.map +1 -0
- package/dist/esm/components/TimeAgo/useTimeAgo.js +29 -0
- package/dist/esm/components/TimeAgo/useTimeAgo.js.map +1 -0
- package/dist/esm/components/TimeAgo/useTimeout.js +17 -0
- package/dist/esm/components/TimeAgo/useTimeout.js.map +1 -0
- package/dist/esm/hocs/withTooltip.js +4 -4
- package/dist/esm/hocs/withTooltip.js.map +1 -1
- package/dist/esm/index.js +42 -19
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/theme.js +9 -0
- package/dist/esm/utils/theme.js.map +1 -1
- package/dist/esm/utils/wrapperTooltip.js +2 -2
- package/dist/esm/utils/wrapperTooltip.js.map +1 -1
- package/dist/types/index.d.ts +244 -1
- package/package.json +6 -6
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const utils = require("./utils.cjs");
|
|
5
|
+
const useScrollTo = (selectedIndexProp = 0, scrollElementId = void 0, href = false, offset = 0, options = [], onChange = void 0, direction = "column") => {
|
|
6
|
+
const RETRY_MAX = 5;
|
|
7
|
+
const [selectedIndex, setSelectedIndex] = React.useState(selectedIndexProp);
|
|
8
|
+
const scrollEle = React.useRef(window);
|
|
9
|
+
const requestedAnimationFrame = React.useRef(0);
|
|
10
|
+
const lastContainerScrollTop = React.useRef(0);
|
|
11
|
+
const selectedIndexRef = React.useRef(selectedIndex);
|
|
12
|
+
React.useEffect(() => {
|
|
13
|
+
selectedIndexRef.current = selectedIndex;
|
|
14
|
+
}, [selectedIndex]);
|
|
15
|
+
React.useEffect(() => {
|
|
16
|
+
scrollEle.current = scrollElementId && document.getElementById(scrollElementId) || window;
|
|
17
|
+
lastContainerScrollTop.current = utils.verticalScrollOffset(scrollEle.current);
|
|
18
|
+
}, [scrollElementId]);
|
|
19
|
+
const checkScroll = React.useCallback((event) => {
|
|
20
|
+
if (requestedAnimationFrame.current === 0 && (window == null ? void 0 : window.requestAnimationFrame)) {
|
|
21
|
+
requestedAnimationFrame.current = window.requestAnimationFrame(() => {
|
|
22
|
+
requestedAnimationFrame.current = 0;
|
|
23
|
+
const firstVisibleElementIndex = utils.findFirstVisibleElement(scrollEle.current, options, offset);
|
|
24
|
+
let newSelectedIndex = firstVisibleElementIndex;
|
|
25
|
+
if (firstVisibleElementIndex < 0) {
|
|
26
|
+
newSelectedIndex = 0;
|
|
27
|
+
}
|
|
28
|
+
if (newSelectedIndex < options.length - 1 && utils.isScrolledToTheBottom(scrollEle.current)) {
|
|
29
|
+
newSelectedIndex += 1;
|
|
30
|
+
}
|
|
31
|
+
const containerScrollTop = utils.getScrollTop(scrollEle.current);
|
|
32
|
+
const isScrollingDown = containerScrollTop > lastContainerScrollTop.current;
|
|
33
|
+
lastContainerScrollTop.current = containerScrollTop;
|
|
34
|
+
if (isScrollingDown) {
|
|
35
|
+
if (newSelectedIndex < selectedIndexRef.current) {
|
|
36
|
+
newSelectedIndex = selectedIndexRef.current;
|
|
37
|
+
}
|
|
38
|
+
} else if (newSelectedIndex > selectedIndexRef.current) {
|
|
39
|
+
newSelectedIndex = selectedIndexRef.current;
|
|
40
|
+
}
|
|
41
|
+
setSelectedIndex(newSelectedIndex);
|
|
42
|
+
onChange == null ? void 0 : onChange(event, newSelectedIndex);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}, [offset, options, onChange]);
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
if (scrollEle.current) {
|
|
48
|
+
scrollEle.current.addEventListener("scroll", checkScroll, false);
|
|
49
|
+
}
|
|
50
|
+
return () => {
|
|
51
|
+
if (scrollEle.current) {
|
|
52
|
+
scrollEle.current.removeEventListener("scroll", checkScroll);
|
|
53
|
+
}
|
|
54
|
+
if (requestedAnimationFrame.current !== 0) {
|
|
55
|
+
window.cancelAnimationFrame(requestedAnimationFrame.current);
|
|
56
|
+
requestedAnimationFrame.current = 0;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}, [checkScroll]);
|
|
60
|
+
React.useEffect(() => {
|
|
61
|
+
let checkRenderedInterval;
|
|
62
|
+
if (href) {
|
|
63
|
+
const hashValue = document.location.hash.split("#")[1] || "";
|
|
64
|
+
const option = options.find((o) => o.value === hashValue);
|
|
65
|
+
if (option) {
|
|
66
|
+
let retry = 0;
|
|
67
|
+
checkRenderedInterval = setInterval(() => {
|
|
68
|
+
const ele = document.getElementById(option.value);
|
|
69
|
+
if (ele) {
|
|
70
|
+
utils.scrollElement(ele, scrollEle.current, option.offset || offset);
|
|
71
|
+
clearInterval(checkRenderedInterval);
|
|
72
|
+
} else {
|
|
73
|
+
retry += 1;
|
|
74
|
+
if (retry === RETRY_MAX) {
|
|
75
|
+
clearInterval(checkRenderedInterval);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}, 1e3);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return () => {
|
|
82
|
+
clearInterval(checkRenderedInterval);
|
|
83
|
+
};
|
|
84
|
+
}, []);
|
|
85
|
+
const setScrollTo = (event, id, index, wrappedOnChange) => {
|
|
86
|
+
const option = options.find((o) => o.value === id);
|
|
87
|
+
if (option) {
|
|
88
|
+
const ele = document.getElementById(id);
|
|
89
|
+
if (ele) {
|
|
90
|
+
utils.scrollElement(ele, scrollEle.current, option.offset || offset, direction);
|
|
91
|
+
}
|
|
92
|
+
if (href) {
|
|
93
|
+
window.history.pushState({}, "", `#${options[index].value}`);
|
|
94
|
+
}
|
|
95
|
+
setSelectedIndex(index);
|
|
96
|
+
wrappedOnChange == null ? void 0 : wrappedOnChange(index);
|
|
97
|
+
selectedIndexRef.current = index;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
return [selectedIndex, setScrollTo];
|
|
101
|
+
};
|
|
102
|
+
exports.useScrollTo = useScrollTo;
|
|
103
|
+
//# sourceMappingURL=useScrollTo.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScrollTo.cjs","sources":["../../../../src/components/ScrollTo/useScrollTo.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n findFirstVisibleElement,\n getScrollTop,\n isScrolledToTheBottom,\n scrollElement,\n verticalScrollOffset,\n} from \"./utils\";\nimport { HvScrollToVerticalOption } from \"./Vertical\";\n\nexport const useScrollTo = (\n selectedIndexProp: number = 0,\n scrollElementId: string | undefined = undefined,\n href: boolean = false,\n offset: number = 0,\n options: HvScrollToVerticalOption[] = [],\n onChange:\n | ((\n event:\n | Event\n | React.MouseEvent<HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>,\n index: number\n ) => void)\n | undefined = undefined,\n direction: \"column\" | \"row\" = \"column\"\n): [\n number,\n (\n event:\n | React.MouseEvent<HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>,\n id: string,\n index: number,\n wrappedOnChange?: (index: number) => void\n ) => void\n] => {\n const RETRY_MAX: number = 5;\n const [selectedIndex, setSelectedIndex] = useState<number>(selectedIndexProp);\n\n const scrollEle = useRef<HTMLElement | (Window & typeof globalThis)>(window);\n const requestedAnimationFrame = useRef(0);\n const lastContainerScrollTop = useRef<number>(0);\n\n // Ref to use a often-changing value in useCallback, as recommended in\n // https://reactjs.org/docs/hooks-faq.html#how-to-read-an-often-changing-value-from-usecallback\n const selectedIndexRef = useRef(selectedIndex);\n\n useEffect(() => {\n selectedIndexRef.current = selectedIndex;\n }, [selectedIndex]);\n\n useEffect(() => {\n scrollEle.current =\n (scrollElementId && document.getElementById(scrollElementId)) || window;\n\n lastContainerScrollTop.current = verticalScrollOffset(scrollEle.current);\n }, [scrollElementId]);\n\n const checkScroll = useCallback(\n (\n event:\n | Event\n | React.MouseEvent<HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>\n ) => {\n if (\n requestedAnimationFrame.current === 0 &&\n window?.requestAnimationFrame\n ) {\n requestedAnimationFrame.current = window.requestAnimationFrame(() => {\n requestedAnimationFrame.current = 0;\n\n const firstVisibleElementIndex = findFirstVisibleElement(\n scrollEle.current,\n options,\n offset\n );\n\n let newSelectedIndex = firstVisibleElementIndex;\n\n // select the first element when all elements are bellow the container's top\n if (firstVisibleElementIndex < 0) {\n newSelectedIndex = 0;\n }\n\n // if the user has reached the bottom of the container, select the first nav item still visible\n // (usually this selects the last nav item, when it can't reach the top the container)\n // in theory only needed when scrolling down, but no... because of the Safari bouncing behaviour\n if (\n newSelectedIndex < options.length - 1 &&\n isScrolledToTheBottom(scrollEle.current)\n ) {\n newSelectedIndex += 1;\n }\n\n const containerScrollTop = getScrollTop(scrollEle.current);\n const isScrollingDown =\n containerScrollTop > lastContainerScrollTop.current;\n lastContainerScrollTop.current = containerScrollTop;\n\n // only update the selected item if the scroll direction is moving away from it\n if (isScrollingDown) {\n if (newSelectedIndex < selectedIndexRef.current) {\n newSelectedIndex = selectedIndexRef.current;\n }\n } else if (newSelectedIndex > selectedIndexRef.current) {\n newSelectedIndex = selectedIndexRef.current;\n }\n\n setSelectedIndex(newSelectedIndex);\n onChange?.(event, newSelectedIndex);\n });\n }\n },\n [offset, options, onChange]\n );\n\n // Registers and unregisters the scroll listener\n useEffect(() => {\n if (scrollEle.current) {\n scrollEle.current.addEventListener(\"scroll\", checkScroll, false);\n }\n\n return () => {\n if (scrollEle.current) {\n scrollEle.current.removeEventListener(\"scroll\", checkScroll);\n }\n\n if (requestedAnimationFrame.current !== 0) {\n window.cancelAnimationFrame(requestedAnimationFrame.current);\n requestedAnimationFrame.current = 0;\n }\n };\n }, [checkScroll]);\n\n // Waits for the elements to be rendered and scrolls to the one referenced in the URL hash, if any\n useEffect(() => {\n let checkRenderedInterval;\n\n if (href) {\n const hashValue = document.location.hash.split(\"#\")[1] || \"\";\n\n const option = options.find((o) => o.value === hashValue);\n\n if (option) {\n let retry = 0;\n checkRenderedInterval = setInterval(() => {\n const ele = document.getElementById(option.value);\n\n if (ele) {\n scrollElement(ele, scrollEle.current, option.offset || offset);\n clearInterval(checkRenderedInterval);\n } else {\n retry += 1;\n if (retry === RETRY_MAX) {\n clearInterval(checkRenderedInterval);\n }\n }\n }, 1000);\n }\n }\n\n return () => {\n clearInterval(checkRenderedInterval);\n };\n\n // We really want to run this just in the first load\n // in fact this doesn't even belong here, the logic should be external\n }, []);\n\n const setScrollTo = (\n event:\n | React.MouseEvent<HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>,\n id: string,\n index: number,\n wrappedOnChange?: (index: number) => void\n ) => {\n const option = options.find((o) => o.value === id);\n\n if (option) {\n const ele = document.getElementById(id);\n if (ele) {\n scrollElement(\n ele,\n scrollEle.current,\n option.offset || offset,\n direction\n );\n }\n\n if (href) {\n window.history.pushState({}, \"\", `#${options[index].value}`);\n }\n\n setSelectedIndex(index);\n wrappedOnChange?.(index);\n\n // Safari scrolls immediately (no smooth scroll support),\n // so this ref value must be updated asap\n selectedIndexRef.current = index;\n }\n };\n\n return [selectedIndex, setScrollTo];\n};\n"],"names":["useScrollTo","selectedIndexProp","scrollElementId","undefined","href","offset","options","onChange","direction","RETRY_MAX","selectedIndex","setSelectedIndex","useState","scrollEle","useRef","window","requestedAnimationFrame","lastContainerScrollTop","selectedIndexRef","useEffect","current","document","getElementById","verticalScrollOffset","checkScroll","useCallback","event","requestAnimationFrame","firstVisibleElementIndex","findFirstVisibleElement","newSelectedIndex","length","isScrolledToTheBottom","containerScrollTop","getScrollTop","isScrollingDown","addEventListener","removeEventListener","cancelAnimationFrame","checkRenderedInterval","hashValue","location","hash","split","option","find","o","value","retry","setInterval","ele","scrollElement","clearInterval","setScrollTo","id","index","wrappedOnChange","history","pushState"],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const getScrollTop = (c = window) => {
|
|
4
|
+
if (c === window) {
|
|
5
|
+
return window.scrollY || window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body.scrollTop;
|
|
6
|
+
}
|
|
7
|
+
return c.scrollTop;
|
|
8
|
+
};
|
|
9
|
+
const verticalScrollOffset = (t, c = window) => {
|
|
10
|
+
var _a;
|
|
11
|
+
if (c === window) {
|
|
12
|
+
return (((_a = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : _a.call(t).top) || 0) + (window.scrollY || window.pageYOffset);
|
|
13
|
+
}
|
|
14
|
+
if (getComputedStyle(c).position !== "static") {
|
|
15
|
+
return t.offsetTop;
|
|
16
|
+
}
|
|
17
|
+
return t.offsetTop - c.offsetTop;
|
|
18
|
+
};
|
|
19
|
+
const horizontalScrollOffset = (t, c = window) => {
|
|
20
|
+
var _a;
|
|
21
|
+
if (c === window) {
|
|
22
|
+
return (((_a = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : _a.call(t).left) || 0) + (window.scrollX || window.pageXOffset);
|
|
23
|
+
}
|
|
24
|
+
if (getComputedStyle(c).position !== "static") {
|
|
25
|
+
return t.offsetLeft;
|
|
26
|
+
}
|
|
27
|
+
return t.offsetLeft - c.offsetLeft;
|
|
28
|
+
};
|
|
29
|
+
const scrollElement = (element, container, offset = 0, direction) => {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
if (direction === "row") {
|
|
32
|
+
const elemLeft = horizontalScrollOffset(element, container);
|
|
33
|
+
(_a = container == null ? void 0 : container.scrollTo) == null ? void 0 : _a.call(container, {
|
|
34
|
+
left: elemLeft - offset,
|
|
35
|
+
behavior: "smooth"
|
|
36
|
+
});
|
|
37
|
+
} else {
|
|
38
|
+
const elemTop = verticalScrollOffset(element, container);
|
|
39
|
+
(_b = container == null ? void 0 : container.scrollTo) == null ? void 0 : _b.call(container, {
|
|
40
|
+
top: elemTop - offset,
|
|
41
|
+
behavior: "smooth"
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
element.focus({
|
|
45
|
+
preventScroll: true
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
const isScrolledToTheBottom = (container) => {
|
|
49
|
+
const containerScrollTop = getScrollTop(container);
|
|
50
|
+
if (container === window) {
|
|
51
|
+
const scrollHeight = document.documentElement && document.documentElement.scrollHeight || document.body.scrollHeight;
|
|
52
|
+
return containerScrollTop + window.innerHeight >= scrollHeight;
|
|
53
|
+
}
|
|
54
|
+
return containerScrollTop + container.offsetHeight >= container.scrollHeight;
|
|
55
|
+
};
|
|
56
|
+
const findFirstVisibleElement = (container, options, offset) => {
|
|
57
|
+
const boundsTop = verticalScrollOffset(container);
|
|
58
|
+
let i = 0;
|
|
59
|
+
for (; i < options.length; i += 1) {
|
|
60
|
+
const ele = document.getElementById(options[i].value);
|
|
61
|
+
if (ele) {
|
|
62
|
+
const elemTop = verticalScrollOffset(ele) - (options[i].offset || offset);
|
|
63
|
+
if (elemTop > boundsTop) {
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return i - 1;
|
|
69
|
+
};
|
|
70
|
+
exports.findFirstVisibleElement = findFirstVisibleElement;
|
|
71
|
+
exports.getScrollTop = getScrollTop;
|
|
72
|
+
exports.horizontalScrollOffset = horizontalScrollOffset;
|
|
73
|
+
exports.isScrolledToTheBottom = isScrolledToTheBottom;
|
|
74
|
+
exports.scrollElement = scrollElement;
|
|
75
|
+
exports.verticalScrollOffset = verticalScrollOffset;
|
|
76
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.cjs","sources":["../../../../src/components/ScrollTo/utils.ts"],"sourcesContent":["import { HvScrollToVerticalOption } from \"./Vertical\";\n\ntype ExtendedWindow = Window & typeof globalThis & HTMLElement;\n\nexport const getScrollTop = (\n c: HTMLElement | (Window & typeof globalThis) = window\n) => {\n if (c === window) {\n return (\n window.scrollY ||\n window.pageYOffset ||\n (document.documentElement && document.documentElement.scrollTop) ||\n document.body.scrollTop\n );\n }\n\n return (c as ExtendedWindow).scrollTop;\n};\n\nexport const verticalScrollOffset = (\n t: HTMLElement | (Window & typeof globalThis),\n c: HTMLElement | (Window & typeof globalThis) = window\n) => {\n if (c === window) {\n return (\n ((t as ExtendedWindow)?.getBoundingClientRect?.().top || 0) +\n (window.scrollY || window.pageYOffset)\n );\n }\n if (getComputedStyle(c as ExtendedWindow).position !== \"static\") {\n return (t as ExtendedWindow).offsetTop;\n }\n\n return (t as ExtendedWindow).offsetTop - (c as ExtendedWindow).offsetTop;\n};\n\nexport const horizontalScrollOffset = (\n t: HTMLElement,\n c: HTMLElement | (Window & typeof globalThis) = window\n) => {\n if (c === window) {\n return (\n (t?.getBoundingClientRect?.().left || 0) +\n (window.scrollX || window.pageXOffset)\n );\n }\n if (getComputedStyle(c as ExtendedWindow).position !== \"static\") {\n return t.offsetLeft;\n }\n\n return t.offsetLeft - (c as ExtendedWindow).offsetLeft;\n};\n\nexport const scrollElement = (\n element: HTMLElement,\n container: HTMLElement | (Window & typeof globalThis),\n offset: number = 0,\n direction?: \"row\" | \"column\"\n) => {\n if (direction === \"row\") {\n const elemLeft = horizontalScrollOffset(element, container);\n container?.scrollTo?.({\n left: elemLeft - offset,\n behavior: \"smooth\",\n });\n } else {\n const elemTop = verticalScrollOffset(element, container);\n container?.scrollTo?.({\n top: elemTop - offset,\n behavior: \"smooth\",\n });\n }\n element.focus({ preventScroll: true });\n};\n\nexport const isScrolledToTheBottom = (\n container: HTMLElement | (Window & typeof globalThis)\n) => {\n const containerScrollTop = getScrollTop(container);\n\n if (container === window) {\n // Accounting for cases where html/body are set to height:100%\n const scrollHeight =\n (document.documentElement && document.documentElement.scrollHeight) ||\n document.body.scrollHeight;\n\n return containerScrollTop + window.innerHeight >= scrollHeight;\n }\n\n return (\n containerScrollTop + (container as ExtendedWindow).offsetHeight >=\n (container as ExtendedWindow).scrollHeight\n );\n};\n\nexport const findFirstVisibleElement = (\n container: HTMLElement | (Window & typeof globalThis),\n options: HvScrollToVerticalOption[],\n offset: number\n) => {\n const boundsTop = verticalScrollOffset(container);\n\n let i = 0;\n\n // Find index of first element whose top is still visible inside the container\n for (; i < options.length; i += 1) {\n const ele = document.getElementById(options[i].value);\n\n if (ele) {\n const elemTop = verticalScrollOffset(ele) - (options[i].offset || offset);\n\n if (elemTop > boundsTop) {\n break;\n }\n }\n }\n\n // Return the previous index, the element that last scrolled past the top\n return i - 1;\n};\n"],"names":["getScrollTop","c","window","scrollY","pageYOffset","document","documentElement","scrollTop","body","verticalScrollOffset","t","getBoundingClientRect","top","getComputedStyle","position","offsetTop","horizontalScrollOffset","left","scrollX","pageXOffset","offsetLeft","scrollElement","element","container","offset","direction","elemLeft","scrollTo","behavior","elemTop","focus","preventScroll","isScrolledToTheBottom","containerScrollTop","scrollHeight","innerHeight","offsetHeight","findFirstVisibleElement","options","boundsTop","i","length","ele","getElementById","value"],"mappings":";;AAIaA,MAAAA,eAAeA,CAC1BC,IAAgDC,WAC7C;AACH,MAAID,MAAMC,QAAQ;AAEdA,WAAAA,OAAOC,WACPD,OAAOE,eACNC,SAASC,mBAAmBD,SAASC,gBAAgBC,aACtDF,SAASG,KAAKD;AAAAA,EAElB;AAEA,SAAQN,EAAqBM;AAC/B;AAEO,MAAME,uBAAuBA,CAClCC,GACAT,IAAgDC,WAC7C;;AACH,MAAID,MAAMC,QAAQ;AAChB,cACIQ,4BAAsBC,0BAAtBD,2BAAgDE,QAAO,MACxDV,OAAOC,WAAWD,OAAOE;AAAAA,EAE9B;AACA,MAAIS,iBAAiBZ,GAAqBa,aAAa,UAAU;AAC/D,WAAQJ,EAAqBK;AAAAA,EAC/B;AAEQL,SAAAA,EAAqBK,YAAad,EAAqBc;AACjE;AAEO,MAAMC,yBAAyBA,CACpCN,GACAT,IAAgDC,WAC7C;;AACH,MAAID,MAAMC,QAAQ;AAChB,cACGQ,4BAAGC,0BAAHD,2BAA6BO,SAAQ,MACrCf,OAAOgB,WAAWhB,OAAOiB;AAAAA,EAE9B;AACA,MAAIN,iBAAiBZ,GAAqBa,aAAa,UAAU;AAC/D,WAAOJ,EAAEU;AAAAA,EACX;AAEOV,SAAAA,EAAEU,aAAcnB,EAAqBmB;AAC9C;AAEO,MAAMC,gBAAgBA,CAC3BC,SACAC,WACAC,SAAiB,GACjBC,cACG;;AACH,MAAIA,cAAc,OAAO;AACjBC,UAAAA,WAAWV,uBAAuBM,SAASC,SAAS;AAC1DA,iDAAWI,aAAXJ,mCAAsB;AAAA,MACpBN,MAAMS,WAAWF;AAAAA,MACjBI,UAAU;AAAA,IAAA;AAAA,EACX,OACI;AACCC,UAAAA,UAAUpB,qBAAqBa,SAASC,SAAS;AACvDA,iDAAWI,aAAXJ,mCAAsB;AAAA,MACpBX,KAAKiB,UAAUL;AAAAA,MACfI,UAAU;AAAA,IAAA;AAAA,EAEd;AACAN,UAAQQ,MAAM;AAAA,IAAEC,eAAe;AAAA,EAAA,CAAM;AACvC;AAEaC,MAAAA,wBAAwBA,CACnCT,cACG;AACGU,QAAAA,qBAAqBjC,aAAauB,SAAS;AAEjD,MAAIA,cAAcrB,QAAQ;AAExB,UAAMgC,eACH7B,SAASC,mBAAmBD,SAASC,gBAAgB4B,gBACtD7B,SAASG,KAAK0B;AAETD,WAAAA,qBAAqB/B,OAAOiC,eAAeD;AAAAA,EACpD;AAGED,SAAAA,qBAAsBV,UAA6Ba,gBAClDb,UAA6BW;AAElC;AAEO,MAAMG,0BAA0BA,CACrCd,WACAe,SACAd,WACG;AACGe,QAAAA,YAAY9B,qBAAqBc,SAAS;AAEhD,MAAIiB,IAAI;AAGR,SAAOA,IAAIF,QAAQG,QAAQD,KAAK,GAAG;AACjC,UAAME,MAAMrC,SAASsC,eAAeL,QAAQE,CAAC,EAAEI,KAAK;AAEpD,QAAIF,KAAK;AACP,YAAMb,UAAUpB,qBAAqBiC,GAAG,KAAKJ,QAAQE,CAAC,EAAEhB,UAAUA;AAElE,UAAIK,UAAUU,WAAW;AACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,SAAOC,IAAI;AACb;;;;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
4
|
+
const withTooltip$1 = require("../../hocs/withTooltip.cjs");
|
|
5
|
+
const Typography = require("../Typography/Typography.cjs");
|
|
6
|
+
const hideTooltip = (event) => {
|
|
7
|
+
const isOverFlow = event.target.children.length > 1 ? Array.of(...event.target.children).some((child) => child.scrollWidth > child.clientWidth) : event.target.scrollWidth > event.target.clientWidth;
|
|
8
|
+
return !isOverFlow;
|
|
9
|
+
};
|
|
10
|
+
const withTooltip = (label, componentType, tooltipPosition = "top", hideOnOverflow = true) => {
|
|
11
|
+
const component = (props) => /* @__PURE__ */ jsxRuntime.jsx(Typography.HvTypography, {
|
|
12
|
+
component: componentType,
|
|
13
|
+
...props,
|
|
14
|
+
children: props.children
|
|
15
|
+
});
|
|
16
|
+
const hideTooltipFunc = hideOnOverflow ? hideTooltip : void 0;
|
|
17
|
+
return withTooltip$1.default(component, label, tooltipPosition, hideTooltipFunc);
|
|
18
|
+
};
|
|
19
|
+
exports.withTooltip = withTooltip;
|
|
20
|
+
//# sourceMappingURL=withTooltip.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withTooltip.cjs","sources":["../../../../src/components/ScrollTo/withTooltip.tsx"],"sourcesContent":["import {\n HvScrollToTooltipPositions,\n HvTypography,\n HvTypographyProps,\n} from \"@core/components\";\nimport { withTooltip as withTooltipUtil } from \"@core/hocs\";\n\nconst hideTooltip = (event: React.MouseEvent<HTMLDivElement>) => {\n const isOverFlow =\n (event.target as HTMLDivElement).children.length > 1\n ? Array.of(...(event.target as HTMLDivElement).children).some(\n (child) => child.scrollWidth > child.clientWidth\n )\n : (event.target as HTMLDivElement).scrollWidth >\n (event.target as HTMLDivElement).clientWidth;\n return !isOverFlow;\n};\n\nexport const withTooltip = (\n label: string,\n componentType: React.ElementType,\n tooltipPosition: HvScrollToTooltipPositions = \"top\",\n hideOnOverflow: boolean = true\n) => {\n const component = (props: HvTypographyProps) => (\n <HvTypography component={componentType} {...props}>\n {props.children}\n </HvTypography>\n );\n\n const hideTooltipFunc = hideOnOverflow ? hideTooltip : undefined;\n\n return withTooltipUtil(component, label, tooltipPosition, hideTooltipFunc);\n};\n"],"names":["hideTooltip","event","isOverFlow","target","children","length","Array","of","some","child","scrollWidth","clientWidth","withTooltip","label","componentType","tooltipPosition","hideOnOverflow","component","props","_jsx","HvTypography","hideTooltipFunc","undefined","withTooltipUtil"],"mappings":";;;;;AAOA,MAAMA,cAAcA,CAACC,UAA4C;AACzDC,QAAAA,aACHD,MAAME,OAA0BC,SAASC,SAAS,IAC/CC,MAAMC,GAAG,GAAIN,MAAME,OAA0BC,QAAQ,EAAEI,KACpDC,CAAAA,UAAUA,MAAMC,cAAcD,MAAME,WAAW,IAEjDV,MAAME,OAA0BO,cAChCT,MAAME,OAA0BQ;AACvC,SAAO,CAACT;AACV;AAEO,MAAMU,cAAcA,CACzBC,OACAC,eACAC,kBAA8C,OAC9CC,iBAA0B,SACvB;AACH,QAAMC,YAAYA,CAACC,UACjBC,2BAAAA,IAACC,WAAAA,cAAY;AAAA,IAACH,WAAWH;AAAAA,IAAc,GAAKI;AAAAA,IAAKd,UAC9Cc,MAAMd;AAAAA,EAAAA,CAEV;AAEKiB,QAAAA,kBAAkBL,iBAAiBhB,cAAcsB;AAEvD,SAAOC,cAAgBN,QAAAA,WAAWJ,OAAOE,iBAAiBM,eAAe;AAC3E;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const clsx = require("clsx");
|
|
4
|
+
const isEmpty = require("lodash/isEmpty");
|
|
5
|
+
const timeAgoClasses = require("./timeAgoClasses.cjs");
|
|
6
|
+
const useTimeAgo = require("./useTimeAgo.cjs");
|
|
7
|
+
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
8
|
+
const Typography = require("../Typography/Typography.cjs");
|
|
9
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
10
|
+
const isEmpty__default = /* @__PURE__ */ _interopDefault(isEmpty);
|
|
11
|
+
const HvTimeAgo = ({
|
|
12
|
+
classes,
|
|
13
|
+
timestamp,
|
|
14
|
+
locale: localeProp = "en",
|
|
15
|
+
component: Component = Typography.HvTypography,
|
|
16
|
+
emptyElement = "—",
|
|
17
|
+
disableRefresh = false,
|
|
18
|
+
showSeconds = false,
|
|
19
|
+
justText = false,
|
|
20
|
+
...others
|
|
21
|
+
}) => {
|
|
22
|
+
const locale = isEmpty__default.default(localeProp) ? "en" : localeProp;
|
|
23
|
+
const timeAgo = useTimeAgo.default(timestamp, {
|
|
24
|
+
locale,
|
|
25
|
+
disableRefresh,
|
|
26
|
+
showSeconds
|
|
27
|
+
});
|
|
28
|
+
if (justText && timestamp)
|
|
29
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
30
|
+
children: timeAgo
|
|
31
|
+
});
|
|
32
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, {
|
|
33
|
+
className: clsx.clsx(classes == null ? void 0 : classes.root, timeAgoClasses.default.root),
|
|
34
|
+
...others,
|
|
35
|
+
children: !timestamp ? emptyElement : timeAgo
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
exports.HvTimeAgo = HvTimeAgo;
|
|
39
|
+
//# sourceMappingURL=TimeAgo.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeAgo.cjs","sources":["../../../../src/components/TimeAgo/TimeAgo.tsx"],"sourcesContent":["import { HvTypography } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport { clsx } from \"clsx\";\nimport isEmpty from \"lodash/isEmpty\";\nimport timeAgoClasses, { HvTimeAgoClasses } from \"./timeAgoClasses\";\nimport useTimeAgo from \"./useTimeAgo\";\n\nexport interface HvTimeAgoProps extends HvBaseProps<HTMLElement, { children }> {\n /**\n * The timestamp to format, in seconds or milliseconds.\n * Defaults to `emptyElement` if value is null or 0\n */\n timestamp?: number;\n /**\n * The locale to be used. Should be on of the dayjs supported locales and explicitly imported\n * @see https://day.js.org/docs/en/i18n/i18n\n */\n locale?: string;\n /**\n * The component used for the root node. Either a string to use a HTML element or a component.\n * Defaults to `HvTypography`.\n */\n component?: React.ElementType<React.HTMLAttributes<HTMLElement>>;\n /**\n * The element to render when the timestamp is null or 0\n * Defaults to `—` (Em Dash)\n */\n emptyElement?: React.ReactNode;\n /**\n * Disables periodic date refreshes\n */\n disableRefresh?: boolean;\n /**\n * Whether to show seconds in the rendered time\n */\n showSeconds?: boolean;\n /**\n * Whether the component should render just the string\n * Consider using `useTimeAgo` instead\n */\n justText?: boolean;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvTimeAgoClasses;\n}\n\n/**\n * The HvTimeAgo component implements the Design System relative time format guidelines.\n */\nexport const HvTimeAgo = ({\n classes,\n timestamp,\n locale: localeProp = \"en\",\n component: Component = HvTypography,\n emptyElement = \"—\",\n disableRefresh = false,\n showSeconds = false,\n justText = false,\n ...others\n}: HvTimeAgoProps) => {\n const locale = isEmpty(localeProp) ? \"en\" : localeProp;\n const timeAgo = useTimeAgo(timestamp, {\n locale,\n disableRefresh,\n showSeconds,\n });\n\n if (justText && timestamp) return <>{timeAgo}</>;\n\n return (\n <Component className={clsx(classes?.root, timeAgoClasses.root)} {...others}>\n {!timestamp ? emptyElement : timeAgo}\n </Component>\n );\n};\n"],"names":["HvTimeAgo","classes","timestamp","locale","localeProp","component","Component","HvTypography","emptyElement","disableRefresh","showSeconds","justText","others","isEmpty","timeAgo","useTimeAgo","_Fragment","children","className","clsx","root","timeAgoClasses"],"mappings":";;;;;;;;;;AAgDO,MAAMA,YAAYA,CAAC;AAAA,EACxBC;AAAAA,EACAC;AAAAA,EACAC,QAAQC,aAAa;AAAA,EACrBC,WAAWC,YAAYC,WAAAA;AAAAA,EACvBC,eAAe;AAAA,EACfC,iBAAiB;AAAA,EACjBC,cAAc;AAAA,EACdC,WAAW;AAAA,EACX,GAAGC;AACW,MAAM;AACpB,QAAMT,SAASU,iBAAAA,QAAQT,UAAU,IAAI,OAAOA;AACtCU,QAAAA,UAAUC,mBAAWb,WAAW;AAAA,IACpCC;AAAAA,IACAM;AAAAA,IACAC;AAAAA,EAAAA,CACD;AAED,MAAIC,YAAYT;AAAW,0CAAOc,WAAAA,UAAA;AAAA,MAAAC,UAAGH;AAAAA,IAAAA,CAAW;AAEhD,wCACGR,WAAS;AAAA,IAACY,WAAWC,KAAAA,KAAKlB,mCAASmB,MAAMC,eAAAA,QAAeD,IAAI;AAAA,IAAE,GAAKR;AAAAA,IAAMK,UACvE,CAACf,YAAYM,eAAeM;AAAAA,EAAAA,CACnB;AAEhB;;"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const dayjs = require("dayjs");
|
|
4
|
+
const calendar = require("dayjs/plugin/calendar");
|
|
5
|
+
const duration = require("dayjs/plugin/duration");
|
|
6
|
+
const localeData = require("dayjs/plugin/localeData");
|
|
7
|
+
const localizedFormat = require("dayjs/plugin/localizedFormat");
|
|
8
|
+
const relativeTime = require("dayjs/plugin/relativeTime");
|
|
9
|
+
const updateLocale = require("dayjs/plugin/updateLocale");
|
|
10
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
11
|
+
const dayjs__default = /* @__PURE__ */ _interopDefault(dayjs);
|
|
12
|
+
const calendar__default = /* @__PURE__ */ _interopDefault(calendar);
|
|
13
|
+
const duration__default = /* @__PURE__ */ _interopDefault(duration);
|
|
14
|
+
const localeData__default = /* @__PURE__ */ _interopDefault(localeData);
|
|
15
|
+
const localizedFormat__default = /* @__PURE__ */ _interopDefault(localizedFormat);
|
|
16
|
+
const relativeTime__default = /* @__PURE__ */ _interopDefault(relativeTime);
|
|
17
|
+
const updateLocale__default = /* @__PURE__ */ _interopDefault(updateLocale);
|
|
18
|
+
const thresholds = [{
|
|
19
|
+
l: "s",
|
|
20
|
+
r: 119,
|
|
21
|
+
d: "second"
|
|
22
|
+
}, {
|
|
23
|
+
l: "m",
|
|
24
|
+
r: 1
|
|
25
|
+
}, {
|
|
26
|
+
l: "mm",
|
|
27
|
+
r: 59,
|
|
28
|
+
d: "minute"
|
|
29
|
+
}, {
|
|
30
|
+
l: "h",
|
|
31
|
+
r: 1
|
|
32
|
+
}, {
|
|
33
|
+
l: "hh",
|
|
34
|
+
r: 23,
|
|
35
|
+
d: "hour"
|
|
36
|
+
}, {
|
|
37
|
+
l: "d",
|
|
38
|
+
r: 1
|
|
39
|
+
}, {
|
|
40
|
+
l: "dd",
|
|
41
|
+
r: 29,
|
|
42
|
+
d: "day"
|
|
43
|
+
}, {
|
|
44
|
+
l: "M",
|
|
45
|
+
r: 1
|
|
46
|
+
}, {
|
|
47
|
+
l: "MM",
|
|
48
|
+
r: 11,
|
|
49
|
+
d: "month"
|
|
50
|
+
}, {
|
|
51
|
+
l: "y",
|
|
52
|
+
r: 17
|
|
53
|
+
}, {
|
|
54
|
+
l: "yy",
|
|
55
|
+
d: "year"
|
|
56
|
+
}];
|
|
57
|
+
dayjs__default.default.extend(localeData__default.default);
|
|
58
|
+
dayjs__default.default.extend(duration__default.default);
|
|
59
|
+
dayjs__default.default.extend(calendar__default.default);
|
|
60
|
+
dayjs__default.default.extend(localizedFormat__default.default);
|
|
61
|
+
dayjs__default.default.extend(relativeTime__default.default, {
|
|
62
|
+
thresholds
|
|
63
|
+
});
|
|
64
|
+
dayjs__default.default.extend(updateLocale__default.default);
|
|
65
|
+
const secondsUntilNextDay = (date = /* @__PURE__ */ new Date()) => {
|
|
66
|
+
const midnight = new Date(date.getTime());
|
|
67
|
+
midnight.setDate(midnight.getDate() + 1);
|
|
68
|
+
midnight.setHours(0);
|
|
69
|
+
midnight.setMinutes(0);
|
|
70
|
+
midnight.setSeconds(0);
|
|
71
|
+
midnight.setMilliseconds(0);
|
|
72
|
+
return (midnight.getTime() - date.getTime()) / 1e3;
|
|
73
|
+
};
|
|
74
|
+
const secondsUntilNextWeek = (date = /* @__PURE__ */ new Date()) => {
|
|
75
|
+
const firstMonthDayOfWeek = date.getDate() - date.getDay();
|
|
76
|
+
const firstMonthDayOfNextWeek = firstMonthDayOfWeek + 7;
|
|
77
|
+
const firstDayNextWeek = new Date(date.getTime());
|
|
78
|
+
firstDayNextWeek.setDate(firstMonthDayOfNextWeek);
|
|
79
|
+
firstDayNextWeek.setHours(0);
|
|
80
|
+
firstDayNextWeek.setMinutes(0);
|
|
81
|
+
firstDayNextWeek.setSeconds(0);
|
|
82
|
+
firstDayNextWeek.setMilliseconds(0);
|
|
83
|
+
return (firstDayNextWeek.getTime() - date.getTime()) / 1e3;
|
|
84
|
+
};
|
|
85
|
+
const formatTimeAgo = (date, locale, showSeconds = false, referenceDate = /* @__PURE__ */ new Date()) => {
|
|
86
|
+
const dayReferenceDate = dayjs__default.default(referenceDate);
|
|
87
|
+
const dayDate = dayjs__default.default(date).locale(locale);
|
|
88
|
+
const dayDiffSeconds = dayReferenceDate.diff(dayDate, "second");
|
|
89
|
+
const formatUseSeconds = showSeconds ? "LTS" : "LT";
|
|
90
|
+
if (date.getTime() > referenceDate.getTime()) {
|
|
91
|
+
return {
|
|
92
|
+
timeAgo: dayDate.format(`L ${formatUseSeconds}`),
|
|
93
|
+
delay: (date.getTime() - referenceDate.getTime()) / 1e3
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (dayDiffSeconds < 120) {
|
|
97
|
+
return {
|
|
98
|
+
timeAgo: dayjs__default.default.duration(dayDiffSeconds, "second").locale(locale).humanize(),
|
|
99
|
+
delay: 120 - dayDiffSeconds
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const dayDiffMinutes = dayReferenceDate.diff(dayDate, "minute");
|
|
103
|
+
if (dayDiffMinutes < 60) {
|
|
104
|
+
return {
|
|
105
|
+
timeAgo: dayjs__default.default.duration(-dayDiffMinutes, "minute").locale(locale).humanize(true),
|
|
106
|
+
delay: 60 * (dayDiffMinutes + 1) - dayDiffSeconds
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (dayReferenceDate.isSame(dayDate, "day")) {
|
|
110
|
+
return {
|
|
111
|
+
timeAgo: `${dayDate.calendar(dayReferenceDate)}`,
|
|
112
|
+
delay: secondsUntilNextDay(referenceDate)
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (dayReferenceDate.subtract(1, "day").isSame(dayDate, "day")) {
|
|
116
|
+
return {
|
|
117
|
+
timeAgo: `${dayDate.calendar(dayReferenceDate)}`,
|
|
118
|
+
delay: secondsUntilNextDay(referenceDate)
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (dayDate.isSame(dayReferenceDate, "week")) {
|
|
122
|
+
return {
|
|
123
|
+
timeAgo: dayDate.format(`ddd, ${formatUseSeconds}`),
|
|
124
|
+
delay: secondsUntilNextWeek(date)
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
timeAgo: dayDate.format(`L ${formatUseSeconds}`),
|
|
129
|
+
delay: 0
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
exports.formatTimeAgo = formatTimeAgo;
|
|
133
|
+
exports.secondsUntilNextDay = secondsUntilNextDay;
|
|
134
|
+
//# sourceMappingURL=formatUtils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatUtils.cjs","sources":["../../../../src/components/TimeAgo/formatUtils.ts"],"sourcesContent":["import dayjs from \"dayjs\";\nimport calendar from \"dayjs/plugin/calendar\";\nimport duration from \"dayjs/plugin/duration\";\nimport localeData from \"dayjs/plugin/localeData\";\nimport localizedFormat from \"dayjs/plugin/localizedFormat\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\nimport updateLocale from \"dayjs/plugin/updateLocale\";\n\n/**\n * Relative time thresholds defined by\n * {@link https://xd.adobe.com/view/1b7df235-5cf8-4b51-a2f0-0be1bb591c55-4e2e/ Design System}\n *\n * Implementation using day.js {@link https://day.js.org/docs/en/customization/relative-time relativeTime}\n */\nconst thresholds = [\n { l: \"s\", r: 119, d: \"second\" },\n { l: \"m\", r: 1 },\n { l: \"mm\", r: 59, d: \"minute\" },\n { l: \"h\", r: 1 },\n { l: \"hh\", r: 23, d: \"hour\" },\n { l: \"d\", r: 1 },\n { l: \"dd\", r: 29, d: \"day\" },\n { l: \"M\", r: 1 },\n { l: \"MM\", r: 11, d: \"month\" },\n { l: \"y\", r: 17 },\n { l: \"yy\", d: \"year\" },\n];\n\ndayjs.extend(localeData);\ndayjs.extend(duration);\ndayjs.extend(calendar);\ndayjs.extend(localizedFormat);\ndayjs.extend(relativeTime, { thresholds });\ndayjs.extend(updateLocale);\n\nexport const secondsUntilNextDay = (date = new Date()) => {\n const midnight = new Date(date.getTime());\n\n midnight.setDate(midnight.getDate() + 1);\n midnight.setHours(0);\n midnight.setMinutes(0);\n midnight.setSeconds(0);\n midnight.setMilliseconds(0);\n\n return (midnight.getTime() - date.getTime()) / 1000;\n};\n\nconst secondsUntilNextWeek = (date = new Date()) => {\n const firstMonthDayOfWeek = date.getDate() - date.getDay();\n const firstMonthDayOfNextWeek = firstMonthDayOfWeek + 7; // auto roll over to next month if needed\n\n const firstDayNextWeek = new Date(date.getTime());\n\n firstDayNextWeek.setDate(firstMonthDayOfNextWeek);\n firstDayNextWeek.setHours(0);\n firstDayNextWeek.setMinutes(0);\n firstDayNextWeek.setSeconds(0);\n firstDayNextWeek.setMilliseconds(0);\n\n return (firstDayNextWeek.getTime() - date.getTime()) / 1000;\n};\n\n/**\n * @typedef {Object} TimeAgo\n * @property {string} timeAgo - the formatted date using the \"time ago format\"\n * @property {number} delay - the time until the date needs to be updated\n */\n\n/**\n * Formats a date to the a relative time format using dayjs.\n *\n * @param {Date} date - date to format.\n * @param {String} locale - locale to use.\n * @param {Boolean} [showSeconds=false] - if seconds should be part of the result.\n * @param {Date} referenceDate - reference date to use when formatting (defaults to current date).\n *\n * @return {TimeAgo} the formatted date using the \"time ago format\" and the time until it needs to be updated\n */\nexport const formatTimeAgo = (\n date,\n locale,\n showSeconds = false,\n referenceDate = new Date()\n) => {\n const dayReferenceDate = dayjs(referenceDate);\n const dayDate = dayjs(date).locale(locale);\n\n const dayDiffSeconds = dayReferenceDate.diff(dayDate, \"second\");\n\n const formatUseSeconds = showSeconds ? \"LTS\" : \"LT\";\n\n // check if the date is after the reference date\n if (date.getTime() > referenceDate.getTime()) {\n return {\n timeAgo: dayDate.format(`L ${formatUseSeconds}`),\n delay: (date.getTime() - referenceDate.getTime()) / 1000,\n };\n }\n\n // just now, until the 2 minutes\n if (dayDiffSeconds < 120) {\n return {\n timeAgo: dayjs\n .duration(dayDiffSeconds, \"second\")\n .locale(locale)\n .humanize(),\n delay: 120 - dayDiffSeconds,\n };\n }\n\n // ago in minutes, until the 1 hour mark\n const dayDiffMinutes = dayReferenceDate.diff(dayDate, \"minute\");\n\n if (dayDiffMinutes < 60) {\n return {\n timeAgo: dayjs\n .duration(-dayDiffMinutes, \"minute\")\n .locale(locale)\n .humanize(true),\n delay: 60 * (dayDiffMinutes + 1) - dayDiffSeconds,\n };\n }\n\n // formatted date with text description for today\n if (dayReferenceDate.isSame(dayDate, \"day\")) {\n return {\n timeAgo: `${dayDate.calendar(dayReferenceDate)}`,\n delay: secondsUntilNextDay(referenceDate),\n };\n }\n\n // formatted date with text description for yesterday\n if (dayReferenceDate.subtract(1, \"day\").isSame(dayDate, \"day\")) {\n return {\n timeAgo: `${dayDate.calendar(dayReferenceDate)}`,\n delay: secondsUntilNextDay(referenceDate),\n };\n }\n\n // formatted date with week during the current week\n if (dayDate.isSame(dayReferenceDate, \"week\")) {\n return {\n timeAgo: dayDate.format(`ddd, ${formatUseSeconds}`),\n delay: secondsUntilNextWeek(date),\n };\n }\n\n // formatted without special gimmicks\n return {\n timeAgo: dayDate.format(`L ${formatUseSeconds}`),\n delay: 0,\n };\n};\n"],"names":["thresholds","l","r","d","dayjs","extend","localeData","duration","calendar","localizedFormat","relativeTime","updateLocale","secondsUntilNextDay","date","Date","midnight","getTime","setDate","getDate","setHours","setMinutes","setSeconds","setMilliseconds","secondsUntilNextWeek","firstMonthDayOfWeek","getDay","firstMonthDayOfNextWeek","firstDayNextWeek","formatTimeAgo","locale","showSeconds","referenceDate","dayReferenceDate","dayDate","dayDiffSeconds","diff","formatUseSeconds","timeAgo","format","delay","humanize","dayDiffMinutes","isSame","subtract"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const classes = require("../../utils/classes.cjs");
|
|
4
|
+
const classKeys = ["root"];
|
|
5
|
+
const timeAgoClasses = classes.getClasses(classKeys, "HvTimeAgo");
|
|
6
|
+
const timeAgoClasses$1 = timeAgoClasses;
|
|
7
|
+
exports.default = timeAgoClasses$1;
|
|
8
|
+
//# sourceMappingURL=timeAgoClasses.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeAgoClasses.cjs","sources":["../../../../src/components/TimeAgo/timeAgoClasses.ts"],"sourcesContent":["import { getClasses } from \"@core/utils\";\n\nexport interface HvTimeAgoClasses {\n root?: string;\n}\n\nconst classKeys: string[] = [\"root\"];\n\nconst timeAgoClasses = getClasses<HvTimeAgoClasses>(classKeys, \"HvTimeAgo\");\n\nexport default timeAgoClasses;\n"],"names":["classKeys","timeAgoClasses","getClasses"],"mappings":";;;AAMA,MAAMA,YAAsB,CAAC,MAAM;AAEnC,MAAMC,iBAAiBC,QAA6BF,WAAAA,WAAW,WAAW;AAE1E,MAAA,mBAAeC;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const useTimeout = require("./useTimeout.cjs");
|
|
5
|
+
const formatUtils = require("./formatUtils.cjs");
|
|
6
|
+
const fmt = (timestamp, locale, showSeconds) => {
|
|
7
|
+
const timestampMs = String(timestamp).length > 11 ? timestamp : timestamp * 1e3;
|
|
8
|
+
return formatUtils.formatTimeAgo(new Date(timestampMs), locale, showSeconds);
|
|
9
|
+
};
|
|
10
|
+
function useTimeAgo(timestamp, options) {
|
|
11
|
+
const {
|
|
12
|
+
locale,
|
|
13
|
+
disableRefresh = false,
|
|
14
|
+
showSeconds = false
|
|
15
|
+
} = options;
|
|
16
|
+
const [timeAgo, setTimeAgo] = React.useState(fmt(timestamp, locale, showSeconds));
|
|
17
|
+
const refreshTime = disableRefresh ? 0 : timeAgo.delay * 1e3;
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
const newTimeAgo = fmt(timestamp, locale, showSeconds);
|
|
20
|
+
setTimeAgo(newTimeAgo);
|
|
21
|
+
}, [timestamp, locale, showSeconds]);
|
|
22
|
+
useTimeout.default(() => {
|
|
23
|
+
const newTimeAgo = fmt(timestamp, locale, showSeconds);
|
|
24
|
+
setTimeAgo(newTimeAgo);
|
|
25
|
+
}, refreshTime);
|
|
26
|
+
return timeAgo.timeAgo;
|
|
27
|
+
}
|
|
28
|
+
exports.default = useTimeAgo;
|
|
29
|
+
//# sourceMappingURL=useTimeAgo.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTimeAgo.cjs","sources":["../../../../src/components/TimeAgo/useTimeAgo.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport useTimeout from \"./useTimeout\";\nimport { formatTimeAgo } from \"./formatUtils\";\n\n/**\n * Calls `formatTimeAgo` with timestamp conversion\n */\nconst fmt = (timestamp, locale, showSeconds) => {\n const timestampMs =\n String(timestamp).length > 11 ? timestamp : timestamp * 1000;\n return formatTimeAgo(new Date(timestampMs), locale, showSeconds);\n};\n\nexport default function useTimeAgo(timestamp, options) {\n const { locale, disableRefresh = false, showSeconds = false } = options;\n const [timeAgo, setTimeAgo] = useState(fmt(timestamp, locale, showSeconds));\n const refreshTime = disableRefresh ? 0 : timeAgo.delay * 1000;\n\n useEffect(() => {\n const newTimeAgo = fmt(timestamp, locale, showSeconds);\n setTimeAgo(newTimeAgo);\n }, [timestamp, locale, showSeconds]);\n\n useTimeout(() => {\n const newTimeAgo = fmt(timestamp, locale, showSeconds);\n setTimeAgo(newTimeAgo);\n }, refreshTime);\n\n return timeAgo.timeAgo;\n}\n"],"names":["fmt","timestamp","locale","showSeconds","timestampMs","String","length","formatTimeAgo","Date","useTimeAgo","options","disableRefresh","timeAgo","setTimeAgo","useState","refreshTime","delay","useEffect","newTimeAgo","useTimeout"],"mappings":";;;;;AAOA,MAAMA,MAAMA,CAACC,WAAWC,QAAQC,gBAAgB;AAC9C,QAAMC,cACJC,OAAOJ,SAAS,EAAEK,SAAS,KAAKL,YAAYA,YAAY;AAC1D,SAAOM,YAAAA,cAAc,IAAIC,KAAKJ,WAAW,GAAGF,QAAQC,WAAW;AACjE;AAEwBM,SAAAA,WAAWR,WAAWS,SAAS;AAC/C,QAAA;AAAA,IAAER;AAAAA,IAAQS,iBAAiB;AAAA,IAAOR,cAAc;AAAA,EAAUO,IAAAA;AAC1D,QAAA,CAACE,SAASC,UAAU,IAAIC,eAASd,IAAIC,WAAWC,QAAQC,WAAW,CAAC;AAC1E,QAAMY,cAAcJ,iBAAiB,IAAIC,QAAQI,QAAQ;AAEzDC,QAAAA,UAAU,MAAM;AACd,UAAMC,aAAalB,IAAIC,WAAWC,QAAQC,WAAW;AACrDU,eAAWK,UAAU;AAAA,EACpB,GAAA,CAACjB,WAAWC,QAAQC,WAAW,CAAC;AAEnCgB,aAAAA,QAAW,MAAM;AACf,UAAMD,aAAalB,IAAIC,WAAWC,QAAQC,WAAW;AACrDU,eAAWK,UAAU;AAAA,KACpBH,WAAW;AAEd,SAAOH,QAAQA;AACjB;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
function useTimeout(callback, delay) {
|
|
5
|
+
const savedCallback = React.useRef(callback);
|
|
6
|
+
React.useEffect(() => {
|
|
7
|
+
savedCallback.current = callback;
|
|
8
|
+
}, [callback]);
|
|
9
|
+
React.useEffect(() => {
|
|
10
|
+
if (!delay)
|
|
11
|
+
return void 0;
|
|
12
|
+
const id = setTimeout(() => savedCallback.current(), delay);
|
|
13
|
+
return () => clearTimeout(id);
|
|
14
|
+
}, [delay]);
|
|
15
|
+
}
|
|
16
|
+
exports.default = useTimeout;
|
|
17
|
+
//# sourceMappingURL=useTimeout.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTimeout.cjs","sources":["../../../../src/components/TimeAgo/useTimeout.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n\nexport default function useTimeout(callback, delay) {\n const savedCallback = useRef(callback);\n\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (!delay) return undefined;\n\n const id = setTimeout(() => savedCallback.current(), delay);\n return () => clearTimeout(id);\n }, [delay]);\n}\n"],"names":["useTimeout","callback","delay","savedCallback","useRef","useEffect","current","undefined","id","setTimeout","clearTimeout"],"mappings":";;;AAEwBA,SAAAA,WAAWC,UAAUC,OAAO;AAC5CC,QAAAA,gBAAgBC,aAAOH,QAAQ;AAErCI,QAAAA,UAAU,MAAM;AACdF,kBAAcG,UAAUL;AAAAA,EAAAA,GACvB,CAACA,QAAQ,CAAC;AAEbI,QAAAA,UAAU,MAAM;AACd,QAAI,CAACH;AAAcK,aAAAA;AAEnB,UAAMC,KAAKC,WAAW,MAAMN,cAAcG,QAAAA,GAAWJ,KAAK;AACnD,WAAA,MAAMQ,aAAaF,EAAE;AAAA,EAAA,GAC3B,CAACN,KAAK,CAAC;AACZ;;"}
|
|
@@ -17,8 +17,8 @@ const withTooltip = (Component, label = "", placement, hideTooltip, tooltipProps
|
|
|
17
17
|
const title = /* @__PURE__ */ jsxRuntime.jsx(Typography.HvTypography, {
|
|
18
18
|
children: label
|
|
19
19
|
});
|
|
20
|
-
const handleMouseEnter = (
|
|
21
|
-
const isHidden = hideTooltip == null ? void 0 : hideTooltip(
|
|
20
|
+
const handleMouseEnter = (event) => {
|
|
21
|
+
const isHidden = hideTooltip == null ? void 0 : hideTooltip(event);
|
|
22
22
|
setIsHoverDisabled(isHidden);
|
|
23
23
|
setOpen(!isHidden);
|
|
24
24
|
};
|
|
@@ -47,6 +47,6 @@ const withTooltip = (Component, label = "", placement, hideTooltip, tooltipProps
|
|
|
47
47
|
})
|
|
48
48
|
});
|
|
49
49
|
};
|
|
50
|
-
const
|
|
51
|
-
exports.default =
|
|
50
|
+
const withTooltipUtil = withTooltip;
|
|
51
|
+
exports.default = withTooltipUtil;
|
|
52
52
|
//# sourceMappingURL=withTooltip.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withTooltip.cjs","sources":["../../../src/hocs/withTooltip.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"withTooltip.cjs","sources":["../../../src/hocs/withTooltip.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport {\n HvTypography,\n HvTooltip,\n HvTooltipPlacementType,\n HvTooltipProps,\n} from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\n\nconst styles: { truncate: React.CSSProperties } = {\n truncate: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n};\n\nconst withTooltip =\n (\n Component: React.FunctionComponent,\n // eslint-disable-next-line @typescript-eslint/default-param-last\n label = \"\",\n placement: HvTooltipPlacementType,\n hideTooltip?: (event: React.MouseEvent<HTMLDivElement>) => boolean,\n tooltipProps?: HvTooltipProps,\n tooltipContainerProps?: HvBaseProps\n ) =>\n (props) => {\n const [isHoverDisabled, setIsHoverDisabled] = useState<boolean | undefined>(\n false\n );\n const [open, setOpen] = useState<boolean>(false);\n\n const title = <HvTypography>{label}</HvTypography>;\n\n const handleMouseEnter = (event: React.MouseEvent<HTMLDivElement>) => {\n const isHidden = hideTooltip?.(event);\n setIsHoverDisabled(isHidden);\n setOpen(!isHidden);\n };\n\n const handleMouseLeave = () => {\n setIsHoverDisabled(false);\n setOpen(false);\n };\n\n return (\n <HvTooltip\n style={{ ...styles.truncate }}\n disableHoverListener={isHoverDisabled}\n disableFocusListener\n disableTouchListener\n title={title}\n open={open}\n placement={placement}\n {...tooltipProps}\n >\n <div\n {...tooltipContainerProps}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <Component {...props} />\n </div>\n </HvTooltip>\n );\n };\n\nexport default withTooltip;\n"],"names":["styles","truncate","overflow","textOverflow","whiteSpace","withTooltip","Component","label","placement","hideTooltip","tooltipProps","tooltipContainerProps","props","isHoverDisabled","setIsHoverDisabled","useState","open","setOpen","title","HvTypography","children","handleMouseEnter","event","isHidden","handleMouseLeave","HvTooltip","style","disableHoverListener","disableFocusListener","disableTouchListener","onMouseEnter","onMouseLeave"],"mappings":";;;;;;AASA,MAAMA,SAA4C;AAAA,EAChDC,UAAU;AAAA,IACRC,UAAU;AAAA,IACVC,cAAc;AAAA,IACdC,YAAY;AAAA,EACd;AACF;AAEA,MAAMC,cACJA,CACEC,WAEAC,QAAQ,IACRC,WACAC,aACAC,cACAC,0BAEDC,CAAU,UAAA;AACT,QAAM,CAACC,iBAAiBC,kBAAkB,IAAIC,eAC5C,KAAK;AAEP,QAAM,CAACC,MAAMC,OAAO,IAAIF,eAAkB,KAAK;AAEzCG,QAAAA,uCAASC,yBAAY;AAAA,IAAAC,UAAEb;AAAAA,EAAAA,CAAqB;AAE5Cc,QAAAA,mBAAmBA,CAACC,UAA4C;AAC9DC,UAAAA,WAAWd,2CAAca;AAC/BR,uBAAmBS,QAAQ;AAC3BN,YAAQ,CAACM,QAAQ;AAAA,EAAA;AAGnB,QAAMC,mBAAmBA,MAAM;AAC7BV,uBAAmB,KAAK;AACxBG,YAAQ,KAAK;AAAA,EAAA;AAGf,wCACGQ,QAAAA,WAAS;AAAA,IACRC,OAAO;AAAA,MAAE,GAAG1B,OAAOC;AAAAA,IAAS;AAAA,IAC5B0B,sBAAsBd;AAAAA,IACtBe,sBAAoB;AAAA,IACpBC,sBAAoB;AAAA,IACpBX;AAAAA,IACAF;AAAAA,IACAR;AAAAA,IAAqB,GACjBE;AAAAA,IAAYU,yCAEhB,OAAA;AAAA,MAAA,GACMT;AAAAA,MACJmB,cAAcT;AAAAA,MACdU,cAAcP;AAAAA,MAAiBJ,yCAE9Bd,WAAS;AAAA,QAAA,GAAKM;AAAAA,MAAAA,CAAK;AAAA,IAAA,CAAI;AAAA,EAAA,CAEhB;AAEhB;AAEF,MAAA,kBAAeP;;"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -233,6 +233,17 @@ const Slider = require("./components/Slider/Slider.cjs");
|
|
|
233
233
|
const filterGroupClasses = require("./components/FilterGroup/filterGroupClasses.cjs");
|
|
234
234
|
const FilterGroup = require("./components/FilterGroup/FilterGroup.cjs");
|
|
235
235
|
const DatePicker = require("./components/DatePicker/DatePicker.cjs");
|
|
236
|
+
const scrollToVerticalClasses = require("./components/ScrollTo/Vertical/scrollToVerticalClasses.cjs");
|
|
237
|
+
const verticalScrollListItemClasses = require("./components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.cjs");
|
|
238
|
+
const ScrollToVertical = require("./components/ScrollTo/Vertical/ScrollToVertical.cjs");
|
|
239
|
+
const scrollToHorizontalClasses = require("./components/ScrollTo/Horizontal/scrollToHorizontalClasses.cjs");
|
|
240
|
+
const horizontalScrollListItemClasses = require("./components/ScrollTo/Horizontal/HorizontalScrollListItem/horizontalScrollListItemClasses.cjs");
|
|
241
|
+
const ScrollToHorizontal = require("./components/ScrollTo/Horizontal/ScrollToHorizontal.cjs");
|
|
242
|
+
const useScrollTo = require("./components/ScrollTo/useScrollTo.cjs");
|
|
243
|
+
const inlineEditorClasses = require("./components/InlineEditor/inlineEditorClasses.cjs");
|
|
244
|
+
const InlineEditor = require("./components/InlineEditor/InlineEditor.cjs");
|
|
245
|
+
const timeAgoClasses = require("./components/TimeAgo/timeAgoClasses.cjs");
|
|
246
|
+
const TimeAgo = require("./components/TimeAgo/TimeAgo.cjs");
|
|
236
247
|
const useUniqueId = require("./hooks/useUniqueId.cjs");
|
|
237
248
|
const useIsMounted = require("./hooks/useIsMounted.cjs");
|
|
238
249
|
const useClickOutside = require("./hooks/useClickOutside.cjs");
|
|
@@ -557,6 +568,17 @@ exports.HvSlider = Slider.HvSlider;
|
|
|
557
568
|
exports.filterGroupClasses = filterGroupClasses.default;
|
|
558
569
|
exports.HvFilterGroup = FilterGroup.HvFilterGroup;
|
|
559
570
|
exports.HvDatePicker = DatePicker.HvDatePicker;
|
|
571
|
+
exports.scrollToVerticalClasses = scrollToVerticalClasses.default;
|
|
572
|
+
exports.verticalScrollListItemClasses = verticalScrollListItemClasses.default;
|
|
573
|
+
exports.HvScrollToVertical = ScrollToVertical.HvScrollToVertical;
|
|
574
|
+
exports.scrollToHorizontalClasses = scrollToHorizontalClasses.default;
|
|
575
|
+
exports.horizontalScrollListItemClasses = horizontalScrollListItemClasses.default;
|
|
576
|
+
exports.HvScrollToHorizontal = ScrollToHorizontal.HvScrollToHorizontal;
|
|
577
|
+
exports.useScrollTo = useScrollTo.useScrollTo;
|
|
578
|
+
exports.inlineEditorClasses = inlineEditorClasses.default;
|
|
579
|
+
exports.HvInlineEditor = InlineEditor.HvInlineEditor;
|
|
580
|
+
exports.timeAgoClasses = timeAgoClasses.default;
|
|
581
|
+
exports.HvTimeAgo = TimeAgo.HvTimeAgo;
|
|
560
582
|
exports.useUniqueId = useUniqueId.default;
|
|
561
583
|
exports.useIsMounted = useIsMounted.default;
|
|
562
584
|
exports.useClickOutside = useClickOutside.useClickOutside;
|
|
@@ -586,6 +608,7 @@ exports.isKeypress = keyCheck.isKeypress;
|
|
|
586
608
|
exports.decreaseSize = sizes.decreaseSize;
|
|
587
609
|
exports.increaseSize = sizes.increaseSize;
|
|
588
610
|
exports.createTheme = theme.createTheme;
|
|
611
|
+
exports.getVarValue = theme.getVarValue;
|
|
589
612
|
exports.processThemes = theme.processThemes;
|
|
590
613
|
exports.setElementAttrs = theme.setElementAttrs;
|
|
591
614
|
exports.setId = setId.setId;
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|