anton-bakker-feedback 0.1.0 → 0.2.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.
Files changed (68) hide show
  1. package/README.md +78 -0
  2. package/dist/react/admin/FeedbackDetailPage.d.ts +30 -0
  3. package/dist/react/admin/FeedbackDetailPage.d.ts.map +1 -0
  4. package/dist/react/admin/FeedbackUpdatePage.d.ts +34 -0
  5. package/dist/react/admin/FeedbackUpdatePage.d.ts.map +1 -0
  6. package/dist/react/admin/__tests__/FeedbackDetailPage.test.d.ts +2 -0
  7. package/dist/react/admin/__tests__/FeedbackDetailPage.test.d.ts.map +1 -0
  8. package/dist/react/admin/__tests__/FeedbackUpdatePage.integration.test.d.ts +2 -0
  9. package/dist/react/admin/__tests__/FeedbackUpdatePage.integration.test.d.ts.map +1 -0
  10. package/dist/react/admin/__tests__/FeedbackUpdatePage.test.d.ts +2 -0
  11. package/dist/react/admin/__tests__/FeedbackUpdatePage.test.d.ts.map +1 -0
  12. package/dist/react/admin/components/BrowserContext.d.ts +32 -0
  13. package/dist/react/admin/components/BrowserContext.d.ts.map +1 -0
  14. package/dist/react/admin/components/DataTable.d.ts +55 -0
  15. package/dist/react/admin/components/DataTable.d.ts.map +1 -0
  16. package/dist/react/admin/components/DialogueHistory.d.ts +27 -0
  17. package/dist/react/admin/components/DialogueHistory.d.ts.map +1 -0
  18. package/dist/react/admin/components/EditableFields.d.ts +126 -0
  19. package/dist/react/admin/components/EditableFields.d.ts.map +1 -0
  20. package/dist/react/admin/components/FeedbackListPage.d.ts +19 -0
  21. package/dist/react/admin/components/FeedbackListPage.d.ts.map +1 -0
  22. package/dist/react/admin/components/FeedbackListPage.test.d.ts +2 -0
  23. package/dist/react/admin/components/FeedbackListPage.test.d.ts.map +1 -0
  24. package/dist/react/admin/components/FilterControls.d.ts +28 -0
  25. package/dist/react/admin/components/FilterControls.d.ts.map +1 -0
  26. package/dist/react/admin/components/NavigationLink.d.ts +31 -0
  27. package/dist/react/admin/components/NavigationLink.d.ts.map +1 -0
  28. package/dist/react/admin/components/QuickActions.d.ts +43 -0
  29. package/dist/react/admin/components/QuickActions.d.ts.map +1 -0
  30. package/dist/react/admin/components/ScreenshotViewer.d.ts +38 -0
  31. package/dist/react/admin/components/ScreenshotViewer.d.ts.map +1 -0
  32. package/dist/react/admin/components/SortControls.d.ts +29 -0
  33. package/dist/react/admin/components/SortControls.d.ts.map +1 -0
  34. package/dist/react/admin/components/StatusBadge.d.ts +23 -0
  35. package/dist/react/admin/components/StatusBadge.d.ts.map +1 -0
  36. package/dist/react/admin/components/TypeBadge.d.ts +23 -0
  37. package/dist/react/admin/components/TypeBadge.d.ts.map +1 -0
  38. package/dist/react/admin/components/__tests__/BrowserContext.test.d.ts +2 -0
  39. package/dist/react/admin/components/__tests__/BrowserContext.test.d.ts.map +1 -0
  40. package/dist/react/admin/components/__tests__/DialogueHistory.test.d.ts +2 -0
  41. package/dist/react/admin/components/__tests__/DialogueHistory.test.d.ts.map +1 -0
  42. package/dist/react/admin/components/__tests__/EditableFields.test.d.ts +2 -0
  43. package/dist/react/admin/components/__tests__/EditableFields.test.d.ts.map +1 -0
  44. package/dist/react/admin/components/__tests__/QuickActions.test.d.ts +2 -0
  45. package/dist/react/admin/components/__tests__/QuickActions.test.d.ts.map +1 -0
  46. package/dist/react/admin/components/__tests__/ScreenshotViewer.test.d.ts +2 -0
  47. package/dist/react/admin/components/__tests__/ScreenshotViewer.test.d.ts.map +1 -0
  48. package/dist/react/admin/components/__tests__/badges.test.d.ts +2 -0
  49. package/dist/react/admin/components/__tests__/badges.test.d.ts.map +1 -0
  50. package/dist/react/admin/components/__tests__/controls.test.d.ts +2 -0
  51. package/dist/react/admin/components/__tests__/controls.test.d.ts.map +1 -0
  52. package/dist/react/admin/components/__tests__/table-navigation.test.d.ts +2 -0
  53. package/dist/react/admin/components/__tests__/table-navigation.test.d.ts.map +1 -0
  54. package/dist/react/admin/components/index.d.ts +13 -0
  55. package/dist/react/admin/components/index.d.ts.map +1 -0
  56. package/dist/react/admin/hooks/useFeedbackFilters.d.ts +31 -0
  57. package/dist/react/admin/hooks/useFeedbackFilters.d.ts.map +1 -0
  58. package/dist/react/admin/hooks/useFeedbackSort.d.ts +42 -0
  59. package/dist/react/admin/hooks/useFeedbackSort.d.ts.map +1 -0
  60. package/dist/react/admin/hooks/useStatusTransition.d.ts +18 -0
  61. package/dist/react/admin/hooks/useStatusTransition.d.ts.map +1 -0
  62. package/dist/react/admin/index.d.ts +6 -0
  63. package/dist/react/admin/index.d.ts.map +1 -0
  64. package/dist/react/admin/index.js +1313 -0
  65. package/dist/react/admin/index.js.map +1 -0
  66. package/dist/react/admin/types.d.ts +38 -0
  67. package/dist/react/admin/types.d.ts.map +1 -0
  68. package/package.json +8 -1
