anton-bakker-feedback 0.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/chunks/i18n-RpKqSWAT.js +309 -0
- package/dist/chunks/i18n-RpKqSWAT.js.map +1 -0
- package/dist/core/capture.d.ts +57 -0
- package/dist/core/capture.d.ts.map +1 -0
- package/dist/core/config.d.ts +107 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/errors.d.ts +80 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/i18n.d.ts +39 -0
- package/dist/core/i18n.d.ts.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/locales/en.d.ts +6 -0
- package/dist/core/locales/en.d.ts.map +1 -0
- package/dist/core/locales/nl.d.ts +6 -0
- package/dist/core/locales/nl.d.ts.map +1 -0
- package/dist/core/observability.d.ts +54 -0
- package/dist/core/observability.d.ts.map +1 -0
- package/dist/core/transforms.d.ts +57 -0
- package/dist/core/transforms.d.ts.map +1 -0
- package/dist/core/transport.d.ts +44 -0
- package/dist/core/transport.d.ts.map +1 -0
- package/dist/core/types.d.ts +130 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/validation.d.ts +48 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +455 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +2 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +2 -0
- package/dist/manifest.js.map +1 -0
- package/dist/react/FeedbackButton.d.ts +19 -0
- package/dist/react/FeedbackButton.d.ts.map +1 -0
- package/dist/react/FeedbackConfirm.d.ts +15 -0
- package/dist/react/FeedbackConfirm.d.ts.map +1 -0
- package/dist/react/FeedbackContext.d.ts +172 -0
- package/dist/react/FeedbackContext.d.ts.map +1 -0
- package/dist/react/FeedbackDialogue.d.ts +14 -0
- package/dist/react/FeedbackDialogue.d.ts.map +1 -0
- package/dist/react/FeedbackPanel.d.ts +10 -0
- package/dist/react/FeedbackPanel.d.ts.map +1 -0
- package/dist/react/FeedbackProvider.d.ts +28 -0
- package/dist/react/FeedbackProvider.d.ts.map +1 -0
- package/dist/react/FeedbackRecorder.d.ts +14 -0
- package/dist/react/FeedbackRecorder.d.ts.map +1 -0
- package/dist/react/index.d.ts +33 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/resolver/submitResolver.d.ts +60 -0
- package/dist/react/resolver/submitResolver.d.ts.map +1 -0
- package/dist/react/useFeedback.d.ts +27 -0
- package/dist/react/useFeedback.d.ts.map +1 -0
- package/dist/react.d.ts +2 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +1576 -0
- package/dist/react.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { FeedbackType, FeedbackScope, FeedbackSize, DialogueEntry } from '../core/types.js';
|
|
2
|
+
import { ResolvedFeedbackConfig } from '../core/config.js';
|
|
3
|
+
|
|
4
|
+
/** Screenshots captured during a session */
|
|
5
|
+
export type ScreenshotEntry = {
|
|
6
|
+
id: string;
|
|
7
|
+
dataUrl: string;
|
|
8
|
+
capturedAt: string;
|
|
9
|
+
};
|
|
10
|
+
/** Context captured at the point of opening the feedback panel */
|
|
11
|
+
export interface CapturedContext {
|
|
12
|
+
url: string;
|
|
13
|
+
pageTitle: string;
|
|
14
|
+
userAgent: string;
|
|
15
|
+
viewport: {
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
};
|
|
19
|
+
locale: string;
|
|
20
|
+
consoleErrors: string[];
|
|
21
|
+
screenshots: ScreenshotEntry[];
|
|
22
|
+
duplicateCandidates: Array<{
|
|
23
|
+
id: string;
|
|
24
|
+
title: string;
|
|
25
|
+
}>;
|
|
26
|
+
customFields?: Record<string, string | number | boolean>;
|
|
27
|
+
}
|
|
28
|
+
/** Classification suggested by the dialogue */
|
|
29
|
+
export interface DialogueClassification {
|
|
30
|
+
type?: FeedbackType;
|
|
31
|
+
scope?: FeedbackScope;
|
|
32
|
+
size?: FeedbackSize;
|
|
33
|
+
title?: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
confidence?: number;
|
|
36
|
+
}
|
|
37
|
+
/** State when idle — no panel open */
|
|
38
|
+
export interface IdleState {
|
|
39
|
+
status: 'idle';
|
|
40
|
+
}
|
|
41
|
+
/** State when dialogue is in progress */
|
|
42
|
+
export interface DialogueState {
|
|
43
|
+
status: 'dialogue';
|
|
44
|
+
history: DialogueEntry[];
|
|
45
|
+
step: number;
|
|
46
|
+
totalSteps: number;
|
|
47
|
+
awaitingResponse: boolean;
|
|
48
|
+
classification: DialogueClassification;
|
|
49
|
+
error: string | null;
|
|
50
|
+
}
|
|
51
|
+
/** State during screen capture (recording sub-states) */
|
|
52
|
+
export interface RecordingState {
|
|
53
|
+
status: 'recording';
|
|
54
|
+
recordingMode: 'minimised' | 'capture' | 'review';
|
|
55
|
+
captureCount: number;
|
|
56
|
+
}
|
|
57
|
+
/** State when confirming submission */
|
|
58
|
+
export interface ConfirmingState {
|
|
59
|
+
status: 'confirming';
|
|
60
|
+
classification: DialogueClassification;
|
|
61
|
+
submitting: boolean;
|
|
62
|
+
error: string | null;
|
|
63
|
+
}
|
|
64
|
+
/** State after successful submission */
|
|
65
|
+
export interface SubmittedState {
|
|
66
|
+
status: 'submitted';
|
|
67
|
+
feedbackId: string;
|
|
68
|
+
}
|
|
69
|
+
/** Discriminated union of all possible panel states */
|
|
70
|
+
export type FeedbackPanelState = IdleState | DialogueState | RecordingState | ConfirmingState | SubmittedState;
|
|
71
|
+
/** Runtime capability detection results */
|
|
72
|
+
export interface Capabilities {
|
|
73
|
+
/** Whether Bedrock dialogue is available */
|
|
74
|
+
bedrock: boolean;
|
|
75
|
+
/** Whether DynamoDB storage is available */
|
|
76
|
+
dynamodb: boolean;
|
|
77
|
+
/** Capability detection has completed */
|
|
78
|
+
detected: boolean;
|
|
79
|
+
}
|
|
80
|
+
/** The value provided by FeedbackContext */
|
|
81
|
+
export interface FeedbackContextValue {
|
|
82
|
+
/** Resolved config with all defaults applied */
|
|
83
|
+
config: ResolvedFeedbackConfig;
|
|
84
|
+
/** Current panel state */
|
|
85
|
+
state: FeedbackPanelState;
|
|
86
|
+
/** Convenience: is panel currently open (not idle) */
|
|
87
|
+
isOpen: boolean;
|
|
88
|
+
/** Context captured when panel was opened */
|
|
89
|
+
capturedContext: CapturedContext | null;
|
|
90
|
+
/** Runtime capabilities (Bedrock, DynamoDB) */
|
|
91
|
+
capabilities: Capabilities;
|
|
92
|
+
/** Active i18n locale */
|
|
93
|
+
locale: string;
|
|
94
|
+
/** Open the panel, optionally merging context */
|
|
95
|
+
open: (trigger?: Partial<CapturedContext>) => void;
|
|
96
|
+
/** Close and reset to idle */
|
|
97
|
+
close: () => void;
|
|
98
|
+
/** Internal: dispatch state transitions */
|
|
99
|
+
dispatch: (action: FeedbackAction) => void;
|
|
100
|
+
}
|
|
101
|
+
export type FeedbackAction = {
|
|
102
|
+
type: 'OPEN';
|
|
103
|
+
payload: Partial<CapturedContext>;
|
|
104
|
+
} | {
|
|
105
|
+
type: 'OPEN';
|
|
106
|
+
} | {
|
|
107
|
+
type: 'CLOSE';
|
|
108
|
+
} | {
|
|
109
|
+
type: 'SEND_MESSAGE';
|
|
110
|
+
payload: {
|
|
111
|
+
message: string;
|
|
112
|
+
};
|
|
113
|
+
} | {
|
|
114
|
+
type: 'RECEIVE_RESPONSE';
|
|
115
|
+
payload: {
|
|
116
|
+
response: string;
|
|
117
|
+
step: number;
|
|
118
|
+
totalSteps: number;
|
|
119
|
+
classification?: DialogueClassification;
|
|
120
|
+
done?: boolean;
|
|
121
|
+
};
|
|
122
|
+
} | {
|
|
123
|
+
type: 'DIALOGUE_ERROR';
|
|
124
|
+
payload: {
|
|
125
|
+
error: string;
|
|
126
|
+
};
|
|
127
|
+
} | {
|
|
128
|
+
type: 'START_RECORDING';
|
|
129
|
+
} | {
|
|
130
|
+
type: 'SET_RECORDING_MODE';
|
|
131
|
+
payload: {
|
|
132
|
+
mode: 'minimised' | 'capture' | 'review';
|
|
133
|
+
};
|
|
134
|
+
} | {
|
|
135
|
+
type: 'ADD_SCREENSHOT';
|
|
136
|
+
payload: ScreenshotEntry;
|
|
137
|
+
} | {
|
|
138
|
+
type: 'REMOVE_SCREENSHOT';
|
|
139
|
+
payload: {
|
|
140
|
+
id: string;
|
|
141
|
+
};
|
|
142
|
+
} | {
|
|
143
|
+
type: 'CONFIRM';
|
|
144
|
+
payload: {
|
|
145
|
+
classification?: DialogueClassification;
|
|
146
|
+
};
|
|
147
|
+
} | {
|
|
148
|
+
type: 'CONFIRM';
|
|
149
|
+
} | {
|
|
150
|
+
type: 'SUBMIT_START';
|
|
151
|
+
} | {
|
|
152
|
+
type: 'SUBMIT_SUCCESS';
|
|
153
|
+
payload: {
|
|
154
|
+
feedbackId: string;
|
|
155
|
+
};
|
|
156
|
+
} | {
|
|
157
|
+
type: 'SUBMIT_ERROR';
|
|
158
|
+
payload: {
|
|
159
|
+
error: string;
|
|
160
|
+
};
|
|
161
|
+
} | {
|
|
162
|
+
type: 'SET_CAPABILITIES';
|
|
163
|
+
payload: Capabilities;
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* FeedbackContext — React context for the intake UI.
|
|
167
|
+
*
|
|
168
|
+
* Throws a descriptive error when consumed outside FeedbackProvider:
|
|
169
|
+
* import { FeedbackProvider } from 'anton-bakker-feedback/react'
|
|
170
|
+
*/
|
|
171
|
+
export declare const FeedbackContext: import('react').Context<FeedbackContextValue | null>;
|
|
172
|
+
//# sourceMappingURL=FeedbackContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackContext.d.ts","sourceRoot":"","sources":["../../src/react/FeedbackContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface FeedbackDialogueProps {
|
|
4
|
+
className?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* FeedbackDialogue — chat interface for the dialogue phase.
|
|
8
|
+
*
|
|
9
|
+
* Calls dispatch to send messages via the dialogue transport.
|
|
10
|
+
* "Skip to form" is available when capabilities.bedrock === false or on error —
|
|
11
|
+
* transitions directly to confirming with empty classification.
|
|
12
|
+
*/
|
|
13
|
+
export declare function FeedbackDialogue({ className }: FeedbackDialogueProps): React.JSX.Element | null;
|
|
14
|
+
//# sourceMappingURL=FeedbackDialogue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackDialogue.d.ts","sourceRoot":"","sources":["../../src/react/FeedbackDialogue.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAMN,MAAM,OAAO,CAAC;AAWf,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAiN/F"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* FeedbackPanel — modal container component.
|
|
5
|
+
*
|
|
6
|
+
* Renders a React portal to document.body.
|
|
7
|
+
* Controls state-based layout switching and accessibility.
|
|
8
|
+
*/
|
|
9
|
+
export declare function FeedbackPanel(): React.JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=FeedbackPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackPanel.d.ts","sourceRoot":"","sources":["../../src/react/FeedbackPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAMN,MAAM,OAAO,CAAC;AA2If;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAwNxD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { default as React, ReactNode } from 'react';
|
|
2
|
+
import { FeedbackConfig } from '../core/config.js';
|
|
3
|
+
|
|
4
|
+
export interface FeedbackProviderProps {
|
|
5
|
+
/** Feedback configuration */
|
|
6
|
+
config: FeedbackConfig;
|
|
7
|
+
/**
|
|
8
|
+
* RBAC gate — if this returns false, FeedbackPanel is not rendered.
|
|
9
|
+
* Pass the current authenticated user object.
|
|
10
|
+
*/
|
|
11
|
+
canSubmitFeedback: (user?: unknown) => boolean;
|
|
12
|
+
/** Optional i18n locale override (BCP 47). Defaults to navigator.language → 'en' */
|
|
13
|
+
locale?: string;
|
|
14
|
+
/** The current user (passed to canSubmitFeedback) */
|
|
15
|
+
user?: unknown;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* FeedbackProvider wraps your application root and provides the feedback
|
|
20
|
+
* context, RBAC gate, capability detection, and i18n locale.
|
|
21
|
+
*
|
|
22
|
+
* "Skip to form" — when capabilities.bedrock is false, FeedbackDialogue
|
|
23
|
+
* will show the "Skip to form" button to allow direct access to FeedbackConfirm.
|
|
24
|
+
*
|
|
25
|
+
* Import: import { FeedbackProvider } from 'anton-bakker-feedback/react'
|
|
26
|
+
*/
|
|
27
|
+
export declare function FeedbackProvider({ config, canSubmitFeedback, locale: localeProp, user, children, }: FeedbackProviderProps): React.JSX.Element;
|
|
28
|
+
//# sourceMappingURL=FeedbackProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackProvider.d.ts","sourceRoot":"","sources":["../../src/react/FeedbackProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,EACZ,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAUf,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQxD,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB;;;OAGG;IACH,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IAC/C,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;CACrB;AAoUD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,iBAAiB,EACjB,MAAM,EAAE,UAAU,EAClB,IAAI,EACJ,QAAQ,GACT,EAAE,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAwG3C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface FeedbackRecorderProps {
|
|
4
|
+
className?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* FeedbackRecorder — screen capture component.
|
|
8
|
+
*
|
|
9
|
+
* Minimised mode: badge floats over the UI; app remains interactive.
|
|
10
|
+
* Capture mode: crosshair cursor overlay, click anywhere captures.
|
|
11
|
+
* Review mode: thumbnail grid with delete buttons; "Done" goes to confirming.
|
|
12
|
+
*/
|
|
13
|
+
export declare function FeedbackRecorder({ className }: FeedbackRecorderProps): React.JSX.Element | null;
|
|
14
|
+
//# sourceMappingURL=FeedbackRecorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackRecorder.d.ts","sourceRoot":"","sources":["../../src/react/FeedbackRecorder.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAKN,MAAM,OAAO,CAAC;AAUf,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0DD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA2N/F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React subpath barrel — all exports for 'anton-bakker-feedback/react'
|
|
3
|
+
*
|
|
4
|
+
* Named exports only. No default exports. Tree-shakeable.
|
|
5
|
+
*
|
|
6
|
+
* Client imports (React components + hooks):
|
|
7
|
+
* import { FeedbackProvider, FeedbackPanel, FeedbackButton, useFeedback } from 'anton-bakker-feedback/react'
|
|
8
|
+
*
|
|
9
|
+
* Server imports (resolver factory — separate import to tree-shake from client bundle):
|
|
10
|
+
* import { createIntakeResolver } from 'anton-bakker-feedback/react/resolver'
|
|
11
|
+
*
|
|
12
|
+
* The createIntakeResolver is also re-exported here for convenience.
|
|
13
|
+
* Bundlers that support tree-shaking will drop it when not used on the client.
|
|
14
|
+
*
|
|
15
|
+
* Context types are also exported for consumers who need to extend the system.
|
|
16
|
+
*/
|
|
17
|
+
export { FeedbackProvider } from './FeedbackProvider.js';
|
|
18
|
+
export type { FeedbackProviderProps } from './FeedbackProvider.js';
|
|
19
|
+
export { FeedbackPanel } from './FeedbackPanel.js';
|
|
20
|
+
export { FeedbackButton } from './FeedbackButton.js';
|
|
21
|
+
export type { FeedbackButtonProps } from './FeedbackButton.js';
|
|
22
|
+
export { FeedbackDialogue } from './FeedbackDialogue.js';
|
|
23
|
+
export type { FeedbackDialogueProps } from './FeedbackDialogue.js';
|
|
24
|
+
export { FeedbackRecorder } from './FeedbackRecorder.js';
|
|
25
|
+
export type { FeedbackRecorderProps } from './FeedbackRecorder.js';
|
|
26
|
+
export { FeedbackConfirm } from './FeedbackConfirm.js';
|
|
27
|
+
export type { FeedbackConfirmProps } from './FeedbackConfirm.js';
|
|
28
|
+
export { useFeedback } from './useFeedback.js';
|
|
29
|
+
export type { UseFeedbackReturn } from './useFeedback.js';
|
|
30
|
+
export type { FeedbackContextValue, FeedbackPanelState, IdleState, DialogueState, RecordingState, ConfirmingState, SubmittedState, CapturedContext, ScreenshotEntry, Capabilities, DialogueClassification, FeedbackAction, } from './FeedbackContext.js';
|
|
31
|
+
export { createIntakeResolver } from './resolver/submitResolver.js';
|
|
32
|
+
export type { SubmitHandlerConfig, SubmitPayload, RequestHandler, } from './resolver/submitResolver.js';
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { FeedbackEnvironment, FeedbackType, FeedbackScope, FeedbackSize } from '../../core/types.js';
|
|
2
|
+
|
|
3
|
+
/** Minimal HTTP request shape (Lambda/Express compatible) */
|
|
4
|
+
export interface RequestBody {
|
|
5
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
6
|
+
body?: unknown;
|
|
7
|
+
}
|
|
8
|
+
/** Minimal HTTP response shape (Lambda/Express compatible) */
|
|
9
|
+
export interface ResponseBody {
|
|
10
|
+
statusCode: number;
|
|
11
|
+
headers: Record<string, string>;
|
|
12
|
+
body: string;
|
|
13
|
+
}
|
|
14
|
+
/** Express-compatible RequestHandler */
|
|
15
|
+
export type RequestHandler = (req: RequestBody, res: {
|
|
16
|
+
status: (code: number) => {
|
|
17
|
+
json: (body: unknown) => void;
|
|
18
|
+
};
|
|
19
|
+
json: (body: unknown) => void;
|
|
20
|
+
}) => Promise<void>;
|
|
21
|
+
export interface SubmitPayload {
|
|
22
|
+
title: string;
|
|
23
|
+
description?: string | undefined;
|
|
24
|
+
type: FeedbackType;
|
|
25
|
+
scope?: FeedbackScope | undefined;
|
|
26
|
+
size?: FeedbackSize | undefined;
|
|
27
|
+
screenshots?: Array<{
|
|
28
|
+
dataUrl: string;
|
|
29
|
+
capturedAt: string;
|
|
30
|
+
}> | undefined;
|
|
31
|
+
consoleErrors?: string[] | undefined;
|
|
32
|
+
systemInfo?: {
|
|
33
|
+
url?: string | undefined;
|
|
34
|
+
userAgent?: string | undefined;
|
|
35
|
+
viewport?: {
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
} | undefined;
|
|
39
|
+
locale?: string | undefined;
|
|
40
|
+
} | undefined;
|
|
41
|
+
}
|
|
42
|
+
export interface SubmitHandlerConfig {
|
|
43
|
+
/** Application name — used in OTel attributes and feedback ID */
|
|
44
|
+
appName: string;
|
|
45
|
+
/** Deployment environment */
|
|
46
|
+
environment?: FeedbackEnvironment;
|
|
47
|
+
/** DynamoDB table name — if absent, storage is skipped (Minimal level) */
|
|
48
|
+
tableName?: string;
|
|
49
|
+
/** AWS region for DynamoDB */
|
|
50
|
+
awsRegion?: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates an Express/Lambda-compatible request handler for the submit endpoint.
|
|
54
|
+
*
|
|
55
|
+
* Validates payload → stores in DynamoDB (if configured) → returns 201 with ID.
|
|
56
|
+
* Returns 503 with retryable:true when DynamoDB is unavailable.
|
|
57
|
+
* No Bedrock dependency.
|
|
58
|
+
*/
|
|
59
|
+
export declare function createIntakeResolver(config: SubmitHandlerConfig): RequestHandler;
|
|
60
|
+
//# sourceMappingURL=submitResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitResolver.d.ts","sourceRoot":"","sources":["../../../src/react/resolver/submitResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAM1G,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG,CAC3B,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC;IAC5D,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/B,KACE,OAAO,CAAC,IAAI,CAAC,CAAC;AAMnB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IACzE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,QAAQ,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;QACzD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC7B,GAAG,SAAS,CAAC;CACf;AAMD,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4GD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,cAAc,CAyEhF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FeedbackPanelState, CapturedContext, FeedbackContextValue } from './FeedbackContext.js';
|
|
2
|
+
|
|
3
|
+
export interface UseFeedbackReturn {
|
|
4
|
+
/** Open the panel. Merges optional trigger context. Idempotent if already open. */
|
|
5
|
+
open: (trigger?: Partial<CapturedContext>) => void;
|
|
6
|
+
/** Close the panel and reset state to idle. */
|
|
7
|
+
close: () => void;
|
|
8
|
+
/** Current panel state (discriminated union) */
|
|
9
|
+
state: FeedbackPanelState;
|
|
10
|
+
/** Convenience: true when panel is not idle */
|
|
11
|
+
isOpen: boolean;
|
|
12
|
+
/** Context captured when panel was opened (null when idle) */
|
|
13
|
+
capturedContext: CapturedContext | null;
|
|
14
|
+
/** Full context value (for advanced use cases) */
|
|
15
|
+
_context: FeedbackContextValue;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* useFeedback() — consumes the FeedbackContext.
|
|
19
|
+
*
|
|
20
|
+
* Must be called inside a component that is a descendant of FeedbackProvider.
|
|
21
|
+
* Throws a descriptive error otherwise.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const { open, close, state, isOpen } = useFeedback();
|
|
25
|
+
*/
|
|
26
|
+
export declare function useFeedback(): UseFeedbackReturn;
|
|
27
|
+
//# sourceMappingURL=useFeedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFeedback.d.ts","sourceRoot":"","sources":["../../src/react/useFeedback.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAM9B,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACnD,+CAA+C;IAC/C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,gDAAgD;IAChD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,kDAAkD;IAClD,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAMD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,IAAI,iBAAiB,CAmB/C"}
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAMA,cAAc,kBAAkB,CAAC"}
|