Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

HTMLElements/smart-webcomponents

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒŸ Smart Web Components

npm version
npm downloads
GitHub stars
License

Modern UI Components for React, Angular, Vue, Blazor, and JavaScript.
Build data-rich, responsive applications faster with a powerful, professional-grade library.

Smart UI Banner


โœจ Features

  • ๐Ÿ“Š Data Grid & TreeGrid โ€“ Excel-like features (sorting, filtering, grouping, pivoting, spreadsheet-style editing, AI filtering, and more).
  • ๐Ÿ“† Scheduler & Gantt Chart โ€“ Full project and resource scheduling with timeline, calendar, and critical path support.
  • ๐Ÿ—‚๏ธ Docking Layout โ€“ Build dynamic dashboards with drag-and-drop panels.
  • ๐Ÿ“ Editor โ€“ Rich text editing with custom CSS support.
  • ๐Ÿƒ CardView, Kanban, Charts, Tabs, Accordion, Menu, and dozens more.
  • ๐ŸŒ 20+ Localizations included in the library for global apps.
  • โšก Framework Agnostic โ€“ Works with your stack of choice: Angular, React, Vue, Blazor, or plain JavaScript.

๐Ÿš€ Installation

Install from npm:

# JavaScript
npm install smart-webcomponents

# Angular
npm install @smart-webcomponents-angular/grid

# React
npm install smart-webcomponents-react

# Vue
npm install smart-webcomponents

๐Ÿ”ฅ Usage Examples

โœ… JavaScript

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" href="smart-webcomponents/source/styles/smart.default.css" />
  <script type="module">
    import 'smart-webcomponents/source/modules/smart.grid.js';

    window.onload = function() {
      const grid = document.querySelector('smart-grid');
      grid.dataSource = [
        { id: 1, product: 'Laptop', price: 1200 },
        { id: 2, product: 'Phone', price: 800 }
      ];
      grid.columns = [
        { label: 'ID', dataField: 'id', width: 50 },
        { label: 'Product', dataField: 'product' },
        { label: 'Price', dataField: 'price', cellsFormat: 'c2' }
      ];
    };
  </script>
</head>
<body>
  <smart-grid id="grid"></smart-grid>
</body>
</html>

โœ… Angular

// app.component.ts
 ๏ปฟimport { Component, ViewChild, AfterViewInit, ViewEncapsulation } from '@angular/core';
import { GridComponent, GridColumn, DataAdapter, Smart } from 'smart-webcomponents-angular/grid';

import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';
import { GridModule } from 'smart-webcomponents-angular/grid';

@Component({
    selector: 'app-root',
	standalone: true,
	imports: [CommonModule, GridModule, RouterOutlet],
    template: '<smart-grid  [dataSource]="dataSource" [columns]="columns" #grid></smart-grid>',
    styleUrls: ['app.component.css'],
    encapsulation: ViewEncapsulation.None
})

export class AppComponent implements AfterViewInit {	
	@ViewChild("grid", { read: GridComponent, static: false }) grid!: GridComponent;

	dataSource: any[] = [  
		  { "firstName": "Beate", "lastName": "Wilson", "productName": "Caramel Latte"},   
		  { "firstName": "Ian", "lastName": "Nodier", "productName": "Caramel Latte"},   
		  { "firstName": "Petra", "lastName": "Vileid", "productName": "Green Tea"},   
		  { "firstName": "Mayumi", "lastName": "Ohno", "productName": "Caramel Latte"},   
		  { "firstName": "Mayumi", "lastName": "Saylor", "productName": "Espresso con Panna"},   
		  { "firstName": "Regina", "lastName": "Fuller", "productName": "Caffe Americano" },  
		  { "firstName": "Regina", "lastName": "Burke", "productName": "Caramel Latte"},   
		  { "firstName": "Andrew", "lastName": "Petersen", "productName": "Caffe Americano"},  
		  { "firstName": "Martin", "lastName": "Ohno", "productName": "Espresso con Panna"},   
		  { "firstName": "Beate", "lastName": "Devling", "productName": "Green Tea"},   
		  { "firstName": "Sven", "lastName": "Devling", "productName": "Espresso Truffle"},  
		  { "firstName": "Petra", "lastName": "Burke", "productName": "Peppermint Mocha Twist"},  
		  { "firstName": "Marco", "lastName": "Johnes", "productName": "Caffe Mocha"}  
	]
	
