pulse-feedback-widget 1.3.2 → 3.0.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 +3 -2
- package/dist/PulseWidget.d.ts.map +1 -1
- package/dist/PulseWidget.mjs +28 -15
- 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 +9 -1
- package/dist/components/FeedbackPanel.d.ts.map +1 -1
- package/dist/components/FeedbackPanel.mjs +12 -5
- package/dist/components/FeedbackPanel.mjs.map +1 -1
- package/dist/components/FeedbackPanel.module.css.mjs +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/TriggerButton.d.ts +6 -1
- package/dist/components/TriggerButton.d.ts.map +1 -1
- package/dist/components/TriggerButton.mjs +9 -2
- package/dist/components/TriggerButton.mjs.map +1 -1
- package/dist/components/TriggerButton.module.css.mjs +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/index.d.ts +1 -1
- package/dist/index.d.ts.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/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 +56 -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 +18 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +9 -3
|
@@ -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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useRef, useState, useEffect, useCallback } from 'react';
|
|
3
|
+
import { drawFreehand, drawRect, drawText, blurRegion } from '../lib/canvas-tools.mjs';
|
|
4
|
+
import styles from './ScreenshotEditor.module.css.mjs';
|
|
5
|
+
|
|
6
|
+
function ScreenshotEditor({ imageUrl, t, onDone, onCancel }) {
|
|
7
|
+
const canvasRef = useRef(null);
|
|
8
|
+
const imageRef = useRef(null);
|
|
9
|
+
const [tool, setTool] = useState('draw');
|
|
10
|
+
const [isDrawing, setIsDrawing] = useState(false);
|
|
11
|
+
const [currentPoints, setCurrentPoints] = useState([]);
|
|
12
|
+
const [startPoint, setStartPoint] = useState(null);
|
|
13
|
+
const [actions, setActions] = useState([]);
|
|
14
|
+
const [textInput, setTextInput] = useState('');
|
|
15
|
+
const [textPos, setTextPos] = useState(null);
|
|
16
|
+
const COLOR = '#EF4444';
|
|
17
|
+
const LINE_WIDTH = 3;
|
|
18
|
+
// Load image
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const img = new Image();
|
|
21
|
+
img.onload = () => {
|
|
22
|
+
imageRef.current = img;
|
|
23
|
+
const canvas = canvasRef.current;
|
|
24
|
+
if (!canvas)
|
|
25
|
+
return;
|
|
26
|
+
canvas.width = img.width;
|
|
27
|
+
canvas.height = img.height;
|
|
28
|
+
redraw();
|
|
29
|
+
};
|
|
30
|
+
img.src = imageUrl;
|
|
31
|
+
}, [imageUrl]);
|
|
32
|
+
const redraw = useCallback(() => {
|
|
33
|
+
const canvas = canvasRef.current;
|
|
34
|
+
const ctx = canvas?.getContext('2d');
|
|
35
|
+
const img = imageRef.current;
|
|
36
|
+
if (!canvas || !ctx || !img)
|
|
37
|
+
return;
|
|
38
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
39
|
+
ctx.drawImage(img, 0, 0);
|
|
40
|
+
for (const action of actions) {
|
|
41
|
+
if (action.tool === 'draw' && action.points) {
|
|
42
|
+
drawFreehand(ctx, action.points, COLOR, LINE_WIDTH);
|
|
43
|
+
}
|
|
44
|
+
else if (action.tool === 'rect' && action.rect) {
|
|
45
|
+
drawRect(ctx, action.rect, COLOR, LINE_WIDTH);
|
|
46
|
+
}
|
|
47
|
+
else if (action.tool === 'text' && action.text && action.pos) {
|
|
48
|
+
drawText(ctx, action.pos, action.text, COLOR, 16);
|
|
49
|
+
}
|
|
50
|
+
else if (action.tool === 'blur' && action.rect) {
|
|
51
|
+
blurRegion(ctx, action.rect);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}, [actions]);
|
|
55
|
+
useEffect(() => { redraw(); }, [redraw]);
|
|
56
|
+
function getCanvasPoint(e) {
|
|
57
|
+
const canvas = canvasRef.current;
|
|
58
|
+
const rect = canvas.getBoundingClientRect();
|
|
59
|
+
const scaleX = canvas.width / rect.width;
|
|
60
|
+
const scaleY = canvas.height / rect.height;
|
|
61
|
+
return {
|
|
62
|
+
x: (e.clientX - rect.left) * scaleX,
|
|
63
|
+
y: (e.clientY - rect.top) * scaleY,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function handleMouseDown(e) {
|
|
67
|
+
const pt = getCanvasPoint(e);
|
|
68
|
+
if (tool === 'text') {
|
|
69
|
+
setTextPos(pt);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
setIsDrawing(true);
|
|
73
|
+
setStartPoint(pt);
|
|
74
|
+
if (tool === 'draw') {
|
|
75
|
+
setCurrentPoints([pt]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function handleMouseMove(e) {
|
|
79
|
+
if (!isDrawing)
|
|
80
|
+
return;
|
|
81
|
+
const pt = getCanvasPoint(e);
|
|
82
|
+
if (tool === 'draw') {
|
|
83
|
+
setCurrentPoints((prev) => [...prev, pt]);
|
|
84
|
+
// Live preview
|
|
85
|
+
const ctx = canvasRef.current?.getContext('2d');
|
|
86
|
+
if (ctx) {
|
|
87
|
+
redraw();
|
|
88
|
+
drawFreehand(ctx, [...currentPoints, pt], COLOR, LINE_WIDTH);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else if ((tool === 'rect' || tool === 'blur') && startPoint) {
|
|
92
|
+
const ctx = canvasRef.current?.getContext('2d');
|
|
93
|
+
if (ctx) {
|
|
94
|
+
redraw();
|
|
95
|
+
const rect = { x: startPoint.x, y: startPoint.y, w: pt.x - startPoint.x, h: pt.y - startPoint.y };
|
|
96
|
+
if (tool === 'rect') {
|
|
97
|
+
drawRect(ctx, rect, COLOR, LINE_WIDTH);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
drawRect(ctx, rect, '#888', 1);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function handleMouseUp(e) {
|
|
106
|
+
if (!isDrawing)
|
|
107
|
+
return;
|
|
108
|
+
setIsDrawing(false);
|
|
109
|
+
const pt = getCanvasPoint(e);
|
|
110
|
+
if (tool === 'draw' && currentPoints.length > 1) {
|
|
111
|
+
setActions((prev) => [...prev, { tool: 'draw', points: [...currentPoints, pt] }]);
|
|
112
|
+
}
|
|
113
|
+
else if ((tool === 'rect' || tool === 'blur') && startPoint) {
|
|
114
|
+
const rect = { x: startPoint.x, y: startPoint.y, w: pt.x - startPoint.x, h: pt.y - startPoint.y };
|
|
115
|
+
setActions((prev) => [...prev, { tool, rect }]);
|
|
116
|
+
}
|
|
117
|
+
setCurrentPoints([]);
|
|
118
|
+
setStartPoint(null);
|
|
119
|
+
}
|
|
120
|
+
function handleTextSubmit() {
|
|
121
|
+
if (!textInput.trim() || !textPos)
|
|
122
|
+
return;
|
|
123
|
+
setActions((prev) => [...prev, { tool: 'text', text: textInput.trim(), pos: textPos }]);
|
|
124
|
+
setTextInput('');
|
|
125
|
+
setTextPos(null);
|
|
126
|
+
}
|
|
127
|
+
function handleUndo() {
|
|
128
|
+
setActions((prev) => prev.slice(0, -1));
|
|
129
|
+
}
|
|
130
|
+
function handleDone() {
|
|
131
|
+
const canvas = canvasRef.current;
|
|
132
|
+
if (!canvas)
|
|
133
|
+
return;
|
|
134
|
+
canvas.toBlob((blob) => {
|
|
135
|
+
if (blob)
|
|
136
|
+
onDone(blob);
|
|
137
|
+
}, 'image/png');
|
|
138
|
+
}
|
|
139
|
+
return (jsxs("div", { className: styles.editor, children: [jsxs("div", { className: styles.toolbar, children: [['draw', 'rect', 'blur', 'text'].map((t) => (jsx("button", { type: "button", className: `${styles.toolBtn} ${tool === t ? styles.toolActive : ''}`, onClick: () => setTool(t), children: t === 'draw' ? '✏️' : t === 'rect' ? '▭' : t === 'blur' ? '🔲' : 'T' }, t))), jsx("button", { type: "button", className: styles.toolBtn, onClick: handleUndo, disabled: actions.length === 0, children: "\u21A9" }), jsx("div", { className: styles.spacer }), jsx("button", { type: "button", className: styles.cancelBtn, onClick: onCancel, children: t.editorCancel }), jsx("button", { type: "button", className: styles.doneBtn, onClick: handleDone, children: t.editorDone })] }), textPos && (jsxs("div", { className: styles.textInputWrap, style: { left: 0, top: 0 }, children: [jsx("input", { className: styles.textInput, value: textInput, onChange: (e) => setTextInput(e.target.value), onKeyDown: (e) => { if (e.key === 'Enter')
|
|
140
|
+
handleTextSubmit(); if (e.key === 'Escape')
|
|
141
|
+
setTextPos(null); }, placeholder: "Type text...", autoFocus: true }), jsx("button", { type: "button", className: styles.textOk, onClick: handleTextSubmit, children: "OK" })] })), jsx("div", { className: styles.canvasWrap, children: jsx("canvas", { ref: canvasRef, className: styles.canvas, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, onMouseLeave: () => { if (isDrawing)
|
|
142
|
+
handleMouseUp({ clientX: 0, clientY: 0 }); } }) })] }));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export { ScreenshotEditor };
|
|
146
|
+
//# sourceMappingURL=ScreenshotEditor.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenshotEditor.mjs","sources":["../../src/components/ScreenshotEditor.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 = ".ScreenshotEditor-module_editor__PVGL-{background:rgba(0,0,0,.85);display:flex;flex-direction:column;inset:0;position:fixed;z-index:100000}.ScreenshotEditor-module_toolbar__oKXCg{align-items:center;background:#1a1a1a;display:flex;gap:6px;padding:8px 12px}.ScreenshotEditor-module_toolBtn__RPYjF{align-items:center;background:#2a2a2a;border:1px solid #444;border-radius:4px;color:#ddd;cursor:pointer;display:flex;font-size:14px;height:32px;justify-content:center;width:32px}.ScreenshotEditor-module_toolBtn__RPYjF:hover{background:#3a3a3a}.ScreenshotEditor-module_toolBtn__RPYjF:disabled{cursor:not-allowed;opacity:.3}.ScreenshotEditor-module_toolActive__5Lz7o{background:#3a2020;border-color:#ef4444}.ScreenshotEditor-module_spacer__-ALGj{flex:1}.ScreenshotEditor-module_cancelBtn__e9xAe{background:#2a2a2a;border:1px solid #444;border-radius:4px;color:#ddd;cursor:pointer;font-size:13px;height:32px;padding:0 12px}.ScreenshotEditor-module_cancelBtn__e9xAe:hover{background:#3a3a3a}.ScreenshotEditor-module_doneBtn__LqRy8{background:#3b82f6;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:13px;font-weight:600;height:32px;padding:0 16px}.ScreenshotEditor-module_doneBtn__LqRy8:hover{background:#2563eb}.ScreenshotEditor-module_canvasWrap__T3XK0{align-items:center;display:flex;flex:1;justify-content:center;overflow:auto;padding:16px}.ScreenshotEditor-module_canvas__6Ij7x{border-radius:4px;cursor:crosshair;max-height:100%;max-width:100%}.ScreenshotEditor-module_textInputWrap__Vbz3V{background:#1a1a1a;display:flex;gap:4px;padding:4px 12px}.ScreenshotEditor-module_textInput__jNk6t{background:#2a2a2a;border:1px solid #444;border-radius:4px;color:#fff;flex:1;font-size:13px;height:28px;outline:none;padding:0 8px}.ScreenshotEditor-module_textInput__jNk6t:focus{border-color:#3b82f6}.ScreenshotEditor-module_textOk__LXSOw{background:#3b82f6;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:12px;height:28px;padding:0 10px}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjcmVlbnNob3RFZGl0b3IubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1Q0FJRSwwQkFBK0IsQ0FDL0IsWUFBYSxDQUNiLHFCQUFzQixDQUp0QixPQUFRLENBRFIsY0FBZSxDQUVmLGNBSUYsQ0FFQSx3Q0FFRSxrQkFBbUIsQ0FHbkIsa0JBQW1CLENBSm5CLFlBQWEsQ0FFYixPQUFRLENBQ1IsZ0JBRUYsQ0FFQSx3Q0FVRSxrQkFBbUIsQ0FMbkIsa0JBQW1CLENBRm5CLHFCQUFzQixDQUN0QixpQkFBa0IsQ0FFbEIsVUFBVyxDQUVYLGNBQWUsQ0FDZixZQUFhLENBRmIsY0FBZSxDQUxmLFdBQVksQ0FTWixzQkFBdUIsQ0FWdkIsVUFXRixDQUVBLDhDQUNFLGtCQUNGLENBRUEsaURBRUUsa0JBQW1CLENBRG5CLFVBRUYsQ0FFQSwyQ0FFRSxrQkFBbUIsQ0FEbkIsb0JBRUYsQ0FFQSx1Q0FDRSxNQUNGLENBRUEsMENBS0Usa0JBQW1CLENBRm5CLHFCQUFzQixDQUN0QixpQkFBa0IsQ0FFbEIsVUFBVyxDQUVYLGNBQWUsQ0FEZixjQUFlLENBTmYsV0FBWSxDQUNaLGNBT0YsQ0FFQSxnREFDRSxrQkFDRixDQUVBLHdDQUtFLGtCQUFtQixDQUZuQixXQUFZLENBQ1osaUJBQWtCLENBRWxCLFVBQVcsQ0FHWCxjQUFlLENBRmYsY0FBZSxDQUNmLGVBQWdCLENBUGhCLFdBQVksQ0FDWixjQVFGLENBRUEsOENBQ0Usa0JBQ0YsQ0FFQSwyQ0FHRSxrQkFBbUIsQ0FEbkIsWUFBYSxDQURiLE1BQU8sQ0FHUCxzQkFBdUIsQ0FDdkIsYUFBYyxDQUNkLFlBQ0YsQ0FFQSx1Q0FJRSxpQkFBa0IsQ0FEbEIsZ0JBQWlCLENBRGpCLGVBQWdCLENBRGhCLGNBSUYsQ0FFQSw4Q0FJRSxrQkFBbUIsQ0FIbkIsWUFBYSxDQUNiLE9BQVEsQ0FDUixnQkFFRixDQUVBLDBDQUlFLGtCQUFtQixDQUNuQixxQkFBc0IsQ0FDdEIsaUJBQWtCLENBQ2xCLFVBQVcsQ0FOWCxNQUFPLENBT1AsY0FBZSxDQU5mLFdBQVksQ0FPWixZQUFhLENBTmIsYUFPRixDQUVBLGdEQUNFLG9CQUNGLENBRUEsdUNBS0Usa0JBQW1CLENBRm5CLFdBQVksQ0FDWixpQkFBa0IsQ0FFbEIsVUFBVyxDQUVYLGNBQWUsQ0FEZixjQUFlLENBTmYsV0FBWSxDQUNaLGNBT0YiLCJmaWxlIjoiU2NyZWVuc2hvdEVkaXRvci5tb2R1bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmVkaXRvciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIHotaW5kZXg6IDEwMDAwMDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjg1KTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLnRvb2xiYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDZweDtcbiAgcGFkZGluZzogOHB4IDEycHg7XG4gIGJhY2tncm91bmQ6ICMxYTFhMWE7XG59XG5cbi50b29sQnRuIHtcbiAgd2lkdGg6IDMycHg7XG4gIGhlaWdodDogMzJweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kOiAjMmEyYTJhO1xuICBjb2xvcjogI2RkZDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4udG9vbEJ0bjpob3ZlciB7XG4gIGJhY2tncm91bmQ6ICMzYTNhM2E7XG59XG5cbi50b29sQnRuOmRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC4zO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4udG9vbEFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogI0VGNDQ0NDtcbiAgYmFja2dyb3VuZDogIzNhMjAyMDtcbn1cblxuLnNwYWNlciB7XG4gIGZsZXg6IDE7XG59XG5cbi5jYW5jZWxCdG4ge1xuICBoZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kOiAjMmEyYTJhO1xuICBjb2xvcjogI2RkZDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jYW5jZWxCdG46aG92ZXIge1xuICBiYWNrZ3JvdW5kOiAjM2EzYTNhO1xufVxuXG4uZG9uZUJ0biB7XG4gIGhlaWdodDogMzJweDtcbiAgcGFkZGluZzogMCAxNnB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYmFja2dyb3VuZDogIzNCODJGNjtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZG9uZUJ0bjpob3ZlciB7XG4gIGJhY2tncm91bmQ6ICMyNTYzRUI7XG59XG5cbi5jYW52YXNXcmFwIHtcbiAgZmxleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBwYWRkaW5nOiAxNnB4O1xufVxuXG4uY2FudmFzIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IGNyb3NzaGFpcjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4udGV4dElucHV0V3JhcCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogNHB4O1xuICBwYWRkaW5nOiA0cHggMTJweDtcbiAgYmFja2dyb3VuZDogIzFhMWExYTtcbn1cblxuLnRleHRJbnB1dCB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogMjhweDtcbiAgcGFkZGluZzogMCA4cHg7XG4gIGJhY2tncm91bmQ6ICMyYTJhMmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuLnRleHRJbnB1dDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzNCODJGNjtcbn1cblxuLnRleHRPayB7XG4gIGhlaWdodDogMjhweDtcbiAgcGFkZGluZzogMCAxMHB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYmFja2dyb3VuZDogIzNCODJGNjtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuIl19 */";
|
|
4
|
+
var styles = {"editor":"ScreenshotEditor-module_editor__PVGL-","toolbar":"ScreenshotEditor-module_toolbar__oKXCg","toolBtn":"ScreenshotEditor-module_toolBtn__RPYjF","toolActive":"ScreenshotEditor-module_toolActive__5Lz7o","spacer":"ScreenshotEditor-module_spacer__-ALGj","cancelBtn":"ScreenshotEditor-module_cancelBtn__e9xAe","doneBtn":"ScreenshotEditor-module_doneBtn__LqRy8","canvasWrap":"ScreenshotEditor-module_canvasWrap__T3XK0","canvas":"ScreenshotEditor-module_canvas__6Ij7x","textInputWrap":"ScreenshotEditor-module_textInputWrap__Vbz3V","textInput":"ScreenshotEditor-module_textInput__jNk6t","textOk":"ScreenshotEditor-module_textOk__LXSOw"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=ScreenshotEditor.module.css.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenshotEditor.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { Translations } from '../lib/i18n';
|
|
1
2
|
interface SuccessStateProps {
|
|
2
3
|
accentColor: string;
|
|
4
|
+
t: Translations;
|
|
3
5
|
onNewFeedback: () => void;
|
|
4
6
|
}
|
|
5
|
-
export declare function SuccessState({ accentColor, onNewFeedback }: SuccessStateProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare function SuccessState({ accentColor, t, onNewFeedback }: SuccessStateProps): import("react/jsx-runtime").JSX.Element;
|
|
6
8
|
export {};
|
|
7
9
|
//# sourceMappingURL=SuccessState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuccessState.d.ts","sourceRoot":"","sources":["../../src/components/SuccessState.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SuccessState.d.ts","sourceRoot":"","sources":["../../src/components/SuccessState.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,EAAE,YAAY,CAAC;IAChB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,iBAAiB,2CAehF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import styles from './SuccessState.module.css.mjs';
|
|
3
3
|
|
|
4
|
-
function SuccessState({ accentColor, onNewFeedback }) {
|
|
5
|
-
return (jsxs("div", { className: styles.success, children: [jsx("div", { className: styles.checkmark, style: { backgroundColor: accentColor }, children: jsx("svg", { className: styles.checkIcon, viewBox: "0 0 24 24", children: jsx("polyline", { points: "20 6 9 17 4 12" }) }) }), jsx("p", { className: styles.title, children:
|
|
4
|
+
function SuccessState({ accentColor, t, onNewFeedback }) {
|
|
5
|
+
return (jsxs("div", { className: styles.success, children: [jsx("div", { className: styles.checkmark, style: { backgroundColor: accentColor }, children: jsx("svg", { className: styles.checkIcon, viewBox: "0 0 24 24", children: jsx("polyline", { points: "20 6 9 17 4 12" }) }) }), jsx("p", { className: styles.title, children: t.successTitle }), jsx("p", { className: styles.subtitle, children: t.successSubtitle }), jsx("button", { type: "button", className: styles.newBtn, onClick: onNewFeedback, children: t.successSendAnother })] }));
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
export { SuccessState };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuccessState.mjs","sources":["../../src/components/SuccessState.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"SuccessState.mjs","sources":["../../src/components/SuccessState.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;AAUM,SAAU,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAqB,EAAA;AAC/E,IAAA,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,OAAO,EAAA,QAAA,EAAA,CAC5BC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,YACvEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAC,WAAW,EAAA,QAAA,EACnDA,kBAAU,MAAM,EAAC,gBAAgB,EAAA,CAAG,EAAA,CAChC,GACF,EACNA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,MAAM,CAAC,KAAK,YAAG,CAAC,CAAC,YAAY,EAAA,CAAK,EAChDA,WAAG,SAAS,EAAE,MAAM,CAAC,QAAQ,YAAG,CAAC,CAAC,eAAe,EAAA,CAAK,EACtDA,GAAA,CAAA,QAAA,EAAA,EAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,YACnE,CAAC,CAAC,kBAAkB,EAAA,CACd,CAAA,EAAA,CACL;AAEV;;;;"}
|
|
@@ -1,9 +1,11 @@
|
|
|
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 ThreadListProps {
|
|
4
5
|
client: HttpClient;
|
|
6
|
+
t: Translations;
|
|
5
7
|
onSelectThread: (thread: Thread) => void;
|
|
6
8
|
}
|
|
7
|
-
export declare function ThreadList({ client, onSelectThread }: ThreadListProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare function ThreadList({ client, t, onSelectThread }: ThreadListProps): import("react/jsx-runtime").JSX.Element;
|
|
8
10
|
export {};
|
|
9
11
|
//# sourceMappingURL=ThreadList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadList.d.ts","sourceRoot":"","sources":["../../src/components/ThreadList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ThreadList.d.ts","sourceRoot":"","sources":["../../src/components/ThreadList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAahD,UAAU,eAAe;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,CAAC,EAAE,YAAY,CAAC;IAChB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,eAAe,2CAqDxE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { FEEDBACK_TYPES } from '../types.mjs';
|
|
4
|
+
import { formatTimeAgo } from '../lib/i18n.mjs';
|
|
4
5
|
import { getMyThreads } from '../lib/api.mjs';
|
|
5
6
|
import styles from './ThreadList.module.css.mjs';
|
|
6
7
|
|
|
@@ -11,7 +12,7 @@ const STATUS_COLORS = {
|
|
|
11
12
|
closed: '#6B7280',
|
|
12
13
|
wont_fix: '#EF4444',
|
|
13
14
|
};
|
|
14
|
-
function ThreadList({ client, onSelectThread }) {
|
|
15
|
+
function ThreadList({ client, t, onSelectThread }) {
|
|
15
16
|
const [threads, setThreads] = useState([]);
|
|
16
17
|
const [loading, setLoading] = useState(true);
|
|
17
18
|
useEffect(() => {
|
|
@@ -27,32 +28,17 @@ function ThreadList({ client, onSelectThread }) {
|
|
|
27
28
|
return () => { cancelled = true; };
|
|
28
29
|
}, [client]);
|
|
29
30
|
if (loading) {
|
|
30
|
-
return jsx("div", { className: styles.loading, children:
|
|
31
|
+
return jsx("div", { className: styles.loading, children: t.threadListLoading });
|
|
31
32
|
}
|
|
32
33
|
if (threads.length === 0) {
|
|
33
|
-
return jsx("div", { className: styles.empty, children:
|
|
34
|
+
return jsx("div", { className: styles.empty, children: t.threadListEmpty });
|
|
34
35
|
}
|
|
35
36
|
return (jsx("div", { className: styles.list, children: threads.map((thread) => {
|
|
36
37
|
const typeConfig = FEEDBACK_TYPES.find((ft) => ft.value === thread.type);
|
|
37
|
-
const timeAgo =
|
|
38
|
+
const timeAgo = formatTimeAgo(thread.createdAt, t);
|
|
38
39
|
return (jsxs("button", { className: styles.threadItem, onClick: () => onSelectThread(thread), type: "button", children: [jsx("span", { className: styles.threadEmoji, children: typeConfig?.emoji || '💬' }), jsxs("div", { className: styles.threadContent, children: [jsx("p", { className: styles.threadSubject, children: thread.subject }), jsxs("p", { className: styles.threadMeta, children: [jsx("span", { className: styles.statusDot, style: { backgroundColor: STATUS_COLORS[thread.status] || '#6B7280' } }), thread.status.replace('_', ' '), " \u00B7 ", timeAgo] })] })] }, thread.id));
|
|
39
40
|
}) }));
|
|
40
41
|
}
|
|
41
|
-
function getTimeAgo(dateStr) {
|
|
42
|
-
const diff = Date.now() - new Date(dateStr).getTime();
|
|
43
|
-
const mins = Math.floor(diff / 60000);
|
|
44
|
-
if (mins < 1)
|
|
45
|
-
return 'just now';
|
|
46
|
-
if (mins < 60)
|
|
47
|
-
return `${mins}m ago`;
|
|
48
|
-
const hours = Math.floor(mins / 60);
|
|
49
|
-
if (hours < 24)
|
|
50
|
-
return `${hours}h ago`;
|
|
51
|
-
const days = Math.floor(hours / 24);
|
|
52
|
-
if (days < 30)
|
|
53
|
-
return `${days}d ago`;
|
|
54
|
-
return new Date(dateStr).toLocaleDateString();
|
|
55
|
-
}
|
|
56
42
|
|
|
57
43
|
export { ThreadList };
|
|
58
44
|
//# sourceMappingURL=ThreadList.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadList.mjs","sources":["../../src/components/ThreadList.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ThreadList.mjs","sources":["../../src/components/ThreadList.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":";;;;;;;AASA,MAAM,aAAa,GAA2B;AAC5C,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,WAAW,EAAE,SAAS;AACtB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,QAAQ,EAAE,SAAS;CACpB;AAQK,SAAU,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,EAAmB,EAAA;IACvE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE5C,SAAS,CAAC,MAAK;QACb,IAAI,SAAS,GAAG,KAAK;AACrB,QAAA,eAAe,IAAI,GAAA;AACjB,YAAA,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,SAAS,EAAE;gBACd,UAAU,CAAC,IAAI,CAAC;gBAChB,UAAU,CAAC,KAAK,CAAC;YACnB;QACF;AACA,QAAA,IAAI,EAAE;QACN,OAAO,MAAK,EAAG,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;AACpC,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEZ,IAAI,OAAO,EAAE;QACX,OAAOA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,OAAO,EAAA,QAAA,EAAG,CAAC,CAAC,iBAAiB,EAAA,CAAO;IACpE;AAEA,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,OAAOA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,KAAK,EAAA,QAAA,EAAG,CAAC,CAAC,eAAe,EAAA,CAAO;IAChE;AAEA,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,IAAI,EAAA,QAAA,EACxB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACtB,YAAA,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC;YACxE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAClD,QACEC,iBAEE,SAAS,EAAE,MAAM,CAAC,UAAU,EAC5B,OAAO,EAAE,MAAM,cAAc,CAAC,MAAM,CAAC,EACrC,IAAI,EAAC,QAAQ,EAAA,QAAA,EAAA,CAEbD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,MAAM,CAAC,WAAW,YAAG,UAAU,EAAE,KAAK,IAAI,IAAI,EAAA,CAAQ,EACvEC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,aAAa,EAAA,QAAA,EAAA,CAClCD,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,MAAM,CAAC,aAAa,EAAA,QAAA,EAAG,MAAM,CAAC,OAAO,EAAA,CAAK,EACxDC,YAAG,SAAS,EAAE,MAAM,CAAC,UAAU,EAAA,QAAA,EAAA,CAC7BD,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,KAAK,EAAE,EAAE,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE,EAAA,CACrE,EACD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAA,UAAA,EAAK,OAAO,CAAA,EAAA,CAC1C,CAAA,EAAA,CACA,CAAA,EAAA,EAfD,MAAM,CAAC,EAAE,CAgBP;QAEb,CAAC,CAAC,EAAA,CACE;AAEV;;;;"}
|
|
@@ -3,7 +3,12 @@ interface TriggerButtonProps {
|
|
|
3
3
|
position: 'bottom-right' | 'bottom-left';
|
|
4
4
|
accentColor: string;
|
|
5
5
|
hasNotification: boolean;
|
|
6
|
+
offset?: {
|
|
7
|
+
bottom?: number;
|
|
8
|
+
left?: number;
|
|
9
|
+
right?: number;
|
|
10
|
+
};
|
|
6
11
|
}
|
|
7
|
-
export declare function TriggerButton({ onClick, position, accentColor, hasNotification }: TriggerButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function TriggerButton({ onClick, position, accentColor, hasNotification, offset }: TriggerButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
8
13
|
export {};
|
|
9
14
|
//# sourceMappingURL=TriggerButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerButton.d.ts","sourceRoot":"","sources":["../../src/components/TriggerButton.tsx"],"names":[],"mappings":"AAGA,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,cAAc,GAAG,aAAa,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TriggerButton.d.ts","sourceRoot":"","sources":["../../src/components/TriggerButton.tsx"],"names":[],"mappings":"AAGA,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,cAAc,GAAG,aAAa,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,kBAAkB,2CAsB5G"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import styles from './TriggerButton.module.css.mjs';
|
|
3
3
|
|
|
4
|
-
function TriggerButton({ onClick, position, accentColor, hasNotification }) {
|
|
4
|
+
function TriggerButton({ onClick, position, accentColor, hasNotification, offset }) {
|
|
5
5
|
const posClass = position === 'bottom-left' ? styles.bottomLeft : styles.bottomRight;
|
|
6
|
-
|
|
6
|
+
const inlinePos = {};
|
|
7
|
+
if (offset?.bottom !== undefined)
|
|
8
|
+
inlinePos.bottom = offset.bottom;
|
|
9
|
+
if (position === 'bottom-right' && offset?.right !== undefined)
|
|
10
|
+
inlinePos.right = offset.right;
|
|
11
|
+
if (position === 'bottom-left' && offset?.left !== undefined)
|
|
12
|
+
inlinePos.left = offset.left;
|
|
13
|
+
return (jsxs("button", { className: `${styles.trigger} ${posClass}`, onClick: onClick, style: { backgroundColor: accentColor, ...inlinePos }, "aria-label": "Open feedback", type: "button", children: [jsx("svg", { className: styles.triggerIcon, viewBox: "0 0 24 24", children: jsx("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }) }), hasNotification && jsx("span", { className: styles.notificationDot })] }));
|
|
7
14
|
}
|
|
8
15
|
|
|
9
16
|
export { TriggerButton };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerButton.mjs","sources":["../../src/components/TriggerButton.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"TriggerButton.mjs","sources":["../../src/components/TriggerButton.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;AAWM,SAAU,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAsB,EAAA;AAC3G,IAAA,MAAM,QAAQ,GAAG,QAAQ,KAAK,aAAa,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW;IAEpF,MAAM,SAAS,GAAwB,EAAE;AACzC,IAAA,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS;AAAE,QAAA,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;IAClE,IAAI,QAAQ,KAAK,cAAc,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS;AAAE,QAAA,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;IAC9F,IAAI,QAAQ,KAAK,aAAa,IAAI,MAAM,EAAE,IAAI,KAAK,SAAS;AAAE,QAAA,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAE1F,IAAA,QACEA,IAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,CAAA,EAAG,MAAM,CAAC,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,EAC1C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE,EAAA,YAAA,EAC1C,eAAe,EAC1B,IAAI,EAAC,QAAQ,EAAA,QAAA,EAAA,CAEbC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAC,WAAW,EAAA,QAAA,EACrDA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,+DAA+D,EAAA,CAAG,EAAA,CACtE,EACL,eAAe,IAAIA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,MAAM,CAAC,eAAe,EAAA,CAAI,CAAA,EAAA,CACxD;AAEb;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import styleInject from '../node_modules/style-inject/dist/style-inject.es.mjs';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".TriggerButton-module_trigger__02CR-{align-items:center;border:none;border-radius:50%;box-shadow:0 2px 12px rgba(0,0,0,.15);cursor:pointer;display:flex;height:48px;justify-content:center;outline:none;padding:0;position:fixed;transition:transform .12s cubic-bezier(.22,1,.36,1),box-shadow .12s cubic-bezier(.22,1,.36,1);width:48px;z-index:9999}.TriggerButton-module_trigger__02CR-:hover{box-shadow:0 4px 20px rgba(0,0,0,.2);transform:scale(1.08)}.TriggerButton-module_trigger__02CR-:active{transform:scale(.95)}.TriggerButton-module_bottomRight__566sd{bottom:16px;right:16px}.TriggerButton-module_bottomLeft__G7wbE{bottom:16px;left:16px}.TriggerButton-module_triggerIcon__WdZYH{fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;color:#fff;height:24px;width:24px}.TriggerButton-module_notificationDot__b1Thf{animation:TriggerButton-module_pulse-dot__TIqUH 2s ease-in-out infinite;background:#ef4444;border:2px solid #fff;border-radius:50%;height:10px;position:absolute;right:-2px;top:-2px;width:10px}@keyframes TriggerButton-module_pulse-dot__TIqUH{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.3)}}@media (max-width:479px){.TriggerButton-module_trigger__02CR-{height:36px;width:36px}.TriggerButton-module_bottomRight__566sd{bottom:var(--pulse-trigger-bottom,72px);right:12px}.TriggerButton-module_bottomLeft__G7wbE{bottom:var(--pulse-trigger-bottom,72px);left:12px}.TriggerButton-module_triggerIcon__WdZYH{height:18px;width:18px}.TriggerButton-module_notificationDot__b1Thf{height:8px;right:-1px;top:-1px;width:8px}}\n/*# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
var css_248z = ".TriggerButton-module_trigger__02CR-{align-items:center;border:none;border-radius:50%;box-shadow:0 2px 12px rgba(0,0,0,.15);cursor:pointer;display:flex;height:48px;justify-content:center;outline:none;padding:0;position:fixed;transition:transform .12s cubic-bezier(.22,1,.36,1),box-shadow .12s cubic-bezier(.22,1,.36,1);width:48px;z-index:9999}.TriggerButton-module_trigger__02CR-:hover{box-shadow:0 4px 20px rgba(0,0,0,.2);transform:scale(1.08)}.TriggerButton-module_trigger__02CR-:active{transform:scale(.95)}.TriggerButton-module_bottomRight__566sd{bottom:var(--pulse-offset-bottom,16px);right:var(--pulse-offset-right,16px)}.TriggerButton-module_bottomLeft__G7wbE{bottom:var(--pulse-offset-bottom,16px);left:var(--pulse-offset-left,16px)}.TriggerButton-module_triggerIcon__WdZYH{fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;color:#fff;height:24px;width:24px}.TriggerButton-module_notificationDot__b1Thf{animation:TriggerButton-module_pulse-dot__TIqUH 2s ease-in-out infinite;background:#ef4444;border:2px solid #fff;border-radius:50%;height:10px;position:absolute;right:-2px;top:-2px;width:10px}@keyframes TriggerButton-module_pulse-dot__TIqUH{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.3)}}@media (max-width:479px){.TriggerButton-module_trigger__02CR-{height:36px;width:36px}.TriggerButton-module_bottomRight__566sd{bottom:var(--pulse-trigger-bottom,var(--pulse-offset-bottom,72px));right:var(--pulse-offset-right,12px)}.TriggerButton-module_bottomLeft__G7wbE{bottom:var(--pulse-trigger-bottom,var(--pulse-offset-bottom,72px));left:var(--pulse-offset-left,12px)}.TriggerButton-module_triggerIcon__WdZYH{height:18px;width:18px}.TriggerButton-module_notificationDot__b1Thf{height:8px;right:-1px;top:-1px;width:8px}}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyaWdnZXJCdXR0b24ubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FTRSxrQkFBbUIsQ0FIbkIsV0FBWSxDQURaLGlCQUFrQixDQU1sQixxQ0FBMEMsQ0FKMUMsY0FBZSxDQUNmLFlBQWEsQ0FKYixXQUFZLENBTVosc0JBQXVCLENBS3ZCLFlBQWEsQ0FEYixTQUFVLENBYlYsY0FBZSxDQVdmLDZGQUMyRCxDQVYzRCxVQUFXLENBRFgsWUFjRixDQUVBLDJDQUVFLG9DQUF5QyxDQUR6QyxxQkFFRixDQUVBLDRDQUNFLG9CQUNGLENBRUEseUNBQ0Usc0NBQXdDLENBQ3hDLG9DQUNGLENBRUEsd0NBQ0Usc0NBQXdDLENBQ3hDLGtDQUNGLENBRUEseUNBSUUsU0FBVSxDQUNWLG1CQUFvQixDQUNwQixnQkFBaUIsQ0FDakIsb0JBQXFCLENBQ3JCLHFCQUFzQixDQUx0QixVQUFjLENBRGQsV0FBWSxDQURaLFVBUUYsQ0FFQSw2Q0FTRSx1RUFBNEMsQ0FGNUMsa0JBQW1CLENBQ25CLHFCQUF5QixDQUZ6QixpQkFBa0IsQ0FEbEIsV0FBWSxDQUpaLGlCQUFrQixDQUVsQixVQUFXLENBRFgsUUFBUyxDQUVULFVBTUYsQ0FFQSxpREFDRSxNQUFnQyxTQUFVLENBQS9CLGtCQUFpQyxDQUM1QyxJQUE2QixVQUFZLENBQW5DLG9CQUFxQyxDQUM3QyxDQUVBLHlCQUNFLHFDQUVFLFdBQVksQ0FEWixVQUVGLENBRUEseUNBQ0Usa0VBQXFFLENBQ3JFLG9DQUNGLENBRUEsd0NBQ0Usa0VBQXFFLENBQ3JFLGtDQUNGLENBRUEseUNBRUUsV0FBWSxDQURaLFVBRUYsQ0FFQSw2Q0FFRSxVQUFXLENBRVgsVUFBVyxDQURYLFFBQVMsQ0FGVCxTQUlGLENBQ0YiLCJmaWxlIjoiVHJpZ2dlckJ1dHRvbi5tb2R1bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLnRyaWdnZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk7XG4gIHdpZHRoOiA0OHB4O1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3gtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSksXG4gICAgICAgICAgICAgIGJveC1zaGFkb3cgMTIwbXMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpO1xuICBwYWRkaW5nOiAwO1xuICBvdXRsaW5lOiBub25lO1xufVxuXG4udHJpZ2dlcjpob3ZlciB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4wOCk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4udHJpZ2dlcjphY3RpdmUge1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpO1xufVxuXG4uYm90dG9tUmlnaHQge1xuICBib3R0b206IHZhcigtLXB1bHNlLW9mZnNldC1ib3R0b20sIDE2cHgpO1xuICByaWdodDogdmFyKC0tcHVsc2Utb2Zmc2V0LXJpZ2h0LCAxNnB4KTtcbn1cblxuLmJvdHRvbUxlZnQge1xuICBib3R0b206IHZhcigtLXB1bHNlLW9mZnNldC1ib3R0b20sIDE2cHgpO1xuICBsZWZ0OiB2YXIoLS1wdWxzZS1vZmZzZXQtbGVmdCwgMTZweCk7XG59XG5cbi50cmlnZ2VySWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmaWxsOiBub25lO1xuICBzdHJva2U6IGN1cnJlbnRDb2xvcjtcbiAgc3Ryb2tlLXdpZHRoOiAxLjU7XG4gIHN0cm9rZS1saW5lY2FwOiByb3VuZDtcbiAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDtcbn1cblxuLm5vdGlmaWNhdGlvbkRvdCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMnB4O1xuICByaWdodDogLTJweDtcbiAgd2lkdGg6IDEwcHg7XG4gIGhlaWdodDogMTBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiAjRUY0NDQ0O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZmZmZmZmO1xuICBhbmltYXRpb246IHB1bHNlLWRvdCAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBwdWxzZS1kb3Qge1xuICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IG9wYWNpdHk6IDE7IH1cbiAgNTAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjMpOyBvcGFjaXR5OiAwLjg7IH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3OXB4KSB7XG4gIC50cmlnZ2VyIHtcbiAgICB3aWR0aDogMzZweDtcbiAgICBoZWlnaHQ6IDM2cHg7XG4gIH1cblxuICAuYm90dG9tUmlnaHQge1xuICAgIGJvdHRvbTogdmFyKC0tcHVsc2UtdHJpZ2dlci1ib3R0b20sIHZhcigtLXB1bHNlLW9mZnNldC1ib3R0b20sIDcycHgpKTtcbiAgICByaWdodDogdmFyKC0tcHVsc2Utb2Zmc2V0LXJpZ2h0LCAxMnB4KTtcbiAgfVxuXG4gIC5ib3R0b21MZWZ0IHtcbiAgICBib3R0b206IHZhcigtLXB1bHNlLXRyaWdnZXItYm90dG9tLCB2YXIoLS1wdWxzZS1vZmZzZXQtYm90dG9tLCA3MnB4KSk7XG4gICAgbGVmdDogdmFyKC0tcHVsc2Utb2Zmc2V0LWxlZnQsIDEycHgpO1xuICB9XG5cbiAgLnRyaWdnZXJJY29uIHtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG4gIH1cblxuICAubm90aWZpY2F0aW9uRG90IHtcbiAgICB3aWR0aDogOHB4O1xuICAgIGhlaWdodDogOHB4O1xuICAgIHRvcDogLTFweDtcbiAgICByaWdodDogLTFweDtcbiAgfVxufVxuIl19 */";
|
|
4
4
|
var styles = {"trigger":"TriggerButton-module_trigger__02CR-","bottomRight":"TriggerButton-module_bottomRight__566sd","bottomLeft":"TriggerButton-module_bottomLeft__G7wbE","triggerIcon":"TriggerButton-module_triggerIcon__WdZYH","notificationDot":"TriggerButton-module_notificationDot__b1Thf"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { FeedbackType } from '../types';
|
|
2
|
+
import type { Translations } from '../lib/i18n';
|
|
2
3
|
interface TypeSelectorProps {
|
|
3
4
|
value: FeedbackType | null;
|
|
4
5
|
onChange: (type: FeedbackType) => void;
|
|
6
|
+
t: Translations;
|
|
5
7
|
}
|
|
6
|
-
export declare function TypeSelector({ value, onChange }: TypeSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function TypeSelector({ value, onChange, t }: TypeSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
7
9
|
export {};
|
|
8
10
|
//# sourceMappingURL=TypeSelector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeSelector.d.ts","sourceRoot":"","sources":["../../src/components/TypeSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"TypeSelector.d.ts","sourceRoot":"","sources":["../../src/components/TypeSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,UAAU,iBAAiB;IACzB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,CAAC,EAAE,YAAY,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,iBAAiB,2CAoBrE"}
|
|
@@ -2,10 +2,17 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { FEEDBACK_TYPES } from '../types.mjs';
|
|
3
3
|
import styles from './TypeSelector.module.css.mjs';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
const TYPE_LABEL_KEYS = {
|
|
6
|
+
bug: 'typeBug',
|
|
7
|
+
feature: 'typeFeature',
|
|
8
|
+
question: 'typeQuestion',
|
|
9
|
+
praise: 'typePraise',
|
|
10
|
+
other: 'typeOther',
|
|
11
|
+
};
|
|
12
|
+
function TypeSelector({ value, onChange, t }) {
|
|
6
13
|
return (jsx("div", { className: styles.typeSelector, children: FEEDBACK_TYPES.map((ft) => {
|
|
7
14
|
const isActive = value === ft.value;
|
|
8
|
-
return (jsxs("button", { type: "button", className: `${styles.typeBtn} ${isActive ? styles.typeBtnActive : ''}`, style: isActive ? { backgroundColor: ft.color, borderColor: ft.color } : undefined, onClick: () => onChange(ft.value), children: [jsx("span", { className: styles.emoji, children: ft.emoji }), ft.
|
|
15
|
+
return (jsxs("button", { type: "button", className: `${styles.typeBtn} ${isActive ? styles.typeBtnActive : ''}`, style: isActive ? { backgroundColor: ft.color, borderColor: ft.color } : undefined, onClick: () => onChange(ft.value), children: [jsx("span", { className: styles.emoji, children: ft.emoji }), t[TYPE_LABEL_KEYS[ft.value]]] }, ft.value));
|
|
9
16
|
}) }));
|
|
10
17
|
}
|
|
11
18
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeSelector.mjs","sources":["../../src/components/TypeSelector.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"TypeSelector.mjs","sources":["../../src/components/TypeSelector.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":";;;;AAMA,MAAM,eAAe,GAA6C;AAChE,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,QAAQ,EAAE,cAAc;AACxB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,KAAK,EAAE,WAAW;CACnB;AAQK,SAAU,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAqB,EAAA;AACpE,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,YAAY,EAAA,QAAA,EAChC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,KAAI;AACzB,YAAA,MAAM,QAAQ,GAAG,KAAK,KAAK,EAAE,CAAC,KAAK;AACnC,YAAA,QACEC,IAAA,CAAA,QAAA,EAAA,EAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,CAAA,EAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,GAAG,MAAM,CAAC,aAAa,GAAG,EAAE,CAAA,CAAE,EACtE,KAAK,EAAE,QAAQ,GAAG,EAAE,eAAe,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,SAAS,EAClF,OAAO,EAAE,MAAM,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,aAEjCD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,MAAM,CAAC,KAAK,EAAA,QAAA,EAAG,EAAE,CAAC,KAAK,EAAA,CAAQ,EAC/C,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA,EAAA,EAPxB,EAAE,CAAC,KAAK,CAQN;QAEb,CAAC,CAAC,EAAA,CACE;AAEV;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { PulseWidget } from './PulseWidget';
|
|
2
|
-
export type { PulseWidgetProps, FeedbackType, ThreadStatus, DiagnosticsSnapshot } from './types';
|
|
2
|
+
export type { PulseWidgetProps, PulseWidgetHandle, FeedbackType, ThreadStatus, DiagnosticsSnapshot } from './types';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface Point {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
|
5
|
+
export interface Rect {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
w: number;
|
|
9
|
+
h: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function drawFreehand(ctx: CanvasRenderingContext2D, points: Point[], color: string, lineWidth: number): void;
|
|
12
|
+
export declare function drawRect(ctx: CanvasRenderingContext2D, rect: Rect, color: string, lineWidth: number): void;
|
|
13
|
+
export declare function drawText(ctx: CanvasRenderingContext2D, pos: Point, text: string, color: string, fontSize: number): void;
|
|
14
|
+
export declare function blurRegion(ctx: CanvasRenderingContext2D, rect: Rect, pixelSize?: number): void;
|
|
15
|
+
//# sourceMappingURL=canvas-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-tools.d.ts","sourceRoot":"","sources":["../../src/lib/canvas-tools.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,wBAAwB,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAY5G;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAInG;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAIhH;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,GAAE,MAAU,QAsC1F"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
function drawFreehand(ctx, points, color, lineWidth) {
|
|
2
|
+
if (points.length < 2)
|
|
3
|
+
return;
|
|
4
|
+
ctx.strokeStyle = color;
|
|
5
|
+
ctx.lineWidth = lineWidth;
|
|
6
|
+
ctx.lineCap = 'round';
|
|
7
|
+
ctx.lineJoin = 'round';
|
|
8
|
+
ctx.beginPath();
|
|
9
|
+
ctx.moveTo(points[0].x, points[0].y);
|
|
10
|
+
for (let i = 1; i < points.length; i++) {
|
|
11
|
+
ctx.lineTo(points[i].x, points[i].y);
|
|
12
|
+
}
|
|
13
|
+
ctx.stroke();
|
|
14
|
+
}
|
|
15
|
+
function drawRect(ctx, rect, color, lineWidth) {
|
|
16
|
+
ctx.strokeStyle = color;
|
|
17
|
+
ctx.lineWidth = lineWidth;
|
|
18
|
+
ctx.strokeRect(rect.x, rect.y, rect.w, rect.h);
|
|
19
|
+
}
|
|
20
|
+
function drawText(ctx, pos, text, color, fontSize) {
|
|
21
|
+
ctx.fillStyle = color;
|
|
22
|
+
ctx.font = `${fontSize}px sans-serif`;
|
|
23
|
+
ctx.fillText(text, pos.x, pos.y);
|
|
24
|
+
}
|
|
25
|
+
function blurRegion(ctx, rect, pixelSize = 8) {
|
|
26
|
+
const { x, y, w, h } = rect;
|
|
27
|
+
const absW = Math.abs(w);
|
|
28
|
+
const absH = Math.abs(h);
|
|
29
|
+
const startX = w < 0 ? x + w : x;
|
|
30
|
+
const startY = h < 0 ? y + h : y;
|
|
31
|
+
if (absW < 2 || absH < 2)
|
|
32
|
+
return;
|
|
33
|
+
const imageData = ctx.getImageData(startX, startY, absW, absH);
|
|
34
|
+
const data = imageData.data;
|
|
35
|
+
for (let py = 0; py < absH; py += pixelSize) {
|
|
36
|
+
for (let px = 0; px < absW; px += pixelSize) {
|
|
37
|
+
let r = 0, g = 0, b = 0, count = 0;
|
|
38
|
+
for (let dy = 0; dy < pixelSize && py + dy < absH; dy++) {
|
|
39
|
+
for (let dx = 0; dx < pixelSize && px + dx < absW; dx++) {
|
|
40
|
+
const i = ((py + dy) * absW + (px + dx)) * 4;
|
|
41
|
+
r += data[i];
|
|
42
|
+
g += data[i + 1];
|
|
43
|
+
b += data[i + 2];
|
|
44
|
+
count++;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
r = Math.round(r / count);
|
|
48
|
+
g = Math.round(g / count);
|
|
49
|
+
b = Math.round(b / count);
|
|
50
|
+
for (let dy = 0; dy < pixelSize && py + dy < absH; dy++) {
|
|
51
|
+
for (let dx = 0; dx < pixelSize && px + dx < absW; dx++) {
|
|
52
|
+
const i = ((py + dy) * absW + (px + dx)) * 4;
|
|
53
|
+
data[i] = r;
|
|
54
|
+
data[i + 1] = g;
|
|
55
|
+
data[i + 2] = b;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
ctx.putImageData(imageData, startX, startY);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export { blurRegion, drawFreehand, drawRect, drawText };
|
|
64
|
+
//# sourceMappingURL=canvas-tools.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-tools.mjs","sources":["../../src/lib/canvas-tools.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface Translations {
|
|
2
|
+
tabNew: string;
|
|
3
|
+
tabMyThreads: string;
|
|
4
|
+
labelType: string;
|
|
5
|
+
labelMessage: string;
|
|
6
|
+
labelName: string;
|
|
7
|
+
labelEmail: string;
|
|
8
|
+
placeholderName: string;
|
|
9
|
+
placeholderEmail: string;
|
|
10
|
+
emailError: string;
|
|
11
|
+
submitError: string;
|
|
12
|
+
btnUploading: string;
|
|
13
|
+
btnSending: string;
|
|
14
|
+
btnSendFeedback: string;
|
|
15
|
+
typeBug: string;
|
|
16
|
+
typeFeature: string;
|
|
17
|
+
typeQuestion: string;
|
|
18
|
+
typePraise: string;
|
|
19
|
+
typeOther: string;
|
|
20
|
+
successTitle: string;
|
|
21
|
+
successSubtitle: string;
|
|
22
|
+
successSendAnother: string;
|
|
23
|
+
threadListLoading: string;
|
|
24
|
+
threadListEmpty: string;
|
|
25
|
+
btnBack: string;
|
|
26
|
+
replyPlaceholder: string;
|
|
27
|
+
senderDeveloper: string;
|
|
28
|
+
senderYou: string;
|
|
29
|
+
attachImages: string;
|
|
30
|
+
editorDone: string;
|
|
31
|
+
editorCancel: string;
|
|
32
|
+
timeJustNow: string;
|
|
33
|
+
timeMinutesAgo: string;
|
|
34
|
+
timeHoursAgo: string;
|
|
35
|
+
timeDaysAgo: string;
|
|
36
|
+
}
|
|
37
|
+
export type Locale = 'en' | 'ko';
|
|
38
|
+
export declare function createTranslations(locale?: string): Translations;
|
|
39
|
+
export declare function formatTimeAgo(dateStr: string, t: Translations): string;
|
|
40
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/lib/i18n.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IAGrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IAGxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAGlB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAG3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IAGxB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAGlB,YAAY,EAAE,MAAM,CAAC;IAGrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IAGrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAOjC,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAGhE;AASD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAUtE"}
|