pulse-feedback-widget 2.0.0 → 3.1.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/dist/PulseWidget.d.ts.map +1 -1
- package/dist/PulseWidget.mjs +5 -3
- package/dist/PulseWidget.mjs.map +1 -1
- package/dist/components/ConversationView.d.ts +3 -1
- package/dist/components/ConversationView.d.ts.map +1 -1
- package/dist/components/ConversationView.mjs +4 -17
- package/dist/components/ConversationView.mjs.map +1 -1
- package/dist/components/FeedbackForm.d.ts +3 -1
- package/dist/components/FeedbackForm.d.ts.map +1 -1
- package/dist/components/FeedbackForm.mjs +7 -7
- package/dist/components/FeedbackForm.mjs.map +1 -1
- package/dist/components/FeedbackPanel.d.ts +3 -1
- package/dist/components/FeedbackPanel.d.ts.map +1 -1
- package/dist/components/FeedbackPanel.mjs +5 -5
- package/dist/components/FeedbackPanel.mjs.map +1 -1
- package/dist/components/ImagePicker.d.ts +4 -1
- package/dist/components/ImagePicker.d.ts.map +1 -1
- package/dist/components/ImagePicker.mjs +8 -2
- package/dist/components/ImagePicker.mjs.map +1 -1
- package/dist/components/ImagePicker.module.css.mjs +2 -2
- package/dist/components/ScreenshotEditor.d.ts +10 -0
- package/dist/components/ScreenshotEditor.d.ts.map +1 -0
- package/dist/components/ScreenshotEditor.mjs +146 -0
- package/dist/components/ScreenshotEditor.mjs.map +1 -0
- package/dist/components/ScreenshotEditor.module.css.mjs +8 -0
- package/dist/components/ScreenshotEditor.module.css.mjs.map +1 -0
- package/dist/components/SuccessState.d.ts +3 -1
- package/dist/components/SuccessState.d.ts.map +1 -1
- package/dist/components/SuccessState.mjs +2 -2
- package/dist/components/SuccessState.mjs.map +1 -1
- package/dist/components/ThreadList.d.ts +3 -1
- package/dist/components/ThreadList.d.ts.map +1 -1
- package/dist/components/ThreadList.mjs +5 -19
- package/dist/components/ThreadList.mjs.map +1 -1
- package/dist/components/TypeSelector.d.ts +3 -1
- package/dist/components/TypeSelector.d.ts.map +1 -1
- package/dist/components/TypeSelector.mjs +9 -2
- package/dist/components/TypeSelector.mjs.map +1 -1
- package/dist/lib/canvas-tools.d.ts +15 -0
- package/dist/lib/canvas-tools.d.ts.map +1 -0
- package/dist/lib/canvas-tools.mjs +64 -0
- package/dist/lib/canvas-tools.mjs.map +1 -0
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.mjs +27 -2
- package/dist/lib/http.mjs.map +1 -1
- package/dist/lib/i18n.d.ts +40 -0
- package/dist/lib/i18n.d.ts.map +1 -0
- package/dist/lib/i18n.mjs +34 -0
- package/dist/lib/i18n.mjs.map +1 -0
- package/dist/locales/en.d.ts +4 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/en.mjs +48 -0
- package/dist/locales/en.mjs.map +1 -0
- package/dist/locales/ko.d.ts +4 -0
- package/dist/locales/ko.d.ts.map +1 -0
- package/dist/locales/ko.mjs +48 -0
- package/dist/locales/ko.mjs.map +1 -0
- package/dist/pulse-widget.iife.js +2 -0
- package/dist/pulse-widget.iife.js.map +1 -0
- package/dist/standalone.d.ts +2 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +11 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PulseWidget.d.ts","sourceRoot":"","sources":["../src/PulseWidget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6G,MAAM,OAAO,CAAC;AAClI,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"PulseWidget.d.ts","sourceRoot":"","sources":["../src/PulseWidget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6G,MAAM,OAAO,CAAC;AAClI,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAenE,eAAO,MAAM,WAAW,4FA+HtB,CAAC"}
|
package/dist/PulseWidget.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { lazy, forwardRef, useState, useMemo, useCallback, useImperativeHandle, useEffect, useRef, Suspense } from 'react';
|
|
4
|
+
import { createTranslations } from './lib/i18n.mjs';
|
|
4
5
|
import { getDeviceId } from './lib/device.mjs';
|
|
5
6
|
import { createHttpClient } from './lib/http.mjs';
|
|
6
7
|
import { checkUnreadReplies } from './lib/api.mjs';
|
|
@@ -8,8 +9,8 @@ import { LogCollector } from './lib/log-collector.mjs';
|
|
|
8
9
|
import { TriggerButton } from './components/TriggerButton.mjs';
|
|
9
10
|
|
|
10
11
|
const FeedbackPanel = lazy(() => import('./components/FeedbackPanel.mjs').then((m) => ({ default: m.FeedbackPanel })));
|
|
11
|
-
const DEFAULT_API_URL = 'https://
|
|
12
|
-
const PulseWidget = forwardRef(function PulseWidget({ apiKey, apiUrl = DEFAULT_API_URL, position = 'bottom-right', offset, hideDefaultLauncher = false, accentColor = '#6366F1', greeting = 'Hi! \u{1F44B}', placeholder = "What's on your mind?", hideOnPaths = [], collectEmail = true, collectDiagnostics = false, userId, metadata = {}, onOpen, onClose: onCloseProp, onSubmit, }, ref) {
|
|
12
|
+
const DEFAULT_API_URL = 'https://pulseaq.com';
|
|
13
|
+
const PulseWidget = forwardRef(function PulseWidget({ apiKey, apiUrl = DEFAULT_API_URL, position = 'bottom-right', offset, hideDefaultLauncher = false, accentColor = '#6366F1', greeting = 'Hi! \u{1F44B}', placeholder = "What's on your mind?", hideOnPaths = [], collectEmail = true, collectDiagnostics = false, locale, userId, metadata = {}, onOpen, onClose: onCloseProp, onSubmit, }, ref) {
|
|
13
14
|
const [isOpen, setIsOpen] = useState(false);
|
|
14
15
|
const [hasNotification, setHasNotification] = useState(false);
|
|
15
16
|
const [hidden, setHidden] = useState(false);
|
|
@@ -18,6 +19,7 @@ const PulseWidget = forwardRef(function PulseWidget({ apiKey, apiUrl = DEFAULT_A
|
|
|
18
19
|
console.error('[Pulse] Invalid apiKey: must be a non-empty string');
|
|
19
20
|
return null;
|
|
20
21
|
}
|
|
22
|
+
const t = useMemo(() => createTranslations(locale), [locale]);
|
|
21
23
|
const deviceId = useMemo(() => getDeviceId(), []);
|
|
22
24
|
const client = useMemo(() => createHttpClient(apiUrl, apiKey, deviceId, userId), [apiUrl, apiKey, deviceId, userId]);
|
|
23
25
|
// Stable open/close callbacks
|
|
@@ -75,7 +77,7 @@ const PulseWidget = forwardRef(function PulseWidget({ apiKey, apiUrl = DEFAULT_A
|
|
|
75
77
|
const panelBottomOffset = triggerBottom !== undefined
|
|
76
78
|
? (hideDefaultLauncher ? triggerBottom : triggerBottom + 56)
|
|
77
79
|
: (hideDefaultLauncher ? 16 : undefined);
|
|
78
|
-
return (jsxs(Fragment, { children: [!isOpen && !hideDefaultLauncher && (jsx(TriggerButton, { onClick: open, position: position, accentColor: accentColor, hasNotification: hasNotification, offset: offset })), isOpen && (jsx(Suspense, { fallback: null, children: jsx(FeedbackPanel, { client: client, accentColor: accentColor, greeting: greeting, placeholder: placeholder, collectEmail: collectEmail, logCollectorRef: logCollectorRef, metadata: metadata, position: position, offset: offset, panelBottomOffset: panelBottomOffset, onClose: close, onSubmit: onSubmit }) }))] }));
|
|
80
|
+
return (jsxs(Fragment, { children: [!isOpen && !hideDefaultLauncher && (jsx(TriggerButton, { onClick: open, position: position, accentColor: accentColor, hasNotification: hasNotification, offset: offset })), isOpen && (jsx(Suspense, { fallback: null, children: jsx(FeedbackPanel, { client: client, accentColor: accentColor, greeting: greeting, placeholder: placeholder, collectEmail: collectEmail, logCollectorRef: logCollectorRef, metadata: metadata, position: position, offset: offset, panelBottomOffset: panelBottomOffset, t: t, onClose: close, onSubmit: onSubmit }) }))] }));
|
|
79
81
|
});
|
|
80
82
|
|
|
81
83
|
export { PulseWidget };
|
package/dist/PulseWidget.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PulseWidget.mjs","sources":["../src/PulseWidget.tsx"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PulseWidget.mjs","sources":["../src/PulseWidget.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAYA;AAIA;AAEO;;;;;;AAyBH;AACA;;AAGF;AACA;AACA;;;AAOA;;AAGA;;;AAGE;;;;;;AAMA;;;;AAKF;;;AAGI;;AAEF;AACE;AACA;AACF;AACF;;;;;AAKE;AACA;AACF;;;AAIE;;;AAEA;AACE;AACA;;;AAEF;;AAEF;AAEA;AAAY;;;AAIZ;AACA;AACE;AACA;;AAmCJ;;"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { HttpClient } from '../lib/http';
|
|
2
2
|
import type { Thread } from '../types';
|
|
3
|
+
import type { Translations } from '../lib/i18n';
|
|
3
4
|
interface ConversationViewProps {
|
|
4
5
|
client: HttpClient;
|
|
5
6
|
thread: Thread;
|
|
6
7
|
accentColor: string;
|
|
8
|
+
t: Translations;
|
|
7
9
|
onBack: () => void;
|
|
8
10
|
}
|
|
9
|
-
export declare function ConversationView({ client, thread, accentColor, onBack }: ConversationViewProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function ConversationView({ client, thread, accentColor, t, onBack }: ConversationViewProps): import("react/jsx-runtime").JSX.Element;
|
|
10
12
|
export {};
|
|
11
13
|
//# sourceMappingURL=ConversationView.d.ts.map
|
|
@@ -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,EAAuB,MAAM,UAAU,CAAC;
|
|
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;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhD,UAAU,qBAAqB;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,EAAE,YAAY,CAAC;IAChB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,qBAAqB,2CA6KjG"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useRef, useEffect } from 'react';
|
|
3
|
+
import { formatTimeAgo } from '../lib/i18n.mjs';
|
|
3
4
|
import { getThreadMessages, uploadAttachment, sendUserReply } from '../lib/api.mjs';
|
|
4
5
|
import { compressImage } from '../lib/compress.mjs';
|
|
5
6
|
import { ImagePicker, getClipboardImages } from './ImagePicker.mjs';
|
|
6
7
|
import styles from './ConversationView.module.css.mjs';
|
|
7
8
|
|
|
8
|
-
function ConversationView({ client, thread, accentColor, onBack }) {
|
|
9
|
+
function ConversationView({ client, thread, accentColor, t, onBack }) {
|
|
9
10
|
const [messages, setMessages] = useState([]);
|
|
10
11
|
const [reply, setReply] = useState('');
|
|
11
12
|
const [pendingFiles, setPendingFiles] = useState([]);
|
|
@@ -63,12 +64,12 @@ function ConversationView({ client, thread, accentColor, onBack }) {
|
|
|
63
64
|
handleSend();
|
|
64
65
|
}
|
|
65
66
|
}
|
|
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" }) }),
|
|
67
|
+
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" }) }), t.btnBack] }), 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' ? t.senderDeveloper : t.senderYou, " \u00B7 ", formatTimeAgo(msg.createdAt, t)] })] }, 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
68
|
const images = getClipboardImages(e);
|
|
68
69
|
if (images.length > 0) {
|
|
69
70
|
setPendingFiles((prev) => [...prev, ...images].slice(0, 3));
|
|
70
71
|
}
|
|
71
|
-
}, placeholder:
|
|
72
|
+
}, placeholder: t.replyPlaceholder }), jsx("button", { type: "button", className: styles.attachBtn, onClick: () => {
|
|
72
73
|
const input = document.createElement('input');
|
|
73
74
|
input.type = 'file';
|
|
74
75
|
input.accept = 'image/png,image/jpeg,image/gif,image/webp';
|
|
@@ -81,20 +82,6 @@ function ConversationView({ client, thread, accentColor, onBack }) {
|
|
|
81
82
|
input.click();
|
|
82
83
|
}, 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" })] }) })] })] }));
|
|
83
84
|
}
|
|
84
|
-
function formatTime(dateStr) {
|
|
85
|
-
const d = new Date(dateStr);
|
|
86
|
-
const now = new Date();
|
|
87
|
-
const diffMs = now.getTime() - d.getTime();
|
|
88
|
-
const mins = Math.floor(diffMs / 60000);
|
|
89
|
-
if (mins < 1)
|
|
90
|
-
return 'just now';
|
|
91
|
-
if (mins < 60)
|
|
92
|
-
return `${mins}m ago`;
|
|
93
|
-
const hours = Math.floor(mins / 60);
|
|
94
|
-
if (hours < 24)
|
|
95
|
-
return `${hours}h ago`;
|
|
96
|
-
return d.toLocaleDateString();
|
|
97
|
-
}
|
|
98
85
|
|
|
99
86
|
export { ConversationView };
|
|
100
87
|
//# sourceMappingURL=ConversationView.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationView.mjs","sources":["../../src/components/ConversationView.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConversationView.mjs","sources":["../../src/components/ConversationView.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { HttpClient } from '../lib/http';
|
|
3
3
|
import type { LogCollector } from '../lib/log-collector';
|
|
4
|
+
import type { Translations } from '../lib/i18n';
|
|
4
5
|
interface FeedbackFormProps {
|
|
5
6
|
client: HttpClient;
|
|
6
7
|
accentColor: string;
|
|
@@ -8,8 +9,9 @@ interface FeedbackFormProps {
|
|
|
8
9
|
collectEmail: boolean;
|
|
9
10
|
logCollectorRef: React.RefObject<LogCollector | null>;
|
|
10
11
|
metadata: Record<string, unknown>;
|
|
12
|
+
t: Translations;
|
|
11
13
|
onSubmit?: (threadId: string) => void;
|
|
12
14
|
}
|
|
13
|
-
export declare function FeedbackForm({ client, accentColor, placeholder, collectEmail, logCollectorRef, metadata, onSubmit: onSubmitCallback, }: FeedbackFormProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function FeedbackForm({ client, accentColor, placeholder, collectEmail, logCollectorRef, metadata, t, onSubmit: onSubmitCallback, }: FeedbackFormProps): import("react/jsx-runtime").JSX.Element;
|
|
14
16
|
export {};
|
|
15
17
|
//# sourceMappingURL=FeedbackForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackForm.d.ts","sourceRoot":"","sources":["../../src/components/FeedbackForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedbackForm.d.ts","sourceRoot":"","sources":["../../src/components/FeedbackForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,UAAU,iBAAiB;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,EAAE,YAAY,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,CAAC,EACD,QAAQ,EAAE,gBAAgB,GAC3B,EAAE,iBAAiB,2CA+JnB"}
|
|
@@ -9,7 +9,7 @@ import { getClipboardImages, ImagePicker } from './ImagePicker.mjs';
|
|
|
9
9
|
import styles from './FeedbackForm.module.css.mjs';
|
|
10
10
|
|
|
11
11
|
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
12
|
-
function FeedbackForm({ client, accentColor, placeholder, collectEmail, logCollectorRef, metadata, onSubmit: onSubmitCallback, }) {
|
|
12
|
+
function FeedbackForm({ client, accentColor, placeholder, collectEmail, logCollectorRef, metadata, t, onSubmit: onSubmitCallback, }) {
|
|
13
13
|
const [type, setType] = useState(null);
|
|
14
14
|
const [body, setBody] = useState('');
|
|
15
15
|
const [email, setEmail] = useState('');
|
|
@@ -63,7 +63,7 @@ function FeedbackForm({ client, accentColor, placeholder, collectEmail, logColle
|
|
|
63
63
|
onSubmitCallback?.(threadId);
|
|
64
64
|
}
|
|
65
65
|
else {
|
|
66
|
-
setError(
|
|
66
|
+
setError(t.submitError);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
function resetForm() {
|
|
@@ -77,18 +77,18 @@ function FeedbackForm({ client, accentColor, placeholder, collectEmail, logColle
|
|
|
77
77
|
setSuccess(false);
|
|
78
78
|
}
|
|
79
79
|
if (success) {
|
|
80
|
-
return jsx(SuccessState, { accentColor: accentColor, onNewFeedback: resetForm });
|
|
80
|
+
return jsx(SuccessState, { accentColor: accentColor, t: t, onNewFeedback: resetForm });
|
|
81
81
|
}
|
|
82
|
-
return (jsxs("form", { className: styles.form, onSubmit: handleSubmit, children: [jsxs("div", { children: [jsx("label", { className: styles.label, children:
|
|
82
|
+
return (jsxs("form", { className: styles.form, onSubmit: handleSubmit, children: [jsxs("div", { children: [jsx("label", { className: styles.label, children: t.labelType }), jsx(TypeSelector, { value: type, onChange: setType, t: t })] }), jsxs("div", { children: [jsx("label", { className: styles.label, children: t.labelMessage }), jsx("textarea", { className: styles.textarea, value: body, onChange: (e) => setBody(e.target.value.slice(0, 5000)), onPaste: (e) => {
|
|
83
83
|
const images = getClipboardImages(e);
|
|
84
84
|
if (images.length > 0) {
|
|
85
85
|
setPendingFiles((prev) => [...prev, ...images].slice(0, 3));
|
|
86
86
|
}
|
|
87
|
-
}, 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:
|
|
87
|
+
}, 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)), onReplaceFile: (i, file) => setPendingFiles((prev) => prev.map((f, idx) => idx === i ? file : f)), accentColor: accentColor, disabled: submitting || uploading, t: t }), collectEmail && (jsxs("div", { className: styles.row, children: [jsxs("div", { children: [jsx("label", { className: styles.label, children: t.labelName }), jsx("input", { className: styles.input, type: "text", value: name, onChange: (e) => setName(e.target.value), placeholder: t.placeholderName })] }), jsxs("div", { children: [jsx("label", { className: styles.label, children: t.labelEmail }), jsx("input", { className: styles.input, type: "email", value: email, onChange: (e) => { setEmail(e.target.value); setEmailError(null); }, onBlur: () => {
|
|
88
88
|
if (email.trim() && !EMAIL_REGEX.test(email.trim())) {
|
|
89
|
-
setEmailError(
|
|
89
|
+
setEmailError(t.emailError);
|
|
90
90
|
}
|
|
91
|
-
}, placeholder:
|
|
91
|
+
}, placeholder: t.placeholderEmail }), 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 ? t.btnUploading : submitting ? t.btnSending : t.btnSendFeedback })] }));
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
export { FeedbackForm };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackForm.mjs","sources":["../../src/components/FeedbackForm.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"FeedbackForm.mjs","sources":["../../src/components/FeedbackForm.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { HttpClient } from '../lib/http';
|
|
3
3
|
import type { LogCollector } from '../lib/log-collector';
|
|
4
|
+
import type { Translations } from '../lib/i18n';
|
|
4
5
|
interface FeedbackPanelProps {
|
|
5
6
|
client: HttpClient;
|
|
6
7
|
accentColor: string;
|
|
@@ -16,9 +17,10 @@ interface FeedbackPanelProps {
|
|
|
16
17
|
right?: number;
|
|
17
18
|
};
|
|
18
19
|
panelBottomOffset?: number;
|
|
20
|
+
t: Translations;
|
|
19
21
|
onClose: () => void;
|
|
20
22
|
onSubmit?: (threadId: string) => void;
|
|
21
23
|
}
|
|
22
|
-
export declare function FeedbackPanel({ client, accentColor, greeting, placeholder, collectEmail, logCollectorRef, metadata, position, offset, panelBottomOffset, onClose, onSubmit, }: FeedbackPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare function FeedbackPanel({ client, accentColor, greeting, placeholder, collectEmail, logCollectorRef, metadata, position, offset, panelBottomOffset, t, onClose, onSubmit, }: FeedbackPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
23
25
|
export {};
|
|
24
26
|
//# sourceMappingURL=FeedbackPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackPanel.d.ts","sourceRoot":"","sources":["../../src/components/FeedbackPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedbackPanel.d.ts","sourceRoot":"","sources":["../../src/components/FeedbackPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,UAAU,kBAAkB;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,cAAc,GAAG,aAAa,CAAC;IACzC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,CAAC,EAAE,YAAY,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAID,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,CAAC,EACD,OAAO,EACP,QAAQ,GACT,EAAE,kBAAkB,2CA8GpB"}
|
|
@@ -5,7 +5,7 @@ import { ThreadList } from './ThreadList.mjs';
|
|
|
5
5
|
import { ConversationView } from './ConversationView.mjs';
|
|
6
6
|
import styles from './FeedbackPanel.module.css.mjs';
|
|
7
7
|
|
|
8
|
-
function FeedbackPanel({ client, accentColor, greeting, placeholder, collectEmail, logCollectorRef, metadata, position, offset, panelBottomOffset, onClose, onSubmit, }) {
|
|
8
|
+
function FeedbackPanel({ client, accentColor, greeting, placeholder, collectEmail, logCollectorRef, metadata, position, offset, panelBottomOffset, t, onClose, onSubmit, }) {
|
|
9
9
|
const [tab, setTab] = useState('new');
|
|
10
10
|
const [selectedThread, setSelectedThread] = useState(null);
|
|
11
11
|
const [isDark, setIsDark] = useState(false);
|
|
@@ -34,14 +34,14 @@ function FeedbackPanel({ client, accentColor, greeting, placeholder, collectEmai
|
|
|
34
34
|
inlinePos.left = offset.left;
|
|
35
35
|
function renderBody() {
|
|
36
36
|
if (selectedThread) {
|
|
37
|
-
return (jsx(ConversationView, { client: client, thread: selectedThread, accentColor: accentColor, onBack: () => setSelectedThread(null) }));
|
|
37
|
+
return (jsx(ConversationView, { client: client, thread: selectedThread, accentColor: accentColor, t: t, onBack: () => setSelectedThread(null) }));
|
|
38
38
|
}
|
|
39
39
|
if (tab === 'new') {
|
|
40
|
-
return (jsx(FeedbackForm, { client: client, accentColor: accentColor, placeholder: placeholder, collectEmail: collectEmail, logCollectorRef: logCollectorRef, metadata: metadata, onSubmit: onSubmit }));
|
|
40
|
+
return (jsx(FeedbackForm, { client: client, accentColor: accentColor, placeholder: placeholder, collectEmail: collectEmail, logCollectorRef: logCollectorRef, metadata: metadata, t: t, onSubmit: onSubmit }));
|
|
41
41
|
}
|
|
42
|
-
return (jsx(ThreadList, { client: client, onSelectThread: (thread) => setSelectedThread(thread) }));
|
|
42
|
+
return (jsx(ThreadList, { client: client, t: t, onSelectThread: (thread) => setSelectedThread(thread) }));
|
|
43
43
|
}
|
|
44
|
-
return (jsxs(Fragment, { children: [jsx("div", { className: styles.overlay, onClick: onClose }), jsxs("div", { className: `${styles.panel} ${posClass} ${themeClass}`, style: { '--pulse-accent': accentColor, ...inlinePos }, onClick: (e) => e.stopPropagation(), children: [jsxs("div", { className: styles.header, children: [jsx("p", { className: styles.greeting, children: greeting }), jsx("button", { type: "button", className: styles.closeBtn, onClick: onClose, "aria-label": "Close", children: jsxs("svg", { className: styles.closeIcon, viewBox: "0 0 24 24", children: [jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }) })] }), !selectedThread && (jsxs("div", { className: styles.tabs, children: [jsx("button", { type: "button", className: `${styles.tab} ${tab === 'new' ? styles.tabActive : ''}`, style: tab === 'new' ? { borderBottomColor: accentColor } : undefined, onClick: () => setTab('new'), children:
|
|
44
|
+
return (jsxs(Fragment, { children: [jsx("div", { className: styles.overlay, onClick: onClose }), jsxs("div", { className: `${styles.panel} ${posClass} ${themeClass}`, style: { '--pulse-accent': accentColor, ...inlinePos }, onClick: (e) => e.stopPropagation(), children: [jsxs("div", { className: styles.header, children: [jsx("p", { className: styles.greeting, children: greeting }), jsx("button", { type: "button", className: styles.closeBtn, onClick: onClose, "aria-label": "Close", children: jsxs("svg", { className: styles.closeIcon, viewBox: "0 0 24 24", children: [jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }) })] }), !selectedThread && (jsxs("div", { className: styles.tabs, children: [jsx("button", { type: "button", className: `${styles.tab} ${tab === 'new' ? styles.tabActive : ''}`, style: tab === 'new' ? { borderBottomColor: accentColor } : undefined, onClick: () => setTab('new'), children: t.tabNew }), jsx("button", { type: "button", className: `${styles.tab} ${tab === 'threads' ? styles.tabActive : ''}`, style: tab === 'threads' ? { borderBottomColor: accentColor } : undefined, onClick: () => setTab('threads'), children: t.tabMyThreads })] })), jsx("div", { className: styles.body, children: renderBody() })] })] }));
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
export { FeedbackPanel };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackPanel.mjs","sources":["../../src/components/FeedbackPanel.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs","_Fragment"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"FeedbackPanel.mjs","sources":["../../src/components/FeedbackPanel.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { Translations } from '../lib/i18n';
|
|
2
3
|
interface ImagePickerProps {
|
|
3
4
|
files: File[];
|
|
4
5
|
onFilesSelected: (files: File[]) => void;
|
|
5
6
|
onRemove: (index: number) => void;
|
|
7
|
+
onReplaceFile?: (index: number, file: File) => void;
|
|
6
8
|
maxFiles?: number;
|
|
7
9
|
accentColor: string;
|
|
8
10
|
disabled?: boolean;
|
|
11
|
+
t?: Translations;
|
|
9
12
|
}
|
|
10
|
-
export declare function ImagePicker({ files, onFilesSelected, onRemove, maxFiles, accentColor, disabled, }: ImagePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function ImagePicker({ files, onFilesSelected, onRemove, onReplaceFile, maxFiles, accentColor, disabled, t, }: ImagePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
11
14
|
/** Extract image files from a clipboard paste event */
|
|
12
15
|
export declare function getClipboardImages(e: React.ClipboardEvent): File[];
|
|
13
16
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImagePicker.d.ts","sourceRoot":"","sources":["../../src/components/ImagePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ImagePicker.d.ts","sourceRoot":"","sources":["../../src/components/ImagePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhD,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,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,CAAC,EAAE,YAAY,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,eAAe,EACf,QAAQ,EACR,aAAa,EACb,QAAY,EACZ,WAAW,EACX,QAAgB,EAChB,CAAC,GACF,EAAE,gBAAgB,2CAiGlB;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI,EAAE,CAMlE"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useRef, useState, useEffect } from 'react';
|
|
3
|
+
import { ScreenshotEditor } from './ScreenshotEditor.mjs';
|
|
3
4
|
import styles from './ImagePicker.module.css.mjs';
|
|
4
5
|
|
|
5
6
|
const ALLOWED_TYPES = ['image/png', 'image/jpeg', 'image/gif', 'image/webp'];
|
|
6
7
|
const MAX_SIZE = 5 * 1024 * 1024;
|
|
7
|
-
function ImagePicker({ files, onFilesSelected, onRemove, maxFiles = 3, accentColor, disabled = false, }) {
|
|
8
|
+
function ImagePicker({ files, onFilesSelected, onRemove, onReplaceFile, maxFiles = 3, accentColor, disabled = false, t, }) {
|
|
8
9
|
const inputRef = useRef(null);
|
|
9
10
|
const [previews, setPreviews] = useState([]);
|
|
11
|
+
const [editingIndex, setEditingIndex] = useState(null);
|
|
10
12
|
useEffect(() => {
|
|
11
13
|
const urls = files.map((f) => URL.createObjectURL(f));
|
|
12
14
|
setPreviews(urls);
|
|
@@ -27,7 +29,11 @@ function ImagePicker({ files, onFilesSelected, onRemove, maxFiles = 3, accentCol
|
|
|
27
29
|
if (valid.length > 0)
|
|
28
30
|
onFilesSelected(valid);
|
|
29
31
|
}
|
|
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:
|
|
32
|
+
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: t?.attachImages || '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 }), onReplaceFile && (jsx("button", { type: "button", className: styles.editBtn, onClick: () => setEditingIndex(i), disabled: disabled, children: "\u270E" })), jsx("button", { type: "button", className: styles.remove, onClick: () => onRemove(i), disabled: disabled, style: { backgroundColor: accentColor }, children: "\u00D7" })] }, i))) })), editingIndex !== null && previews[editingIndex] && t && (jsx(ScreenshotEditor, { imageUrl: previews[editingIndex], t: t, onDone: (blob) => {
|
|
33
|
+
const file = new File([blob], files[editingIndex].name, { type: 'image/png' });
|
|
34
|
+
onReplaceFile?.(editingIndex, file);
|
|
35
|
+
setEditingIndex(null);
|
|
36
|
+
}, onCancel: () => setEditingIndex(null) }))] }));
|
|
31
37
|
}
|
|
32
38
|
/** Extract image files from a clipboard paste event */
|
|
33
39
|
function getClipboardImages(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImagePicker.mjs","sources":["../../src/components/ImagePicker.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ImagePicker.mjs","sources":["../../src/components/ImagePicker.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styleInject from '../node_modules/style-inject/dist/style-inject.es.mjs';
|
|
2
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,
|
|
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"};
|
|
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}.ImagePicker-module_editBtn__7lPfO{align-items:center;background:rgba(0,0,0,.6);border:none;border-radius:4px 0 5px 0;bottom:-1px;color:#fff;cursor:pointer;display:flex;font-size:11px;height:18px;justify-content:center;line-height:1;padding:0;position:absolute;right:-1px;width:18px}.ImagePicker-module_editBtn__7lPfO:disabled{cursor:not-allowed;opacity:.5}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkltYWdlUGlja2VyLm1vZHVsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0NBRUUsa0JBQW1CLENBRG5CLFlBQWEsQ0FHYixjQUFlLENBRGYsT0FFRixDQUVBLGtDQUNFLFlBQ0YsQ0FFQSxxQ0FRRSxrQkFBbUIsQ0FIbkIsK0JBQW9DLENBRHBDLDRDQUE4QyxDQUQ5QyxpQkFBa0IsQ0FHbEIsY0FBZSxDQUNmLFlBQWEsQ0FHYixhQUFjLENBUmQsV0FBWSxDQU9aLHNCQUF1QixDQUV2QixpQ0FBbUMsQ0FWbkMsVUFXRixDQUVBLDJDQUNFLHdDQUNGLENBRUEsOENBRUUsa0JBQW1CLENBRG5CLFVBRUYsQ0FFQSxnQ0FHRSwwQ0FBNEMsQ0FDNUMsY0FBZSxDQUNmLFNBQVUsQ0FDVixvQkFBcUIsQ0FDckIscUJBQXNCLENBTHRCLFdBQVksQ0FEWixVQU9GLENBRUEsa0NBQ0UsWUFBYSxDQUViLGNBQWUsQ0FEZixPQUVGLENBRUEscUNBTUUsNENBQThDLENBRjlDLGlCQUFrQixDQURsQixXQUFZLENBRVosZUFBZ0IsQ0FKaEIsaUJBQWtCLENBQ2xCLFVBS0YsQ0FFQSxpQ0FJRSxhQUFjLENBRmQsV0FBWSxDQUNaLGdCQUFpQixDQUZqQixVQUlGLENBRUEsa0NBYUUsa0JBQW1CLENBTm5CLFdBQVksQ0FEWix5QkFBMEIsQ0FFMUIsVUFBYyxDQUdkLGNBQWUsQ0FDZixZQUFhLENBSGIsY0FBZSxDQUpmLFdBQVksQ0FTWixzQkFBdUIsQ0FKdkIsYUFBYyxDQUtkLFNBQVUsQ0FkVixpQkFBa0IsQ0FFbEIsVUFBVyxDQURYLFFBQVMsQ0FFVCxVQVlGLENBRUEsMkNBRUUsa0JBQW1CLENBRG5CLFVBRUYsQ0FFQSxtQ0FjRSxrQkFBbUIsQ0FObkIseUJBQThCLENBRDlCLFdBQVksQ0FEWix5QkFBMEIsQ0FKMUIsV0FBWSxDQU9aLFVBQWMsQ0FHZCxjQUFlLENBQ2YsWUFBYSxDQUhiLGNBQWUsQ0FMZixXQUFZLENBVVosc0JBQXVCLENBSnZCLGFBQWMsQ0FLZCxTQUFVLENBZlYsaUJBQWtCLENBRWxCLFVBQVcsQ0FDWCxVQWFGLENBRUEsNENBRUUsa0JBQW1CLENBRG5CLFVBRUYiLCJmaWxlIjoiSW1hZ2VQaWNrZXIubW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5waWNrZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxuXG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmF0dGFjaEJ0biB7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcHVsc2UtYm9yZGVyLCAjZTVlN2ViKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tcHVsc2UtYmcsICNmZmZmZmYpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LXNocmluazogMDtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2U7XG59XG5cbi5hdHRhY2hCdG46aG92ZXIge1xuICBib3JkZXItY29sb3I6IHZhcigtLXB1bHNlLWFjY2VudCwgIzYzNjZmMSk7XG59XG5cbi5hdHRhY2hCdG46ZGlzYWJsZWQge1xuICBvcGFjaXR5OiAwLjQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5pY29uIHtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgc3Ryb2tlOiB2YXIoLS1wdWxzZS10ZXh0LXNlY29uZGFyeSwgIzZiNzI4MCk7XG4gIHN0cm9rZS13aWR0aDogMjtcbiAgZmlsbDogbm9uZTtcbiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xuICBzdHJva2UtbGluZWpvaW46IHJvdW5kO1xufVxuXG4udGh1bWJzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA2cHg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLnRodW1iV3JhcCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDQ4cHg7XG4gIGhlaWdodDogNDhweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1wdWxzZS1ib3JkZXIsICNlNWU3ZWIpO1xufVxuXG4udGh1bWIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5yZW1vdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTFweDtcbiAgcmlnaHQ6IC0xcHg7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgNXB4IDAgNHB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAwO1xufVxuXG4ucmVtb3ZlOmRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC41O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uZWRpdEJ0biB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAtMXB4O1xuICByaWdodDogLTFweDtcbiAgd2lkdGg6IDE4cHg7XG4gIGhlaWdodDogMThweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4IDAgNXB4IDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMDtcbn1cblxuLmVkaXRCdG46ZGlzYWJsZWQge1xuICBvcGFjaXR5OiAwLjU7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4iXX0= */";
|
|
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","editBtn":"ImagePicker-module_editBtn__7lPfO"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
7
7
|
export { styles as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Translations } from '../lib/i18n';
|
|
2
|
+
interface ScreenshotEditorProps {
|
|
3
|
+
imageUrl: string;
|
|
4
|
+
t: Translations;
|
|
5
|
+
onDone: (editedBlob: Blob) => void;
|
|
6
|
+
onCancel: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function ScreenshotEditor({ imageUrl, t, onDone, onCancel }: ScreenshotEditorProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ScreenshotEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenshotEditor.d.ts","sourceRoot":"","sources":["../../src/components/ScreenshotEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,EAAE,YAAY,CAAC;IAChB,MAAM,EAAE,CAAC,UAAU,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAUD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAsLxF"}
|