df-ae-forms-package
v1.0.12
Published
A comprehensive React form preview component library with form controls, validation, and responsive design for Angular/Ionic integration
Maintainers
Readme
DF AE Forms Package
A comprehensive React form preview component library with form controls, validation, conditional logic, and responsive design. This package provides a complete set of form components that can be used to build dynamic forms with real-time validation, conditional logic, threshold alerts, and component actions. Designed for integration with Angular/Ionic applications.
Features
- 🎨 Responsive Design: Desktop, tablet, and mobile views
- ✅ Form Validation: Real-time validation with custom error messages
- 🔧 Form Controls: Complete set of form input components (text, number, email, textarea, select, checkbox, radio, segment, date/time, signature, file upload, location, heading, instructions, section, table, datagrid)
- 🎯 Conditional Logic: Show/hide fields based on other field values
- 📊 Threshold Alerts: Visual alerts when threshold conditions are met
- 📝 Component Actions: Add notes, attachments, send emails, and raise issues for form components
- 📱 Device Preview: Preview forms in different device sizes
- 🎨 Customizable Styling: CSS variables for easy theming
- 📦 TypeScript: Full TypeScript support with comprehensive type definitions
- 🔄 Drag and Drop: Optional drag-and-drop support for form sections and grids (edit mode only)
Installation
npm install df-ae-forms-packagePeer Dependencies
This package requires the following peer dependencies to be installed in your project:
npm install react react-dom lucide-react @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilitiesNote: Translation dependencies have been removed. The package no longer requires react-i18next or i18next.
Quick Start
1. Import CSS
First, import the package styles in your application:
import 'df-ae-forms-package/dist/index.css';2. Use the Component
import React from 'react';
import { DfFormPreview, FormComponentType } from 'df-ae-forms-package';
import 'df-ae-forms-package/dist/index.css';
const formComponents: FormComponentType[] = [
{
id: 'name',
name: 'text-input',
basic: {
label: 'Full Name',
placeholder: 'Enter your full name',
defaultValue: ''
},
validation: {
required: true,
minLength: 2,
maxLength: 50
}
},
{
id: 'email',
name: 'email-input',
basic: {
label: 'Email Address',
placeholder: 'Enter your email',
defaultValue: ''
},
validation: {
required: true
}
}
];
function MyForm() {
const handleSubmit = (formData: Record<string, any>) => {
console.log('Form submitted:', formData);
};
const handleFormDataChange = (formData: Record<string, any>) => {
console.log('Form data changed:', formData);
};
return (
<DfFormPreview
formComponents={formComponents}
currentDevice="desktop"
mode="test"
onSubmit={handleSubmit}
onFormDataChange={handleFormDataChange}
/>
);
}Components
DfFormPreview
The main form preview component that renders all form controls.
Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| formComponents | FormComponentType[] | [] | Array of form components to render |
| currentDevice | 'desktop' \| 'tablet' \| 'mobile' | 'desktop' | Device type for responsive preview |
| mode | 'edit' \| 'preview' \| 'test' | 'test' | Form mode: edit (with drag-drop), preview (readonly), test (interactive) |
| initialFormData | Record<string, any> | {} | Initial form data with default values |
| onSubmit | (formData: Record<string, any>) => void | - | Callback when form is submitted |
| onFormDataChange | (formData: Record<string, any>) => void | - | Callback when form data changes |
| onComponentUpdate | (change: IFormControlChange) => void | - | Callback when a component value changes |
| selectedComponent | string \| null | null | Currently selected component ID (for edit mode) |
| formTemplateId | string | - | Form template ID (for component actions) |
| onThresholdActionCompletion | (conditionId: string, action: string, completed: boolean) => void | - | Callback when threshold action is completed |
| onThresholdIssueRaised | (conditionId: string) => void | - | Callback when threshold issue is raised |
| onNotesChange | (componentId: string, notes: string) => void | - | Callback when component notes change |
| onAttachmentChange | (componentId: string, attachments: File[]) => void | - | Callback when component attachments change |
Form Controls
The package includes the following form control components:
- DfFormInput: Text, number, and email input fields
- DfFormTextarea: Multi-line text input
- DfFormSelect: Dropdown selection
- DfFormCheckbox: Checkbox inputs
- DfFormRadio: Radio button selection
- DfFormSegment: Segment/button group selection
- DfFormDateTime: Date and time inputs
- DfFormSignature: Signature pad component
- DfFormFileUpload: File upload component
- DfFormLocation: Location picker component
- DfFormHeading: Heading component for form sections
- DfFormInstruction: Instruction text component
- DfFormSection: Section container with collapsible children
- DfFormDataGrid: Data grid component for tabular data
- DfFormTable: Table component with nested form controls
- DfFormComments: Comments component
- DfFormErrorMsg: Error message display component
Conditional Logic
You can show/hide fields based on other field values:
{
id: 'has-phone',
name: 'checkbox',
basic: {
label: 'Do you have a phone number?',
defaultValue: false
},
options: [
{ label: 'Yes', value: 'yes' }
]
},
{
id: 'phone',
name: 'text-input',
basic: {
label: 'Phone Number',
placeholder: 'Enter phone number',
defaultValue: ''
},
conditional: {
action: 'show',
when: 'all',
conditions: [{
fieldId: 'has-phone',
operator: 'equals',
value: 'yes'
}]
}
}Threshold Alerts
Components can have threshold conditions that trigger alerts:
{
id: 'temperature',
name: 'number-input',
basic: {
label: 'Temperature',
defaultValue: 0
},
threshold: {
conditions: [{
id: 'high-temp',
operator: 'greaterThan',
value: 100,
alertMessage: 'Temperature is too high!',
actions: ['notes', 'attachments', 'email']
}]
}
}Component Actions
In test mode, components can have action features:
- Notes: Add notes to components
- Attachments: Attach files to components
- Email: Send email notifications
- Raise Issue: Raise an issue for the component
Styling
The package uses CSS variables for theming. You can override these variables in your application:
:root {
--df-color-primary: #3b82f6;
--df-color-primary-hover: #2563eb;
--df-color-primary-disabled: #9ca3af;
--df-color-error-primary: #ef4444;
--df-color-success-primary: #10b981;
--df-color-text-dark: #1f2937;
--df-color-text-light: #6b7280;
--df-color-fb-container: #ffffff;
--df-color-fb-border: #e5e7eb;
--df-color-fb-bg: #f9fafb;
}Import the design system CSS to get all the base styles:
import 'df-ae-forms-package/dist/index.css';TypeScript Support
The package is fully typed with TypeScript. All types are exported:
import type {
FormComponentType,
IFormControlChange,
IFormValidationErrors,
DfFormPreviewProps,
// ... and many more
} from 'df-ae-forms-package';Development
Prerequisites
- Node.js >= 14.0.0
- npm >= 6.0.0
Setup
- Clone the repository
- Install dependencies:
cd df-ae-forms-package npm install
Available Scripts
npm run build- Build the package for productionnpm run build:watch- Build and watch for changesnpm run dev- Development mode with watchnpm run clean- Clean the dist directorynpm run lint- Run ESLintnpm run type-check- Run TypeScript type checking
Building
npm run buildThis will create the following files in the dist directory:
index.js- CommonJS buildindex.esm.js- ES modules buildindex.d.ts- TypeScript declarationsindex.css- Compiled CSS
Publishing
Prerequisites for Publishing
- NPM Account: Create an account at npmjs.com
- Login to NPM: Run
npm loginin your terminal - Package Name: Ensure the package name
df-ae-forms-packageis available
Publishing Steps
1. Prepare the Package
# Clean previous builds
npm run clean
# Build the package
npm run build
# Run type checking
npm run type-check
# Run linting
npm run lint2. Test the Package Locally
# Pack the package to test it
npm pack
# This creates a .tgz file that you can test locally
# Install it in a test project:
# npm install /path/to/df-ae-forms-package-1.0.0.tgz3. Publish to NPM
For Patch Version (1.0.0 → 1.0.1):
npm run publish:patchFor Minor Version (1.0.0 → 1.1.0):
npm run publish:minorFor Major Version (1.0.0 → 2.0.0):
npm run publish:majorManual Publishing:
# Update version manually
npm version patch # or minor, major
# Publish
npm publish4. Verify Publication
- Check your package on npmjs.com
- Test installation in a new project:
npm install df-ae-forms-package
Publishing Checklist
- [ ] All tests pass
- [ ] TypeScript compilation succeeds
- [ ] ESLint passes
- [ ] Package builds successfully
- [ ] README.md is up to date
- [ ] Version number is correct
- [ ] All dependencies are properly listed
- [ ] Package is tested locally with
npm pack
Integration with Angular/Ionic
This package is designed to work with Angular/Ionic applications.
Documentation
- Quick Start Guide - Get up and running in 5 minutes
- Complete Integration Guide - Detailed step-by-step instructions with examples
Quick Overview
Install dependencies:
npm install df-ae-forms-package react react-dom lucide-react @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilitiesImport styles in
src/global.scss:@import '~df-ae-forms-package/dist/index.css';Set up React bridge (see Integration Guide)
Load form data from API and pass to the component
For complete instructions, code examples, API integration, styling, and troubleshooting, see:
- Quick Start Guide - For a condensed setup guide
- Integration Guide - For comprehensive documentation
Troubleshooting
Styles Not Reflecting
- Make sure you're importing the CSS file:
import 'df-ae-forms-package/dist/index.css'; - Check that CSS variables are properly defined in your application
- Verify that the build includes the CSS file in the dist directory
Components Not Visible
- Check that
formComponentsarray is not empty - Verify that conditional logic is not hiding components
- Ensure that component IDs are unique
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Run the build and tests
- Submit a pull request
License
MIT License - see LICENSE file for details.
Support
For issues and questions:
- Create an issue on GitHub
- Check the documentation
- Review the examples in the README
Changelog
1.0.0
- Initial release
- Complete form preview component
- All form controls (input, textarea, select, checkbox, radio, segment, date, signature, file upload, location, heading, instructions, section, table, datagrid)
- Validation system
- Conditional logic
- Threshold alerts
- Component actions (notes, attachments, email, raise issue)
- Responsive design
- TypeScript support
- Drag and drop support (edit mode)
