Skip to main content

🧩 Nodeblocks Frontend Blocks

The Complete Component Library for Modern Business Applications

Welcome to the Nodeblocks Frontend Blocks - a comprehensive collection of 42 production-ready React components designed to accelerate your application development. These modular, customizable blocks are the visual building blocks that bring your applications to life.


📋 Table of Contents


🎯 What Are Frontend Blocks?

Frontend Blocks are pre-built, customizable React components that serve as the visual foundation of your applications. Each block is:

  • 🎨 Fully Customizable: Adapt to your brand and design requirements
  • 🔧 Production Ready: Built with TypeScript, tested, and optimized
  • 🧩 Modular: Use individually or combine for complete features
  • Performance Optimized: Built with modern React best practices

🏗️ Component Categories

Blocks are grouped by UI job (what you build on screen), not by backend domain. Use the sidebar categories to browse.

🧭 Layout & navigation

ComponentDescription
navbarMain navigation bar with responsive design
side-navigationCollapsible sidebar navigation
breadcrumbNavigation breadcrumbs for page hierarchy
footerProfessional footer component

🔐 Authentication

ComponentDescription
sign-inUser authentication and login
sign-upNew user registration
reset-passwordPassword recovery functionality
accept-invitationAccept organization invitation flow
change-emailChange user email flow
change-passwordChange user password flow

📋 Lists & tables

ComponentDescription
list-usersUser management and listing
list-organizationsOrganization listing and management
list-invitesOrganization invitation management
list-products-tableTabular product listing
list-products-gridGrid-based product display
list-orderOrder listing and management
list-order-tableTabular order management

🔍 Detail views

ComponentDescription
view-userUser profile details
view-organizationOrganization details and information
view-productDetailed product information display
view-orderOrder details and information
view-basic-informationRead-only basic information display
view-attribute-selectionRead-only attribute selection display

📝 Forms & wizards

ComponentDescription
create-organizationOrganization creation workflow
create-productProduct creation interface
edit-productProduct edit workflow
basic-informationUser profile and information forms
edit-basic-informationEdit basic information workflow
attribute-selectionProduct attribute selection
edit-attribute-selectionEdit product attributes workflow

🔎 Search & filters

ComponentDescription
filter-search-panelAdvanced search and filtering
filter-listFilterable list components
search-by-chipsTag-based search functionality

✨ Marketing & content

ComponentDescription
heroEye-catching hero sections
faqFrequently asked questions section
meritsAchievement and merit displays
how-to-useUser guide and instruction components

💬 Communication

ComponentDescription
chat-conversationReal-time chat interface
chat-conversation-listChat conversation management

⚙️ System & feedback

ComponentDescription
settingsApplication settings interface
error-blockBeautiful error message displays
notificationsIn-app notifications

✨ Key Features

🎨 Design System Integration

  • Consistent styling across all components
  • Customizable theme system
  • Responsive design patterns
  • Modern UI/UX best practices

🔧 Developer Experience

  • TypeScript support throughout
  • Comprehensive documentation
  • Clear prop interfaces
  • Intuitive component APIs

🚀 Performance

  • Optimized for production use
  • Lazy loading support
  • Minimal bundle impact
  • Efficient rendering patterns

📱 Accessibility

  • Keyboard navigation support
  • Screen reader compatibility
  • Focus management

🚀 Getting Started

Component Installation

Each component is installed individually for maximum flexibility:

npm install @nodeblocks/frontend-navbar-block
npm install @nodeblocks/frontend-signin-block

Basic Usage

To use these components in your local development environment, import them as follows:

import {Navbar} from '@nodeblocks/frontend-navbar-block';
import {SignIn} from '@nodeblocks/frontend-signin-block';

Try the interactive live demonstration below to see them in action:

