@limekex/bugreport-widget-sdk 0.1.5 → 0.2.1

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.
@@ -0,0 +1,408 @@
1
+ /**
2
+ * Screenshot Annotation Editor
3
+ *
4
+ * Provides a canvas-based editor for annotating screenshots with:
5
+ * - Drawing tools: Arrow, Rectangle, Circle, Pen, Text
6
+ * - Color picker
7
+ * - Undo/redo functionality
8
+ * - Export to PNG
9
+ */
10
+ const EDITOR_ID = '__bugreport_annotation_editor__';
11
+ const CANVAS_ID = '__bugreport_annotation_canvas__';
12
+ export class AnnotationEditor {
13
+ constructor(options) {
14
+ this.container = null;
15
+ this.canvas = null;
16
+ this.ctx = null;
17
+ this.image = null;
18
+ this.currentTool = 'arrow';
19
+ this.currentColor = '#FF0000';
20
+ this.lineWidth = 3;
21
+ this.annotations = [];
22
+ this.currentAnnotation = null;
23
+ this.isDrawing = false;
24
+ this.startPoint = null;
25
+ this.onSaveCallback = options.onSave;
26
+ this.onCancelCallback = options.onCancel;
27
+ this.loadImage(options.imageDataUrl);
28
+ }
29
+ loadImage(dataUrl) {
30
+ this.image = new Image();
31
+ this.image.onload = () => {
32
+ this.render();
33
+ };
34
+ this.image.src = dataUrl;
35
+ }
36
+ render() {
37
+ if (document.getElementById(EDITOR_ID))
38
+ return;
39
+ this.container = document.createElement('div');
40
+ this.container.id = EDITOR_ID;
41
+ this.container.style.cssText = `
42
+ position: fixed;
43
+ inset: 0;
44
+ z-index: 10001;
45
+ background: rgba(0,0,0,0.95);
46
+ display: flex;
47
+ flex-direction: column;
48
+ align-items: center;
49
+ justify-content: center;
50
+ padding: 20px;
51
+ `;
52
+ // Toolbar
53
+ const toolbar = this.createToolbar();
54
+ this.container.appendChild(toolbar);
55
+ // Canvas container
56
+ const canvasContainer = document.createElement('div');
57
+ canvasContainer.style.cssText = `
58
+ flex: 1;
59
+ display: flex;
60
+ align-items: center;
61
+ justify-content: center;
62
+ max-width: 100%;
63
+ max-height: calc(100% - 120px);
64
+ overflow: auto;
65
+ `;
66
+ this.canvas = document.createElement('canvas');
67
+ this.canvas.id = CANVAS_ID;
68
+ this.canvas.style.cssText = `
69
+ max-width: 100%;
70
+ max-height: 100%;
71
+ border: 2px solid #fff;
72
+ cursor: crosshair;
73
+ `;
74
+ if (this.image) {
75
+ this.canvas.width = this.image.width;
76
+ this.canvas.height = this.image.height;
77
+ }
78
+ this.ctx = this.canvas.getContext('2d');
79
+ this.drawCanvas();
80
+ // Event listeners
81
+ this.canvas.addEventListener('mousedown', this.handleMouseDown.bind(this));
82
+ this.canvas.addEventListener('mousemove', this.handleMouseMove.bind(this));
83
+ this.canvas.addEventListener('mouseup', this.handleMouseUp.bind(this));
84
+ this.canvas.addEventListener('mouseleave', this.handleMouseUp.bind(this));
85
+ canvasContainer.appendChild(this.canvas);
86
+ this.container.appendChild(canvasContainer);
87
+ // Action buttons
88
+ const actions = this.createActions();
89
+ this.container.appendChild(actions);
90
+ document.body.appendChild(this.container);
91
+ }
92
+ createToolbar() {
93
+ const toolbar = document.createElement('div');
94
+ toolbar.style.cssText = `
95
+ display: flex;
96
+ gap: 12px;
97
+ align-items: center;
98
+ padding: 16px;
99
+ background: rgba(255,255,255,0.1);
100
+ border-radius: 8px;
101
+ margin-bottom: 16px;
102
+ backdrop-filter: blur(10px);
103
+ `;
104
+ // Tool buttons
105
+ const tools = [
106
+ { tool: 'arrow', label: 'Arrow', icon: '→' },
107
+ { tool: 'rectangle', label: 'Rectangle', icon: '▢' },
108
+ { tool: 'circle', label: 'Circle', icon: '○' },
109
+ { tool: 'pen', label: 'Pen', icon: '✎' },
110
+ { tool: 'text', label: 'Text', icon: 'T' },
111
+ ];
112
+ tools.forEach(({ tool, label, icon }) => {
113
+ const btn = document.createElement('button');
114
+ btn.textContent = `${icon} ${label}`;
115
+ btn.style.cssText = `
116
+ padding: 8px 16px;
117
+ background: ${this.currentTool === tool ? '#e11d48' : 'rgba(255,255,255,0.2)'};
118
+ color: #fff;
119
+ border: none;
120
+ border-radius: 6px;
121
+ cursor: pointer;
122
+ font-size: 14px;
123
+ transition: background 0.2s;
124
+ `;
125
+ btn.addEventListener('click', () => {
126
+ this.currentTool = tool;
127
+ this.updateToolbarState();
128
+ });
129
+ btn.setAttribute('data-tool', tool);
130
+ toolbar.appendChild(btn);
131
+ });
132
+ // Color picker
133
+ const colorLabel = document.createElement('span');
134
+ colorLabel.textContent = 'Color:';
135
+ colorLabel.style.cssText = 'color: #fff; font-size: 14px; margin-left: 16px;';
136
+ toolbar.appendChild(colorLabel);
137
+ const colorInput = document.createElement('input');
138
+ colorInput.type = 'color';
139
+ colorInput.value = this.currentColor;
140
+ colorInput.style.cssText = `
141
+ width: 40px;
142
+ height: 40px;
143
+ border: none;
144
+ border-radius: 6px;
145
+ cursor: pointer;
146
+ `;
147
+ colorInput.addEventListener('change', (e) => {
148
+ this.currentColor = e.target.value;
149
+ });
150
+ toolbar.appendChild(colorInput);
151
+ // Undo button
152
+ const undoBtn = document.createElement('button');
153
+ undoBtn.textContent = '↶ Undo';
154
+ undoBtn.style.cssText = `
155
+ padding: 8px 16px;
156
+ background: rgba(255,255,255,0.2);
157
+ color: #fff;
158
+ border: none;
159
+ border-radius: 6px;
160
+ cursor: pointer;
161
+ font-size: 14px;
162
+ margin-left: 16px;
163
+ `;
164
+ undoBtn.addEventListener('click', () => this.undo());
165
+ toolbar.appendChild(undoBtn);
166
+ return toolbar;
167
+ }
168
+ createActions() {
169
+ const actions = document.createElement('div');
170
+ actions.style.cssText = `
171
+ display: flex;
172
+ gap: 12px;
173
+ margin-top: 16px;
174
+ `;
175
+ const cancelBtn = document.createElement('button');
176
+ cancelBtn.textContent = 'Cancel';
177
+ cancelBtn.style.cssText = `
178
+ padding: 12px 24px;
179
+ background: rgba(255,255,255,0.2);
180
+ color: #fff;
181
+ border: none;
182
+ border-radius: 8px;
183
+ cursor: pointer;
184
+ font-size: 14px;
185
+ font-weight: 600;
186
+ `;
187
+ cancelBtn.addEventListener('click', () => this.cancel());
188
+ const saveBtn = document.createElement('button');
189
+ saveBtn.textContent = 'Done';
190
+ saveBtn.style.cssText = `
191
+ padding: 12px 24px;
192
+ background: #e11d48;
193
+ color: #fff;
194
+ border: none;
195
+ border-radius: 8px;
196
+ cursor: pointer;
197
+ font-size: 14px;
198
+ font-weight: 600;
199
+ `;
200
+ saveBtn.addEventListener('click', () => this.save());
201
+ actions.appendChild(cancelBtn);
202
+ actions.appendChild(saveBtn);
203
+ return actions;
204
+ }
205
+ updateToolbarState() {
206
+ const buttons = this.container?.querySelectorAll('[data-tool]');
207
+ buttons?.forEach((btn) => {
208
+ const tool = btn.getAttribute('data-tool');
209
+ btn.style.background =
210
+ tool === this.currentTool ? '#e11d48' : 'rgba(255,255,255,0.2)';
211
+ });
212
+ }
213
+ getMousePos(e) {
214
+ if (!this.canvas)
215
+ return { x: 0, y: 0 };
216
+ const rect = this.canvas.getBoundingClientRect();
217
+ const scaleX = this.canvas.width / rect.width;
218
+ const scaleY = this.canvas.height / rect.height;
219
+ return {
220
+ x: (e.clientX - rect.left) * scaleX,
221
+ y: (e.clientY - rect.top) * scaleY,
222
+ };
223
+ }
224
+ handleMouseDown(e) {
225
+ if (this.currentTool === 'none')
226
+ return;
227
+ this.isDrawing = true;
228
+ this.startPoint = this.getMousePos(e);
229
+ if (this.currentTool === 'text') {
230
+ this.addText(this.startPoint);
231
+ return;
232
+ }
233
+ this.currentAnnotation = {
234
+ type: this.currentTool,
235
+ color: this.currentColor,
236
+ lineWidth: this.lineWidth,
237
+ start: this.startPoint,
238
+ points: this.currentTool === 'pen' ? [this.startPoint] : undefined,
239
+ };
240
+ }
241
+ handleMouseMove(e) {
242
+ if (!this.isDrawing || !this.currentAnnotation)
243
+ return;
244
+ const currentPoint = this.getMousePos(e);
245
+ if (this.currentTool === 'pen' && this.currentAnnotation.points) {
246
+ this.currentAnnotation.points.push(currentPoint);
247
+ }
248
+ else {
249
+ this.currentAnnotation.end = currentPoint;
250
+ }
251
+ this.drawCanvas();
252
+ this.drawCurrentAnnotation();
253
+ }
254
+ handleMouseUp() {
255
+ if (!this.isDrawing)
256
+ return;
257
+ if (this.currentAnnotation && this.currentTool !== 'text') {
258
+ this.annotations.push({ ...this.currentAnnotation });
259
+ }
260
+ this.isDrawing = false;
261
+ this.currentAnnotation = null;
262
+ this.drawCanvas();
263
+ }
264
+ addText(point) {
265
+ const text = prompt('Enter text:');
266
+ if (!text) {
267
+ this.isDrawing = false;
268
+ return;
269
+ }
270
+ const annotation = {
271
+ type: 'text',
272
+ color: this.currentColor,
273
+ lineWidth: this.lineWidth,
274
+ start: point,
275
+ text,
276
+ };
277
+ this.annotations.push(annotation);
278
+ this.isDrawing = false;
279
+ this.drawCanvas();
280
+ }
281
+ drawCanvas() {
282
+ if (!this.ctx || !this.canvas || !this.image)
283
+ return;
284
+ // Clear canvas
285
+ this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
286
+ // Draw image
287
+ this.ctx.drawImage(this.image, 0, 0);
288
+ // Draw all annotations
289
+ this.annotations.forEach((annotation) => this.drawAnnotation(annotation));
290
+ }
291
+ drawCurrentAnnotation() {
292
+ if (!this.currentAnnotation)
293
+ return;
294
+ this.drawAnnotation(this.currentAnnotation);
295
+ }
296
+ drawAnnotation(annotation) {
297
+ if (!this.ctx)
298
+ return;
299
+ this.ctx.strokeStyle = annotation.color;
300
+ this.ctx.fillStyle = annotation.color;
301
+ this.ctx.lineWidth = annotation.lineWidth;
302
+ this.ctx.lineCap = 'round';
303
+ this.ctx.lineJoin = 'round';
304
+ switch (annotation.type) {
305
+ case 'arrow':
306
+ if (annotation.start && annotation.end) {
307
+ this.drawArrow(annotation.start, annotation.end);
308
+ }
309
+ break;
310
+ case 'rectangle':
311
+ if (annotation.start && annotation.end) {
312
+ this.drawRectangle(annotation.start, annotation.end);
313
+ }
314
+ break;
315
+ case 'circle':
316
+ if (annotation.start && annotation.end) {
317
+ this.drawCircle(annotation.start, annotation.end);
318
+ }
319
+ break;
320
+ case 'pen':
321
+ if (annotation.points && annotation.points.length > 1) {
322
+ this.drawPen(annotation.points);
323
+ }
324
+ break;
325
+ case 'text':
326
+ if (annotation.start && annotation.text) {
327
+ this.drawText(annotation.start, annotation.text);
328
+ }
329
+ break;
330
+ }
331
+ }
332
+ drawArrow(start, end) {
333
+ if (!this.ctx)
334
+ return;
335
+ // Draw line
336
+ this.ctx.beginPath();
337
+ this.ctx.moveTo(start.x, start.y);
338
+ this.ctx.lineTo(end.x, end.y);
339
+ this.ctx.stroke();
340
+ // Draw arrowhead
341
+ const angle = Math.atan2(end.y - start.y, end.x - start.x);
342
+ const headLength = 15;
343
+ this.ctx.beginPath();
344
+ this.ctx.moveTo(end.x, end.y);
345
+ this.ctx.lineTo(end.x - headLength * Math.cos(angle - Math.PI / 6), end.y - headLength * Math.sin(angle - Math.PI / 6));
346
+ this.ctx.moveTo(end.x, end.y);
347
+ this.ctx.lineTo(end.x - headLength * Math.cos(angle + Math.PI / 6), end.y - headLength * Math.sin(angle + Math.PI / 6));
348
+ this.ctx.stroke();
349
+ }
350
+ drawRectangle(start, end) {
351
+ if (!this.ctx)
352
+ return;
353
+ const width = end.x - start.x;
354
+ const height = end.y - start.y;
355
+ this.ctx.beginPath();
356
+ this.ctx.rect(start.x, start.y, width, height);
357
+ this.ctx.stroke();
358
+ }
359
+ drawCircle(start, end) {
360
+ if (!this.ctx)
361
+ return;
362
+ const radius = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2));
363
+ this.ctx.beginPath();
364
+ this.ctx.arc(start.x, start.y, radius, 0, 2 * Math.PI);
365
+ this.ctx.stroke();
366
+ }
367
+ drawPen(points) {
368
+ if (!this.ctx || points.length < 2)
369
+ return;
370
+ this.ctx.beginPath();
371
+ this.ctx.moveTo(points[0].x, points[0].y);
372
+ for (let i = 1; i < points.length; i++) {
373
+ this.ctx.lineTo(points[i].x, points[i].y);
374
+ }
375
+ this.ctx.stroke();
376
+ }
377
+ drawText(point, text) {
378
+ if (!this.ctx)
379
+ return;
380
+ this.ctx.font = '24px sans-serif';
381
+ this.ctx.fillText(text, point.x, point.y);
382
+ }
383
+ undo() {
384
+ this.annotations.pop();
385
+ this.drawCanvas();
386
+ }
387
+ save() {
388
+ if (!this.canvas)
389
+ return;
390
+ const dataUrl = this.canvas.toDataURL('image/png');
391
+ this.onSaveCallback(dataUrl);
392
+ this.destroy();
393
+ }
394
+ cancel() {
395
+ this.onCancelCallback();
396
+ this.destroy();
397
+ }
398
+ destroy() {
399
+ this.container?.remove();
400
+ this.container = null;
401
+ this.canvas = null;
402
+ this.ctx = null;
403
+ }
404
+ }
405
+ export function openAnnotationEditor(options) {
406
+ return new AnnotationEditor(options);
407
+ }
408
+ //# sourceMappingURL=annotationEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotationEditor.js","sourceRoot":"","sources":["../../src/widget/annotationEditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Authentication Modal
3
+ *
4
+ * Provides login/register UI for tester authentication within the widget.
5
+ */
6
+ export declare function getAuthModal(): HTMLElement | null;
7
+ export declare function isAuthModalOpen(): boolean;
8
+ /**
9
+ * Initialize the authentication modal
10
+ */
11
+ export declare function initAuthModal(apiBaseUrl: string): void;
12
+ /**
13
+ * Open the authentication modal
14
+ */
15
+ export declare function openAuthModal(onSuccess?: () => void): void;
16
+ /**
17
+ * Close the authentication modal
18
+ */
19
+ export declare function closeAuthModal(): void;
20
+ /**
21
+ * Destroy the authentication modal
22
+ */
23
+ export declare function destroyAuthModal(): void;
24
+ //# sourceMappingURL=authModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authModal.d.ts","sourceRoot":"","sources":["../../src/widget/authModal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,wBAAgB,YAAY,IAAI,WAAW,GAAG,IAAI,CAEjD;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA2LtD;AAmMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAW1D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAOrC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAOvC"}