@sikka/hawa
Version:
Modern UI Kit made with Tailwind
77 lines (74 loc) • 2.24 kB
JavaScript
"use client";
// layout/docsSidebar/DocsSidebar.tsx
import React from "react";
// util/index.ts
import { clsx } from "clsx";
import { twMerge } from "tailwind-merge";
function cn(...inputs) {
return twMerge(clsx(inputs));
}
// layout/docsSidebar/DocsSidebar.tsx
var DocsSidebar = ({
currentPage: propCurrentPage,
pages,
direction
}) => {
const [activePage, setActivePage] = React.useState(pages[0]);
const handlePageClick = (page, event) => {
event.preventDefault();
setTimeout(() => {
setActivePage(page);
}, 50);
const element = document.getElementById(page);
element == null ? void 0 : element.scrollIntoView({ behavior: "smooth", block: "start" });
};
const getCurrentSection = () => {
for (let i = pages.length - 1; i >= 0; i--) {
const page = pages[i];
const element = document.getElementById(page);
const rect = element == null ? void 0 : element.getBoundingClientRect();
if (rect) {
if (rect.top < window.innerHeight && rect.bottom >= 0) {
return page;
}
}
}
return pages[0];
};
React.useEffect(() => {
const handleScroll = () => {
setActivePage(getCurrentSection());
};
window.addEventListener("scroll", handleScroll);
return () => {
window.removeEventListener("scroll", handleScroll);
};
}, []);
let selectedStyles = {
rtl: "hawa-border-r-4 hawa-border-primary hawa-border-collapse hawa-bg-gray-200",
ltr: "hawa-border-l-4 hawa-border-primary hawa-border-collapse hawa-bg-gray-200"
};
return /* @__PURE__ */ React.createElement(
"div",
{
className: "hawa-flex hawa-flex-col hawa-overflow-x-clip",
dir: direction
},
pages.map((page, index) => /* @__PURE__ */ React.createElement(
"div",
{
key: index,
className: cn(
"hawa-cursor-pointer hawa-whitespace-nowrap hawa-px-3 hawa-py-1 hawa-text-xs hawa-transition-all hover:hawa-bg-gray-100",
(propCurrentPage || activePage) === page ? selectedStyles[direction || "rtl"] : ""
),
onClick: (event) => handlePageClick(page, event)
},
page
))
);
};
export {
DocsSidebar
};
//# sourceMappingURL=index.mjs.map