Live Editor
function Example() {
  const [data, setData] = React.useState({ email: '', password: '' });
  const [errors, setErrors] = React.useState({});

  const handleDataChange = (nextData, meta) => {
    const {[meta.name]: _removed, ...restErrors} = errors;
    let nextErrors = restErrors;

    if (meta.cause === 'blur') {
      nextErrors = {...restErrors};
      if (meta.name === 'email' && !nextData.email) nextErrors.email = 'Email is required.';
      if (meta.name === 'password' && !nextData.password) nextErrors.password = 'Password is required.';
    }

    setErrors(nextErrors);
    setData(nextData);
  };

  return (
    <div style={{ background: '#f5f5f5', borderRadius: 8, overflow: 'hidden' }}>
      <Navbar
        leftContent={<span style={{ fontWeight: 'bold', fontSize: '18px' }}>My App</span>}
        centerContent={
          <div style={{ display: 'flex', gap: '16px' }}>
            <a href="#home" style={{ textDecoration: 'none', color: '#333' }}>Home</a>
            <a href="#products" style={{ textDecoration: 'none', color: '#333' }}>Products</a>
          </div>
        }
        rightContent={
          <button style={{ padding: '6px 12px', borderRadius: 4, border: '1px solid #ccc', background: '#fff', cursor: 'pointer' }}>
            Login
          </button>
        }
      />
      
      <div style={{ padding: '20px', maxWidth: 450, margin: '0 auto' }}>
        <SignIn
          data={data}
          errors={errors}
          onDataChange={handleDataChange}
        />
      </div>
    </div>
  );
}
Result
Loading...

💡 Usage Examples

npm install @nodeblocks/frontend-navbar-block
npm install @nodeblocks/frontend-signin-block
npm install @nodeblocks/frontend-list-products-grid-block

🏪 E-commerce Application

To use these components locally, install and import them into your React application:

npm install @nodeblocks/frontend-navbar-block
npm install @nodeblocks/frontend-signin-block
npm install @nodeblocks/frontend-list-products-grid-block
import {Footer} from '@nodeblocks/frontend-footer-block';
import {ListProductsGrid} from '@nodeblocks/frontend-list-products-grid-block';
import {Navbar} from '@nodeblocks/frontend-navbar-block';

Interactive live demonstration:

Live Editor
function Example() {
  const products = [
    {
      title: 'Premium Headphones',
      subtitle: 'High-quality audio',
      imageUrl: 'https://images.unsplash.com/photo-1505740420928-5e560c06d30e?auto=format&fit=crop&w=640&q=80',
      chips: [{ label: 'New', color: 'warning' }],
      tags: [{ icon: <ShoppingCartOutlined fontSize="small" />, label: 'Electronics' }],
    },
    {
      title: 'Retro Bluetooth Speaker',
      subtitle: 'Classic design, modern sound',
      imageUrl: 'https://images.unsplash.com/photo-1545454675-3531b543be5d?auto=format&fit=crop&w=640&q=80',
      chips: [{ label: 'Hot', color: 'error' }],
      tags: [{ icon: <ShoppingCartOutlined fontSize="small" />, label: 'Audio' }],
    }
  ];

  return (
    <div style={{ background: '#f5f5f5', borderRadius: 8, overflow: 'hidden' }}>
      <Navbar
        leftContent={<span style={{ fontWeight: 'bold', fontSize: '18px' }}>E-Shop</span>}
        centerContent={
          <div style={{ display: 'flex', gap: '16px' }}>
            <a href="#home" style={{ textDecoration: 'none', color: '#333' }}>Home</a>
            <a href="#products" style={{ textDecoration: 'none', color: '#333' }}>Products</a>
          </div>
        }
        rightContent={<button style={{ padding: '6px 12px', borderRadius: 4, border: '1px solid #ccc', background: '#fff', cursor: 'pointer' }}>Cart (2)</button>}
      />
      <main style={{ display: 'flex', flexDirection: 'column', minHeight: '300px', backgroundColor: 'white', padding: '20px' }}>
        <ListProductsGrid layout="grid">
          <ListProductsGrid.Title listProductsGridTitle="Featured Products" subtitle="Latest Collection" />
          <ListProductsGrid.Items layout="grid">
            {products.map((product, idx) => (
              <ListProductsGrid.Items.GridCard key={idx} {...product} />
            ))}
          </ListProductsGrid.Items>
        </ListProductsGrid>
      </main>
      <Footer
        logoSrc="https://docs.nodeblocks.dev/img/icon-small.png"
        copyright="© 2025 Nodeblocks. All rights reserved."
        content={
          <div style={{ display: 'flex', gap: '16px' }}>
            <a href="#about" style={{ color: 'inherit', textDecoration: 'none' }}>About</a>
            <a href="#privacy" style={{ color: 'inherit', textDecoration: 'none' }}>Privacy</a>
          </div>
        }
      />
    </div>
  );
}
Result
Loading...

