Components

Pro Components

Licensed, advanced components for building production-ready applications

Explore Components

NounTable

Data Grid

Feature-rich data grid with inline editing, sorting, filtering, and keyboard navigation.

9 Cell Variants Keyboard Nav Undo/Redo
Learn more →

OAuth

Authentication

Ready-to-use OAuth integration with popular providers and token management.

Google GitHub Microsoft
Learn more →

Rich Editor

Text Editing

WYSIWYG text editor with formatting, images, and markdown support.

Markdown Images Tables
Coming soon

VirtualList

Performance

Render 10,000+ items efficiently with virtual scrolling. Only visible items are rendered.

Virtual Scroll Scroll To Dynamic Update
Learn more →

NounDateRange

Date Picker

Date range picker with quick selects, keyboard navigation, and form integration.

Quick Selects Keyboard Nav Formats
Learn more →

NounMultiSelect

Selection

Multi-select dropdown with search, async loading, and pill-style selected items.

Search Async Load Tags
Learn more →
Featured Component

NounTable

A powerful, feature-rich data grid inspired by svelte-tablecn/tablecn.com. Perfect for admin panels and data-heavy applications.

9
Cell Variants
Keyboard
Navigation
Copy
& Paste
Undo
& Redo
NounTable Usage
import { NounTable, CellVariant } from '@noundryfx/nounjs/components'

const table = new NounTable('#my-table', {
  data: [
    { id: 1, name: 'John Doe', email: 'john@example.com', age: 32, active: true },
    { id: 2, name: 'Jane Smith', email: 'jane@example.com', age: 28, active: true }
  ],
  columns: [
    { key: 'name', label: 'Name' },
    { key: 'email', label: 'Email' },
    { key: 'age', label: 'Age', meta: { variant: CellVariant.NUMBER } },
    { key: 'active', label: 'Active', meta: { variant: CellVariant.CHECKBOX } },
    {
      key: 'status',
      label: 'Status',
      meta: {
        variant: CellVariant.SELECT,
        options: [
          { value: 'active', label: 'Active' },
          { value: 'inactive', label: 'Inactive' }
        ]
      }
    }
  ],
  enableSearch: true,
  enableFiltering: true,
  enableSorting: true,
  enableRowSelection: true,
  showPagination: true
})

table.mount()

// Listen for changes
table.on('data-change', ({ data }) => {
  // Save to backend
  api.saveData(data)
})

Cell Variants

VariantDescriptionOptions
SHORT_TEXTSingle-line text input (default)-
LONG_TEXTMulti-line expandable editor-
NUMBERNumeric inputmin, max, step
DATEDate picker-
SELECTSingle dropdown selectionoptions: [{value, label}]
MULTI_SELECTMultiple selection with tagsoptions: [{value, label}]
CHECKBOXBoolean toggle-
URLLink with preview-
FILEFile attachments-

Keyboard Shortcuts

Arrow Keys Navigate
Tab Next cell
Enter Edit/confirm
Esc Cancel
Ctrl+Z Undo
Ctrl+C Copy

Full Documentation

See the Components page for complete NounTable API reference including all props, events, and methods.

Authentication

OAuth Integration

Ready-to-use OAuth components for authentication with popular providers.

Google

GitHub

Microsoft

OAuth Usage
import { OAuthButton, OAuthProvider, useAuth } from '@noundryfx/nounjs/auth'

// In your component
class LoginPage extends Component {
  template = `
    <div class="flex flex-col gap-4">
      <oauth-button provider="google">Continue with Google</oauth-button>
      <oauth-button provider="github">Continue with GitHub</oauth-button>
    </div>
  `

  mounted() {
    // Configure providers
    OAuthProvider.configure({
      google: { clientId: 'your-google-client-id' },
      github: { clientId: 'your-github-client-id' }
    })
  }
}

// Use the auth hook
const auth = useAuth()
auth.on('login', (user) => {
  console.log('Logged in:', user)
  router.navigate('/dashboard')
})

Ready to Build?

Get started with Nounjs and access all Pro components with your license.