New:Microsoft Teams Notifications Are Now Available in Socket.Learn more →
Get Started

kineti

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install
Package version was removed
This package version has been unpublished, mostly likely due to security reasons

kineti

A React UI kit for building dashboard interfaces

unpublished
Source
npmnpm
Version
0.2.2
Version published
Weekly downloads
659
Maintainers
1
Weekly downloads
 
Created
Source

kineti

A React UI kit for building dashboard interfaces.

Provides Sidebar, Topbar, and DashboardShell layout primitives with light/dark theming via CSS variables. Fully typed, WCAG 2.1 AA compliant, and framework-agnostic for link rendering (works with React Router, Next.js, TanStack Router, etc.).

Install

npm install kineti

Peer dependencies: React 18+

Setup

Import the stylesheet once at your app root:

import 'kineti/style.css'

Wrap your app in ThemeProvider:

import { ThemeProvider } from 'kineti'

export default function App() {
  return (
    <ThemeProvider theme="light">
      {/* your app */}
    </ThemeProvider>
  )
}

Quick start

import { DashboardShell, Sidebar, Topbar, ThemeProvider } from 'kineti'
import 'kineti/style.css'

function App() {
  return (
    <ThemeProvider theme="light">
      <DashboardShell
        sidebar={
          <Sidebar>
            <Sidebar.Header>
              <strong>Acme</strong>
            </Sidebar.Header>
            <Sidebar.Section label="Main">
              <Sidebar.Item href="/" label="Dashboard" active />
              <Sidebar.Item href="/analytics" label="Analytics" />
              <Sidebar.Item href="/settings" label="Settings" disabled />
            </Sidebar.Section>
            <Sidebar.Footer>
              <span>User Profile</span>
            </Sidebar.Footer>
          </Sidebar>
        }
        topbar={
          <Topbar>
            <Topbar.Brand>Acme</Topbar.Brand>
            <Topbar.Nav>
              <Topbar.NavItem href="/dashboard" active>Dashboard</Topbar.NavItem>
              <Topbar.NavItem href="/reports">Reports</Topbar.NavItem>
            </Topbar.Nav>
            <Topbar.Actions>
              <button>Profile</button>
            </Topbar.Actions>
          </Topbar>
        }
      >
        <main style={{ padding: '2rem' }}>
          <h1>Page content</h1>
        </main>
      </DashboardShell>
    </ThemeProvider>
  )
}

Theming

Kineti uses CSS variables scoped to data-theme. ThemeProvider sets this attribute on a wrapper div and exposes useTheme for programmatic switching:

import { useTheme } from 'kineti'

function ThemeToggle() {
  const { theme, setTheme } = useTheme()
  return (
    <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
      {theme === 'light' ? 'Dark mode' : 'Light mode'}
    </button>
  )
}

Built-in themes

Kineti includes three built-in themes:

  • "light" — Light background with dark text (default)
  • "dark" — Dark background with light text
  • "glass" — Dark glassmorphism theme with backdrop blur effects

The light and dark themes are included in kineti/style.css. The glass theme ships as a separate file and must be imported explicitly:

import 'kineti/style.css'
import 'kineti/themes/glass.css'  // optional, only if using glass theme

Once imported, pass the theme name to ThemeProvider:

<ThemeProvider theme="glass">
  {/* your app */}
</ThemeProvider>

You can define custom themes by targeting [data-theme="your-theme"] and overriding the CSS variables documented in src/tokens/.

All nav items accept a renderLink prop so you can use your router's <Link> component without coupling kineti to any specific framework:

import { Link } from 'react-router-dom'

<Sidebar.Item
  href="/dashboard"
  label="Dashboard"
  renderLink={({ href, children, ...props }) => (
    <Link to={href} {...props}>{children}</Link>
  )}
/>

The same prop is available on Topbar.NavItem.

Components

DashboardShell

CSS grid shell that composes sidebar, topbar, and content into a full-viewport layout.

PropTypeDefaultDescription
sidebarReactNode—Sidebar slot
topbarReactNode—Topbar slot
childrenReactNoderequiredMain content
classNamestring—Added to root div
styleCSSProperties—Inline styles on root div

Sidebar

PropTypeDefaultDescription
collapsedbooleanfalseCollapses to icon-only width
onCollapse(c: boolean) => void—Called when collapse state should change
childrenReactNoderequired
classNamestring—

Sub-components: Sidebar.Header · Sidebar.Section · Sidebar.Item · Sidebar.Footer

Sidebar.Item

PropTypeDescription
labelstringRequired visible label
hrefstringRenders as <a> when provided
onClick() => voidRenders as <button> when no href
iconReactNodeIcon shown left of label
badgeReactNodeBadge shown right of label
activebooleanSets active styles and aria-current="page"
disabledbooleanDisables interaction
renderLink(props) => ReactElementCustom link renderer

Topbar

Sub-components: Topbar.Brand · Topbar.Nav · Topbar.NavItem · Topbar.Actions

Renders as a <header> with a built-in skip-to-main-content link for keyboard accessibility.

Topbar.NavItem

PropTypeDescription
hrefstringRenders as <a>
activebooleanSets active styles and aria-current="page"
disabledbooleanDisables interaction
renderLink(props) => ReactElementCustom link renderer

Accessibility

  • Sidebar renders as <nav aria-label="Main navigation">
  • Topbar.Nav renders as <nav aria-label="Top navigation">
  • Topbar includes a visually-hidden skip link targeting #main-content
  • DashboardShell sets id="main-content" on the <main> element
  • Active items set aria-current="page"
  • Disabled anchors set aria-disabled="true" and tabIndex={-1}
  • All interactive elements have a visible focus ring (:focus-visible)
  • Color contrast meets WCAG 2.1 AA in both light and dark themes

License

MIT

FAQs

Package last updated on 02 May 2026

Related posts