npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@divya-binil/sidebar-menu

v1.1.0

Published

Display file based routing and menu

Downloads

4

Readme

Sidebar Menu Component

This package helps you create a sidebar menu while keeping file-system auto-nav routes.

Installation

Install the package using npm:

npm i @divya-binil/sidebar-menu

Usage

  1. Import the component in your Astro site layout file.

    import SidebarComponent from "@divya-binil/sidebar-menu/astro";
    import generateMenuData from '../utility';
    
    // Generate the menu data based on your project's file structure
    const menuData = generateMenuData('<directory name>');

Create a file named utility.js in the root directory of your project and add the following code to generate the menu data:

import fs from "fs";
import path from "path";

function generateMenuData(basePath, directory = "") {
  const menuData = [];

  // Read the contents of the base directory
  const files = fs.readdirSync(basePath);

  // Filter out directories
  const directories = files.filter((file) =>
    fs.statSync(path.join(basePath, file)).isDirectory()
  );

  // Filter out Markdown files (add more extensions as needed)
  const markdownFiles = files.filter(
    (file) => file.endsWith(".md") || file.endsWith(".mdx")
  );

  // Create menu items for each directory
  directories.forEach((dir) => {
    const subPath = path.join(basePath, dir);
    const submenus = generateMenuData(subPath, path.join(directory, dir)); // Pass the updated directory

    menuData.push({
      label: dir,
      submenus: submenus.length > 0 ? submenus : undefined,
    });
  });

  // Include Markdown files as menu items
  markdownFiles.forEach((file) => {
    const label = file.replace(/\.(md|mdx)$/, ""); // Use the file name without the extension as the label
    menuData.push({
      label,
      url: path.join("/", directory.replace(basePath, ""), label),
    });
  });

  return menuData;
}

export default generateMenuData;

Finally, you can call the component in your layout file and customize the styles if needed:

<SidebarComponent customLiClass="sidebar-menu-li" customUlClass="sidebar-menu-ul" menuData={menuData} />

You can add custom style adjustments by passing custom <ul> and <li> classes. If not passed, default styles will be used. Additionally, you can adjust the redirection links of each menu click in the utility.js file if the base path needs to be changed.

Feel free to customize and style your sidebar menu according to your project's requirements.