@metricshift/react 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +219 -238
- package/dist/components/FeedbackButton.d.ts +4 -0
- package/dist/components/FeedbackButton.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +556 -496
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +11 -11
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,47 +1,57 @@
|
|
|
1
|
-
|
|
1
|
+
@metricshift/react
|
|
2
2
|
|
|
3
|
-
The intelligent feedback
|
|
3
|
+
The intelligent feedback widget for React applications.
|
|
4
|
+
Collect, analyze, and act on user feedback with AI-powered insights — in minutes, not weeks.
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
MetricShift gives you a drop-in feedback experience that feels native to your product, while quietly powering a structured analytics pipeline behind the scenes.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
You can fully customize the widget — including rich media like avatars and images — so it feels truly brand-specific, not like a generic feedback tool.
|
|
9
9
|
|
|
10
|
-
- 🚀 **2-Minute Setup** - Add powerful feedback collection to your React app instantly
|
|
11
|
-
- 🎨 **Fully Customizable** - Match your brand with custom colors, sizes, and styles
|
|
12
|
-
- 🤖 **AI-Powered Insights** - Automatic sentiment analysis and theme detection with GPT-4
|
|
13
|
-
- 📊 **Beautiful Dashboard** - View trends, export data, and discover insights
|
|
14
|
-
- ♿ **Accessible** - WCAG compliant with keyboard navigation and ARIA labels
|
|
15
|
-
- 📱 **Mobile-Ready** - Perfect experience on any device
|
|
16
|
-
- 🔒 **Privacy-First** - GDPR compliant, you control your data
|
|
17
|
-
- 🎯 **TypeScript** - Full type safety included
|
|
18
10
|
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
✨ Features
|
|
14
|
+
|
|
15
|
+
🚀 2-Minute Setup — Drop-in widget with modal + backend wired automatically
|
|
16
|
+
|
|
17
|
+
🎨 Deep Customization — Colors, variants, avatars, images, inline placement
|
|
18
|
+
|
|
19
|
+
🖼️ Rich Media Support — Add personal avatars or branded visuals to the widget
|
|
20
|
+
|
|
21
|
+
🤖 AI-Powered Analysis — Sentiment detection, themes, summaries
|
|
22
|
+
|
|
23
|
+
📊 Analytics-Ready — Widget events can be streamed into your analytics stack
|
|
24
|
+
|
|
25
|
+
🔒 Safe by Design — Domain restrictions + rate limiting built in
|
|
26
|
+
|
|
27
|
+
♿ Accessible — WCAG-friendly, keyboard & screen-reader support
|
|
28
|
+
|
|
29
|
+
📱 Mobile-First — Works beautifully on all screen sizes
|
|
30
|
+
|
|
31
|
+
🧩 TypeScript Ready — Full types & IntelliSense
|
|
32
|
+
|
|
33
|
+
📦 Installation
|
|
21
34
|
npm install @metricshift/react
|
|
22
|
-
|
|
35
|
+
|
|
23
36
|
|
|
24
37
|
or
|
|
25
|
-
```bash
|
|
26
|
-
yarn add @metricshift/react
|
|
27
|
-
```
|
|
28
38
|
|
|
29
|
-
|
|
39
|
+
yarn add @metricshift/react
|
|
30
40
|
|
|
31
|
-
|
|
41
|
+
🚀 Quick Start
|
|
42
|
+
1. Create a MetricShift project
|
|
32
43
|
|
|
33
|
-
|
|
44
|
+
Get your Project ID and API key from
|
|
45
|
+
👉 https://metricshift.co
|
|
34
46
|
|
|
35
|
-
|
|
36
|
-
```tsx
|
|
47
|
+
2. Add the feedback widget
|
|
37
48
|
import { FeedbackButton } from '@metricshift/react';
|
|
38
49
|
|
|
39
50
|
function App() {
|
|
40
51
|
return (
|
|
41
52
|
<div>
|
|
42
|
-
<h1>My
|
|
43
|
-
|
|
44
|
-
{/* Feedback button in bottom-right corner */}
|
|
53
|
+
<h1>My App</h1>
|
|
54
|
+
|
|
45
55
|
<FeedbackButton
|
|
46
56
|
projectId="your-project-id"
|
|
47
57
|
apiKey="your-api-key"
|
|
@@ -49,275 +59,246 @@ function App() {
|
|
|
49
59
|
</div>
|
|
50
60
|
);
|
|
51
61
|
}
|
|
52
|
-
```
|
|
53
62
|
|
|
54
|
-
|
|
63
|
+
3. View feedback & AI insights
|
|
55
64
|
|
|
56
|
-
|
|
57
|
-
- View all feedback in real-time
|
|
58
|
-
- See AI-generated sentiment analysis
|
|
59
|
-
- Discover common themes automatically
|
|
60
|
-
- Export data to CSV
|
|
61
|
-
- Track trends over time
|
|
65
|
+
Open your MetricShift dashboard to explore:
|
|
62
66
|
|
|
63
|
-
|
|
67
|
+
Real-time feedback
|
|
64
68
|
|
|
65
|
-
|
|
69
|
+
AI sentiment & themes
|
|
66
70
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
projectId="your-project-id"
|
|
71
|
-
apiKey="your-api-key"
|
|
72
|
-
/>
|
|
73
|
-
```
|
|
71
|
+
Filters, exports, trends
|
|
72
|
+
|
|
73
|
+
Project-level analytics
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
That’s it 🎉
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
🧠 Security note (important)
|
|
78
|
+
|
|
79
|
+
It is safe to use projectId and apiKey in the frontend.
|
|
80
|
+
|
|
81
|
+
MetricShift protects your widget with:
|
|
82
|
+
|
|
83
|
+
Domain allow-listing (fully configurable in the dashboard)
|
|
84
|
+
|
|
85
|
+
Rate limiting to prevent abuse or hijacking
|
|
86
|
+
|
|
87
|
+
Project-scoped keys (no cross-project access)
|
|
88
|
+
|
|
89
|
+
If you prefer, you can still proxy keys via your backend — but for most use cases, frontend usage is perfectly fine.
|
|
90
|
+
|
|
91
|
+
📚 Usage Examples
|
|
92
|
+
⭐ Default Floating Button
|
|
79
93
|
<FeedbackButton
|
|
80
|
-
projectId=
|
|
81
|
-
apiKey=
|
|
82
|
-
buttonText="Share Feedback"
|
|
83
|
-
buttonColor="#10b981"
|
|
84
|
-
buttonHoverColor="#059669"
|
|
85
|
-
size="large"
|
|
86
|
-
position="bottom-left"
|
|
94
|
+
projectId={projectId}
|
|
95
|
+
apiKey={apiKey}
|
|
87
96
|
/>
|
|
88
|
-
```
|
|
89
97
|
|
|
90
|
-
Match your brand colors and position.
|
|
91
98
|
|
|
92
|
-
|
|
93
|
-
|
|
99
|
+
Clean, neutral pill — bottom-right by default.
|
|
100
|
+
|
|
101
|
+
🖼️ Custom Styled Button with Image / Avatar
|
|
102
|
+
|
|
103
|
+
Use rich media to make the widget feel personal and brand-specific.
|
|
104
|
+
|
|
94
105
|
<FeedbackButton
|
|
95
|
-
projectId=
|
|
96
|
-
apiKey=
|
|
106
|
+
projectId={projectId}
|
|
107
|
+
apiKey={apiKey}
|
|
108
|
+
apiUrl={apiUrl}
|
|
97
109
|
position="inline"
|
|
98
|
-
buttonText="Help us improve"
|
|
99
|
-
showIcon={false}
|
|
100
|
-
/>
|
|
101
|
-
```
|
|
102
110
|
|
|
103
|
-
|
|
111
|
+
buttonText="Image"
|
|
112
|
+
subtitleText="And subtitle"
|
|
104
113
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
onSuccess={(feedbackId) => {
|
|
111
|
-
// Track in your analytics
|
|
112
|
-
analytics.track('Feedback Submitted', { feedbackId });
|
|
113
|
-
// Show thank you message
|
|
114
|
-
toast.success('Thanks for your feedback!');
|
|
115
|
-
}}
|
|
116
|
-
onError={(error) => {
|
|
117
|
-
// Handle errors gracefully
|
|
118
|
-
console.error('Feedback error:', error);
|
|
119
|
-
}}
|
|
114
|
+
buttonTextColor="#000000"
|
|
115
|
+
|
|
116
|
+
avatarSrc="/niklasAvatar.png"
|
|
117
|
+
avatarAlt="MetricShift Support"
|
|
118
|
+
avatarSize={44}
|
|
120
119
|
/>
|
|
121
|
-
```
|
|
122
120
|
|
|
123
|
-
Integrate with your existing analytics and notification systems.
|
|
124
121
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
apiKey="your-api-key"
|
|
135
|
-
position="inline"
|
|
136
|
-
buttonText="Report Bug"
|
|
137
|
-
buttonColor="#ef4444"
|
|
138
|
-
size="small"
|
|
139
|
-
/>
|
|
140
|
-
</header>
|
|
141
|
-
|
|
142
|
-
{/* General feedback floating button */}
|
|
143
|
-
<FeedbackButton
|
|
144
|
-
projectId="your-project-id"
|
|
145
|
-
apiKey="your-api-key"
|
|
146
|
-
position="bottom-right"
|
|
147
|
-
/>
|
|
148
|
-
</div>
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
## 🎛️ Props Reference
|
|
154
|
-
|
|
155
|
-
| Prop | Type | Default | Description |
|
|
156
|
-
|------|------|---------|-------------|
|
|
157
|
-
| `projectId` | `string` | **required** | Your MetricShift project ID |
|
|
158
|
-
| `apiKey` | `string` | **required** | Your MetricShift API key |
|
|
159
|
-
| `apiUrl` | `string` | `'https://api.metricshift.co'` | API endpoint (rarely needs changing) |
|
|
160
|
-
| `buttonText` | `string` | `'Feedback'` | Text displayed on the button |
|
|
161
|
-
| `showIcon` | `boolean` | `true` | Show/hide the 💬 icon |
|
|
162
|
-
| `position` | `'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left' \| 'inline'` | `'bottom-right'` | Button position |
|
|
163
|
-
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Button size |
|
|
164
|
-
| `buttonColor` | `string` | `'#3b82f6'` | Button background color |
|
|
165
|
-
| `buttonHoverColor` | `string` | `'#2563eb'` | Hover state color |
|
|
166
|
-
| `buttonTextColor` | `string` | `'#ffffff'` | Text color |
|
|
167
|
-
| `customStyles` | `CSSProperties` | `{}` | Additional CSS styles |
|
|
168
|
-
| `customClassName` | `string` | `''` | Custom CSS class |
|
|
169
|
-
| `disabled` | `boolean` | `false` | Disable the button |
|
|
170
|
-
| `autoOpen` | `boolean` | `false` | Auto-open modal on mount |
|
|
171
|
-
| `onOpen` | `() => void` | - | Callback when modal opens |
|
|
172
|
-
| `onClose` | `() => void` | - | Callback when modal closes |
|
|
173
|
-
| `onSuccess` | `(feedbackId: string) => void` | - | Callback on successful submission |
|
|
174
|
-
| `onError` | `(error: Error) => void` | - | Callback on error |
|
|
175
|
-
|
|
176
|
-
## 🎨 Styling Examples
|
|
177
|
-
|
|
178
|
-
### Match Your Brand
|
|
179
|
-
```tsx
|
|
122
|
+
Perfect for:
|
|
123
|
+
|
|
124
|
+
Founder-led products
|
|
125
|
+
|
|
126
|
+
Customer success flows
|
|
127
|
+
|
|
128
|
+
Onboarding & support touchpoints
|
|
129
|
+
|
|
130
|
+
🎨 Brand-Themed Button
|
|
180
131
|
<FeedbackButton
|
|
181
|
-
projectId=
|
|
182
|
-
apiKey=
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
fontFamily: 'YourCustomFont, sans-serif',
|
|
188
|
-
borderRadius: '12px',
|
|
189
|
-
boxShadow: '0 4px 12px rgba(255, 107, 107, 0.3)'
|
|
190
|
-
}}
|
|
132
|
+
projectId={projectId}
|
|
133
|
+
apiKey={apiKey}
|
|
134
|
+
variant="solid"
|
|
135
|
+
accentColor="#3b82f6"
|
|
136
|
+
buttonText="Share feedback"
|
|
137
|
+
size="large"
|
|
191
138
|
/>
|
|
192
|
-
```
|
|
193
139
|
|
|
194
|
-
|
|
195
|
-
|
|
140
|
+
|
|
141
|
+
Variants:
|
|
142
|
+
|
|
143
|
+
solid — strong CTA
|
|
144
|
+
|
|
145
|
+
outline — default
|
|
146
|
+
|
|
147
|
+
ghost — minimal
|
|
148
|
+
|
|
149
|
+
🧬 Inline Button (Embed Anywhere)
|
|
196
150
|
<FeedbackButton
|
|
197
|
-
projectId=
|
|
198
|
-
apiKey=
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
buttonHoverColor="#f3f4f6"
|
|
202
|
-
buttonTextColor="#111827"
|
|
203
|
-
customStyles={{
|
|
204
|
-
border: '1px solid #e5e7eb',
|
|
205
|
-
fontWeight: '400'
|
|
206
|
-
}}
|
|
151
|
+
projectId={projectId}
|
|
152
|
+
apiKey={apiKey}
|
|
153
|
+
position="inline"
|
|
154
|
+
buttonText="Help us improve"
|
|
207
155
|
/>
|
|
208
|
-
```
|
|
209
156
|
|
|
210
|
-
|
|
211
|
-
|
|
157
|
+
|
|
158
|
+
Ideal for settings pages, dashboards, forms.
|
|
159
|
+
|
|
160
|
+
🔧 Event Callbacks & Analytics
|
|
161
|
+
|
|
162
|
+
Callbacks let you connect widget events to your own analytics or product logic.
|
|
163
|
+
|
|
164
|
+
Think:
|
|
165
|
+
|
|
166
|
+
Tracking feedback submissions in GA / Segment / PostHog
|
|
167
|
+
|
|
168
|
+
Triggering in-app messages
|
|
169
|
+
|
|
170
|
+
Logging events internally
|
|
171
|
+
|
|
212
172
|
<FeedbackButton
|
|
213
|
-
projectId=
|
|
214
|
-
apiKey=
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}}
|
|
173
|
+
projectId={projectId}
|
|
174
|
+
apiKey={apiKey}
|
|
175
|
+
onOpen={() => analytics.track('feedback_opened')}
|
|
176
|
+
onSuccess={(id) => analytics.track('feedback_submitted', { id })}
|
|
177
|
+
onError={(err) => console.error(err)}
|
|
219
178
|
/>
|
|
220
|
-
```
|
|
221
179
|
|
|
222
|
-
## 📊 Dashboard Features
|
|
223
180
|
|
|
224
|
-
|
|
181
|
+
This turns the widget into a first-class analytics signal, not just a UI element.
|
|
182
|
+
|
|
183
|
+
🔧 Why callbacks matter
|
|
184
|
+
|
|
185
|
+
MetricShift callbacks turn the feedback widget into a first-class analytics signal — not just a UI element.
|
|
225
186
|
|
|
226
|
-
|
|
227
|
-
- **AI Sentiment Analysis** - Automatic positive/neutral/negative classification
|
|
228
|
-
- **Theme Detection** - GPT-4 identifies common topics and patterns
|
|
229
|
-
- **Advanced Filters** - Filter by type, sentiment, date, rating
|
|
230
|
-
- **Export to CSV** - Download your data anytime
|
|
231
|
-
- **Analytics & Trends** - Visualize feedback over time
|
|
232
|
-
- **Search** - Find specific feedback instantly
|
|
187
|
+
Every meaningful interaction inside the widget can be connected to your existing tools and workflows.
|
|
233
188
|
|
|
234
|
-
|
|
189
|
+
Think of callbacks as hooks into user intent.
|
|
235
190
|
|
|
236
|
-
|
|
191
|
+
Common use cases
|
|
237
192
|
|
|
238
|
-
|
|
239
|
-
- **Pro** - Starting at €19/month for growing teams
|
|
240
|
-
- **Enterprise** - Custom solutions, self-hosted options available
|
|
193
|
+
Track feedback opens & submissions in GA, Segment, PostHog, etc.
|
|
241
194
|
|
|
242
|
-
|
|
195
|
+
Correlate feedback with feature usage or experiments
|
|
196
|
+
|
|
197
|
+
Trigger UX responses (toasts, modals, follow-ups)
|
|
198
|
+
|
|
199
|
+
Log feedback IDs for later investigation or support workflows
|
|
200
|
+
|
|
201
|
+
Example
|
|
202
|
+
<FeedbackButton
|
|
203
|
+
projectId={projectId}
|
|
204
|
+
apiKey={apiKey}
|
|
205
|
+
onOpen={() => analytics.track('feedback_opened')}
|
|
206
|
+
onClose={() => analytics.track('feedback_closed')}
|
|
207
|
+
onSuccess={(id) =>
|
|
208
|
+
analytics.track('feedback_submitted', { feedbackId: id })
|
|
209
|
+
}
|
|
210
|
+
onError={(err) =>
|
|
211
|
+
analytics.track('feedback_error', { message: err.message })
|
|
212
|
+
}
|
|
213
|
+
/>
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
Instead of treating feedback as something you “look at later”, callbacks let you:
|
|
217
|
+
|
|
218
|
+
Act on feedback at the moment intent happens.
|
|
219
|
+
|
|
220
|
+
🧩 Props
|
|
221
|
+
Prop Type Default Description
|
|
222
|
+
projectId string required MetricShift project ID
|
|
223
|
+
apiKey string required Project API key
|
|
224
|
+
apiUrl string MetricShift API Backend endpoint
|
|
225
|
+
buttonText string 'Feedback' Main label
|
|
226
|
+
subtitleText string undefined Optional second line
|
|
227
|
+
avatarSrc string undefined Avatar / image URL
|
|
228
|
+
avatarAlt string '' Accessible alt text
|
|
229
|
+
avatarSize number 40 Avatar diameter (px)
|
|
230
|
+
variant 'solid' | 'outline' | 'ghost' 'outline' Visual style
|
|
231
|
+
accentColor string '#111827' Brand color
|
|
232
|
+
position 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' | 'inline' 'bottom-right' Placement
|
|
233
|
+
size 'small' | 'medium' | 'large' 'medium' Button size
|
|
234
|
+
customStyles CSSProperties {} Inline overrides
|
|
235
|
+
customClassName string '' Custom CSS class
|
|
236
|
+
onOpen () => void — Modal opened
|
|
237
|
+
onClose () => void — Modal closed
|
|
238
|
+
onSuccess (id: string) => void — Submission success
|
|
239
|
+
onError (error: Error) => void — Submission error
|
|
240
|
+
📊 Dashboard
|
|
241
|
+
|
|
242
|
+
Your MetricShift dashboard includes:
|
|
243
243
|
|
|
244
|
-
|
|
244
|
+
Real-time feedback stream
|
|
245
245
|
|
|
246
|
-
|
|
247
|
-
```tsx
|
|
248
|
-
import { FeedbackButton, FeedbackButtonProps } from '@metricshift/react';
|
|
246
|
+
AI sentiment & theme clustering
|
|
249
247
|
|
|
250
|
-
|
|
251
|
-
projectId: 'abc123',
|
|
252
|
-
apiKey: 'xyz789',
|
|
253
|
-
onSuccess: (id: string) => console.log(id)
|
|
254
|
-
};
|
|
248
|
+
Search, filters & CSV export
|
|
255
249
|
|
|
256
|
-
|
|
257
|
-
```
|
|
250
|
+
Project-level configuration
|
|
258
251
|
|
|
259
|
-
|
|
252
|
+
Domain restrictions & rate limits
|
|
260
253
|
|
|
261
|
-
|
|
254
|
+
👉 https://metricshift.co
|
|
262
255
|
|
|
263
|
-
|
|
264
|
-
- ✅ **Next.js** (App Router & Pages Router)
|
|
265
|
-
- ✅ **Vite**
|
|
266
|
-
- ✅ **Remix**
|
|
267
|
-
- ✅ **Gatsby**
|
|
256
|
+
💼 Pricing
|
|
268
257
|
|
|
269
|
-
|
|
258
|
+
Free
|
|
270
259
|
|
|
271
|
-
|
|
260
|
+
MetricShift starts free.
|
|
261
|
+
For full plan details, limits, and AI token allowances, see:
|
|
272
262
|
|
|
273
|
-
|
|
274
|
-
- Button appearance and position
|
|
275
|
-
- Colors and styling
|
|
276
|
-
- Form behavior via callbacks
|
|
263
|
+
👉 https://metricshift.co
|
|
277
264
|
|
|
278
|
-
|
|
265
|
+
❓ FAQ
|
|
266
|
+
Can I customize the feedback form?
|
|
279
267
|
|
|
280
|
-
|
|
268
|
+
Yes.
|
|
269
|
+
The free plan includes a powerful “jack-of-all-trades” feedback template that works across most product use cases.
|
|
281
270
|
|
|
282
|
-
|
|
271
|
+
We also support fully tailor-made templates that can be integrated directly into the widget. More templates and use-case-specific flows will be added as the platform evolves.
|
|
283
272
|
|
|
284
|
-
|
|
273
|
+
Can I use this with multiple projects or websites?
|
|
285
274
|
|
|
286
|
-
|
|
275
|
+
Yes, absolutely.
|
|
287
276
|
|
|
288
|
-
|
|
277
|
+
You can self-manage which domains and websites the widget runs on directly from the dashboard.
|
|
289
278
|
|
|
290
|
-
|
|
279
|
+
What’s included in the free tier?
|
|
291
280
|
|
|
292
|
-
|
|
293
|
-
- AI sentiment analysis
|
|
294
|
-
- Theme detection
|
|
295
|
-
- Full dashboard access
|
|
296
|
-
- CSV export
|
|
281
|
+
The free plan includes:
|
|
297
282
|
|
|
298
|
-
|
|
283
|
+
Feedback collection
|
|
299
284
|
|
|
300
|
-
|
|
301
|
-
- 📖 **Documentation**: [docs.metricshift.co](https://metricshift.co/docs)
|
|
302
|
-
- 🐛 **Issues**: Report bugs via email
|
|
303
|
-
- 🌐 **Website**: [metricshift.co](https://metricshift.co)
|
|
285
|
+
Dashboard access
|
|
304
286
|
|
|
305
|
-
|
|
287
|
+
AI-powered analysis
|
|
306
288
|
|
|
307
|
-
|
|
289
|
+
A generous monthly allowance of AI tokens to analyze your data
|
|
308
290
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
3. **Explore your dashboard** to see AI insights
|
|
312
|
-
4. **Set up notifications** to get alerts for new feedback
|
|
313
|
-
5. **Export data** and integrate with your workflow
|
|
291
|
+
For up-to-date details, see:
|
|
292
|
+
👉 https://metricshift.co
|
|
314
293
|
|
|
315
|
-
|
|
294
|
+
📖 Documentation
|
|
316
295
|
|
|
317
|
-
|
|
296
|
+
All documentation and updates live at:
|
|
297
|
+
👉 https://metricshift.co
|
|
318
298
|
|
|
319
|
-
|
|
299
|
+
📝 License
|
|
320
300
|
|
|
321
|
-
|
|
301
|
+
MIT © MetricShift
|
|
322
302
|
|
|
323
|
-
|
|
303
|
+
Built with ❤️ for teams who care about their users.
|
|
304
|
+
Start free → https://metricshift.co/
|
|
@@ -5,7 +5,11 @@ export interface FeedbackButtonProps {
|
|
|
5
5
|
apiKey?: string;
|
|
6
6
|
apiUrl?: string;
|
|
7
7
|
buttonText?: string;
|
|
8
|
+
subtitleText?: string;
|
|
8
9
|
showIcon?: boolean;
|
|
10
|
+
avatarSrc?: string;
|
|
11
|
+
avatarAlt?: string;
|
|
12
|
+
avatarSize?: number;
|
|
9
13
|
position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' | 'inline';
|
|
10
14
|
size?: 'small' | 'medium' | 'large';
|
|
11
15
|
buttonColor?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackButton.d.ts","sourceRoot":"","sources":["../../src/components/FeedbackButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IAGhF,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAGpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAmBD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"FeedbackButton.d.ts","sourceRoot":"","sources":["../../src/components/FeedbackButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IAGhF,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAGpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAmBD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAoUxD,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvF,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,eAAO,MAAM,WAAW;IACtB;;;OAGG;mBACY,iBAAiB;IAWhC;;OAEG;;CAEJ,CAAC"}
|