🏢 Enterprise Dashboard

To use these components locally, install and import them into your React application:

npm install @nodeblocks/frontend-side-navigation-block
npm install @nodeblocks/frontend-list-users-block
npm install @nodeblocks/frontend-filter-search-panel-block
import {FilterSearchPanel} from '@nodeblocks/frontend-filter-search-panel-block';
import {ListUsers} from '@nodeblocks/frontend-list-users-block';
import {SideNavigation} from '@nodeblocks/frontend-side-navigation-block';

Interactive live demonstration:

Live Editor
function Example() {
  const [isMenuOpen, setIsMenuOpen] = React.useState(true);
  const [filters, setFilters] = React.useState([
    { label: 'Active', key: 'status-active', groupName: 'Status' },
    { label: 'Admin', key: 'role-admin', groupName: 'Role' }
  ]);
  const [page, setPage] = React.useState(1);

  const handleRemoveFilter = (filter) => {
    setFilters(prev => prev.filter(f => f.key !== filter.key));
  };

  const handleSearch = ({ search }) => {
    if (search.trim()) {
      setFilters(prev => [...prev, { label: search, key: `search-${search}`, groupName: 'Search' }]);
    }
  };

  const users = [
    {
      id: '1',
      name: 'John Smith',
      createdAt: '2026-01-15T10:30:00Z',
      status: 'active'
    },
    {
      id: '2',
      name: 'Sarah Johnson',
      createdAt: '2026-01-14T09:15:00Z',
      status: 'inactive'
    }
  ];

  const labels = {
    emptyStateMessage: 'No users found',
    searchFieldPlaceholder: 'Search users...',
    headerRow: {
      name: 'Name',
      createdAt: 'Created At',
      status: 'Status',
    },
    cellData: {
      statusActive: 'Active',
      statusInactive: 'Inactive',
    },
  };

  return (
    <div style={{ display: 'flex', background: '#fafafa', borderRadius: 8, overflow: 'hidden', minHeight: '400px' }}>
      <SideNavigation
        isFloating={false}
        isMenuOpen={isMenuOpen}
        setIsMenuOpen={setIsMenuOpen}
        sx={{ minHeight: '570px' }}
        header={{ icon: HomeOutlined, text: 'Admin Portal', href: '#home' }}
        links={[
          { icon: DashboardOutlined, text: 'Dashboard', href: '#dashboard' },
          { icon: PersonOutlined, text: 'Users', href: '#users', isActive: true },
          { icon: SettingsOutlined, text: 'Settings', href: '#settings' },
        ]}
      />
      <main style={{ flex: 1, padding: '24px', display: 'flex', flexDirection: 'column', gap: '20px' }}>
        <FilterSearchPanel
          filters={filters}
          onClickRemoveFilter={handleRemoveFilter}
          onClickFilterButton={() => alert('Filter settings opened')}
          onSearch={handleSearch}
          searchPlaceholder="Search users..."
          noFilterText="No active filters"
          filterLabel="Filters"
        >
          <FilterSearchPanel.SearchInput />
          <FilterSearchPanel.ActionGroup />
        </FilterSearchPanel>

        <ListUsers
          listUsersTitle="User Directory"
          labels={labels}
          data={users}
          pagination={{
            currentPage: page,
            totalPages: 1,
            onPageChange: setPage,
          }}
        />
      </main>
    </div>
  );
}
Result
Loading...

📈 Benefits

⚡ Speed

  • Reduce development time by 70%
  • Skip the tedious UI development
  • Focus on business logic

🎨 Quality

  • Production-tested components
  • Consistent design language
  • Professional appearance

🔧 Flexibility

  • Mix and match components
  • Customize to your needs
  • Extend with your own blocks

💰 Cost Effective

  • Lower development costs
  • Faster time to market
  • Reduced maintenance overhead

Built with ❤️ by the Nodeblocks team at Basal