feedbacker-react
Version:
A drop-in React feedback system for component-level feedback capture during development and design review
214 lines (197 loc) • 439 kB
JavaScript
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
import React, { createContext, useContext, useState, useCallback, useMemo, useRef, useEffect, Component } from 'react';
function styleInject(css, ref) {
if ( ref === void 0 ) ref = {};
var insertAt = ref.insertAt;
if (!css || typeof document === 'undefined') { return; }
var head = document.head || document.getElementsByTagName('head')[0];
var style = document.createElement('style');
style.type = 'text/css';
if (insertAt === 'top') {
if (head.firstChild) {
head.insertBefore(style, head.firstChild);
} else {
head.appendChild(style);
}
} else {
head.appendChild(style);
}
if (style.styleSheet) {
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
}
var css_248z = "/* Feedbacker Core CSS Styles */\n\n.feedbacker-root {\n /* CSS Variables */\n --fb-primary: #3b82f6;\n --fb-primary-hover: #2563eb;\n --fb-text: #1f2937;\n --fb-text-secondary: #6b7280;\n --fb-bg: #ffffff;\n --fb-bg-secondary: #f9fafb;\n --fb-border: #e5e7eb;\n --fb-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --fb-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n}\n\n/* Modal Backdrop */\n.feedbacker-modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 99999;\n}\n\n/* Modal */\n.feedbacker-modal {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: white;\n border-radius: 12px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 500px;\n width: 90%;\n max-height: 80vh;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n z-index: 100000;\n}\n\n.feedbacker-modal-header {\n padding: 20px;\n border-bottom: 1px solid var(--fb-border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.feedbacker-modal-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--fb-text);\n}\n\n.feedbacker-modal-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n.feedbacker-modal-footer {\n padding: 20px;\n border-top: 1px solid var(--fb-border);\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n}\n\n.feedbacker-modal-close {\n padding: 8px;\n border-radius: 6px;\n border: none;\n cursor: pointer;\n background: transparent;\n color: var(--fb-text-secondary);\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.feedbacker-modal-close:hover {\n background: var(--fb-bg-secondary);\n}\n\n/* Manager Sidebar */\n.feedbacker-sidebar-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 99999;\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.feedbacker-sidebar-backdrop.visible {\n opacity: 1;\n}\n\n.feedbacker-sidebar {\n position: fixed;\n top: 0;\n right: 0;\n height: 100vh;\n width: 400px;\n background: var(--fb-bg);\n box-shadow: -4px 0 6px -1px rgba(0, 0, 0, 0.1);\n z-index: 100000;\n transform: translateX(100%);\n transition: transform 0.3s ease;\n}\n\n.feedbacker-sidebar.open {\n transform: translateX(0);\n}\n\n.feedbacker-sidebar-header {\n padding: 20px;\n border-bottom: 1px solid var(--fb-border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.feedbacker-sidebar-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--fb-text);\n}\n\n.feedbacker-sidebar-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* Buttons */\n.feedbacker-btn {\n padding: 8px 16px;\n border-radius: 6px;\n border: none;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.feedbacker-btn-primary {\n background: var(--fb-primary);\n color: white;\n}\n\n.feedbacker-btn-primary:hover {\n background: var(--fb-primary-hover);\n}\n\n.feedbacker-btn-secondary {\n background: var(--fb-bg-secondary);\n color: var(--fb-text);\n border: 1px solid var(--fb-border);\n}\n\n.feedbacker-btn-secondary:hover {\n background: var(--fb-border);\n}\n\n.feedbacker-btn-danger {\n background: #ef4444;\n color: white;\n}\n\n.feedbacker-btn-danger:hover {\n background: #dc2626;\n}\n\n.feedbacker-btn-icon {\n padding: 8px;\n border-radius: 6px;\n border: none;\n cursor: pointer;\n background: transparent;\n color: var(--fb-text-secondary);\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.feedbacker-btn-icon:hover {\n background: var(--fb-bg-secondary);\n}\n\n/* Form Elements */\n.feedbacker-form-group {\n margin-bottom: 16px;\n}\n\n.feedbacker-label {\n display: block;\n margin-bottom: 4px;\n font-size: 14px;\n font-weight: 500;\n color: var(--fb-text);\n}\n\n.feedbacker-input,\n.feedbacker-textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--fb-border);\n border-radius: 6px;\n font-size: 14px;\n transition: all 0.2s ease;\n background: var(--fb-bg);\n color: var(--fb-text);\n}\n\n.feedbacker-input:focus,\n.feedbacker-textarea:focus {\n outline: none;\n border-color: var(--fb-primary);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.feedbacker-textarea {\n min-height: 100px;\n resize: vertical;\n font-family: inherit;\n}\n\n/* Portal container */\n.feedbacker-portal {\n position: fixed;\n top: 0;\n left: 0;\n pointer-events: none;\n z-index: 99999;\n}\n\n.feedbacker-portal > * {\n pointer-events: auto;\n}\n\n/* Component Overlay */\n.feedbacker-overlay {\n position: absolute;\n pointer-events: none;\n border: 2px solid var(--fb-primary);\n background: rgba(59, 130, 246, 0.1);\n z-index: 9997;\n transition: all 0.2s ease;\n}\n\n.feedbacker-overlay-tooltip {\n position: absolute;\n background: var(--fb-text);\n color: white;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n z-index: 9998;\n}\n\n/* Minimized Modal */\n.feedbacker-modal-minimized {\n position: fixed;\n bottom: 20px;\n right: 20px;\n background: var(--fb-bg);\n border-radius: 8px;\n box-shadow: var(--fb-shadow-lg);\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n z-index: 9999;\n}\n\n.feedbacker-modal-minimized:hover {\n transform: translateY(-2px);\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);\n}\n\n/* Screenshot Preview */\n.feedbacker-screenshot-preview {\n width: 100%;\n max-height: 200px;\n object-fit: contain;\n border: 1px solid var(--fb-border);\n border-radius: 6px;\n margin-bottom: 16px;\n}\n\n/* Feedback List */\n.feedbacker-feedback-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\n.feedbacker-feedback-item {\n padding: 16px;\n border: 1px solid var(--fb-border);\n border-radius: 8px;\n margin-bottom: 12px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.feedbacker-feedback-item:hover {\n background: var(--fb-bg-secondary);\n transform: translateX(-4px);\n}\n\n.feedbacker-feedback-item-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 8px;\n}\n\n.feedbacker-feedback-item-title {\n font-weight: 600;\n color: var(--fb-text);\n}\n\n.feedbacker-feedback-item-time {\n font-size: 12px;\n color: var(--fb-text-secondary);\n}\n\n.feedbacker-feedback-item-comment {\n color: var(--fb-text-secondary);\n font-size: 14px;\n line-height: 1.5;\n}\n\n/* Feedback Item Styles */\n.feedback-item {\n padding: 16px;\n border: 1px solid var(--fb-border);\n border-radius: 8px;\n margin-bottom: 12px;\n background: white;\n transition: all 0.2s ease;\n}\n\n.feedback-item:hover {\n background: var(--fb-bg-secondary);\n}\n\n.feedback-item-header {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n cursor: pointer;\n}\n\n.feedback-thumbnail {\n width: 60px;\n height: 60px;\n flex-shrink: 0;\n border-radius: 4px;\n overflow: hidden;\n background: var(--fb-bg-secondary);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.thumbnail-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.thumbnail-placeholder {\n color: var(--fb-text-secondary);\n}\n\n.feedback-content {\n flex: 1;\n min-width: 0;\n}\n\n.feedback-meta {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 4px;\n}\n\n.component-name {\n font-weight: 600;\n color: var(--fb-text);\n}\n\n.feedback-time {\n font-size: 12px;\n color: var(--fb-text-secondary);\n}\n\n.feedback-path {\n font-size: 12px;\n color: var(--fb-text-secondary);\n margin-bottom: 4px;\n}\n\n.feedback-comment-preview {\n font-size: 14px;\n color: var(--fb-text-secondary);\n line-height: 1.4;\n}\n\n.feedback-expand {\n flex-shrink: 0;\n color: var(--fb-text-secondary);\n}\n\n.feedback-item-expanded {\n padding: 16px;\n border-top: 1px solid var(--fb-border);\n margin-top: 16px;\n}\n\n.feedback-screenshot-full {\n margin-bottom: 16px;\n}\n\n.screenshot-full-image {\n width: 100%;\n max-height: 200px;\n object-fit: contain;\n border: 1px solid var(--fb-border);\n border-radius: 4px;\n}\n\n.feedback-comment-full {\n margin-bottom: 16px;\n}\n\n.feedback-comment-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--fb-text-secondary);\n text-transform: uppercase;\n margin-bottom: 8px;\n}\n\n.feedback-comment-text {\n font-size: 14px;\n color: var(--fb-text);\n line-height: 1.5;\n}\n\n.feedback-metadata {\n margin-bottom: 16px;\n}\n\n.feedback-metadata-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--fb-text-secondary);\n text-transform: uppercase;\n margin-bottom: 8px;\n}\n\n.feedback-metadata-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.metadata-item {\n display: flex;\n gap: 8px;\n}\n\n.metadata-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--fb-text-secondary);\n min-width: 80px;\n}\n\n.metadata-value {\n font-size: 12px;\n color: var(--fb-text);\n word-break: break-all;\n}\n\n.feedback-actions {\n display: flex;\n gap: 8px;\n}\n\n.feedback-list-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n text-align: center;\n color: var(--fb-text-secondary);\n}\n\n.feedback-list-empty h3 {\n margin-top: 16px;\n font-size: 18px;\n font-weight: 600;\n color: var(--fb-text);\n}\n\n.feedback-list-empty p {\n margin-top: 8px;\n font-size: 14px;\n}\n\n.modal-header-actions {\n display: flex;\n gap: 8px;\n}\n\n.form-help {\n font-size: 14px;\n color: var(--fb-text-secondary);\n margin-top: 4px;\n}\n\n/* Mobile Styles */\n@media (max-width: 768px) {\n .feedbacker-sidebar {\n width: 100%;\n }\n \n .feedbacker-modal {\n width: 95%;\n max-width: none;\n }\n \n .feedbacker-modal-minimized {\n left: 20px;\n right: 20px;\n width: auto;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,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O0FBRUE7RUFDRSxlQUFlO0VBQ2YsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixRQUFRO0FBQ1Y7O0FBRUE7RUFDRSxlQUFlO0VBQ2YsK0JBQStCO0VBQy9CLGVBQWU7QUFDakI7O0FBRUEsa0JBQWtCO0FBQ2xCO0VBQ0U7SUFDRSxXQUFXO0VBQ2I7O0VBRUE7SUFDRSxVQUFVO0lBQ1YsZUFBZTtFQUNqQjs7RUFFQTtJQUNFLFVBQVU7SUFDVixXQUFXO0lBQ1gsV0FBVztFQUNiO0FBQ0YiLCJmaWxlIjoiZmVlZGJhY2tlci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBGZWVkYmFja2VyIENvcmUgQ1NTIFN0eWxlcyAqL1xuXG4uZmVlZGJhY2tlci1yb290IHtcbiAgLyogQ1NTIFZhcmlhYmxlcyAqL1xuICAtLWZiLXByaW1hcnk6ICMzYjgyZjY7XG4gIC0tZmItcHJpbWFyeS1ob3ZlcjogIzI1NjNlYjtcbiAgLS1mYi10ZXh0OiAjMWYyOTM3O1xuICAtLWZiLXRleHQtc2Vjb25kYXJ5OiAjNmI3MjgwO1xuICAtLWZiLWJnOiAjZmZmZmZmO1xuICAtLWZiLWJnLXNlY29uZGFyeTogI2Y5ZmFmYjtcbiAgLS1mYi1ib3JkZXI6ICNlNWU3ZWI7XG4gIC0tZmItc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIC0tZmItc2hhZG93LWxnOiAwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLyogTW9kYWwgQmFja2Ryb3AgKi9cbi5mZWVkYmFja2VyLW1vZGFsLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgei1pbmRleDogOTk5OTk7XG59XG5cbi8qIE1vZGFsICovXG4uZmVlZGJhY2tlci1tb2RhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBib3gtc2hhZG93OiAwIDIwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxMHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuICBtYXgtd2lkdGg6IDUwMHB4O1xuICB3aWR0aDogOTAlO1xuICBtYXgtaGVpZ2h0OiA4MHZoO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB6LWluZGV4OiAxMDAwMDA7XG59XG5cbi5mZWVkYmFja2VyLW1vZGFsLWhlYWRlciB7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1mYi1ib3JkZXIpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5mZWVkYmFja2VyLW1vZGFsLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tZmItdGV4dCk7XG59XG5cbi5mZWVkYmFja2VyLW1vZGFsLWJvZHkge1xuICBwYWRkaW5nOiAyMHB4O1xuICBmbGV4OiAxO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uZmVlZGJhY2tlci1tb2RhbC1mb290ZXIge1xuICBwYWRkaW5nOiAyMHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZmItYm9yZGVyKTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgZ2FwOiAxMnB4O1xufVxuXG4uZmVlZGJhY2tlci1tb2RhbC1jbG9zZSB7XG4gIHBhZGRpbmc6IDhweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiB2YXIoLS1mYi10ZXh0LXNlY29uZGFyeSk7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLmZlZWRiYWNrZXItbW9kYWwtY2xvc2U6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1mYi1iZy1zZWNvbmRhcnkpO1xufVxuXG4vKiBNYW5hZ2VyIFNpZGViYXIgKi9cbi5mZWVkYmFja2VyLXNpZGViYXItYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7XG59XG5cbi5mZWVkYmFja2VyLXNpZGViYXItYmFja2Ryb3AudmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5mZWVkYmFja2VyLXNpZGViYXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMTAwdmg7XG4gIHdpZHRoOiA0MDBweDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmItYmcpO1xuICBib3gtc2hhZG93OiAtNHB4IDAgNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICB6LWluZGV4OiAxMDAwMDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZTtcbn1cblxuLmZlZWRiYWNrZXItc2lkZWJhci5vcGVuIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xufVxuXG4uZmVlZGJhY2tlci1zaWRlYmFyLWhlYWRlciB7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1mYi1ib3JkZXIpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5mZWVkYmFja2VyLXNpZGViYXItdGl0bGUge1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1mYi10ZXh0KTtcbn1cblxuLmZlZWRiYWNrZXItc2lkZWJhci1jb250ZW50IHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgcGFkZGluZzogMjBweDtcbn1cblxuLyogQnV0dG9ucyAqL1xuLmZlZWRiYWNrZXItYnRuIHtcbiAgcGFkZGluZzogOHB4IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogOHB4O1xufVxuXG4uZmVlZGJhY2tlci1idG4tcHJpbWFyeSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWZiLXByaW1hcnkpO1xuICBjb2xvcjogd2hpdGU7XG59XG5cbi5mZWVkYmFja2VyLWJ0bi1wcmltYXJ5OmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmItcHJpbWFyeS1ob3Zlcik7XG59XG5cbi5mZWVkYmFja2VyLWJ0bi1zZWNvbmRhcnkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1mYi1iZy1zZWNvbmRhcnkpO1xuICBjb2xvcjogdmFyKC0tZmItdGV4dCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZiLWJvcmRlcik7XG59XG5cbi5mZWVkYmFja2VyLWJ0bi1zZWNvbmRhcnk6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1mYi1ib3JkZXIpO1xufVxuXG4uZmVlZGJhY2tlci1idG4tZGFuZ2VyIHtcbiAgYmFja2dyb3VuZDogI2VmNDQ0NDtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4uZmVlZGJhY2tlci1idG4tZGFuZ2VyOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogI2RjMjYyNjtcbn1cblxuLmZlZWRiYWNrZXItYnRuLWljb24ge1xuICBwYWRkaW5nOiA4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogdmFyKC0tZmItdGV4dC1zZWNvbmRhcnkpO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5mZWVkYmFja2VyLWJ0bi1pY29uOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmItYmctc2Vjb25kYXJ5KTtcbn1cblxuLyogRm9ybSBFbGVtZW50cyAqL1xuLmZlZWRiYWNrZXItZm9ybS1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG59XG5cbi5mZWVkYmFja2VyLWxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogdmFyKC0tZmItdGV4dCk7XG59XG5cbi5mZWVkYmFja2VyLWlucHV0LFxuLmZlZWRiYWNrZXItdGV4dGFyZWEge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogOHB4IDEycHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZiLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1mYi1iZyk7XG4gIGNvbG9yOiB2YXIoLS1mYi10ZXh0KTtcbn1cblxuLmZlZWRiYWNrZXItaW5wdXQ6Zm9jdXMsXG4uZmVlZGJhY2tlci10ZXh0YXJlYTpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmItcHJpbWFyeSk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKTtcbn1cblxuLmZlZWRiYWNrZXItdGV4dGFyZWEge1xuICBtaW4taGVpZ2h0OiAxMDBweDtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG59XG5cbi8qIFBvcnRhbCBjb250YWluZXIgKi9cbi5mZWVkYmFja2VyLXBvcnRhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogOTk5OTk7XG59XG5cbi5mZWVkYmFja2VyLXBvcnRhbCA+ICoge1xuICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuLyogQ29tcG9uZW50IE92ZXJsYXkgKi9cbi5mZWVkYmFja2VyLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1mYi1wcmltYXJ5KTtcbiAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMSk7XG4gIHotaW5kZXg6IDk5OTc7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG59XG5cbi5mZWVkYmFja2VyLW92ZXJsYXktdG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmItdGV4dCk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogNHB4IDhweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHotaW5kZXg6IDk5OTg7XG59XG5cbi8qIE1pbmltaXplZCBNb2RhbCAqL1xuLmZlZWRiYWNrZXItbW9kYWwtbWluaW1pemVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IDIwcHg7XG4gIHJpZ2h0OiAyMHB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1mYi1iZyk7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogdmFyKC0tZmItc2hhZG93LWxnKTtcbiAgcGFkZGluZzogMTJweCAxNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDEycHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogOTk5OTtcbn1cblxuLmZlZWRiYWNrZXItbW9kYWwtbWluaW1pemVkOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICBib3gtc2hhZG93OiAwIDIwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLyogU2NyZWVuc2hvdCBQcmV2aWV3ICovXG4uZmVlZGJhY2tlci1zY3JlZW5zaG90LXByZXZpZXcge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LWhlaWdodDogMjAwcHg7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZiLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cblxuLyogRmVlZGJhY2sgTGlzdCAqL1xuLmZlZWRiYWNrZXItZmVlZGJhY2stbGlzdCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxuLmZlZWRiYWNrZXItZmVlZGJhY2staXRlbSB7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZiLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xufVxuXG4uZmVlZGJhY2tlci1mZWVkYmFjay1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmItYmctc2Vjb25kYXJ5KTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00cHgpO1xufVxuXG4uZmVlZGJhY2tlci1mZWVkYmFjay1pdGVtLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLmZlZWRiYWNrZXItZmVlZGJhY2staXRlbS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1mYi10ZXh0KTtcbn1cblxuLmZlZWRiYWNrZXItZmVlZGJhY2staXRlbS10aW1lIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogdmFyKC0tZmItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4uZmVlZGJhY2tlci1mZWVkYmFjay1pdGVtLWNvbW1lbnQge1xuICBjb2xvcjogdmFyKC0tZmItdGV4dC1zZWNvbmRhcnkpO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi8qIEZlZWRiYWNrIEl0ZW0gU3R5bGVzICovXG4uZmVlZGJhY2staXRlbSB7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZiLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG59XG5cbi5mZWVkYmFjay1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmItYmctc2Vjb25kYXJ5KTtcbn1cblxuLmZlZWRiYWNrLWl0ZW0taGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGdhcDogMTJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZmVlZGJhY2stdGh1bWJuYWlsIHtcbiAgd2lkdGg6IDYwcHg7XG4gIGhlaWdodDogNjBweDtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmItYmctc2Vjb25kYXJ5KTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi50aHVtYm5haWwtaW1hZ2Uge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvYmplY3QtZml0OiBjb3Zlcjtcbn1cblxuLnRodW1ibmFpbC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiB2YXIoLS1mYi10ZXh0LXNlY29uZGFyeSk7XG59XG5cbi5mZWVkYmFjay1jb250ZW50IHtcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiAwO1xufVxuXG4uZmVlZGJhY2stbWV0YSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cblxuLmNvbXBvbmVudC1uYW1lIHtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6IHZhcigtLWZiLXRleHQpO1xufVxuXG4uZmVlZGJhY2stdGltZSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6IHZhcigtLWZiLXRleHQtc2Vjb25kYXJ5KTtcbn1cblxuLmZlZWRiYWNrLXBhdGgge1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiB2YXIoLS1mYi10ZXh0LXNlY29uZGFyeSk7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cblxuLmZlZWRiYWNrLWNvbW1lbnQtcHJldmlldyB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6IHZhcigtLWZiLXRleHQtc2Vjb25kYXJ5KTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLmZlZWRiYWNrLWV4cGFuZCB7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBjb2xvcjogdmFyKC0tZmItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4uZmVlZGJhY2staXRlbS1leHBhbmRlZCB7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1mYi1ib3JkZXIpO1xuICBtYXJnaW4tdG9wOiAxNnB4O1xufVxuXG4uZmVlZGJhY2stc2NyZWVuc2hvdC1mdWxsIHtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cblxuLnNjcmVlbnNob3QtZnVsbC1pbWFnZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtaGVpZ2h0OiAyMDBweDtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4uZmVlZGJhY2stY29tbWVudC1mdWxsIHtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cblxuLmZlZWRiYWNrLWNvbW1lbnQtdGl0bGUge1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1mYi10ZXh0LXNlY29uZGFyeSk7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLmZlZWRiYWNrLWNvbW1lbnQtdGV4dCB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6IHZhcigtLWZiLXRleHQpO1xuICBsaW5lLWhlaWdodDogMS41O1xufVxuXG4uZmVlZGJhY2stbWV0YWRhdGEge1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufVxuXG4uZmVlZGJhY2stbWV0YWRhdGEtdGl0bGUge1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1mYi10ZXh0LXNlY29uZGFyeSk7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLmZlZWRiYWNrLW1ldGFkYXRhLWdyaWQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDhweDtcbn1cblxuLm1ldGFkYXRhLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbn1cblxuLm1ldGFkYXRhLWxhYmVsIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogdmFyKC0tZmItdGV4dC1zZWNvbmRhcnkpO1xuICBtaW4td2lkdGg6IDgwcHg7XG59XG5cbi5tZXRhZGF0YS12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6IHZhcigtLWZiLXRleHQpO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG59XG5cbi5mZWVkYmFjay1hY3Rpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA4cHg7XG59XG5cbi5mZWVkYmFjay1saXN0LWVtcHR5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDQ4cHggMjRweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogdmFyKC0tZmItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4uZmVlZGJhY2stbGlzdC1lbXB0eSBoMyB7XG4gIG1hcmdpbi10b3A6IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6IHZhcigtLWZiLXRleHQpO1xufVxuXG4uZmVlZGJhY2stbGlzdC1lbXB0eSBwIHtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBmb250LXNpemU6IDE0cHg7XG59XG5cbi5tb2RhbC1oZWFkZXItYWN0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogOHB4O1xufVxuXG4uZm9ybS1oZWxwIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogdmFyKC0tZmItdGV4dC1zZWNvbmRhcnkpO1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG5cbi8qIE1vYmlsZSBTdHlsZXMgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuZmVlZGJhY2tlci1zaWRlYmFyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICBcbiAgLmZlZWRiYWNrZXItbW9kYWwge1xuICAgIHdpZHRoOiA5NSU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICB9XG4gIFxuICAuZmVlZGJhY2tlci1tb2RhbC1taW5pbWl6ZWQge1xuICAgIGxlZnQ6IDIwcHg7XG4gICAgcmlnaHQ6IDIwcHg7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn0iXX0= */";
styleInject(css_248z);
/**
* MarkdownExporter - Generates markdown files from feedback data
*
* Features:
* - Text-only markdown export without images
* - Formatted output with component information
* - Metadata and timestamps
* - Proper markdown structure
*/
class MarkdownExporter {
/**
* Export feedback as markdown string
*/
static exportAsMarkdown(feedbacks) {
if (feedbacks.length === 0) {
return '# Feedback Report\n\nNo feedback items found.\n';
}
const sortedFeedbacks = [...feedbacks].sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
let markdown = this.generateHeader(sortedFeedbacks);
markdown += '\n\n';
markdown += this.generateFeedbackItems(sortedFeedbacks);
return markdown;
}
/**
* Generate download for markdown content
*/
static downloadMarkdown(feedbacks, filename = 'feedback.md') {
const markdown = this.exportAsMarkdown(feedbacks);
const blob = new Blob([markdown], { type: 'text/markdown;charset=utf-8' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = filename;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// Clean up the URL object
URL.revokeObjectURL(url);
}
/**
* Generate markdown header with summary
*/
static generateHeader(feedbacks) {
const timestamp = new Date().toISOString();
const totalFeedback = feedbacks.length;
const componentsCount = new Set(feedbacks.map((f) => f.componentName)).size;
return [
'# Feedback Report',
`Generated on ${timestamp}`,
'',
'## Summary',
`- **Total feedback items:** ${totalFeedback}`,
`- **Components with feedback:** ${componentsCount}`
].join('\n');
}
/**
* Generate all feedback items
*/
static generateFeedbackItems(feedbacks) {
return feedbacks
.map((feedback, index) => this.generateFeedbackItem(feedback, index + 1))
.join('\n\n---\n\n');
}
/**
* Generate a single feedback item
*/
static generateFeedbackItem(feedback, index) {
const timestamp = feedback.timestamp; // Already in ISO format
let item = `## ${index}. ${feedback.componentName}\n\n`;
// Feedback Comment
item += '### Feedback\n';
item += this.formatComment(feedback.comment);
// Component Information
item += '\n\n### Component Information\n';
item += `- **Component:** ${feedback.componentName}\n`;
item += `- **Path:** ${feedback.componentPath.join(' > ')}\n`;
item += `- **URL:** ${feedback.url}\n`;
item += `- **Timestamp:** ${timestamp}\n`;
// Browser Information
item += '\n### Browser Information\n';
if (feedback.browserInfo.platform) {
item += `- **Platform:** ${feedback.browserInfo.platform}\n`;
}
item += `- **Viewport:** ${feedback.browserInfo.viewport.width} x ${feedback.browserInfo.viewport.height}\n`;
item += `- **User Agent:** ${feedback.browserInfo.userAgent}\n`;
// HTML Snippet (if available)
if (feedback.htmlSnippet) {
item += '\n### HTML Snippet\n';
item += '```html\n';
item += feedback.htmlSnippet;
item += '\n```\n';
}
// Metadata (if available)
if (feedback.metadata && Object.keys(feedback.metadata).length > 0) {
item += '\n### Additional Metadata\n';
item += '```json\n';
item += JSON.stringify(feedback.metadata, null, 2);
item += '\n```\n';
}
return item;
}
/**
* Format comment text for markdown
*/
static formatComment(comment) {
// Escape markdown special characters in user content
const escaped = comment
.replace(/\\/g, '\\\\')
.replace(/\*/g, '\\*')
.replace(/_/g, '\\_')
.replace(/~/g, '\\~')
.replace(/`/g, '\\`');
// Convert newlines to proper markdown line breaks
return escaped
.split('\n')
.map((line) => line.trim())
.join('\n\n');
}
/**
* Generate markdown anchor from component name and id
*/
static generateAnchor(componentName, id) {
// Create URL-safe anchor
const base = componentName
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-|-$/g, '');
// Add short ID to ensure uniqueness
const shortId = id.slice(-8);
return `${base}-${shortId}`;
}
/**
* Sanitize filename for download
*/
static sanitizeFilename(filename) {
return filename
.replace(/[^\w\s.-]/g, '')
.replace(/\s+/g, '_')
.substring(0, 200); // Limit length
}
/**
* Generate suggested filename based on current date and feedback count
*/
static generateFilename(feedbacks) {
const date = new Date().toISOString().split('T')[0];
const count = feedbacks.length;
return `feedback_${date}_${count}items.md`;
}
}
var MarkdownExporter$1 = /*#__PURE__*/Object.freeze({
__proto__: null,
MarkdownExporter: MarkdownExporter
});
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function getDefaultExportFromCjs (x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}
function commonjsRequire(path) {
throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
}
var jszip_min = {exports: {}};
/*!
JSZip v3.10.1 - A JavaScript class for generating and reading zip files
<http://stuartk.com/jszip>
(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
JSZip uses the library pako released under the MIT license :
https://github.com/nodeca/pako/blob/main/LICENSE
*/
(function (module, exports) {
!function(e){module.exports=e();}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t="function"==typeof commonjsRequire&&commonjsRequire;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h);}return o[r].exports}for(var l="function"==typeof commonjsRequire&&commonjsRequire,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){var d=e("./utils"),c=e("./support"),p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c="string"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join("")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u="data:";if(e.substr(0,u.length)===u)throw new Error("Invalid base64 input, it looks like a data url.");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error("Invalid base64 input, bad content length.");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l};},{"./support":30,"./utils":32}],2:[function(e,t,r){var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i;}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o;},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate");},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){var n=e("./utils");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e;}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return -1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return -1^e}(0|t,e,e.length,0):0};},{"./utils":32}],5:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null;},{}],6:[function(e,t,r){var n=null;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n};},{lie:37}],7:[function(e,t,r){var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function h(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={};}r.magic="\b\0",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1);},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0);},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null;},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta});};},r.compressWorker=function(e){return new h("Deflate",e)},r.uncompressWorker=function(){return new h("Inflate",{})};},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){function A(e,t){var r,n="";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo("string",s(h.name)),c=I.transformTo("string",O.utf8encode(h.name)),d=h.comment,p=I.transformTo("string",s(d)),m=I.transformTo("string",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b="",v="",y="",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),"UNIX"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+="up"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+="uc"+A(y.length,2)+y);var E="";return E+="\n\0",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+"\0\0\0\0"+A(z,4)+A(n,4)+f+b+p}}var I=e("../utils"),i=e("../stream/GenericWorker"),O=e("../utf8"),B=e("../crc32"),R=e("../signature");function s(e,t,r,n){i.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[];}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}));},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}});}else this.accumulate=!0;},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null;},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo("string",i(n));return R.CENTRAL_DIRECTORY_END+"\0\0\0\0"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}});},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume();},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on("data",function(e){t.processChunk(e);}),e.on("end",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end();}),e.on("error",function(e){t.error(e);}),this},s.prototype.resume=function(){return !!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return !1;for(var r=0;r<t.length;r++)try{t[r].error(e);}catch(e){}return !0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock();},t.exports=s;},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(e,t,r){var u=e("../compressions"),n=e("./ZipFileWorker");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+" is not a valid compression method !");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo("file",{name:e,dir:i,date:s,comment:t.comment||"",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o);}),o.entriesCount=h;}catch(e){o.error(e);}return o};},{"../compressions":3,"./ZipFileWorker":8}],10:[function(e,t,r){function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var e=new n;for(var t in this)"function"!=typeof this[t]&&(e[t]=this[t]);return e};}(n.prototype=e("./object")).loadAsync=e("./load"),n.support=e("./support"),n.defaults=e("./defaults"),n.version="3.10.1",n.loadAsync=function(e,t){return (new n).loadAsync(e,t)},n.external=e("./external"),t.exports=n;},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(e,t,r){var u=e("./utils"),i=e("./external"),n=e("./utf8"),s=e("./zipEntries"),a=e("./stream/Crc32Probe"),l=e("./nodejsUtils");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on("error",function(e){t(e);}).on("end",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error("Corrupted zip : CRC32 mismatch")):e();}).resume();})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):u.prepareContent("the loaded zip file",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s);}return t.zipComment.length&&(h.comment=t.zipComment),h})};},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(e,t,r){var n=e("../utils"),i=e("../stream/GenericWorker");function s(e,t){i.call(this,"No