Package Exports
- @citiwave/im-disclaimer-modal
- @citiwave/im-disclaimer-modal/package.json
- @citiwave/im-disclaimer-modal/styles
- @citiwave/im-disclaimer-modal/styles.css
Readme
IM Disclaimer Modal
A React component for displaying and managing user agreements, disclaimers, and consent forms.
Features
- 🎨 Beautiful, modern UI with customizable themes and colors
- 📱 Fully responsive design
- 💾 Local storage integration for persistent user choices
- 🔒 Required and optional section support
- 🛠️ CLI tool for managing disclaimers
- ⚙️ Configurable settings per disclaimer
Installation
npm install @citiwave/im-disclaimer-modalQuick Start
import { DisclaimerModal } from '@citiwave/im-disclaimer-modal';
function App() {
return (
<DisclaimerModal
name="privacy-policy"
dataPath="src/data/disclaimers"
className="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded"
>
Open Privacy Policy
</DisclaimerModal>
);
}CLI Usage
The package includes a CLI tool for managing disclaimers. After installation, you can use the im-disclaimer command.
Initial Setup
Run the setup command to configure the default directory for storing disclaimers:
im-disclaimer setupCreating Disclaimers
Create a new disclaimer with optional properties:
im-disclaimer create privacy-policy --title "Privacy Policy" --theme dark
im-disclaimer create terms --title "Terms of Service" --default-open trueManaging Disclaimers
List all disclaimers:
im-disclaimer list
im-disclaimer list --json # Output in JSON formatUpdate disclaimer properties:
im-disclaimer set privacy-policy --theme dark --accent "#FF4444" --title "Updated Privacy Policy"Remove a disclaimer:
im-disclaimer remove privacy-policyGroup Commands
Creating a Group:
im-disclaimer group createProps Commands
View props:
im-disclaimer propsUpdate props:
im-disclaimer props:updateConfiguration
View current configuration:
im-disclaimer configUpdate default directory:
im-disclaimer config:set --default-dir "src/data/disclaimers"File Structure
The CLI creates and manages two types of files in your disclaimers directory:
1. Disclaimer Content (name.json)
{
"section-1": {
"title": "Section Title",
"required": true,
"content": {
"title": "Content Title",
"sections": [
{
"heading": "Subsection Heading",
"text": "Main text content",
"list": [
"List item 1",
"List item 2"
]
}
]
}
}
}2. Configuration (_config.json)
{
"privacy-policy": {
"title": "Privacy Policy",
"prefix": "my-app",
"defaultOpen": true,
"theme": "dark",
"accent": "#FF4444"
}
}Component Props
| Prop | Type | Description |
|---|---|---|
| name | string | Name of the disclaimer to load |
| dataPath | string | Path to the disclaimers directory |
| className | string | CSS classes for the trigger button |
| children | ReactNode | Content for the trigger button |
Advanced Usage
Custom Storage Prefix
const { isOpen, onClose } = useDisclaimer('privacy-policy', {
storagePrefix: 'my-app',
defaultOpen: true
});Theme Customization
<DisclaimerModal
name="privacy-policy"
dataPath="src/data/disclaimers"
theme="dark"
accentColor="#FF4444"
/>Manual Control
const { isOpen, onClose, setAllSectionsAgreed } = useDisclaimer('privacy-policy');
<DisclaimerModal
isOpen={isOpen}
onClose={onClose}
onAllSectionsAgreed={(agreed) => {
setAllSectionsAgreed(agreed);
// Additional handling
}}
/>Contributing
We welcome contributions! Please see our Contributing Guide for details.
License
MIT