A collection of reusable React UI components for UiPath applications.
A powerful and flexible datatable component with full CRUD support, master-detail views, inline editing, and more.
Features:
- β Full CRUD operations (Create, Read, Update, Delete)
- π Master-detail view with grouping
- βοΈ Inline editing with multiple field types
- π Filtering, sorting, and pagination
- π¨ Customizable columns and styling
- π Foreign key relationship support
- π Diff viewer for change review
- β Comprehensive test coverage
A multi-file upload component that allows users to select and upload multiple files to a UiPath bucket.
Features:
- π Multiple file selection
- βοΈ Upload to UiPath buckets
- β Success/error callbacks
- π File type filtering
- π File size limits
- π Custom path support
A provider-agnostic sign-in widget that renders one button per configured authentication provider and starts login directly at that provider's IdP.
Features:
- π Built-in OIDC authorization-code redirect (CSRF
state+ PKCE) for providers like Google and UAE PASS - π§ Per-provider
onSignInoverride (sync or async) β required for SAML 2.0 backend-initiated flows - π¨ apollo-wind design-system styling, custom icons per provider
- π Product telemetry for sign-in attempts and redirect outcomes
A chat interface powered by UiPath Conversational Agents.
Features:
- π¬ Real-time streaming responses from conversational agents
- ποΈ Conversation history and management
- π¨ Built on UiPath Apollo React components
- π Powered by the UiPath TypeScript SDK
A React wrapper for the UiPath Document Understanding Validation Station.
Features:
- π Document validation and review UI as a React component
- βοΈ Handles web component loading and bucket artifact fetching
- π§© Declarative props API for all Validation Station features
A PDF viewer widget for UiPath coded apps.
Features:
- π Renders PDFs from Orchestrator Storage Buckets, Data Fabric entity attachments, or plain URLs/Blobs
- π§° Prop-toggleable toolbar, selectable text, built-in loading/error states
- π¦ pdf.js worker ships inside the package β no CDN or bundler configuration, works behind enterprise CSP/firewalls
npm install# Start development server
npm run dev
# Build all packages
npm run build
# Run linter
npm run lint
# Start Storybook
npm run storybook
# Build Storybook
npm run build-storybook# Run all tests
npm test
# Run tests in watch mode
npm test -- --watch
# Run tests with UI
npm run test:ui
# Generate coverage report
npm run test:coverageThis project uses Storybook for component documentation and development. Storybook provides an interactive UI for viewing and testing components in isolation.
npm run storybookThis will start Storybook on http://localhost:6006.
npm run build-storybookThis creates a static build of Storybook in the storybook-static directory.
Storybook is deployed to GitHub Pages by the Publish SDK package workflow on latest and beta runs; dev builds skip it.
Packages are published with the Publish SDK package workflow (Actions β Publish SDK package β Run workflow), picking the release channel with the tag dropdown:
- latest β stable release; requires
productionenvironment approval. Publishes the selected package to npm and GitHub Packages aslatestand deploys Storybook. The version must be stable (no prerelease suffix). - beta β public prerelease; requires
productionenvironment approval. Publishes to npm and GitHub Packages under thebetadist-tag and deploys Storybook βlatestis never moved. The version must be a prerelease (e.g.1.0.0-beta.2). - dev β internal build; no approval needed. Publishes only to GitHub Packages under the
devdist-tag β npm and the Storybook deploy are skipped. The version must be a prerelease; the run fails fast otherwise.
Each channel is installed by its dist-tag β no version numbers needed:
npm install @uipath/ui-widgets-pdf-viewer # latest (stable)
npm install @uipath/ui-widgets-pdf-viewer@beta # beta
npm install @uipath/ui-widgets-pdf-viewer@dev # devlatest and beta come from public npm and need no setup. dev builds exist only in GitHub Packages, so they need a classic GitHub PAT with the read:packages scope, authorized for the UiPath org (Configure SSO):
# ~/.npmrc (personal β never commit a token)
//npm.pkg.github.com/:_authToken=YOUR_TOKEN
# project .npmrc (safe to commit)
@uipath:registry=https://npm.pkg.github.comuipath-ui-widgets/
βββ packages/
β βββ conversational-agent-chat/ # Conversational agent chat widget
β βββ datatable/ # DataTable component
β βββ external-auth/ # Provider-agnostic sign-in widget
β βββ multi-file-upload/ # Multi-file upload to storage buckets
β βββ pdf-viewer/ # PDF viewer widget
β βββ validation-station/ # Document Understanding Validation Station wrapper
βββ samples/ # Sample applications
βββ package.json
This project follows testing best practices with comprehensive unit test coverage:
- Test Framework: Vitest
- Testing Library: React Testing Library
- Coverage Target: 80%+ for statements, branches, functions, and lines
Key testing principles:
- β Test behavior, not implementation
- β Use accessible queries
- β Follow AAA pattern (Arrange-Act-Assert)
- β Mock external dependencies
- β Test edge cases and error states
- React 19 - UI library
- TypeScript - Type safety
- Vite - Build tool
- ag-Grid - Data grid component
- Material-UI - UI components
- Vitest - Test runner
- React Testing Library - Component testing
The React Compiler is enabled on this project. See React Compiler documentation for more information.
Note: This will impact Vite dev & build performances.
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default defineConfig([
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ["./tsconfig.node.json", "./tsconfig.app.json"],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
]);You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from "eslint-plugin-react-x";
import reactDom from "eslint-plugin-react-dom";
export default defineConfig([
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs["recommended-typescript"],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ["./tsconfig.node.json", "./tsconfig.app.json"],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
]);