pulse-feedback-widget 1.0.1 → 1.2.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.
@@ -1,3 +1,3 @@
1
1
  import type { PulseWidgetProps } from './types';
2
- export declare function PulseWidget({ projectId, apiKey, apiUrl, position, accentColor, greeting, placeholder, hideOnPaths, collectEmail, metadata, onOpen, onClose: onCloseProp, onSubmit, }: PulseWidgetProps): import("react/jsx-runtime").JSX.Element | null;
2
+ export declare function PulseWidget({ projectId, apiKey, apiUrl, position, accentColor, greeting, placeholder, hideOnPaths, collectEmail, userId, metadata, onOpen, onClose: onCloseProp, onSubmit, }: PulseWidgetProps): import("react/jsx-runtime").JSX.Element | null;
3
3
  //# sourceMappingURL=PulseWidget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PulseWidget.d.ts","sourceRoot":"","sources":["../src/PulseWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAYhD,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,MAAM,EACN,MAAwB,EACxB,QAAyB,EACzB,WAAuB,EACvB,QAAmB,EACnB,WAAoC,EACpC,WAAgB,EAChB,YAAmB,EACnB,QAAa,EACb,MAAM,EACN,OAAO,EAAE,WAAW,EACpB,QAAQ,GACT,EAAE,gBAAgB,kDA6ElB"}
