A dragâandâdrop dashboard builder that enables nonâtechnical users to create professional data visualizations without writing code. It showcases broad KendoReact component usage, modern design, and a smooth editing workflow with data import and binding.
- Install
- Node 18+
npm install
- Run
npm run dev- Open the URL shown in your terminal
- Build
npm run build
If npm install fails with Kendo package resolution issues, clear your lockfile and try again. This project assumes Kendo packages are available from npm with a valid license (or CLI activation).
- React 18, TypeScript, Vite
- KendoReact:
@progress/kendo-react-*(Grid, Upload, Dialogs, Buttons, Inputs, Dropdowns, Layout, Notification, ProgressBar, TabStrip) - TailwindCSS (utility styling) + custom CSS (glass morphism)
- Sheet parsing: custom CSV/TSV parser (XLSX optional)
src/App.tsxâ Shell, toolbar, panes, theming, save/load, export, AI actions, delete/duplicate with Kendo Dialogsrc/main.tsxâ App entry + ErrorBoundarysrc/components/Canvas.tsxâ Dragâandâdrop canvas, node rendering (Grid/Chart/KPI/Text/Card/Image), selection, keyboard shortcuts, context menu, snapping & zoomsrc/components/PropertyPanel.tsxâ Property editing viaTabStrip- General: presets and style controls for Text/Card/Image, chart type/color/data
- Layout: position/size
- Data: dataset binders for Chart and Grid
src/components/DataImport.tsxâ CSV/TSV import, preview Grid, sample dataset, dispatchesdashboard:datasetsrc/components/SimpleChart.tsxâ Lightweight SVG charts with multiâseries supportsrc/components/ErrorBoundary.tsxâ Resilient error UIsrc/styles.cssâ Kendo theme import, Tailwind, glass variables
- Drag and position components with snapping and zoom controls
- Selection with keyboard shortcuts:
- Move: Arrow keys (1px), Shift+Arrow (10px)
- Delete: Toolbar Delete button (with confirm dialog) or Delete/Backspace
- Duplicate: Toolbar Duplicate button or Ctrl+D
- Bring to front: Ctrl+]
- Rightâclick context menu for quick actions (custom menu)
- Grid
- Chart (via
SimpleChartSVG) - KPI
- Text, Card, Image
- Import CSV/TSV/TXT (first row must be headers)
- Preview parsed data in the left panel using Kendo Grid
- Autoâbind behavior: when a node is selected and dataset is imported,
- Grid: binds headers â columns and rows â data
- Chart: builds numeric series automatically; refine in PropertyPanel
- Manual binders in PropertyPanel â Data tab:
DatasetGridBinder: choose columns and bind rows to the selected GridDatasetChartBinder: choose category and multiple numeric series
- Sample dataset button to validate endâtoâend quickly
- Note: XLSX is disabled by default to avoid env issues; can be reâenabled with SheetJS on request
- Text: color, font size, weight, alignment; presets (Title, Subtitle, Body)
- Card: background/text color, radius, padding, shadow; presets (Stat, Highlight, Soft)
- Image: alt, fit, radius, shadow; presets (Rounded, Polaroid, Shadowed)
- Dark/Light theme toggle
- Glass morphism surfaces and subtle shadows
- Minimal, clean layout with microâinteractions
- Templates dialog: load starter layouts
- Export to React code (toolbar action): outputs a self-contained
Dashboard.tsx- Includes Kendo Grid and Kendo Chart with data binding when available
- Absolute-positioned layout with glass UI
- To run the exported file in another project, install:
npm i @progress/kendo-react-grid @progress/kendo-react-charts @progress/kendo-licensing
- Toast notifications via Kendo Notification
- ProgressBar for export feedback
- Dialogs for confirmations and templates
- Import data in
DataImport:- Accepted:
.csv,.tsv,.txt - The first row becomes headers; rows become objects
{ Header: value } - Data is stored in
localStorage.dashboard_datasetand an eventdashboard:datasetis dispatched
- Accepted:
- Autoâbinding:
- If a Grid is selected, it applies
{ columns: headers, data: rows } - If a Chart is selected, it infers numeric columns and builds series
- If a Grid is selected, it applies
- PropertyPanel â Data tab:
- Grid: pick a subset of columns and click Apply
- Chart: select a category field and one or more numeric series, then Apply
If you see an empty Grid on canvas:
- Check the message inside the Grid area (no columns vs. no rows)
- Ensure you imported a dataset or loaded the sample
- In the Data tab, select columns and click Apply
- ErrorBoundary with clear failure states
- Keyboard support for selection/movement/deletion/duplication
- Highâcontrast theme and color pickers to adjust contrast
- A11y checklist in PropertyPanel â Accessibility tab
- Future: add focus outlines for canvas selection handles and ARIA labels per control
- Garbled text like
PKâĶafter upload:- You uploaded an Excel file; export to CSV (UTFâ8) and reâupload
- Chart appears empty:
- Choose numeric series in PropertyPanel â Data tab
- Grid is empty:
- Bind from Data tab â choose columns and Apply; ensure dataset has rows
- Kendo license errors:
- Use Kendo CLI activation or ensure
@progress/kendo-licensingis properly configured
- Use Kendo CLI activation or ensure
- Reâenable native XLSX parsing (SheetJS)
- Add Kendo Menu for the canvas context menu (currently custom)
- Nuclia RAG integration for documentation Q&A
- API connectors (REST/GraphQL) for live data sources
- Chart legends, axes, and tooltips (extended SVG or Kendo Chart)
- Grid column reordering, formatting (dates, currency), and sorting/filtering
- Splitter â used for resizable layout (
SplitterinApp.tsx) â - Toolbar â actions in top bar (Kendo
Buttons used; layout functions as a toolbar) â - Grid â preview (DataImport) and canvas Grid nodes â
- Dialog â templates and delete confirmation (
Dialog) â - Notification â toast feedback (
Notification) â - ProgressBar â export status (
ProgressBar) â - TabStrip â Property panel tabs (
TabStrip) â - Form Components â Inputs, ColorPicker, DropDownList, MultiSelect throughout â
- TreeView â component library palette (
TreeViewinPalette.tsx) â - Menu â on-canvas contextual editing (
MenuinCanvas.tsx) â - DragDrop â placement uses native HTML5 drag-and-drop for reliability â (Kendo DragDrop demo available)
Notes: We meet 10+ components if counting Buttons (Toolbar) + the above, but strict reading may require explicit Kendo Menu, TreeView, and DragDrop. These can be added quickly.
- Minimal, clean interface with glass morphism and microâinteractions â
- Dark/light theme toggle â
- Mobileâresponsive layout
â ïļ Partial (desktop-first, responsive refinements pending) - Professional color scheme: primary
#2563eb, background#f8fafcâ (theme variables)
- KendoReact AI component recommendations and layout optimization (custom hook in use) â
- Nuclia RAG for docs assistance
â ïļ Not yet integrated (ready to add)
- Dragâdrop component assembly (custom pointer DnD) â
- Realâtime preview and editing â
- Data binding from CSV sources; API connectors planned â
/
â ïļ - Export as production React code â
- Template gallery and sharing (templates dialog; sharing workflow pending) â
/
â ïļ - Accessibilityâfocused design (WCAG guidance, keyboard control) â
/
â ïļ
- Addresses noâcode needs, demonstrates Kendo expertise, professional polish â
npm run build- Push the
dist/folder to agh-pagesbranch or use an action (e.g., peaceiris/actions-gh-pages) to publishdist.
Notes:
- This is a Vite SPA; ensure a fallback to
index.htmlfor client-side routing if you add routes later. - Kendo packages are bundled at build time; hosting does not require license activation on the server.
Built by Bowei Tombri â https://github.com/Boweii22