diff --git a/design/src/compare.ts b/design/src/compare.ts
index bcf20a55..bededfe9 100644
--- a/design/src/compare.ts
+++ b/design/src/compare.ts
@@ -346,22 +346,124 @@ export function generateCompareHtml(images: string[]): string {
submitRegenerate(detail);
});
+ function postFeedback(feedback) {
+ if (!window.__GSTACK_SERVER_URL) return Promise.resolve(null);
+ return fetch(window.__GSTACK_SERVER_URL + '/api/feedback', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(feedback),
+ }).then(function(r) { return r.json(); }).catch(function() { return null; });
+ }
+
+ function disableAllInputs() {
+ document.querySelectorAll('input, button, textarea, .star, .regen-chiclet').forEach(function(el) {
+ el.disabled = true;
+ el.style.pointerEvents = 'none';
+ el.style.opacity = '0.5';
+ });
+ }
+
+ function showPostSubmitState() {
+ disableAllInputs();
+ document.querySelector('.regenerate-bar').style.display = 'none';
+ document.getElementById('submit-btn').style.display = 'none';
+ document.getElementById('success-msg').style.display = 'block';
+ document.getElementById('success-msg').innerHTML =
+ 'Feedback received! Return to your coding agent.' +
+ '
Want to make more changes? Run /design-shotgun again.';
+ }
+
+ function showRegeneratingState() {
+ disableAllInputs();
+ document.querySelector('.variants').innerHTML =
+ '
/design-shotgun again in your coding agent./design-shotgun again in your coding agent.' +
+ json.replace(/' +
+ 'Click to copy';
+ }
+
function submitRegenerate(detail) {
- const feedback = collectFeedback();
+ var feedback = collectFeedback();
feedback.regenerated = true;
feedback.regenerateAction = detail;
document.getElementById('feedback-result').textContent = JSON.stringify(feedback);
document.getElementById('status').textContent = 'regenerate';
+ postFeedback(feedback).then(function(result) {
+ if (result && result.received) {
+ showRegeneratingState();
+ } else if (window.__GSTACK_SERVER_URL) {
+ showPostFailure(feedback);
+ }
+ });
}
// Submit button
- document.getElementById('submit-btn').addEventListener('click', () => {
- const feedback = collectFeedback();
+ document.getElementById('submit-btn').addEventListener('click', function() {
+ var feedback = collectFeedback();
feedback.regenerated = false;
document.getElementById('feedback-result').textContent = JSON.stringify(feedback);
document.getElementById('status').textContent = 'submitted';
- document.getElementById('submit-btn').disabled = true;
- document.getElementById('success-msg').style.display = 'block';
+ postFeedback(feedback).then(function(result) {
+ if (result && result.received) {
+ showPostSubmitState();
+ } else if (window.__GSTACK_SERVER_URL) {
+ showPostFailure(feedback);
+ } else {
+ // DOM-only mode (legacy / test)
+ document.getElementById('submit-btn').disabled = true;
+ document.getElementById('success-msg').style.display = 'block';
+ }
+ });
});
function collectFeedback() {