	columns: GridColumn[] = [{
			label: 'First Name',
			dataField: 'firstName'
		},
		{
			label: 'Last Name',
			dataField: 'lastName'
		},
		{
			label: 'Product',
			dataField: 'productName'
		}
	];
	
			 
    ngAfterViewInit(): void {
	
    }
}

โœ… React

import 'smart-webcomponents-react/source/styles/smart.default.css';
import { Smart, Grid } from 'smart-webcomponents-react/grid';

function App() {

	const behavior = {
		columnResizeMode: 'growAndShrink'
	}

	const appearance = {
		alternationCount: 2,
		showRowHeader: true,
		showRowHeaderSelectIcon: true,
		showRowHeaderFocusIcon: true
	}

	const paging = {
		enabled: true
	}

	const pager = {
		visible: true
	}

	const sorting = {
		enabled: true
	}

	const editing = {
		enabled: true
	}

	const selection = {
		enabled: true,
		allowCellSelection: true,
		allowRowHeaderSelection: true,
		allowColumnHeaderSelection: true,
		mode: 'extended'
	}
	
	const dataSourceSettings = {
		dataFields: [
			'firstName: string',
			'lastName: string',
			'productName: string'
		]
	}
	
	const dataSource = [  
		  { "firstName": "Beate", "lastName": "Wilson", "productName": "Caramel Latte"},   
		  { "firstName": "Ian", "lastName": "Nodier", "productName": "Caramel Latte"},   
		  { "firstName": "Petra", "lastName": "Vileid", "productName": "Green Tea"},   
		  { "firstName": "Mayumi", "lastName": "Ohno", "productName": "Caramel Latte"},   
		  { "firstName": "Mayumi", "lastName": "Saylor", "productName": "Espresso con Panna"},   
		  { "firstName": "Regina", "lastName": "Fuller", "productName": "Caffe Americano" },  
		  { "firstName": "Regina", "lastName": "Burke", "productName": "Caramel Latte"},   
		  { "firstName": "Andrew", "lastName": "Petersen", "productName": "Caffe Americano"},  
		  { "firstName": "Martin", "lastName": "Ohno", "productName": "Espresso con Panna"},   
		  { "firstName": "Beate", "lastName": "Devling", "productName": "Green Tea"},   
		  { "firstName": "Sven", "lastName": "Devling", "productName": "Espresso Truffle"},  
		  { "firstName": "Petra", "lastName": "Burke", "productName": "Peppermint Mocha Twist"},  
		  { "firstName": "Marco", "lastName": "Johnes", "productName": "Caffe Mocha"}  
	]

	const columns = [{
		label: 'First Name',
		dataField: 'firstName'
	},
	{
		label: 'Last Name',
		dataField: 'lastName'
	},
	{
		label: 'Product',
		dataField: 'productName'
	}
	]

	return (
		<div>
			<Grid
				dataSourceSettings={dataSourceSettings}
				dataSource={dataSource}
				columns={columns}
				appearance={appearance}
				behavior={behavior}
				selection={selection}
				paging={paging}
				pager={pager}
				sorting={sorting}
				editing={editing}
			>
			</Grid>
		</div>
	);
}

export default App;

โœ… Vue

<template>
  <div class="vue-root">
    <div class="demo-description">
      The Grid in this demo displays data in a series of rows and columns. This
      is the simplest case when the Grid is bound to a local data source.
    </div>
    <smart-grid id="grid"></smart-grid>
  </div>
</template>

