How syncfusion/ej2-react-ui-components works
Purpose and Distribution
This is Syncfusion Essential JS 2’s React component-library source, organized as independently publishable feature packages rather than an application. Each package exposes React wrappers for a component family and corresponding theme SCSS. Primary package entry points are family barrels such as components/grids/src/index.ts, components/charts/src/index.ts, and components/inputs/src/index.ts.
React Wrapper Foundation
components/base is the shared React integration layer. Its base classes, template support, utilities, and services provide the common wrapper behavior used by feature packages:
• components/base/src/component-base.ts
• components/base/src/complex-base.ts
• components/base/src/template.ts
The architectural boundary is React JSX/props and nested children on one side, and the underlying EJ2 control implementation on the other.
Feature-Package Structure
Each domain package follows a consistent composition: package-level barrel, optional global registrations, individual control wrapper(s), and child/directive wrappers for declarative nested configuration. For example, the Grid’s control and column/aggregate definitions are separated:
• components/grids/src/index.ts
• components/grids/src/grid/grid.component.tsx
• components/grids/src/grid/columns-directive.tsx
This enables consumers to import only the packages and control features they use.
Declarative Configuration Flow
A consumer renders a React control wrapper with props and nested directive components. Wrapper components translate React lifecycle and property changes into EJ2 control configuration; directive components represent structured child collections such as series, axes, columns, rows, resources, or dialog actions. Representative complex control boundaries:
• components/charts/src/chart/chart.component.tsx
• components/charts/src/chart/series-directive.tsx
• components/schedule/src/schedule/resources-directive.tsx
Runtime events and control state flow back through the wrapper’s React-facing APIs. Application data sources, persistence, HTTP endpoints, and server behavior are consumer-provided, not implemented as repository services.
Component Domains
The repository is partitioned by product domain, with isolated implementations and exports:
• Data controls: components/grids/src/grid/grid.component.tsx, components/treegrid/src/treegrid/treegrid.component.tsx, components/pivotview/src/pivotview/pivotview.component.tsx
• Visualization: components/charts/src/chart/chart.component.tsx, components/maps/src/maps/maps.component.tsx, components/diagrams/src/diagram/diagram.component.tsx
• Editing/document surfaces: components/spreadsheet/src/spreadsheet/spreadsheet.component.tsx, components/documenteditor/src/document-editor/documenteditor.component.tsx, components/richtexteditor/src/rich-text-editor/richtexteditor.component.tsx
• General UI primitives and navigation: components/buttons/src/button/button.component.tsx, components/dropdowns/src/drop-down-list/dropdownlist.component.tsx, components/navigations/src/treeview/treeview.component.tsx
Styling and Themes
Styling is separately distributed SCSS rather than embedded in wrappers. Packages provide full and -lite theme entry files plus control-scoped styles; consumers select a compatible theme bundle. Themes include Material, Bootstrap variants, Fabric, Fluent, Tailwind, BDS, and high-contrast:
• components/grids/styles/material.scss
• components/grids/styles/grid/material.scss
• components/charts/styles/bootstrap5.scss
This is a key packaging boundary: TypeScript/TSX exports supply behavior, while explicit SCSS imports supply visual presentation.
Runtime and Build Boundaries
Source is TypeScript and TSX for React, compiled per package using local TypeScript configuration and Gulp build definitions:
• components/base/tsconfig.json
• components/grids/tsconfig.json
• components/grids/gulpfile.js
The library depends conceptually on React and Syncfusion EJ2 runtime/control packages; this repository contains the React-facing adapters and styles, not a deployable web application or backend infrastructure.
Components 21
React Foundation
Shared adapter layer between React and EJ2 controls.
- Component base · Maps React lifecycle and property changes to EJ2 controls.
components/base/src/component-base.ts - Complex directives · Supports declarative child collections.
components/base/src/complex-base.ts - Template support
components/base/src/template.ts
Feature Packages
Independently publishable React component domains.
- Grids exports
components/grids/src/index.ts - Grid wrapper
components/grids/src/grid/grid.component.tsx - Grid columns & aggregates · Declarative grid child configuration.
components/grids/src/grid/columns-directive.tsx - Charts exports
components/charts/src/index.ts - Chart wrapper
components/charts/src/chart/chart.component.tsx - Chart series · Declarative series configuration.
components/charts/src/chart/series-directive.tsx - Schedule resources · Declarative scheduling resource configuration.
components/schedule/src/schedule/resources-directive.tsx - TreeGrid & PivotView · Additional data-oriented React wrappers.
components/treegrid/src/treegrid/treegrid.component.tsx - Maps & Diagrams · Additional visualization React wrappers.
components/maps/src/maps/maps.component.tsx - Spreadsheet & editors · Spreadsheet, document, and rich-text React wrappers.
components/spreadsheet/src/spreadsheet/spreadsheet.component.tsx - UI & navigation · Buttons, dropdowns, and navigation wrappers.
components/buttons/src/button/button.component.tsx
Theme Distribution
SCSS is imported separately from component behavior.
- Grid themes · Full, lite, and control-scoped styles are separately imported.
components/grids/styles/material.scss - Chart themes
Package Build
Packages compile independently.
- Per-package compilation · Each package has local TypeScript and build definitions.
components/grids/gulpfile.js - Base TypeScript config
components/base/tsconfig.json - Grids TypeScript config
components/grids/tsconfig.json
Other components
- Consumer React app · Provides JSX, props, nested children, data, and event handlers.
- Syncfusion EJ2 runtime · Underlying control implementations are provided by EJ2 packages.
Connections 24
- Consumer React app → Grids exports: imports
- Consumer React app → Charts exports: imports
- Consumer React app → Grid wrapper: renders with props
- Consumer React app → Chart wrapper: renders with props
- Consumer React app → Grid columns & aggregates: nests directives
- Consumer React app → Chart series: nests directives
- Grids exports → Grid wrapper: exports
- Charts exports → Chart wrapper: exports
- Grid columns & aggregates → Complex directives: uses
- Chart series → Complex directives: uses
- Schedule resources → Complex directives: uses
- Grid wrapper → Component base: extends shared behavior
- Chart wrapper → Component base: extends shared behavior
- Component base → Template support: renders templates
- Component base → Syncfusion EJ2 runtime: adapts to
- TreeGrid & PivotView → Component base: uses foundation
- Maps & Diagrams → Component base: uses foundation
- Spreadsheet & editors → Component base: uses foundation
- UI & navigation → Component base: uses foundation
- Consumer React app → Grid themes: explicitly imports
- Consumer React app → Chart themes: explicitly imports
- Per-package compilation → Grids TypeScript config: uses
- Base TypeScript config → Component base: compiles
- Grids TypeScript config → Grids exports: compiles package