1
+ {"version":3,"file":"PulseWidget.d.ts","sourceRoot":"","sources":["../src/PulseWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAYhD,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,MAAM,EACN,MAAwB,EACxB,QAAyB,EACzB,WAAuB,EACvB,QAAmB,EACnB,WAAoC,EACpC,WAAgB,EAChB,YAAmB,EACnB,MAAM,EACN,QAAa,EACb,MAAM,EACN,OAAO,EAAE,WAAW,EACpB,QAAQ,GACT,EAAE,gBAAgB,kDA6ElB"}
@@ -8,7 +8,7 @@ import { TriggerButton } from './components/TriggerButton.mjs';
8
8
 
9
9
  const FeedbackPanel = lazy(() => import('./components/FeedbackPanel.mjs').then((m) => ({ default: m.FeedbackPanel })));
10
10
  const DEFAULT_API_URL = 'https://10-pulse.vercel.app';
11
- function PulseWidget({ projectId, apiKey, apiUrl = DEFAULT_API_URL, position = 'bottom-right', accentColor = '#6366F1', greeting = 'Hi! 👋', placeholder = "What's on your mind?", hideOnPaths = [], collectEmail = true, metadata = {}, onOpen, onClose: onCloseProp, onSubmit, }) {
11
+ function PulseWidget({ projectId, apiKey, apiUrl = DEFAULT_API_URL, position = 'bottom-right', accentColor = '#6366F1', greeting = 'Hi! 👋', placeholder = "What's on your mind?", hideOnPaths = [], collectEmail = true, userId, metadata = {}, onOpen, onClose: onCloseProp, onSubmit, }) {
12
12
  const [isOpen, setIsOpen] = useState(false);
13
13
  const [hasNotification, setHasNotification] = useState(false);
14
14
  const [hidden, setHidden] = useState(false);
@@ -22,7 +22,7 @@ function PulseWidget({ projectId, apiKey, apiUrl = DEFAULT_API_URL, position = '
22
22
  return null;
23
23
  }
24
24
  const deviceId = useMemo(() => getDeviceId(), []);
25
- const client = useMemo(() => createHttpClient(apiUrl, apiKey, deviceId), [apiUrl, apiKey, deviceId]);
25
+ const client = useMemo(() => createHttpClient(apiUrl, apiKey, deviceId, userId), [apiUrl, apiKey, deviceId, userId]);
26
26
  // Check if widget should be hidden on current path
27
27
  useEffect(() => {
28
28
  if (typeof window === 'undefined')
@@ -1 +1 @@
1
- {"version":3,"file":"PulseWidget.mjs","sources":["../src/PulseWidget.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AASA;AAIA;AAEM;;;;;;AAqBF;AACA;;;AAGA;AACA;;AAGF;;;;;;AASE;AACA;AACF;;;AAIE;;;AAEA;AACE;AACA;;;AAEF;;AAEF;AAEA;AAAY;AAEZ;;;;;;;;AAmCF;;"}
1
+ {"version":3,"file":"PulseWidget.mjs","sources":["../src/PulseWidget.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AASA;AAIA;AAEM;;;;;;AAsBF;AACA;;;AAGA;AACA;;AAGF;AACA;;;;;AAQE;AACA;AACF;;;AAIE;;;AAEA;AACE;AACA;;;AAEF;;AAEF;AAEA;AAAY;AAEZ;;;;;;;;AAmCF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationView.d.ts","sourceRoot":"","sources":["../../src/components/ConversationView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,UAAU,CAAC;AAIhD,UAAU,qBAAqB;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,qBAAqB,2CAmG9F"}
1
+ {"version":3,"file":"ConversationView.d.ts","sourceRoot":"","sources":["../../src/components/ConversationView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,UAAU,CAAC;AAM5D,UAAU,qBAAqB;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,qBAAqB,2CA6K9F"}
@@ -1,11 +1,14 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { useState, useRef, useEffect } from 'react';
3
- import { getThreadMessages, sendUserReply } from '../lib/api.mjs';
3
+ import { getThreadMessages, uploadAttachment, sendUserReply } from '../lib/api.mjs';
4
+ import { compressImage } from '../lib/compress.mjs';
5
+ import { ImagePicker, getClipboardImages } from './ImagePicker.mjs';
4
6
  import styles from './ConversationView.module.css.mjs';
5
7
 
6
8
  function ConversationView({ client, thread, accentColor, onBack }) {
7
9
  const [messages, setMessages] = useState([]);
8
10
  const [reply, setReply] = useState('');
11
+ const [pendingFiles, setPendingFiles] = useState([]);
9
12
  const [sending, setSending] = useState(false);
10
13
  const messagesEndRef = useRef(null);
11
14
  useEffect(() => {
@@ -22,10 +25,20 @@ function ConversationView({ client, thread, accentColor, onBack }) {
22
25
  messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
23
26
  }, [messages]);
24
27
  async function handleSend() {
25
- if (!reply.trim() || sending)
28
+ if ((!reply.trim() && pendingFiles.length === 0) || sending)
26
29
  return;
27
30
  setSending(true);
28
- const ok = await sendUserReply(client, thread.id, reply.trim());
31
+ // Upload attachments
32
+ let attachments = [];
33
+ if (pendingFiles.length > 0) {
34
+ const results = await Promise.all(pendingFiles.map(async (file) => {
35
+ const compressed = await compressImage(file);
36
+ return uploadAttachment(client, compressed, file.name);
37
+ }));
38
+ attachments = results.filter((a) => a !== null);
39
+ }
40
+ const body = reply.trim() || (attachments.length > 0 ? '(image)' : '');
41
+ const ok = await sendUserReply(client, thread.id, body, attachments);
29
42
  if (ok) {
30
43
  setMessages((prev) => [
31
44
  ...prev,
@@ -33,13 +46,14 @@ function ConversationView({ client, thread, accentColor, onBack }) {
33
46
  id: crypto.randomUUID(),
34
47
  threadId: thread.id,
35
48
  sender: 'user',
36
- body: reply.trim(),
37
- attachments: [],
49
+ body,
50
+ attachments,
38
51
  isInternal: false,
39
52
  createdAt: new Date().toISOString(),
40
53
  },
41
54
  ]);
42
55
  setReply('');
56
+ setPendingFiles([]);
43
57
  }
44
58
  setSending(false);
45
59
  }
@@ -49,7 +63,23 @@ function ConversationView({ client, thread, accentColor, onBack }) {
49
63
  handleSend();
50
64
  }
51
65
  }
52
- return (jsxs("div", { className: styles.conversation, children: [jsxs("button", { type: "button", className: styles.backBtn, onClick: onBack, children: [jsx("svg", { className: styles.backIcon, viewBox: "0 0 24 24", children: jsx("polyline", { points: "15 18 9 12 15 6" }) }), "Back"] }), jsx("h3", { className: styles.subject, children: thread.subject }), jsxs("div", { className: styles.messages, children: [messages.map((msg) => (jsxs("div", { className: `${styles.message} ${msg.sender === 'user' ? styles.messageUser : styles.messageDev}`, style: msg.sender === 'developer' ? { backgroundColor: accentColor } : undefined, children: [jsx("p", { className: styles.messageBody, children: msg.body }), jsxs("div", { className: styles.messageTime, children: [msg.sender === 'developer' ? 'Developer' : 'You', " \u00B7 ", formatTime(msg.createdAt)] })] }, msg.id))), jsx("div", { ref: messagesEndRef })] }), jsxs("div", { className: styles.replyBox, children: [jsx("input", { className: styles.replyInput, value: reply, onChange: (e) => setReply(e.target.value), onKeyDown: handleKeyDown, placeholder: "Type a reply..." }), jsx("button", { type: "button", className: styles.sendBtn, style: { backgroundColor: accentColor }, onClick: handleSend, disabled: !reply.trim() || sending, children: jsxs("svg", { className: styles.sendIcon, viewBox: "0 0 24 24", children: [jsx("line", { x1: "22", y1: "2", x2: "11", y2: "13" }), jsx("polygon", { points: "22 2 15 22 11 13 2 9 22 2" })] }) })] })] }));
66
+ return (jsxs("div", { className: styles.conversation, children: [jsxs("button", { type: "button", className: styles.backBtn, onClick: onBack, children: [jsx("svg", { className: styles.backIcon, viewBox: "0 0 24 24", children: jsx("polyline", { points: "15 18 9 12 15 6" }) }), "Back"] }), jsx("h3", { className: styles.subject, children: thread.subject }), jsxs("div", { className: styles.messages, children: [messages.map((msg) => (jsxs("div", { className: `${styles.message} ${msg.sender === 'user' ? styles.messageUser : styles.messageDev}`, style: msg.sender === 'developer' ? { backgroundColor: accentColor } : undefined, children: [jsx("p", { className: styles.messageBody, children: msg.body }), msg.attachments?.length > 0 && (jsx("div", { className: styles.attachmentRow, children: msg.attachments.map((att, i) => (jsx("a", { href: `${client.baseUrl}/api/v1/attachments/${att.path}`, target: "_blank", rel: "noopener noreferrer", children: jsx("img", { className: styles.attachmentThumb, src: `${client.baseUrl}/api/v1/attachments/${att.path}`, alt: att.name, loading: "lazy" }) }, i))) })), jsxs("div", { className: styles.messageTime, children: [msg.sender === 'developer' ? 'Developer' : 'You', " \u00B7 ", formatTime(msg.createdAt)] })] }, msg.id))), jsx("div", { ref: messagesEndRef })] }), pendingFiles.length > 0 && (jsx("div", { className: styles.replyAttachments, children: jsx(ImagePicker, { files: pendingFiles, onFilesSelected: (files) => setPendingFiles((prev) => [...prev, ...files].slice(0, 3)), onRemove: (i) => setPendingFiles((prev) => prev.filter((_, idx) => idx !== i)), accentColor: accentColor, disabled: sending }) })), jsxs("div", { className: styles.replyBox, children: [jsx("input", { className: styles.replyInput, value: reply, onChange: (e) => setReply(e.target.value), onKeyDown: handleKeyDown, onPaste: (e) => {
67
+ const images = getClipboardImages(e);
68
+ if (images.length > 0) {
69
+ setPendingFiles((prev) => [...prev, ...images].slice(0, 3));
70
+ }
71
+ }, placeholder: "Type a reply..." }), jsx("button", { type: "button", className: styles.attachBtn, onClick: () => {
72
+ const input = document.createElement('input');
73
+ input.type = 'file';
74
+ input.accept = 'image/png,image/jpeg,image/gif,image/webp';
75
+ input.multiple = true;
76
+ input.onchange = () => {
77
+ const files = Array.from(input.files || []).slice(0, 3 - pendingFiles.length);
78
+ if (files.length > 0)
79
+ setPendingFiles((prev) => [...prev, ...files].slice(0, 3));
80
+ };
81
+ input.click();
82
+ }, disabled: sending || pendingFiles.length >= 3, title: "Attach images", children: jsx("svg", { className: styles.attachIcon, viewBox: "0 0 24 24", children: jsx("path", { d: "M21.44 11.05l-9.19 9.19a6 6 0 01-8.49-8.49l9.19-9.19a4 4 0 015.66 5.66l-9.2 9.19a2 2 0 01-2.83-2.83l8.49-8.48" }) }) }), jsx("button", { type: "button", className: styles.sendBtn, style: { backgroundColor: accentColor }, onClick: handleSend, disabled: (!reply.trim() && pendingFiles.length === 0) || sending, children: jsxs("svg", { className: styles.sendIcon, viewBox: "0 0 24 24", children: [jsx("line", { x1: "22", y1: "2", x2: "11", y2: "13" }), jsx("polygon", { points: "22 2 15 22 11 13 2 9 22 2" })] }) })] })] }));
53
83
  }
54
84
  function formatTime(dateStr) {
55
85
  const d = new Date(dateStr);
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationView.mjs","sources":["../../src/components/ConversationView.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"ConversationView.mjs","sources":["../../src/components/ConversationView.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;;AAeM,SAAU,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAyB,EAAA;IAC7F,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAY,EAAE,CAAC;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IACtC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC7C,IAAA,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC;IAEnD,SAAS,CAAC,MAAK;QACb,IAAI,SAAS,GAAG,KAAK;AACrB,QAAA,eAAe,IAAI,GAAA;YACjB,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AACvD,YAAA,IAAI,CAAC,SAAS;gBAAE,WAAW,CAAC,IAAI,CAAC;QACnC;AACA,QAAA,IAAI,EAAE;QACN,OAAO,MAAK,EAAG,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAEvB,SAAS,CAAC,MAAK;QACb,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEd,IAAA,eAAe,UAAU,GAAA;AACvB,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,KAAK,OAAO;YAAE;QAC7D,UAAU,CAAC,IAAI,CAAC;;QAGhB,IAAI,WAAW,GAAiB,EAAE;AAClC,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,YAAY,CAAC,GAAG,CAAC,OAAO,IAAI,KAAI;AAC9B,gBAAA,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;gBAC5C,OAAO,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;YACxD,CAAC,CAAC,CACH;AACD,YAAA,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAsB,CAAC,KAAK,IAAI,CAAC;QAClE;QAEA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC;AACtE,QAAA,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC;QACpE,IAAI,EAAE,EAAE;AACN,YAAA,WAAW,CAAC,CAAC,IAAI,KAAK;AACpB,gBAAA,GAAG,IAAI;AACP,gBAAA;AACE,oBAAA,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;oBACvB,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,oBAAA,MAAM,EAAE,MAAM;oBACd,IAAI;oBACJ,WAAW;AACX,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,iBAAA;AACF,aAAA,CAAC;YACF,QAAQ,CAAC,EAAE,CAAC;YACZ,eAAe,CAAC,EAAE,CAAC;QACrB;QACA,UAAU,CAAC,KAAK,CAAC;IACnB;IAEA,SAAS,aAAa,CAAC,CAAsB,EAAA;QAC3C,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;YACpC,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,UAAU,EAAE;QACd;IACF;IAEA,QACEA,cAAK,SAAS,EAAE,MAAM,CAAC,YAAY,aACjCA,IAAA,CAAA,QAAA,EAAA,EAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAA,QAAA,EAAA,CAC9DC,aAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAC,WAAW,EAAA,QAAA,EAClDA,GAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,iBAAiB,GAAG,EAAA,CACjC,EAAA,MAAA,CAAA,EAAA,CAEC,EAETA,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAE,MAAM,CAAC,OAAO,YAAG,MAAM,CAAC,OAAO,EAAA,CAAM,EAEpDD,cAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,aAC5B,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAChBA,IAAA,CAAA,KAAA,EAAA,EAEE,SAAS,EAAE,CAAA,EAAG,MAAM,CAAC,OAAO,CAAA,CAAA,EAAI,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAA,CAAE,EAChG,KAAK,EAAE,GAAG,CAAC,MAAM,KAAK,WAAW,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,SAAS,EAAA,QAAA,EAAA,CAEhFC,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,MAAM,CAAC,WAAW,EAAA,QAAA,EAAG,GAAG,CAAC,IAAI,EAAA,CAAK,EAC/C,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,KAC1BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,aAAa,EAAA,QAAA,EACjC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,MAC1BA,WAEE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAA,oBAAA,EAAuB,GAAG,CAAC,IAAI,CAAA,CAAE,EACxD,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EAAA,QAAA,EAEzBA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,MAAM,CAAC,eAAe,EACjC,GAAG,EAAE,CAAA,EAAG,MAAM,CAAC,OAAO,CAAA,oBAAA,EAAuB,GAAG,CAAC,IAAI,EAAE,EACvD,GAAG,EAAE,GAAG,CAAC,IAAI,EACb,OAAO,EAAC,MAAM,EAAA,CACd,IAVG,CAAC,CAWJ,CACL,CAAC,EAAA,CACE,CACP,EACDD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,WAAW,EAAA,QAAA,EAAA,CAC/B,GAAG,CAAC,MAAM,KAAK,WAAW,GAAG,WAAW,GAAG,KAAK,cAAK,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA,EAAA,CAC3E,CAAA,EAAA,EA1BD,GAAG,CAAC,EAAE,CA2BP,CACP,CAAC,EACFC,aAAK,GAAG,EAAE,cAAc,EAAA,CAAI,CAAA,EAAA,CACxB,EAEL,YAAY,CAAC,MAAM,GAAG,CAAC,KACtBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,gBAAgB,EAAA,QAAA,EACrCA,GAAA,CAAC,WAAW,EAAA,EACV,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACtF,QAAQ,EAAE,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAC9E,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EAAA,CACjB,GACE,CACP,EAEDD,cAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,aAC7BC,GAAA,CAAA,OAAA,EAAA,EACE,SAAS,EAAE,MAAM,CAAC,UAAU,EAC5B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,CAAC,CAAC,KAAI;AACb,4BAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAoC,CAAC;AACvE,4BAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gCACrB,eAAe,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC7D;wBACF,CAAC,EACD,WAAW,EAAC,iBAAiB,GAC7B,EACFA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,OAAO,EAAE,MAAK;4BACZ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,4BAAA,KAAK,CAAC,IAAI,GAAG,MAAM;AACnB,4BAAA,KAAK,CAAC,MAAM,GAAG,2CAA2C;AAC1D,4BAAA,KAAK,CAAC,QAAQ,GAAG,IAAI;AACrB,4BAAA,KAAK,CAAC,QAAQ,GAAG,MAAK;gCACpB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;AAC7E,gCAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oCAAE,eAAe,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClF,4BAAA,CAAC;4BACD,KAAK,CAAC,KAAK,EAAE;wBACf,CAAC,EACD,QAAQ,EAAE,OAAO,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAC7C,KAAK,EAAC,eAAe,EAAA,QAAA,EAErBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAC,WAAW,EAAA,QAAA,EACpDA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,+GAA+G,EAAA,CAAG,EAAA,CACtH,EAAA,CACC,EACTA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,MAAM,CAAC,OAAO,EACzB,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,EACvC,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,KAAK,OAAO,EAAA,QAAA,EAEjED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAC,WAAW,EAAA,QAAA,EAAA,CAClDC,cAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,EACvCA,GAAA,CAAA,SAAA,EAAA,EAAS,MAAM,EAAC,2BAA2B,EAAA,CAAG,CAAA,EAAA,CAC1C,EAAA,CACC,CAAA,EAAA,CACL,CAAA,EAAA,CACF;AAEV;AAEA,SAAS,UAAU,CAAC,OAAe,EAAA;AACjC,IAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;AAC3B,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;IACtB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACvC,IAAI,IAAI,GAAG,CAAC;AAAE,QAAA,OAAO,UAAU;IAC/B,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,CAAA,EAAG,IAAI,CAAA,KAAA,CAAO;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;IACnC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,CAAA,EAAG,KAAK,CAAA,KAAA,CAAO;AACtC,IAAA,OAAO,CAAC,CAAC,kBAAkB,EAAE;AAC/B;;;;"}
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../node_modules/style-inject/dist/style-inject.es.mjs';
2
2
 
3
- var css_248z = ".ConversationView-module_conversation__Kyrej{display:flex;flex-direction:column;height:100%}.ConversationView-module_backBtn__Ls1YK{align-items:center;background:transparent;border:none;color:var(--pulse-text-secondary,#6b7280);cursor:pointer;display:flex;font-family:inherit;font-size:13px;font-weight:500;gap:6px;margin-bottom:8px;padding:4px 0}.ConversationView-module_backBtn__Ls1YK:hover{color:var(--pulse-text-primary,#111827)}.ConversationView-module_backIcon__rmWLJ{stroke:currentColor;stroke-width:2;fill:none;height:16px;width:16px}.ConversationView-module_subject__DVvkN{color:var(--pulse-text-primary,#111827);font-size:15px;font-weight:600;margin:0 0 12px}.ConversationView-module_messages__KatYK{display:flex;flex:1;flex-direction:column;gap:8px;margin-bottom:12px;overflow-y:auto;padding-bottom:12px}.ConversationView-module_message__L9hkM{border-radius:12px;max-width:85%;padding:10px 12px}.ConversationView-module_messageUser__0n-3J{align-self:flex-end;background:var(--pulse-bg-hover,#f3f4f6);color:var(--pulse-text-primary,#111827)}.ConversationView-module_messageDev__Lss8r{align-self:flex-start;color:#fff}.ConversationView-module_messageBody__K5bq6{font-size:14px;line-height:1.5;margin:0;white-space:pre-wrap;word-break:break-word}.ConversationView-module_messageTime__LQSrh{font-size:11px;margin:4px 0 0;opacity:.7}.ConversationView-module_replyBox__Bjf08{border-top:1px solid var(--pulse-border,#e5e7eb);display:flex;gap:8px;padding-top:12px}.ConversationView-module_replyInput__4UjyN{background:var(--pulse-bg,#fff);border:1px solid var(--pulse-border,#e5e7eb);border-radius:6px;color:var(--pulse-text-primary,#111827);flex:1;font-family:inherit;font-size:14px;height:36px;outline:none;padding:8px 12px}.ConversationView-module_replyInput__4UjyN:focus{border-color:var(--pulse-accent,#6366f1)}.ConversationView-module_sendBtn__ryIfI{align-items:center;border:none;border-radius:6px;color:#fff;cursor:pointer;display:flex;flex-shrink:0;height:36px;justify-content:center;transition:opacity .12s ease;width:36px}.ConversationView-module_sendBtn__ryIfI:hover{opacity:.9}.ConversationView-module_sendBtn__ryIfI:disabled{cursor:not-allowed;opacity:.4}.ConversationView-module_sendIcon__Xcqbi{stroke:currentColor;stroke-width:2;fill:none;height:18px;width:18px}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnZlcnNhdGlvblZpZXcubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2Q0FDRSxZQUFhLENBQ2IscUJBQXNCLENBQ3RCLFdBQ0YsQ0FFQSx3Q0FFRSxrQkFBbUIsQ0FJbkIsc0JBQXVCLENBRHZCLFdBQVksQ0FHWix5Q0FBMkMsQ0FEM0MsY0FBZSxDQU5mLFlBQWEsQ0FVYixtQkFBb0IsQ0FGcEIsY0FBZSxDQUNmLGVBQWdCLENBUGhCLE9BQVEsQ0FTUixpQkFBa0IsQ0FSbEIsYUFTRixDQUVBLDhDQUNFLHVDQUNGLENBRUEseUNBR0UsbUJBQW9CLENBQ3BCLGNBQWUsQ0FDZixTQUFVLENBSFYsV0FBWSxDQURaLFVBS0YsQ0FFQSx3Q0FHRSx1Q0FBeUMsQ0FGekMsY0FBZSxDQUNmLGVBQWdCLENBRWhCLGVBQ0YsQ0FFQSx5Q0FHRSxZQUFhLENBRmIsTUFBTyxDQUdQLHFCQUFzQixDQUN0QixPQUFRLENBRVIsa0JBQW1CLENBTG5CLGVBQWdCLENBSWhCLG1CQUVGLENBRUEsd0NBRUUsa0JBQW1CLENBQ25CLGFBQWMsQ0FGZCxpQkFHRixDQUVBLDRDQUNFLG1CQUFvQixDQUNwQix3Q0FBMEMsQ0FDMUMsdUNBQ0YsQ0FFQSwyQ0FDRSxxQkFBc0IsQ0FDdEIsVUFDRixDQUVBLDRDQUNFLGNBQWUsQ0FDZixlQUFnQixDQUNoQixRQUFTLENBQ1Qsb0JBQXFCLENBQ3JCLHFCQUNGLENBRUEsNENBQ0UsY0FBZSxDQUNmLGNBQWUsQ0FDZixVQUNGLENBRUEseUNBR0UsZ0RBQWtELENBRmxELFlBQWEsQ0FDYixPQUFRLENBRVIsZ0JBQ0YsQ0FFQSwyQ0FNRSwrQkFBb0MsQ0FEcEMsNENBQThDLENBRDlDLGlCQUFrQixDQUdsQix1Q0FBeUMsQ0FOekMsTUFBTyxDQVFQLG1CQUFvQixDQURwQixjQUFlLENBTmYsV0FBWSxDQVFaLFlBQWEsQ0FQYixnQkFRRixDQUVBLGlEQUNFLHdDQUNGLENBRUEsd0NBUUUsa0JBQW1CLENBSm5CLFdBQVksQ0FEWixpQkFBa0IsQ0FFbEIsVUFBYyxDQUNkLGNBQWUsQ0FDZixZQUFhLENBR2IsYUFBYyxDQVJkLFdBQVksQ0FPWixzQkFBdUIsQ0FFdkIsNEJBQThCLENBVjlCLFVBV0YsQ0FFQSw4Q0FDRSxVQUNGLENBRUEsaURBRUUsa0JBQW1CLENBRG5CLFVBRUYsQ0FFQSx5Q0FHRSxtQkFBb0IsQ0FDcEIsY0FBZSxDQUNmLFNBQVUsQ0FIVixXQUFZLENBRFosVUFLRiIsImZpbGUiOiJDb252ZXJzYXRpb25WaWV3Lm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuY29udmVyc2F0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uYmFja0J0biB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICBwYWRkaW5nOiA0cHggMDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogdmFyKC0tcHVsc2UtdGV4dC1zZWNvbmRhcnksICM2YjcyODApO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG5cbi5iYWNrQnRuOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLXB1bHNlLXRleHQtcHJpbWFyeSwgIzExMTgyNyk7XG59XG5cbi5iYWNrSWNvbiB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIHN0cm9rZTogY3VycmVudENvbG9yO1xuICBzdHJva2Utd2lkdGg6IDI7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5zdWJqZWN0IHtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tcHVsc2UtdGV4dC1wcmltYXJ5LCAjMTExODI3KTtcbiAgbWFyZ2luOiAwIDAgMTJweDtcbn1cblxuLm1lc3NhZ2VzIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA4cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuXG4ubWVzc2FnZSB7XG4gIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgbWF4LXdpZHRoOiA4NSU7XG59XG5cbi5tZXNzYWdlVXNlciB7XG4gIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1wdWxzZS1iZy1ob3ZlciwgI2YzZjRmNik7XG4gIGNvbG9yOiB2YXIoLS1wdWxzZS10ZXh0LXByaW1hcnksICMxMTE4MjcpO1xufVxuXG4ubWVzc2FnZURldiB7XG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxuXG4ubWVzc2FnZUJvZHkge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIG1hcmdpbjogMDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuXG4ubWVzc2FnZVRpbWUge1xuICBmb250LXNpemU6IDExcHg7XG4gIG1hcmdpbjogNHB4IDAgMDtcbiAgb3BhY2l0eTogMC43O1xufVxuXG4ucmVwbHlCb3gge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXB1bHNlLWJvcmRlciwgI2U1ZTdlYik7XG4gIHBhZGRpbmctdG9wOiAxMnB4O1xufVxuXG4ucmVwbHlJbnB1dCB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogMzZweDtcbiAgcGFkZGluZzogOHB4IDEycHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcHVsc2UtYm9yZGVyLCAjZTVlN2ViKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tcHVsc2UtYmcsICNmZmZmZmYpO1xuICBjb2xvcjogdmFyKC0tcHVsc2UtdGV4dC1wcmltYXJ5LCAjMTExODI3KTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuLnJlcGx5SW5wdXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6IHZhcigtLXB1bHNlLWFjY2VudCwgIzYzNjZmMSk7XG59XG5cbi5zZW5kQnRuIHtcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LXNocmluazogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAxMjBtcyBlYXNlO1xufVxuXG4uc2VuZEJ0bjpob3ZlciB7XG4gIG9wYWNpdHk6IDAuOTtcbn1cblxuLnNlbmRCdG46ZGlzYWJsZWQge1xuICBvcGFjaXR5OiAwLjQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5zZW5kSWNvbiB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIHN0cm9rZTogY3VycmVudENvbG9yO1xuICBzdHJva2Utd2lkdGg6IDI7XG4gIGZpbGw6IG5vbmU7XG59XG4iXX0= */";
4
- var styles = {"conversation":"ConversationView-module_conversation__Kyrej","backBtn":"ConversationView-module_backBtn__Ls1YK","backIcon":"ConversationView-module_backIcon__rmWLJ","subject":"ConversationView-module_subject__DVvkN","messages":"ConversationView-module_messages__KatYK","message":"ConversationView-module_message__L9hkM","messageUser":"ConversationView-module_messageUser__0n-3J","messageDev":"ConversationView-module_messageDev__Lss8r","messageBody":"ConversationView-module_messageBody__K5bq6","messageTime":"ConversationView-module_messageTime__LQSrh","replyBox":"ConversationView-module_replyBox__Bjf08","replyInput":"ConversationView-module_replyInput__4UjyN","sendBtn":"ConversationView-module_sendBtn__ryIfI","sendIcon":"ConversationView-module_sendIcon__Xcqbi"};
3
+ var css_248z = ".ConversationView-module_conversation__Kyrej{display:flex;flex-direction:column;height:100%}.ConversationView-module_backBtn__Ls1YK{align-items:center;background:transparent;border:none;color:var(--pulse-text-secondary,#6b7280);cursor:pointer;display:flex;font-family:inherit;font-size:13px;font-weight:500;gap:6px;margin-bottom:8px;padding:4px 0}.ConversationView-module_backBtn__Ls1YK:hover{color:var(--pulse-text-primary,#111827)}.ConversationView-module_backIcon__rmWLJ{stroke:currentColor;stroke-width:2;fill:none;height:16px;width:16px}.ConversationView-module_subject__DVvkN{color:var(--pulse-text-primary,#111827);font-size:15px;font-weight:600;margin:0 0 12px}.ConversationView-module_messages__KatYK{display:flex;flex:1;flex-direction:column;gap:8px;margin-bottom:12px;overflow-y:auto;padding-bottom:12px}.ConversationView-module_message__L9hkM{border-radius:12px;max-width:85%;padding:10px 12px}.ConversationView-module_messageUser__0n-3J{align-self:flex-end;background:var(--pulse-bg-hover,#f3f4f6);color:var(--pulse-text-primary,#111827)}.ConversationView-module_messageDev__Lss8r{align-self:flex-start;color:#fff}.ConversationView-module_messageBody__K5bq6{font-size:14px;line-height:1.5;margin:0;white-space:pre-wrap;word-break:break-word}.ConversationView-module_messageTime__LQSrh{font-size:11px;margin:4px 0 0;opacity:.7}.ConversationView-module_replyBox__Bjf08{border-top:1px solid var(--pulse-border,#e5e7eb);display:flex;gap:8px;padding-top:12px}.ConversationView-module_replyInput__4UjyN{background:var(--pulse-bg,#fff);border:1px solid var(--pulse-border,#e5e7eb);border-radius:6px;color:var(--pulse-text-primary,#111827);flex:1;font-family:inherit;font-size:14px;height:36px;outline:none;padding:8px 12px}.ConversationView-module_replyInput__4UjyN:focus{border-color:var(--pulse-accent,#6366f1)}.ConversationView-module_sendBtn__ryIfI{align-items:center;border:none;border-radius:6px;color:#fff;cursor:pointer;display:flex;flex-shrink:0;height:36px;justify-content:center;transition:opacity .12s ease;width:36px}.ConversationView-module_sendBtn__ryIfI:hover{opacity:.9}.ConversationView-module_sendBtn__ryIfI:disabled{cursor:not-allowed;opacity:.4}.ConversationView-module_sendIcon__Xcqbi{stroke:currentColor;stroke-width:2;fill:none;height:18px;width:18px}.ConversationView-module_attachBtn__FUrN0{align-items:center;background:var(--pulse-bg,#fff);border:1px solid var(--pulse-border,#e5e7eb);border-radius:6px;cursor:pointer;display:flex;flex-shrink:0;height:36px;justify-content:center;transition:border-color .12s ease;width:36px}.ConversationView-module_attachBtn__FUrN0:hover{border-color:var(--pulse-accent,#6366f1)}.ConversationView-module_attachBtn__FUrN0:disabled{cursor:not-allowed;opacity:.4}.ConversationView-module_attachIcon__NJ3uu{stroke:var(--pulse-text-secondary,#6b7280);stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round;height:16px;width:16px}.ConversationView-module_attachmentRow__UL2PK{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.ConversationView-module_attachmentThumb__WbED9{border:1px solid rgba(0,0,0,.1);border-radius:6px;cursor:pointer;max-height:80px;max-width:120px;object-fit:cover}.ConversationView-module_replyAttachments__KXm5y{border-top:1px solid var(--pulse-border,#e5e7eb);padding:8px 0 0}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnZlcnNhdGlvblZpZXcubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2Q0FDRSxZQUFhLENBQ2IscUJBQXNCLENBQ3RCLFdBQ0YsQ0FFQSx3Q0FFRSxrQkFBbUIsQ0FJbkIsc0JBQXVCLENBRHZCLFdBQVksQ0FHWix5Q0FBMkMsQ0FEM0MsY0FBZSxDQU5mLFlBQWEsQ0FVYixtQkFBb0IsQ0FGcEIsY0FBZSxDQUNmLGVBQWdCLENBUGhCLE9BQVEsQ0FTUixpQkFBa0IsQ0FSbEIsYUFTRixDQUVBLDhDQUNFLHVDQUNGLENBRUEseUNBR0UsbUJBQW9CLENBQ3BCLGNBQWUsQ0FDZixTQUFVLENBSFYsV0FBWSxDQURaLFVBS0YsQ0FFQSx3Q0FHRSx1Q0FBeUMsQ0FGekMsY0FBZSxDQUNmLGVBQWdCLENBRWhCLGVBQ0YsQ0FFQSx5Q0FHRSxZQUFhLENBRmIsTUFBTyxDQUdQLHFCQUFzQixDQUN0QixPQUFRLENBRVIsa0JBQW1CLENBTG5CLGVBQWdCLENBSWhCLG1CQUVGLENBRUEsd0NBRUUsa0JBQW1CLENBQ25CLGFBQWMsQ0FGZCxpQkFHRixDQUVBLDRDQUNFLG1CQUFvQixDQUNwQix3Q0FBMEMsQ0FDMUMsdUNBQ0YsQ0FFQSwyQ0FDRSxxQkFBc0IsQ0FDdEIsVUFDRixDQUVBLDRDQUNFLGNBQWUsQ0FDZixlQUFnQixDQUNoQixRQUFTLENBQ1Qsb0JBQXFCLENBQ3JCLHFCQUNGLENBRUEsNENBQ0UsY0FBZSxDQUNmLGNBQWUsQ0FDZixVQUNGLENBRUEseUNBR0UsZ0RBQWtELENBRmxELFlBQWEsQ0FDYixPQUFRLENBRVIsZ0JBQ0YsQ0FFQSwyQ0FNRSwrQkFBb0MsQ0FEcEMsNENBQThDLENBRDlDLGlCQUFrQixDQUdsQix1Q0FBeUMsQ0FOekMsTUFBTyxDQVFQLG1CQUFvQixDQURwQixjQUFlLENBTmYsV0FBWSxDQVFaLFlBQWEsQ0FQYixnQkFRRixDQUVBLGlEQUNFLHdDQUNGLENBRUEsd0NBUUUsa0JBQW1CLENBSm5CLFdBQVksQ0FEWixpQkFBa0IsQ0FFbEIsVUFBYyxDQUNkLGNBQWUsQ0FDZixZQUFhLENBR2IsYUFBYyxDQVJkLFdBQVksQ0FPWixzQkFBdUIsQ0FFdkIsNEJBQThCLENBVjlCLFVBV0YsQ0FFQSw4Q0FDRSxVQUNGLENBRUEsaURBRUUsa0JBQW1CLENBRG5CLFVBRUYsQ0FFQSx5Q0FHRSxtQkFBb0IsQ0FDcEIsY0FBZSxDQUNmLFNBQVUsQ0FIVixXQUFZLENBRFosVUFLRixDQUVBLDBDQVFFLGtCQUFtQixDQUhuQiwrQkFBb0MsQ0FEcEMsNENBQThDLENBRDlDLGlCQUFrQixDQUdsQixjQUFlLENBQ2YsWUFBYSxDQUdiLGFBQWMsQ0FSZCxXQUFZLENBT1osc0JBQXVCLENBRXZCLGlDQUFtQyxDQVZuQyxVQVdGLENBRUEsZ0RBQ0Usd0NBQ0YsQ0FFQSxtREFFRSxrQkFBbUIsQ0FEbkIsVUFFRixDQUVBLDJDQUdFLDBDQUE0QyxDQUM1QyxjQUFlLENBQ2YsU0FBVSxDQUNWLG9CQUFxQixDQUNyQixxQkFBc0IsQ0FMdEIsV0FBWSxDQURaLFVBT0YsQ0FFQSw4Q0FDRSxZQUFhLENBRWIsY0FBZSxDQURmLE9BQVEsQ0FFUixjQUNGLENBRUEsZ0RBTUUsK0JBQW9DLENBSHBDLGlCQUFrQixDQUVsQixjQUFlLENBSGYsZUFBZ0IsQ0FEaEIsZUFBZ0IsQ0FHaEIsZ0JBR0YsQ0FFQSxpREFFRSxnREFBa0QsQ0FEbEQsZUFFRiIsImZpbGUiOiJDb252ZXJzYXRpb25WaWV3Lm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuY29udmVyc2F0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uYmFja0J0biB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICBwYWRkaW5nOiA0cHggMDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogdmFyKC0tcHVsc2UtdGV4dC1zZWNvbmRhcnksICM2YjcyODApO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG5cbi5iYWNrQnRuOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLXB1bHNlLXRleHQtcHJpbWFyeSwgIzExMTgyNyk7XG59XG5cbi5iYWNrSWNvbiB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIHN0cm9rZTogY3VycmVudENvbG9yO1xuICBzdHJva2Utd2lkdGg6IDI7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5zdWJqZWN0IHtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tcHVsc2UtdGV4dC1wcmltYXJ5LCAjMTExODI3KTtcbiAgbWFyZ2luOiAwIDAgMTJweDtcbn1cblxuLm1lc3NhZ2VzIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA4cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuXG4ubWVzc2FnZSB7XG4gIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgbWF4LXdpZHRoOiA4NSU7XG59XG5cbi5tZXNzYWdlVXNlciB7XG4gIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1wdWxzZS1iZy1ob3ZlciwgI2YzZjRmNik7XG4gIGNvbG9yOiB2YXIoLS1wdWxzZS10ZXh0LXByaW1hcnksICMxMTE4MjcpO1xufVxuXG4ubWVzc2FnZURldiB7XG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxuXG4ubWVzc2FnZUJvZHkge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIG1hcmdpbjogMDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuXG4ubWVzc2FnZVRpbWUge1xuICBmb250LXNpemU6IDExcHg7XG4gIG1hcmdpbjogNHB4IDAgMDtcbiAgb3BhY2l0eTogMC43O1xufVxuXG4ucmVwbHlCb3gge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXB1bHNlLWJvcmRlciwgI2U1ZTdlYik7XG4gIHBhZGRpbmctdG9wOiAxMnB4O1xufVxuXG4ucmVwbHlJbnB1dCB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogMzZweDtcbiAgcGFkZGluZzogOHB4IDEycHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcHVsc2UtYm9yZGVyLCAjZTVlN2ViKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tcHVsc2UtYmcsICNmZmZmZmYpO1xuICBjb2xvcjogdmFyKC0tcHVsc2UtdGV4dC1wcmltYXJ5LCAjMTExODI3KTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuLnJlcGx5SW5wdXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6IHZhcigtLXB1bHNlLWFjY2VudCwgIzYzNjZmMSk7XG59XG5cbi5zZW5kQnRuIHtcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LXNocmluazogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAxMjBtcyBlYXNlO1xufVxuXG4uc2VuZEJ0bjpob3ZlciB7XG4gIG9wYWNpdHk6IDAuOTtcbn1cblxuLnNlbmRCdG46ZGlzYWJsZWQge1xuICBvcGFjaXR5OiAwLjQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5zZW5kSWNvbiB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIHN0cm9rZTogY3VycmVudENvbG9yO1xuICBzdHJva2Utd2lkdGg6IDI7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5hdHRhY2hCdG4ge1xuICB3aWR0aDogMzZweDtcbiAgaGVpZ2h0OiAzNnB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXB1bHNlLWJvcmRlciwgI2U1ZTdlYik7XG4gIGJhY2tncm91bmQ6IHZhcigtLXB1bHNlLWJnLCAjZmZmZmZmKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleC1zaHJpbms6IDA7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxMjBtcyBlYXNlO1xufVxuXG4uYXR0YWNoQnRuOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wdWxzZS1hY2NlbnQsICM2MzY2ZjEpO1xufVxuXG4uYXR0YWNoQnRuOmRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC40O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uYXR0YWNoSWNvbiB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIHN0cm9rZTogdmFyKC0tcHVsc2UtdGV4dC1zZWNvbmRhcnksICM2YjcyODApO1xuICBzdHJva2Utd2lkdGg6IDI7XG4gIGZpbGw6IG5vbmU7XG4gIHN0cm9rZS1saW5lY2FwOiByb3VuZDtcbiAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDtcbn1cblxuLmF0dGFjaG1lbnRSb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDZweDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW4tdG9wOiA2cHg7XG59XG5cbi5hdHRhY2htZW50VGh1bWIge1xuICBtYXgtd2lkdGg6IDEyMHB4O1xuICBtYXgtaGVpZ2h0OiA4MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLnJlcGx5QXR0YWNobWVudHMge1xuICBwYWRkaW5nOiA4cHggMCAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcHVsc2UtYm9yZGVyLCAjZTVlN2ViKTtcbn1cbiJdfQ== */";
4
+ var styles = {"conversation":"ConversationView-module_conversation__Kyrej","backBtn":"ConversationView-module_backBtn__Ls1YK","backIcon":"ConversationView-module_backIcon__rmWLJ","subject":"ConversationView-module_subject__DVvkN","messages":"ConversationView-module_messages__KatYK","message":"ConversationView-module_message__L9hkM","messageUser":"ConversationView-module_messageUser__0n-3J","messageDev":"ConversationView-module_messageDev__Lss8r","messageBody":"ConversationView-module_messageBody__K5bq6","messageTime":"ConversationView-module_messageTime__LQSrh","replyBox":"ConversationView-module_replyBox__Bjf08","replyInput":"ConversationView-module_replyInput__4UjyN","sendBtn":"ConversationView-module_sendBtn__ryIfI","sendIcon":"ConversationView-module_sendIcon__Xcqbi","attachBtn":"ConversationView-module_attachBtn__FUrN0","attachIcon":"ConversationView-module_attachIcon__NJ3uu","attachmentRow":"ConversationView-module_attachmentRow__UL2PK","attachmentThumb":"ConversationView-module_attachmentThumb__WbED9","replyAttachments":"ConversationView-module_replyAttachments__KXm5y"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -1 +1 @@
1
- {"version":3,"file":"FeedbackForm.d.ts","sourceRoot":"","sources":["../../src/components/FeedbackForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAU9C,UAAU,iBAAiB;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,QAAQ,EAAE,gBAAgB,GAC3B,EAAE,iBAAiB,2CA0InB"}
1
+ {"version":3,"file":"FeedbackForm.d.ts","sourceRoot":"","sources":["../../src/components/FeedbackForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAY9C,UAAU,iBAAiB;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,QAAQ,EAAE,gBAAgB,GAC3B,EAAE,iBAAiB,2CA2KnB"}
@@ -1,9 +1,11 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useState } from 'react';
3
- import { submitFeedback } from '../lib/api.mjs';
3
+ import { uploadAttachment, submitFeedback } from '../lib/api.mjs';
4
+ import { compressImage } from '../lib/compress.mjs';
4
5
  import { captureContext } from '../lib/capture.mjs';
5
6
  import { TypeSelector } from './TypeSelector.mjs';
6
7
  import { SuccessState } from './SuccessState.mjs';
8
+ import { getClipboardImages, ImagePicker } from './ImagePicker.mjs';
7
9
  import styles from './FeedbackForm.module.css.mjs';
8
10
 
9
11
  const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
@@ -13,19 +15,32 @@ function FeedbackForm({ client, accentColor, placeholder, collectEmail, metadata
13
15
  const [body, setBody] = useState('');
14
16
  const [email, setEmail] = useState('');
15
17
  const [name, setName] = useState('');
18
+ const [pendingFiles, setPendingFiles] = useState([]);
16
19
  const [submitting, setSubmitting] = useState(false);
20
+ const [uploading, setUploading] = useState(false);
17
21
  const [error, setError] = useState(null);
18
22
  const [emailError, setEmailError] = useState(null);
19
23
  const [success, setSuccess] = useState(false);
20
24
  const [cooldown, setCooldown] = useState(false);
21
25
  const hasEmailError = email.trim() !== '' && !EMAIL_REGEX.test(email.trim());
22
- const canSubmit = type && subject.trim() && body.trim() && !hasEmailError && !submitting && !cooldown;
26
+ const canSubmit = type && subject.trim() && body.trim() && !hasEmailError && !submitting && !uploading && !cooldown;
23
27
  async function handleSubmit(e) {
24
28
  e.preventDefault();
25
29
  if (!canSubmit)
26
30
  return;
27
- setSubmitting(true);
28
31
  setError(null);
32
+ // Upload attachments first
33
+ let attachments = [];
34
+ if (pendingFiles.length > 0) {
35
+ setUploading(true);
36
+ const results = await Promise.all(pendingFiles.map(async (file) => {
37
+ const compressed = await compressImage(file);
38
+ return uploadAttachment(client, compressed, file.name);
39
+ }));
40
+ setUploading(false);
41
+ attachments = results.filter((a) => a !== null);
42
+ }
43
+ setSubmitting(true);
29
44
  const ctx = captureContext();
30
45
  const threadId = await submitFeedback(client, {
31
46
  type,
@@ -38,6 +53,7 @@ function FeedbackForm({ client, accentColor, placeholder, collectEmail, metadata
38
53
  screenSize: ctx.screenSize,
39
54
  appVersion: metadata.appVersion,
40
55
  metadata,
56
+ attachments,
41
57
  });
42
58
  setSubmitting(false);
43
59
  if (threadId) {
@@ -58,16 +74,22 @@ function FeedbackForm({ client, accentColor, placeholder, collectEmail, metadata
58
74
  setName('');
59
75
  setError(null);
60
76
  setEmailError(null);
77
+ setPendingFiles([]);
61
78
  setSuccess(false);
62
79
  }
63
80
  if (success) {
64
81
  return jsx(SuccessState, { accentColor: accentColor, onNewFeedback: resetForm });
65
82
  }
66
- return (jsxs("form", { className: styles.form, onSubmit: handleSubmit, children: [jsxs("div", { children: [jsx("label", { className: styles.label, children: "Type" }), jsx(TypeSelector, { value: type, onChange: setType })] }), jsxs("div", { children: [jsx("label", { className: styles.label, children: "Subject" }), jsx("input", { className: styles.input, type: "text", value: subject, onChange: (e) => setSubject(e.target.value.slice(0, 200)), placeholder: "Brief summary", maxLength: 200 }), jsxs("div", { className: styles.charCount, children: [subject.length, "/200"] })] }), jsxs("div", { children: [jsx("label", { className: styles.label, children: "Message" }), jsx("textarea", { className: styles.textarea, value: body, onChange: (e) => setBody(e.target.value.slice(0, 5000)), placeholder: placeholder, maxLength: 5000 }), jsxs("div", { className: styles.charCount, children: [body.length, "/5000"] })] }), collectEmail && (jsxs("div", { className: styles.row, children: [jsxs("div", { children: [jsx("label", { className: styles.label, children: "Name (optional)" }), jsx("input", { className: styles.input, type: "text", value: name, onChange: (e) => setName(e.target.value), placeholder: "Your name" })] }), jsxs("div", { children: [jsx("label", { className: styles.label, children: "Email (optional)" }), jsx("input", { className: styles.input, type: "email", value: email, onChange: (e) => { setEmail(e.target.value); setEmailError(null); }, onBlur: () => {
83
+ return (jsxs("form", { className: styles.form, onSubmit: handleSubmit, children: [jsxs("div", { children: [jsx("label", { className: styles.label, children: "Type" }), jsx(TypeSelector, { value: type, onChange: setType })] }), jsxs("div", { children: [jsx("label", { className: styles.label, children: "Subject" }), jsx("input", { className: styles.input, type: "text", value: subject, onChange: (e) => setSubject(e.target.value.slice(0, 200)), placeholder: "Brief summary", maxLength: 200 }), jsxs("div", { className: styles.charCount, children: [subject.length, "/200"] })] }), jsxs("div", { children: [jsx("label", { className: styles.label, children: "Message" }), jsx("textarea", { className: styles.textarea, value: body, onChange: (e) => setBody(e.target.value.slice(0, 5000)), onPaste: (e) => {
84
+ const images = getClipboardImages(e);
85
+ if (images.length > 0) {
86
+ setPendingFiles((prev) => [...prev, ...images].slice(0, 3));
87
+ }
88
+ }, placeholder: placeholder, maxLength: 5000 }), jsxs("div", { className: styles.charCount, children: [body.length, "/5000"] })] }), jsx(ImagePicker, { files: pendingFiles, onFilesSelected: (files) => setPendingFiles((prev) => [...prev, ...files].slice(0, 3)), onRemove: (i) => setPendingFiles((prev) => prev.filter((_, idx) => idx !== i)), accentColor: accentColor, disabled: submitting || uploading }), collectEmail && (jsxs("div", { className: styles.row, children: [jsxs("div", { children: [jsx("label", { className: styles.label, children: "Name (optional)" }), jsx("input", { className: styles.input, type: "text", value: name, onChange: (e) => setName(e.target.value), placeholder: "Your name" })] }), jsxs("div", { children: [jsx("label", { className: styles.label, children: "Email (optional)" }), jsx("input", { className: styles.input, type: "email", value: email, onChange: (e) => { setEmail(e.target.value); setEmailError(null); }, onBlur: () => {
67
89
  if (email.trim() && !EMAIL_REGEX.test(email.trim())) {
68
90
  setEmailError('Please enter a valid email');
69
91
  }
70
- }, placeholder: "you@example.com" }), emailError && jsx("p", { className: styles.fieldError, children: emailError })] })] })), error && jsx("p", { className: styles.error, children: error }), jsx("button", { type: "submit", className: styles.submitBtn, style: { backgroundColor: accentColor }, disabled: !canSubmit, children: submitting ? 'Sending...' : 'Send Feedback' })] }));
92
+ }, placeholder: "you@example.com" }), emailError && jsx("p", { className: styles.fieldError, children: emailError })] })] })), error && jsx("p", { className: styles.error, children: error }), jsx("button", { type: "submit", className: styles.submitBtn, style: { backgroundColor: accentColor }, disabled: !canSubmit, children: uploading ? 'Uploading...' : submitting ? 'Sending...' : 'Send Feedback' })] }));
71
93
  }
72
94
 
73
95
  export { FeedbackForm };
@@ -1 +1 @@
1
- {"version":3,"file":"FeedbackForm.mjs","sources":["../../src/components/FeedbackForm.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"FeedbackForm.mjs","sources":["../../src/components/FeedbackForm.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ interface ImagePickerProps {
3
+ files: File[];
4
+ onFilesSelected: (files: File[]) => void;
5
+ onRemove: (index: number) => void;
6
+ maxFiles?: number;
7
+ accentColor: string;
8
+ disabled?: boolean;
9
+ }
10
+ export declare function ImagePicker({ files, onFilesSelected, onRemove, maxFiles, accentColor, disabled, }: ImagePickerProps): import("react/jsx-runtime").JSX.Element;
11
+ /** Extract image files from a clipboard paste event */
12
+ export declare function getClipboardImages(e: React.ClipboardEvent): File[];
13
+ export {};
14
+ //# sourceMappingURL=ImagePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImagePicker.d.ts","sourceRoot":"","sources":["../../src/components/ImagePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAM3D,UAAU,gBAAgB;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,eAAe,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,eAAe,EACf,QAAQ,EACR,QAAY,EACZ,WAAW,EACX,QAAgB,GACjB,EAAE,gBAAgB,2CAyElB;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI,EAAE,CAMlE"}
@@ -0,0 +1,42 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useRef, useState, useEffect } from 'react';
3
+ import styles from './ImagePicker.module.css.mjs';
4
+
5
+ const ALLOWED_TYPES = ['image/png', 'image/jpeg', 'image/gif', 'image/webp'];
6
+ const MAX_SIZE = 5 * 1024 * 1024;
7
+ function ImagePicker({ files, onFilesSelected, onRemove, maxFiles = 3, accentColor, disabled = false, }) {
8
+ const inputRef = useRef(null);
9
+ const [previews, setPreviews] = useState([]);
10
+ useEffect(() => {
11
+ const urls = files.map((f) => URL.createObjectURL(f));
12
+ setPreviews(urls);
13
+ return () => urls.forEach((u) => URL.revokeObjectURL(u));
14
+ }, [files]);
15
+ function handleChange(e) {
16
+ const selected = Array.from(e.target.files || []);
17
+ e.target.value = '';
18
+ addFiles(selected);
19
+ }
20
+ function addFiles(selected) {
21
+ const remaining = maxFiles - files.length;
22
+ if (remaining <= 0)
23
+ return;
24
+ const valid = selected
25
+ .filter((f) => ALLOWED_TYPES.includes(f.type) && f.size <= MAX_SIZE)
26
+ .slice(0, remaining);
27
+ if (valid.length > 0)
28
+ onFilesSelected(valid);
29
+ }
30
+ return (jsxs("div", { className: styles.picker, children: [jsx("input", { ref: inputRef, type: "file", accept: "image/png,image/jpeg,image/gif,image/webp", multiple: true, className: styles.hidden, onChange: handleChange, disabled: disabled }), files.length < maxFiles && (jsx("button", { type: "button", className: styles.attachBtn, onClick: () => inputRef.current?.click(), disabled: disabled, title: "Attach images", children: jsx("svg", { className: styles.icon, viewBox: "0 0 24 24", children: jsx("path", { d: "M21.44 11.05l-9.19 9.19a6 6 0 01-8.49-8.49l9.19-9.19a4 4 0 015.66 5.66l-9.2 9.19a2 2 0 01-2.83-2.83l8.49-8.48" }) }) })), previews.length > 0 && (jsx("div", { className: styles.thumbs, children: previews.map((url, i) => (jsxs("div", { className: styles.thumbWrap, children: [jsx("img", { className: styles.thumb, src: url, alt: files[i]?.name }), jsx("button", { type: "button", className: styles.remove, onClick: () => onRemove(i), disabled: disabled, style: { backgroundColor: accentColor }, children: "\u00D7" })] }, i))) }))] }));
31
+ }
32
+ /** Extract image files from a clipboard paste event */
33
+ function getClipboardImages(e) {
34
+ const items = Array.from(e.clipboardData.items);
35
+ return items
36
+ .filter((item) => item.kind === 'file' && ALLOWED_TYPES.includes(item.type))
37
+ .map((item) => item.getAsFile())
38
+ .filter(Boolean);
39
+ }
40
+
41
+ export { ImagePicker, getClipboardImages };
42
+ //# sourceMappingURL=ImagePicker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImagePicker.mjs","sources":["../../src/components/ImagePicker.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../node_modules/style-inject/dist/style-inject.es.mjs';
2
+
3
+ var css_248z = ".ImagePicker-module_picker__8tgcC{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.ImagePicker-module_hidden__1X7xg{display:none}.ImagePicker-module_attachBtn__2pk-P{align-items:center;background:var(--pulse-bg,#fff);border:1px solid var(--pulse-border,#e5e7eb);border-radius:6px;cursor:pointer;display:flex;flex-shrink:0;height:32px;justify-content:center;transition:border-color .12s ease;width:32px}.ImagePicker-module_attachBtn__2pk-P:hover{border-color:var(--pulse-accent,#6366f1)}.ImagePicker-module_attachBtn__2pk-P:disabled{cursor:not-allowed;opacity:.4}.ImagePicker-module_icon__0AoQY{stroke:var(--pulse-text-secondary,#6b7280);stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round;height:16px;width:16px}.ImagePicker-module_thumbs__dae6n{display:flex;flex-wrap:wrap;gap:6px}.ImagePicker-module_thumbWrap__03OD-{border:1px solid var(--pulse-border,#e5e7eb);border-radius:6px;height:48px;overflow:hidden;position:relative;width:48px}.ImagePicker-module_thumb__DaGDa{display:block;height:100%;object-fit:cover;width:100%}.ImagePicker-module_remove__IvsEj{align-items:center;border:none;border-radius:0 5px 0 4px;color:#fff;cursor:pointer;display:flex;font-size:13px;height:18px;justify-content:center;line-height:1;padding:0;position:absolute;right:-1px;top:-1px;width:18px}.ImagePicker-module_remove__IvsEj:disabled{cursor:not-allowed;opacity:.5}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkltYWdlUGlja2VyLm1vZHVsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0NBRUUsa0JBQW1CLENBRG5CLFlBQWEsQ0FHYixjQUFlLENBRGYsT0FFRixDQUVBLGtDQUNFLFlBQ0YsQ0FFQSxxQ0FRRSxrQkFBbUIsQ0FIbkIsK0JBQW9DLENBRHBDLDRDQUE4QyxDQUQ5QyxpQkFBa0IsQ0FHbEIsY0FBZSxDQUNmLFlBQWEsQ0FHYixhQUFjLENBUmQsV0FBWSxDQU9aLHNCQUF1QixDQUV2QixpQ0FBbUMsQ0FWbkMsVUFXRixDQUVBLDJDQUNFLHdDQUNGLENBRUEsOENBRUUsa0JBQW1CLENBRG5CLFVBRUYsQ0FFQSxnQ0FHRSwwQ0FBNEMsQ0FDNUMsY0FBZSxDQUNmLFNBQVUsQ0FDVixvQkFBcUIsQ0FDckIscUJBQXNCLENBTHRCLFdBQVksQ0FEWixVQU9GLENBRUEsa0NBQ0UsWUFBYSxDQUViLGNBQWUsQ0FEZixPQUVGLENBRUEscUNBTUUsNENBQThDLENBRjlDLGlCQUFrQixDQURsQixXQUFZLENBRVosZUFBZ0IsQ0FKaEIsaUJBQWtCLENBQ2xCLFVBS0YsQ0FFQSxpQ0FJRSxhQUFjLENBRmQsV0FBWSxDQUNaLGdCQUFpQixDQUZqQixVQUlGLENBRUEsa0NBYUUsa0JBQW1CLENBTm5CLFdBQVksQ0FEWix5QkFBMEIsQ0FFMUIsVUFBYyxDQUdkLGNBQWUsQ0FDZixZQUFhLENBSGIsY0FBZSxDQUpmLFdBQVksQ0FTWixzQkFBdUIsQ0FKdkIsYUFBYyxDQUtkLFNBQVUsQ0FkVixpQkFBa0IsQ0FFbEIsVUFBVyxDQURYLFFBQVMsQ0FFVCxVQVlGLENBRUEsMkNBRUUsa0JBQW1CLENBRG5CLFVBRUYiLCJmaWxlIjoiSW1hZ2VQaWNrZXIubW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5waWNrZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxuXG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmF0dGFjaEJ0biB7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcHVsc2UtYm9yZGVyLCAjZTVlN2ViKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tcHVsc2UtYmcsICNmZmZmZmYpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LXNocmluazogMDtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2U7XG59XG5cbi5hdHRhY2hCdG46aG92ZXIge1xuICBib3JkZXItY29sb3I6IHZhcigtLXB1bHNlLWFjY2VudCwgIzYzNjZmMSk7XG59XG5cbi5hdHRhY2hCdG46ZGlzYWJsZWQge1xuICBvcGFjaXR5OiAwLjQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5pY29uIHtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgc3Ryb2tlOiB2YXIoLS1wdWxzZS10ZXh0LXNlY29uZGFyeSwgIzZiNzI4MCk7XG4gIHN0cm9rZS13aWR0aDogMjtcbiAgZmlsbDogbm9uZTtcbiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xuICBzdHJva2UtbGluZWpvaW46IHJvdW5kO1xufVxuXG4udGh1bWJzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA2cHg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLnRodW1iV3JhcCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDQ4cHg7XG4gIGhlaWdodDogNDhweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1wdWxzZS1ib3JkZXIsICNlNWU3ZWIpO1xufVxuXG4udGh1bWIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5yZW1vdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTFweDtcbiAgcmlnaHQ6IC0xcHg7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgNXB4IDAgNHB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAwO1xufVxuXG4ucmVtb3ZlOmRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC41O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuIl19 */";
4
+ var styles = {"picker":"ImagePicker-module_picker__8tgcC","hidden":"ImagePicker-module_hidden__1X7xg","attachBtn":"ImagePicker-module_attachBtn__2pk-P","icon":"ImagePicker-module_icon__0AoQY","thumbs":"ImagePicker-module_thumbs__dae6n","thumbWrap":"ImagePicker-module_thumbWrap__03OD-","thumb":"ImagePicker-module_thumb__DaGDa","remove":"ImagePicker-module_remove__IvsEj"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=ImagePicker.module.css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImagePicker.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
package/dist/lib/api.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { HttpClient } from './http';
2
- import type { FeedbackType, Thread, Message } from '../types';
2
+ import type { FeedbackType, Thread, Message, Attachment } from '../types';
3
3
  interface SubmitFeedbackParams {
4
4
  type: FeedbackType;
5
5
  subject: string;
@@ -11,11 +11,13 @@ interface SubmitFeedbackParams {
11
11
  appVersion?: string;
12
12
  screenSize?: string;
13
13
  metadata?: Record<string, unknown>;
14
+ attachments?: Attachment[];
14
15
  }
16
+ export declare function uploadAttachment(client: HttpClient, file: Blob, filename: string): Promise<Attachment | null>;
15
17
  export declare function submitFeedback(client: HttpClient, params: SubmitFeedbackParams): Promise<string | null>;
16
18
  export declare function getMyThreads(client: HttpClient): Promise<Thread[]>;
17
19
  export declare function getThreadMessages(client: HttpClient, threadId: string): Promise<Message[]>;
18
- export declare function sendUserReply(client: HttpClient, threadId: string, body: string): Promise<boolean>;
20
+ export declare function sendUserReply(client: HttpClient, threadId: string, body: string, attachments?: Attachment[]): Promise<boolean>;
19
21
  export declare function checkUnreadReplies(client: HttpClient): Promise<boolean>;
20
22
  export {};
21
23
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAI9D,UAAU,oBAAoB;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB;AAID,wBAAsB,YAAY,CAChC,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAID,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,EAAE,CAAC,CASpB;AAID,wBAAsB,aAAa,CACjC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CASlB;AAID,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,OAAO,CAAC,CASlB"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI1E,UAAU,oBAAoB;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAID,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAO5B;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAID,wBAAsB,YAAY,CAChC,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAID,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,EAAE,CAAC,CASpB;AAID,wBAAsB,aAAa,CACjC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,UAAU,EAAE,GACzB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAID,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,OAAO,CAAC,CASlB"}
package/dist/lib/api.mjs CHANGED
@@ -1,4 +1,13 @@
1
1
  // ── Widget API Layer ──
2
+ // ── Upload Attachment ──
3
+ async function uploadAttachment(client, file, filename) {
4
+ const { data, error } = await client.upload('/api/v1/upload', file, filename);
5
+ if (error) {
6
+ console.warn('[Pulse] Upload error:', error);
7
+ return null;
8
+ }
9
+ return data;
10
+ }
2
11
  async function submitFeedback(client, params) {
3
12
  const { data, error } = await client.post('/api/v1/feedback', {
4
13
  type: params.type,
@@ -10,6 +19,7 @@ async function submitFeedback(client, params) {
10
19
  userAgent: params.userAgent || undefined,
11
20
  screenSize: params.screenSize || undefined,
12
21
  metadata: params.metadata || {},
22
+ attachments: params.attachments || [],
13
23
  });
14
24
  if (error) {
15
25
  console.warn('[Pulse] Submit error:', error);
@@ -36,8 +46,11 @@ async function getThreadMessages(client, threadId) {
36
46
  return data ?? [];
37
47
  }
38
48
  // ── Send Reply (user) ──
39
- async function sendUserReply(client, threadId, body) {
40
- const { error } = await client.post(`/api/v1/threads/${threadId}/reply`, { body });
49
+ async function sendUserReply(client, threadId, body, attachments) {
50
+ const { error } = await client.post(`/api/v1/threads/${threadId}/reply`, {
51
+ body,
52
+ attachments: attachments || [],
53
+ });
41
54
  if (error) {
42
55
  console.warn('[Pulse] Reply error:', error);
43
56
  return false;
@@ -54,5 +67,5 @@ async function checkUnreadReplies(client) {
54
67
  return data?.hasUnread ?? false;
55
68
  }
56
69
 
57
- export { checkUnreadReplies, getMyThreads, getThreadMessages, sendUserReply, submitFeedback };
70
+ export { checkUnreadReplies, getMyThreads, getThreadMessages, sendUserReply, submitFeedback, uploadAttachment };
58
71
  //# sourceMappingURL=api.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.mjs","sources":["../../src/lib/api.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AAoBO,eAAe,cAAc,CAClC,MAAkB,EAClB,MAA4B,EAAA;AAE5B,IAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAuB,kBAAkB,EAAE;QAClF,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,QAAA,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS;AACpC,QAAA,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;AAClC,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS;AACpC,QAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS;AACxC,QAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,SAAS;AAC1C,QAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;AAChC,KAAA,CAAC;IAEF,IAAI,KAAK,EAAE;AACT,QAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC5C,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,IAAI,EAAE,QAAQ,IAAI,IAAI;AAC/B;AAEA;AAEO,eAAe,YAAY,CAChC,MAAkB,EAAA;AAElB,IAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAW,iBAAiB,CAAC;IAErE,IAAI,KAAK,EAAE;AACT,QAAA,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACnD,QAAA,OAAO,EAAE;IACX;IAEA,OAAO,IAAI,IAAI,EAAE;AACnB;AAEA;AAEO,eAAe,iBAAiB,CACrC,MAAkB,EAClB,QAAgB,EAAA;AAEhB,IAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAY,CAAA,gBAAA,EAAmB,QAAQ,CAAA,SAAA,CAAW,CAAC;IAE3F,IAAI,KAAK,EAAE;AACT,QAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACpD,QAAA,OAAO,EAAE;IACX;IAEA,OAAO,IAAI,IAAI,EAAE;AACnB;AAEA;AAEO,eAAe,aAAa,CACjC,MAAkB,EAClB,QAAgB,EAChB,IAAY,EAAA;AAEZ,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA,gBAAA,EAAmB,QAAQ,CAAA,MAAA,CAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;IAElF,IAAI,KAAK,EAAE;AACT,QAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC3C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;AAEO,eAAe,kBAAkB,CACtC,MAAkB,EAAA;AAElB,IAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAyB,gBAAgB,CAAC;IAElF,IAAI,KAAK,EAAE;AACT,QAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC;AAClD,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI,EAAE,SAAS,IAAI,KAAK;AACjC;;;;"}
1
+ {"version":3,"file":"api.mjs","sources":["../../src/lib/api.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function compressImage(file: File, maxWidth?: number, quality?: number): Promise<Blob>;
2
+ //# sourceMappingURL=compress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../../src/lib/compress.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,CACjC,IAAI,EAAE,IAAI,EACV,QAAQ,SAAO,EACf,OAAO,SAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -0,0 +1,24 @@
1
+ // Canvas-based image compression — zero dependencies
2
+ async function compressImage(file, maxWidth = 1920, quality = 0.8) {
3
+ const bitmap = await createImageBitmap(file);
4
+ const { width, height } = bitmap;
5
+ // Only downscale, never upscale
6
+ let targetWidth = width;
7
+ let targetHeight = height;
8
+ if (width > maxWidth) {
9
+ targetWidth = maxWidth;
10
+ targetHeight = Math.round(height * (maxWidth / width));
11
+ }
12
+ const canvas = new OffscreenCanvas(targetWidth, targetHeight);
13
+ const ctx = canvas.getContext('2d');
14
+ ctx.drawImage(bitmap, 0, 0, targetWidth, targetHeight);
15
+ bitmap.close();
16
+ // Keep PNG as PNG (transparency), convert others to WebP
17
+ const outputType = file.type === 'image/png' ? 'image/png' : 'image/webp';
18
+ const compressed = await canvas.convertToBlob({ type: outputType, quality });
19
+ // If compressed is larger, return original
20
+ return compressed.size < file.size ? compressed : file;
21
+ }
22
+
23
+ export { compressImage };
24
+ //# sourceMappingURL=compress.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compress.mjs","sources":["../../src/lib/compress.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AAEO,eAAe,aAAa,CACjC,IAAU,EACV,QAAQ,GAAG,IAAI,EACf,OAAO,GAAG,GAAG,EAAA;AAEb,IAAA,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC;AAC5C,IAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;;IAGhC,IAAI,WAAW,GAAG,KAAK;IACvB,IAAI,YAAY,GAAG,MAAM;AACzB,IAAA,IAAI,KAAK,GAAG,QAAQ,EAAE;QACpB,WAAW,GAAG,QAAQ;AACtB,QAAA,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC;IACxD;IAEA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE;AACpC,IAAA,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC;IACtD,MAAM,CAAC,KAAK,EAAE;;AAGd,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,WAAW,GAAG,WAAW,GAAG,YAAY;AACzE,IAAA,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;;AAG5E,IAAA,OAAO,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,GAAG,IAAI;AACxD;;;;"}
@@ -7,6 +7,11 @@ export interface HttpClient {
7
7
  data: T | null;
8
8
  error: string | null;
9
9
  }>;
10
+ upload<T>(path: string, file: Blob, filename: string): Promise<{
11
+ data: T | null;
12
+ error: string | null;
13
+ }>;
14
+ baseUrl: string;
10
15
  }
11
- export declare function createHttpClient(apiUrl: string, apiKey: string, deviceId: string): HttpClient;
16
+ export declare function createHttpClient(apiUrl: string, apiKey: string, deviceId: string, userId?: string): HttpClient;
12
17
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACxE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CACzF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAsC7F"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACxE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACxF,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACzG,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAmE9G"}
package/dist/lib/http.mjs CHANGED
@@ -1,9 +1,10 @@
1
1
  // ── Pulse HTTP Client ──
2
- function createHttpClient(apiUrl, apiKey, deviceId) {
2
+ function createHttpClient(apiUrl, apiKey, deviceId, userId) {
3
3
  const headers = {
4
4
  'Content-Type': 'application/json',
5
5
  'x-api-key': apiKey,
6
6
  'x-device-id': deviceId,
7
+ ...(userId ? { 'x-user-id': userId } : {}),
7
8
  };
8
9
  async function request(path, options) {
9
10
  try {
@@ -22,7 +23,13 @@ function createHttpClient(apiUrl, apiKey, deviceId) {
22
23
  return { data: null, error: 'Network error' };
23
24
  }
24
25
  }
26
+ const authHeaders = {
27
+ 'x-api-key': apiKey,
28
+ 'x-device-id': deviceId,
29
+ ...(userId ? { 'x-user-id': userId } : {}),
30
+ };
25
31
  return {
32
+ baseUrl: apiUrl,
26
33
  get(path) {
27
34
  return request(path);
28
35
  },
@@ -32,6 +39,26 @@ function createHttpClient(apiUrl, apiKey, deviceId) {
32
39
  body: JSON.stringify(body),
33
40
  });
34
41
  },
42
+ async upload(path, file, filename) {
43
+ try {
44
+ const formData = new FormData();
45
+ formData.append('file', file, filename);
46
+ const res = await fetch(`${apiUrl}${path}`, {
47
+ method: 'POST',
48
+ headers: authHeaders,
49
+ body: formData,
50
+ });
51
+ const json = await res.json();
52
+ if (!res.ok) {
53
+ return { data: null, error: json.error || `HTTP ${res.status}` };
54
+ }
55
+ return { data: json.data, error: null };
56
+ }
57
+ catch (err) {
58
+ console.warn('[Pulse] Upload error:', err);
59
+ return { data: null, error: 'Upload failed' };
60
+ }
61
+ },
35
62
  };
36
63
  }
37
64
 
@@ -1 +1 @@
1
- {"version":3,"file":"http.mjs","sources":["../../src/lib/http.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;SAOgB,gBAAgB,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAA;AAC/E,IAAA,MAAM,OAAO,GAA2B;AACtC,QAAA,cAAc,EAAE,kBAAkB;AAClC,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,aAAa,EAAE,QAAQ;KACxB;AAED,IAAA,eAAe,OAAO,CAAI,IAAY,EAAE,OAAqB,EAAA;AAC3D,QAAA,IAAI;YACF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAA,EAAG,IAAI,CAAA,CAAE,EAAE;AAC1C,gBAAA,GAAG,OAAO;gBACV,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE;AAC7C,aAAA,CAAC;AAEF,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAE7B,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAA,KAAA,EAAQ,GAAG,CAAC,MAAM,CAAA,CAAE,EAAE;YAClE;YAEA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAS,EAAE,KAAK,EAAE,IAAI,EAAE;QAC9C;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,CAAC;YAC3C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE;QAC/C;IACF;IAEA,OAAO;AACL,QAAA,GAAG,CAAI,IAAY,EAAA;AACjB,YAAA,OAAO,OAAO,CAAI,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,CAAI,IAAY,EAAE,IAAa,EAAA;YACjC,OAAO,OAAO,CAAI,IAAI,EAAE;AACtB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,aAAA,CAAC;QACJ,CAAC;KACF;AACH;;;;"}
1
+ {"version":3,"file":"http.mjs","sources":["../../src/lib/http.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -5,6 +5,7 @@ export interface Thread {
5
5
  id: string;
6
6
  projectId: string;
7
7
  deviceId: string;
8
+ userId?: string | null;
8
9
  type: FeedbackType;
9
10
  status: ThreadStatus;
10
11
  subject: string;
@@ -44,6 +45,7 @@ export interface PulseWidgetProps {
44
45
  placeholder?: string;
45
46
  hideOnPaths?: string[];
46
47
  collectEmail?: boolean;
48
+ userId?: string;
47
49
  metadata?: Record<string, unknown>;
48
50
  onOpen?: () => void;
49
51
  onClose?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAGD,eAAO,MAAM,cAAc,EAAE;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAMhG,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAGD,eAAO,MAAM,cAAc,EAAE;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAMhG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sources":["../src/types.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AA4DA;AACO,MAAM,cAAc,GAA2E;AACpG,IAAA,EAAE,KAAK,EAAE,KAAK,EAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAO,KAAK,EAAE,SAAS,EAAE;AACvE,IAAA,EAAE,KAAK,EAAE,SAAS,EAAG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAG,KAAK,EAAE,SAAS,EAAE;AACvE,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;AACtE,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAI,KAAK,EAAE,SAAS,EAAE;AACvE,IAAA,EAAE,KAAK,EAAE,OAAO,EAAK,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAK,KAAK,EAAE,SAAS,EAAE;;;;;"}
1
+ {"version":3,"file":"types.mjs","sources":["../src/types.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AA8DA;AACO,MAAM,cAAc,GAA2E;AACpG,IAAA,EAAE,KAAK,EAAE,KAAK,EAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAO,KAAK,EAAE,SAAS,EAAE;AACvE,IAAA,EAAE,KAAK,EAAE,SAAS,EAAG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAG,KAAK,EAAE,SAAS,EAAE;AACvE,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;AACtE,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAI,KAAK,EAAE,SAAS,EAAE;AACvE,IAAA,EAAE,KAAK,EAAE,OAAO,EAAK,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAK,KAAK,EAAE,SAAS,EAAE;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pulse-feedback-widget",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "Drop-in feedback widget for React apps. Collect bugs, features, questions, and praise from users.",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",