<script>
import { onMounted } from "vue";
import "smart-webcomponents/source/styles/smart.default.css";
import "smart-webcomponents/source/modules/smart.grid.js";

export default {
  name: "app",
  setup() {
    onMounted(() => {
      window.Smart(
        "#grid",
        class {
          get properties() {
            return {
              behavior: {
                columnResizeMode: "growAndShrink"
              },
              appearance: {
                alternationCount: 2,
                showRowHeader: true,
                showRowHeaderSelectIcon: true,
                showRowHeaderFocusIcon: true
              },
              paging: {
                enabled: true
              },
              pager: {
                visible: true
              },
              sorting: {
                enabled: true
              },
              editing: {
                enabled: true
              },
              selection: {
                enabled: true,
                allowCellSelection: true,
                allowRowHeaderSelection: true,
                allowColumnHeaderSelection: true,
                mode: "extended"
              },
              dataSource: [  
				  { "firstName": "Beate", "lastName": "Wilson", "productName": "Caramel Latte"},   
				  { "firstName": "Ian", "lastName": "Nodier", "productName": "Caramel Latte"},   
				  { "firstName": "Petra", "lastName": "Vileid", "productName": "Green Tea"},   
				  { "firstName": "Mayumi", "lastName": "Ohno", "productName": "Caramel Latte"},   
				  { "firstName": "Mayumi", "lastName": "Saylor", "productName": "Espresso con Panna"},   
				  { "firstName": "Regina", "lastName": "Fuller", "productName": "Caffe Americano" },  
				  { "firstName": "Regina", "lastName": "Burke", "productName": "Caramel Latte"},   
				  { "firstName": "Andrew", "lastName": "Petersen", "productName": "Caffe Americano"},  
				  { "firstName": "Martin", "lastName": "Ohno", "productName": "Espresso con Panna"},   
				  { "firstName": "Beate", "lastName": "Devling", "productName": "Green Tea"},   
				  { "firstName": "Sven", "lastName": "Devling", "productName": "Espresso Truffle"},  
				  { "firstName": "Petra", "lastName": "Burke", "productName": "Peppermint Mocha Twist"},  
				  { "firstName": "Marco", "lastName": "Johnes", "productName": "Caffe Mocha"}  
				],
              columns: [
                {
                  label: "First Name",
                  dataField: "firstName"
                },
                {
                  label: "Last Name",
                  dataField: "lastName"
                },
                {
                  label: "Product",
                  dataField: "productName"
                }
              ]  
            };
          }
        }
      );
    });
  }
};
</script>

<style>
body {
  min-height: 700px;
}

smart-grid {
  width: 100%;
  height: auto;
}
</style>

โœ… Blazor

@page "/grid-example"
@using Smart.Blazor

<Grid DataSource="dataSource" Columns="columns"></Grid>

@code {
    public object[] dataSource = new object[]
    {
        new { id = 1, product = "Laptop", price = 1200 },
        new { id = 2, product = "Phone", price = 800 }
    };

    public object[] columns = new object[]
    {
        new { label = "ID", dataField = "id", width = 50 },
        new { label = "Product", dataField = "product" },
        new { label = "Price", dataField = "price", cellsFormat = "c2" }
    };
}

๐Ÿ“š Documentation


๐Ÿ†• Whatโ€™s New

  • ๐ŸŒ Localizations for all components (20 languages).
  • ๐Ÿ“ˆ Gantt Chart Critical Path.
  • ๐Ÿ“ Grid Spreadsheet Extensions (bold, italic, underline, strikethrough, colors).
  • ๐Ÿ”„ Grid Transpose & AI Filtering.
  • ๐Ÿ“ฑ Number pad input editor for mobile devices.

๐Ÿค Contributing

We welcome feedback, issues, and pull requests!
Please see our contribution guidelines.


๐Ÿ“ฆ License

This project is licensed under the Commercial License.
See LICENSE for more information.


๐ŸŒ Links


๐Ÿ’ก Smart Web Components help you build applications that look modern, feel responsive, and scale with your needs.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.