A suite of 5 professional, zero-framework browser component libraries
DataTable · Gantt Chart · Charts · PDF Editor · 3D Annotator
| Package | Version | Description | npm |
|---|---|---|---|
vikcraft-datatable |
Interactive data table with virtual scroll, freeze, themes | → npm | |
vikcraft-gantt |
Full-featured Gantt chart with critical path, drag & drop | → npm | |
vikcraft-charts |
Canvas 2D charts + Three.js 3D charts, 6 themes | → npm | |
vikcraft-pdf-editor |
Browser PDF annotation editor with AI features | → npm | |
vikcraft-3d-annotator |
Professional 3D model annotator built on Three.js | → npm |
Install any package individually:
npm install vikcraft-datatable
npm install vikcraft-gantt
npm install vikcraft-charts
npm install vikcraft-pdf-editor
npm install vikcraft-3d-annotator
Or install all at once:
npm install vikcraft-datatable vikcraft-gantt vikcraft-charts vikcraft-pdf-editor vikcraft-3d-annotator
All packages are available instantly via unpkg and jsDelivr:
<!-- DataTable -->
<link rel="stylesheet" href="https://unpkg.com/vikcraft-datatable/vikcraft-data-table.css">
<script src="https://unpkg.com/vikcraft-datatable/vikcraft-data-table.js"></script>
<!-- Gantt -->
<link rel="stylesheet" href="https://unpkg.com/vikcraft-gantt/vikcraft-gantt-styles.css">
<script src="https://unpkg.com/vikcraft-gantt/vikcraft-gantt-script.js"></script>
<!-- Charts (2D) -->
<link rel="stylesheet" href="https://unpkg.com/vikcraft-charts/vikcraft-chart.css">
<script src="https://unpkg.com/vikcraft-charts/vikcraft-chart.js"></script>
<!-- PDF Editor -->
<link rel="stylesheet" href="https://unpkg.com/vikcraft-pdf-editor/VikCraftPDFEditor.css">
<script type="module" src="https://unpkg.com/vikcraft-pdf-editor/VikCraftPDFEditor.js"></script>
<!-- 3D Annotator -->
<link rel="stylesheet" href="https://unpkg.com/vikcraft-3d-annotator/vikcraft-3d-annotator.css">
<script type="module" src="https://unpkg.com/vikcraft-3d-annotator/vikcraft-3d-annotator.js"></script>
Interactive data table — virtual scrolling, column/row freeze, themes, export.
npm install vikcraft-datatable
- ✅ Virtual scrolling (100k+ rows)
- ✅ Column & row freezing
- ✅ Multi-column sort + debounced global search
- ✅ Column-level filters (string, number, date)
- ✅ Inline cell editing (text, number, dropdown, checkbox)
- ✅ Column resizing & reordering
- ✅ Row selection (single / multi / select-all)
- ✅ CSV export, clipboard copy, print
- ✅ 6 built-in themes:
darklightbluegreenoceancarbon - ✅ Column groups / spanning headers
- ✅ Row numbers, fullscreen mode, status bar
- ✅ Keyboard navigation
<link rel="stylesheet" href="node_modules/vikcraft-datatable/vikcraft-data-table.css">
<script src="node_modules/vikcraft-datatable/vikcraft-data-table.js"></script>
<div id="my-table"></div>
<script>
const table = new VikCraftDataTable('#my-table', {
data: [
{ id: 1, name: 'Alice', role: 'Engineer', salary: 95000 },
{ id: 2, name: 'Bob', role: 'Designer', salary: 75000 },
],
columns: [
{ key: 'id', label: 'ID', type: 'number', width: 60, sortable: true },
{ key: 'name', label: 'Name', type: 'string', sortable: true, filterable: true, editable: true },
{ key: 'role', label: 'Role', type: 'string', sortable: true, filterable: true },
{ key: 'salary', label: 'Salary', type: 'number', sortable: true,
render: (v) => '$' + v.toLocaleString() },
],
pageSize: 25,
theme: 'dark',
selectable: true,
showRowNumbers: true,
});
</script>
import VikCraftDataTable from 'vikcraft-datatable';
import 'vikcraft-datatable/vikcraft-data-table.css';
const table = new VikCraftDataTable('#my-table', { data, columns });
| Option | Type | Default | Description |
|---|---|---|---|
data |
Array |
[] |
Row data array |
columns |
Array |
[] |
Column definitions (see below) |
pageSize |
number |
25 |
Rows per page |
theme |
string |
'dark' |
dark / light / blue / green / ocean / carbon |
editable |
boolean |
false |
Enable inline editing |
selectable |
boolean |
false |
Enable row selection checkboxes |
showRowNumbers |
boolean |
false |
Show row index column |
virtualScroll |
boolean |
false |
Enable virtual scroll for large datasets |
frozenColumns |
number |
0 |
Columns to freeze from left |
frozenRows |
number |
0 |
Rows to freeze from top |
{
key: 'price',
label: 'Price (USD)',
type: 'number', // 'string' | 'number' | 'date' | 'boolean'
width: 120,
sortable: true,
filterable: true,
editable: true,
editType: 'number', // 'text' | 'number' | 'dropdown' | 'checkbox'
editOptions: [], // required for 'dropdown'
frozen: false,
render: (val, row) => `$${val.toFixed(2)}`,
}
table.setData(newData) // Replace all data
table.setTheme('ocean') // Change theme at runtime
table.exportCSV() // Download as CSV
table.copyToClipboard() // Copy to clipboard
table.getSelectedRows() // → Array of selected row objects
table.clearSelection() // Deselect all
table.destroy() // Remove from DOM
Feature-rich Gantt Chart — multi-level hierarchy, critical path, drag & drop, AI chat.
npm install vikcraft-gantt
- ✅ Multi-level task hierarchy (unlimited depth)
- ✅ Dual-tab view: Task timeline & User/resource view
- ✅ Drag-and-drop task resizing & moving
- ✅ Critical path highlighting
- ✅ Predecessor / successor / lag dependencies
- ✅ Today line & milestone markers
- ✅ PDF and Excel export
- ✅ AI chat assistant (Anthropic API)
- ✅ Fullscreen mode
- ✅ 6 built-in themes
- ✅ Keyboard navigation
- ✅ Day / Week / Month / Quarter / Year zoom
<link rel="stylesheet" href="node_modules/vikcraft-gantt/vikcraft-gantt-styles.css">
<script src="node_modules/vikcraft-gantt/vikcraft-gantt-script.js"></script>
<div id="my-gantt" style="height: 600px;"></div>
<script>
const tasks = [
{ id: 1, name: 'Planning', start: '2025-01-01', end: '2025-01-10', progress: 100 },
{ id: 2, name: 'Design', start: '2025-01-11', end: '2025-01-25', progress: 80, depends: [1] },
{ id: 3, name: 'Development', start: '2025-01-26', end: '2025-03-15', progress: 45, depends: [2] },
{ id: 4, name: ' Frontend', start: '2025-01-26', end: '2025-02-28', progress: 60, parent: 3 },
{ id: 5, name: ' Backend', start: '2025-02-01', end: '2025-03-15', progress: 30, parent: 3 },
{ id: 6, name: 'Testing', start: '2025-03-16', end: '2025-03-31', progress: 0, depends: [3], milestone: false },
{ id: 7, name: 'Launch 🚀', start: '2025-04-01', end: '2025-04-01', progress: 0, milestone: true },
];
const gantt = new VikCraftGantt('my-gantt', tasks, {
theme: 'dark',
scale: 'week',
showCriticalPath: true,
showToday: true,
});
</script>
import VikCraftGantt from 'vikcraft-gantt';
import 'vikcraft-gantt/vikcraft-gantt-styles.css';
const gantt = new VikCraftGantt('my-gantt', tasks, options);
{
id: 1,
name: 'Task Name',
start: '2025-01-01', // YYYY-MM-DD
end: '2025-01-15',
progress: 50, // 0–100
depends: [1, 2], // predecessor task IDs
parent: null, // parent task ID (for subtasks)
assignee: 'Alice',
milestone: false,
color: '#3b82f6',
}
| Option | Type | Default | Description |
|---|---|---|---|
theme |
string |
'dark' |
dark / light / blue / green / carbon / ocean |
scale |
string |
'week' |
day / week / month / quarter / year |
showCriticalPath |
boolean |
true |
Highlight critical path |
showToday |
boolean |
true |
Show vertical today line |
ai |
object |
null |
{ apiKey: 'sk-ant-...' } to enable AI chat |
gantt.setTasks(newTasks) // Replace tasks
gantt.setTheme('ocean') // Change theme
gantt.setScale('month') // Change time scale
gantt.exportPDF() // Download PDF
gantt.exportExcel() // Download Excel
gantt.scrollToToday() // Scroll to current date
gantt.destroy() // Remove from DOM
Canvas 2D charts + Three.js 3D charts — 10 chart types, 6 themes, animations.
npm install vikcraft-charts
# For 3D charts (optional):
npm install three
2D Charts (canvas, no dependencies)
- ✅ Bar, Horizontal Bar, Line, Area, Pie, Doughnut, Radar, Scatter, Mixed (Bar+Line)
- ✅ 6 themes:
darklightblueoceancarbongreen - ✅ Smart tick algorithm, gradient fills, rounded bars
- ✅ Staggered animation, crosshair tooltip
- ✅ Reference lines, glow lines
- ✅
update()/setTheme()/destroy()API
3D Charts (requires three peer dependency)
- ✅ 3D Bar, 3D Scatter, 3D Line / Surface
- ✅ Full Three.js scene with OrbitControls & CSS2D labels
<link rel="stylesheet" href="node_modules/vikcraft-charts/vikcraft-chart.css">
<script src="node_modules/vikcraft-charts/vikcraft-chart.js"></script>
<canvas id="myChart" width="800" height="400"></canvas>
<script>
const chart = new VikCraft('#myChart', {
type: 'bar',
theme: 'dark',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [
{ label: 'Revenue', data: [12000, 19000, 8000, 24000, 17000, 21000], color: '#3b82f6' },
{ label: 'Expenses', data: [9000, 14000, 6000, 18000, 12000, 15000], color: '#f85149' },
]
},
options: {
title: 'Monthly Performance',
yAxis: { label: 'USD' },
animate: true,
}
});
// Update data at runtime
chart.update({ labels: [...], datasets: [...] });
</script>
<script type="importmap">
{ "imports": { "three": "https://unpkg.com/three@0.160.0/build/three.module.js",
"three/addons/": "https://unpkg.com/three@0.160.0/examples/jsm/" } }
</script>
<script type="module">
import VikCraft3D from 'node_modules/vikcraft-charts/vikcraft-chart-3d.js';
const chart = new VikCraft3D('#container', {
type: '3d-bar',
data: {
labels: ['Q1', 'Q2', 'Q3', 'Q4'],
datasets: [{ label: 'Sales', data: [300, 450, 380, 520] }]
}
});
</script>
import VikCraft from 'vikcraft-charts';
import VikCraft3D from 'vikcraft-charts/vikcraft-chart-3d.js';
import 'vikcraft-charts/vikcraft-chart.css';
| Type | Description |
|---|---|
bar |
Vertical bar chart |
bar-h |
Horizontal bar chart |
line |
Line chart |
area |
Filled area chart |
pie |
Pie chart |
doughnut |
Doughnut / ring chart |
radar |
Radar / spider chart |
scatter |
Scatter / bubble chart |
mixed |
Combined bar + line |
3d-bar |
3D bar chart (VikCraft3D) |
3d-scatter |
3D scatter plot (VikCraft3D) |
chart.update(newData) // Refresh with new data
chart.setTheme('ocean') // Switch theme
chart.resize() // Manual resize trigger
chart.destroy() // Remove and clean up
Full-featured browser PDF annotation editor — PDF.js + Fabric.js + AI features.
npm install vikcraft-pdf-editor
npm install pdfjs-dist fabric jspdf
- ✅ Render & paginate PDFs (PDF.js)
- ✅ 10 annotation tools: Pen, Rectangle, Ellipse, Arrow, Line, Text Box, Stamp, Comment Pin, Cloud, Measurement
- ✅ Category tagging & comment sidebar with search/filter
- ✅ 50-step undo / redo
- ✅ Export annotated PDF with all marks baked in at correct positions
- ✅ Zoom in/out with perfect annotation alignment
- ✅ Right-click context menu with AI review
- ✅ AI features (Anthropic API):
- 💡 Auto page hints bar
- 🔍 Find missing engineering issues
- 🎯 Review annotation quality
- 🤖 Per-annotation AI review
- ✅ 6 themes
<link rel="stylesheet" href="node_modules/vikcraft-pdf-editor/VikCraftPDFEditor.css">
<!-- Peer deps via CDN -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.1/fabric.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<div id="pdf-editor" style="width:100%; height:90vh;"></div>
<script type="module">
import VikCraftPDFEditor from 'node_modules/vikcraft-pdf-editor/VikCraftPDFEditor.js';
const editor = new VikCraftPDFEditor('pdf-editor', {
pdfUrl: './document.pdf',
pdfjsLib: window.pdfjsLib,
fabric: window.fabric,
jsPDF: window.jspdf.jsPDF,
mode: 'edit', // 'edit' | 'view'
currentUser: 'Engineer',
// ai: { apiKey: 'sk-ant-...' }, // enable AI features
});
</script>
import VikCraftPDFEditor from 'vikcraft-pdf-editor';
import 'vikcraft-pdf-editor/VikCraftPDFEditor.css';
import * as pdfjsLib from 'pdfjs-dist';
import * as fabric from 'fabric';
import { jsPDF } from 'jspdf';
const editor = new VikCraftPDFEditor('pdf-editor', {
pdfUrl: './doc.pdf', pdfjsLib, fabric, jsPDF,
});
| Option | Type | Default | Description |
|---|---|---|---|
pdfUrl |
string |
— | URL or path to PDF |
pdfjsLib |
object |
— | Required. PDF.js library |
fabric |
object |
— | Required. Fabric.js library |
jsPDF |
class |
— | Required. jsPDF constructor |
mode |
string |
'edit' |
'edit' or 'view' |
currentUser |
string |
'User' |
Username on annotation cards |
ai |
object |
null |
{ apiKey: 'sk-ant-...' } |
editor.loadPdf(url) // Load a new PDF
editor.downloadAnnotatedPdf() // Export PDF with annotations baked in
editor.getAnnotations() // → array of annotation objects
editor.setAnnotations(array) // Restore saved annotations
editor.setMode('view') // Switch mode
editor.getCurrentMode() // → 'edit' | 'view'
editor.on('annotationAdded', fn) // Subscribe to events
editor.destroy() // Clean up
{
id: "vc-anno-1713000000000",
tool: "rect", // pen|rect|ellipse|arrow|line|text|stamp|pin|cloud|measure
category: "Safety",
comment: "Check weld here",
page: 1,
fabricData: { ... }, // Fabric.js object JSON (position, size, color…)
createdAt: "2026-04-15T10:00:00Z",
user: "Engineer"
}
Professional 3D model annotation library — 7 tools, CSS2D labels, AI review, undo/redo.
npm install vikcraft-3d-annotator three
- ✅ 7 annotation tools: Pin · Arrow · Callout · Measure · Text Label · Stamp · Cloud Region
- ✅ CSS2D labels that billboard-track in 3D space at all camera angles
- ✅ 7 stamp types: APPROVED · REJECTED · FOR REVIEW · DRAFT · VOID · REVISED
- ✅ 8 categories: Note · Safety · Design · Dimension · Quality · Question · Action · Reference
- ✅ Measurement tool with live preview line (metric & imperial)
- ✅ 50-step undo / redo (Ctrl+Z / Ctrl+Y)
- ✅ Model Explorer — browse scene hierarchy, select/highlight meshes
- ✅ Post-processing outline selection (OutlinePass)
- ✅ View modes: Default · Wireframe · X-Ray
- ✅ Camera presets: Front · Top · Right · ISO · Fit to Model
- ✅ Drag-and-drop GLB / GLTF model loading
- ✅ JSON export + screenshot export
- ✅ AI Assistant (Anthropic API): summarize · find issues · review quality · suggest comments
- ✅ Keyboard shortcuts for all 10 tools
- ✅ 3 modes: Edit · Comment · View
<!-- Required CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
<link rel="stylesheet" href="node_modules/vikcraft-3d-annotator/vikcraft-3d-annotator.css">
<!-- Three.js import map -->
<script type="importmap">
{
"imports": {
"three": "https://unpkg.com/three@0.160.0/build/three.module.js",
"three/addons/": "https://unpkg.com/three@0.160.0/examples/jsm/"
}
}
</script>
<div id="viewer" style="width:100%; height:90vh;"></div>
<script type="module">
import { VikCraft3DAnnotator } from 'node_modules/vikcraft-3d-annotator/vikcraft-3d-annotator.js';
import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
import { OutlinePass } from 'three/addons/postprocessing/OutlinePass.js';
import { OutputPass } from 'three/addons/postprocessing/OutputPass.js';
import { TransformControls } from 'three/addons/controls/TransformControls.js';
import { CSS2DRenderer, CSS2DObject } from 'three/addons/renderers/CSS2DRenderer.js';
const viewer = new VikCraft3DAnnotator('viewer', {
// Three.js deps (all required)
THREE, OrbitControls, EffectComposer, RenderPass, OutlinePass,
OutputPass, TransformControls, CSS2DRenderer, CSS2DObject,
gltfLoader: new GLTFLoader(),
// Model
modelUrl: './model.glb',
// Settings
mode: 'edit', // 'edit' | 'comment' | 'view'
currentUser: 'Engineer',
sceneUnitScale: 1, // 1 unit = 1 meter
displayUnits: 'metric', // 'metric' | 'imperial'
// AI (optional)
// ai: { apiKey: 'sk-ant-...', model: 'claude-opus-4-5' },
// Callbacks
onModelLoaded: () => viewer.loadAnnotations(saved),
onAnnotationAdded: (a) => api.save(a),
onAnnotationUpdated: (a) => api.update(a),
onAnnotationDeleted: (id) => api.delete(id),
});
</script>
| Option | Type | Default | Description |
|---|---|---|---|
THREE |
Module | — | Required. Three.js core |
OrbitControls |
Class | — | Required. Camera orbit |
gltfLoader |
Instance | — | Required. GLTFLoader |
EffectComposer + passes |
Classes | — | Required. Post-processing |
TransformControls |
Class | — | Required. Model gizmo |
CSS2DRenderer, CSS2DObject |
Classes | — | Required. 3D HTML labels |
modelUrl |
string |
null |
Auto-load GLB/GLTF on init |
mode |
string |
'edit' |
'edit' / 'comment' / 'view' |
currentUser |
string |
'Guest' |
User shown on cards |
sceneUnitScale |
number |
1 |
Unit → meter multiplier |
displayUnits |
string |
'metric' |
'metric' or 'imperial' |
ai |
object |
null |
{ apiKey, model } |
viewer.loadModel(url) // Load model programmatically
viewer.loadAnnotations(array) // Restore saved annotations
viewer.getAnnotations() // → copy of annotations array
viewer.setTool(name) // 'navigate'|'pin'|'arrow'|'callout'|'measure'|'text'|'stamp'|'cloud'|'erase'
viewer.setMode(mode) // 'edit' | 'comment' | 'view'
viewer.setView(preset) // 'front'|'top'|'right'|'iso'
viewer.setViewMode(mode) // 'default' | 'wireframe' | 'xray'
viewer.fitToModel() // Zoom to fit model
viewer.undo() // Undo (also Ctrl+Z)
viewer.redo() // Redo (also Ctrl+Y)
viewer.clearAllAnnotations() // Delete all annotations
viewer.clearAllMeasurements() // Delete only measurements
viewer.toggleGrid() // Toggle grid helper
viewer.toggleAxes() // Toggle axes helper
viewer.destroy() // Tear down renderer + DOM
{
id: "a3d-1713000000000-abc",
type: "pin", // pin|arrow|callout|measure|text|stamp|cloud
points: [[x, y, z], ...], // world-space coordinates
normal: [0, 1, 0],
comment: "Crack visible on edge",
category: "Safety",
color: "#E53935",
opacity: 1.0,
stampLabel: "FOR REVIEW", // stamp type only
measureLabel: "12.40 cm", // measure type only
user: "Engineer",
createdAt: "2026-04-15T10:00:00.000Z"
}
| Key | Action | Key | Action |
|---|---|---|---|
N |
Navigate | M |
Measure |
P |
Pin | X |
Text Label |
A |
Arrow | S |
Stamp |
C |
Callout | L |
Cloud Region |
E |
Erase | T |
Transform |
Ctrl+Z |
Undo | Ctrl+Y |
Redo |
Delete |
Delete selected | Esc |
Cancel / Navigate |
vikcraft-pro/
├── datatable/ ← vikcraft-datatable npm package
│ ├── package.json
│ ├── vikcraft-data-table.js
│ ├── vikcraft-data-table.css
│ └── README.md
├── gantt/ ← vikcraft-gantt npm package
│ ├── package.json
│ ├── vikcraft-gantt-script.js
│ ├── vikcraft-gantt-styles.css
│ └── README.md
├── charts/ ← vikcraft-charts npm package
│ ├── package.json
│ ├── vikcraft-chart.js
│ ├── vikcraft-chart-3d.js
│ ├── vikcraft-chart.css
│ └── README.md
├── pdf/ ← vikcraft-pdf-editor npm package
│ ├── package.json
│ ├── VikCraftPDFEditor.js
│ ├── VikCraftPDFEditor.css
│ └── README.md
├── model3d/ ← vikcraft-3d-annotator npm package
│ ├── package.json
│ ├── vikcraft-3d-annotator.js
│ ├── vikcraft-3d-annotator.css
│ └── README.md
├── package.json ← root (dev server + publish scripts)
└── README.md ← this file
# Clone / download the repo, then:
cd vikcraft-pro
npm run dev
Opens on http://localhost:3000 — full demo with all 5 components.
| URL | Page |
|---|---|
http://localhost:3000 |
Home |
http://localhost:3000/datatable |
DataTable demo |
http://localhost:3000/gantt |
Gantt demo |
http://localhost:3000/charts |
Charts demo |
http://localhost:3000/pdf |
PDF Editor demo |
http://localhost:3000/model3d |
3D Annotator demo |
# Login once
npm login
# Publish all 5 packages
npm run publish:all
# Or publish individually
npm run publish:datatable
npm run publish:gantt
npm run publish:charts
npm run publish:pdf
npm run publish:3d
Three libraries have optional Anthropic Claude AI integration:
| Library | AI Capabilities |
|---|---|
vikcraft-gantt |
Natural-language chat about your project schedule |
vikcraft-pdf-editor |
Page hints · Find missing issues · Review annotation quality · Per-annotation review |
vikcraft-3d-annotator |
Summarize all annotations · Find unaddressed issues · Review comment quality · Suggest comments |
Enable by passing ai: { apiKey: 'sk-ant-...' } to any constructor.
MIT © 2026 VikCraft Pro
All 5 packages are free to use in personal and commercial projects.