@hitachivantara/uikit-react-core 5.3.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
  2. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
  3. package/dist/cjs/components/Dialog/Dialog.styles.cjs +3 -3
  4. package/dist/cjs/components/Dialog/Dialog.styles.cjs.map +1 -1
  5. package/dist/cjs/components/InlineEditor/InlineEditor.cjs +122 -0
  6. package/dist/cjs/components/InlineEditor/InlineEditor.cjs.map +1 -0
  7. package/dist/cjs/components/InlineEditor/InlineEditor.styles.cjs +74 -0
  8. package/dist/cjs/components/InlineEditor/InlineEditor.styles.cjs.map +1 -0
  9. package/dist/cjs/components/InlineEditor/inlineEditorClasses.cjs +8 -0
  10. package/dist/cjs/components/InlineEditor/inlineEditorClasses.cjs.map +1 -0
  11. package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.cjs +51 -0
  12. package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.cjs.map +1 -0
  13. package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.styles.cjs +54 -0
  14. package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.styles.cjs.map +1 -0
  15. package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/horizontalScrollListItemClasses.cjs +8 -0
  16. package/dist/cjs/components/ScrollTo/Horizontal/HorizontalScrollListItem/horizontalScrollListItemClasses.cjs.map +1 -0
  17. package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.cjs +126 -0
  18. package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.cjs.map +1 -0
  19. package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.styles.cjs +46 -0
  20. package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.styles.cjs.map +1 -0
  21. package/dist/cjs/components/ScrollTo/Horizontal/scrollToHorizontalClasses.cjs +8 -0
  22. package/dist/cjs/components/ScrollTo/Horizontal/scrollToHorizontalClasses.cjs.map +1 -0
  23. package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.cjs +90 -0
  24. package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.cjs.map +1 -0
  25. package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.styles.cjs +43 -0
  26. package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.styles.cjs.map +1 -0
  27. package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.cjs +71 -0
  28. package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.cjs.map +1 -0
  29. package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.styles.cjs +54 -0
  30. package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.styles.cjs.map +1 -0
  31. package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.cjs +8 -0
  32. package/dist/cjs/components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.cjs.map +1 -0
  33. package/dist/cjs/components/ScrollTo/Vertical/scrollToVerticalClasses.cjs +8 -0
  34. package/dist/cjs/components/ScrollTo/Vertical/scrollToVerticalClasses.cjs.map +1 -0
  35. package/dist/cjs/components/ScrollTo/useScrollTo.cjs +103 -0
  36. package/dist/cjs/components/ScrollTo/useScrollTo.cjs.map +1 -0
  37. package/dist/cjs/components/ScrollTo/utils.cjs +76 -0
  38. package/dist/cjs/components/ScrollTo/utils.cjs.map +1 -0
  39. package/dist/cjs/components/ScrollTo/withTooltip.cjs +20 -0
  40. package/dist/cjs/components/ScrollTo/withTooltip.cjs.map +1 -0
  41. package/dist/cjs/hocs/withTooltip.cjs +4 -4
  42. package/dist/cjs/hocs/withTooltip.cjs.map +1 -1
  43. package/dist/cjs/index.cjs +19 -0
  44. package/dist/cjs/index.cjs.map +1 -1
  45. package/dist/cjs/utils/theme.cjs +9 -0
  46. package/dist/cjs/utils/theme.cjs.map +1 -1
  47. package/dist/cjs/utils/wrapperTooltip.cjs +1 -1
  48. package/dist/cjs/utils/wrapperTooltip.cjs.map +1 -1
  49. package/dist/esm/components/Dialog/Dialog.js +2 -2
  50. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  51. package/dist/esm/components/Dialog/Dialog.styles.js +3 -3
  52. package/dist/esm/components/Dialog/Dialog.styles.js.map +1 -1
  53. package/dist/esm/components/InlineEditor/InlineEditor.js +122 -0
  54. package/dist/esm/components/InlineEditor/InlineEditor.js.map +1 -0
  55. package/dist/esm/components/InlineEditor/InlineEditor.styles.js +74 -0
  56. package/dist/esm/components/InlineEditor/InlineEditor.styles.js.map +1 -0
  57. package/dist/esm/components/InlineEditor/inlineEditorClasses.js +8 -0
  58. package/dist/esm/components/InlineEditor/inlineEditorClasses.js.map +1 -0
  59. package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.js +51 -0
  60. package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.js.map +1 -0
  61. package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.styles.js +54 -0
  62. package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/HorizontalScrollListItem.styles.js.map +1 -0
  63. package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/horizontalScrollListItemClasses.js +8 -0
  64. package/dist/esm/components/ScrollTo/Horizontal/HorizontalScrollListItem/horizontalScrollListItemClasses.js.map +1 -0
  65. package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.js +126 -0
  66. package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.js.map +1 -0
  67. package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.styles.js +46 -0
  68. package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.styles.js.map +1 -0
  69. package/dist/esm/components/ScrollTo/Horizontal/scrollToHorizontalClasses.js +8 -0
  70. package/dist/esm/components/ScrollTo/Horizontal/scrollToHorizontalClasses.js.map +1 -0
  71. package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.js +90 -0
  72. package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.js.map +1 -0
  73. package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.styles.js +43 -0
  74. package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.styles.js.map +1 -0
  75. package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.js +71 -0
  76. package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.js.map +1 -0
  77. package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.styles.js +54 -0
  78. package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.styles.js.map +1 -0
  79. package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.js +8 -0
  80. package/dist/esm/components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.js.map +1 -0
  81. package/dist/esm/components/ScrollTo/Vertical/scrollToVerticalClasses.js +8 -0
  82. package/dist/esm/components/ScrollTo/Vertical/scrollToVerticalClasses.js.map +1 -0
  83. package/dist/esm/components/ScrollTo/useScrollTo.js +103 -0
  84. package/dist/esm/components/ScrollTo/useScrollTo.js.map +1 -0
  85. package/dist/esm/components/ScrollTo/utils.js +76 -0
  86. package/dist/esm/components/ScrollTo/utils.js.map +1 -0
  87. package/dist/esm/components/ScrollTo/withTooltip.js +20 -0
  88. package/dist/esm/components/ScrollTo/withTooltip.js.map +1 -0
  89. package/dist/esm/hocs/withTooltip.js +4 -4
  90. package/dist/esm/hocs/withTooltip.js.map +1 -1
  91. package/dist/esm/index.js +38 -19
  92. package/dist/esm/index.js.map +1 -1
  93. package/dist/esm/utils/theme.js +9 -0
  94. package/dist/esm/utils/theme.js.map +1 -1
  95. package/dist/esm/utils/wrapperTooltip.js +2 -2
  96. package/dist/esm/utils/wrapperTooltip.js.map +1 -1
  97. package/dist/types/index.d.ts +193 -1
  98. package/package.json +5 -5
