ff-widget

FeedForward Widget - Universal Web Component for feedback collection. Works with any framework (React, Vue, Angular, HTML, etc.)
2,421
Install
npm install ff-widget
Latest Version:3.2.6
License:MIT
Last Updated:Nov 13, 2025
Links: npm
Maintainer: mabellini

FFWidget - Universal Feedback Widget

npm version license

Universal Web Component for collecting user feedback. Works with any framework or vanilla HTML.

✨ Features

  • 🌐 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

🚀 Quick Start

HTML (Simplest)

<!DOCTYPE html>
<html>
<head>
    <script src="https://unpkg.com/ff-widget/FFWidget.js"></script>
</head>
<body>
    <ff-widget
        api-key="your-api-key"
        context="User feedback"
        product="product-123"
        language="en"
    ></ff-widget>
</body>
</html>

React

import 'ff-widget/FFWidget.js';

function App() {
  return (
    <ff-widget
      api-key="your-api-key"
      context="User feedback"
      product="product-123"
      language="en"
    />
  );
}

Vue

<template>
  <ff-widget
    :api-key="apiKey"
    :context="context"
    :product="product"
    language="en"
  />
</template>

<script>
import 'ff-widget/FFWidget.js';

export default {
  data() {
    return {
      apiKey: 'your-api-key',
      context: 'User feedback',
      product: 'product-123'
    }
  }
}
</script>

Angular

import { Component } from '@angular/core';
import 'ff-widget/FFWidget.js';

@Component({
  selector: 'app-feedback',
  template: `
    <ff-widget
      [attr.api-key]="apiKey"
      [attr.context]="context"
      [attr.product]="product"
      language="en"
    ></ff-widget>
  `
})
export class FeedbackComponent {
  apiKey = 'your-api-key';
  context = 'User feedback';
  product = 'product-123';
}

📦 Installation

NPM

npm install ff-widget

CDN

<script src="https://unpkg.com/ff-widget/FFWidget.js"></script>

Local

Download FFWidget.js and include it in your project:

<script src="path/to/FFWidget.js"></script>

🎨 Configuration

Web Component Attributes

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')
primary-color string ❌ Primary color (default: '#3b82f6')
background-color string ❌ Background color (default: '#ffffff')
text-color string ❌ Text color (default: '#1f2937')
api-url string ❌ API endpoint URL

🔧 Advanced Usage

JavaScript API (More Control)

// Create widget instance
const widget = new FFWidget({
  api_key: 'your-api-key',
  context: 'User feedback',
  product: 'product-123',
  language: 'es',
  primary_color: '#10b981'
});

// Mount widget
widget.mount('#container');

// Update configuration without destroying
widget.updateConfig({
  context: 'New context',
  language: 'en'
});

// Destroy widget
widget.destroy();

Data Attributes (HTML Static)

<div 
  data-ff-widget
  data-api-key="your-api-key"
  data-context="User feedback"
  data-product="product-123"
  data-language="es"
></div>

<script src="FFWidget.js"></script>

🎯 Use Cases

E-commerce

<!-- After checkout -->
<ff-widget
  api-key="ecommerce-key"
  context="Order #12345 completed"
  product="checkout"
  language="en"
></ff-widget>

Blog

<!-- At end of article -->
<ff-widget
  api-key="blog-key"
  context="Article: 'How to use FFWidget'"
  product="blog"
  language="en"
></ff-widget>

SaaS Application

// After user completes action
<ff-widget
  api-key="saas-key"
  context="User exported report"
  product="analytics"
  feature="export"
  language="en"
/>

📚 Documentation

🌐 Browser Support

  • ✅ Chrome 67+ (2018)
  • ✅ Firefox 63+ (2018)
  • ✅ Safari 13.1+ (2020)
  • ✅ Edge 79+ (2020)
  • ✅ Opera 64+ (2019)

Coverage: ~96% of global users

🤝 Migration from React Component

If you were using FFWidgetReact, migration is simple:

Before:

import { FFWidgetReact } from 'ff-widget';

<FFWidgetReact
  api_key="key"
  context="context"
  product="product"
  language="es"
/>

After:

import 'ff-widget/FFWidget.js';

<ff-widget
  api-key="key"
  context="context"
  product="product"
  language="es"
/>

💡 Why Web Components?

  • ✅ 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

🐛 Troubleshooting

Widget not appearing

// Check if Web Component is registered
console.log('Registered:', !!customElements.get('ff-widget'));

// Check if script loaded
console.log('FFWidget available:', !!window.FFWidget);

TypeScript errors in React

// Add to your types file or component
declare module 'react' {
  namespace JSX {
    interface IntrinsicElements {
      'ff-widget': any;
    }
  }
}

📝 License

MIT © FeedForward Team

🔗 Links

🙋‍♂️ Support


Made with ❤️ by the FeedForward Team

Related Packages

sagegreytechnologies-nkiru-ai-chat-widget-webcomponent

Native Web Component chat widget with complete CSS isolation using Shadow DOM

1,532
wts-timepicker

Dependency-free, accessible, framework-agnostic clock-face time picker and Web C...

1,458 0
jervis-icons

Universal icon/image web component that works with any framework

30,773
wts-otp

Zero-dependency, accessible OTP, PIN, and verification-code input for JavaScript...

1,532 0
ai-chat-embed

Framework-agnostic embed wrapper for ai-suspended-ball-chat

1,933 3

Version History

Version Released License
3.2.6 MIT
3.2.5 MIT
3.2.4 MIT
3.2.3 MIT
3.2.2 MIT