pushfeedback 0.1.84 → 0.1.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/canvas-editor_3.cjs.entry.js +393 -41
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/pushfeedback.cjs.js +1 -1
- package/dist/collection/components/canvas-editor/canvas-editor.js +173 -15
- package/dist/collection/components/feedback-button/feedback-button.css +45 -1
- package/dist/collection/components/feedback-button/feedback-button.js +58 -8
- package/dist/collection/components/feedback-modal/feedback-modal.css +6 -0
- package/dist/collection/components/feedback-modal/feedback-modal.js +272 -17
- package/dist/collection/utils/sanitize-html.js +90 -0
- package/dist/components/canvas-editor2.js +139 -15
- package/dist/components/feedback-button.js +24 -8
- package/dist/components/feedback-modal2.js +241 -18
- package/dist/esm/canvas-editor_3.entry.js +393 -41
- package/dist/esm/loader.js +1 -1
- package/dist/esm/pushfeedback.js +1 -1
- package/dist/pushfeedback/p-17acbd1c.entry.js +1 -0
- package/dist/pushfeedback/pushfeedback.esm.js +1 -1
- package/dist/types/components/canvas-editor/canvas-editor.d.ts +7 -0
- package/dist/types/components/feedback-button/feedback-button.d.ts +14 -0
- package/dist/types/components/feedback-modal/feedback-modal.d.ts +24 -0
- package/dist/types/components.d.ts +40 -0
- package/dist/types/utils/sanitize-html.d.ts +8 -0
- package/package.json +2 -1
- package/dist/pushfeedback/p-06bb93cb.entry.js +0 -1
package/dist/cjs/loader.cjs.js
CHANGED
|
@@ -14,7 +14,7 @@ const patchEsm = () => {
|
|
|
14
14
|
const defineCustomElements = (win, options) => {
|
|
15
15
|
if (typeof window === 'undefined') return Promise.resolve();
|
|
16
16
|
return patchEsm().then(() => {
|
|
17
|
-
return index.bootstrapLazy([["canvas-editor_3.cjs",[[1,"feedback-button",{"buttonPosition":[1,"button-position"],"buttonStyle":[1,"button-style"],"hideIcon":[4,"hide-icon"],"hideMobile":[4,"hide-mobile"],"sessionId":[1537,"session-id"],"metadata":[1],"submit":[4],"clickOutsideClose":[4,"click-outside-close"],"customFont":[4,"custom-font"],"emailAddress":[1,"email-address"],"historyClose":[4,"history-close"],"isEmailRequired":[4,"is-email-required"],"fetchData":[4,"fetch-data"],"hideEmail":[4,"hide-email"],"hidePrivacyPolicy":[4,"hide-privacy-policy"],"hideRating":[4,"hide-rating"],"hideScreenshotButton":[4,"hide-screenshot-button"],"modalPosition":[1,"modal-position"],"project":[1],"rating":[2],"ratingMode":[1,"rating-mode"],"emailPlaceholder":[1,"email-placeholder"],"errorMessage":[1,"error-message"],"errorMessage403":[1,"error-message-4-0-3"],"errorMessage404":[1,"error-message-4-0-4"],"footerText":[1,"footer-text"],"messagePlaceholder":[1,"message-placeholder"],"modalTitle":[1,"modal-title"],"modalTitleError":[1,"modal-title-error"],"modalTitleSuccess":[1,"modal-title-success"],"privacyPolicyText":[1,"privacy-policy-text"],"ratingPlaceholder":[1,"rating-placeholder"],"ratingStarsPlaceholder":[1,"rating-stars-placeholder"],"sendButtonText":[1,"send-button-text"],"successMessage":[1,"success-message"],"recaptchaText":[1,"recaptcha-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotEditTextButtonText":[1,"screenshot-edit-text-button-text"],"screenshotEditorTitle":[1,"screenshot-editor-title"],"screenshotEditorCancelText":[1,"screenshot-editor-cancel-text"],"screenshotEditorSaveText":[1,"screenshot-editor-save-text"],"screenshotSizeLabelText":[1,"screenshot-size-label-text"],"screenshotBorderLabelText":[1,"screenshot-border-label-text"],"screenshotEditTextPromptText":[1,"screenshot-edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"]}],[1,"feedback-modal",{"customFont":[4,"custom-font"],"emailAddress":[1,"email-address"],"hideEmail":[4,"hide-email"],"isEmailRequired":[4,"is-email-required"],"ratingMode":[1,"rating-mode"],"hasSelectedElement":[1540,"has-selected-element"],"hidePrivacyPolicy":[4,"hide-privacy-policy"],"hideRating":[4,"hide-rating"],"hideScreenshotButton":[4,"hide-screenshot-button"],"project":[1],"showScreenshotMode":[1540,"show-screenshot-mode"],"showScreenshotTopBar":[1540,"show-screenshot-top-bar"],"showModal":[1540,"show-modal"],"rating":[2],"metadata":[1],"fetchData":[4,"fetch-data"],"embedded":[4],"clickOutsideClose":[4,"click-outside-close"],"historyClose":[4,"history-close"],"emailPlaceholder":[1,"email-placeholder"],"errorMessage":[1,"error-message"],"errorMessage403":[1,"error-message-4-0-3"],"errorMessage404":[1,"error-message-4-0-4"],"messagePlaceholder":[1,"message-placeholder"],"footerText":[1,"footer-text"],"modalPosition":[1,"modal-position"],"modalTitle":[1,"modal-title"],"modalTitleError":[1,"modal-title-error"],"modalTitleSuccess":[1,"modal-title-success"],"privacyPolicyText":[1,"privacy-policy-text"],"ratingPlaceholder":[1,"rating-placeholder"],"ratingStarsPlaceholder":[1,"rating-stars-placeholder"],"sendButtonText":[1,"send-button-text"],"successMessage":[1,"success-message"],"recaptchaText":[1,"recaptcha-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotEditTextButtonText":[1,"screenshot-edit-text-button-text"],"screenshotEditorTitle":[1,"screenshot-editor-title"],"screenshotEditorCancelText":[1,"screenshot-editor-cancel-text"],"screenshotEditorSaveText":[1,"screenshot-editor-save-text"],"screenshotSizeLabelText":[1,"screenshot-size-label-text"],"screenshotBorderLabelText":[1,"screenshot-border-label-text"],"screenshotEditTextPromptText":[1,"screenshot-edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"],"sending":[32],"formMessage":[32],"formEmail":[32],"formSuccess":[32],"formVerification":[32],"formError":[32],"formErrorStatus":[32],"encodedScreenshot":[32],"isPrivacyChecked":[32],"whitelabel":[32],"selectedRating":[32],"overlayVisible":[32],"isAnimating":[32],"recaptchaEnabled":[32],"recaptchaSiteKey":[32],"takingScreenshot":[32],"showScreenshotError":[32],"screenshotError":[32],"showCanvasEditor":[32],"autoStartCapture":[32],"openModal":[64]}],[1,"canvas-editor",{"canvasEditorTitle":[1,"canvas-editor-title"],"canvasEditorCancelText":[1,"canvas-editor-cancel-text"],"canvasEditorSaveText":[1,"canvas-editor-save-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"autoStartScreenshot":[4,"auto-start-screenshot"],"existingScreenshot":[1,"existing-screenshot"],"editTextButtonText":[1,"edit-text-button-text"],"sizeLabelText":[1,"size-label-text"],"borderLabelText":[1,"border-label-text"],"editTextPromptText":[1,"edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"],"takingScreenshot":[32],"showCanvasEditor":[32],"canvasDrawingTool":[32],"canvasDrawingColor":[32],"canvasLineWidth":[32],"canvasTextSize":[32],"isDrawing":[32],"annotations":[32],"currentAnnotation":[32],"isDragging":[32],"draggedAnnotation":[32],"dragStartPos":[32],"showColorPicker":[32],"editingColorIndex":[32],"selectedAnnotation":[32],"isResizing":[32],"resizingAnnotation":[32],"resizeStartSize":[32],"resizeStartDimensions":[32],"hoveredAnnotation":[32],"resizeHandle":[32],"defaultColors":[32]}]]]], options);
|
|
17
|
+
return index.bootstrapLazy([["canvas-editor_3.cjs",[[1,"feedback-button",{"buttonPosition":[1,"button-position"],"buttonStyle":[1,"button-style"],"hideIcon":[4,"hide-icon"],"hideMobile":[4,"hide-mobile"],"sessionId":[1537,"session-id"],"metadata":[1],"submit":[4],"apiKey":[1,"api-key"],"clickOutsideClose":[4,"click-outside-close"],"customFont":[4,"custom-font"],"emailAddress":[1,"email-address"],"historyClose":[4,"history-close"],"isEmailRequired":[4,"is-email-required"],"fetchData":[4,"fetch-data"],"hideEmail":[4,"hide-email"],"hidePrivacyPolicy":[4,"hide-privacy-policy"],"hideRating":[4,"hide-rating"],"hideScreenshotButton":[4,"hide-screenshot-button"],"modalPosition":[1,"modal-position"],"project":[1],"rating":[2],"ratingMode":[1,"rating-mode"],"emailPlaceholder":[1,"email-placeholder"],"errorMessage":[1,"error-message"],"errorMessage401":[1,"error-message-4-0-1"],"errorMessage403":[1,"error-message-4-0-3"],"errorMessage404":[1,"error-message-4-0-4"],"footerText":[1,"footer-text"],"messagePlaceholder":[1,"message-placeholder"],"modalTitle":[1,"modal-title"],"modalTitleError":[1,"modal-title-error"],"modalTitleSuccess":[1,"modal-title-success"],"privacyPolicyText":[1,"privacy-policy-text"],"ratingPlaceholder":[1,"rating-placeholder"],"ratingStarsPlaceholder":[1,"rating-stars-placeholder"],"sendButtonText":[1,"send-button-text"],"successMessage":[1,"success-message"],"recaptchaText":[1,"recaptcha-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotEditTextButtonText":[1,"screenshot-edit-text-button-text"],"screenshotEditorTitle":[1,"screenshot-editor-title"],"screenshotEditorCancelText":[1,"screenshot-editor-cancel-text"],"screenshotEditorSaveText":[1,"screenshot-editor-save-text"],"screenshotSizeLabelText":[1,"screenshot-size-label-text"],"screenshotBorderLabelText":[1,"screenshot-border-label-text"],"screenshotEditTextPromptText":[1,"screenshot-edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"]}],[1,"feedback-modal",{"apiKey":[1,"api-key"],"customFont":[4,"custom-font"],"emailAddress":[1,"email-address"],"hideEmail":[4,"hide-email"],"isEmailRequired":[4,"is-email-required"],"ratingMode":[1,"rating-mode"],"hasSelectedElement":[1540,"has-selected-element"],"hidePrivacyPolicy":[4,"hide-privacy-policy"],"hideRating":[4,"hide-rating"],"hideScreenshotButton":[4,"hide-screenshot-button"],"project":[1],"showScreenshotMode":[1540,"show-screenshot-mode"],"showScreenshotTopBar":[1540,"show-screenshot-top-bar"],"showModal":[1540,"show-modal"],"rating":[2],"metadata":[1],"fetchData":[4,"fetch-data"],"embedded":[4],"clickOutsideClose":[4,"click-outside-close"],"historyClose":[4,"history-close"],"escapeClose":[4,"escape-close"],"emailPlaceholder":[1,"email-placeholder"],"errorMessage":[1,"error-message"],"errorMessage401":[1,"error-message-4-0-1"],"errorMessage403":[1,"error-message-4-0-3"],"errorMessage404":[1,"error-message-4-0-4"],"messagePlaceholder":[1,"message-placeholder"],"footerText":[1,"footer-text"],"modalPosition":[1,"modal-position"],"modalTitle":[1,"modal-title"],"modalTitleError":[1,"modal-title-error"],"modalTitleSuccess":[1,"modal-title-success"],"privacyPolicyText":[1,"privacy-policy-text"],"ratingPlaceholder":[1,"rating-placeholder"],"ratingStarsPlaceholder":[1,"rating-stars-placeholder"],"sendButtonText":[1,"send-button-text"],"closeButtonLabel":[1,"close-button-label"],"ratingPositiveLabel":[1,"rating-positive-label"],"ratingNegativeLabel":[1,"rating-negative-label"],"ratingStarLabel":[1,"rating-star-label"],"successMessage":[1,"success-message"],"recaptchaText":[1,"recaptcha-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotEditTextButtonText":[1,"screenshot-edit-text-button-text"],"screenshotEditorTitle":[1,"screenshot-editor-title"],"screenshotEditorCancelText":[1,"screenshot-editor-cancel-text"],"screenshotEditorSaveText":[1,"screenshot-editor-save-text"],"screenshotSizeLabelText":[1,"screenshot-size-label-text"],"screenshotBorderLabelText":[1,"screenshot-border-label-text"],"screenshotEditTextPromptText":[1,"screenshot-edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"],"sending":[32],"formMessage":[32],"formEmail":[32],"formSuccess":[32],"formVerification":[32],"formError":[32],"formErrorStatus":[32],"encodedScreenshot":[32],"isPrivacyChecked":[32],"whitelabel":[32],"selectedRating":[32],"overlayVisible":[32],"isAnimating":[32],"recaptchaEnabled":[32],"recaptchaSiteKey":[32],"takingScreenshot":[32],"showScreenshotError":[32],"screenshotError":[32],"showCanvasEditor":[32],"autoStartCapture":[32],"openModal":[64]}],[1,"canvas-editor",{"canvasEditorTitle":[1,"canvas-editor-title"],"canvasEditorCancelText":[1,"canvas-editor-cancel-text"],"canvasEditorSaveText":[1,"canvas-editor-save-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"escapeClose":[4,"escape-close"],"clickOutsideClose":[4,"click-outside-close"],"autoStartScreenshot":[4,"auto-start-screenshot"],"existingScreenshot":[1,"existing-screenshot"],"editTextButtonText":[1,"edit-text-button-text"],"sizeLabelText":[1,"size-label-text"],"borderLabelText":[1,"border-label-text"],"editTextPromptText":[1,"edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"],"takingScreenshot":[32],"showCanvasEditor":[32],"canvasDrawingTool":[32],"canvasDrawingColor":[32],"canvasLineWidth":[32],"canvasTextSize":[32],"isDrawing":[32],"annotations":[32],"currentAnnotation":[32],"isDragging":[32],"draggedAnnotation":[32],"dragStartPos":[32],"showColorPicker":[32],"editingColorIndex":[32],"selectedAnnotation":[32],"isResizing":[32],"resizingAnnotation":[32],"resizeStartSize":[32],"resizeStartDimensions":[32],"hoveredAnnotation":[32],"resizeHandle":[32],"defaultColors":[32]}]]]], options);
|
|
18
18
|
});
|
|
19
19
|
};
|
|
20
20
|
|
|
@@ -17,7 +17,7 @@ const patchBrowser = () => {
|
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
patchBrowser().then(options => {
|
|
20
|
-
return index.bootstrapLazy([["canvas-editor_3.cjs",[[1,"feedback-button",{"buttonPosition":[1,"button-position"],"buttonStyle":[1,"button-style"],"hideIcon":[4,"hide-icon"],"hideMobile":[4,"hide-mobile"],"sessionId":[1537,"session-id"],"metadata":[1],"submit":[4],"clickOutsideClose":[4,"click-outside-close"],"customFont":[4,"custom-font"],"emailAddress":[1,"email-address"],"historyClose":[4,"history-close"],"isEmailRequired":[4,"is-email-required"],"fetchData":[4,"fetch-data"],"hideEmail":[4,"hide-email"],"hidePrivacyPolicy":[4,"hide-privacy-policy"],"hideRating":[4,"hide-rating"],"hideScreenshotButton":[4,"hide-screenshot-button"],"modalPosition":[1,"modal-position"],"project":[1],"rating":[2],"ratingMode":[1,"rating-mode"],"emailPlaceholder":[1,"email-placeholder"],"errorMessage":[1,"error-message"],"errorMessage403":[1,"error-message-4-0-3"],"errorMessage404":[1,"error-message-4-0-4"],"footerText":[1,"footer-text"],"messagePlaceholder":[1,"message-placeholder"],"modalTitle":[1,"modal-title"],"modalTitleError":[1,"modal-title-error"],"modalTitleSuccess":[1,"modal-title-success"],"privacyPolicyText":[1,"privacy-policy-text"],"ratingPlaceholder":[1,"rating-placeholder"],"ratingStarsPlaceholder":[1,"rating-stars-placeholder"],"sendButtonText":[1,"send-button-text"],"successMessage":[1,"success-message"],"recaptchaText":[1,"recaptcha-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotEditTextButtonText":[1,"screenshot-edit-text-button-text"],"screenshotEditorTitle":[1,"screenshot-editor-title"],"screenshotEditorCancelText":[1,"screenshot-editor-cancel-text"],"screenshotEditorSaveText":[1,"screenshot-editor-save-text"],"screenshotSizeLabelText":[1,"screenshot-size-label-text"],"screenshotBorderLabelText":[1,"screenshot-border-label-text"],"screenshotEditTextPromptText":[1,"screenshot-edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"]}],[1,"feedback-modal",{"customFont":[4,"custom-font"],"emailAddress":[1,"email-address"],"hideEmail":[4,"hide-email"],"isEmailRequired":[4,"is-email-required"],"ratingMode":[1,"rating-mode"],"hasSelectedElement":[1540,"has-selected-element"],"hidePrivacyPolicy":[4,"hide-privacy-policy"],"hideRating":[4,"hide-rating"],"hideScreenshotButton":[4,"hide-screenshot-button"],"project":[1],"showScreenshotMode":[1540,"show-screenshot-mode"],"showScreenshotTopBar":[1540,"show-screenshot-top-bar"],"showModal":[1540,"show-modal"],"rating":[2],"metadata":[1],"fetchData":[4,"fetch-data"],"embedded":[4],"clickOutsideClose":[4,"click-outside-close"],"historyClose":[4,"history-close"],"emailPlaceholder":[1,"email-placeholder"],"errorMessage":[1,"error-message"],"errorMessage403":[1,"error-message-4-0-3"],"errorMessage404":[1,"error-message-4-0-4"],"messagePlaceholder":[1,"message-placeholder"],"footerText":[1,"footer-text"],"modalPosition":[1,"modal-position"],"modalTitle":[1,"modal-title"],"modalTitleError":[1,"modal-title-error"],"modalTitleSuccess":[1,"modal-title-success"],"privacyPolicyText":[1,"privacy-policy-text"],"ratingPlaceholder":[1,"rating-placeholder"],"ratingStarsPlaceholder":[1,"rating-stars-placeholder"],"sendButtonText":[1,"send-button-text"],"successMessage":[1,"success-message"],"recaptchaText":[1,"recaptcha-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotEditTextButtonText":[1,"screenshot-edit-text-button-text"],"screenshotEditorTitle":[1,"screenshot-editor-title"],"screenshotEditorCancelText":[1,"screenshot-editor-cancel-text"],"screenshotEditorSaveText":[1,"screenshot-editor-save-text"],"screenshotSizeLabelText":[1,"screenshot-size-label-text"],"screenshotBorderLabelText":[1,"screenshot-border-label-text"],"screenshotEditTextPromptText":[1,"screenshot-edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"],"sending":[32],"formMessage":[32],"formEmail":[32],"formSuccess":[32],"formVerification":[32],"formError":[32],"formErrorStatus":[32],"encodedScreenshot":[32],"isPrivacyChecked":[32],"whitelabel":[32],"selectedRating":[32],"overlayVisible":[32],"isAnimating":[32],"recaptchaEnabled":[32],"recaptchaSiteKey":[32],"takingScreenshot":[32],"showScreenshotError":[32],"screenshotError":[32],"showCanvasEditor":[32],"autoStartCapture":[32],"openModal":[64]}],[1,"canvas-editor",{"canvasEditorTitle":[1,"canvas-editor-title"],"canvasEditorCancelText":[1,"canvas-editor-cancel-text"],"canvasEditorSaveText":[1,"canvas-editor-save-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"autoStartScreenshot":[4,"auto-start-screenshot"],"existingScreenshot":[1,"existing-screenshot"],"editTextButtonText":[1,"edit-text-button-text"],"sizeLabelText":[1,"size-label-text"],"borderLabelText":[1,"border-label-text"],"editTextPromptText":[1,"edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"],"takingScreenshot":[32],"showCanvasEditor":[32],"canvasDrawingTool":[32],"canvasDrawingColor":[32],"canvasLineWidth":[32],"canvasTextSize":[32],"isDrawing":[32],"annotations":[32],"currentAnnotation":[32],"isDragging":[32],"draggedAnnotation":[32],"dragStartPos":[32],"showColorPicker":[32],"editingColorIndex":[32],"selectedAnnotation":[32],"isResizing":[32],"resizingAnnotation":[32],"resizeStartSize":[32],"resizeStartDimensions":[32],"hoveredAnnotation":[32],"resizeHandle":[32],"defaultColors":[32]}]]]], options);
|
|
20
|
+
return index.bootstrapLazy([["canvas-editor_3.cjs",[[1,"feedback-button",{"buttonPosition":[1,"button-position"],"buttonStyle":[1,"button-style"],"hideIcon":[4,"hide-icon"],"hideMobile":[4,"hide-mobile"],"sessionId":[1537,"session-id"],"metadata":[1],"submit":[4],"apiKey":[1,"api-key"],"clickOutsideClose":[4,"click-outside-close"],"customFont":[4,"custom-font"],"emailAddress":[1,"email-address"],"historyClose":[4,"history-close"],"isEmailRequired":[4,"is-email-required"],"fetchData":[4,"fetch-data"],"hideEmail":[4,"hide-email"],"hidePrivacyPolicy":[4,"hide-privacy-policy"],"hideRating":[4,"hide-rating"],"hideScreenshotButton":[4,"hide-screenshot-button"],"modalPosition":[1,"modal-position"],"project":[1],"rating":[2],"ratingMode":[1,"rating-mode"],"emailPlaceholder":[1,"email-placeholder"],"errorMessage":[1,"error-message"],"errorMessage401":[1,"error-message-4-0-1"],"errorMessage403":[1,"error-message-4-0-3"],"errorMessage404":[1,"error-message-4-0-4"],"footerText":[1,"footer-text"],"messagePlaceholder":[1,"message-placeholder"],"modalTitle":[1,"modal-title"],"modalTitleError":[1,"modal-title-error"],"modalTitleSuccess":[1,"modal-title-success"],"privacyPolicyText":[1,"privacy-policy-text"],"ratingPlaceholder":[1,"rating-placeholder"],"ratingStarsPlaceholder":[1,"rating-stars-placeholder"],"sendButtonText":[1,"send-button-text"],"successMessage":[1,"success-message"],"recaptchaText":[1,"recaptcha-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotEditTextButtonText":[1,"screenshot-edit-text-button-text"],"screenshotEditorTitle":[1,"screenshot-editor-title"],"screenshotEditorCancelText":[1,"screenshot-editor-cancel-text"],"screenshotEditorSaveText":[1,"screenshot-editor-save-text"],"screenshotSizeLabelText":[1,"screenshot-size-label-text"],"screenshotBorderLabelText":[1,"screenshot-border-label-text"],"screenshotEditTextPromptText":[1,"screenshot-edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"]}],[1,"feedback-modal",{"apiKey":[1,"api-key"],"customFont":[4,"custom-font"],"emailAddress":[1,"email-address"],"hideEmail":[4,"hide-email"],"isEmailRequired":[4,"is-email-required"],"ratingMode":[1,"rating-mode"],"hasSelectedElement":[1540,"has-selected-element"],"hidePrivacyPolicy":[4,"hide-privacy-policy"],"hideRating":[4,"hide-rating"],"hideScreenshotButton":[4,"hide-screenshot-button"],"project":[1],"showScreenshotMode":[1540,"show-screenshot-mode"],"showScreenshotTopBar":[1540,"show-screenshot-top-bar"],"showModal":[1540,"show-modal"],"rating":[2],"metadata":[1],"fetchData":[4,"fetch-data"],"embedded":[4],"clickOutsideClose":[4,"click-outside-close"],"historyClose":[4,"history-close"],"escapeClose":[4,"escape-close"],"emailPlaceholder":[1,"email-placeholder"],"errorMessage":[1,"error-message"],"errorMessage401":[1,"error-message-4-0-1"],"errorMessage403":[1,"error-message-4-0-3"],"errorMessage404":[1,"error-message-4-0-4"],"messagePlaceholder":[1,"message-placeholder"],"footerText":[1,"footer-text"],"modalPosition":[1,"modal-position"],"modalTitle":[1,"modal-title"],"modalTitleError":[1,"modal-title-error"],"modalTitleSuccess":[1,"modal-title-success"],"privacyPolicyText":[1,"privacy-policy-text"],"ratingPlaceholder":[1,"rating-placeholder"],"ratingStarsPlaceholder":[1,"rating-stars-placeholder"],"sendButtonText":[1,"send-button-text"],"closeButtonLabel":[1,"close-button-label"],"ratingPositiveLabel":[1,"rating-positive-label"],"ratingNegativeLabel":[1,"rating-negative-label"],"ratingStarLabel":[1,"rating-star-label"],"successMessage":[1,"success-message"],"recaptchaText":[1,"recaptcha-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotEditTextButtonText":[1,"screenshot-edit-text-button-text"],"screenshotEditorTitle":[1,"screenshot-editor-title"],"screenshotEditorCancelText":[1,"screenshot-editor-cancel-text"],"screenshotEditorSaveText":[1,"screenshot-editor-save-text"],"screenshotSizeLabelText":[1,"screenshot-size-label-text"],"screenshotBorderLabelText":[1,"screenshot-border-label-text"],"screenshotEditTextPromptText":[1,"screenshot-edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"],"sending":[32],"formMessage":[32],"formEmail":[32],"formSuccess":[32],"formVerification":[32],"formError":[32],"formErrorStatus":[32],"encodedScreenshot":[32],"isPrivacyChecked":[32],"whitelabel":[32],"selectedRating":[32],"overlayVisible":[32],"isAnimating":[32],"recaptchaEnabled":[32],"recaptchaSiteKey":[32],"takingScreenshot":[32],"showScreenshotError":[32],"screenshotError":[32],"showCanvasEditor":[32],"autoStartCapture":[32],"openModal":[64]}],[1,"canvas-editor",{"canvasEditorTitle":[1,"canvas-editor-title"],"canvasEditorCancelText":[1,"canvas-editor-cancel-text"],"canvasEditorSaveText":[1,"canvas-editor-save-text"],"screenshotTakingText":[1,"screenshot-taking-text"],"screenshotAttachedText":[1,"screenshot-attached-text"],"screenshotButtonText":[1,"screenshot-button-text"],"escapeClose":[4,"escape-close"],"clickOutsideClose":[4,"click-outside-close"],"autoStartScreenshot":[4,"auto-start-screenshot"],"existingScreenshot":[1,"existing-screenshot"],"editTextButtonText":[1,"edit-text-button-text"],"sizeLabelText":[1,"size-label-text"],"borderLabelText":[1,"border-label-text"],"editTextPromptText":[1,"edit-text-prompt-text"],"screenshotErrorGeneral":[1,"screenshot-error-general"],"screenshotErrorPermission":[1,"screenshot-error-permission"],"screenshotErrorNotSupported":[1,"screenshot-error-not-supported"],"screenshotErrorNotFound":[1,"screenshot-error-not-found"],"screenshotErrorCancelled":[1,"screenshot-error-cancelled"],"screenshotErrorBrowserNotSupported":[1,"screenshot-error-browser-not-supported"],"screenshotErrorUnexpected":[1,"screenshot-error-unexpected"],"takingScreenshot":[32],"showCanvasEditor":[32],"canvasDrawingTool":[32],"canvasDrawingColor":[32],"canvasLineWidth":[32],"canvasTextSize":[32],"isDrawing":[32],"annotations":[32],"currentAnnotation":[32],"isDragging":[32],"draggedAnnotation":[32],"dragStartPos":[32],"showColorPicker":[32],"editingColorIndex":[32],"selectedAnnotation":[32],"isResizing":[32],"resizingAnnotation":[32],"resizeStartSize":[32],"resizeStartDimensions":[32],"hoveredAnnotation":[32],"resizeHandle":[32],"defaultColors":[32]}]]]], options);
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
exports.setNonce = index.setNonce;
|
|
@@ -1,6 +1,53 @@
|
|
|
1
1
|
import { h } from '@stencil/core';
|
|
2
|
+
// Upper bound on waiting for the capture stream to produce video metadata,
|
|
3
|
+
// after which the stream is stopped so it cannot leak
|
|
4
|
+
const CAPTURE_TIMEOUT_MS = 10000;
|
|
2
5
|
export class CanvasEditor {
|
|
3
6
|
constructor() {
|
|
7
|
+
this.handleKeyDown = (event) => {
|
|
8
|
+
if (!this.showCanvasEditor || !this.escapeClose || event.key !== 'Escape') {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
// While the browser is capturing the screen, the picker owns the keyboard
|
|
12
|
+
if (this.takingScreenshot) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
event.preventDefault();
|
|
16
|
+
// The colour picker is a popup on top of the editor, so Escape dismisses
|
|
17
|
+
// that first and leaves the editor (and any annotations) in place
|
|
18
|
+
if (this.showColorPicker) {
|
|
19
|
+
this.showColorPicker = false;
|
|
20
|
+
this.editingColorIndex = -1;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// Deselect before closing, the way drawing tools do. Closing throws away
|
|
24
|
+
// every annotation, so someone who has just selected one gets a cheap
|
|
25
|
+
// Escape that only drops the selection rather than their work
|
|
26
|
+
if (this.selectedAnnotation) {
|
|
27
|
+
this.selectedAnnotation = null;
|
|
28
|
+
this.redrawAnnotations();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Same as the Cancel button: discards annotations and returns to the form
|
|
32
|
+
this.closeCanvasEditor();
|
|
33
|
+
};
|
|
34
|
+
// Tracks whether the press that started this click landed on the backdrop.
|
|
35
|
+
// Dragging an annotation and releasing past the edge of the editor fires a
|
|
36
|
+
// click on the backdrop too, and that must not be read as "clicked outside".
|
|
37
|
+
this.pressStartedOnOverlay = false;
|
|
38
|
+
this.handleOverlayMouseDown = (event) => {
|
|
39
|
+
this.pressStartedOnOverlay = event.target === event.currentTarget;
|
|
40
|
+
};
|
|
41
|
+
this.handleOverlayClick = (event) => {
|
|
42
|
+
const startedOutside = this.pressStartedOnOverlay;
|
|
43
|
+
this.pressStartedOnOverlay = false;
|
|
44
|
+
if (!this.clickOutsideClose || !startedOutside || event.target !== event.currentTarget) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Closes the editor only. The feedback form reopens behind it, so a stray
|
|
48
|
+
// click never dismisses the whole widget
|
|
49
|
+
this.closeCanvasEditor();
|
|
50
|
+
};
|
|
4
51
|
this.handleWindowResize = () => {
|
|
5
52
|
// Debounce resize events
|
|
6
53
|
if (this.resizeTimeout) {
|
|
@@ -680,8 +727,16 @@ export class CanvasEditor {
|
|
|
680
727
|
if (!this.isDrawing || !this.currentAnnotation)
|
|
681
728
|
return;
|
|
682
729
|
this.isDrawing = false;
|
|
683
|
-
|
|
730
|
+
const annotation = this.currentAnnotation;
|
|
684
731
|
this.currentAnnotation = null;
|
|
732
|
+
// A click with no drag never reaches mousemove, so the shape has no end
|
|
733
|
+
// point or size. Committing it added an invisible annotation that could
|
|
734
|
+
// not be selected, dragged or deleted, and it still consumed an undo step.
|
|
735
|
+
if (this.isDegenerateAnnotation(annotation)) {
|
|
736
|
+
this.redrawAnnotations();
|
|
737
|
+
return;
|
|
738
|
+
}
|
|
739
|
+
this.annotations = [...this.annotations, annotation];
|
|
685
740
|
this.redrawAnnotations();
|
|
686
741
|
};
|
|
687
742
|
// Convert screen coordinates to canvas coordinates
|
|
@@ -723,11 +778,28 @@ export class CanvasEditor {
|
|
|
723
778
|
}
|
|
724
779
|
case 'line':
|
|
725
780
|
case 'arrow': {
|
|
726
|
-
// Distance from point to line
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
781
|
+
// Distance from the point to the line *segment*, not to the infinite
|
|
782
|
+
// line through it. The previous formula measured the infinite line, so
|
|
783
|
+
// a click far past either end still counted as a hit, and a zero-length
|
|
784
|
+
// segment divided by zero and gave NaN, leaving that annotation
|
|
785
|
+
// impossible to select, drag or delete.
|
|
786
|
+
// A click with no drag never reaches mousemove, so endX/endY are
|
|
787
|
+
// undefined rather than equal to the start. Treat that as a segment
|
|
788
|
+
// collapsed to its start point instead of letting NaN propagate.
|
|
789
|
+
const endX = Number.isFinite(annotation.endX) ? annotation.endX : annotation.startX;
|
|
790
|
+
const endY = Number.isFinite(annotation.endY) ? annotation.endY : annotation.startY;
|
|
791
|
+
const dx = endX - annotation.startX;
|
|
792
|
+
const dy = endY - annotation.startY;
|
|
793
|
+
const lengthSquared = dx * dx + dy * dy;
|
|
794
|
+
// Zero-length segment: t stays 0 and we measure to the single point
|
|
795
|
+
let t = 0;
|
|
796
|
+
if (lengthSquared > 0) {
|
|
797
|
+
t = ((x - annotation.startX) * dx + (y - annotation.startY) * dy) / lengthSquared;
|
|
798
|
+
t = Math.max(0, Math.min(1, t));
|
|
799
|
+
}
|
|
800
|
+
const closestX = annotation.startX + t * dx;
|
|
801
|
+
const closestY = annotation.startY + t * dy;
|
|
802
|
+
const distance = Math.hypot(x - closestX, y - closestY);
|
|
731
803
|
return distance <= tolerance;
|
|
732
804
|
}
|
|
733
805
|
case 'text': {
|
|
@@ -752,6 +824,8 @@ export class CanvasEditor {
|
|
|
752
824
|
this.screenshotTakingText = 'Taking screenshot...';
|
|
753
825
|
this.screenshotAttachedText = 'Screenshot attached';
|
|
754
826
|
this.screenshotButtonText = 'Add a screenshot';
|
|
827
|
+
this.escapeClose = true;
|
|
828
|
+
this.clickOutsideClose = true;
|
|
755
829
|
this.autoStartScreenshot = false;
|
|
756
830
|
this.existingScreenshot = '';
|
|
757
831
|
this.editTextButtonText = 'Edit Text';
|
|
@@ -807,10 +881,12 @@ export class CanvasEditor {
|
|
|
807
881
|
// Add window resize listener for canvas adaptation
|
|
808
882
|
this.handleWindowResize = this.handleWindowResize.bind(this);
|
|
809
883
|
window.addEventListener('resize', this.handleWindowResize);
|
|
884
|
+
document.addEventListener('keydown', this.handleKeyDown);
|
|
810
885
|
}
|
|
811
886
|
disconnectedCallback() {
|
|
812
887
|
// Clean up resize listener
|
|
813
888
|
window.removeEventListener('resize', this.handleWindowResize);
|
|
889
|
+
document.removeEventListener('keydown', this.handleKeyDown);
|
|
814
890
|
}
|
|
815
891
|
async captureViewportScreenshot() {
|
|
816
892
|
try {
|
|
@@ -834,6 +910,30 @@ export class CanvasEditor {
|
|
|
834
910
|
video.autoplay = true;
|
|
835
911
|
video.muted = true;
|
|
836
912
|
return new Promise((resolve, reject) => {
|
|
913
|
+
// If neither onloadedmetadata nor onerror ever fires, the promise would
|
|
914
|
+
// never settle: the capture stream would stay live with the browser's
|
|
915
|
+
// recording indicator on, and the widget would sit in "Taking
|
|
916
|
+
// screenshot..." forever with no way back short of a page reload.
|
|
917
|
+
let settled = false;
|
|
918
|
+
const stopStream = () => {
|
|
919
|
+
stream.getTracks().forEach((track) => track.stop());
|
|
920
|
+
};
|
|
921
|
+
const finish = (fn) => {
|
|
922
|
+
if (settled) {
|
|
923
|
+
return;
|
|
924
|
+
}
|
|
925
|
+
settled = true;
|
|
926
|
+
clearTimeout(watchdog);
|
|
927
|
+
video.onloadedmetadata = null;
|
|
928
|
+
video.onerror = null;
|
|
929
|
+
fn();
|
|
930
|
+
};
|
|
931
|
+
const watchdog = setTimeout(() => {
|
|
932
|
+
finish(() => {
|
|
933
|
+
stopStream();
|
|
934
|
+
reject(new Error('Screenshot capture timed out'));
|
|
935
|
+
});
|
|
936
|
+
}, CAPTURE_TIMEOUT_MS);
|
|
837
937
|
video.onloadedmetadata = () => {
|
|
838
938
|
video.play();
|
|
839
939
|
// Wait a moment for video to stabilize
|
|
@@ -845,22 +945,26 @@ export class CanvasEditor {
|
|
|
845
945
|
canvas.height = video.videoHeight;
|
|
846
946
|
const ctx = canvas.getContext('2d');
|
|
847
947
|
ctx.drawImage(video, 0, 0);
|
|
848
|
-
// Stop the stream
|
|
849
|
-
stream.getTracks().forEach((track) => track.stop());
|
|
850
948
|
// Convert to data URL
|
|
851
949
|
const dataUrl = canvas.toDataURL('image/png');
|
|
852
|
-
|
|
853
|
-
|
|
950
|
+
finish(() => {
|
|
951
|
+
stopStream();
|
|
952
|
+
resolve(dataUrl);
|
|
953
|
+
});
|
|
854
954
|
}
|
|
855
955
|
catch (error) {
|
|
856
|
-
|
|
857
|
-
|
|
956
|
+
finish(() => {
|
|
957
|
+
stopStream();
|
|
958
|
+
reject(error);
|
|
959
|
+
});
|
|
858
960
|
}
|
|
859
961
|
}, 100);
|
|
860
962
|
};
|
|
861
963
|
video.onerror = () => {
|
|
862
|
-
|
|
863
|
-
|
|
964
|
+
finish(() => {
|
|
965
|
+
stopStream();
|
|
966
|
+
reject(new Error('Failed to load video for screenshot capture'));
|
|
967
|
+
});
|
|
864
968
|
};
|
|
865
969
|
});
|
|
866
970
|
}
|
|
@@ -869,9 +973,27 @@ export class CanvasEditor {
|
|
|
869
973
|
throw error;
|
|
870
974
|
}
|
|
871
975
|
}
|
|
976
|
+
// Whether a freshly drawn shape is too small to be worth keeping
|
|
977
|
+
isDegenerateAnnotation(annotation) {
|
|
978
|
+
const MIN_SIZE = 2; // canvas pixels
|
|
979
|
+
if (annotation.type === 'line' || annotation.type === 'arrow') {
|
|
980
|
+
if (!Number.isFinite(annotation.endX) || !Number.isFinite(annotation.endY)) {
|
|
981
|
+
return true;
|
|
982
|
+
}
|
|
983
|
+
return (Math.hypot(annotation.endX - annotation.startX, annotation.endY - annotation.startY) <
|
|
984
|
+
MIN_SIZE);
|
|
985
|
+
}
|
|
986
|
+
if (annotation.type === 'rectangle') {
|
|
987
|
+
if (!Number.isFinite(annotation.width) || !Number.isFinite(annotation.height)) {
|
|
988
|
+
return true;
|
|
989
|
+
}
|
|
990
|
+
return Math.abs(annotation.width) < MIN_SIZE && Math.abs(annotation.height) < MIN_SIZE;
|
|
991
|
+
}
|
|
992
|
+
return false;
|
|
993
|
+
}
|
|
872
994
|
render() {
|
|
873
995
|
var _a, _b, _c, _d, _e, _f;
|
|
874
|
-
return (h("div", { class: "canvas-editor-wrapper" }, this.showCanvasEditor && (h("div", { class: "canvas-editor-overlay", part: "overlay" }, h("div", { class: "canvas-editor-modal", part: "modal" }, h("div", { class: "canvas-editor-header", part: "header" }, h("div", { class: "canvas-editor-title", part: "title" }, h("h3",
|
|
996
|
+
return (h("div", { class: "canvas-editor-wrapper" }, this.showCanvasEditor && (h("div", { class: "canvas-editor-overlay", part: "overlay", onMouseDown: this.handleOverlayMouseDown, onClick: this.handleOverlayClick }, h("div", { class: "canvas-editor-modal", part: "modal", role: "dialog", "aria-modal": "true", "aria-labelledby": "canvas-editor-title" }, h("div", { class: "canvas-editor-header", part: "header" }, h("div", { class: "canvas-editor-title", part: "title" }, h("h3", { id: "canvas-editor-title" }, this.canvasEditorTitle)), h("div", { class: "canvas-editor-toolbar", part: "toolbar" }, h("div", { class: "toolbar-section" }, h("div", { class: "tool-group" }, h("button", { class: `tool-btn ${this.canvasDrawingTool === 'rectangle' ? 'active' : ''}`, part: "tool-button", onClick: () => (this.canvasDrawingTool = 'rectangle'), title: "Rectangle" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "lucide lucide-square" }, h("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }))), h("button", { class: `tool-btn ${this.canvasDrawingTool === 'line' ? 'active' : ''}`, part: "tool-button", onClick: () => (this.canvasDrawingTool = 'line'), title: "Line" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "lucide lucide-minus" }, h("path", { d: "M5 12h14" }))), h("button", { class: `tool-btn ${this.canvasDrawingTool === 'arrow' ? 'active' : ''}`, part: "tool-button", onClick: () => (this.canvasDrawingTool = 'arrow'), title: "Arrow" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "lucide lucide-move-up-right" }, h("path", { d: "M13 5H19V11" }), h("path", { d: "M19 5L5 19" }))), h("button", { class: `tool-btn ${this.canvasDrawingTool === 'text' ? 'active' : ''}`, part: "tool-button", onClick: () => (this.canvasDrawingTool = 'text'), title: "Text" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "lucide lucide-type" }, h("path", { d: "M12 4v16" }), h("path", { d: "M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2" }), h("path", { d: "M9 20h6" }))), h("div", { class: "toolbar-divider" }), h("button", { class: "tool-btn undo-btn", part: "tool-button", onClick: this.undoLastAnnotation, disabled: this.annotations.length === 0, title: "Undo" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "lucide lucide-undo" }, h("path", { d: "M3 7v6h6" }), h("path", { d: "M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13" }))), this.selectedAnnotation && (h("button", { class: "tool-btn delete-btn", part: "tool-button", onClick: this.deleteSelectedAnnotation, title: "Delete" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "lucide lucide-trash-2" }, h("path", { d: "M3 6h18" }), h("path", { d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" }), h("path", { d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" }), h("line", { x1: "10", x2: "10", y1: "11", y2: "17" }), h("line", { x1: "14", x2: "14", y1: "11", y2: "17" })))))), h("div", { class: "toolbar-section" }, h("div", { class: "color-palette" }, this.defaultColors.map((color, index) => (h("div", { class: "color-slot-wrapper" }, h("button", { class: `color-btn ${this.canvasDrawingColor === color ? 'active' : ''} ${this.editingColorIndex === index ? 'editing' : ''}`, style: { backgroundColor: color }, onClick: () => this.handleColorSlotClick(index), title: `Color ${index + 1} - Click to customize` }, this.editingColorIndex === index && (h("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "white", "stroke-width": "2" }, h("path", { d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" })))), this.editingColorIndex === index && this.showColorPicker && (h("div", { class: "color-picker-dropdown" }, h("input", { type: "color", value: color, onInput: (e) => this.handleColorPickerInput(e), onClick: (e) => this.handleColorPickerClick(e) })))))))), (this.selectedAnnotation || this.canvasDrawingTool) && (h("div", { class: "toolbar-section selected-annotation-controls" }, (((_a = this.selectedAnnotation) === null || _a === void 0 ? void 0 : _a.type) === 'text' ||
|
|
875
997
|
(!this.selectedAnnotation && this.canvasDrawingTool === 'text')) && (h("div", { class: "text-controls" }, h("div", { class: "font-size-control" }, h("label", null, this.sizeLabelText), h("input", { type: "range", min: "8", max: "72", value: ((_b = this.selectedAnnotation) === null || _b === void 0 ? void 0 : _b.fontSize) || this.canvasTextSize, onInput: (e) => {
|
|
876
998
|
const newSize = parseInt(e.target.value);
|
|
877
999
|
if (this.selectedAnnotation) {
|
|
@@ -1014,6 +1136,42 @@ export class CanvasEditor {
|
|
|
1014
1136
|
"reflect": false,
|
|
1015
1137
|
"defaultValue": "'Add a screenshot'"
|
|
1016
1138
|
},
|
|
1139
|
+
"escapeClose": {
|
|
1140
|
+
"type": "boolean",
|
|
1141
|
+
"mutable": false,
|
|
1142
|
+
"complexType": {
|
|
1143
|
+
"original": "boolean",
|
|
1144
|
+
"resolved": "boolean",
|
|
1145
|
+
"references": {}
|
|
1146
|
+
},
|
|
1147
|
+
"required": false,
|
|
1148
|
+
"optional": false,
|
|
1149
|
+
"docs": {
|
|
1150
|
+
"tags": [],
|
|
1151
|
+
"text": ""
|
|
1152
|
+
},
|
|
1153
|
+
"attribute": "escape-close",
|
|
1154
|
+
"reflect": false,
|
|
1155
|
+
"defaultValue": "true"
|
|
1156
|
+
},
|
|
1157
|
+
"clickOutsideClose": {
|
|
1158
|
+
"type": "boolean",
|
|
1159
|
+
"mutable": false,
|
|
1160
|
+
"complexType": {
|
|
1161
|
+
"original": "boolean",
|
|
1162
|
+
"resolved": "boolean",
|
|
1163
|
+
"references": {}
|
|
1164
|
+
},
|
|
1165
|
+
"required": false,
|
|
1166
|
+
"optional": false,
|
|
1167
|
+
"docs": {
|
|
1168
|
+
"tags": [],
|
|
1169
|
+
"text": ""
|
|
1170
|
+
},
|
|
1171
|
+
"attribute": "click-outside-close",
|
|
1172
|
+
"reflect": false,
|
|
1173
|
+
"defaultValue": "true"
|
|
1174
|
+
},
|
|
1017
1175
|
"autoStartScreenshot": {
|
|
1018
1176
|
"type": "boolean",
|
|
1019
1177
|
"mutable": false,
|
|
@@ -4,6 +4,20 @@
|
|
|
4
4
|
letter-spacing: var(--feedback-button-letter-spacing);
|
|
5
5
|
z-index: var(--feedback-button-z-index);
|
|
6
6
|
font-family: var(--feedback-font-family);
|
|
7
|
+
|
|
8
|
+
/* The trigger is a real <button> so it is keyboard reachable. Strip the
|
|
9
|
+
user-agent button styling so the default variant stays plain text; the
|
|
10
|
+
--light and --dark variants below re-apply their own background,
|
|
11
|
+
padding and colour. */
|
|
12
|
+
background: none;
|
|
13
|
+
border: none;
|
|
14
|
+
margin: 0;
|
|
15
|
+
padding: 0;
|
|
16
|
+
color: inherit;
|
|
17
|
+
font-size: inherit;
|
|
18
|
+
font-weight: inherit;
|
|
19
|
+
line-height: inherit;
|
|
20
|
+
text-align: inherit;
|
|
7
21
|
}
|
|
8
22
|
|
|
9
23
|
.feedback-button-content--custom-font {
|
|
@@ -51,14 +65,40 @@
|
|
|
51
65
|
right: 10px;
|
|
52
66
|
}
|
|
53
67
|
|
|
68
|
+
.feedback-button-content--bottom-left{
|
|
69
|
+
bottom: 10px;
|
|
70
|
+
left: 10px;
|
|
71
|
+
position: fixed;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.feedback-button-content--top-right{
|
|
75
|
+
position: fixed;
|
|
76
|
+
right: 10px;
|
|
77
|
+
top: 10px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.feedback-button-content--top-left{
|
|
81
|
+
left: 10px;
|
|
82
|
+
position: fixed;
|
|
83
|
+
top: 10px;
|
|
84
|
+
}
|
|
85
|
+
|
|
54
86
|
.feedback-button-content--center-right{
|
|
55
87
|
position: fixed;
|
|
56
88
|
transform: rotate(-90deg) translateY(-50%);
|
|
57
89
|
top: 50%;
|
|
58
90
|
}
|
|
59
91
|
|
|
92
|
+
.feedback-button-content--center-left{
|
|
93
|
+
position: fixed;
|
|
94
|
+
transform: rotate(90deg) translateY(-50%);
|
|
95
|
+
top: 50%;
|
|
96
|
+
}
|
|
97
|
+
|
|
60
98
|
.feedback-button-content--center-right.feedback-button-content--dark,
|
|
61
|
-
.feedback-button-content--center-right.feedback-button-content--light
|
|
99
|
+
.feedback-button-content--center-right.feedback-button-content--light,
|
|
100
|
+
.feedback-button-content--center-left.feedback-button-content--dark,
|
|
101
|
+
.feedback-button-content--center-left.feedback-button-content--light {
|
|
62
102
|
border-radius: 4px;
|
|
63
103
|
border-bottom-left-radius: 0px;
|
|
64
104
|
border-bottom-right-radius: 0px;
|
|
@@ -75,6 +115,10 @@
|
|
|
75
115
|
rotate: 90deg;
|
|
76
116
|
}
|
|
77
117
|
|
|
118
|
+
.feedback-button-content--center-left .feedback-button-content-icon {
|
|
119
|
+
rotate: -90deg;
|
|
120
|
+
}
|
|
121
|
+
|
|
78
122
|
@media screen and (max-width: 767px) {
|
|
79
123
|
.feedback-button-content--hide-mobile {
|
|
80
124
|
display: none;
|
|
@@ -8,6 +8,7 @@ export class FeedbackButton {
|
|
|
8
8
|
this.sessionId = '';
|
|
9
9
|
this.metadata = '';
|
|
10
10
|
this.submit = false;
|
|
11
|
+
this.apiKey = '';
|
|
11
12
|
this.clickOutsideClose = true;
|
|
12
13
|
this.customFont = false;
|
|
13
14
|
this.emailAddress = '';
|
|
@@ -24,6 +25,7 @@ export class FeedbackButton {
|
|
|
24
25
|
this.ratingMode = 'thumbs';
|
|
25
26
|
this.emailPlaceholder = 'Email address (optional)';
|
|
26
27
|
this.errorMessage = 'Please try again later.';
|
|
28
|
+
this.errorMessage401 = 'This project requires a valid API key to submit feedback. Check the api-key attribute.';
|
|
27
29
|
this.errorMessage403 = 'The request URL does not match the one defined in PushFeedback for this project.';
|
|
28
30
|
this.errorMessage404 = 'We could not find the provided project id in PushFeedback.';
|
|
29
31
|
this.footerText = '';
|
|
@@ -69,13 +71,19 @@ export class FeedbackButton {
|
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
componentDidLoad() {
|
|
72
|
-
if (this.buttonPosition === 'center-right') {
|
|
74
|
+
if (this.buttonPosition === 'center-right' || this.buttonPosition === 'center-left') {
|
|
73
75
|
const buttonContent = this.el.shadowRoot.querySelector('.feedback-button-content');
|
|
74
76
|
let adjustement = 0;
|
|
75
77
|
if (this.isSafariBrowser()) {
|
|
76
78
|
adjustement = 5;
|
|
77
79
|
}
|
|
78
|
-
|
|
80
|
+
const offset = `${((buttonContent.offsetWidth + adjustement) / 2) * -1}px`;
|
|
81
|
+
if (this.buttonPosition === 'center-right') {
|
|
82
|
+
buttonContent.style.right = offset;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
buttonContent.style.left = offset;
|
|
86
|
+
}
|
|
79
87
|
}
|
|
80
88
|
if (!this.customFont) {
|
|
81
89
|
this.loadInterFont();
|
|
@@ -84,6 +92,7 @@ export class FeedbackButton {
|
|
|
84
92
|
connectedCallback() {
|
|
85
93
|
this.feedbackModal = document.createElement('feedback-modal');
|
|
86
94
|
const props = [
|
|
95
|
+
'apiKey',
|
|
87
96
|
'clickOutsideClose',
|
|
88
97
|
'customFont',
|
|
89
98
|
'emailAddress',
|
|
@@ -114,6 +123,7 @@ export class FeedbackButton {
|
|
|
114
123
|
'screenshotErrorUnexpected',
|
|
115
124
|
'emailPlaceholder',
|
|
116
125
|
'errorMessage',
|
|
126
|
+
'errorMessage401',
|
|
117
127
|
'errorMessage403',
|
|
118
128
|
'errorMessage404',
|
|
119
129
|
'footerText',
|
|
@@ -178,12 +188,16 @@ export class FeedbackButton {
|
|
|
178
188
|
}
|
|
179
189
|
}
|
|
180
190
|
const body = Object.assign({ url: window.location.href, project: this.project, rating: this.rating || -1, ratingMode: this.ratingMode, message: '', metadata: this.metadata, session: localStorage.getItem('pushfeedback_sessionid') || '' }, (recaptchaToken && { recaptchaToken }));
|
|
181
|
-
const
|
|
191
|
+
const headers = {
|
|
192
|
+
'Content-Type': 'application/json',
|
|
193
|
+
};
|
|
194
|
+
if (this.apiKey) {
|
|
195
|
+
headers['Authorization'] = `Api-Key ${this.apiKey}`;
|
|
196
|
+
}
|
|
197
|
+
const res = await fetch('https://app.pushfeedback.com/api/v1/feedback/', {
|
|
182
198
|
method: 'POST',
|
|
183
199
|
body: JSON.stringify(body),
|
|
184
|
-
headers
|
|
185
|
-
'Content-Type': 'application/json',
|
|
186
|
-
},
|
|
200
|
+
headers,
|
|
187
201
|
});
|
|
188
202
|
if (res.status === 201) {
|
|
189
203
|
const feedback_with_id = Object.assign(Object.assign({}, body), { id: await res.json() });
|
|
@@ -214,7 +228,7 @@ export class FeedbackButton {
|
|
|
214
228
|
}
|
|
215
229
|
}
|
|
216
230
|
render() {
|
|
217
|
-
return (h(Host, null, h("
|
|
231
|
+
return (h(Host, null, h("button", { type: "button", class: `feedback-button-content feedback-button-content--${this.buttonStyle} feedback-button-content--${this.buttonPosition} ${this.customFont ? 'feedback-button-content--custom-font' : ''} ${this.hideMobile ? 'feedback-button-content--hide-mobile' : ''}`, part: "button", onClick: () => this.showModal() }, !this.hideIcon && this.buttonStyle != 'default' && (h("span", { class: "feedback-button-content-icon", part: "icon" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "#fff", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "icon-edit" }, h("path", { d: "M12 20h9" }), h("path", { d: "M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z" })))), h("slot", null))));
|
|
218
232
|
}
|
|
219
233
|
static get is() { return "feedback-button"; }
|
|
220
234
|
static get encapsulation() { return "shadow"; }
|
|
@@ -242,7 +256,7 @@ export class FeedbackButton {
|
|
|
242
256
|
"optional": false,
|
|
243
257
|
"docs": {
|
|
244
258
|
"tags": [],
|
|
245
|
-
"text": ""
|
|
259
|
+
"text": "Position of the button on the page. Valid values: `default`, `bottom-right`, `bottom-left`, `top-right`, `top-left`, `center-right` (vertical tab on the right edge) and `center-left` (vertical tab on the left edge). Any other value behaves like `default`."
|
|
246
260
|
},
|
|
247
261
|
"attribute": "button-position",
|
|
248
262
|
"reflect": false,
|
|
@@ -356,6 +370,24 @@ export class FeedbackButton {
|
|
|
356
370
|
"reflect": false,
|
|
357
371
|
"defaultValue": "false"
|
|
358
372
|
},
|
|
373
|
+
"apiKey": {
|
|
374
|
+
"type": "string",
|
|
375
|
+
"mutable": false,
|
|
376
|
+
"complexType": {
|
|
377
|
+
"original": "string",
|
|
378
|
+
"resolved": "string",
|
|
379
|
+
"references": {}
|
|
380
|
+
},
|
|
381
|
+
"required": false,
|
|
382
|
+
"optional": false,
|
|
383
|
+
"docs": {
|
|
384
|
+
"tags": [],
|
|
385
|
+
"text": "Optional API key sent with feedback submissions, for projects that\nrequire one. Sent as `Authorization: Api-Key <key>` on the feedback POST\nrequest only, never on the public config request. Only use keys scoped to\n`feedback:submit`: like any credential used by an embedded widget, the\nvalue is part of the page and readable by any script running on it, so it\nprovides server-side scoping and traceability rather than client-side\nsecrecy. Intended for internal or access-controlled pages."
|
|
386
|
+
},
|
|
387
|
+
"attribute": "api-key",
|
|
388
|
+
"reflect": false,
|
|
389
|
+
"defaultValue": "''"
|
|
390
|
+
},
|
|
359
391
|
"clickOutsideClose": {
|
|
360
392
|
"type": "boolean",
|
|
361
393
|
"mutable": false,
|
|
@@ -643,6 +675,24 @@ export class FeedbackButton {
|
|
|
643
675
|
"reflect": false,
|
|
644
676
|
"defaultValue": "'Please try again later.'"
|
|
645
677
|
},
|
|
678
|
+
"errorMessage401": {
|
|
679
|
+
"type": "string",
|
|
680
|
+
"mutable": false,
|
|
681
|
+
"complexType": {
|
|
682
|
+
"original": "string",
|
|
683
|
+
"resolved": "string",
|
|
684
|
+
"references": {}
|
|
685
|
+
},
|
|
686
|
+
"required": false,
|
|
687
|
+
"optional": false,
|
|
688
|
+
"docs": {
|
|
689
|
+
"tags": [],
|
|
690
|
+
"text": ""
|
|
691
|
+
},
|
|
692
|
+
"attribute": "error-message-4-0-1",
|
|
693
|
+
"reflect": false,
|
|
694
|
+
"defaultValue": "'This project requires a valid API key to submit feedback. Check the api-key attribute.'"
|
|
695
|
+
},
|
|
646
696
|
"errorMessage403": {
|
|
647
697
|
"type": "string",
|
|
648
698
|
"mutable": false,
|
|
@@ -70,6 +70,12 @@
|
|
|
70
70
|
opacity: 1;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
/* The dialog receives programmatic focus on open so screen readers announce its
|
|
74
|
+
title; it is not a control, so it should not paint a focus ring */
|
|
75
|
+
.feedback-modal-content:focus {
|
|
76
|
+
outline: none;
|
|
77
|
+
}
|
|
78
|
+
|
|
73
79
|
.feedback-modal-header {
|
|
74
80
|
color: var(--feedback-modal-header-text-color);
|
|
75
81
|
display: flex;
|