@@ -0,0 +1,90 @@
1
+ import scrollToVerticalClasses from "./scrollToVerticalClasses.js";
2
+ import { generateDynamicStyles, styles } from "./ScrollToVertical.styles.js";
3
+ import { clsx } from "clsx";
4
+ import { useScrollTo } from "../useScrollTo.js";
5
+ import { useMemo } from "react";
6
+ import { withTooltip } from "../withTooltip.js";
7
+ import { ClassNames } from "@emotion/react";
8
+ import fade from "../../../utils/hexToRgbA.js";
9
+ import { jsx } from "@emotion/react/jsx-runtime";
10
+ import useUniqueId from "../../../hooks/useUniqueId.js";
11
+ import { HvVerticalScrollListItem } from "./VerticalScrollListItem/VerticalScrollListItem.js";
12
+ import { useTheme } from "../../../hooks/useTheme.js";
13
+ import { setId } from "../../../utils/setId.js";
14
+ import { isKeypress } from "../../../utils/keyboardUtils/keyCheck.js";
15
+ import { keyboardCodes } from "../../../utils/keyboardUtils/keyboardCodes.js";
16
+ const {
17
+ Enter
18
+ } = keyboardCodes;
19
+ const HvScrollToVertical = ({
20
+ id,
21
+ defaultSelectedIndex = 0,
22
+ scrollElementId,
23
+ href = true,
24
+ onChange,
25
+ onClick,
26
+ onEnter,
27
+ className,
28
+ classes,
29
+ options,
30
+ offset = 0,
31
+ position = "relative",
32
+ tooltipPosition = "left",
33
+ ...others
34
+ }) => {
35
+ const {
36
+ activeTheme,
37
+ selectedMode
38
+ } = useTheme();
39
+ const elementId = useUniqueId(id, "hvVerticalScrollto");
40
+ const [selectedIndex, setScrollTo] = useScrollTo(defaultSelectedIndex, scrollElementId, href, offset, options, onChange);
41
+ const handleSelection = (event, value, index) => {
42
+ event.preventDefault();
43
+ const wrappedOnChange = () => {
44
+ onChange == null ? void 0 : onChange(event, index);
45
+ };
46
+ setScrollTo(event, value, index, wrappedOnChange);
47
+ };
48
+ const tooltipWrappers = useMemo(() => {
49
+ return options.map((option) => {
50
+ return withTooltip(option.label, "div", tooltipPosition, false);
51
+ });
52
+ }, [options, tooltipPosition]);
53
+ const tabs = options.map((option, index) => {
54
+ const selected = selectedIndex === index;
55
+ const tooltipWrapper = tooltipWrappers[index];
56
+ return /* @__PURE__ */ jsx(HvVerticalScrollListItem, {
57
+ id: setId(elementId, `item-${index}`),
58
+ onClick: (event) => {
59
+ handleSelection(event, option.value, index);
60
+ onClick == null ? void 0 : onClick(event, index);
61
+ },
62
+ onKeyDown: (event) => {
63
+ if (isKeypress(event, Enter) === true) {
64
+ handleSelection(event, option.value, index);
65
+ onEnter == null ? void 0 : onEnter(event, index);
66
+ }
67
+ },
68
+ tooltipWrapper,
69
+ selected,
70
+ "aria-label": option.label
71
+ }, option.key || option.label);
72
+ });
73
+ const dynamicClasses = generateDynamicStyles(options.length);
74
+ return /* @__PURE__ */ jsx(ClassNames, {
75
+ children: ({
76
+ css
77
+ }) => /* @__PURE__ */ jsx("ol", {
78
+ className: clsx(className, classes == null ? void 0 : classes.root, scrollToVerticalClasses.root, css(styles.root), css({
79
+ backgroundColor: fade(activeTheme == null ? void 0 : activeTheme.colors.modes[selectedMode].atmo2, activeTheme == null ? void 0 : activeTheme.scrollTo.backgroundColorOpacity)
80
+ }), position === "fixed" && clsx(classes == null ? void 0 : classes.positionFixed, scrollToVerticalClasses.positionFixed, css(dynamicClasses.positionFixed)), position === "absolute" && clsx(classes == null ? void 0 : classes.positionAbsolute, scrollToVerticalClasses.positionAbsolute, css(dynamicClasses.positionAbsolute))),
81
+ id: elementId,
82
+ ...others,
83
+ children: tabs
84
+ })
85
+ });
86
+ };
87
+ export {
88
+ HvScrollToVertical
89
+ };
90
+ //# sourceMappingURL=ScrollToVertical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollToVertical.js","sources":["../../../../../src/components/ScrollTo/Vertical/ScrollToVertical.tsx"],"sourcesContent":["import { HvBaseProps } from \"@core/types\";\nimport scrollToVerticalClasses, {\n HvScrollToVerticalClasses,\n} from \"./scrollToVerticalClasses\";\nimport { generateDynamicStyles, styles } from \"./ScrollToVertical.styles\";\nimport { clsx } from \"clsx\";\nimport { useTheme, useUniqueId } from \"@core/hooks\";\nimport { HvVerticalScrollListItem } from \"./VerticalScrollListItem\";\nimport { isKeypress, keyboardCodes, setId } from \"@core/utils\";\nimport { useScrollTo } from \"../useScrollTo\";\nimport { useMemo } from \"react\";\nimport { withTooltip } from \"../withTooltip\";\nimport { ClassNames } from \"@emotion/react\";\nimport fade from \"@core/utils/hexToRgbA\";\nimport { HvScrollToTooltipPositions } from \"../types\";\n\nconst { Enter } = keyboardCodes;\n\nexport interface HvScrollToVerticalOption {\n key?: string;\n label: string;\n value: string;\n offset?: number;\n}\n\nexport type HvScrollToVerticalPositions = \"absolute\" | \"fixed\" | \"relative\";\n\nexport interface HvScrollToVerticalProps\n extends HvBaseProps<HTMLOListElement, { onChange; onClick }> {\n /** An Array of Objects with Label and Value. Label is the displayed Element and Value is the local navigation location applied */\n options: HvScrollToVerticalOption[];\n /** True if the href location link should be applied. It will create an a element around every list item */\n href?: boolean;\n /** Default selected index passed from the parent. */\n defaultSelectedIndex?: number;\n /**\n * The Id of the scrollable container containing displayed elements.\n *\n * Defaults to `window` if unspecified.\n */\n scrollElementId?: string;\n /**\n * Defines the offset from the top of each element for getting an optimal viewing region in the container.\n * This allows to exclude regions of the container that are obscured by other content (such as fixed-positioned toolbars or titles)\n * or to put more breathing room between the targeted element and the edges of the container.\n *\n * Each element can also have a specific offset via the options property.\n */\n offset?: number;\n /** Position of the Vertical scroll to. */\n position?: HvScrollToVerticalPositions;\n /** Position of tooltip identifying the current item. */\n tooltipPosition?: HvScrollToTooltipPositions;\n /** A function called each time the selected index changes. */\n onChange?: (\n event:\n | Event\n | React.MouseEvent<HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>,\n index: number\n ) => void;\n /** A function called each time an user clicks on a tab element. */\n onClick?: (event: React.MouseEvent<HTMLDivElement>, index: number) => void;\n /** A function called each time an user press enter on a tab element. */\n onEnter?: (event: React.KeyboardEvent<HTMLDivElement>, index: number) => void;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvScrollToVerticalClasses;\n}\n\n/**\n * The vertical scroll to element can be used to quickly navigate in a page.\n */\nexport const HvScrollToVertical = ({\n id,\n defaultSelectedIndex = 0,\n scrollElementId,\n href = true,\n onChange,\n onClick,\n onEnter,\n className,\n classes,\n options,\n offset = 0,\n position = \"relative\",\n tooltipPosition = \"left\",\n ...others\n}: HvScrollToVerticalProps) => {\n const { activeTheme, selectedMode } = useTheme();\n\n const elementId = useUniqueId(id, \"hvVerticalScrollto\");\n\n const [selectedIndex, setScrollTo] = useScrollTo(\n defaultSelectedIndex,\n scrollElementId,\n href,\n offset,\n options,\n onChange\n );\n\n const handleSelection = (\n event:\n | React.MouseEvent<HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>,\n value: string,\n index: number\n ) => {\n event.preventDefault();\n\n const wrappedOnChange = () => {\n onChange?.(event, index);\n };\n\n setScrollTo(event, value, index, wrappedOnChange);\n };\n\n const tooltipWrappers = useMemo(() => {\n return options.map((option) => {\n return withTooltip(option.label, \"div\", tooltipPosition, false);\n });\n }, [options, tooltipPosition]);\n\n const tabs = options.map((option, index) => {\n const selected = selectedIndex === index;\n const tooltipWrapper = tooltipWrappers[index];\n\n return (\n <HvVerticalScrollListItem\n id={setId(elementId, `item-${index}`)}\n onClick={(event) => {\n handleSelection(event, option.value, index);\n onClick?.(event, index);\n }}\n onKeyDown={(event) => {\n if (isKeypress(event, Enter) === true) {\n handleSelection(event, option.value, index);\n onEnter?.(event, index);\n }\n }}\n tooltipWrapper={tooltipWrapper}\n selected={selected}\n key={option.key || option.label}\n aria-label={option.label}\n />\n );\n });\n\n const dynamicClasses = generateDynamicStyles(options.length);\n\n return (\n <ClassNames>\n {({ css }) => (\n <ol\n className={clsx(\n className,\n classes?.root,\n scrollToVerticalClasses.root,\n css(styles.root),\n css({\n backgroundColor: fade(\n activeTheme?.colors.modes[selectedMode].atmo2,\n activeTheme?.scrollTo.backgroundColorOpacity\n ),\n }),\n position === \"fixed\" &&\n clsx(\n classes?.positionFixed,\n scrollToVerticalClasses.positionFixed,\n css(dynamicClasses.positionFixed)\n ),\n position === \"absolute\" &&\n clsx(\n classes?.positionAbsolute,\n scrollToVerticalClasses.positionAbsolute,\n css(dynamicClasses.positionAbsolute)\n )\n )}\n id={elementId}\n {...others}\n >\n {tabs}\n </ol>\n )}\n </ClassNames>\n );\n};\n"],"names":["Enter","keyboardCodes","HvScrollToVertical","id","defaultSelectedIndex","scrollElementId","href","onChange","onClick","onEnter","className","classes","options","offset","position","tooltipPosition","others","activeTheme","selectedMode","useTheme","elementId","useUniqueId","selectedIndex","setScrollTo","useScrollTo","handleSelection","event","value","index","preventDefault","wrappedOnChange","tooltipWrappers","useMemo","map","option","withTooltip","label","tabs","selected","tooltipWrapper","HvVerticalScrollListItem","setId","onKeyDown","isKeypress","key","dynamicClasses","generateDynamicStyles","length","ClassNames","children","css","clsx","root","scrollToVerticalClasses","styles","backgroundColor","fade","colors","modes","atmo2","scrollTo","backgroundColorOpacity","positionFixed","positionAbsolute"],"mappings":";;;;;;;;;;;;;;;AAgBA,MAAM;AAAA,EAAEA;AAAM,IAAIC;AAwDX,MAAMC,qBAAqBA,CAAC;AAAA,EACjCC;AAAAA,EACAC,uBAAuB;AAAA,EACvBC;AAAAA,EACAC,OAAO;AAAA,EACPC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,SAAS;AAAA,EACTC,WAAW;AAAA,EACXC,kBAAkB;AAAA,EAClB,GAAGC;AACoB,MAAM;AACvB,QAAA;AAAA,IAAEC;AAAAA,IAAaC;AAAAA,MAAiBC,SAAU;AAE1CC,QAAAA,YAAYC,YAAYlB,IAAI,oBAAoB;AAEhD,QAAA,CAACmB,eAAeC,WAAW,IAAIC,YACnCpB,sBACAC,iBACAC,MACAO,QACAD,SACAL,QAAQ;AAGV,QAAMkB,kBAAkBA,CACtBC,OAGAC,OACAC,UACG;AACHF,UAAMG,eAAgB;AAEtB,UAAMC,kBAAkBA,MAAM;AAC5BvB,2CAAWmB,OAAOE;AAAAA,IAAK;AAGbF,gBAAAA,OAAOC,OAAOC,OAAOE,eAAe;AAAA,EAAA;AAG5CC,QAAAA,kBAAkBC,QAAQ,MAAM;AAC7BpB,WAAAA,QAAQqB,IAAKC,CAAW,WAAA;AAC7B,aAAOC,YAAYD,OAAOE,OAAO,OAAOrB,iBAAiB,KAAK;AAAA,IAAA,CAC/D;AAAA,EAAA,GACA,CAACH,SAASG,eAAe,CAAC;AAE7B,QAAMsB,OAAOzB,QAAQqB,IAAI,CAACC,QAAQN,UAAU;AAC1C,UAAMU,WAAWhB,kBAAkBM;AAC7BW,UAAAA,iBAAiBR,gBAAgBH,KAAK;AAE5C,+BACGY,0BAAwB;AAAA,MACvBrC,IAAIsC,MAAMrB,WAAY,QAAOQ,OAAO;AAAA,MACpCpB,SAAUkB,CAAU,UAAA;AACFA,wBAAAA,OAAOQ,OAAOP,OAAOC,KAAK;AAC1CpB,2CAAUkB,OAAOE;AAAAA,MACnB;AAAA,MACAc,WAAYhB,CAAU,UAAA;AACpB,YAAIiB,WAAWjB,OAAO1B,KAAK,MAAM,MAAM;AACrB0B,0BAAAA,OAAOQ,OAAOP,OAAOC,KAAK;AAC1CnB,6CAAUiB,OAAOE;AAAAA,QACnB;AAAA,MACF;AAAA,MACAW;AAAAA,MACAD;AAAAA,MAEA,cAAYJ,OAAOE;AAAAA,IADdF,GAAAA,OAAOU,OAAOV,OAAOE,KAAK;AAAA,EAAA,CAIpC;AAEKS,QAAAA,iBAAiBC,sBAAsBlC,QAAQmC,MAAM;AAE3D,6BACGC,YAAU;AAAA,IAAAC,UACRA,CAAC;AAAA,MAAEC;AAAAA,IAAAA,0BACF,MAAA;AAAA,MACExC,WAAWyC,KACTzC,WACAC,mCAASyC,MACTC,wBAAwBD,MACxBF,IAAII,OAAOF,IAAI,GACfF,IAAI;AAAA,QACFK,iBAAiBC,KACfvC,2CAAawC,OAAOC,MAAMxC,cAAcyC,OACxC1C,2CAAa2C,SAASC,sBAAsB;AAAA,MAE/C,CAAA,GACD/C,aAAa,WACXqC,KACExC,mCAASmD,eACTT,wBAAwBS,eACxBZ,IAAIL,eAAeiB,aAAa,CAAC,GAErChD,aAAa,cACXqC,KACExC,mCAASoD,kBACTV,wBAAwBU,kBACxBb,IAAIL,eAAekB,gBAAgB,CAAC,CACrC;AAAA,MAEL5D,IAAIiB;AAAAA,MAAU,GACVJ;AAAAA,MAAMiC,UAETZ;AAAAA,IAAAA,CAAI;AAAA,EAAA,CAGE;AAEjB;"}
@@ -0,0 +1,43 @@
1
+ import { theme } from "@hitachivantara/uikit-styles";
2
+ const styles = {
3
+ root: {
4
+ display: "flex",
5
+ width: "32px",
6
+ padding: "0",
7
+ margin: 0,
8
+ listStyleType: "none",
9
+ flexWrap: "wrap",
10
+ flexDirection: "column",
11
+ backdropFilter: `blur(${theme.scrollTo.backgroundColorBlur})`
12
+ }
13
+ };
14
+ const calculateOffset = (quantityOfOptions) => {
15
+ const itemSize = 32;
16
+ const halfOptions = Math.round(quantityOfOptions * 0.5);
17
+ return halfOptions * itemSize;
18
+ };
19
+ const generateDynamicStyles = (quantityOfOptions) => {
20
+ const positionOffset = calculateOffset(quantityOfOptions);
21
+ const generatedStyles = {
22
+ positionAbsolute: {
23
+ width: "32px",
24
+ position: "absolute",
25
+ zIndex: `calc(${theme.zIndices.banner} - 2)`,
26
+ right: "0",
27
+ top: `calc(50% - ${positionOffset}px)`
28
+ },
29
+ positionFixed: {
30
+ width: "32px",
31
+ position: "fixed",
32
+ zIndex: `calc(${theme.zIndices.banner} - 2)`,
33
+ right: "0",
34
+ top: `calc(50% - ${positionOffset}px)`
35
+ }
36
+ };
37
+ return generatedStyles;
38
+ };
39
+ export {
40
+ generateDynamicStyles,
41
+ styles
42
+ };
43
+ //# sourceMappingURL=ScrollToVertical.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollToVertical.styles.js","sources":["../../../../../src/components/ScrollTo/Vertical/ScrollToVertical.styles.tsx"],"sourcesContent":["import { theme } from \"@hitachivantara/uikit-styles\";\nimport { CSSInterpolation } from \"@emotion/serialize\";\n\nexport const styles: {\n root: CSSInterpolation;\n} = {\n root: {\n display: \"flex\",\n width: \"32px\",\n padding: \"0\",\n margin: 0,\n listStyleType: \"none\",\n flexWrap: \"wrap\",\n flexDirection: \"column\",\n backdropFilter: `blur(${theme.scrollTo.backgroundColorBlur})`,\n },\n};\n\nconst calculateOffset = (quantityOfOptions: number) => {\n const itemSize = 32;\n const halfOptions = Math.round(quantityOfOptions * 0.5);\n\n return halfOptions * itemSize;\n};\n\nexport const generateDynamicStyles = (quantityOfOptions: number) => {\n const positionOffset = calculateOffset(quantityOfOptions);\n\n const generatedStyles: {\n positionAbsolute: CSSInterpolation;\n positionFixed: CSSInterpolation;\n } = {\n positionAbsolute: {\n width: \"32px\",\n position: \"absolute\",\n zIndex: `calc(${theme.zIndices.banner} - 2)`,\n right: \"0\",\n top: `calc(50% - ${positionOffset}px)`,\n },\n positionFixed: {\n width: \"32px\",\n position: \"fixed\",\n zIndex: `calc(${theme.zIndices.banner} - 2)`,\n right: \"0\",\n top: `calc(50% - ${positionOffset}px)`,\n },\n };\n\n return generatedStyles;\n};\n"],"names":["styles","root","display","width","padding","margin","listStyleType","flexWrap","flexDirection","backdropFilter","theme","scrollTo","backgroundColorBlur","calculateOffset","quantityOfOptions","itemSize","halfOptions","Math","round","generateDynamicStyles","positionOffset","generatedStyles","positionAbsolute","position","zIndex","zIndices","banner","right","top","positionFixed"],"mappings":";AAGO,MAAMA,SAET;AAAA,EACFC,MAAM;AAAA,IACJC,SAAS;AAAA,IACTC,OAAO;AAAA,IACPC,SAAS;AAAA,IACTC,QAAQ;AAAA,IACRC,eAAe;AAAA,IACfC,UAAU;AAAA,IACVC,eAAe;AAAA,IACfC,gBAAiB,QAAOC,MAAMC,SAASC;AAAAA,EACzC;AACF;AAEA,MAAMC,kBAAkBA,CAACC,sBAA8B;AACrD,QAAMC,WAAW;AACjB,QAAMC,cAAcC,KAAKC,MAAMJ,oBAAoB,GAAG;AAEtD,SAAOE,cAAcD;AACvB;AAEaI,MAAAA,wBAAwBA,CAACL,sBAA8B;AAC5DM,QAAAA,iBAAiBP,gBAAgBC,iBAAiB;AAExD,QAAMO,kBAGF;AAAA,IACFC,kBAAkB;AAAA,MAChBnB,OAAO;AAAA,MACPoB,UAAU;AAAA,MACVC,QAAS,QAAOd,MAAMe,SAASC;AAAAA,MAC/BC,OAAO;AAAA,MACPC,KAAM,cAAaR;AAAAA,IACrB;AAAA,IACAS,eAAe;AAAA,MACb1B,OAAO;AAAA,MACPoB,UAAU;AAAA,MACVC,QAAS,QAAOd,MAAMe,SAASC;AAAAA,MAC/BC,OAAO;AAAA,MACPC,KAAM,cAAaR;AAAAA,IACrB;AAAA,EAAA;AAGKC,SAAAA;AACT;"}
@@ -0,0 +1,71 @@
1
+ import verticalScrollListItemClasses from "./verticalScrollListItemClasses.js";
2
+ import { ClassNames } from "@emotion/react";
3
+ import { clsx } from "clsx";
4
+ import { styles } from "./VerticalScrollListItem.styles.js";
5
+ import { useCallback } from "react";
6
+ import { CurrentStep } from "@hitachivantara/uikit-react-icons";
7
+ import { jsx } from "@emotion/react/jsx-runtime";
8
+ import { useTheme } from "../../../../hooks/useTheme.js";
9
+ import { setId } from "../../../../utils/setId.js";
10
+ const HvVerticalScrollListItem = ({
11
+ id,
12
+ className,
13
+ classes,
14
+ selected,
15
+ "aria-label": ariaLabel,
16
+ onClick,
17
+ onKeyDown,
18
+ tooltipWrapper,
19
+ ...others
20
+ }) => {
21
+ const {
22
+ activeTheme
23
+ } = useTheme();
24
+ const variant = selected ? "label" : "body";
25
+ const labelId = setId(id, "label");
26
+ const buttonId = setId(id, "button");
27
+ const Tooltip = tooltipWrapper;
28
+ const NotSelected = useCallback(() => {
29
+ return /* @__PURE__ */ jsx(ClassNames, {
30
+ children: ({
31
+ css
32
+ }) => /* @__PURE__ */ jsx("div", {
33
+ className: clsx(classes == null ? void 0 : classes.notSelected, verticalScrollListItemClasses.notSelected, css(styles.notSelected))
34
+ })
35
+ });
36
+ }, [classes == null ? void 0 : classes.notSelected]);
37
+ const icon = selected ? /* @__PURE__ */ jsx(CurrentStep, {
38
+ height: activeTheme == null ? void 0 : activeTheme.scrollTo.dotSelectedSize,
39
+ width: activeTheme == null ? void 0 : activeTheme.scrollTo.dotSelectedSize
40
+ }) : /* @__PURE__ */ jsx(NotSelected, {});
41
+ return /* @__PURE__ */ jsx(ClassNames, {
42
+ children: ({
43
+ css
44
+ }) => /* @__PURE__ */ jsx("li", {
45
+ id,
46
+ className: clsx(className, classes == null ? void 0 : classes.root, verticalScrollListItemClasses.root, css(styles.root)),
47
+ "aria-current": selected,
48
+ children: /* @__PURE__ */ jsx("div", {
49
+ id: buttonId,
50
+ role: "button",
51
+ tabIndex: 0,
52
+ onClick,
53
+ onKeyDown,
54
+ className: clsx(classes == null ? void 0 : classes.button, verticalScrollListItemClasses.button, css(styles.button)),
55
+ "aria-label": ariaLabel,
56
+ "aria-labelledby": labelId,
57
+ ...others,
58
+ children: /* @__PURE__ */ jsx(Tooltip, {
59
+ id: labelId,
60
+ className: clsx(classes == null ? void 0 : classes.text, verticalScrollListItemClasses.text, css(styles.text)),
61
+ variant,
62
+ children: icon
63
+ })
64
+ })
65
+ })
66
+ });
67
+ };
68
+ export {
69
+ HvVerticalScrollListItem
70
+ };
71
+ //# sourceMappingURL=VerticalScrollListItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerticalScrollListItem.js","sources":["../../../../../../src/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.tsx"],"sourcesContent":["import { HvBaseProps } from \"@core/types\";\nimport verticalScrollListItemClasses, {\n HvVerticalScrollListItemClasses,\n} from \"./verticalScrollListItemClasses\";\nimport { ClassNames } from \"@emotion/react\";\nimport { clsx } from \"clsx\";\nimport { styles } from \"./VerticalScrollListItem.styles\";\nimport { HvTypographyProps } from \"@core/components\";\nimport { setId } from \"@core/utils\";\nimport { useCallback } from \"react\";\nimport { CurrentStep } from \"@hitachivantara/uikit-react-icons\";\nimport { useTheme } from \"@core/hooks\";\n\nexport interface HvVerticalScrollListItemProps extends HvBaseProps {\n /** A function component that renders a typography wrapped with a tooltip. */\n tooltipWrapper: React.FunctionComponent<{\n id?: string;\n className?: string;\n variant?: HvTypographyProps[\"variant\"];\n children?: React.ReactNode;\n }>;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvVerticalScrollListItemClasses;\n /** Whether the element is selected. */\n selected?: boolean;\n /** The function to be executed when the element is clicked. */\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n /** The function to be executed when the element is clicked. */\n onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n}\n\n/**\n * HvVerticalScrollListItem a focusable item to be used as part of the vertical scroll\n */\nexport const HvVerticalScrollListItem = ({\n id,\n className,\n classes,\n selected,\n \"aria-label\": ariaLabel,\n onClick,\n onKeyDown,\n tooltipWrapper,\n ...others\n}: HvVerticalScrollListItemProps) => {\n const { activeTheme } = useTheme();\n\n const variant: HvTypographyProps[\"variant\"] = selected ? \"label\" : \"body\";\n\n const labelId = setId(id, \"label\");\n\n const buttonId = setId(id, \"button\");\n\n const Tooltip = tooltipWrapper;\n\n const NotSelected = useCallback(() => {\n return (\n <ClassNames>\n {({ css }) => (\n <div\n className={clsx(\n classes?.notSelected,\n verticalScrollListItemClasses.notSelected,\n css(styles.notSelected)\n )}\n />\n )}\n </ClassNames>\n );\n }, [classes?.notSelected]);\n\n const icon = selected ? (\n <CurrentStep\n height={activeTheme?.scrollTo.dotSelectedSize}\n width={activeTheme?.scrollTo.dotSelectedSize}\n />\n ) : (\n <NotSelected />\n );\n\n return (\n <ClassNames>\n {({ css }) => (\n <li\n id={id}\n className={clsx(\n className,\n classes?.root,\n verticalScrollListItemClasses.root,\n css(styles.root)\n )}\n aria-current={selected}\n >\n <div\n id={buttonId}\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className={clsx(\n classes?.button,\n verticalScrollListItemClasses.button,\n css(styles.button)\n )}\n aria-label={ariaLabel}\n aria-labelledby={labelId}\n {...others}\n >\n <Tooltip\n id={labelId}\n className={clsx(\n classes?.text,\n verticalScrollListItemClasses.text,\n css(styles.text)\n )}\n variant={variant}\n >\n {icon}\n </Tooltip>\n </div>\n </li>\n )}\n </ClassNames>\n );\n};\n"],"names":["HvVerticalScrollListItem","id","className","classes","selected","ariaLabel","onClick","onKeyDown","tooltipWrapper","others","activeTheme","useTheme","variant","labelId","setId","buttonId","Tooltip","NotSelected","useCallback","ClassNames","children","css","clsx","notSelected","verticalScrollListItemClasses","styles","icon","_jsx","CurrentStep","height","scrollTo","dotSelectedSize","width","root","role","tabIndex","button","text"],"mappings":";;;;;;;;;AAkCO,MAAMA,2BAA2BA,CAAC;AAAA,EACvCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,cAAcC;AAAAA,EACdC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,GAAGC;AAC0B,MAAM;AAC7B,QAAA;AAAA,IAAEC;AAAAA,MAAgBC,SAAU;AAE5BC,QAAAA,UAAwCR,WAAW,UAAU;AAE7DS,QAAAA,UAAUC,MAAMb,IAAI,OAAO;AAE3Bc,QAAAA,WAAWD,MAAMb,IAAI,QAAQ;AAEnC,QAAMe,UAAUR;AAEVS,QAAAA,cAAcC,YAAY,MAAM;AACpC,+BACGC,YAAU;AAAA,MAAAC,UACRA,CAAC;AAAA,QAAEC;AAAAA,MAAAA,0BACF,OAAA;AAAA,QACEnB,WAAWoB,KACTnB,mCAASoB,aACTC,8BAA8BD,aAC9BF,IAAII,OAAOF,WAAW,CAAC;AAAA,MAAA,CACvB;AAAA,IAAA,CAGK;AAAA,EAAA,GAEd,CAACpB,mCAASoB,WAAW,CAAC;AAEnBG,QAAAA,OAAOtB,WACXuB,oBAACC,aAAW;AAAA,IACVC,QAAQnB,2CAAaoB,SAASC;AAAAA,IAC9BC,OAAOtB,2CAAaoB,SAASC;AAAAA,EAAgB,CAAA,IAG9Cd,oBAAAA,aACF,CAAA,CAAA;AAED,6BACGE,YAAU;AAAA,IAAAC,UACRA,CAAC;AAAA,MAAEC;AAAAA,IAAAA,0BACF,MAAA;AAAA,MACEpB;AAAAA,MACAC,WAAWoB,KACTpB,WACAC,mCAAS8B,MACTT,8BAA8BS,MAC9BZ,IAAII,OAAOQ,IAAI,CAAC;AAAA,MAElB,gBAAc7B;AAAAA,MAASgB,8BAEvB,OAAA;AAAA,QACEnB,IAAIc;AAAAA,QACJmB,MAAK;AAAA,QACLC,UAAU;AAAA,QACV7B;AAAAA,QACAC;AAAAA,QACAL,WAAWoB,KACTnB,mCAASiC,QACTZ,8BAA8BY,QAC9Bf,IAAII,OAAOW,MAAM,CAAC;AAAA,QAEpB,cAAY/B;AAAAA,QACZ,mBAAiBQ;AAAAA,QAAQ,GACrBJ;AAAAA,QAAMW,8BAETJ,SAAO;AAAA,UACNf,IAAIY;AAAAA,UACJX,WAAWoB,KACTnB,mCAASkC,MACTb,8BAA8Ba,MAC9BhB,IAAII,OAAOY,IAAI,CAAC;AAAA,UAElBzB;AAAAA,UAAiBQ,UAEhBM;AAAAA,QAAAA,CAAI;AAAA,MAAA,CACG;AAAA,IAAA,CACN;AAAA,EAAA,CAGC;AAEjB;"}
@@ -0,0 +1,54 @@
1
+ import { theme } from "@hitachivantara/uikit-styles";
2
+ import verticalScrollListItemClasses from "./verticalScrollListItemClasses.js";
3
+ import { outlineStyles } from "../../../../utils/focusUtils.js";
4
+ const styles = {
5
+ root: {
6
+ padding: "0",
7
+ height: "32px",
8
+ width: "32px",
9
+ display: "flex",
10
+ justifyContent: "center",
11
+ alignItems: "center"
12
+ },
13
+ notSelected: {
14
+ height: theme.scrollTo.dotNotSelectedSize,
15
+ width: theme.scrollTo.dotNotSelectedSize,
16
+ borderRadius: "50%",
17
+ display: "inline-block",
18
+ backgroundColor: theme.scrollTo.dotNotSelectedColor
19
+ },
20
+ text: {
21
+ height: theme.scrollTo.dotRootSize,
22
+ width: theme.scrollTo.dotRootSize,
23
+ display: "flex",
24
+ justifyContent: "center",
25
+ alignItems: "center"
26
+ },
27
+ button: {
28
+ display: "flex",
29
+ justifyContent: "center",
30
+ alignItems: "center",
31
+ height: theme.scrollTo.dotRootSize,
32
+ width: theme.scrollTo.dotRootSize,
33
+ borderRadius: theme.scrollTo.dotRootRadius,
34
+ cursor: "pointer",
35
+ "&:hover": {
36
+ backgroundColor: theme.scrollTo.dotHoverBackgroundColor,
37
+ [`& .${verticalScrollListItemClasses.notSelected}`]: {
38
+ height: theme.scrollTo.dotHoverSize,
39
+ width: theme.scrollTo.dotHoverSize,
40
+ backgroundColor: theme.scrollTo.dotHoverColor
41
+ }
42
+ },
43
+ "&:focus": {
44
+ outline: "none"
45
+ },
46
+ "&:focus-visible": {
47
+ ...outlineStyles
48
+ }
49
+ }
50
+ };
51
+ export {
52
+ styles
53
+ };
54
+ //# sourceMappingURL=VerticalScrollListItem.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerticalScrollListItem.styles.js","sources":["../../../../../../src/components/ScrollTo/Vertical/VerticalScrollListItem/VerticalScrollListItem.styles.ts"],"sourcesContent":["import { outlineStyles } from \"@core/utils\";\nimport { CSSInterpolation } from \"@emotion/serialize\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\nimport verticalScrollListItemClasses from \"./verticalScrollListItemClasses\";\n\nexport const styles: {\n root: CSSInterpolation;\n button: CSSInterpolation;\n notSelected: CSSInterpolation;\n text: CSSInterpolation;\n} = {\n root: {\n padding: \"0\",\n height: \"32px\",\n width: \"32px\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n notSelected: {\n height: theme.scrollTo.dotNotSelectedSize,\n width: theme.scrollTo.dotNotSelectedSize,\n borderRadius: \"50%\",\n display: \"inline-block\",\n backgroundColor: theme.scrollTo.dotNotSelectedColor,\n },\n text: {\n height: theme.scrollTo.dotRootSize,\n width: theme.scrollTo.dotRootSize,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n button: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: theme.scrollTo.dotRootSize,\n width: theme.scrollTo.dotRootSize,\n borderRadius: theme.scrollTo.dotRootRadius,\n cursor: \"pointer\",\n \"&:hover\": {\n backgroundColor: theme.scrollTo.dotHoverBackgroundColor,\n\n [`& .${verticalScrollListItemClasses.notSelected}`]: {\n height: theme.scrollTo.dotHoverSize,\n width: theme.scrollTo.dotHoverSize,\n backgroundColor: theme.scrollTo.dotHoverColor,\n },\n },\n \"&:focus\": {\n outline: \"none\",\n },\n \"&:focus-visible\": {\n ...outlineStyles,\n },\n },\n};\n"],"names":["styles","root","padding","height","width","display","justifyContent","alignItems","notSelected","theme","scrollTo","dotNotSelectedSize","borderRadius","backgroundColor","dotNotSelectedColor","text","dotRootSize","button","dotRootRadius","cursor","dotHoverBackgroundColor","verticalScrollListItemClasses","dotHoverSize","dotHoverColor","outline","outlineStyles"],"mappings":";;;AAKO,MAAMA,SAKT;AAAA,EACFC,MAAM;AAAA,IACJC,SAAS;AAAA,IACTC,QAAQ;AAAA,IACRC,OAAO;AAAA,IACPC,SAAS;AAAA,IACTC,gBAAgB;AAAA,IAChBC,YAAY;AAAA,EACd;AAAA,EACAC,aAAa;AAAA,IACXL,QAAQM,MAAMC,SAASC;AAAAA,IACvBP,OAAOK,MAAMC,SAASC;AAAAA,IACtBC,cAAc;AAAA,IACdP,SAAS;AAAA,IACTQ,iBAAiBJ,MAAMC,SAASI;AAAAA,EAClC;AAAA,EACAC,MAAM;AAAA,IACJZ,QAAQM,MAAMC,SAASM;AAAAA,IACvBZ,OAAOK,MAAMC,SAASM;AAAAA,IACtBX,SAAS;AAAA,IACTC,gBAAgB;AAAA,IAChBC,YAAY;AAAA,EACd;AAAA,EACAU,QAAQ;AAAA,IACNZ,SAAS;AAAA,IACTC,gBAAgB;AAAA,IAChBC,YAAY;AAAA,IACZJ,QAAQM,MAAMC,SAASM;AAAAA,IACvBZ,OAAOK,MAAMC,SAASM;AAAAA,IACtBJ,cAAcH,MAAMC,SAASQ;AAAAA,IAC7BC,QAAQ;AAAA,IACR,WAAW;AAAA,MACTN,iBAAiBJ,MAAMC,SAASU;AAAAA,MAEhC,CAAE,MAAKC,8BAA8Bb,aAAa,GAAG;AAAA,QACnDL,QAAQM,MAAMC,SAASY;AAAAA,QACvBlB,OAAOK,MAAMC,SAASY;AAAAA,QACtBT,iBAAiBJ,MAAMC,SAASa;AAAAA,MAClC;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACTC,SAAS;AAAA,IACX;AAAA,IACA,mBAAmB;AAAA,MACjB,GAAGC;AAAAA,IACL;AAAA,EACF;AACF;"}
@@ -0,0 +1,8 @@
1
+ import { getClasses } from "../../../../utils/classes.js";
2
+ const classKeys = ["root", "notSelected", "button", "text"];
3
+ const verticalScrollListItemClasses = getClasses(classKeys, "HvVerticalScrollListItem");
4
+ const verticalScrollListItemClasses$1 = verticalScrollListItemClasses;
5
+ export {
6
+ verticalScrollListItemClasses$1 as default
7
+ };
8
+ //# sourceMappingURL=verticalScrollListItemClasses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verticalScrollListItemClasses.js","sources":["../../../../../../src/components/ScrollTo/Vertical/VerticalScrollListItem/verticalScrollListItemClasses.ts"],"sourcesContent":["import { getClasses } from \"@core/utils\";\n\nexport interface HvVerticalScrollListItemClasses {\n root?: string;\n notSelected?: string;\n button?: string;\n text?: string;\n}\n\nconst classKeys: string[] = [\"root\", \"notSelected\", \"button\", \"text\"];\n\nconst verticalScrollListItemClasses =\n getClasses<HvVerticalScrollListItemClasses>(\n classKeys,\n \"HvVerticalScrollListItem\"\n );\n\nexport default verticalScrollListItemClasses;\n"],"names":["classKeys","verticalScrollListItemClasses","getClasses"],"mappings":";AASA,MAAMA,YAAsB,CAAC,QAAQ,eAAe,UAAU,MAAM;AAEpE,MAAMC,gCACJC,WACEF,WACA,0BAA0B;AAG9B,MAAA,kCAAeC;"}
@@ -0,0 +1,8 @@
1
+ import { getClasses } from "../../../utils/classes.js";
2
+ const classKeys = ["root", "positionAbsolute", "positionFixed"];
3
+ const scrollToVerticalClasses = getClasses(classKeys, "HvScrollToVertical");
4
+ const scrollToVerticalClasses$1 = scrollToVerticalClasses;
5
+ export {
6
+ scrollToVerticalClasses$1 as default
7
+ };
8
+ //# sourceMappingURL=scrollToVerticalClasses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollToVerticalClasses.js","sources":["../../../../../src/components/ScrollTo/Vertical/scrollToVerticalClasses.ts"],"sourcesContent":["import { getClasses } from \"@core/utils\";\n\nexport interface HvScrollToVerticalClasses {\n root?: string;\n positionAbsolute?: string;\n positionFixed?: string;\n}\n\nconst classKeys: string[] = [\"root\", \"positionAbsolute\", \"positionFixed\"];\n\nconst scrollToVerticalClasses = getClasses<HvScrollToVerticalClasses>(\n classKeys,\n \"HvScrollToVertical\"\n);\n\nexport default scrollToVerticalClasses;\n"],"names":["classKeys","scrollToVerticalClasses","getClasses"],"mappings":";AAQA,MAAMA,YAAsB,CAAC,QAAQ,oBAAoB,eAAe;AAExE,MAAMC,0BAA0BC,WAC9BF,WACA,oBAAoB;AAGtB,MAAA,4BAAeC;"}
@@ -0,0 +1,103 @@
1
+ import { useState, useRef, useEffect, useCallback } from "react";
2
+ import { verticalScrollOffset, findFirstVisibleElement, isScrolledToTheBottom, getScrollTop, scrollElement } from "./utils.js";
3
+ const useScrollTo = (selectedIndexProp = 0, scrollElementId = void 0, href = false, offset = 0, options = [], onChange = void 0, direction = "column") => {
4
+ const RETRY_MAX = 5;
5
+ const [selectedIndex, setSelectedIndex] = useState(selectedIndexProp);
6
+ const scrollEle = useRef(window);
7
+ const requestedAnimationFrame = useRef(0);
8
+ const lastContainerScrollTop = useRef(0);
9
+ const selectedIndexRef = useRef(selectedIndex);
10
+ useEffect(() => {
11
+ selectedIndexRef.current = selectedIndex;
12
+ }, [selectedIndex]);
13
+ useEffect(() => {
14
+ scrollEle.current = scrollElementId && document.getElementById(scrollElementId) || window;
15
+ lastContainerScrollTop.current = verticalScrollOffset(scrollEle.current);
16
+ }, [scrollElementId]);
17
+ const checkScroll = useCallback((event) => {
18
+ if (requestedAnimationFrame.current === 0 && (window == null ? void 0 : window.requestAnimationFrame)) {
19
+ requestedAnimationFrame.current = window.requestAnimationFrame(() => {
20
+ requestedAnimationFrame.current = 0;
21
+ const firstVisibleElementIndex = findFirstVisibleElement(scrollEle.current, options, offset);
22
+ let newSelectedIndex = firstVisibleElementIndex;
23
+ if (firstVisibleElementIndex < 0) {
24
+ newSelectedIndex = 0;
25
+ }
26
+ if (newSelectedIndex < options.length - 1 && isScrolledToTheBottom(scrollEle.current)) {
27
+ newSelectedIndex += 1;
28
+ }
29
+ const containerScrollTop = getScrollTop(scrollEle.current);
30
+ const isScrollingDown = containerScrollTop > lastContainerScrollTop.current;
31
+ lastContainerScrollTop.current = containerScrollTop;
32
+ if (isScrollingDown) {
33
+ if (newSelectedIndex < selectedIndexRef.current) {
34
+ newSelectedIndex = selectedIndexRef.current;
35
+ }
36
+ } else if (newSelectedIndex > selectedIndexRef.current) {
37
+ newSelectedIndex = selectedIndexRef.current;
38
+ }
39
+ setSelectedIndex(newSelectedIndex);
40
+ onChange == null ? void 0 : onChange(event, newSelectedIndex);
41
+ });
42
+ }
43
+ }, [offset, options, onChange]);
44
+ useEffect(() => {
45
+ if (scrollEle.current) {
46
+ scrollEle.current.addEventListener("scroll", checkScroll, false);
47
+ }
48
+ return () => {
49
+ if (scrollEle.current) {
50
+ scrollEle.current.removeEventListener("scroll", checkScroll);
51
+ }
52
+ if (requestedAnimationFrame.current !== 0) {
53
+ window.cancelAnimationFrame(requestedAnimationFrame.current);
54
+ requestedAnimationFrame.current = 0;
55
+ }
56
+ };
57
+ }, [checkScroll]);
58
+ useEffect(() => {
59
+ let checkRenderedInterval;
60
+ if (href) {
61
+ const hashValue = document.location.hash.split("#")[1] || "";
62
+ const option = options.find((o) => o.value === hashValue);
63
+ if (option) {
64
+ let retry = 0;
65
+ checkRenderedInterval = setInterval(() => {
66
+ const ele = document.getElementById(option.value);
67
+ if (ele) {
68
+ scrollElement(ele, scrollEle.current, option.offset || offset);
69
+ clearInterval(checkRenderedInterval);
70
+ } else {
71
+ retry += 1;
72
+ if (retry === RETRY_MAX) {
73
+ clearInterval(checkRenderedInterval);
74
+ }
75
+ }
76
+ }, 1e3);
77
+ }
78
+ }
79
+ return () => {
80
+ clearInterval(checkRenderedInterval);
81
+ };
82
+ }, []);
83
+ const setScrollTo = (event, id, index, wrappedOnChange) => {
84
+ const option = options.find((o) => o.value === id);
85
+ if (option) {
86
+ const ele = document.getElementById(id);
87
+ if (ele) {
88
+ scrollElement(ele, scrollEle.current, option.offset || offset, direction);
89
+ }
90
+ if (href) {
91
+ window.history.pushState({}, "", `#${options[index].value}`);
92
+ }
93
+ setSelectedIndex(index);
94
+ wrappedOnChange == null ? void 0 : wrappedOnChange(index);
95
+ selectedIndexRef.current = index;
96
+ }
97
+ };
98
+ return [selectedIndex, setScrollTo];
99
+ };
100
+ export {
101
+ useScrollTo
102
+ };
103
+ //# sourceMappingURL=useScrollTo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollTo.js","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":";;AAUO,MAAMA,cAAcA,CACzBC,oBAA4B,GAC5BC,kBAAsCC,QACtCC,OAAgB,OAChBC,SAAiB,GACjBC,UAAsC,IACtCC,WAQgBJ,QAChBK,YAA8B,aAW3B;AACH,QAAMC,YAAoB;AAC1B,QAAM,CAACC,eAAeC,gBAAgB,IAAIC,SAAiBX,iBAAiB;AAEtEY,QAAAA,YAAYC,OAAmDC,MAAM;AACrEC,QAAAA,0BAA0BF,OAAO,CAAC;AAClCG,QAAAA,yBAAyBH,OAAe,CAAC;AAIzCI,QAAAA,mBAAmBJ,OAAOJ,aAAa;AAE7CS,YAAU,MAAM;AACdD,qBAAiBE,UAAUV;AAAAA,EAAAA,GAC1B,CAACA,aAAa,CAAC;AAElBS,YAAU,MAAM;AACdN,cAAUO,UACPlB,mBAAmBmB,SAASC,eAAepB,eAAe,KAAMa;AAE5CK,2BAAAA,UAAUG,qBAAqBV,UAAUO,OAAO;AAAA,EAAA,GACtE,CAAClB,eAAe,CAAC;AAEdsB,QAAAA,cAAcC,YAClB,CACEC,UAIG;AACH,QACEV,wBAAwBI,YAAY,MACpCL,iCAAQY,wBACR;AACwBP,8BAAAA,UAAUL,OAAOY,sBAAsB,MAAM;AACnEX,gCAAwBI,UAAU;AAElC,cAAMQ,2BAA2BC,wBAC/BhB,UAAUO,SACVd,SACAD,MAAM;AAGR,YAAIyB,mBAAmBF;AAGvB,YAAIA,2BAA2B,GAAG;AACb,6BAAA;AAAA,QACrB;AAKA,YACEE,mBAAmBxB,QAAQyB,SAAS,KACpCC,sBAAsBnB,UAAUO,OAAO,GACvC;AACoB,8BAAA;AAAA,QACtB;AAEMa,cAAAA,qBAAqBC,aAAarB,UAAUO,OAAO;AACnDe,cAAAA,kBACJF,qBAAqBhB,uBAAuBG;AAC9CH,+BAAuBG,UAAUa;AAGjC,YAAIE,iBAAiB;AACfL,cAAAA,mBAAmBZ,iBAAiBE,SAAS;AAC/CU,+BAAmBZ,iBAAiBE;AAAAA,UACtC;AAAA,QAAA,WACSU,mBAAmBZ,iBAAiBE,SAAS;AACtDU,6BAAmBZ,iBAAiBE;AAAAA,QACtC;AAEAT,yBAAiBmB,gBAAgB;AACjCvB,6CAAWmB,OAAOI;AAAAA,MAAgB,CACnC;AAAA,IACH;AAAA,EAEF,GAAA,CAACzB,QAAQC,SAASC,QAAQ,CAAC;AAI7BY,YAAU,MAAM;AACd,QAAIN,UAAUO,SAAS;AACrBP,gBAAUO,QAAQgB,iBAAiB,UAAUZ,aAAa,KAAK;AAAA,IACjE;AAEA,WAAO,MAAM;AACX,UAAIX,UAAUO,SAAS;AACXA,kBAAAA,QAAQiB,oBAAoB,UAAUb,WAAW;AAAA,MAC7D;AAEIR,UAAAA,wBAAwBI,YAAY,GAAG;AAClCkB,eAAAA,qBAAqBtB,wBAAwBI,OAAO;AAC3DJ,gCAAwBI,UAAU;AAAA,MACpC;AAAA,IAAA;AAAA,EACF,GACC,CAACI,WAAW,CAAC;AAGhBL,YAAU,MAAM;AACVoB,QAAAA;AAEJ,QAAInC,MAAM;AACFoC,YAAAA,YAAYnB,SAASoB,SAASC,KAAKC,MAAM,GAAG,EAAE,CAAC,KAAK;AAE1D,YAAMC,SAAStC,QAAQuC,KAAMC,CAAMA,MAAAA,EAAEC,UAAUP,SAAS;AAExD,UAAII,QAAQ;AACV,YAAII,QAAQ;AACZT,gCAAwBU,YAAY,MAAM;AACxC,gBAAMC,MAAM7B,SAASC,eAAesB,OAAOG,KAAK;AAEhD,cAAIG,KAAK;AACPC,0BAAcD,KAAKrC,UAAUO,SAASwB,OAAOvC,UAAUA,MAAM;AAC7D+C,0BAAcb,qBAAqB;AAAA,UAAA,OAC9B;AACI,qBAAA;AACT,gBAAIS,UAAUvC,WAAW;AACvB2C,4BAAcb,qBAAqB;AAAA,YACrC;AAAA,UACF;AAAA,WACC,GAAI;AAAA,MACT;AAAA,IACF;AAEA,WAAO,MAAM;AACXa,oBAAcb,qBAAqB;AAAA,IAAA;AAAA,EAKvC,GAAG,CAAE,CAAA;AAEL,QAAMc,cAAcA,CAClB3B,OAGA4B,IACAC,OACAC,oBACG;AACH,UAAMZ,SAAStC,QAAQuC,KAAMC,CAAMA,MAAAA,EAAEC,UAAUO,EAAE;AAEjD,QAAIV,QAAQ;AACJM,YAAAA,MAAM7B,SAASC,eAAegC,EAAE;AACtC,UAAIJ,KAAK;AACPC,sBACED,KACArC,UAAUO,SACVwB,OAAOvC,UAAUA,QACjBG,SAAS;AAAA,MAEb;AAEA,UAAIJ,MAAM;AACDqD,eAAAA,QAAQC,UAAU,CAAA,GAAI,IAAK,IAAGpD,QAAQiD,KAAK,EAAER,OAAO;AAAA,MAC7D;AAEApC,uBAAiB4C,KAAK;AACtBC,yDAAkBD;AAIlBrC,uBAAiBE,UAAUmC;AAAAA,IAC7B;AAAA,EAAA;AAGK,SAAA,CAAC7C,eAAe2C,WAAW;AACpC;"}
@@ -0,0 +1,76 @@
1
+ const getScrollTop = (c = window) => {
2
+ if (c === window) {
3
+ return window.scrollY || window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body.scrollTop;
4
+ }
5
+ return c.scrollTop;
6
+ };
7
+ const verticalScrollOffset = (t, c = window) => {
8
+ var _a;
9
+ if (c === window) {
10
+ return (((_a = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : _a.call(t).top) || 0) + (window.scrollY || window.pageYOffset);
11
+ }
12
+ if (getComputedStyle(c).position !== "static") {
13
+ return t.offsetTop;
14
+ }
15
+ return t.offsetTop - c.offsetTop;
16
+ };
17
+ const horizontalScrollOffset = (t, c = window) => {
18
+ var _a;
19
+ if (c === window) {
20
+ return (((_a = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : _a.call(t).left) || 0) + (window.scrollX || window.pageXOffset);
21
+ }
22
+ if (getComputedStyle(c).position !== "static") {
23
+ return t.offsetLeft;
24
+ }
25
+ return t.offsetLeft - c.offsetLeft;
26
+ };
27
+ const scrollElement = (element, container, offset = 0, direction) => {
28
+ var _a, _b;
29
+ if (direction === "row") {
30
+ const elemLeft = horizontalScrollOffset(element, container);
31
+ (_a = container == null ? void 0 : container.scrollTo) == null ? void 0 : _a.call(container, {
32
+ left: elemLeft - offset,
33
+ behavior: "smooth"
34
+ });
35
+ } else {
36
+ const elemTop = verticalScrollOffset(element, container);
37
+ (_b = container == null ? void 0 : container.scrollTo) == null ? void 0 : _b.call(container, {
38
+ top: elemTop - offset,
39
+ behavior: "smooth"
40
+ });
41
+ }
42
+ element.focus({
43
+ preventScroll: true
44
+ });
45
+ };
46
+ const isScrolledToTheBottom = (container) => {
47
+ const containerScrollTop = getScrollTop(container);
48
+ if (container === window) {
49
+ const scrollHeight = document.documentElement && document.documentElement.scrollHeight || document.body.scrollHeight;
50
+ return containerScrollTop + window.innerHeight >= scrollHeight;
51
+ }
52
+ return containerScrollTop + container.offsetHeight >= container.scrollHeight;
53
+ };
54
+ const findFirstVisibleElement = (container, options, offset) => {
55
+ const boundsTop = verticalScrollOffset(container);
56
+ let i = 0;
57
+ for (; i < options.length; i += 1) {
58
+ const ele = document.getElementById(options[i].value);
59
+ if (ele) {
60
+ const elemTop = verticalScrollOffset(ele) - (options[i].offset || offset);
61
+ if (elemTop > boundsTop) {
62
+ break;
63
+ }
64
+ }
65
+ }
66
+ return i - 1;
67
+ };
68
+ export {
69
+ findFirstVisibleElement,
70
+ getScrollTop,
71
+ horizontalScrollOffset,
72
+ isScrolledToTheBottom,
73
+ scrollElement,
74
+ verticalScrollOffset
75
+ };
76
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","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;AAlBQF;AAmBX,MAAIC,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;AAnCQF;AAoCX,MAAIC,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;AAtDQzB;AAuDX,MAAIyB,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
+ import { jsx } from "@emotion/react/jsx-runtime";
2
+ import withTooltipUtil from "../../hocs/withTooltip.js";
3
+ import { HvTypography } from "../Typography/Typography.js";
4
+ const hideTooltip = (event) => {
5
+ const isOverFlow = event.target.children.length > 1 ? Array.of(...event.target.children).some((child) => child.scrollWidth > child.clientWidth) : event.target.scrollWidth > event.target.clientWidth;
6
+ return !isOverFlow;
7
+ };
8
+ const withTooltip = (label, componentType, tooltipPosition = "top", hideOnOverflow = true) => {
9
+ const component = (props) => /* @__PURE__ */ jsx(HvTypography, {
10
+ component: componentType,
11
+ ...props,
12
+ children: props.children
13
+ });
14
+ const hideTooltipFunc = hideOnOverflow ? hideTooltip : void 0;
15
+ return withTooltipUtil(component, label, tooltipPosition, hideTooltipFunc);
16
+ };
17
+ export {
18
+ withTooltip
19
+ };
20
+ //# sourceMappingURL=withTooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withTooltip.js","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,oBAACC,cAAY;AAAA,IAACH,WAAWH;AAAAA,IAAc,GAAKI;AAAAA,IAAKd,UAC9Cc,MAAMd;AAAAA,EAAAA,CAEV;AAEKiB,QAAAA,kBAAkBL,iBAAiBhB,cAAcsB;AAEvD,SAAOC,gBAAgBN,WAAWJ,OAAOE,iBAAiBM,eAAe;AAC3E;"}
@@ -15,8 +15,8 @@ const withTooltip = (Component, label = "", placement, hideTooltip, tooltipProps
15
15
  const title = /* @__PURE__ */ jsx(HvTypography, {
16
16
  children: label
17
17
  });
18
- const handleMouseEnter = (evt) => {
19
- const isHidden = hideTooltip == null ? void 0 : hideTooltip(evt);
18
+ const handleMouseEnter = (event) => {
19
+ const isHidden = hideTooltip == null ? void 0 : hideTooltip(event);
20
20
  setIsHoverDisabled(isHidden);
21
21
  setOpen(!isHidden);
22
22
  };
@@ -45,8 +45,8 @@ const withTooltip = (Component, label = "", placement, hideTooltip, tooltipProps
45
45
  })
46
46
  });
47
47
  };
48
- const withTooltip$1 = withTooltip;
48
+ const withTooltipUtil = withTooltip;
49
49
  export {
50
- withTooltip$1 as default
50
+ withTooltipUtil as default
51
51
  };
52
52
  //# sourceMappingURL=withTooltip.js.map