@hcgstudio/ogma 0.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/LICENSE +21 -0
- package/README.md +39 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +155 -0
- package/dist/cli.js.map +1 -0
- package/dist/defineOgmaReview.d.ts +3 -0
- package/dist/defineOgmaReview.d.ts.map +1 -0
- package/dist/defineOgmaReview.js +4 -0
- package/dist/defineOgmaReview.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/node/project.d.ts +18 -0
- package/dist/node/project.d.ts.map +1 -0
- package/dist/node/project.js +104 -0
- package/dist/node/project.js.map +1 -0
- package/dist/node/server.d.ts +21 -0
- package/dist/node/server.d.ts.map +1 -0
- package/dist/node/server.js +476 -0
- package/dist/node/server.js.map +1 -0
- package/dist/node/templates.d.ts +5 -0
- package/dist/node/templates.d.ts.map +1 -0
- package/dist/node/templates.js +145 -0
- package/dist/node/templates.js.map +1 -0
- package/dist/types.d.ts +100 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/viewer/OgmaReviewApp.d.ts +7 -0
- package/dist/viewer/OgmaReviewApp.d.ts.map +1 -0
- package/dist/viewer/OgmaReviewApp.js +387 -0
- package/dist/viewer/OgmaReviewApp.js.map +1 -0
- package/dist/viewer/client.d.ts +2 -0
- package/dist/viewer/client.d.ts.map +1 -0
- package/dist/viewer/client.js +13 -0
- package/dist/viewer/client.js.map +1 -0
- package/dist/viewer/defaultReview.d.ts +4 -0
- package/dist/viewer/defaultReview.d.ts.map +1 -0
- package/dist/viewer/defaultReview.js +55 -0
- package/dist/viewer/defaultReview.js.map +1 -0
- package/dist/viewer/normalizeReviewModule.d.ts +3 -0
- package/dist/viewer/normalizeReviewModule.d.ts.map +1 -0
- package/dist/viewer/normalizeReviewModule.js +58 -0
- package/dist/viewer/normalizeReviewModule.js.map +1 -0
- package/package.json +47 -0
- package/src/cli.ts +194 -0
- package/src/defineOgmaReview.ts +5 -0
- package/src/index.ts +17 -0
- package/src/node/project.ts +143 -0
- package/src/node/server.ts +598 -0
- package/src/node/templates.ts +148 -0
- package/src/types.ts +111 -0
- package/src/viewer/OgmaReviewApp.tsx +1099 -0
- package/src/viewer/client.tsx +18 -0
- package/src/viewer/defaultReview.tsx +168 -0
- package/src/viewer/normalizeReviewModule.ts +87 -0
- package/src/viewer/styles.css +1140 -0
- package/src/viewer/virtual.d.ts +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/node/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAC5B,iFAAiF,CAAC;AAEpF,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIpC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;CAWpC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { ComponentType } from 'react';
|
|
2
|
+
export type OgmaAnnotationStatus = 'open' | 'queued' | 'addressed';
|
|
3
|
+
export interface OgmaPrototypeScreenProps {
|
|
4
|
+
review: OgmaReviewDefinition;
|
|
5
|
+
screen: OgmaPrototypeScreen;
|
|
6
|
+
}
|
|
7
|
+
export interface OgmaPrototypeScreen {
|
|
8
|
+
id: string;
|
|
9
|
+
title: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
width?: number;
|
|
12
|
+
height?: number;
|
|
13
|
+
component: ComponentType<OgmaPrototypeScreenProps>;
|
|
14
|
+
}
|
|
15
|
+
export interface OgmaReviewMetadata {
|
|
16
|
+
agent?: string;
|
|
17
|
+
iteration?: string;
|
|
18
|
+
source?: string;
|
|
19
|
+
updatedAt?: string;
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
export interface OgmaReviewDefinition {
|
|
23
|
+
title: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
screens: OgmaPrototypeScreen[];
|
|
26
|
+
notes?: string;
|
|
27
|
+
metadata?: OgmaReviewMetadata;
|
|
28
|
+
}
|
|
29
|
+
export interface OgmaAnnotation {
|
|
30
|
+
id: string;
|
|
31
|
+
screenId: string;
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
title: string;
|
|
35
|
+
detail: string;
|
|
36
|
+
status: OgmaAnnotationStatus;
|
|
37
|
+
action: string;
|
|
38
|
+
createdAt: string;
|
|
39
|
+
updatedAt: string;
|
|
40
|
+
}
|
|
41
|
+
export interface OgmaReviewSession {
|
|
42
|
+
reviewId: string;
|
|
43
|
+
annotations: OgmaAnnotation[];
|
|
44
|
+
updatedAt: string;
|
|
45
|
+
}
|
|
46
|
+
export interface OgmaClientConfig {
|
|
47
|
+
cwd: string;
|
|
48
|
+
dataDir: string;
|
|
49
|
+
defaultDesignDir: string;
|
|
50
|
+
reviewUrl: string;
|
|
51
|
+
skillUrl: string;
|
|
52
|
+
serverStartedAt: string;
|
|
53
|
+
}
|
|
54
|
+
export interface OgmaServerStatus {
|
|
55
|
+
packageName: '@hcgstudio/ogma';
|
|
56
|
+
version: string;
|
|
57
|
+
cwd: string;
|
|
58
|
+
dataDir: string;
|
|
59
|
+
designEntry: string;
|
|
60
|
+
historyPath: string;
|
|
61
|
+
notesPath: string;
|
|
62
|
+
reviewUrl: string;
|
|
63
|
+
skillUrl: string;
|
|
64
|
+
snapshotsDir: string;
|
|
65
|
+
serverStartedAt: string;
|
|
66
|
+
}
|
|
67
|
+
export interface OgmaFeedbackExport {
|
|
68
|
+
reviewId: string;
|
|
69
|
+
generatedAt: string;
|
|
70
|
+
reviewUrl: string;
|
|
71
|
+
annotations: Array<{
|
|
72
|
+
id: string;
|
|
73
|
+
screenId: string;
|
|
74
|
+
title: string;
|
|
75
|
+
detail: string;
|
|
76
|
+
status: OgmaAnnotationStatus;
|
|
77
|
+
action: string;
|
|
78
|
+
location: {
|
|
79
|
+
x: number;
|
|
80
|
+
y: number;
|
|
81
|
+
};
|
|
82
|
+
}>;
|
|
83
|
+
}
|
|
84
|
+
export interface OgmaSessionHistoryEntry {
|
|
85
|
+
id: string;
|
|
86
|
+
annotationCount: number;
|
|
87
|
+
counts: Record<OgmaAnnotationStatus, number>;
|
|
88
|
+
reviewId: string;
|
|
89
|
+
updatedAt: string;
|
|
90
|
+
}
|
|
91
|
+
export interface OgmaViewportSnapshot {
|
|
92
|
+
id: string;
|
|
93
|
+
annotations: OgmaAnnotation[];
|
|
94
|
+
createdAt: string;
|
|
95
|
+
reviewId: string;
|
|
96
|
+
reviewUrl: string;
|
|
97
|
+
screenId: string;
|
|
98
|
+
viewportMode: string;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { OgmaClientConfig, OgmaReviewDefinition } from '../types.js';
|
|
2
|
+
export interface OgmaReviewAppProps {
|
|
3
|
+
config: OgmaClientConfig;
|
|
4
|
+
review: OgmaReviewDefinition;
|
|
5
|
+
}
|
|
6
|
+
export declare function OgmaReviewApp({ config, review }: OgmaReviewAppProps): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=OgmaReviewApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OgmaReviewApp.d.ts","sourceRoot":"","sources":["../../src/viewer/OgmaReviewApp.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAGV,gBAAgB,EAEhB,oBAAoB,EAIrB,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAyKD,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,kBAAkB,+BA2TnE"}
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Bot, Camera, CheckCircle2, CircleDot, Clipboard, Code2, Copy, Download, Eye, FileText, Laptop, MessageCirclePlus, MessageSquareText, MousePointer2, RefreshCcw, Send, Server, Settings2, Smartphone, Tablet, TerminalSquare, Upload } from 'lucide-react';
|
|
3
|
+
import { Component, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
const API_ROOT = '/api/ogma';
|
|
5
|
+
const viewItems = [
|
|
6
|
+
{ id: 'setup', label: 'Setup', icon: Settings2 },
|
|
7
|
+
{ id: 'review', label: 'Review', icon: Eye },
|
|
8
|
+
{ id: 'handoff', label: 'Agents', icon: Bot },
|
|
9
|
+
{ id: 'feedback', label: 'Feedback', icon: MessageSquareText }
|
|
10
|
+
];
|
|
11
|
+
const viewportItems = [
|
|
12
|
+
{ id: 'desktop', label: 'Desktop', icon: Laptop },
|
|
13
|
+
{ id: 'tablet', label: 'Tablet', icon: Tablet },
|
|
14
|
+
{ id: 'mobile', label: 'Mobile', icon: Smartphone }
|
|
15
|
+
];
|
|
16
|
+
function classNames(...names) {
|
|
17
|
+
return names.filter(Boolean).join(' ');
|
|
18
|
+
}
|
|
19
|
+
function reviewIdFor(review) {
|
|
20
|
+
return review.title
|
|
21
|
+
.trim()
|
|
22
|
+
.toLowerCase()
|
|
23
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
24
|
+
.replace(/^-+|-+$/g, '') || 'ogma-review';
|
|
25
|
+
}
|
|
26
|
+
function nowIso() {
|
|
27
|
+
return new Date().toISOString();
|
|
28
|
+
}
|
|
29
|
+
function nextFeedbackId(annotations) {
|
|
30
|
+
const next = annotations.reduce((highest, annotation) => {
|
|
31
|
+
const match = /^OG-(\d+)$/.exec(annotation.id);
|
|
32
|
+
return match ? Math.max(highest, Number(match[1])) : highest;
|
|
33
|
+
}, 0) + 1;
|
|
34
|
+
return `OG-${next.toString().padStart(3, '0')}`;
|
|
35
|
+
}
|
|
36
|
+
function createFallbackSession(reviewId) {
|
|
37
|
+
return {
|
|
38
|
+
reviewId,
|
|
39
|
+
annotations: [],
|
|
40
|
+
updatedAt: nowIso()
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async function readJson(path) {
|
|
44
|
+
const response = await fetch(`${API_ROOT}${path}`);
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
throw new Error(`${response.status} ${response.statusText}`);
|
|
47
|
+
}
|
|
48
|
+
return response.json();
|
|
49
|
+
}
|
|
50
|
+
async function writeJson(path, body) {
|
|
51
|
+
const response = await fetch(`${API_ROOT}${path}`, {
|
|
52
|
+
body: JSON.stringify(body),
|
|
53
|
+
headers: {
|
|
54
|
+
'content-type': 'application/json'
|
|
55
|
+
},
|
|
56
|
+
method: 'PUT'
|
|
57
|
+
});
|
|
58
|
+
if (!response.ok) {
|
|
59
|
+
throw new Error(`${response.status} ${response.statusText}`);
|
|
60
|
+
}
|
|
61
|
+
return response.json();
|
|
62
|
+
}
|
|
63
|
+
async function postJson(path, body) {
|
|
64
|
+
const response = await fetch(`${API_ROOT}${path}`, {
|
|
65
|
+
body: JSON.stringify(body),
|
|
66
|
+
headers: {
|
|
67
|
+
'content-type': 'application/json'
|
|
68
|
+
},
|
|
69
|
+
method: 'POST'
|
|
70
|
+
});
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
throw new Error(`${response.status} ${response.statusText}`);
|
|
73
|
+
}
|
|
74
|
+
return response.json();
|
|
75
|
+
}
|
|
76
|
+
function buildFeedbackExport(reviewId, reviewUrl, annotations) {
|
|
77
|
+
return {
|
|
78
|
+
reviewId,
|
|
79
|
+
generatedAt: nowIso(),
|
|
80
|
+
reviewUrl,
|
|
81
|
+
annotations: annotations.map((annotation) => ({
|
|
82
|
+
id: annotation.id,
|
|
83
|
+
screenId: annotation.screenId,
|
|
84
|
+
title: annotation.title,
|
|
85
|
+
detail: annotation.detail,
|
|
86
|
+
status: annotation.status,
|
|
87
|
+
action: annotation.action,
|
|
88
|
+
location: {
|
|
89
|
+
x: annotation.x,
|
|
90
|
+
y: annotation.y
|
|
91
|
+
}
|
|
92
|
+
}))
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function buildAgentPrompt(exportData) {
|
|
96
|
+
const activeItems = exportData.annotations.filter((item) => item.status !== 'addressed');
|
|
97
|
+
const ids = activeItems.map((item) => item.id).join(', ') || 'no open feedback';
|
|
98
|
+
return [
|
|
99
|
+
'Use the Ogma feedback queue to update the JSX prototype and product notes.',
|
|
100
|
+
`Review URL: ${exportData.reviewUrl}`,
|
|
101
|
+
`Feedback IDs: ${ids}`,
|
|
102
|
+
'Preserve each feedback ID in your change summary and mark which JSX screen changed.',
|
|
103
|
+
'',
|
|
104
|
+
JSON.stringify({ ...exportData, annotations: activeItems }, null, 2)
|
|
105
|
+
].join('\n');
|
|
106
|
+
}
|
|
107
|
+
class PrototypeErrorBoundary extends Component {
|
|
108
|
+
state = {
|
|
109
|
+
error: null
|
|
110
|
+
};
|
|
111
|
+
static getDerivedStateFromError(error) {
|
|
112
|
+
return { error };
|
|
113
|
+
}
|
|
114
|
+
componentDidUpdate(previousProps) {
|
|
115
|
+
if (previousProps.boundaryKey !== this.props.boundaryKey && this.state.error) {
|
|
116
|
+
this.setState({ error: null });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
render() {
|
|
120
|
+
if (this.state.error) {
|
|
121
|
+
return (_jsxs("div", { className: "ogma-render-error", children: [_jsx("h2", { children: "Prototype render error" }), _jsx("pre", { children: this.state.error.message })] }));
|
|
122
|
+
}
|
|
123
|
+
return this.props.children;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export function OgmaReviewApp({ config, review }) {
|
|
127
|
+
const reviewId = useMemo(() => reviewIdFor(review), [review]);
|
|
128
|
+
const [activeView, setActiveView] = useState('review');
|
|
129
|
+
const [activeScreenId, setActiveScreenId] = useState(review.screens[0]?.id ?? '');
|
|
130
|
+
const [viewportMode, setViewportMode] = useState('desktop');
|
|
131
|
+
const [annotationMode, setAnnotationMode] = useState(false);
|
|
132
|
+
const [annotations, setAnnotations] = useState([]);
|
|
133
|
+
const [selectedId, setSelectedId] = useState(null);
|
|
134
|
+
const [sessionLoaded, setSessionLoaded] = useState(false);
|
|
135
|
+
const [serverStatus, setServerStatus] = useState(null);
|
|
136
|
+
const [notice, setNotice] = useState('Ready');
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
const firstScreenId = review.screens[0]?.id ?? '';
|
|
139
|
+
if (!review.screens.some((screen) => screen.id === activeScreenId)) {
|
|
140
|
+
setActiveScreenId(firstScreenId);
|
|
141
|
+
}
|
|
142
|
+
}, [activeScreenId, review.screens]);
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
let mounted = true;
|
|
145
|
+
readJson('/session')
|
|
146
|
+
.then((session) => {
|
|
147
|
+
if (!mounted) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
setAnnotations(session.annotations);
|
|
151
|
+
setSelectedId(session.annotations[0]?.id ?? null);
|
|
152
|
+
setSessionLoaded(true);
|
|
153
|
+
})
|
|
154
|
+
.catch(() => {
|
|
155
|
+
if (!mounted) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const fallback = createFallbackSession(reviewId);
|
|
159
|
+
setAnnotations(fallback.annotations);
|
|
160
|
+
setSessionLoaded(true);
|
|
161
|
+
});
|
|
162
|
+
readJson('/status')
|
|
163
|
+
.then((status) => {
|
|
164
|
+
if (mounted) {
|
|
165
|
+
setServerStatus(status);
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
.catch(() => {
|
|
169
|
+
if (mounted) {
|
|
170
|
+
setServerStatus(null);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
return () => {
|
|
174
|
+
mounted = false;
|
|
175
|
+
};
|
|
176
|
+
}, [reviewId]);
|
|
177
|
+
const saveSession = useCallback(async (nextAnnotations) => {
|
|
178
|
+
const session = {
|
|
179
|
+
reviewId,
|
|
180
|
+
annotations: nextAnnotations,
|
|
181
|
+
updatedAt: nowIso()
|
|
182
|
+
};
|
|
183
|
+
await writeJson('/session', session);
|
|
184
|
+
}, [reviewId]);
|
|
185
|
+
useEffect(() => {
|
|
186
|
+
if (!sessionLoaded) {
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
const handle = window.setTimeout(() => {
|
|
190
|
+
saveSession(annotations).catch(() => setNotice('Session is local-only until the server API is reachable'));
|
|
191
|
+
}, 250);
|
|
192
|
+
return () => window.clearTimeout(handle);
|
|
193
|
+
}, [annotations, saveSession, sessionLoaded]);
|
|
194
|
+
const activeScreen = review.screens.find((screen) => screen.id === activeScreenId) ?? review.screens[0];
|
|
195
|
+
const activeAnnotations = annotations.filter((annotation) => annotation.screenId === activeScreen?.id);
|
|
196
|
+
const selectedAnnotation = annotations.find((annotation) => annotation.id === selectedId) ?? null;
|
|
197
|
+
const counts = useMemo(() => ({
|
|
198
|
+
addressed: annotations.filter((annotation) => annotation.status === 'addressed').length,
|
|
199
|
+
open: annotations.filter((annotation) => annotation.status === 'open').length,
|
|
200
|
+
queued: annotations.filter((annotation) => annotation.status === 'queued').length
|
|
201
|
+
}), [annotations]);
|
|
202
|
+
function mutateAnnotation(id, patch) {
|
|
203
|
+
setAnnotations((current) => current.map((annotation) => annotation.id === id ? { ...annotation, ...patch, updatedAt: nowIso() } : annotation));
|
|
204
|
+
}
|
|
205
|
+
function addAnnotation(event) {
|
|
206
|
+
if (!annotationMode || !activeScreen) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const target = event.target;
|
|
210
|
+
if (target.closest('[data-ogma-pin]')) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const bounds = event.currentTarget.getBoundingClientRect();
|
|
214
|
+
const x = Number((((event.clientX - bounds.left) / bounds.width) * 100).toFixed(1));
|
|
215
|
+
const y = Number((((event.clientY - bounds.top) / bounds.height) * 100).toFixed(1));
|
|
216
|
+
const id = nextFeedbackId(annotations);
|
|
217
|
+
const timestamp = nowIso();
|
|
218
|
+
const annotation = {
|
|
219
|
+
id,
|
|
220
|
+
screenId: activeScreen.id,
|
|
221
|
+
x: Math.min(98, Math.max(2, x)),
|
|
222
|
+
y: Math.min(98, Math.max(2, y)),
|
|
223
|
+
title: 'New review note',
|
|
224
|
+
detail: 'Captured directly on the prototype.',
|
|
225
|
+
status: 'open',
|
|
226
|
+
action: `Update ${activeScreen.title} JSX and product notes for this feedback.`,
|
|
227
|
+
createdAt: timestamp,
|
|
228
|
+
updatedAt: timestamp
|
|
229
|
+
};
|
|
230
|
+
setAnnotations((current) => [...current, annotation]);
|
|
231
|
+
setSelectedId(id);
|
|
232
|
+
setNotice(`${id} added`);
|
|
233
|
+
}
|
|
234
|
+
async function copyText(value, label) {
|
|
235
|
+
await navigator.clipboard.writeText(value);
|
|
236
|
+
setNotice(`${label} copied`);
|
|
237
|
+
}
|
|
238
|
+
function selectAnnotation(annotation, view = 'review') {
|
|
239
|
+
setSelectedId(annotation.id);
|
|
240
|
+
setActiveScreenId(annotation.screenId);
|
|
241
|
+
setActiveView(view);
|
|
242
|
+
}
|
|
243
|
+
function markSelectedAddressed() {
|
|
244
|
+
if (selectedAnnotation) {
|
|
245
|
+
mutateAnnotation(selectedAnnotation.id, { status: 'addressed' });
|
|
246
|
+
setNotice(`${selectedAnnotation.id} marked addressed`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function sendEditsToAgent() {
|
|
250
|
+
const queued = annotations.map((annotation) => annotation.status === 'open'
|
|
251
|
+
? { ...annotation, status: 'queued', updatedAt: nowIso() }
|
|
252
|
+
: annotation);
|
|
253
|
+
const exportData = buildFeedbackExport(reviewId, config.reviewUrl, queued);
|
|
254
|
+
setAnnotations(queued);
|
|
255
|
+
void copyText(buildAgentPrompt(exportData), 'Agent edit prompt');
|
|
256
|
+
}
|
|
257
|
+
function exportFeedback() {
|
|
258
|
+
const exportData = buildFeedbackExport(reviewId, config.reviewUrl, annotations);
|
|
259
|
+
void copyText(JSON.stringify(exportData, null, 2), 'Feedback JSON');
|
|
260
|
+
}
|
|
261
|
+
function importFeedback(text) {
|
|
262
|
+
const parsed = JSON.parse(text);
|
|
263
|
+
const timestamp = nowIso();
|
|
264
|
+
const imported = parsed.annotations.map((annotation) => ({
|
|
265
|
+
id: annotation.id,
|
|
266
|
+
screenId: annotation.screenId,
|
|
267
|
+
x: annotation.location.x,
|
|
268
|
+
y: annotation.location.y,
|
|
269
|
+
title: annotation.title,
|
|
270
|
+
detail: annotation.detail,
|
|
271
|
+
status: annotation.status,
|
|
272
|
+
action: annotation.action,
|
|
273
|
+
createdAt: timestamp,
|
|
274
|
+
updatedAt: timestamp
|
|
275
|
+
}));
|
|
276
|
+
setAnnotations(imported);
|
|
277
|
+
setSelectedId(imported[0]?.id ?? null);
|
|
278
|
+
setNotice(`${imported.length} feedback items imported`);
|
|
279
|
+
}
|
|
280
|
+
function saveSnapshot() {
|
|
281
|
+
if (!activeScreen) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const snapshot = {
|
|
285
|
+
id: `${Date.now()}`,
|
|
286
|
+
annotations: activeAnnotations,
|
|
287
|
+
createdAt: nowIso(),
|
|
288
|
+
reviewId,
|
|
289
|
+
reviewUrl: config.reviewUrl,
|
|
290
|
+
screenId: activeScreen.id,
|
|
291
|
+
viewportMode
|
|
292
|
+
};
|
|
293
|
+
postJson('/snapshots', snapshot)
|
|
294
|
+
.then(() => setNotice('Viewport snapshot saved'))
|
|
295
|
+
.catch(() => setNotice('Snapshot could not be saved'));
|
|
296
|
+
}
|
|
297
|
+
return (_jsxs("div", { className: "ogma-shell", children: [_jsxs("aside", { className: "ogma-nav", "aria-label": "Ogma workspace", children: [_jsx("div", { className: "ogma-mark", "aria-label": "Ogma", children: _jsx("span", { children: "O" }) }), _jsx("div", { className: "ogma-nav-list", children: viewItems.map((item) => {
|
|
298
|
+
const Icon = item.icon;
|
|
299
|
+
return (_jsxs("button", { className: classNames('ogma-nav-item', activeView === item.id && 'is-active'), onClick: () => setActiveView(item.id), title: item.label, type: "button", children: [_jsx(Icon, { "aria-hidden": "true", size: 20 }), _jsx("span", { children: item.label })] }, item.id));
|
|
300
|
+
}) })] }), _jsxs("main", { className: "ogma-main", children: [_jsxs("header", { className: "ogma-topbar", children: [_jsxs("div", { children: [_jsx("p", { className: "ogma-eyebrow", children: "@hcgstudio/ogma" }), _jsx("h1", { children: review.title })] }), _jsxs("div", { className: "ogma-topbar-actions", children: [_jsxs("div", { className: classNames('ogma-status-pill', serverStatus ? 'is-online' : 'is-offline'), children: [_jsx(CircleDot, { "aria-hidden": "true", size: 15 }), _jsx("span", { children: serverStatus ? 'server active' : 'local preview' })] }), _jsx("button", { className: "ogma-icon-button", onClick: () => void copyText(config.reviewUrl, 'Review URL'), title: "Copy review URL", type: "button", children: _jsx(Copy, { "aria-hidden": "true", size: 18 }) }), _jsxs("button", { className: "ogma-filled-button", onClick: () => window.location.reload(), type: "button", children: [_jsx(RefreshCcw, { "aria-hidden": "true", size: 18 }), _jsx("span", { children: "Refresh" })] })] })] }), activeView === 'setup' && (_jsx(SetupView, { config: config, notice: notice, onCopy: copyText, serverStatus: serverStatus })), activeView === 'review' && activeScreen && (_jsx(ReviewView, { activeAnnotations: activeAnnotations, activeScreen: activeScreen, annotationMode: annotationMode, counts: counts, onAddAnnotation: addAnnotation, onMarkAddressed: markSelectedAddressed, onMutateAnnotation: mutateAnnotation, onSaveSnapshot: saveSnapshot, onScreenChange: setActiveScreenId, onSelectAnnotation: selectAnnotation, onToggleAnnotationMode: () => setAnnotationMode((value) => !value), onViewportChange: setViewportMode, review: review, selectedAnnotation: selectedAnnotation, viewportMode: viewportMode })), activeView === 'handoff' && (_jsx(HandoffView, { config: config, onCopy: copyText, reviewUrl: config.reviewUrl })), activeView === 'feedback' && (_jsx(FeedbackView, { annotations: annotations, counts: counts, onExportFeedback: exportFeedback, onImportFeedback: importFeedback, onSelectAnnotation: (annotation) => selectAnnotation(annotation, 'review'), onSendEdits: sendEditsToAgent, selectedId: selectedAnnotation?.id ?? null }))] })] }));
|
|
301
|
+
}
|
|
302
|
+
function SetupView({ config, notice, onCopy, serverStatus }) {
|
|
303
|
+
const commands = [
|
|
304
|
+
'npm install -D @hcgstudio/ogma',
|
|
305
|
+
'npx ogma start',
|
|
306
|
+
`npx ogma start --review ${config.defaultDesignDir}`
|
|
307
|
+
];
|
|
308
|
+
return (_jsxs("div", { className: "ogma-workspace-grid ogma-setup-grid", children: [_jsxs("section", { className: "ogma-panel", children: [_jsxs("div", { className: "ogma-section-heading", children: [_jsxs("div", { children: [_jsx("p", { className: "ogma-eyebrow", children: "Local setup" }), _jsx("h2", { children: "Install, start, hand off" })] }), _jsxs("button", { className: "ogma-tonal-button", onClick: () => void onCopy(config.skillUrl, 'Skill URL'), type: "button", children: [_jsx(Clipboard, { "aria-hidden": "true", size: 18 }), _jsx("span", { children: "Skill URL" })] })] }), _jsx("div", { className: "ogma-command-stack", children: commands.map((command) => (_jsx(CommandLine, { command: command, onCopy: onCopy }, command))) })] }), _jsxs("aside", { className: "ogma-side-panel", children: [_jsxs("div", { className: "ogma-panel-title", children: [_jsx(Server, { "aria-hidden": "true", size: 20 }), _jsx("h3", { children: "Runtime" })] }), _jsxs("dl", { className: "ogma-runtime-list", children: [_jsxs("div", { children: [_jsx("dt", { children: "Review URL" }), _jsx("dd", { children: config.reviewUrl })] }), _jsxs("div", { children: [_jsx("dt", { children: "Design directory" }), _jsx("dd", { children: config.defaultDesignDir })] }), _jsxs("div", { children: [_jsx("dt", { children: "Session store" }), _jsx("dd", { children: config.dataDir })] }), _jsxs("div", { children: [_jsx("dt", { children: "Status" }), _jsx("dd", { children: serverStatus ? 'Dependencies ready' : notice })] })] })] })] }));
|
|
309
|
+
}
|
|
310
|
+
function CommandLine({ command, onCopy }) {
|
|
311
|
+
return (_jsxs("div", { className: "ogma-command-line", children: [_jsx(TerminalSquare, { "aria-hidden": "true", size: 18 }), _jsx("code", { children: command }), _jsx("button", { className: "ogma-icon-button is-compact", onClick: () => void onCopy(command, 'Command'), title: "Copy command", type: "button", children: _jsx(Copy, { "aria-hidden": "true", size: 16 }) })] }));
|
|
312
|
+
}
|
|
313
|
+
function ReviewView({ activeAnnotations, activeScreen, annotationMode, counts, onAddAnnotation, onMarkAddressed, onMutateAnnotation, onSaveSnapshot, onScreenChange, onSelectAnnotation, onToggleAnnotationMode, onViewportChange, review, selectedAnnotation, viewportMode }) {
|
|
314
|
+
const ScreenComponent = activeScreen.component;
|
|
315
|
+
const frameRef = useRef(null);
|
|
316
|
+
const [a11yIssueCount, setA11yIssueCount] = useState(0);
|
|
317
|
+
const screenStyle = {
|
|
318
|
+
'--ogma-screen-width': `${activeScreen.width ?? 1040}px`
|
|
319
|
+
};
|
|
320
|
+
useEffect(() => {
|
|
321
|
+
const frame = frameRef.current;
|
|
322
|
+
if (!frame) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
const unlabeledControls = Array.from(frame.querySelectorAll('button, a')).filter((control) => {
|
|
326
|
+
const element = control;
|
|
327
|
+
const hasName = element.textContent?.trim() ||
|
|
328
|
+
element.getAttribute('aria-label') ||
|
|
329
|
+
element.getAttribute('title');
|
|
330
|
+
return !hasName;
|
|
331
|
+
});
|
|
332
|
+
const imagesWithoutAlt = Array.from(frame.querySelectorAll('img')).filter((image) => !image.alt);
|
|
333
|
+
setA11yIssueCount(unlabeledControls.length + imagesWithoutAlt.length);
|
|
334
|
+
}, [activeAnnotations.length, activeScreen.id]);
|
|
335
|
+
return (_jsxs("div", { className: "ogma-workspace-grid ogma-review-grid", children: [_jsxs("section", { className: "ogma-canvas-panel", children: [_jsxs("div", { className: "ogma-review-toolbar", children: [_jsx("div", { className: "ogma-segmented-control", "aria-label": "Prototype screen", children: review.screens.map((screen) => (_jsx("button", { className: classNames(activeScreen.id === screen.id && 'is-active'), onClick: () => onScreenChange(screen.id), type: "button", children: screen.title }, screen.id))) }), _jsxs("div", { className: "ogma-tool-strip", children: [viewportItems.map((item) => {
|
|
336
|
+
const Icon = item.icon;
|
|
337
|
+
return (_jsx("button", { "aria-pressed": viewportMode === item.id, className: classNames('ogma-icon-button', viewportMode === item.id && 'is-active'), onClick: () => onViewportChange(item.id), title: item.label, type: "button", children: _jsx(Icon, { "aria-hidden": "true", size: 18 }) }, item.id));
|
|
338
|
+
}), _jsx("button", { "aria-pressed": !annotationMode, className: classNames('ogma-icon-button', !annotationMode && 'is-active'), onClick: onToggleAnnotationMode, title: "Pointer", type: "button", children: _jsx(MousePointer2, { "aria-hidden": "true", size: 18 }) }), _jsx("button", { "aria-pressed": annotationMode, className: classNames('ogma-icon-button', annotationMode && 'is-active'), onClick: onToggleAnnotationMode, title: "Add annotation", type: "button", children: _jsx(MessageCirclePlus, { "aria-hidden": "true", size: 18 }) }), _jsx("button", { className: "ogma-icon-button", onClick: onSaveSnapshot, title: "Save viewport snapshot", type: "button", children: _jsx(Camera, { "aria-hidden": "true", size: 18 }) }), _jsxs("div", { className: classNames('ogma-a11y-pill', a11yIssueCount === 0 && 'is-clear'), children: [_jsx("span", { children: "A11y" }), _jsx("strong", { children: a11yIssueCount })] })] })] }), _jsx("div", { className: classNames('ogma-prototype-stage', `is-${viewportMode}`, annotationMode && 'is-annotating'), onClick: onAddAnnotation, role: "presentation", style: screenStyle, children: _jsxs("div", { className: "ogma-prototype-frame", ref: frameRef, children: [_jsx(PrototypeErrorBoundary, { boundaryKey: activeScreen.id, children: _jsx(ScreenComponent, { review: review, screen: activeScreen }) }), activeAnnotations.map((annotation) => (_jsx("button", { className: classNames('ogma-annotation-pin', `is-${annotation.status}`, selectedAnnotation?.id === annotation.id && 'is-selected'), "data-ogma-pin": "", onClick: (event) => {
|
|
339
|
+
event.stopPropagation();
|
|
340
|
+
onSelectAnnotation(annotation);
|
|
341
|
+
}, style: { left: `${annotation.x}%`, top: `${annotation.y}%` }, title: annotation.title, type: "button", children: annotation.id.replace('OG-', '') }, annotation.id)))] }) })] }), _jsxs("aside", { className: "ogma-side-panel", children: [_jsxs("div", { className: "ogma-panel-title", children: [_jsx(MessageSquareText, { "aria-hidden": "true", size: 20 }), _jsx("h3", { children: "Annotation queue" })] }), _jsxs("div", { className: "ogma-metric-row", children: [_jsx(Metric, { label: "Open", value: counts.open, tone: "open" }), _jsx(Metric, { label: "Queued", value: counts.queued, tone: "queued" }), _jsx(Metric, { label: "Addressed", value: counts.addressed, tone: "addressed" })] }), selectedAnnotation ? (_jsx(AnnotationEditor, { annotation: selectedAnnotation, onMarkAddressed: onMarkAddressed, onMutateAnnotation: onMutateAnnotation })) : (_jsxs("div", { className: "ogma-empty-state", children: [_jsx(MessageCirclePlus, { "aria-hidden": "true", size: 22 }), _jsx("p", { children: "No annotation selected." })] }))] })] }));
|
|
342
|
+
}
|
|
343
|
+
function Metric({ label, tone, value }) {
|
|
344
|
+
return (_jsxs("div", { className: classNames('ogma-metric', `is-${tone}`), children: [_jsx("strong", { children: value.toString().padStart(2, '0') }), _jsx("span", { children: label })] }));
|
|
345
|
+
}
|
|
346
|
+
function AnnotationEditor({ annotation, onMarkAddressed, onMutateAnnotation }) {
|
|
347
|
+
return (_jsxs("article", { className: "ogma-annotation-editor", children: [_jsxs("div", { className: "ogma-editor-topline", children: [_jsx("span", { className: classNames('ogma-status-dot', `is-${annotation.status}`) }), _jsx("strong", { children: annotation.id }), _jsx("span", { children: annotation.screenId })] }), _jsxs("label", { children: [_jsx("span", { children: "Title" }), _jsx("input", { onChange: (event) => onMutateAnnotation(annotation.id, { title: event.target.value }), value: annotation.title })] }), _jsxs("label", { children: [_jsx("span", { children: "Detail" }), _jsx("textarea", { onChange: (event) => onMutateAnnotation(annotation.id, { detail: event.target.value }), rows: 4, value: annotation.detail })] }), _jsxs("label", { children: [_jsx("span", { children: "Expected agent action" }), _jsx("textarea", { onChange: (event) => onMutateAnnotation(annotation.id, { action: event.target.value }), rows: 3, value: annotation.action })] }), _jsxs("label", { children: [_jsx("span", { children: "Status" }), _jsxs("select", { onChange: (event) => onMutateAnnotation(annotation.id, {
|
|
348
|
+
status: event.target.value
|
|
349
|
+
}), value: annotation.status, children: [_jsx("option", { value: "open", children: "Open" }), _jsx("option", { value: "queued", children: "Queued" }), _jsx("option", { value: "addressed", children: "Addressed" })] })] }), _jsxs("div", { className: "ogma-editor-actions", children: [_jsxs("button", { className: "ogma-tonal-button", onClick: onMarkAddressed, type: "button", children: [_jsx(CheckCircle2, { "aria-hidden": "true", size: 18 }), _jsx("span", { children: "Addressed" })] }), _jsx("button", { className: "ogma-icon-button", onClick: () => void navigator.clipboard.writeText(annotation.id), title: "Copy feedback ID", type: "button", children: _jsx(Copy, { "aria-hidden": "true", size: 17 }) })] })] }));
|
|
350
|
+
}
|
|
351
|
+
function HandoffView({ config, onCopy, reviewUrl }) {
|
|
352
|
+
const prompts = [
|
|
353
|
+
{
|
|
354
|
+
agent: 'Codex',
|
|
355
|
+
body: `Install/read the Ogma skill from ${config.skillUrl}. Create JSX screens in ${config.defaultDesignDir}, update product notes, install @hcgstudio/ogma if needed, start the review server, and give me the review URL.`
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
agent: 'Claude Code',
|
|
359
|
+
body: `Use the Ogma skill at ${config.skillUrl}. Generate the prototype as JSX screens plus product notes, run @hcgstudio/ogma locally, and preserve Ogma feedback IDs when applying reviewer edits.`
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
agent: 'Tool-agnostic',
|
|
363
|
+
body: `Follow the Ogma contract: JSX screens, product notes, review metadata, local server, stable feedback IDs, and a final review URL. Current review URL: ${reviewUrl}`
|
|
364
|
+
}
|
|
365
|
+
];
|
|
366
|
+
return (_jsxs("div", { className: "ogma-workspace-grid ogma-handoff-grid", children: [_jsxs("section", { className: "ogma-panel", children: [_jsxs("div", { className: "ogma-section-heading", children: [_jsxs("div", { children: [_jsx("p", { className: "ogma-eyebrow", children: "Agent handoff" }), _jsx("h2", { children: "Codex and Claude Code prompts" })] }), _jsxs("button", { className: "ogma-filled-button", onClick: () => void onCopy(config.skillUrl, 'Skill URL'), type: "button", children: [_jsx(Copy, { "aria-hidden": "true", size: 18 }), _jsx("span", { children: "Copy URL" })] })] }), _jsx("div", { className: "ogma-agent-grid", children: prompts.map((prompt) => (_jsxs("article", { className: "ogma-agent-card", children: [_jsxs("div", { className: "ogma-agent-card-top", children: [_jsx(Bot, { "aria-hidden": "true", size: 20 }), _jsx("h3", { children: prompt.agent })] }), _jsx("p", { children: prompt.body }), _jsxs("button", { className: "ogma-tonal-button", onClick: () => void onCopy(prompt.body, `${prompt.agent} prompt`), type: "button", children: [_jsx(Clipboard, { "aria-hidden": "true", size: 18 }), _jsx("span", { children: "Copy prompt" })] })] }, prompt.agent))) })] }), _jsxs("aside", { className: "ogma-side-panel", children: [_jsxs("div", { className: "ogma-panel-title", children: [_jsx(Code2, { "aria-hidden": "true", size: 20 }), _jsx("h3", { children: "Contract" })] }), _jsx("div", { className: "ogma-contract-list", children: [
|
|
367
|
+
'JSX prototype screens',
|
|
368
|
+
'Product design notes',
|
|
369
|
+
'Review metadata',
|
|
370
|
+
'Feedback IDs in edits'
|
|
371
|
+
].map((item, index) => (_jsxs("div", { className: "ogma-contract-item", children: [_jsx("span", { children: index + 1 }), _jsx("p", { children: item })] }, item))) })] })] }));
|
|
372
|
+
}
|
|
373
|
+
function FeedbackView({ annotations, counts, onExportFeedback, onImportFeedback, onSelectAnnotation, onSendEdits, selectedId }) {
|
|
374
|
+
const importInputRef = useRef(null);
|
|
375
|
+
return (_jsxs("div", { className: "ogma-workspace-grid ogma-feedback-grid", children: [_jsxs("section", { className: "ogma-panel", children: [_jsxs("div", { className: "ogma-section-heading", children: [_jsxs("div", { children: [_jsx("p", { className: "ogma-eyebrow", children: "Feedback queue" }), _jsx("h2", { children: "Agent-ready review notes" })] }), _jsxs("div", { className: "ogma-inline-actions", children: [_jsx("input", { accept: "application/json,.json", hidden: true, onChange: (event) => {
|
|
376
|
+
const file = event.currentTarget.files?.[0];
|
|
377
|
+
event.currentTarget.value = '';
|
|
378
|
+
if (!file) {
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
file
|
|
382
|
+
.text()
|
|
383
|
+
.then(onImportFeedback)
|
|
384
|
+
.catch(() => undefined);
|
|
385
|
+
}, ref: importInputRef, type: "file" }), _jsxs("button", { className: "ogma-tonal-button", onClick: () => importInputRef.current?.click(), type: "button", children: [_jsx(Upload, { "aria-hidden": "true", size: 18 }), _jsx("span", { children: "Import JSON" })] }), _jsxs("button", { className: "ogma-tonal-button", onClick: onExportFeedback, type: "button", children: [_jsx(Download, { "aria-hidden": "true", size: 18 }), _jsx("span", { children: "Export JSON" })] }), _jsxs("button", { className: "ogma-filled-button", onClick: onSendEdits, type: "button", children: [_jsx(Send, { "aria-hidden": "true", size: 18 }), _jsx("span", { children: "Send edits" })] })] })] }), _jsxs("div", { className: "ogma-feedback-table", role: "table", children: [_jsxs("div", { className: "ogma-feedback-row is-heading", role: "row", children: [_jsx("span", { children: "ID" }), _jsx("span", { children: "Location" }), _jsx("span", { children: "Status" }), _jsx("span", { children: "Expected action" })] }), annotations.map((annotation) => (_jsxs("button", { className: classNames('ogma-feedback-row', selectedId === annotation.id && 'is-selected'), onClick: () => onSelectAnnotation(annotation), role: "row", type: "button", children: [_jsx("span", { children: annotation.id }), _jsx("span", { children: annotation.title }), _jsx("span", { className: classNames('ogma-status-chip', `is-${annotation.status}`), children: annotation.status }), _jsx("span", { children: annotation.action })] }, annotation.id)))] })] }), _jsxs("aside", { className: "ogma-side-panel", children: [_jsxs("div", { className: "ogma-panel-title", children: [_jsx(FileText, { "aria-hidden": "true", size: 20 }), _jsx("h3", { children: "Summary" })] }), _jsxs("div", { className: "ogma-summary-list", children: [_jsx(Metric, { label: "Open notes", value: counts.open, tone: "open" }), _jsx(Metric, { label: "AI edits", value: counts.queued, tone: "queued" }), _jsx(Metric, { label: "Accepted", value: counts.addressed, tone: "addressed" })] })] })] }));
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=OgmaReviewApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OgmaReviewApp.js","sourceRoot":"","sources":["../../src/viewer/OgmaReviewApp.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/viewer/client.tsx"],"names":[],"mappings":"AAKA,OAAO,cAAc,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { StrictMode } from 'react';
|
|
3
|
+
import { createRoot } from 'react-dom/client';
|
|
4
|
+
import { runtimeConfig } from 'virtual:ogma-config';
|
|
5
|
+
import { review } from 'virtual:ogma-design';
|
|
6
|
+
import { OgmaReviewApp } from './OgmaReviewApp.js';
|
|
7
|
+
import './styles.css';
|
|
8
|
+
const root = document.getElementById('ogma-root');
|
|
9
|
+
if (!root) {
|
|
10
|
+
throw new Error('Ogma could not find #ogma-root.');
|
|
11
|
+
}
|
|
12
|
+
createRoot(root).render(_jsx(StrictMode, { children: _jsx(OgmaReviewApp, { config: runtimeConfig, review: review }) }));
|
|
13
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/viewer/client.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,cAAc,CAAC;AAEtB,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAElD,IAAI,CAAC,IAAI,EAAE,CAAC;IACV,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACrD,CAAC;AAED,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CACrB,KAAC,UAAU,cACT,KAAC,aAAa,IAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAI,GAC7C,CACd,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { OgmaReviewDefinition, OgmaPrototypeScreenProps } from '../types.js';
|
|
2
|
+
export declare function createDefaultOgmaReview(): OgmaReviewDefinition;
|
|
3
|
+
export declare function MissingScreen({ screen }: OgmaPrototypeScreenProps): import("react").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=defaultReview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultReview.d.ts","sourceRoot":"","sources":["../../src/viewer/defaultReview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAwHlF,wBAAgB,uBAAuB,IAAI,oBAAoB,CAsC9D;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,wBAAwB,+BAOjE"}
|