FeedForward Widget - Universal Web Component for feedback collection. Works with any framework (React, Vue, Angular, HTML, etc.)
npm install feedfrwd-widget-floating

feedfrwd-widget-floating is an alternative version of the classic FeedForward widget, designed with enhanced features and a less intrusive floating design. This widget provides a more comprehensive feedback collection experience while maintaining a minimal footprint on your website.
- 📸 Screenshot Capture: Users can capture and annotate screenshots directly within the widget, making it easier to provide visual context with their feedback
- ✉️ Email Collection: Optional email field allows users to provide their contact information for follow-up responses
- 🎨 Floating Design: Less intrusive floating button design that expands into a full feedback form, minimizing disruption to the user experience
- 🎯 Enhanced UX: Improved three-stage feedback flow with topic selection (Problem, Suggestion, Comment) for better feedback categorization
Universal Web Component for collecting user feedback. Works with any framework or vanilla HTML.
- 🌐 Universal - Works with React, Vue, Angular, HTML, WordPress, etc.
- 🎯 Web Component - Native browser standard
- 🔄 Reactive - Auto-updates when attributes change
- 🌍 Multilanguage - English & Spanish built-in
- 🎨 Customizable - Colors, fonts, and styles
- 📱 Responsive - Mobile and desktop optimized
- 💪 Zero Dependencies - Pure vanilla JavaScript
- 🚀 Lightweight - ~15KB minified
``html`
context="User feedback"
product="product-123"
language="en"
>
`tsx
import 'feedfrwd-widget-floating/FFWidget.js';
function App() {
return (
context="User feedback"
product="product-123"
language="en"
/>
);
}
`
`vue
:context="context"
:product="product"
language="en"
/>
`
`typescript
import { Component } from '@angular/core';
import 'feedfrwd-widget-floating/FFWidget.js';
@Component({
selector: 'app-feedback',
template:
[attr.context]="context"
[attr.product]="product"
language="en"
>
`
})
export class FeedbackComponent {
apiKey = 'your-api-key';
context = 'User feedback';
product = 'product-123';
}
`bash`
npm install feedfrwd-widget-floating
`html`
Download FFWidget.js and include it in your project:
`html`
| Attribute | Type | Required | Description |
|-----------|------|----------|-------------|
| api-key | string | ✅ | API key for authentication |context
| | string | ✅ | Context describing the feedback |product
| | string | ✅ | Product ID |feature
| | string | ❌ | Feature ID (optional) |language
| | 'en' \| 'es' | ❌ | Language (default: 'en') |position
| | 'down-right' \| 'down-left' \| 'up-right' \| 'up-left' \| 'custom' | ❌ | Widget position (default: 'down-right') |custom-style
| | string | ❌ | Custom CSS styles (JSON string or CSS string). Only used when position="custom" |primary-color
| | string | ❌ | Primary color (default: '#3b82f6') |background-color
| | string | ❌ | Background color (default: '#ffffff') |text-color
| | string | ❌ | Text color (default: '#1f2937') |font-family
| | string | ❌ | Font family (default: 'Inter, -apple-system, ...') |logo
| or logo-base64 | string | ❌ | Custom logo in base64 format (default: uses built-in logo) |api-url
| | string | ❌ | API endpoint URL |
`javascript
// Create widget instance
const widget = new FFWidget({
api_key: 'your-api-key',
context: 'User feedback',
product: 'product-123',
language: 'es',
primary_color: '#10b981',
logo: 'data:image/png;base64,iVBORw0KGgo...' // Optional: custom logo
});
// Mount widget
widget.mount('#container');
// Update configuration without destroying
widget.updateConfig({
context: 'New context',
language: 'en'
});
// Destroy widget
widget.destroy();
`
The widget supports multiple positioning options:
#### Predefined Positions
`html
...
/>
...
/>
...
/>
...
/>
`
#### Custom Position
For advanced positioning, use position="custom" with custom-style:
Using JSON string:
`html`
custom-style='{"top": "50%", "left": "50%", "transform": "translate(-50%, -50%)"}'
...
/>
Using CSS string:
`html`
custom-style="top: 50%; left: 50%; transform: translate(-50%, -50%);"
...
/>
In React/TypeScript:
`tsx
const centerStyles = JSON.stringify({
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)'
});
custom-style={centerStyles}
...
/>
`
Note: If position="custom" is set without custom-style, the widget defaults to down-right position.
`html
data-feedfrwd-widget-floating
data-api-key="your-api-key"
data-context="User feedback"
data-product="product-123"
data-language="es"
>
`
`html`
context="Order #12345 completed"
product="checkout"
language="en"
>
`html`
context="Article: 'How to use FFWidget'"
product="blog"
language="en"
>
`jsx`
// After user completes action
context="User exported report"
product="analytics"
feature="export"
language="en"
/>
- Usage Guide - Detailed usage examples
- Vanilla JS Guide - HTML/JavaScript guide
- Changelog - Version history
- Examples - Live examples
- ✅ Chrome 67+ (2018)
- ✅ Firefox 63+ (2018)
- ✅ Safari 13.1+ (2020)
- ✅ Edge 79+ (2020)
- ✅ Opera 64+ (2019)
Coverage: ~96% of global users
If you were using FFWidgetReact, migration is simple:
Before:
`tsx
import { FFWidgetReact } from 'feedfrwd-widget-floating';
context="context"
product="product"
language="es"
/>
`
After:
`tsx
import 'feedfrwd-widget-floating/FFWidget.js';
context="context"
product="product"
language="es"
/>
`
- ✅ Universal - Works everywhere
- ✅ Native - Browser standard, no framework needed
- ✅ Future-proof - Won't break with framework updates
- ✅ Lightweight - No React/Vue/Angular needed
- ✅ Simple - Less code, easier to use
`javascript
// Check if Web Component is registered
console.log('Registered:', !!customElements.get('feedfrwd-widget-floating'));
// Check if script loaded
console.log('FFWidget available:', !!window.FFWidget);
`
`typescript``
// Add to your types file or component
declare module 'react' {
namespace JSX {
interface IntrinsicElements {
'feedfrwd-widget-floating': any;
}
}
}
MIT © FeedForward Team
- Email: support@feedforward.ar
- Documentation: https://docs.feedforward.ar
- Issues: https://github.com/feedforward/feedfrwd-widget-floating/issues
---
Made with ❤️ by the FeedForward Team