Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

sel-custom-app-bar

Package Overview
Dependencies
Maintainers
0
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sel-custom-app-bar

`CustomAppBar` is a highly customizable and reusable React component designed to provide a dynamic application toolbar with integrated tab navigation. The component supports both open and collapsed views, dynamically renders content for each tab, and offe

  • 0.0.9
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
91
increased by468.75%
Maintainers
0
Weekly downloads
 
Created
Source

CustomAppBar

CustomAppBar is a highly customizable and reusable React component designed to provide a dynamic application toolbar with integrated tab navigation. The component supports both open and collapsed views, dynamically renders content for each tab, and offers robust state management. It’s perfect for integrating into dashboards, administrative tools, or any application requiring a modern and responsive app bar.


Features

  • Dynamic Tabs: Add, remove, or update tabs dynamically.
  • Customizable Content: Map tabs to specific components for dynamic rendering.
  • Controlled & Uncontrolled Modes: Manage open and tabSelected states internally or via parent control.
  • Responsive Design: Compact view for icons when collapsed and full tabs when expanded.
  • Hooks Support: Easily integrate custom state management logic with useTabs.

Installation

To use CustomAppBar, install it via npm:

npm i sel-custom-app-bar

Usage

Basic Example (Uncontrolled Mode)

import React from "react";
import CustomAppBar from "custom-app-bar";
import DirectionsBoatFilledIcon from "@mui/icons-material/DirectionsBoatFilled";
import LocalPrintshopIcon from "@mui/icons-material/LocalPrintshop";
import HelpIcon from "@mui/icons-material/Help";

const tabs = [
  { key: "vessel", label: "Vessel", icon: <DirectionsBoatFilledIcon /> },
  { key: "print", label: "Print", icon: <LocalPrintshopIcon /> },
  { key: "help", label: "Help", icon: <HelpIcon /> },
];

const components = {
  vessel: <div>Vessel Content</div>,
  print: <div>Print Content</div>,
  help: <div>Help Content</div>,
};

const App = () => {
  return <CustomAppBar tabs={tabs} components={components} />;
};

export default App;

Advanced Example (Controlled Mode)

import React, { useState } from "react";
import CustomAppBar from "custom-app-bar";
import DirectionsBoatFilledIcon from "@mui/icons-material/DirectionsBoatFilled";
import LocalPrintshopIcon from "@mui/icons-material/LocalPrintshop";
import HelpIcon from "@mui/icons-material/Help";

const tabs = [
  { key: "vessel", label: "Vessel", icon: <DirectionsBoatFilledIcon /> },
  { key: "print", label: "Print", icon: <LocalPrintshopIcon /> },
  { key: "help", label: "Help", icon: <HelpIcon /> },
];

const components = {
  vessel: <div>Vessel Content</div>,
  print: <div>Print Content</div>,
  help: <div>Help Content</div>,
};

const App = () => {
  const [open, setOpen] = useState(false);
  const [tabSelected, setTabSelected] = useState({
    vessel: false,
    print: false,
    help: false,
  });

  const handleTabChange = (key: string) => {
    console.log(`Tab changed to: ${key}`);
  };

  return (
    <CustomAppBar
      tabs={tabs}
      components={components}
      open={open}
      tabSelected={tabSelected}
      setOpen={setOpen}
      setTabSelected={setTabSelected}
      onTabChange={handleTabChange}
      initialOpen={false}
      tabSelectedColor="primary"
    />
  );
};

export default App;

Props

Required Props

PropTypeDescription
tabsTabsType[]Array of tabs with key, label, and optional icon.
componentsRecord<string, ReactNode>Mapping of tab keys to their respective content.

Optional Props

PropTypeDescription
openbooleanControls whether the drawer is open (controlled mode).
tabSelectedTabStateTracks the currently selected tab (controlled mode).
setOpenDispatch<SetStateAction<boolean>>Setter for controlling the open state.
setTabSelectedDispatch<SetStateAction<TabState>>Setter for controlling the tabSelected state.
initialOpenbooleanInitial state for whether the drawer is open (uncontrolled mode).
tabSelectedColorstringCustomizes the color of the selected tab. Default is primary.
onTabChange(key: string) => voidCallback function triggered when a tab changes.

Custom Hooks

The useTabs hook provides state management for the app bar. Use it to manage the open and tabSelected states dynamically.

import { useTabs } from "custom-app-bar";

const { open, tabSelected, toggleTab } = useTabs({
  tabs,
  initialOpen: false,
  onTabChange: (key) => console.log(`Tab changed to: ${key}`),
});

Examples

Rendering Tabs Dynamically

const tabs = [
  { key: "home", label: "Home", icon: <HomeIcon /> },
  { key: "settings", label: "Settings", icon: <SettingsIcon /> },
  { key: "profile", label: "Profile", icon: <AccountCircleIcon /> },
];

const components = {
  home: <HomePage />,
  settings: <SettingsPage />,
  profile: <ProfilePage />,
};

<CustomAppBar tabs={tabs} components={components} />;

Development / Publishing

Installing Dependencies

To set up a development environment:

npm install

Building the Package

To build the package for distribution:

npm run build

Alt text


License

This software is from The University of Texas at El Paso, Systems Ecology Lab. All Rights Reserved.

FAQs

Package last updated on 10 Dec 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc