@alliance-droid/status-feedback-system 2.3.0 → 2.3.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.3.1
4
+
5
+ ### Fixed
6
+
7
+ - `<FeedbackSubmitForm>` paste-to-attach was missing from 2.3.0 (commit didn't land on main before merge). Now included.
8
+
3
9
  ## 2.3.0
4
10
 
5
11
  ### Added
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { Card, Button, Input, Textarea, Select } from '@alliance-droid/svelte-component-library';
3
3
  import type { FeedbackBoardState } from './state.svelte.js';
4
+ import PasteImageInput from '../shared/PasteImageInput.svelte';
4
5
 
5
6
  interface Props {
6
7
  board: FeedbackBoardState;
@@ -16,6 +17,16 @@
16
17
  let submitting = $state(false);
17
18
  let success = $state(false);
18
19
  let error = $state('');
20
+ let pastedImage = $state<string | null>(null);
21
+ let pastedFilename = $state('');
22
+ let textareaWrapperEl: HTMLDivElement | undefined = $state();
23
+ let textareaEl: HTMLTextAreaElement | undefined = $state();
24
+
25
+ $effect(() => {
26
+ if (textareaWrapperEl) {
27
+ textareaEl = textareaWrapperEl.querySelector('textarea') ?? undefined;
28
+ }
29
+ });
19
30
 
20
31
  let isAuthenticated = $derived(!!board.userEmail);
21
32
 
@@ -32,11 +43,14 @@
32
43
  title: title.trim() || undefined,
33
44
  message: message.trim(),
34
45
  category: category || undefined,
46
+ pastedImage,
35
47
  });
36
48
  success = true;
37
49
  title = '';
38
50
  message = '';
39
51
  category = '';
52
+ pastedImage = null;
53
+ pastedFilename = '';
40
54
  setTimeout(() => { success = false; }, 2000);
41
55
  } catch (err) {
42
56
  error = err instanceof Error ? err.message : 'Failed to submit';
@@ -66,11 +80,18 @@
66
80
  bind:value={title}
67
81
  placeholder="Title (optional)"
68
82
  />
69
- <Textarea
70
- value={message}
71
- oninput={(e) => (message = (e.currentTarget as HTMLTextAreaElement).value)}
72
- placeholder="Describe your feedback..."
73
- rows={3}
83
+ <div bind:this={textareaWrapperEl}>
84
+ <Textarea
85
+ value={message}
86
+ oninput={(e) => (message = (e.currentTarget as HTMLTextAreaElement).value)}
87
+ placeholder="Describe your feedback (paste an image to attach it)\u2026"
88
+ rows={3}
89
+ />
90
+ </div>
91
+ <PasteImageInput
92
+ {textareaEl}
93
+ bind:image={pastedImage}
94
+ bind:filename={pastedFilename}
74
95
  />
75
96
  {#if error}
76
97
  <p class="text-sm text-red-400">
@@ -46,6 +46,7 @@ export interface FeedbackBoardState {
46
46
  title?: string;
47
47
  message: string;
48
48
  category?: string;
49
+ pastedImage?: string | null;
49
50
  }): Promise<void>;
50
51
  submitResponse(itemId: string, message: string, pastedImage?: string | null): Promise<void>;
51
52
  getCategoryIcon(name: string): string;
@@ -128,10 +128,16 @@ export function createFeedbackBoard(options) {
128
128
  async function submitFeedback(data) {
129
129
  if (!resolvedEmail)
130
130
  throw new Error('Authentication required to submit feedback');
131
+ const metadata = {};
132
+ if (data.pastedImage)
133
+ metadata.pastedScreenshot = data.pastedImage;
131
134
  await client.submitFeedback({
132
- ...data,
135
+ title: data.title,
136
+ message: data.message,
137
+ category: data.category,
133
138
  email: resolvedEmail,
134
139
  pageUrl: typeof window !== 'undefined' ? window.location.href : undefined,
140
+ metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
135
141
  });
136
142
  await load();
137
143
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alliance-droid/status-feedback-system",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "type": "module",
5
5
  "description": "Drop-in system status pages and user feedback forms for SvelteKit apps",
6
6
  "svelte": "./dist/index.js",