@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
84 lines (83 loc) • 2.72 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const jsxRuntime = require("react/jsx-runtime");
const uikitReactUtils = require("@hitachivantara/uikit-react-utils");
const useScrollTo = require("../hooks/useScrollTo.cjs");
const keyboardUtils = require("../utils/keyboardUtils.cjs");
const setId = require("../utils/setId.cjs");
const ScrollToVertical_styles = require("./ScrollToVertical.styles.cjs");
const VerticalScrollListItem = require("./VerticalScrollListItem/VerticalScrollListItem.cjs");
const HvScrollToVertical = (props) => {
const {
id,
defaultSelectedIndex = 0,
scrollElementId,
// @ts-ignore
href = true,
navigationMode = href ? "push" : "none",
relativeLinks = false,
onChange,
onClick,
onEnter,
className,
classes: classesProp,
options,
offset = 0,
position = "relative",
tooltipPosition = "left",
style,
...others
} = uikitReactUtils.useDefaultProps("HvScrollToVertical", props);
const { classes, cx } = ScrollToVertical_styles.useClasses(classesProp);
const [selectedIndex, setScrollTo, elements] = useScrollTo.useScrollTo(
defaultSelectedIndex,
scrollElementId,
navigationMode,
relativeLinks,
offset,
options,
onChange
);
const tabs = elements.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
VerticalScrollListItem.HvVerticalScrollListItem,
{
id: setId.setId(id, `item-${index}`),
onClick: (event) => {
event.preventDefault();
setScrollTo(event, option.value, index, () => onChange?.(event, index));
onClick?.(event, index);
},
onKeyDown: (event) => {
if (keyboardUtils.isKey(event, "Enter") !== true) return;
event.preventDefault();
setScrollTo(event, option.value, index, () => onChange?.(event, index));
onEnter?.(event, index);
},
href: navigationMode !== "none" ? option.href : void 0,
tooltipPlacement: tooltipPosition,
selected: selectedIndex === index,
label: option.label
},
option.key || option.label
));
const positionOffset = ScrollToVertical_styles.calculateOffset(options.length);
return /* @__PURE__ */ jsxRuntime.jsx(
"ol",
{
className: cx(
classes.root,
{
[classes.positionFixed]: position === "fixed",
[classes.positionAbsolute]: position === "absolute"
},
className
),
style: { top: `calc(50% - ${positionOffset}px)`, ...style },
id,
...others,
children: tabs
}
);
};
exports.scrollToVerticalClasses = ScrollToVertical_styles.staticClasses;
exports.HvScrollToVertical = HvScrollToVertical;