package/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # anton-bakker-feedback
2
+
3
+ Zero-dependency feedback collection package with LLM-powered dialogue intake, auto-capture, classification, and observability.
4
+
5
+ ## Exports
6
+
7
+ | Entry point | Purpose |
8
+ |-------------|---------|
9
+ | `anton-bakker-feedback` | Core: types, capture, transport, config, i18n, observability |
10
+ | `anton-bakker-feedback/react` | Widget: FeedbackProvider, FeedbackPanel, FeedbackButton, etc. |
11
+ | `anton-bakker-feedback/react/admin` | Admin pages: List, Detail, Update |
12
+ | `anton-bakker-feedback/server` | Server handlers: DynamoDB + Bedrock factories |
13
+ | `anton-bakker-feedback/manifest` | Package manifest for plugin discovery |
14
+
15
+ ## Admin Pages
16
+
17
+ The `./react/admin` entry point provides three headless page-level components for managing submitted feedback. Components are unstyled — pass `className` props to integrate with Tailwind CSS or any other CSS framework.
18
+
19
+ ### Import
20
+
21
+ ```typescript
22
+ import {
23
+ FeedbackListPage,
24
+ FeedbackDetailPage,
25
+ FeedbackUpdatePage,
26
+ } from 'anton-bakker-feedback/react/admin';
27
+ ```
28
+
29
+ Admin pages are tree-shakeable. Apps that import only from `./react` (the widget) do not bundle admin page code.
30
+
31
+ ### Props contract
32
+
33
+ All three pages use **Inversion of Control** — you provide the data and navigation functions; the component provides the UI structure.
34
+
35
+ | Prop | Type | Used by | Description |
36
+ |------|------|---------|-------------|
37
+ | `items` | `StoredFeedbackItem[]` | List | Feedback items to display |
38
+ | `loading` | `boolean` | List | Show loading state |
39
+ | `fetchItem` | `(id: string) => Promise<StoredFeedbackItem>` | Detail, Update | Load a single item |
40
+ | `updateItem` | `(id: string, patch: Partial<StoredFeedbackItem>) => Promise<void>` | Update | Persist changes |
41
+ | `onNavigate` | `(path: string) => void` | All | Consumer-owned routing |
42
+ | `currentUser` | `{ userId: string; name?: string }` | All (optional) | For assignee display |
43
+ | `className` | `string` | All (optional) | Root element class |
44
+ | `feedbackId` | `string` | Detail, Update | Item to load/edit |
45
+
46
+ ### Minimal example
47
+
48
+ ```tsx
49
+ import { FeedbackListPage } from 'anton-bakker-feedback/react/admin';
50
+
51
+ export function AdminFeedbackRoute({ items, loading }) {
52
+ return (
53
+ <FeedbackListPage
54
+ items={items}
55
+ loading={loading}
56
+ onNavigate={(path) => router.push(path)}
57
+ className="my-admin-list"
58
+ />
59
+ );
60
+ }
61
+ ```
62
+
63
+ ### Error handling
64
+
65
+ Components handle loading and empty-state UI internally. Data fetch errors should be caught in your `fetchItem`/`updateItem` implementations and surfaced via your consumer-level error boundary.
66
+
67
+ ## Development
68
+
69
+ ```bash
70
+ npm install
71
+ npm run build # Build all entry points
72
+ npx vitest run # Run tests
73
+ npx tsc --noEmit # Type check
74
+ ```
75
+
76
+ ## License
77
+
78
+ MIT
@@ -0,0 +1,30 @@
1
+ import { default as React } from 'react';
2
+ import { FeedbackDetailPageProps } from './types.js';
3
+
4
+ /**
5
+ * FeedbackDetailPage — headless single-item feedback detail component.
6
+ *
7
+ * Uses Inversion of Control: consumer provides data fetching and navigation
8
+ * via props. The component owns loading/error state and rendering logic only.
9
+ *
10
+ * Renders:
11
+ * - Header: title (content truncated), type badge, status badge, priority
12
+ * - Metadata grid: environment, submitted date, reporter count, assignee
13
+ * - Description / full content
14
+ * - Dialogue history (conversation turns)
15
+ * - Screenshot viewer
16
+ * - Browser context
17
+ * - Quick actions (status transitions, edit, back to list)
18
+ *
19
+ * No styling applied — consumer provides CSS via `className` prop.
20
+ *
21
+ * @example
22
+ * <FeedbackDetailPage
23
+ * feedbackId="FB-2026-07-28-abc12345"
24
+ * fetchItem={(id) => api.getFeedback(id)}
25
+ * onNavigate={(path) => router.push(path)}
26
+ * currentUser={{ userId: 'user-1', name: 'Alice' }}
27
+ * />
28
+ */
29
+ export declare function FeedbackDetailPage({ feedbackId, fetchItem, onNavigate, currentUser, className, generateScreenshotUrl, }: FeedbackDetailPageProps): React.JSX.Element;
30
+ //# sourceMappingURL=FeedbackDetailPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackDetailPage.d.ts","sourceRoot":"","sources":["../../../src/react/admin/FeedbackDetailPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAQ1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,qBAAqB,GACtB,EAAE,uBAAuB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiP7C"}
@@ -0,0 +1,34 @@
1
+ import { default as React } from 'react';
2
+ import { StoredFeedbackItem } from '../../core/types.js';
3
+
4
+ export interface FeedbackUpdatePageProps {
5
+ /** The ID of the feedback item to edit */
6
+ feedbackId: string;
7
+ /** Fetches the item by ID; result populates the form */
8
+ fetchItem: (id: string) => Promise<StoredFeedbackItem>;
9
+ /** Persists the changed fields; receives only the diff-patch */
10
+ updateItem: (id: string, patch: Partial<StoredFeedbackItem>) => Promise<void>;
11
+ /** Called to navigate (back to detail, cancel, after save) */
12
+ onNavigate: (path: string) => void;
13
+ /** Optional current user for "Assign to me" and correction tracking */
14
+ currentUser?: {
15
+ userId: string;
16
+ name?: string;
17
+ };
18
+ /** Optional CSS class on the root element */
19
+ className?: string;
20
+ }
21
+ /**
22
+ * FeedbackUpdatePage — edit the mutable fields of a feedback item.
23
+ *
24
+ * @example
25
+ * <FeedbackUpdatePage
26
+ * feedbackId="FB-2026-07-28-abc12345"
27
+ * fetchItem={api.getItem}
28
+ * updateItem={api.updateItem}
29
+ * onNavigate={navigate}
30
+ * currentUser={{ userId: 'user-123' }}
31
+ * />
32
+ */
33
+ export declare function FeedbackUpdatePage({ feedbackId, fetchItem, updateItem, onNavigate, currentUser, className, }: FeedbackUpdatePageProps): React.JSX.Element;
34
+ //# sourceMappingURL=FeedbackUpdatePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackUpdatePage.d.ts","sourceRoot":"","sources":["../../../src/react/admin/FeedbackUpdatePage.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EACV,kBAAkB,EAMnB,MAAM,qBAAqB,CAAC;AAQ7B,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvD,gEAAgE;IAChE,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,8DAA8D;IAC9D,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,uEAAuE;IACvE,WAAW,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,GACV,EAAE,uBAAuB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAqQ7C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FeedbackDetailPage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackDetailPage.test.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/__tests__/FeedbackDetailPage.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FeedbackUpdatePage.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackUpdatePage.integration.test.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/__tests__/FeedbackUpdatePage.integration.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FeedbackUpdatePage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackUpdatePage.test.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/__tests__/FeedbackUpdatePage.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { default as React } from 'react';
2
+ import { FeedbackContext } from '../../../core/types.js';
3
+
4
+ /**
5
+ * Props for the BrowserContext component.
6
+ */
7
+ export interface BrowserContextProps {
8
+ /**
9
+ * The feedback context object captured at submission time.
10
+ * May be undefined, null, or partial — component handles all missing fields
11
+ * gracefully.
12
+ *
13
+ * Accept both `null` and `undefined` so consumers can pass either without
14
+ * TypeScript errors (with exactOptionalPropertyTypes enabled).
15
+ */
16
+ context?: FeedbackContext | null;
17
+ /** Additional CSS class names applied to the root element */
18
+ className?: string;
19
+ }
20
+ /**
21
+ * BrowserContext — headless browser context display component.
22
+ *
23
+ * Renders a structured, readable summary of the captured browser context
24
+ * including the page URL, user agent, and viewport dimensions. Handles
25
+ * undefined/null gracefully. No styling applied — consumer provides CSS
26
+ * via `className` prop.
27
+ *
28
+ * @example
29
+ * <BrowserContext context={item.context} className="browser-context-panel" />
30
+ */
31
+ export declare function BrowserContext({ context, className, }: BrowserContextProps): React.JSX.Element;
32
+ //# sourceMappingURL=BrowserContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserContext.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/BrowserContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,SAAS,GACV,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkEzC"}
@@ -0,0 +1,55 @@
1
+ import { default as React } from 'react';
2
+
3
+ /**
4
+ * Configuration for a single column in the DataTable.
5
+ */
6
+ export interface ColumnDef<T> {
7
+ /** Unique key for this column */
8
+ key: string;
9
+ /** Column header label */
10
+ header: string;
11
+ /** Function to render cell content from a row item */
12
+ render: (item: T) => React.ReactNode;
13
+ /** Whether this column is sortable (optional, for future use) */
14
+ sortable?: boolean;
15
+ /** Additional CSS class names for this column's cells */
16
+ className?: string;
17
+ }
18
+ /**
19
+ * Props for the DataTable component.
20
+ */
21
+ export interface DataTableProps<T> {
22
+ /** Column definitions */
23
+ columns: ReadonlyArray<ColumnDef<T>>;
24
+ /** Data rows to display */
25
+ data: T[];
26
+ /** Function to extract a unique key from each row */
27
+ getRowKey: (item: T) => string;
28
+ /** Callback fired when a row is clicked */
29
+ onRowClick?: (item: T) => void;
30
+ /** Whether the table is loading data */
31
+ loading?: boolean;
32
+ /** Message to display when there are no rows */
33
+ emptyMessage?: string;
34
+ /** Additional CSS class names on the root element */
35
+ className?: string;
36
+ /** Additional CSS class names on the table element */
37
+ tableClassName?: string;
38
+ }
39
+ /**
40
+ * DataTable — generic headless data table component.
41
+ *
42
+ * Renders a `<table>` with configurable columns and rows.
43
+ * Supports loading state, empty state, and row click handlers.
44
+ * No styles applied — consumer provides styling via `className` props.
45
+ *
46
+ * @example
47
+ * <DataTable
48
+ * columns={[{ key: 'title', header: 'Title', render: (item) => item.title }]}
49
+ * data={items}
50
+ * getRowKey={(item) => item.id}
51
+ * onRowClick={(item) => navigate(`/feedback/${item.id}`)}
52
+ * />
53
+ */
54
+ export declare function DataTable<T>({ columns, data, getRowKey, onRowClick, loading, emptyMessage, className, tableClassName, }: DataTableProps<T>): React.JSX.Element;
55
+ //# sourceMappingURL=DataTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACrC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,yBAAyB;IACzB,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,2BAA2B;IAC3B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,qDAAqD;IACrD,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/B,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAC3B,OAAO,EACP,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAe,EACf,YAAgC,EAChC,SAAS,EACT,cAAc,GACf,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA+DvC"}
@@ -0,0 +1,27 @@
1
+ import { default as React } from 'react';
2
+ import { DialogueEntry } from '../../../core/types.js';
3
+
4
+ /**
5
+ * Props for the DialogueHistory component.
6
+ */
7
+ export interface DialogueHistoryProps {
8
+ /**
9
+ * Array of dialogue turns between user and assistant.
10
+ * Rendered in chronological order (index 0 first).
11
+ */
12
+ dialogue: DialogueEntry[];
13
+ /** Additional CSS class names applied to the root element */
14
+ className?: string;
15
+ }
16
+ /**
17
+ * DialogueHistory — headless conversation thread display component.
18
+ *
19
+ * Renders dialogue turns in chronological order with semantic distinction
20
+ * between user and assistant messages. No styling applied — consumer provides
21
+ * CSS via `className` prop.
22
+ *
23
+ * @example
24
+ * <DialogueHistory dialogue={item.dialogueHistory} className="dialogue-thread" />
25
+ */
26
+ export declare function DialogueHistory({ dialogue, className, }: DialogueHistoryProps): React.JSX.Element;
27
+ //# sourceMappingURL=DialogueHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DialogueHistory.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/DialogueHistory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,GACV,EAAE,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAqE1C"}
@@ -0,0 +1,126 @@
1
+ import { default as React } from 'react';
2
+ import { FeedbackStatus, FeedbackType, FeedbackScope, FeedbackSize } from '../../../core/types.js';
3
+
4
+ export interface StatusSelectProps {
5
+ /** The current status (pre-selected) */
6
+ currentStatus: FeedbackStatus;
7
+ /** Valid target statuses (from useStatusTransition) */
8
+ allowedTargets: FeedbackStatus[];
9
+ /** Currently selected value */
10
+ value: FeedbackStatus;
11
+ /** Called when the user selects a different status */
12
+ onChange: (status: FeedbackStatus) => void;
13
+ /** Optional CSS class on the container */
14
+ className?: string;
15
+ }
16
+ /**
17
+ * StatusSelect — renders only the statuses present in `allowedTargets`.
18
+ * The current status is shown as the pre-selected option but is NOT
19
+ * included in the selectable options (to prevent self-transitions).
20
+ */
21
+ export declare function StatusSelect({ currentStatus, allowedTargets, value, onChange, className, }: StatusSelectProps): React.JSX.Element;
22
+ export interface TypeSelectProps {
23
+ /** Currently selected type */
24
+ value: FeedbackType;
25
+ /** Called when the user selects a different type */
26
+ onChange: (type: FeedbackType) => void;
27
+ /** Optional CSS class on the container */
28
+ className?: string;
29
+ }
30
+ /**
31
+ * TypeSelect — renders all four FeedbackType values as options.
32
+ */
33
+ export declare function TypeSelect({ value, onChange, className, }: TypeSelectProps): React.JSX.Element;
34
+ export interface ScopeSelectProps {
35
+ /** Currently selected scope (undefined = not set) */
36
+ value: FeedbackScope | undefined;
37
+ /** Called when the user selects/clears scope */
38
+ onChange: (scope: FeedbackScope | undefined) => void;
39
+ /** Optional CSS class on the container */
40
+ className?: string;
41
+ }
42
+ /**
43
+ * ScopeSelect — renders a blank "— not set —" option plus all three FeedbackScope values.
44
+ * Scope is optional, so the blank option allows clearing it.
45
+ */
46
+ export declare function ScopeSelect({ value, onChange, className, }: ScopeSelectProps): React.JSX.Element;
47
+ export interface SizeSelectProps {
48
+ /** Currently selected size (undefined = not set) */
49
+ value: FeedbackSize | undefined;
50
+ /** Called when the user selects/clears size */
51
+ onChange: (size: FeedbackSize | undefined) => void;
52
+ /** Optional CSS class on the container */
53
+ className?: string;
54
+ }
55
+ /**
56
+ * SizeSelect — renders a blank "— not set —" option plus all four FeedbackSize values.
57
+ * Size is optional, so the blank option allows clearing it.
58
+ */
59
+ export declare function SizeSelect({ value, onChange, className, }: SizeSelectProps): React.JSX.Element;
60
+ export interface AssigneeInputProps {
61
+ /** Current assignee (free text, or undefined) */
62
+ value: string | undefined;
63
+ /** Called when the assignee changes */
64
+ onChange: (assignedTo: string | undefined) => void;
65
+ /** Optional current user for "Assign to me" shortcut */
66
+ currentUser?: {
67
+ userId: string;
68
+ name?: string;
69
+ };
70
+ /** Optional CSS class on the container */
71
+ className?: string;
72
+ }
73
+ /**
74
+ * AssigneeInput — free-text input for assigning a feedback item.
75
+ * When `currentUser` is provided, an "Assign to me" button pre-fills the field.
76
+ */
77
+ export declare function AssigneeInput({ value, onChange, currentUser, className, }: AssigneeInputProps): React.JSX.Element;
78
+ export interface TagsInputProps {
79
+ /** Current tags as a string array */
80
+ value: string[];
81
+ /** Called with the parsed tag array when the input changes */
82
+ onChange: (tags: string[]) => void;
83
+ /** Optional CSS class on the container */
84
+ className?: string;
85
+ }
86
+ /**
87
+ * TagsInput — comma-separated text input that produces a string[] value.
88
+ * Parses on each change: splits on commas, trims whitespace, removes empty strings.
89
+ */
90
+ export declare function TagsInput({ value, onChange, className, }: TagsInputProps): React.JSX.Element;
91
+ export interface CorrectionNoteProps {
92
+ /** Current correction note text */
93
+ value: string;
94
+ /** Called when the text changes */
95
+ onChange: (note: string) => void;
96
+ /**
97
+ * When true, the textarea is required — form save is blocked until
98
+ * the note is non-empty (enforced by FeedbackUpdatePage).
99
+ */
100
+ required: boolean;
101
+ /** Optional CSS class on the container */
102
+ className?: string;
103
+ }
104
+ /**
105
+ * CorrectionNote — textarea for explaining why a classification field changed.
106
+ * Rendered only when a classification field (type, scope, size) has changed.
107
+ * When `required` is true, sets aria-required="true".
108
+ */
109
+ export declare function CorrectionNote({ value, onChange, required, className, }: CorrectionNoteProps): React.JSX.Element;
110
+ /**
111
+ * EditableFields — namespace of form-field components for FeedbackUpdatePage.
112
+ *
113
+ * Usage:
114
+ * import { EditableFields } from './components/EditableFields.js';
115
+ * <EditableFields.StatusSelect ... />
116
+ */
117
+ export declare const EditableFields: {
118
+ readonly StatusSelect: typeof StatusSelect;
119
+ readonly TypeSelect: typeof TypeSelect;
120
+ readonly ScopeSelect: typeof ScopeSelect;
121
+ readonly SizeSelect: typeof SizeSelect;
122
+ readonly AssigneeInput: typeof AssigneeInput;
123
+ readonly TagsInput: typeof TagsInput;
124
+ readonly CorrectionNote: typeof CorrectionNote;
125
+ };
126
+ //# sourceMappingURL=EditableFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditableFields.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/EditableFields.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ import { FeedbackListPageProps } from '../types.js';
3
+
4
+ export type { FeedbackListPageProps };
5
+ /**
6
+ * FeedbackListPage — admin list page for browsing and filtering feedback items.
7
+ *
8
+ * Headless/unstyled component using Inversion of Control pattern.
9
+ * Consumer provides data via `items` prop; this component manages
10
+ * filter and sort state internally.
11
+ *
12
+ * @example
13
+ * <FeedbackListPage
14
+ * items={myItems}
15
+ * onNavigate={(path) => router.push(path)}
16
+ * />
17
+ */
18
+ export declare function FeedbackListPage({ items, loading, onNavigate, className, tableClassName, filterClassName, emptyStateMessage, }: FeedbackListPageProps): React.JSX.Element;
19
+ //# sourceMappingURL=FeedbackListPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackListPage.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/FeedbackListPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAQzD,YAAY,EAAE,qBAAqB,EAAE,CAAC;AA4CtC;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,OAAe,EACf,UAAU,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,iBAA8C,GAC/C,EAAE,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA0L3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FeedbackListPage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackListPage.test.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/FeedbackListPage.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { default as React } from 'react';
2
+ import { AdminFilterState } from '../types.js';
3
+
4
+ /**
5
+ * Props for the FilterControls component.
6
+ */
7
+ export interface FilterControlsProps {
8
+ /** Current filter state */
9
+ filters: AdminFilterState;
10
+ /** Callback fired when any filter value changes */
11
+ onChange: (filters: AdminFilterState) => void;
12
+ /** Additional CSS class names */
13
+ className?: string;
14
+ }
15
+ /**
16
+ * FilterControls — headless filtering controls for feedback items.
17
+ *
18
+ * Renders `<select>` elements for status, type, and environment filters.
19
+ * No direct state management — emits changes via `onChange` callback.
20
+ *
21
+ * @example
22
+ * <FilterControls
23
+ * filters={{ status: '', type: '', environment: '' }}
24
+ * onChange={(f) => setFilters(f)}
25
+ * />
26
+ */
27
+ export declare function FilterControls({ filters, onChange, className }: FilterControlsProps): React.JSX.Element;
28
+ //# sourceMappingURL=FilterControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterControls.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/FilterControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC9C,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAgFvG"}
@@ -0,0 +1,31 @@
1
+ import { default as React } from 'react';
2
+
3
+ /**
4
+ * Props for the NavigationLink component.
5
+ */
6
+ export interface NavigationLinkProps {
7
+ /** The path to navigate to when clicked */
8
+ path: string;
9
+ /** Callback that receives the path on click (consumer owns routing) */
10
+ onNavigate: (path: string) => void;
11
+ /** Content to render inside the link element */
12
+ children: React.ReactNode;
13
+ /** Additional CSS class names */
14
+ className?: string;
15
+ /** Optional aria-label for accessibility */
16
+ 'aria-label'?: string;
17
+ }
18
+ /**
19
+ * NavigationLink — headless navigation element using Inversion of Control.
20
+ *
21
+ * Renders a `<button>` element that calls `onNavigate(path)` on click.
22
+ * Does NOT use `<a href>` to remain framework-agnostic.
23
+ * Consumer owns routing — this component just signals the desired destination.
24
+ *
25
+ * @example
26
+ * <NavigationLink path="/feedback/123" onNavigate={navigate}>
27
+ * View detail
28
+ * </NavigationLink>
29
+ */
30
+ export declare function NavigationLink({ path, onNavigate, children, className, 'aria-label': ariaLabel, }: NavigationLinkProps): React.JSX.Element;
31
+ //# sourceMappingURL=NavigationLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigationLink.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/NavigationLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,gDAAgD;IAChD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EAAE,SAAS,GACxB,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAuBzC"}
@@ -0,0 +1,43 @@
1
+ import { default as React } from 'react';
2
+ import { StoredFeedbackItem } from '../../../core/types.js';
3
+
4
+ /**
5
+ * Props for the QuickActions component.
6
+ */
7
+ export interface QuickActionsProps {
8
+ /** The feedback item to act on */
9
+ item: StoredFeedbackItem;
10
+ /**
11
+ * Called when a status transition is requested.
12
+ * Consumer owns the data mutation.
13
+ */
14
+ updateItem: (id: string, patch: Partial<StoredFeedbackItem>) => Promise<void>;
15
+ /** Called when a navigation action is triggered */
16
+ onNavigate: (path: string) => void;
17
+ /** Optional current user for displaying user-specific actions */
18
+ currentUser?: {
19
+ userId: string;
20
+ name?: string;
21
+ };
22
+ /** Additional CSS class names applied to the root element */
23
+ className?: string;
24
+ }
25
+ /**
26
+ * QuickActions — headless action button group for common feedback operations.
27
+ *
28
+ * Renders status transition buttons based on allowed transitions for the
29
+ * current status, plus navigation buttons for editing and returning to the list.
30
+ * Buttons are disabled during async update operations. No styling applied —
31
+ * consumer provides CSS via `className` prop.
32
+ *
33
+ * @example
34
+ * <QuickActions
35
+ * item={feedbackItem}
36
+ * updateItem={updateItem}
37
+ * onNavigate={navigate}
38
+ * currentUser={currentUser}
39
+ * className="quick-actions-bar"
40
+ * />
41
+ */
42
+ export declare function QuickActions({ item, updateItem, onNavigate, className, }: QuickActionsProps): React.JSX.Element;
43
+ //# sourceMappingURL=QuickActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuickActions.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/QuickActions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,kBAAkB,EAAkB,MAAM,wBAAwB,CAAC;AAuBjF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,IAAI,EAAE,kBAAkB,CAAC;IACzB;;;OAGG;IACH,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,mDAAmD;IACnD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,iEAAiE;IACjE,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,GACV,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA+EvC"}
@@ -0,0 +1,38 @@
1
+ import { default as React } from 'react';
2
+
3
+ /**
4
+ * Props for the ScreenshotViewer component.
5
+ */
6
+ export interface ScreenshotViewerProps {
7
+ /**
8
+ * S3 key for the screenshot. When provided, `generateScreenshotUrl` is
9
+ * called to obtain a display URL. When absent or null, a fallback message
10
+ * is shown.
11
+ */
12
+ screenshotS3Key?: string | null;
13
+ /**
14
+ * Consumer-provided function that resolves an S3 key to a displayable URL.
15
+ * If not provided and a key exists, a configuration hint is shown.
16
+ */
17
+ generateScreenshotUrl?: (s3Key: string) => Promise<string>;
18
+ /** Alt text for the screenshot image. Defaults to "Feedback screenshot". */
19
+ alt?: string;
20
+ /** Additional CSS class names applied to the root element */
21
+ className?: string;
22
+ }
23
+ /**
24
+ * ScreenshotViewer — headless screenshot display component.
25
+ *
26
+ * Displays a screenshot image with accessibility attributes. Degrades
27
+ * gracefully when no screenshot is available or the URL resolver is not
28
+ * configured. No styling applied — consumer provides CSS via `className` prop.
29
+ *
30
+ * @example
31
+ * <ScreenshotViewer
32
+ * screenshotS3Key={item.screenshotS3Key}
33
+ * generateScreenshotUrl={myUrlResolver}
34
+ * className="screenshot-panel"
35
+ * />
36
+ */
37
+ export declare function ScreenshotViewer({ screenshotS3Key, generateScreenshotUrl, alt, className, }: ScreenshotViewerProps): React.JSX.Element;
38
+ //# sourceMappingURL=ScreenshotViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenshotViewer.d.ts","sourceRoot":"","sources":["../../../../src/react/admin/components/ScreenshotViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,qBAAqB,EACrB,GAA2B,EAC3B,SAAS,GACV,EAAE,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkE3C"}