{"_id":"@bernierllc/feedback-ui","_rev":"9-10d55a14406357f0ca1a224152d87531","name":"@bernierllc/feedback-ui","dist-tags":{"latest":"0.7.0"},"versions":{"0.2.0":{"name":"@bernierllc/feedback-ui","version":"0.2.0","keywords":["react","feedback","ui","components","forms","connectors"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/feedback-ui@0.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"0791415da92ac64ac421d767f3f41f5d5e34df64","tarball":"https://registry.npmjs.org/@bernierllc/feedback-ui/-/feedback-ui-0.2.0.tgz","fileCount":25,"integrity":"sha512-9yye2IuJnBBc7AY8QfAv9JYhRoxKWEBbx1cLO6/UfcMWutV0JaPbHaypMz3mISPVJv92iaUSB2uRndVfCWOSYA==","signatures":[{"sig":"MEQCICSzgGEc6WcklOIHpM8hghTcLHNi9tqCw93ClwpAduU/AiAIhr8/olgyewlAPvAOB9rTILp+4oBD66InJwTIsXMIBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47074},"main":"dist/index.js","_from":"file:bernierllc-feedback-ui-0.2.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/tmp/ebfdc7dbe866c03cc579603ae0431ebc/bernierllc-feedback-ui-0.2.0.tgz","_integrity":"sha512-9yye2IuJnBBc7AY8QfAv9JYhRoxKWEBbx1cLO6/UfcMWutV0JaPbHaypMz3mISPVJv92iaUSB2uRndVfCWOSYA==","bernierllc":{"integration":{"logger":"optional","neverhub":"not-applicable","docsIntegration":"ready"}},"_npmVersion":"11.7.0","description":"Configurable React feedback UI components with multiple integration methods and connector system","directories":{},"_nodeVersion":"20.19.6","dependencies":{"react":"^18.0.0","react-dom":"^18.0.0","lucide-react":"^0.263.1"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@testing-library/react":"^13.4.0","jest-environment-jsdom":"^29.5.0","@testing-library/jest-dom":"^6.1.3","@typescript-eslint/parser":"^6.0.0","@testing-library/user-event":"^14.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/feedback-ui_0.2.0_1766087524910_0.22525607221686839","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bernierllc/feedback-ui","version":"0.4.0","keywords":["react","feedback","ui","components","forms","connectors"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/feedback-ui@0.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"f1cafb8fe4050cee7fc812365fb465e38ee43282","tarball":"https://registry.npmjs.org/@bernierllc/feedback-ui/-/feedback-ui-0.4.0.tgz","fileCount":25,"integrity":"sha512-Z3mHUOiup6+QC+ih+st0CHrj2GY36XKjlnJuCkNJmPTSdUy5caONbQvSoJ1BsR/T7kS2+K5R4hwJdVb3gRE7Kg==","signatures":[{"sig":"MEYCIQCEttp4rjTHLXFVBTx35JTmQ34Vh0h3b6GabY9sXAZymgIhAPakHrKoRTdAXqnHQIuxEnDaMwDwgBzwpt2uZUsl6tLI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47179},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"683786f5b043d9a96c9f49ed1f04f9dccd79eed3","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b278ceb3-f055-4e48-b175-83a70807d28a"}},"bernierllc":{"integration":{"logger":"optional","neverhub":"not-applicable","docsIntegration":"ready"}},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Configurable React feedback UI components with multiple integration methods and connector system","directories":{},"_nodeVersion":"20.19.6","dependencies":{"react":"^18.0.0","react-dom":"^18.0.0","lucide-react":"^0.263.1"},"publishConfig":{"access":"restricted","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@testing-library/react":"^13.4.0","jest-environment-jsdom":"^29.5.0","@testing-library/jest-dom":"^6.1.3","@typescript-eslint/parser":"^6.0.0","@testing-library/user-event":"^14.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/feedback-ui_0.4.0_1767644255580_0.4298457348725686","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@bernierllc/feedback-ui","version":"0.4.1","keywords":["react","feedback","ui","components","forms","connectors"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/feedback-ui@0.4.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"ef98b7867dad1864ce6216d8123f704f1f3e56b6","tarball":"https://registry.npmjs.org/@bernierllc/feedback-ui/-/feedback-ui-0.4.1.tgz","fileCount":25,"integrity":"sha512-urUghoY/gqrE+gOvoon8gPnTp8rsizZ3rM8zmrcAQ4S/QpxEihCmPvbgOLIn0idqLIKKMM8zCjZF0nlLZNIzRw==","signatures":[{"sig":"MEUCIQDl+G21hsf1i8S3f/twccC8J7ZocGtuQQApkc9LjiJtMQIgWeGDOV6kbzkEy1hBZ2Gsun6ILFFIqpoDQfCAgfrutC8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47117},"main":"dist/index.js","_from":"file:bernierllc-feedback-ui-0.4.1.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b278ceb3-f055-4e48-b175-83a70807d28a"}},"_resolved":"/tmp/9e577f6be6a52f83f10cfce0f6f18d62/bernierllc-feedback-ui-0.4.1.tgz","_integrity":"sha512-urUghoY/gqrE+gOvoon8gPnTp8rsizZ3rM8zmrcAQ4S/QpxEihCmPvbgOLIn0idqLIKKMM8zCjZF0nlLZNIzRw==","bernierllc":{"integration":{"logger":"optional","neverhub":"not-applicable","docsIntegration":"ready"}},"_npmVersion":"11.11.0","description":"Configurable React feedback UI components with multiple integration methods and connector system","directories":{},"_nodeVersion":"20.20.0","dependencies":{"react":"^18.0.0","react-dom":"^18.0.0","lucide-react":"^0.263.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@testing-library/react":"^13.4.0","jest-environment-jsdom":"^29.5.0","@testing-library/jest-dom":"^6.1.3","@typescript-eslint/parser":"^6.0.0","@testing-library/user-event":"^14.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/feedback-ui_0.4.1_1773078146880_0.8984821345893841","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@bernierllc/feedback-ui","version":"0.4.2","keywords":["react","feedback","ui","components","forms","connectors"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/feedback-ui@0.4.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"f8ff9ea971b628eaf80d544124939cec5e50388a","tarball":"https://registry.npmjs.org/@bernierllc/feedback-ui/-/feedback-ui-0.4.2.tgz","fileCount":25,"integrity":"sha512-StkAsKla6ohf1y3XmILhHQQzvtFjGaoMP3ltdBONbzoSl1J9AXggM+ReGSHWVH+ifloNm8b7aDSe2xWsw1RxQw==","signatures":[{"sig":"MEQCIDKve1MJZDiJM4uTrKOy8MDdDGMK2+r4CvQN1q/FoRH9AiAWl9GOUYVLjERuk/n8A/wpWloFAcIYufluPw0CbJebxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47117},"main":"dist/index.js","_from":"file:bernierllc-feedback-ui-0.4.2.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b278ceb3-f055-4e48-b175-83a70807d28a"}},"_resolved":"/home/runner/work/tools/tools/packages/ui/feedback-ui/bernierllc-feedback-ui-0.4.2.tgz","_integrity":"sha512-StkAsKla6ohf1y3XmILhHQQzvtFjGaoMP3ltdBONbzoSl1J9AXggM+ReGSHWVH+ifloNm8b7aDSe2xWsw1RxQw==","bernierllc":{"integration":{"logger":"optional","neverhub":"not-applicable","docsIntegration":"ready"}},"_npmVersion":"11.11.0","description":"Configurable React feedback UI components with multiple integration methods and connector system","directories":{},"_nodeVersion":"20.20.0","dependencies":{"react":"^18.0.0","react-dom":"^18.0.0","lucide-react":"^0.263.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@testing-library/react":"^13.4.0","jest-environment-jsdom":"^29.5.0","@testing-library/jest-dom":"^6.1.3","@typescript-eslint/parser":"^6.0.0","@testing-library/user-event":"^14.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/feedback-ui_0.4.2_1773163806270_0.21196723777343673","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bernierllc/feedback-ui","version":"0.5.0","keywords":["react","feedback","ui","components","forms","connectors"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/feedback-ui@0.5.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"89c005f60f9a7d81f998f92203e276c7c237bcc9","tarball":"https://registry.npmjs.org/@bernierllc/feedback-ui/-/feedback-ui-0.5.0.tgz","fileCount":25,"integrity":"sha512-rprWepbUIq4Mw/FL1N80PnGtXV0H0jdqs5kM9vXRpb2tnv6Et99CpFf4U6J7e7UdiHdZBqnLd2Qebuuktnl+qw==","signatures":[{"sig":"MEQCIGFln118OainC1xjAPd6880fyyce3gUWuRlENhWXFy3TAiAy0yq9seB36RryY++999XJ5WZ1vTt/3LV4BS/+49EyTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47117},"main":"dist/index.js","_from":"file:bernierllc-feedback-ui-0.5.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b278ceb3-f055-4e48-b175-83a70807d28a"}},"_resolved":"/home/runner/work/tools/tools/packages/ui/feedback-ui/bernierllc-feedback-ui-0.5.0.tgz","_integrity":"sha512-rprWepbUIq4Mw/FL1N80PnGtXV0H0jdqs5kM9vXRpb2tnv6Et99CpFf4U6J7e7UdiHdZBqnLd2Qebuuktnl+qw==","bernierllc":{"integration":{"logger":"optional","neverhub":"not-applicable","docsIntegration":"ready"}},"_npmVersion":"11.14.1","description":"Configurable React feedback UI components with multiple integration methods and connector system","directories":{},"_nodeVersion":"20.20.2","dependencies":{"react":"^18.0.0","react-dom":"^18.0.0","lucide-react":"^0.263.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@testing-library/react":"^13.4.0","jest-environment-jsdom":"^29.5.0","@testing-library/jest-dom":"^6.1.3","@typescript-eslint/parser":"^6.0.0","@testing-library/user-event":"^14.4.3","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/feedback-ui_0.5.0_1779242012333_0.5829124659142826","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@bernierllc/feedback-ui","version":"0.7.0","description":"Configurable React feedback UI components with multiple integration methods and connector system","main":"dist/index.js","types":"dist/index.d.ts","keywords":["react","feedback","ui","components","forms","connectors"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","dependencies":{"lucide-react":"^0.263.1","react":"^18.0.0","react-dom":"^18.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"devDependencies":{"@testing-library/jest-dom":"^6.1.3","@testing-library/react":"^13.4.0","@testing-library/user-event":"^14.4.3","@types/jest":"^29.5.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.5.0","jest-environment-jsdom":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"bernierllc":{"integration":{"logger":"optional","docsIntegration":"ready","neverhub":"not-applicable"}},"scripts":{"build":"tsc","test":"jest --watch","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src --ext .ts,.tsx","clean":"rm -rf dist"},"_id":"@bernierllc/feedback-ui@0.7.0","_integrity":"sha512-/hfqoN7xxBE40Uw9Ez7KRTgtWpxf07Otl7XXGR17Dns0UgLUhQzml2BYaOwHxCC0yrvZiPYTu7yYJyyEEWLSCw==","_resolved":"/home/runner/work/tools/tools/packages/ui/feedback-ui/bernierllc-feedback-ui-0.7.0.tgz","_from":"file:bernierllc-feedback-ui-0.7.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-/hfqoN7xxBE40Uw9Ez7KRTgtWpxf07Otl7XXGR17Dns0UgLUhQzml2BYaOwHxCC0yrvZiPYTu7yYJyyEEWLSCw==","shasum":"5583956b7b5d9f1a177d23ffb1f004d502374e47","tarball":"https://registry.npmjs.org/@bernierllc/feedback-ui/-/feedback-ui-0.7.0.tgz","fileCount":27,"unpackedSize":48841,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFUgDJEi2W/NVrh/rKgFFV7DnDxzc9ejgghduntJUQDeAiEAiI6fRnGD5NkjoXPFQz7tkRfH1mDtGnWY1jHKCmRIpAg="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b278ceb3-f055-4e48-b175-83a70807d28a"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/feedback-ui_0.7.0_1779250764380_0.7248483619988555"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-18T19:52:04.431Z","modified":"2026-05-20T04:19:24.669Z","0.2.0":"2025-12-18T19:52:05.107Z","0.4.0":"2026-01-05T20:17:35.733Z","0.4.1":"2026-03-09T17:42:27.020Z","0.4.2":"2026-03-10T17:30:06.406Z","0.5.0":"2026-05-20T01:53:32.466Z","0.7.0":"2026-05-20T04:19:24.522Z"},"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","keywords":["react","feedback","ui","components","forms","connectors"],"description":"Configurable React feedback UI components with multiple integration methods and connector system","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/feedback-ui\n\nConfigurable React feedback UI components with multiple integration methods and a flexible connector system.\n\n## Features\n\n- 🎨 **Multiple Integration Methods**: Floating icon, menu link, or embedded card\n- ⚙️ **Highly Configurable**: Customize feedback types, priority levels, and form fields\n- 🔌 **Connector System**: Route feedback to different backends (extensible architecture)\n- 📝 **Form Validation**: Built-in validation with customizable rules\n- ♿ **Accessible**: ARIA labels and keyboard navigation support\n- 📦 **TypeScript**: Full type safety with comprehensive interfaces\n- 🎯 **Zero Dependencies**: Lightweight with only React and lucide-react\n\n## Installation\n\n```bash\nnpm install @bernierllc/feedback-ui\n```\n\n## Quick Start\n\n### Floating Icon Integration\n\n```tsx\nimport { FloatingIcon } from '@bernierllc/feedback-ui';\n\nfunction App() {\n  return (\n    <>\n      <YourApp />\n      <FloatingIcon position=\"bottom-right\" />\n    </>\n  );\n}\n```\n\n### Menu Link Integration\n\n```tsx\nimport { MenuLink } from '@bernierllc/feedback-ui';\n\nfunction Sidebar() {\n  return (\n    <nav>\n      <MenuLink>Share Feedback</MenuLink>\n    </nav>\n  );\n}\n```\n\n### Card Integration\n\n```tsx\nimport { FeedbackCard } from '@bernierllc/feedback-ui';\n\nfunction SettingsPage() {\n  return (\n    <div>\n      <h1>Settings</h1>\n      <FeedbackCard />\n    </div>\n  );\n}\n```\n\n## Configuration\n\nAll components accept an optional `config` prop to customize behavior:\n\n```tsx\nimport { FloatingIcon, FeedbackConfig } from '@bernierllc/feedback-ui';\n\nconst config: FeedbackConfig = {\n  // Customize feedback types\n  feedbackTypes: [\n    { id: 'bug', label: 'Bug Report', enabled: true },\n    { id: 'feature', label: 'Feature Request', enabled: true },\n  ],\n  defaultFeedbackType: 'bug',\n\n  // Configure priority levels\n  showPriority: true,\n  priorityLevels: [\n    { value: 'low', label: 'Low' },\n    { value: 'medium', label: 'Medium' },\n    { value: 'high', label: 'High' },\n  ],\n  defaultPriority: 'medium',\n\n  // Field configuration\n  showTitle: true,\n  titleRequired: true,\n  descriptionRequired: true,\n\n  // Validation\n  minDescriptionLength: 10,\n  maxDescriptionLength: 5000,\n\n  // UI customization\n  title: 'Share Your Feedback',\n  description: 'Help us improve',\n  submitLabel: 'Submit',\n  cancelLabel: 'Cancel',\n};\n\n<FloatingIcon config={config} />\n```\n\n## Connectors\n\nConnectors handle feedback submission to different backends. Implement the `FeedbackConnector` interface to create custom connectors:\n\n```tsx\nimport { FeedbackConnector, FeedbackData } from '@bernierllc/feedback-ui';\n\nconst myConnector: FeedbackConnector = {\n  id: 'my-backend',\n  name: 'My Backend',\n  async submit(feedback: FeedbackData) {\n    const response = await fetch('/api/feedback', {\n      method: 'POST',\n      body: JSON.stringify(feedback),\n    });\n\n    if (!response.ok) {\n      return { success: false, message: 'Submission failed' };\n    }\n\n    return { success: true, id: 'feedback-123' };\n  },\n};\n\n<FloatingIcon connector={myConnector} />\n```\n\n## Connector Registry\n\nRegister connectors globally for reuse across your application:\n\n```tsx\nimport { FeedbackConnectorRegistry } from '@bernierllc/feedback-ui';\n\n// Register connector\nFeedbackConnectorRegistry.register(myConnector);\n\n// Retrieve connector\nconst connector = FeedbackConnectorRegistry.get('my-backend');\n\n// Get connectors for specific feedback type\nconst bugConnectors = FeedbackConnectorRegistry.getForType('bug');\n```\n\n## API Reference\n\n### FeedbackConfig\n\n| Property | Type | Default | Description |\n|----------|------|---------|-------------|\n| `feedbackTypes` | `FeedbackTypeConfig[]` | See defaults | Available feedback types |\n| `defaultFeedbackType` | `string` | `'general'` | Default selected type |\n| `showPriority` | `boolean` | `true` | Show priority selector |\n| `priorityLevels` | `PriorityLevel[]` | Low/Medium/High | Available priority levels |\n| `defaultPriority` | `Priority` | `'medium'` | Default priority |\n| `showTitle` | `boolean` | `true` | Show title field |\n| `titleRequired` | `boolean` | `true` | Make title required |\n| `descriptionRequired` | `boolean` | `true` | Make description required |\n| `minDescriptionLength` | `number` | `10` | Min description length |\n| `maxDescriptionLength` | `number` | `5000` | Max description length |\n| `title` | `string` | `'Share Your Feedback'` | Modal/card title |\n| `description` | `string` | `'Help us improve...'` | Modal/card description |\n| `submitLabel` | `string` | `'Submit Feedback'` | Submit button text |\n| `cancelLabel` | `string` | `'Cancel'` | Cancel button text |\n\n### FeedbackData\n\n```typescript\ninterface FeedbackData {\n  type: string;\n  priority?: 'low' | 'medium' | 'high';\n  title?: string;\n  description: string;\n  metadata?: Record<string, unknown>;\n  submittedAt: Date;\n  submittedBy?: {\n    id?: string;\n    name?: string;\n    email?: string;\n    role?: string;\n  };\n}\n```\n\n### FeedbackConnector\n\n```typescript\ninterface FeedbackConnector {\n  id: string;\n  name: string;\n  supportedTypes?: string[]; // Optional: supported feedback types\n  submit: (feedback: FeedbackData) => Promise<FeedbackSubmissionResult>;\n  validate?: (config: ConnectorConfig) => Promise<ValidationResult>;\n}\n```\n\n## Examples\n\n### Custom Feedback Types\n\n```tsx\nconst config: FeedbackConfig = {\n  feedbackTypes: [\n    {\n      id: 'praise',\n      label: '👍 Praise',\n      description: 'Share what you love',\n      enabled: true,\n    },\n    {\n      id: 'complaint',\n      label: '😞 Complaint',\n      description: 'Let us know what went wrong',\n      enabled: true,\n    },\n  ],\n};\n\n<FeedbackCard config={config} />\n```\n\n### Minimal Configuration\n\n```tsx\nconst config: FeedbackConfig = {\n  showTitle: false,\n  showPriority: false,\n  feedbackTypes: [{ id: 'general', label: 'Feedback', enabled: true }],\n};\n\n<FeedbackCard config={config} />\n```\n\n### Custom Submission Handler\n\n```tsx\nimport { FeedbackData } from '@bernierllc/feedback-ui';\n\nconst handleSubmit = async (feedback: FeedbackData) => {\n  console.log('Feedback submitted:', feedback);\n  // Custom handling logic\n};\n\n<FeedbackModal\n  isOpen={true}\n  onClose={() => {}}\n  onSubmit={handleSubmit}\n/>\n```\n\n## Styling\n\nComponents use semantic CSS classes for easy customization:\n\n```css\n.feedback-modal-overlay {\n  /* Modal overlay styles */\n}\n\n.feedback-modal {\n  /* Modal container styles */\n}\n\n.feedback-floating-button {\n  /* Floating icon button styles */\n}\n\n.feedback-card {\n  /* Card container styles */\n}\n\n.feedback-field {\n  /* Form field container styles */\n}\n\n.feedback-button {\n  /* Button styles */\n}\n```\n\n## License\n\nCopyright (c) 2025 Bernier LLC. Licensed under a limited-use license. See LICENSE file for details.\n\n## Support\n\nFor issues or questions, contact support@bernierllc.com\n","readmeFilename":"README.md"}