@feathery/react 2.6.8 → 2.7.1
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/Form/components/AIExtractionToast/ExtractionItem.d.ts +5 -5
- package/dist/Form/components/AIExtractionToast/icons.d.ts +7 -7
- package/dist/Form/components/AIExtractionToast/index.d.ts +8 -8
- package/dist/Form/components/AIExtractionToast/useAIExtractionToast.d.ts +64 -64
- package/dist/Form/components/DevNavBar.d.ts +1 -1
- package/dist/Form/components/ReactPortal.d.ts +2 -2
- package/dist/Form/definitions.d.ts +40 -40
- package/dist/Form/grid/CalendlyEmbed.d.ts +1 -1
- package/dist/Form/grid/Container/index.d.ts +19 -19
- package/dist/Form/grid/Element/index.d.ts +2 -2
- package/dist/Form/grid/Element/utils/address.d.ts +3 -3
- package/dist/Form/grid/Element/utils/utils.d.ts +13 -13
- package/dist/Form/grid/StyledContainer/hooks/index.d.ts +20 -20
- package/dist/Form/grid/StyledContainer/hooks/useFixedContainer.d.ts +1 -1
- package/dist/Form/grid/StyledContainer/index.d.ts +21 -21
- package/dist/Form/grid/StyledContainer/styles.d.ts +5 -5
- package/dist/Form/grid/StyledContainer/transform.d.ts +4 -4
- package/dist/Form/grid/StyledContainer/utils.d.ts +44 -44
- package/dist/Form/grid/index.d.ts +2 -2
- package/dist/Form/hooks/useCheckButtonAction.d.ts +6 -6
- package/dist/Form/hooks/useTrackUserInteraction.d.ts +2 -2
- package/dist/Form/index.d.ts +52 -52
- package/dist/Form/logic.d.ts +10 -10
- package/dist/Form/tests/testMocks.d.ts +6 -6
- package/dist/auth/LoginError.d.ts +3 -3
- package/dist/auth/LoginForm.d.ts +29 -29
- package/dist/auth/internal/AuthIntegrationInterface.d.ts +31 -31
- package/dist/auth/internal/useFormAuth.d.ts +10 -10
- package/dist/auth/internal/utils.d.ts +13 -13
- package/dist/auth/useAuthClient.d.ts +2 -2
- package/dist/auth/utils.d.ts +1 -1
- package/dist/elements/basic/ButtonElement.d.ts +2 -2
- package/dist/elements/basic/ImageElement.d.ts +3 -3
- package/dist/elements/basic/ProgressBarElement/components/SegmentBar.d.ts +2 -2
- package/dist/elements/basic/ProgressBarElement/components/SmoothBar.d.ts +2 -2
- package/dist/elements/basic/ProgressBarElement/index.d.ts +2 -2
- package/dist/elements/basic/TextElement.d.ts +2 -2
- package/dist/elements/basic/VideoElement.d.ts +2 -2
- package/dist/elements/components/ErrorInput.d.ts +2 -2
- package/dist/elements/components/FormControl.d.ts +10 -10
- package/dist/elements/components/FormOff.d.ts +10 -10
- package/dist/elements/components/InlineTooltip.d.ts +11 -11
- package/dist/elements/components/LoaderContainer.d.ts +10 -10
- package/dist/elements/components/Lottie.d.ts +2 -2
- package/dist/elements/components/Overlay.d.ts +15 -15
- package/dist/elements/components/Placeholder.d.ts +1 -1
- package/dist/elements/components/QuikFormViewer/transforms/form.d.ts +1 -1
- package/dist/elements/components/QuikFormViewer/transforms/header.d.ts +1 -1
- package/dist/elements/components/QuikFormViewer/transforms/sidebar.d.ts +6 -6
- package/dist/elements/components/QuikFormViewer.d.ts +9 -9
- package/dist/elements/components/Spinner.d.ts +4 -4
- package/dist/elements/components/TextHoverTooltip.d.ts +8 -8
- package/dist/elements/components/TextNodes.d.ts +4 -4
- package/dist/elements/components/Tooltip.d.ts +7 -7
- package/dist/elements/components/Watermark.d.ts +1 -1
- package/dist/elements/components/data/countries.d.ts +14 -14
- package/dist/elements/components/data/states/ae.d.ts +5 -5
- package/dist/elements/components/data/states/au.d.ts +5 -5
- package/dist/elements/components/data/states/br.d.ts +5 -5
- package/dist/elements/components/data/states/ca.d.ts +5 -5
- package/dist/elements/components/data/states/cl.d.ts +5 -5
- package/dist/elements/components/data/states/cn.d.ts +5 -5
- package/dist/elements/components/data/states/co.d.ts +5 -5
- package/dist/elements/components/data/states/eg.d.ts +5 -5
- package/dist/elements/components/data/states/es.d.ts +5 -5
- package/dist/elements/components/data/states/gb.d.ts +5 -5
- package/dist/elements/components/data/states/gt.d.ts +5 -5
- package/dist/elements/components/data/states/hk.d.ts +5 -5
- package/dist/elements/components/data/states/id.d.ts +5 -5
- package/dist/elements/components/data/states/ie.d.ts +5 -5
- package/dist/elements/components/data/states/in.d.ts +5 -5
- package/dist/elements/components/data/states/index.d.ts +6 -6
- package/dist/elements/components/data/states/it.d.ts +5 -5
- package/dist/elements/components/data/states/jp.d.ts +5 -5
- package/dist/elements/components/data/states/kr.d.ts +5 -5
- package/dist/elements/components/data/states/mx.d.ts +5 -5
- package/dist/elements/components/data/states/my.d.ts +5 -5
- package/dist/elements/components/data/states/ng.d.ts +5 -5
- package/dist/elements/components/data/states/nz.d.ts +5 -5
- package/dist/elements/components/data/states/pa.d.ts +5 -5
- package/dist/elements/components/data/states/pe.d.ts +5 -5
- package/dist/elements/components/data/states/ph.d.ts +5 -5
- package/dist/elements/components/data/states/pt.d.ts +5 -5
- package/dist/elements/components/data/states/ro.d.ts +5 -5
- package/dist/elements/components/data/states/ru.d.ts +5 -5
- package/dist/elements/components/data/states/th.d.ts +5 -5
- package/dist/elements/components/data/states/us.d.ts +9 -9
- package/dist/elements/components/data/states/za.d.ts +5 -5
- package/dist/elements/components/icons/Close.d.ts +6 -6
- package/dist/elements/components/icons/DiagonalArrow.d.ts +5 -5
- package/dist/elements/components/icons/DownloadIcon.d.ts +4 -4
- package/dist/elements/components/icons/FileUpload.d.ts +1 -1
- package/dist/elements/components/icons/FormClosed.d.ts +5 -5
- package/dist/elements/components/icons/Heart.d.ts +1 -1
- package/dist/elements/components/icons/Help.d.ts +4 -4
- package/dist/elements/components/icons/HideEyeIcon.d.ts +5 -5
- package/dist/elements/components/icons/LeftChevron.d.ts +1 -1
- package/dist/elements/components/icons/RatingStar.d.ts +1 -1
- package/dist/elements/components/icons/RightChevron.d.ts +1 -1
- package/dist/elements/components/icons/ShowEyeIcon.d.ts +5 -5
- package/dist/elements/components/icons/Warning.d.ts +5 -5
- package/dist/elements/components/icons/index.d.ts +11 -11
- package/dist/elements/components/skeletons/FieldSkeleton.d.ts +7 -7
- package/dist/elements/components/useBorder.d.ts +21 -21
- package/dist/elements/components/useTextEdit.d.ts +6 -5
- package/dist/elements/components/useTextEdit.d.ts.map +1 -1
- package/dist/elements/fields/AddressLine1Field/index.d.ts +4 -4
- package/dist/elements/fields/AddressLine1Field/tests/test-utils.d.ts +33 -34
- package/dist/elements/fields/AddressLine1Field/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/AddressLine1Field/utils.d.ts +2 -2
- package/dist/elements/fields/ButtonGroupField/index.d.ts +2 -2
- package/dist/elements/fields/ButtonGroupField/tests/test-utils.d.ts +45 -46
- package/dist/elements/fields/ButtonGroupField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/CheckboxField/index.d.ts +5 -5
- package/dist/elements/fields/CheckboxField/tests/test-utils.d.ts +19 -20
- package/dist/elements/fields/CheckboxField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/CheckboxGroupField/index.d.ts +2 -2
- package/dist/elements/fields/CheckboxGroupField/tests/test-utils.d.ts +59 -60
- package/dist/elements/fields/CheckboxGroupField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/ColorPickerField/index.d.ts +2 -2
- package/dist/elements/fields/ColorPickerField/tests/test-utils.d.ts +20 -21
- package/dist/elements/fields/ColorPickerField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/CustomField/Status.d.ts +8 -8
- package/dist/elements/fields/CustomField/index.d.ts +3 -3
- package/dist/elements/fields/CustomField/template.d.ts +1 -1
- package/dist/elements/fields/CustomField/useCustomComponentIframe.d.ts +15 -15
- package/dist/elements/fields/DateSelectorField/index.d.ts +22 -22
- package/dist/elements/fields/DateSelectorField/index.d.ts.map +1 -1
- package/dist/elements/fields/DateSelectorField/styles.d.ts +4 -4
- package/dist/elements/fields/DateSelectorField/tests/test-utils.d.ts +73 -74
- package/dist/elements/fields/DateSelectorField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/DateSelectorField/useDateLocale.d.ts +7 -7
- package/dist/elements/fields/DateSelectorField/utils.d.ts +3 -3
- package/dist/elements/fields/DropdownField/index.d.ts +1 -1
- package/dist/elements/fields/DropdownField/tests/test-utils.d.ts +26 -28
- package/dist/elements/fields/DropdownField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/DropdownMultiField/DropdownMultiFieldSelectComponents.d.ts +8 -8
- package/dist/elements/fields/DropdownMultiField/createDropdownSelect.d.ts +190 -190
- package/dist/elements/fields/DropdownMultiField/index.d.ts +1 -1
- package/dist/elements/fields/DropdownMultiField/optionNormalization.d.ts +9 -9
- package/dist/elements/fields/DropdownMultiField/selectStyles.d.ts +12 -12
- package/dist/elements/fields/DropdownMultiField/tests/test-utils.d.ts +46 -47
- package/dist/elements/fields/DropdownMultiField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/DropdownMultiField/types.d.ts +49 -49
- package/dist/elements/fields/DropdownMultiField/useCollapsedSelectionManager.d.ts +46 -46
- package/dist/elements/fields/DropdownMultiField/useCollapsedValuesMeasurement.d.ts +19 -19
- package/dist/elements/fields/DropdownMultiField/useDropdownInteractions.d.ts +46 -46
- package/dist/elements/fields/DropdownMultiField/useDropdownOptions.d.ts +24 -24
- package/dist/elements/fields/DropdownMultiField/useSelectProps.d.ts +112 -112
- package/dist/elements/fields/FileUploadField/index.d.ts +2 -2
- package/dist/elements/fields/FileUploadField/tests/test-utils.d.ts +10 -10
- package/dist/elements/fields/MatrixField/index.d.ts +2 -2
- package/dist/elements/fields/MatrixField/tests/test-utils.d.ts +66 -67
- package/dist/elements/fields/MatrixField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/PasswordField/index.d.ts +4 -4
- package/dist/elements/fields/PasswordField/tests/test-utils.d.ts +29 -30
- package/dist/elements/fields/PasswordField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/PaymentMethodField.d.ts +4 -4
- package/dist/elements/fields/PhoneField/CountryDropdown.d.ts +3 -3
- package/dist/elements/fields/PhoneField/exampleNumbers.d.ts +2 -2
- package/dist/elements/fields/PhoneField/index.d.ts +4 -4
- package/dist/elements/fields/PhoneField/tests/test-utils.d.ts +85 -86
- package/dist/elements/fields/PhoneField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/PhoneField/timeZoneCountries.d.ts +4 -4
- package/dist/elements/fields/PhoneField/validation.d.ts +3 -3
- package/dist/elements/fields/PinInputField/index.d.ts +2 -2
- package/dist/elements/fields/PinInputField/tests/test-utils.d.ts +78 -79
- package/dist/elements/fields/PinInputField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/PinInputField/useOTPListener.d.ts +1 -1
- package/dist/elements/fields/QRScanner/constants.d.ts +14 -14
- package/dist/elements/fields/QRScanner/hooks/use-device-rotation.d.ts +11 -11
- package/dist/elements/fields/QRScanner/index.d.ts +2 -2
- package/dist/elements/fields/QRScanner/qrLoader.d.ts +2 -2
- package/dist/elements/fields/QRScanner/utils/local-storage.d.ts +5 -5
- package/dist/elements/fields/QRScanner/utils/select-camera.d.ts +9 -9
- package/dist/elements/fields/QRScanner/utils/supports-zoom.d.ts +8 -8
- package/dist/elements/fields/RadioButtonGroupField/index.d.ts +2 -2
- package/dist/elements/fields/RadioButtonGroupField/tests/test-utils.d.ts +54 -55
- package/dist/elements/fields/RadioButtonGroupField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/RatingField/index.d.ts +1 -1
- package/dist/elements/fields/RatingField/tests/test-utils.d.ts +21 -22
- package/dist/elements/fields/RatingField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/SignatureField/components/SignatureCanvas.d.ts +22 -22
- package/dist/elements/fields/SignatureField/components/SignatureModal.d.ts +12 -12
- package/dist/elements/fields/SignatureField/components/utils.d.ts +10 -10
- package/dist/elements/fields/SignatureField/index.d.ts +3 -3
- package/dist/elements/fields/SignatureField/translation.d.ts +17 -17
- package/dist/elements/fields/SliderField/index.d.ts +1 -1
- package/dist/elements/fields/SliderField/styles.d.ts +3 -3
- package/dist/elements/fields/SliderField/tests/test-utils.d.ts +21 -22
- package/dist/elements/fields/SliderField/tests/test-utils.d.ts.map +1 -1
- package/dist/elements/fields/TextArea/index.d.ts +4 -4
- package/dist/elements/fields/TextArea/tests/test-utils.d.ts +10 -10
- package/dist/elements/fields/TextField/TextAutocomplete.d.ts +15 -15
- package/dist/elements/fields/TextField/index.d.ts +4 -4
- package/dist/elements/fields/TextField/index.d.ts.map +1 -1
- package/dist/elements/fields/TextField/tests/test-utils.d.ts +10 -10
- package/dist/elements/fields/index.d.ts +27 -26
- package/dist/elements/fields/index.d.ts.map +1 -1
- package/dist/elements/fields/shared/tests/field-test-utils.d.ts +50 -51
- package/dist/elements/fields/shared/tests/field-test-utils.d.ts.map +1 -1
- package/dist/elements/index.d.ts +36 -36
- package/dist/elements/styles.d.ts +64 -64
- package/dist/elements/utils/fieldNormalization.d.ts +12 -12
- package/dist/fthry_FormControl.DxW_Bnm8.js +16 -0
- package/dist/fthry_InlineTooltip.CKU9xvD_.js +53 -0
- package/dist/fthry_Overlay.CAkqWcqE.js +228 -0
- package/dist/fthry_PaymentMethodField.DgbAXbj6.js +928 -0
- package/dist/fthry_Placeholder.Dns0M5df.js +14 -0
- package/dist/fthry_ShowEyeIcon.B5WMynZy.js +13 -0
- package/dist/fthry_index.3X-DqTfs.js +97 -0
- package/dist/fthry_index.B2eJWMcW.js +2000 -0
- package/dist/fthry_index.BMqtYXlU.js +8166 -0
- package/dist/fthry_index.BOBND5Kw.js +1427 -0
- package/dist/fthry_index.BOzMcNbx.js +1452 -0
- package/dist/fthry_index.BQObFcP7.js +15921 -0
- package/dist/fthry_index.CJrl9QNZ.js +888 -0
- package/dist/fthry_index.CcFhx1jU.js +73 -0
- package/dist/fthry_index.CcNVqQ7R.js +293 -0
- package/dist/fthry_index.CnVdemA5.js +1162 -0
- package/dist/fthry_index.CxRelutP.js +42 -0
- package/dist/fthry_index.D19e9CJD.js +1193 -0
- package/dist/fthry_index.D6UpFxPB.js +216 -0
- package/dist/fthry_index.DD4M0PFc.js +46 -0
- package/dist/fthry_index.DMgGgKWy.js +55 -0
- package/dist/fthry_index.DQB3aI2u.js +95 -0
- package/dist/fthry_index.DaJO430v.js +513 -0
- package/dist/fthry_index.DfiZRBo4.js +35 -0
- package/dist/fthry_index.Di1aadud.js +251 -0
- package/dist/fthry_index.DpFG-lbP.js +138 -0
- package/dist/fthry_index.DsECQjJb.js +131 -0
- package/dist/fthry_index.diObxaBS.js +60999 -0
- package/dist/fthry_index.ghZ0mkQF.js +98 -0
- package/dist/fthry_input.COhHyroj.js +3779 -0
- package/dist/fthry_script.D9CLkYzO.js +157 -0
- package/dist/fthry_styles.Bcy5cq6p.js +1654 -0
- package/dist/fthry_useElementSize.boD8p4bk.js +51 -0
- package/dist/fthry_useSalesforceSync.BNvWxPzE.js +44 -0
- package/dist/fthry_webfontloader.DEj1XG0u.js +57 -0
- package/dist/hooks/router.d.ts +14 -14
- package/dist/hooks/useElementSize.d.ts +7 -7
- package/dist/hooks/useLoader.d.ts +35 -35
- package/dist/hooks/useMounted.d.ts +2 -2
- package/dist/hooks/usePollFuserData.d.ts +1 -1
- package/dist/hooks/usePrevious.d.ts +2 -2
- package/dist/hooks/useSalesforceSync.d.ts +10 -10
- package/dist/index.d.ts +150 -149
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/integrations/alloy.d.ts +2 -2
- package/dist/integrations/amplitude.d.ts +1 -1
- package/dist/integrations/argyle.d.ts +2 -2
- package/dist/integrations/calendly.d.ts +2 -2
- package/dist/integrations/firebase.d.ts +42 -42
- package/dist/integrations/flinks/index.d.ts +10 -10
- package/dist/integrations/flinks/utils.d.ts +12 -12
- package/dist/integrations/googleAnalytics.d.ts +3 -3
- package/dist/integrations/googleTagManager.d.ts +1 -1
- package/dist/integrations/heap.d.ts +2 -2
- package/dist/integrations/intercom.d.ts +2 -2
- package/dist/integrations/mixpanel.d.ts +2 -2
- package/dist/integrations/persona.d.ts +2 -2
- package/dist/integrations/plaid.d.ts +2 -2
- package/dist/integrations/recaptcha.d.ts +2 -2
- package/dist/integrations/rudderstack.d.ts +3 -3
- package/dist/integrations/schwab.d.ts +1 -1
- package/dist/integrations/segment.d.ts +1 -1
- package/dist/integrations/stripe/Cart.d.ts +19 -19
- package/dist/integrations/stripe/SimplifiedProduct.d.ts +39 -39
- package/dist/integrations/stripe/index.d.ts +1 -1
- package/dist/integrations/stripe/stripe.d.ts +97 -97
- package/dist/integrations/stytch.d.ts +19 -19
- package/dist/integrations/trustedform.d.ts +2 -2
- package/dist/integrations/utils.d.ts +14 -14
- package/dist/setupTests.d.ts +1 -1
- package/dist/types/Form.d.ts +80 -80
- package/dist/utils/DangerouslySetHTMLContent.d.ts +2 -2
- package/dist/utils/ShadowDomHtmlContent.d.ts +8 -8
- package/dist/utils/array.d.ts +11 -11
- package/dist/utils/browser.d.ts +23 -23
- package/dist/utils/callbackQueue.d.ts +10 -10
- package/dist/utils/document.d.ts +1 -1
- package/dist/utils/elementActions.d.ts +55 -55
- package/dist/utils/entities/Collaborator.d.ts +14 -14
- package/dist/utils/entities/Field.d.ts +129 -129
- package/dist/utils/error.d.ts +13 -13
- package/dist/utils/featheryClient/index.d.ts +103 -103
- package/dist/utils/featheryClient/integrationClient.d.ts +114 -114
- package/dist/utils/featheryClient/utils.d.ts +1 -1
- package/dist/utils/fieldHelperFunctions.d.ts +70 -70
- package/dist/utils/formContext.d.ts +104 -104
- package/dist/utils/formHelperFunctions.d.ts +44 -44
- package/dist/utils/hideAndRepeats.d.ts +27 -27
- package/dist/utils/hydration.d.ts +14 -14
- package/dist/utils/image.d.ts +39 -39
- package/dist/utils/init.d.ts +59 -59
- package/dist/utils/interactionState.d.ts +4 -4
- package/dist/utils/internalState.d.ts +91 -91
- package/dist/utils/logic.d.ts +50 -50
- package/dist/utils/offlineRequestHandler.d.ts +94 -94
- package/dist/utils/polyfills.d.ts +2 -2
- package/dist/utils/primitives.d.ts +14 -14
- package/dist/utils/random.d.ts +1 -1
- package/dist/utils/repeat.d.ts +38 -38
- package/dist/utils/sensitiveActions.d.ts +7 -7
- package/dist/utils/stepHelperFunctions.d.ts +22 -22
- package/dist/utils/styles.d.ts +5 -5
- package/dist/utils/validation.d.ts +58 -58
- package/package.json +17 -5
- package/umd/466.e3456c8b3407ad04ba56.js +1 -0
- package/umd/{DateSelectorField.b98c0ecb80f56e65cc69.js → DateSelectorField.bd5646949de71f571d04.js} +1 -1
- package/umd/{TextField.a3d8d42f6f8236d00f83.js → TextField.5a5296fe3ea60c4459f2.js} +1 -1
- package/umd/index.js +1 -1
- package/umd/796.e66d52ea21ef09c4eeaa.js +0 -1
|
@@ -0,0 +1,1452 @@
|
|
|
1
|
+
import { s as featheryDoc, am as devicePixelRatio, g as getDefaultExportFromCjs, _ as __read, j as jsxs, b as jsx, a as __assign, m as Fragment, c as __awaiter, d as __generator, an as toBase64, e as debounce, ao as MODAL_Z_INDEX, a9 as CloseIcon, ap as dataURLToFile, k as FORM_Z_INDEX, E as ErrorInput } from './fthry_index.diObxaBS.js';
|
|
2
|
+
import React__default, { Component, forwardRef, useState, useRef, useImperativeHandle, useEffect, useCallback, Suspense } from 'react';
|
|
3
|
+
import { P as PropTypes } from './fthry_index.D19e9CJD.js';
|
|
4
|
+
import 'react/jsx-runtime';
|
|
5
|
+
import 'react-dom/client';
|
|
6
|
+
import 'stream';
|
|
7
|
+
import 'events';
|
|
8
|
+
import 'buffer';
|
|
9
|
+
import 'util';
|
|
10
|
+
import 'react-dom';
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
* Implementation of canvas trimming is taken from:
|
|
14
|
+
* https://github.com/agilgur5/trim-canvas/blob/master/src/index.js
|
|
15
|
+
*
|
|
16
|
+
* Implementation of drawing a signature from a data URL is taken from:
|
|
17
|
+
* https://github.com/szimek/signature_pad/blob/356e97d1c9fc27b8d5930544b50feadc754dd8ba/src/signature_pad.ts#L128C10-L128C21
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
function trimCanvas$1(canvas) {
|
|
21
|
+
var context = canvas.getContext('2d');
|
|
22
|
+
if (!context) {
|
|
23
|
+
throw new Error('Could not get 2d context from canvas');
|
|
24
|
+
}
|
|
25
|
+
var imgWidth = canvas.width;
|
|
26
|
+
var imgHeight = canvas.height;
|
|
27
|
+
var imgData = context.getImageData(0, 0, imgWidth, imgHeight).data;
|
|
28
|
+
// get the corners of the relevant content (everything that's not white)
|
|
29
|
+
var cropTop = scanY(true, imgWidth, imgHeight, imgData);
|
|
30
|
+
var cropBottom = scanY(false, imgWidth, imgHeight, imgData);
|
|
31
|
+
var cropLeft = scanX(true, imgWidth, imgHeight, imgData);
|
|
32
|
+
var cropRight = scanX(false, imgWidth, imgHeight, imgData);
|
|
33
|
+
// if the image is already trimmed, return the original canvas
|
|
34
|
+
if (cropTop === null ||
|
|
35
|
+
cropBottom === null ||
|
|
36
|
+
cropLeft === null ||
|
|
37
|
+
cropRight === null) {
|
|
38
|
+
return canvas;
|
|
39
|
+
}
|
|
40
|
+
// + 1 is needed because this is a difference, there are n + 1 pixels in
|
|
41
|
+
// between the two numbers inclusive
|
|
42
|
+
var cropXDiff = cropRight - cropLeft + 1;
|
|
43
|
+
var cropYDiff = cropBottom - cropTop + 1;
|
|
44
|
+
// get the relevant data from the calculated coordinates
|
|
45
|
+
var trimmedData = context.getImageData(cropLeft, cropTop, cropXDiff, cropYDiff);
|
|
46
|
+
// set the trimmed width and height
|
|
47
|
+
canvas.width = cropXDiff;
|
|
48
|
+
canvas.height = cropYDiff;
|
|
49
|
+
// clear the canvas
|
|
50
|
+
context.clearRect(0, 0, cropXDiff, cropYDiff);
|
|
51
|
+
// place the trimmed data into the cleared canvas to create
|
|
52
|
+
// a new, trimmed canvas
|
|
53
|
+
context.putImageData(trimmedData, 0, 0);
|
|
54
|
+
return canvas; // for chaining
|
|
55
|
+
}
|
|
56
|
+
// returns the RGBA values of an x, y coord of imgData
|
|
57
|
+
function getRGBA(x, y, imgWidth, imgData) {
|
|
58
|
+
return {
|
|
59
|
+
red: imgData[(imgWidth * y + x) * 4],
|
|
60
|
+
green: imgData[(imgWidth * y + x) * 4 + 1],
|
|
61
|
+
blue: imgData[(imgWidth * y + x) * 4 + 2],
|
|
62
|
+
alpha: imgData[(imgWidth * y + x) * 4 + 3]
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function getAlpha(x, y, imgWidth, imgData) {
|
|
66
|
+
return getRGBA(x, y, imgWidth, imgData).alpha;
|
|
67
|
+
}
|
|
68
|
+
// finds the first y coord in imgData that is not white
|
|
69
|
+
function scanY(fromTop, imgWidth, imgHeight, imgData) {
|
|
70
|
+
var offset = fromTop ? 1 : -1;
|
|
71
|
+
var firstCol = fromTop ? 0 : imgHeight - 1;
|
|
72
|
+
// loop through each row
|
|
73
|
+
for (var y = firstCol; fromTop ? y < imgHeight : y > -1; y += offset) {
|
|
74
|
+
// loop through each column
|
|
75
|
+
for (var x = 0; x < imgWidth; x++) {
|
|
76
|
+
// if not white, return col
|
|
77
|
+
if (getAlpha(x, y, imgWidth, imgData)) {
|
|
78
|
+
return y;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// the whole image is white already
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
// finds the first x coord in imgData that is not white
|
|
86
|
+
function scanX(fromLeft, imgWidth, imgHeight, imgData) {
|
|
87
|
+
var offset = fromLeft ? 1 : -1;
|
|
88
|
+
var firstRow = fromLeft ? 0 : imgWidth - 1;
|
|
89
|
+
// loop through each column
|
|
90
|
+
for (var x = firstRow; fromLeft ? x < imgWidth : x > -1; x += offset) {
|
|
91
|
+
// loop through each row
|
|
92
|
+
for (var y = 0; y < imgHeight; y++) {
|
|
93
|
+
// if not white, return row
|
|
94
|
+
if (getAlpha(x, y, imgWidth, imgData)) {
|
|
95
|
+
return x;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// the whole image is white already
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
function fromDataURL(canvas, dataUrl, options) {
|
|
103
|
+
if (options === void 0) { options = {}; }
|
|
104
|
+
return new Promise(function (resolve, reject) {
|
|
105
|
+
var context = canvas.getContext('2d');
|
|
106
|
+
var image = new Image();
|
|
107
|
+
var ratio = options.ratio || devicePixelRatio();
|
|
108
|
+
var width = options.width || canvas.width / ratio;
|
|
109
|
+
var height = options.height || canvas.height / ratio;
|
|
110
|
+
var xOffset = options.xOffset || 0;
|
|
111
|
+
var yOffset = options.yOffset || 0;
|
|
112
|
+
image.onload = function () {
|
|
113
|
+
context === null || context === void 0 ? void 0 : context.drawImage(image, xOffset, yOffset, width, height);
|
|
114
|
+
resolve();
|
|
115
|
+
};
|
|
116
|
+
image.onerror = function (error) {
|
|
117
|
+
reject(error);
|
|
118
|
+
};
|
|
119
|
+
image.crossOrigin = 'anonymous';
|
|
120
|
+
image.src = dataUrl;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
var generateSignatureImage = function (text, fontFamily, fontSize) {
|
|
124
|
+
if (fontFamily === void 0) { fontFamily = 'La Belle Aurore'; }
|
|
125
|
+
if (fontSize === void 0) { fontSize = '1.5em'; }
|
|
126
|
+
var canvas = featheryDoc().createElement('canvas');
|
|
127
|
+
var ctx = canvas.getContext('2d');
|
|
128
|
+
if (!ctx) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
var scaleFactor = 4;
|
|
132
|
+
canvas.width = 560 * scaleFactor;
|
|
133
|
+
canvas.height = 100 * scaleFactor;
|
|
134
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
135
|
+
ctx.scale(scaleFactor, scaleFactor);
|
|
136
|
+
ctx.font = "".concat(fontSize, " ").concat(fontFamily);
|
|
137
|
+
ctx.fillStyle = '#000';
|
|
138
|
+
ctx.textBaseline = 'middle';
|
|
139
|
+
var textMetrics = ctx.measureText(text);
|
|
140
|
+
var textWidth = textMetrics.width;
|
|
141
|
+
var textHeight = parseInt(fontSize) * 1.5;
|
|
142
|
+
ctx.scale(1 / scaleFactor, 1 / scaleFactor);
|
|
143
|
+
var padding = 20 * scaleFactor;
|
|
144
|
+
canvas.width = textWidth * scaleFactor + padding * 2;
|
|
145
|
+
canvas.height = textHeight * scaleFactor + padding * 2;
|
|
146
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
147
|
+
ctx.scale(scaleFactor, scaleFactor);
|
|
148
|
+
ctx.font = "".concat(fontSize, " ").concat(fontFamily);
|
|
149
|
+
ctx.fillStyle = '#000';
|
|
150
|
+
ctx.textBaseline = 'middle';
|
|
151
|
+
ctx.fillText(text, padding / scaleFactor, canvas.height / 2 / scaleFactor);
|
|
152
|
+
return canvas;
|
|
153
|
+
};
|
|
154
|
+
function cloneCanvas(oldCanvas) {
|
|
155
|
+
var newCanvas = featheryDoc().createElement('canvas');
|
|
156
|
+
var context = newCanvas.getContext('2d');
|
|
157
|
+
newCanvas.width = oldCanvas.width;
|
|
158
|
+
newCanvas.height = oldCanvas.height;
|
|
159
|
+
if (context) {
|
|
160
|
+
context.drawImage(oldCanvas, 0, 0);
|
|
161
|
+
}
|
|
162
|
+
return newCanvas;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function _extends() {
|
|
166
|
+
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
167
|
+
for (var e = 1; e < arguments.length; e++) {
|
|
168
|
+
var t = arguments[e];
|
|
169
|
+
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
170
|
+
}
|
|
171
|
+
return n;
|
|
172
|
+
}, _extends.apply(null, arguments);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function _objectWithoutPropertiesLoose(r, e) {
|
|
176
|
+
if (null == r) return {};
|
|
177
|
+
var t = {};
|
|
178
|
+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
179
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
180
|
+
t[n] = r[n];
|
|
181
|
+
}
|
|
182
|
+
return t;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function _objectWithoutProperties(e, t) {
|
|
186
|
+
if (null == e) return {};
|
|
187
|
+
var o,
|
|
188
|
+
r,
|
|
189
|
+
i = _objectWithoutPropertiesLoose(e, t);
|
|
190
|
+
if (Object.getOwnPropertySymbols) {
|
|
191
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
192
|
+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
|
|
193
|
+
}
|
|
194
|
+
return i;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function _typeof(o) {
|
|
198
|
+
"@babel/helpers - typeof";
|
|
199
|
+
|
|
200
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
|
|
201
|
+
return typeof o;
|
|
202
|
+
} : function (o) {
|
|
203
|
+
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
204
|
+
}, _typeof(o);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function _createClass(e, r, t) {
|
|
208
|
+
return Object.defineProperty(e, "prototype", {
|
|
209
|
+
writable: false
|
|
210
|
+
}), e;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function _classCallCheck(a, n) {
|
|
214
|
+
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function _setPrototypeOf(t, e) {
|
|
218
|
+
return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
|
|
219
|
+
return t.__proto__ = e, t;
|
|
220
|
+
}, _setPrototypeOf(t, e);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function _inherits(t, e) {
|
|
224
|
+
if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
|
|
225
|
+
t.prototype = Object.create(e && e.prototype, {
|
|
226
|
+
constructor: {
|
|
227
|
+
value: t,
|
|
228
|
+
writable: true,
|
|
229
|
+
configurable: true
|
|
230
|
+
}
|
|
231
|
+
}), Object.defineProperty(t, "prototype", {
|
|
232
|
+
writable: false
|
|
233
|
+
}), e && _setPrototypeOf(t, e);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
function _getPrototypeOf(t) {
|
|
237
|
+
return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
|
|
238
|
+
return t.__proto__ || Object.getPrototypeOf(t);
|
|
239
|
+
}, _getPrototypeOf(t);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function _isNativeReflectConstruct() {
|
|
243
|
+
try {
|
|
244
|
+
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
245
|
+
} catch (t) {}
|
|
246
|
+
return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
|
|
247
|
+
return !!t;
|
|
248
|
+
})();
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function _assertThisInitialized(e) {
|
|
252
|
+
if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
253
|
+
return e;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function _possibleConstructorReturn(t, e) {
|
|
257
|
+
if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;
|
|
258
|
+
if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
|
|
259
|
+
return _assertThisInitialized(t);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
function _createSuper(t) {
|
|
263
|
+
var r = _isNativeReflectConstruct();
|
|
264
|
+
return function () {
|
|
265
|
+
var e,
|
|
266
|
+
o = _getPrototypeOf(t);
|
|
267
|
+
if (r) {
|
|
268
|
+
var s = _getPrototypeOf(this).constructor;
|
|
269
|
+
e = Reflect.construct(o, arguments, s);
|
|
270
|
+
} else e = o.apply(this, arguments);
|
|
271
|
+
return _possibleConstructorReturn(this, e);
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/*!
|
|
276
|
+
* Signature Pad v2.3.2
|
|
277
|
+
* https://github.com/szimek/signature_pad
|
|
278
|
+
*
|
|
279
|
+
* Copyright 2017 Szymon Nowak
|
|
280
|
+
* Released under the MIT license
|
|
281
|
+
*
|
|
282
|
+
* The main idea and some parts of the code (e.g. drawing variable width Bézier curve) are taken from:
|
|
283
|
+
* http://corner.squareup.com/2012/07/smoother-signatures.html
|
|
284
|
+
*
|
|
285
|
+
* Implementation of interpolation using cubic Bézier curves is taken from:
|
|
286
|
+
* http://benknowscode.wordpress.com/2012/09/14/path-interpolation-using-cubic-bezier-and-control-point-estimation-in-javascript
|
|
287
|
+
*
|
|
288
|
+
* Algorithm for approximated length of a Bézier curve is taken from:
|
|
289
|
+
* http://www.lemoda.net/maths/bezier-length/index.html
|
|
290
|
+
*
|
|
291
|
+
*/
|
|
292
|
+
|
|
293
|
+
function Point(x, y, time) {
|
|
294
|
+
this.x = x;
|
|
295
|
+
this.y = y;
|
|
296
|
+
this.time = time || new Date().getTime();
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
Point.prototype.velocityFrom = function (start) {
|
|
300
|
+
return this.time !== start.time ? this.distanceTo(start) / (this.time - start.time) : 1;
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
Point.prototype.distanceTo = function (start) {
|
|
304
|
+
return Math.sqrt(Math.pow(this.x - start.x, 2) + Math.pow(this.y - start.y, 2));
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
Point.prototype.equals = function (other) {
|
|
308
|
+
return this.x === other.x && this.y === other.y && this.time === other.time;
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
function Bezier(startPoint, control1, control2, endPoint) {
|
|
312
|
+
this.startPoint = startPoint;
|
|
313
|
+
this.control1 = control1;
|
|
314
|
+
this.control2 = control2;
|
|
315
|
+
this.endPoint = endPoint;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// Returns approximated length.
|
|
319
|
+
Bezier.prototype.length = function () {
|
|
320
|
+
var steps = 10;
|
|
321
|
+
var length = 0;
|
|
322
|
+
var px = void 0;
|
|
323
|
+
var py = void 0;
|
|
324
|
+
|
|
325
|
+
for (var i = 0; i <= steps; i += 1) {
|
|
326
|
+
var t = i / steps;
|
|
327
|
+
var cx = this._point(t, this.startPoint.x, this.control1.x, this.control2.x, this.endPoint.x);
|
|
328
|
+
var cy = this._point(t, this.startPoint.y, this.control1.y, this.control2.y, this.endPoint.y);
|
|
329
|
+
if (i > 0) {
|
|
330
|
+
var xdiff = cx - px;
|
|
331
|
+
var ydiff = cy - py;
|
|
332
|
+
length += Math.sqrt(xdiff * xdiff + ydiff * ydiff);
|
|
333
|
+
}
|
|
334
|
+
px = cx;
|
|
335
|
+
py = cy;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return length;
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
/* eslint-disable no-multi-spaces, space-in-parens */
|
|
342
|
+
Bezier.prototype._point = function (t, start, c1, c2, end) {
|
|
343
|
+
return start * (1.0 - t) * (1.0 - t) * (1.0 - t) + 3.0 * c1 * (1.0 - t) * (1.0 - t) * t + 3.0 * c2 * (1.0 - t) * t * t + end * t * t * t;
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
/* eslint-disable */
|
|
347
|
+
|
|
348
|
+
// http://stackoverflow.com/a/27078401/815507
|
|
349
|
+
function throttle(func, wait, options) {
|
|
350
|
+
var context, args, result;
|
|
351
|
+
var timeout = null;
|
|
352
|
+
var previous = 0;
|
|
353
|
+
if (!options) options = {};
|
|
354
|
+
var later = function later() {
|
|
355
|
+
previous = options.leading === false ? 0 : Date.now();
|
|
356
|
+
timeout = null;
|
|
357
|
+
result = func.apply(context, args);
|
|
358
|
+
if (!timeout) context = args = null;
|
|
359
|
+
};
|
|
360
|
+
return function () {
|
|
361
|
+
var now = Date.now();
|
|
362
|
+
if (!previous && options.leading === false) previous = now;
|
|
363
|
+
var remaining = wait - (now - previous);
|
|
364
|
+
context = this;
|
|
365
|
+
args = arguments;
|
|
366
|
+
if (remaining <= 0 || remaining > wait) {
|
|
367
|
+
if (timeout) {
|
|
368
|
+
clearTimeout(timeout);
|
|
369
|
+
timeout = null;
|
|
370
|
+
}
|
|
371
|
+
previous = now;
|
|
372
|
+
result = func.apply(context, args);
|
|
373
|
+
if (!timeout) context = args = null;
|
|
374
|
+
} else if (!timeout && options.trailing !== false) {
|
|
375
|
+
timeout = setTimeout(later, remaining);
|
|
376
|
+
}
|
|
377
|
+
return result;
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
function SignaturePad(canvas, options) {
|
|
382
|
+
var self = this;
|
|
383
|
+
var opts = options || {};
|
|
384
|
+
|
|
385
|
+
this.velocityFilterWeight = opts.velocityFilterWeight || 0.7;
|
|
386
|
+
this.minWidth = opts.minWidth || 0.5;
|
|
387
|
+
this.maxWidth = opts.maxWidth || 2.5;
|
|
388
|
+
this.throttle = 'throttle' in opts ? opts.throttle : 16; // in miliseconds
|
|
389
|
+
this.minDistance = 'minDistance' in opts ? opts.minDistance : 5;
|
|
390
|
+
|
|
391
|
+
if (this.throttle) {
|
|
392
|
+
this._strokeMoveUpdate = throttle(SignaturePad.prototype._strokeUpdate, this.throttle);
|
|
393
|
+
} else {
|
|
394
|
+
this._strokeMoveUpdate = SignaturePad.prototype._strokeUpdate;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
this.dotSize = opts.dotSize || function () {
|
|
398
|
+
return (this.minWidth + this.maxWidth) / 2;
|
|
399
|
+
};
|
|
400
|
+
this.penColor = opts.penColor || 'black';
|
|
401
|
+
this.backgroundColor = opts.backgroundColor || 'rgba(0,0,0,0)';
|
|
402
|
+
this.onBegin = opts.onBegin;
|
|
403
|
+
this.onEnd = opts.onEnd;
|
|
404
|
+
|
|
405
|
+
this._canvas = canvas;
|
|
406
|
+
this._ctx = canvas.getContext('2d');
|
|
407
|
+
this.clear();
|
|
408
|
+
|
|
409
|
+
// We need add these inline so they are available to unbind while still having
|
|
410
|
+
// access to 'self' we could use _.bind but it's not worth adding a dependency.
|
|
411
|
+
this._handleMouseDown = function (event) {
|
|
412
|
+
if (event.which === 1) {
|
|
413
|
+
self._mouseButtonDown = true;
|
|
414
|
+
self._strokeBegin(event);
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
this._handleMouseMove = function (event) {
|
|
419
|
+
if (self._mouseButtonDown) {
|
|
420
|
+
self._strokeMoveUpdate(event);
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
this._handleMouseUp = function (event) {
|
|
425
|
+
if (event.which === 1 && self._mouseButtonDown) {
|
|
426
|
+
self._mouseButtonDown = false;
|
|
427
|
+
self._strokeEnd(event);
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
this._handleTouchStart = function (event) {
|
|
432
|
+
if (event.targetTouches.length === 1) {
|
|
433
|
+
var touch = event.changedTouches[0];
|
|
434
|
+
self._strokeBegin(touch);
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
this._handleTouchMove = function (event) {
|
|
439
|
+
// Prevent scrolling.
|
|
440
|
+
event.preventDefault();
|
|
441
|
+
|
|
442
|
+
var touch = event.targetTouches[0];
|
|
443
|
+
self._strokeMoveUpdate(touch);
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
this._handleTouchEnd = function (event) {
|
|
447
|
+
var wasCanvasTouched = event.target === self._canvas;
|
|
448
|
+
if (wasCanvasTouched) {
|
|
449
|
+
event.preventDefault();
|
|
450
|
+
self._strokeEnd(event);
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
// Enable mouse and touch event handlers
|
|
455
|
+
this.on();
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// Public methods
|
|
459
|
+
SignaturePad.prototype.clear = function () {
|
|
460
|
+
var ctx = this._ctx;
|
|
461
|
+
var canvas = this._canvas;
|
|
462
|
+
|
|
463
|
+
ctx.fillStyle = this.backgroundColor;
|
|
464
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
465
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
466
|
+
|
|
467
|
+
this._data = [];
|
|
468
|
+
this._reset();
|
|
469
|
+
this._isEmpty = true;
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
SignaturePad.prototype.fromDataURL = function (dataUrl) {
|
|
473
|
+
var _this = this;
|
|
474
|
+
|
|
475
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
476
|
+
|
|
477
|
+
var image = new Image();
|
|
478
|
+
var ratio = options.ratio || window.devicePixelRatio || 1;
|
|
479
|
+
var width = options.width || this._canvas.width / ratio;
|
|
480
|
+
var height = options.height || this._canvas.height / ratio;
|
|
481
|
+
|
|
482
|
+
this._reset();
|
|
483
|
+
image.src = dataUrl;
|
|
484
|
+
image.onload = function () {
|
|
485
|
+
_this._ctx.drawImage(image, 0, 0, width, height);
|
|
486
|
+
};
|
|
487
|
+
this._isEmpty = false;
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
SignaturePad.prototype.toDataURL = function (type) {
|
|
491
|
+
var _canvas;
|
|
492
|
+
|
|
493
|
+
switch (type) {
|
|
494
|
+
case 'image/svg+xml':
|
|
495
|
+
return this._toSVG();
|
|
496
|
+
default:
|
|
497
|
+
for (var _len = arguments.length, options = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
498
|
+
options[_key - 1] = arguments[_key];
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
return (_canvas = this._canvas).toDataURL.apply(_canvas, [type].concat(options));
|
|
502
|
+
}
|
|
503
|
+
};
|
|
504
|
+
|
|
505
|
+
SignaturePad.prototype.on = function () {
|
|
506
|
+
this._handleMouseEvents();
|
|
507
|
+
this._handleTouchEvents();
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
SignaturePad.prototype.off = function () {
|
|
511
|
+
this._canvas.removeEventListener('mousedown', this._handleMouseDown);
|
|
512
|
+
this._canvas.removeEventListener('mousemove', this._handleMouseMove);
|
|
513
|
+
document.removeEventListener('mouseup', this._handleMouseUp);
|
|
514
|
+
|
|
515
|
+
this._canvas.removeEventListener('touchstart', this._handleTouchStart);
|
|
516
|
+
this._canvas.removeEventListener('touchmove', this._handleTouchMove);
|
|
517
|
+
this._canvas.removeEventListener('touchend', this._handleTouchEnd);
|
|
518
|
+
};
|
|
519
|
+
|
|
520
|
+
SignaturePad.prototype.isEmpty = function () {
|
|
521
|
+
return this._isEmpty;
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
// Private methods
|
|
525
|
+
SignaturePad.prototype._strokeBegin = function (event) {
|
|
526
|
+
this._data.push([]);
|
|
527
|
+
this._reset();
|
|
528
|
+
this._strokeUpdate(event);
|
|
529
|
+
|
|
530
|
+
if (typeof this.onBegin === 'function') {
|
|
531
|
+
this.onBegin(event);
|
|
532
|
+
}
|
|
533
|
+
};
|
|
534
|
+
|
|
535
|
+
SignaturePad.prototype._strokeUpdate = function (event) {
|
|
536
|
+
var x = event.clientX;
|
|
537
|
+
var y = event.clientY;
|
|
538
|
+
|
|
539
|
+
var point = this._createPoint(x, y);
|
|
540
|
+
var lastPointGroup = this._data[this._data.length - 1];
|
|
541
|
+
var lastPoint = lastPointGroup && lastPointGroup[lastPointGroup.length - 1];
|
|
542
|
+
var isLastPointTooClose = lastPoint && point.distanceTo(lastPoint) < this.minDistance;
|
|
543
|
+
|
|
544
|
+
// Skip this point if it's too close to the previous one
|
|
545
|
+
if (!(lastPoint && isLastPointTooClose)) {
|
|
546
|
+
var _addPoint = this._addPoint(point),
|
|
547
|
+
curve = _addPoint.curve,
|
|
548
|
+
widths = _addPoint.widths;
|
|
549
|
+
|
|
550
|
+
if (curve && widths) {
|
|
551
|
+
this._drawCurve(curve, widths.start, widths.end);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
this._data[this._data.length - 1].push({
|
|
555
|
+
x: point.x,
|
|
556
|
+
y: point.y,
|
|
557
|
+
time: point.time,
|
|
558
|
+
color: this.penColor
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
};
|
|
562
|
+
|
|
563
|
+
SignaturePad.prototype._strokeEnd = function (event) {
|
|
564
|
+
var canDrawCurve = this.points.length > 2;
|
|
565
|
+
var point = this.points[0]; // Point instance
|
|
566
|
+
|
|
567
|
+
if (!canDrawCurve && point) {
|
|
568
|
+
this._drawDot(point);
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
if (point) {
|
|
572
|
+
var lastPointGroup = this._data[this._data.length - 1];
|
|
573
|
+
var lastPoint = lastPointGroup[lastPointGroup.length - 1]; // plain object
|
|
574
|
+
|
|
575
|
+
// When drawing a dot, there's only one point in a group, so without this check
|
|
576
|
+
// such group would end up with exactly the same 2 points.
|
|
577
|
+
if (!point.equals(lastPoint)) {
|
|
578
|
+
lastPointGroup.push({
|
|
579
|
+
x: point.x,
|
|
580
|
+
y: point.y,
|
|
581
|
+
time: point.time,
|
|
582
|
+
color: this.penColor
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
if (typeof this.onEnd === 'function') {
|
|
588
|
+
this.onEnd(event);
|
|
589
|
+
}
|
|
590
|
+
};
|
|
591
|
+
|
|
592
|
+
SignaturePad.prototype._handleMouseEvents = function () {
|
|
593
|
+
this._mouseButtonDown = false;
|
|
594
|
+
|
|
595
|
+
this._canvas.addEventListener('mousedown', this._handleMouseDown);
|
|
596
|
+
this._canvas.addEventListener('mousemove', this._handleMouseMove);
|
|
597
|
+
document.addEventListener('mouseup', this._handleMouseUp);
|
|
598
|
+
};
|
|
599
|
+
|
|
600
|
+
SignaturePad.prototype._handleTouchEvents = function () {
|
|
601
|
+
// Pass touch events to canvas element on mobile IE11 and Edge.
|
|
602
|
+
this._canvas.style.msTouchAction = 'none';
|
|
603
|
+
this._canvas.style.touchAction = 'none';
|
|
604
|
+
|
|
605
|
+
this._canvas.addEventListener('touchstart', this._handleTouchStart);
|
|
606
|
+
this._canvas.addEventListener('touchmove', this._handleTouchMove);
|
|
607
|
+
this._canvas.addEventListener('touchend', this._handleTouchEnd);
|
|
608
|
+
};
|
|
609
|
+
|
|
610
|
+
SignaturePad.prototype._reset = function () {
|
|
611
|
+
this.points = [];
|
|
612
|
+
this._lastVelocity = 0;
|
|
613
|
+
this._lastWidth = (this.minWidth + this.maxWidth) / 2;
|
|
614
|
+
this._ctx.fillStyle = this.penColor;
|
|
615
|
+
};
|
|
616
|
+
|
|
617
|
+
SignaturePad.prototype._createPoint = function (x, y, time) {
|
|
618
|
+
var rect = this._canvas.getBoundingClientRect();
|
|
619
|
+
|
|
620
|
+
return new Point(x - rect.left, y - rect.top, time || new Date().getTime());
|
|
621
|
+
};
|
|
622
|
+
|
|
623
|
+
SignaturePad.prototype._addPoint = function (point) {
|
|
624
|
+
var points = this.points;
|
|
625
|
+
var tmp = void 0;
|
|
626
|
+
|
|
627
|
+
points.push(point);
|
|
628
|
+
|
|
629
|
+
if (points.length > 2) {
|
|
630
|
+
// To reduce the initial lag make it work with 3 points
|
|
631
|
+
// by copying the first point to the beginning.
|
|
632
|
+
if (points.length === 3) points.unshift(points[0]);
|
|
633
|
+
|
|
634
|
+
tmp = this._calculateCurveControlPoints(points[0], points[1], points[2]);
|
|
635
|
+
var c2 = tmp.c2;
|
|
636
|
+
tmp = this._calculateCurveControlPoints(points[1], points[2], points[3]);
|
|
637
|
+
var c3 = tmp.c1;
|
|
638
|
+
var curve = new Bezier(points[1], c2, c3, points[2]);
|
|
639
|
+
var widths = this._calculateCurveWidths(curve);
|
|
640
|
+
|
|
641
|
+
// Remove the first element from the list,
|
|
642
|
+
// so that we always have no more than 4 points in points array.
|
|
643
|
+
points.shift();
|
|
644
|
+
|
|
645
|
+
return { curve: curve, widths: widths };
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
return {};
|
|
649
|
+
};
|
|
650
|
+
|
|
651
|
+
SignaturePad.prototype._calculateCurveControlPoints = function (s1, s2, s3) {
|
|
652
|
+
var dx1 = s1.x - s2.x;
|
|
653
|
+
var dy1 = s1.y - s2.y;
|
|
654
|
+
var dx2 = s2.x - s3.x;
|
|
655
|
+
var dy2 = s2.y - s3.y;
|
|
656
|
+
|
|
657
|
+
var m1 = { x: (s1.x + s2.x) / 2.0, y: (s1.y + s2.y) / 2.0 };
|
|
658
|
+
var m2 = { x: (s2.x + s3.x) / 2.0, y: (s2.y + s3.y) / 2.0 };
|
|
659
|
+
|
|
660
|
+
var l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);
|
|
661
|
+
var l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);
|
|
662
|
+
|
|
663
|
+
var dxm = m1.x - m2.x;
|
|
664
|
+
var dym = m1.y - m2.y;
|
|
665
|
+
|
|
666
|
+
var k = l2 / (l1 + l2);
|
|
667
|
+
var cm = { x: m2.x + dxm * k, y: m2.y + dym * k };
|
|
668
|
+
|
|
669
|
+
var tx = s2.x - cm.x;
|
|
670
|
+
var ty = s2.y - cm.y;
|
|
671
|
+
|
|
672
|
+
return {
|
|
673
|
+
c1: new Point(m1.x + tx, m1.y + ty),
|
|
674
|
+
c2: new Point(m2.x + tx, m2.y + ty)
|
|
675
|
+
};
|
|
676
|
+
};
|
|
677
|
+
|
|
678
|
+
SignaturePad.prototype._calculateCurveWidths = function (curve) {
|
|
679
|
+
var startPoint = curve.startPoint;
|
|
680
|
+
var endPoint = curve.endPoint;
|
|
681
|
+
var widths = { start: null, end: null };
|
|
682
|
+
|
|
683
|
+
var velocity = this.velocityFilterWeight * endPoint.velocityFrom(startPoint) + (1 - this.velocityFilterWeight) * this._lastVelocity;
|
|
684
|
+
|
|
685
|
+
var newWidth = this._strokeWidth(velocity);
|
|
686
|
+
|
|
687
|
+
widths.start = this._lastWidth;
|
|
688
|
+
widths.end = newWidth;
|
|
689
|
+
|
|
690
|
+
this._lastVelocity = velocity;
|
|
691
|
+
this._lastWidth = newWidth;
|
|
692
|
+
|
|
693
|
+
return widths;
|
|
694
|
+
};
|
|
695
|
+
|
|
696
|
+
SignaturePad.prototype._strokeWidth = function (velocity) {
|
|
697
|
+
return Math.max(this.maxWidth / (velocity + 1), this.minWidth);
|
|
698
|
+
};
|
|
699
|
+
|
|
700
|
+
SignaturePad.prototype._drawPoint = function (x, y, size) {
|
|
701
|
+
var ctx = this._ctx;
|
|
702
|
+
|
|
703
|
+
ctx.moveTo(x, y);
|
|
704
|
+
ctx.arc(x, y, size, 0, 2 * Math.PI, false);
|
|
705
|
+
this._isEmpty = false;
|
|
706
|
+
};
|
|
707
|
+
|
|
708
|
+
SignaturePad.prototype._drawCurve = function (curve, startWidth, endWidth) {
|
|
709
|
+
var ctx = this._ctx;
|
|
710
|
+
var widthDelta = endWidth - startWidth;
|
|
711
|
+
var drawSteps = Math.floor(curve.length());
|
|
712
|
+
|
|
713
|
+
ctx.beginPath();
|
|
714
|
+
|
|
715
|
+
for (var i = 0; i < drawSteps; i += 1) {
|
|
716
|
+
// Calculate the Bezier (x, y) coordinate for this step.
|
|
717
|
+
var t = i / drawSteps;
|
|
718
|
+
var tt = t * t;
|
|
719
|
+
var ttt = tt * t;
|
|
720
|
+
var u = 1 - t;
|
|
721
|
+
var uu = u * u;
|
|
722
|
+
var uuu = uu * u;
|
|
723
|
+
|
|
724
|
+
var x = uuu * curve.startPoint.x;
|
|
725
|
+
x += 3 * uu * t * curve.control1.x;
|
|
726
|
+
x += 3 * u * tt * curve.control2.x;
|
|
727
|
+
x += ttt * curve.endPoint.x;
|
|
728
|
+
|
|
729
|
+
var y = uuu * curve.startPoint.y;
|
|
730
|
+
y += 3 * uu * t * curve.control1.y;
|
|
731
|
+
y += 3 * u * tt * curve.control2.y;
|
|
732
|
+
y += ttt * curve.endPoint.y;
|
|
733
|
+
|
|
734
|
+
var width = startWidth + ttt * widthDelta;
|
|
735
|
+
this._drawPoint(x, y, width);
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
ctx.closePath();
|
|
739
|
+
ctx.fill();
|
|
740
|
+
};
|
|
741
|
+
|
|
742
|
+
SignaturePad.prototype._drawDot = function (point) {
|
|
743
|
+
var ctx = this._ctx;
|
|
744
|
+
var width = typeof this.dotSize === 'function' ? this.dotSize() : this.dotSize;
|
|
745
|
+
|
|
746
|
+
ctx.beginPath();
|
|
747
|
+
this._drawPoint(point.x, point.y, width);
|
|
748
|
+
ctx.closePath();
|
|
749
|
+
ctx.fill();
|
|
750
|
+
};
|
|
751
|
+
|
|
752
|
+
SignaturePad.prototype._fromData = function (pointGroups, drawCurve, drawDot) {
|
|
753
|
+
for (var i = 0; i < pointGroups.length; i += 1) {
|
|
754
|
+
var group = pointGroups[i];
|
|
755
|
+
|
|
756
|
+
if (group.length > 1) {
|
|
757
|
+
for (var j = 0; j < group.length; j += 1) {
|
|
758
|
+
var rawPoint = group[j];
|
|
759
|
+
var point = new Point(rawPoint.x, rawPoint.y, rawPoint.time);
|
|
760
|
+
var color = rawPoint.color;
|
|
761
|
+
|
|
762
|
+
if (j === 0) {
|
|
763
|
+
// First point in a group. Nothing to draw yet.
|
|
764
|
+
|
|
765
|
+
// All points in the group have the same color, so it's enough to set
|
|
766
|
+
// penColor just at the beginning.
|
|
767
|
+
this.penColor = color;
|
|
768
|
+
this._reset();
|
|
769
|
+
|
|
770
|
+
this._addPoint(point);
|
|
771
|
+
} else if (j !== group.length - 1) {
|
|
772
|
+
// Middle point in a group.
|
|
773
|
+
var _addPoint2 = this._addPoint(point),
|
|
774
|
+
curve = _addPoint2.curve,
|
|
775
|
+
widths = _addPoint2.widths;
|
|
776
|
+
|
|
777
|
+
if (curve && widths) {
|
|
778
|
+
drawCurve(curve, widths, color);
|
|
779
|
+
}
|
|
780
|
+
} else ;
|
|
781
|
+
}
|
|
782
|
+
} else {
|
|
783
|
+
this._reset();
|
|
784
|
+
var _rawPoint = group[0];
|
|
785
|
+
drawDot(_rawPoint);
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
};
|
|
789
|
+
|
|
790
|
+
SignaturePad.prototype._toSVG = function () {
|
|
791
|
+
var _this2 = this;
|
|
792
|
+
|
|
793
|
+
var pointGroups = this._data;
|
|
794
|
+
var canvas = this._canvas;
|
|
795
|
+
var ratio = Math.max(window.devicePixelRatio || 1, 1);
|
|
796
|
+
var minX = 0;
|
|
797
|
+
var minY = 0;
|
|
798
|
+
var maxX = canvas.width / ratio;
|
|
799
|
+
var maxY = canvas.height / ratio;
|
|
800
|
+
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
801
|
+
|
|
802
|
+
svg.setAttributeNS(null, 'width', canvas.width);
|
|
803
|
+
svg.setAttributeNS(null, 'height', canvas.height);
|
|
804
|
+
|
|
805
|
+
this._fromData(pointGroups, function (curve, widths, color) {
|
|
806
|
+
var path = document.createElement('path');
|
|
807
|
+
|
|
808
|
+
// Need to check curve for NaN values, these pop up when drawing
|
|
809
|
+
// lines on the canvas that are not continuous. E.g. Sharp corners
|
|
810
|
+
// or stopping mid-stroke and than continuing without lifting mouse.
|
|
811
|
+
if (!isNaN(curve.control1.x) && !isNaN(curve.control1.y) && !isNaN(curve.control2.x) && !isNaN(curve.control2.y)) {
|
|
812
|
+
var attr = 'M ' + curve.startPoint.x.toFixed(3) + ',' + curve.startPoint.y.toFixed(3) + ' ' + ('C ' + curve.control1.x.toFixed(3) + ',' + curve.control1.y.toFixed(3) + ' ') + (curve.control2.x.toFixed(3) + ',' + curve.control2.y.toFixed(3) + ' ') + (curve.endPoint.x.toFixed(3) + ',' + curve.endPoint.y.toFixed(3));
|
|
813
|
+
|
|
814
|
+
path.setAttribute('d', attr);
|
|
815
|
+
path.setAttribute('stroke-width', (widths.end * 2.25).toFixed(3));
|
|
816
|
+
path.setAttribute('stroke', color);
|
|
817
|
+
path.setAttribute('fill', 'none');
|
|
818
|
+
path.setAttribute('stroke-linecap', 'round');
|
|
819
|
+
|
|
820
|
+
svg.appendChild(path);
|
|
821
|
+
}
|
|
822
|
+
}, function (rawPoint) {
|
|
823
|
+
var circle = document.createElement('circle');
|
|
824
|
+
var dotSize = typeof _this2.dotSize === 'function' ? _this2.dotSize() : _this2.dotSize;
|
|
825
|
+
circle.setAttribute('r', dotSize);
|
|
826
|
+
circle.setAttribute('cx', rawPoint.x);
|
|
827
|
+
circle.setAttribute('cy', rawPoint.y);
|
|
828
|
+
circle.setAttribute('fill', rawPoint.color);
|
|
829
|
+
|
|
830
|
+
svg.appendChild(circle);
|
|
831
|
+
});
|
|
832
|
+
|
|
833
|
+
var prefix = 'data:image/svg+xml;base64,';
|
|
834
|
+
var header = '<svg' + ' xmlns="http://www.w3.org/2000/svg"' + ' xmlns:xlink="http://www.w3.org/1999/xlink"' + (' viewBox="' + minX + ' ' + minY + ' ' + maxX + ' ' + maxY + '"') + (' width="' + maxX + '"') + (' height="' + maxY + '"') + '>';
|
|
835
|
+
var body = svg.innerHTML;
|
|
836
|
+
|
|
837
|
+
// IE hack for missing innerHTML property on SVGElement
|
|
838
|
+
if (body === undefined) {
|
|
839
|
+
var dummy = document.createElement('dummy');
|
|
840
|
+
var nodes = svg.childNodes;
|
|
841
|
+
dummy.innerHTML = '';
|
|
842
|
+
|
|
843
|
+
for (var i = 0; i < nodes.length; i += 1) {
|
|
844
|
+
dummy.appendChild(nodes[i].cloneNode(true));
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
body = dummy.innerHTML;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
var footer = '</svg>';
|
|
851
|
+
var data = header + body + footer;
|
|
852
|
+
|
|
853
|
+
return prefix + btoa(data);
|
|
854
|
+
};
|
|
855
|
+
|
|
856
|
+
SignaturePad.prototype.fromData = function (pointGroups) {
|
|
857
|
+
var _this3 = this;
|
|
858
|
+
|
|
859
|
+
this.clear();
|
|
860
|
+
|
|
861
|
+
this._fromData(pointGroups, function (curve, widths) {
|
|
862
|
+
return _this3._drawCurve(curve, widths.start, widths.end);
|
|
863
|
+
}, function (rawPoint) {
|
|
864
|
+
return _this3._drawDot(rawPoint);
|
|
865
|
+
});
|
|
866
|
+
|
|
867
|
+
this._data = pointGroups;
|
|
868
|
+
};
|
|
869
|
+
|
|
870
|
+
SignaturePad.prototype.toData = function () {
|
|
871
|
+
return this._data;
|
|
872
|
+
};
|
|
873
|
+
|
|
874
|
+
var build$1 = {exports: {}};
|
|
875
|
+
|
|
876
|
+
var build = build$1.exports;
|
|
877
|
+
|
|
878
|
+
var hasRequiredBuild;
|
|
879
|
+
|
|
880
|
+
function requireBuild () {
|
|
881
|
+
if (hasRequiredBuild) return build$1.exports;
|
|
882
|
+
hasRequiredBuild = 1;
|
|
883
|
+
(function (module, exports$1) {
|
|
884
|
+
!function(e,t){module.exports=t();}(build,function(){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:false};return e[n].call(o.exports,o,o.exports,t),o.loaded=true,o.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t){function r(e){var t=e.getContext("2d"),r=e.width,n=e.height,o=t.getImageData(0,0,r,n).data,f=a(true,r,n,o),i=a(false,r,n,o),c=u(true,r,n,o),d=u(false,r,n,o),p=d-c+1,l=i-f+1,s=t.getImageData(c,f,p,l);return e.width=p,e.height=l,t.clearRect(0,0,p,l),t.putImageData(s,0,0),e}function n(e,t,r,n){return {red:n[4*(r*t+e)],green:n[4*(r*t+e)+1],blue:n[4*(r*t+e)+2],alpha:n[4*(r*t+e)+3]}}function o(e,t,r,o){return n(e,t,r,o).alpha}function a(e,t,r,n){for(var a=e?1:-1,u=e?0:r-1,f=u;e?f<r:f>-1;f+=a)for(var i=0;i<t;i++)if(o(i,f,t,n))return f;return null}function u(e,t,r,n){for(var a=e?1:-1,u=e?0:t-1,f=u;e?f<t:f>-1;f+=a)for(var i=0;i<r;i++)if(o(f,i,t,n))return f;return null}Object.defineProperty(t,"__esModule",{value:true}),t.default=r;}])});
|
|
885
|
+
} (build$1));
|
|
886
|
+
return build$1.exports;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
var buildExports = requireBuild();
|
|
890
|
+
var trimCanvas = /*@__PURE__*/getDefaultExportFromCjs(buildExports);
|
|
891
|
+
|
|
892
|
+
var _excluded = ["canvasProps", "clearOnResize"];
|
|
893
|
+
var SignatureCanvas$1 = /*#__PURE__*/function (_Component) {
|
|
894
|
+
_inherits(SignatureCanvas, _Component);
|
|
895
|
+
var _super = _createSuper(SignatureCanvas);
|
|
896
|
+
function SignatureCanvas() {
|
|
897
|
+
var _this;
|
|
898
|
+
_classCallCheck(this, SignatureCanvas);
|
|
899
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
900
|
+
args[_key] = arguments[_key];
|
|
901
|
+
}
|
|
902
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
903
|
+
_this.staticThis = _this.constructor;
|
|
904
|
+
_this._sigPad = null;
|
|
905
|
+
_this._canvas = null;
|
|
906
|
+
_this.setRef = function (ref) {
|
|
907
|
+
_this._canvas = ref;
|
|
908
|
+
// if component is unmounted, set internal references to null
|
|
909
|
+
if (_this._canvas === null) {
|
|
910
|
+
_this._sigPad = null;
|
|
911
|
+
}
|
|
912
|
+
};
|
|
913
|
+
_this._excludeOurProps = function () {
|
|
914
|
+
var _this$props = _this.props;
|
|
915
|
+
_this$props.canvasProps;
|
|
916
|
+
_this$props.clearOnResize;
|
|
917
|
+
var sigPadProps = _objectWithoutProperties(_this$props, _excluded);
|
|
918
|
+
return sigPadProps;
|
|
919
|
+
};
|
|
920
|
+
_this.componentDidMount = function () {
|
|
921
|
+
var canvas = _this.getCanvas();
|
|
922
|
+
_this._sigPad = new SignaturePad(canvas, _this._excludeOurProps());
|
|
923
|
+
_this._resizeCanvas();
|
|
924
|
+
_this.on();
|
|
925
|
+
};
|
|
926
|
+
_this.componentWillUnmount = function () {
|
|
927
|
+
_this.off();
|
|
928
|
+
};
|
|
929
|
+
_this.componentDidUpdate = function () {
|
|
930
|
+
Object.assign(_this._sigPad, _this._excludeOurProps());
|
|
931
|
+
};
|
|
932
|
+
_this.getCanvas = function () {
|
|
933
|
+
if (_this._canvas === null) {
|
|
934
|
+
throw _this.staticThis.refNullError;
|
|
935
|
+
}
|
|
936
|
+
return _this._canvas;
|
|
937
|
+
};
|
|
938
|
+
_this.getTrimmedCanvas = function () {
|
|
939
|
+
// copy the canvas
|
|
940
|
+
var canvas = _this.getCanvas();
|
|
941
|
+
var copy = document.createElement('canvas');
|
|
942
|
+
copy.width = canvas.width;
|
|
943
|
+
copy.height = canvas.height;
|
|
944
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
945
|
+
copy.getContext('2d').drawImage(canvas, 0, 0);
|
|
946
|
+
// then trim it
|
|
947
|
+
return trimCanvas(copy);
|
|
948
|
+
};
|
|
949
|
+
_this.getSignaturePad = function () {
|
|
950
|
+
if (_this._sigPad === null) {
|
|
951
|
+
throw _this.staticThis.refNullError;
|
|
952
|
+
}
|
|
953
|
+
return _this._sigPad;
|
|
954
|
+
};
|
|
955
|
+
_this._checkClearOnResize = function () {
|
|
956
|
+
if (!_this.props.clearOnResize) {
|
|
957
|
+
// eslint-disable-line @typescript-eslint/strict-boolean-expressions -- this is backward compatible with the previous behavior, where null was treated as falsey
|
|
958
|
+
return;
|
|
959
|
+
}
|
|
960
|
+
_this._resizeCanvas();
|
|
961
|
+
};
|
|
962
|
+
_this._resizeCanvas = function () {
|
|
963
|
+
var _this$props$canvasPro, _window$devicePixelRa;
|
|
964
|
+
var canvasProps = (_this$props$canvasPro = _this.props.canvasProps) !== null && _this$props$canvasPro !== void 0 ? _this$props$canvasPro : {};
|
|
965
|
+
var width = canvasProps.width,
|
|
966
|
+
height = canvasProps.height;
|
|
967
|
+
// don't resize if the canvas has fixed width and height
|
|
968
|
+
if (typeof width !== 'undefined' && typeof height !== 'undefined') {
|
|
969
|
+
return;
|
|
970
|
+
}
|
|
971
|
+
var canvas = _this.getCanvas();
|
|
972
|
+
/* When zoomed out to less than 100%, for some very strange reason,
|
|
973
|
+
some browsers report devicePixelRatio as less than 1
|
|
974
|
+
and only part of the canvas is cleared then. */
|
|
975
|
+
var ratio = Math.max((_window$devicePixelRa = window.devicePixelRatio) !== null && _window$devicePixelRa !== void 0 ? _window$devicePixelRa : 1, 1);
|
|
976
|
+
if (typeof width === 'undefined') {
|
|
977
|
+
canvas.width = canvas.offsetWidth * ratio;
|
|
978
|
+
}
|
|
979
|
+
if (typeof height === 'undefined') {
|
|
980
|
+
canvas.height = canvas.offsetHeight * ratio;
|
|
981
|
+
}
|
|
982
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
983
|
+
canvas.getContext('2d').scale(ratio, ratio);
|
|
984
|
+
_this.clear();
|
|
985
|
+
};
|
|
986
|
+
_this.render = function () {
|
|
987
|
+
var canvasProps = _this.props.canvasProps;
|
|
988
|
+
return /*#__PURE__*/React__default.createElement("canvas", _extends({
|
|
989
|
+
ref: _this.setRef
|
|
990
|
+
}, canvasProps));
|
|
991
|
+
};
|
|
992
|
+
_this.on = function () {
|
|
993
|
+
window.addEventListener('resize', _this._checkClearOnResize);
|
|
994
|
+
return _this.getSignaturePad().on();
|
|
995
|
+
};
|
|
996
|
+
_this.off = function () {
|
|
997
|
+
window.removeEventListener('resize', _this._checkClearOnResize);
|
|
998
|
+
return _this.getSignaturePad().off();
|
|
999
|
+
};
|
|
1000
|
+
_this.clear = function () {
|
|
1001
|
+
return _this.getSignaturePad().clear();
|
|
1002
|
+
};
|
|
1003
|
+
_this.isEmpty = function () {
|
|
1004
|
+
return _this.getSignaturePad().isEmpty();
|
|
1005
|
+
};
|
|
1006
|
+
_this.fromDataURL = function (dataURL, options) {
|
|
1007
|
+
return _this.getSignaturePad().fromDataURL(dataURL, options);
|
|
1008
|
+
};
|
|
1009
|
+
_this.toDataURL = function (type, encoderOptions) {
|
|
1010
|
+
return _this.getSignaturePad().toDataURL(type, encoderOptions);
|
|
1011
|
+
};
|
|
1012
|
+
_this.fromData = function (pointGroups) {
|
|
1013
|
+
return _this.getSignaturePad().fromData(pointGroups);
|
|
1014
|
+
};
|
|
1015
|
+
_this.toData = function () {
|
|
1016
|
+
return _this.getSignaturePad().toData();
|
|
1017
|
+
};
|
|
1018
|
+
return _this;
|
|
1019
|
+
} // shortcut reference (https://stackoverflow.com/a/29244254/3431180)
|
|
1020
|
+
// propagate prop updates to SignaturePad
|
|
1021
|
+
// return the canvas ref for operations like toDataURL
|
|
1022
|
+
// return a trimmed copy of the canvas
|
|
1023
|
+
// return the internal SignaturePad reference
|
|
1024
|
+
// all wrapper functions below render
|
|
1025
|
+
//
|
|
1026
|
+
return _createClass(SignatureCanvas);
|
|
1027
|
+
}(Component);
|
|
1028
|
+
SignatureCanvas$1.propTypes = {
|
|
1029
|
+
// signature_pad's props
|
|
1030
|
+
velocityFilterWeight: PropTypes.number,
|
|
1031
|
+
minWidth: PropTypes.number,
|
|
1032
|
+
maxWidth: PropTypes.number,
|
|
1033
|
+
minDistance: PropTypes.number,
|
|
1034
|
+
dotSize: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),
|
|
1035
|
+
penColor: PropTypes.string,
|
|
1036
|
+
throttle: PropTypes.number,
|
|
1037
|
+
onEnd: PropTypes.func,
|
|
1038
|
+
onBegin: PropTypes.func,
|
|
1039
|
+
// props specific to the React wrapper
|
|
1040
|
+
canvasProps: PropTypes.object,
|
|
1041
|
+
clearOnResize: PropTypes.bool
|
|
1042
|
+
};
|
|
1043
|
+
SignatureCanvas$1.defaultProps = {
|
|
1044
|
+
clearOnResize: true
|
|
1045
|
+
};
|
|
1046
|
+
SignatureCanvas$1.refNullError = new Error('react-signature-canvas is currently ' + 'mounting or unmounting: React refs are null during this phase.');
|
|
1047
|
+
|
|
1048
|
+
var SignatureCanvas = forwardRef(function (props, ref) {
|
|
1049
|
+
var fieldKey = props.fieldKey, repeatIndex = props.repeatIndex, responsiveStyles = props.responsiveStyles, _a = props.defaultValue, defaultValue = _a === void 0 ? null : _a, _b = props.disabled, disabled = _b === void 0 ? false : _b, _c = props.showClear, showClear = _c === void 0 ? true : _c, _d = props.onClear, onClear = _d === void 0 ? function () { } : _d, _e = props.onEnd, onEnd = _e === void 0 ? function () { } : _e, t = props.translation;
|
|
1050
|
+
var _f = __read(useState(defaultValue !== null), 2), isClearVisible = _f[0], setIsClearVisible = _f[1];
|
|
1051
|
+
var signatureRef = useRef(undefined);
|
|
1052
|
+
var signatureCanvasStyles = responsiveStyles.getTarget('field', true);
|
|
1053
|
+
useImperativeHandle(ref, function () { return ({
|
|
1054
|
+
clear: function () {
|
|
1055
|
+
var _a;
|
|
1056
|
+
(_a = signatureRef.current) === null || _a === void 0 ? void 0 : _a.clear();
|
|
1057
|
+
},
|
|
1058
|
+
isEmpty: function () {
|
|
1059
|
+
var _a;
|
|
1060
|
+
return (_a = signatureRef.current) === null || _a === void 0 ? void 0 : _a.isEmpty();
|
|
1061
|
+
},
|
|
1062
|
+
getTrimmedCanvas: function () {
|
|
1063
|
+
var _a;
|
|
1064
|
+
return (_a = signatureRef.current) === null || _a === void 0 ? void 0 : _a.getTrimmedCanvas();
|
|
1065
|
+
},
|
|
1066
|
+
getCanvas: function () {
|
|
1067
|
+
var _a;
|
|
1068
|
+
return (_a = signatureRef.current) === null || _a === void 0 ? void 0 : _a.getCanvas();
|
|
1069
|
+
},
|
|
1070
|
+
fromDataURL: function (dataURL, options) {
|
|
1071
|
+
var _a;
|
|
1072
|
+
return (_a = signatureRef.current) === null || _a === void 0 ? void 0 : _a.fromDataURL(dataURL, options);
|
|
1073
|
+
}
|
|
1074
|
+
}); });
|
|
1075
|
+
useEffect(function () {
|
|
1076
|
+
function setSignatureCanvas() {
|
|
1077
|
+
var _a;
|
|
1078
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
1079
|
+
var sig, signatureFile, base64, _b, img;
|
|
1080
|
+
return __generator(this, function (_c) {
|
|
1081
|
+
switch (_c.label) {
|
|
1082
|
+
case 0:
|
|
1083
|
+
sig = (_a = signatureRef.current) === null || _a === void 0 ? void 0 : _a.getCanvas();
|
|
1084
|
+
if (sig && defaultValue === null) {
|
|
1085
|
+
sig.getContext('2d').clearRect(0, 0, sig.width, sig.height);
|
|
1086
|
+
return [2 /*return*/];
|
|
1087
|
+
}
|
|
1088
|
+
return [4 /*yield*/, defaultValue];
|
|
1089
|
+
case 1:
|
|
1090
|
+
signatureFile = _c.sent();
|
|
1091
|
+
if (!signatureFile) return [3 /*break*/, 3];
|
|
1092
|
+
return [4 /*yield*/, toBase64(signatureFile)];
|
|
1093
|
+
case 2:
|
|
1094
|
+
_b = _c.sent();
|
|
1095
|
+
return [3 /*break*/, 4];
|
|
1096
|
+
case 3:
|
|
1097
|
+
_b = '';
|
|
1098
|
+
_c.label = 4;
|
|
1099
|
+
case 4:
|
|
1100
|
+
base64 = _b;
|
|
1101
|
+
img = new Image();
|
|
1102
|
+
img.onload = function () {
|
|
1103
|
+
if (!sig)
|
|
1104
|
+
return;
|
|
1105
|
+
var hRatio = sig.offsetWidth / img.width;
|
|
1106
|
+
var vRatio = sig.offsetHeight / img.height;
|
|
1107
|
+
var ratio = Math.min(hRatio, vRatio, 1.5);
|
|
1108
|
+
var imgWidth = img.width * ratio;
|
|
1109
|
+
var imgHeight = img.height * ratio;
|
|
1110
|
+
// position signature in bottom left corner
|
|
1111
|
+
var xOffset = 0;
|
|
1112
|
+
var yOffset = sig.offsetHeight - imgHeight;
|
|
1113
|
+
// Preserve aspect ratio when loading signature
|
|
1114
|
+
// TODO: fix offsets. for some reason they're not being respected and
|
|
1115
|
+
// are treated as 0, 0
|
|
1116
|
+
sig.getContext('2d').clearRect(0, 0, sig.width, sig.height);
|
|
1117
|
+
// custom implementation of fromDataURL to support xOffset and yOffset
|
|
1118
|
+
// since they are not supported by signature-pad v2.3.2
|
|
1119
|
+
// previously: signatureRef.current.fromDataURL(base64, options);
|
|
1120
|
+
fromDataURL(sig, base64, {
|
|
1121
|
+
width: imgWidth,
|
|
1122
|
+
height: imgHeight,
|
|
1123
|
+
xOffset: xOffset,
|
|
1124
|
+
yOffset: yOffset
|
|
1125
|
+
});
|
|
1126
|
+
};
|
|
1127
|
+
img.src = base64;
|
|
1128
|
+
return [2 /*return*/];
|
|
1129
|
+
}
|
|
1130
|
+
});
|
|
1131
|
+
});
|
|
1132
|
+
}
|
|
1133
|
+
setSignatureCanvas();
|
|
1134
|
+
}, [defaultValue]);
|
|
1135
|
+
return (jsxs(Fragment, { children: [showClear && isClearVisible && (jsx("div", __assign({ css: __assign(__assign({ background: '#ffffff', position: 'absolute', bottom: '5px', right: '5px', borderRadius: '6px', display: 'flex', cursor: 'pointer', color: 'rgb(173, 173, 173)', fontSize: '14px', transition: '0.15s ease-in-out all' }, (disabled ? responsiveStyles.getTarget('disabled') : {})), { '&:hover': { color: 'black' } }), onClick: function () {
|
|
1136
|
+
signatureRef.current.clear();
|
|
1137
|
+
onClear();
|
|
1138
|
+
setIsClearVisible(false);
|
|
1139
|
+
} }, { children: t.clear }))), jsx(SignatureCanvas$1, { penColor: 'black', dotSize: 4, minWidth: 1.5, maxWidth: 3, clearOnResize: false, canvasProps: {
|
|
1140
|
+
id: fieldKey + repeatIndex,
|
|
1141
|
+
style: __assign(__assign({}, signatureCanvasStyles), { width: '100%', height: '100%', boxSizing: 'border-box', paddingLeft: '5px' })
|
|
1142
|
+
}, ref: signatureRef, onEnd: function () {
|
|
1143
|
+
onEnd();
|
|
1144
|
+
setIsClearVisible(!signatureRef.current.isEmpty());
|
|
1145
|
+
} })] }));
|
|
1146
|
+
});
|
|
1147
|
+
|
|
1148
|
+
var SIGNER_NAME_KEY = 'feathery-signer-name';
|
|
1149
|
+
function SignatureModal(props) {
|
|
1150
|
+
var _a, _b;
|
|
1151
|
+
var _c = props.show, show = _c === void 0 ? false : _c, _d = props.setShow, setShow = _d === void 0 ? function () { } : _d, fieldKey = props.fieldKey, repeatIndex = props.repeatIndex, defaultValue = props.defaultValue, responsiveStyles = props.responsiveStyles, _e = props.onClear, onClear = _e === void 0 ? function () { } : _e, _f = props.onEnd, onEnd = _f === void 0 ? function () { } : _f, _g = props.signMethods, signMethods = _g === void 0 ? '' : _g, t = props.translation;
|
|
1152
|
+
var typeOnly = signMethods === 'type';
|
|
1153
|
+
var drawOnly = signMethods === 'draw';
|
|
1154
|
+
var _h = __read(useState(drawOnly), 2), drawSignature = _h[0], setDrawSignature = _h[1];
|
|
1155
|
+
var _j = __read(useState(''), 2), fullName = _j[0], setFullName = _j[1];
|
|
1156
|
+
var _k = __read(useState(false), 2), isLoading = _k[0], setLoading = _k[1];
|
|
1157
|
+
var _l = __read(useState(), 2), signatureFile = _l[0], setSignatureFile = _l[1];
|
|
1158
|
+
var _m = __read(useState(''), 2), signatureImgData = _m[0], setSignatureImgData = _m[1];
|
|
1159
|
+
var fullNameRef = useRef(fullName);
|
|
1160
|
+
var signatureCanvasRef = useRef(null);
|
|
1161
|
+
var getSignerNameFromSessionStorage = function () {
|
|
1162
|
+
var signerName = sessionStorage.getItem(SIGNER_NAME_KEY);
|
|
1163
|
+
return signerName || '';
|
|
1164
|
+
};
|
|
1165
|
+
useEffect(function () {
|
|
1166
|
+
if (show) {
|
|
1167
|
+
var storedName = getSignerNameFromSessionStorage();
|
|
1168
|
+
setFullName(storedName);
|
|
1169
|
+
}
|
|
1170
|
+
}, [show]);
|
|
1171
|
+
useEffect(function () {
|
|
1172
|
+
fullNameRef.current = fullName;
|
|
1173
|
+
if (fullName !== '') {
|
|
1174
|
+
setLoading(true);
|
|
1175
|
+
debounceGenerateSignature();
|
|
1176
|
+
}
|
|
1177
|
+
else {
|
|
1178
|
+
setSignatureImgData('');
|
|
1179
|
+
setSignatureFile(undefined);
|
|
1180
|
+
setLoading(false);
|
|
1181
|
+
}
|
|
1182
|
+
}, [fullName]);
|
|
1183
|
+
var getFullName = function () { return fullNameRef.current; };
|
|
1184
|
+
var resetState = function () {
|
|
1185
|
+
setSignatureFile(undefined);
|
|
1186
|
+
setSignatureImgData('');
|
|
1187
|
+
setFullName('');
|
|
1188
|
+
if (!drawOnly) {
|
|
1189
|
+
setDrawSignature(false);
|
|
1190
|
+
}
|
|
1191
|
+
};
|
|
1192
|
+
var generateDrawnSignature = function () {
|
|
1193
|
+
try {
|
|
1194
|
+
var canvas = cloneCanvas(signatureCanvasRef.current.getCanvas());
|
|
1195
|
+
if (!canvas) {
|
|
1196
|
+
throw new Error('Could not find signature canvas');
|
|
1197
|
+
}
|
|
1198
|
+
var trimmedCanvas = trimCanvas$1(canvas);
|
|
1199
|
+
var imgData = trimmedCanvas.toDataURL('image/png', 1.0);
|
|
1200
|
+
var imgFile = dataURLToFile(imgData, "".concat(fieldKey, ".png"));
|
|
1201
|
+
setSignatureImgData(imgData);
|
|
1202
|
+
setSignatureFile(imgFile);
|
|
1203
|
+
}
|
|
1204
|
+
catch (error) {
|
|
1205
|
+
console.error('Error generating signature:', error);
|
|
1206
|
+
}
|
|
1207
|
+
};
|
|
1208
|
+
var generateTextSignature = function () {
|
|
1209
|
+
var _fullName = getFullName();
|
|
1210
|
+
if (!_fullName) {
|
|
1211
|
+
setSignatureImgData('');
|
|
1212
|
+
setSignatureFile(undefined);
|
|
1213
|
+
setLoading(false);
|
|
1214
|
+
return;
|
|
1215
|
+
}
|
|
1216
|
+
try {
|
|
1217
|
+
var canvas = generateSignatureImage(_fullName);
|
|
1218
|
+
if (!canvas) {
|
|
1219
|
+
throw new Error('Could not find signature canvas');
|
|
1220
|
+
}
|
|
1221
|
+
var trimmedCanvas = trimCanvas$1(canvas);
|
|
1222
|
+
var imgData = trimmedCanvas.toDataURL('image/png', 1.0);
|
|
1223
|
+
var imgFile = dataURLToFile(imgData, "".concat(fieldKey, ".png"));
|
|
1224
|
+
setSignatureImgData(imgData);
|
|
1225
|
+
setSignatureFile(imgFile);
|
|
1226
|
+
setLoading(false);
|
|
1227
|
+
}
|
|
1228
|
+
catch (error) {
|
|
1229
|
+
console.error('Error generating signature:', error);
|
|
1230
|
+
setLoading(false);
|
|
1231
|
+
}
|
|
1232
|
+
};
|
|
1233
|
+
var debounceGenerateSignature = useCallback(debounce(generateTextSignature, 1000), []);
|
|
1234
|
+
var handleCancel = function () {
|
|
1235
|
+
setShow(false);
|
|
1236
|
+
resetState();
|
|
1237
|
+
};
|
|
1238
|
+
var handleSubmit = function () {
|
|
1239
|
+
if (signatureFile) {
|
|
1240
|
+
onEnd(signatureFile);
|
|
1241
|
+
sessionStorage.setItem(SIGNER_NAME_KEY, fullName);
|
|
1242
|
+
setShow(false);
|
|
1243
|
+
resetState();
|
|
1244
|
+
}
|
|
1245
|
+
};
|
|
1246
|
+
if (!show) {
|
|
1247
|
+
return null;
|
|
1248
|
+
}
|
|
1249
|
+
return (jsxs("div", __assign({ css: {
|
|
1250
|
+
position: 'fixed',
|
|
1251
|
+
display: 'flex',
|
|
1252
|
+
top: 0,
|
|
1253
|
+
left: 0,
|
|
1254
|
+
width: '100vw',
|
|
1255
|
+
height: '100vh',
|
|
1256
|
+
background: 'rgba(0, 0, 0, 0.2)',
|
|
1257
|
+
zIndex: MODAL_Z_INDEX,
|
|
1258
|
+
alignItems: 'center',
|
|
1259
|
+
justifyContent: 'center',
|
|
1260
|
+
fontSize: '16px',
|
|
1261
|
+
fontFamily: (_b = (_a = responsiveStyles === null || responsiveStyles === void 0 ? void 0 : responsiveStyles.getTarget('fc')) === null || _a === void 0 ? void 0 : _a.fontFamily) !== null && _b !== void 0 ? _b : 'sans-serif'
|
|
1262
|
+
} }, { children: [jsx("div", { onClick: function () { return handleCancel(); }, css: {
|
|
1263
|
+
position: 'fixed',
|
|
1264
|
+
top: 0,
|
|
1265
|
+
left: 0,
|
|
1266
|
+
width: '100%',
|
|
1267
|
+
height: '100%'
|
|
1268
|
+
} }), jsxs("div", __assign({ className: 'feathery-modal', css: {
|
|
1269
|
+
position: 'relative',
|
|
1270
|
+
backgroundColor: '#fff',
|
|
1271
|
+
borderRadius: '14px',
|
|
1272
|
+
width: '100%',
|
|
1273
|
+
maxWidth: '600px'
|
|
1274
|
+
} }, { children: [jsxs("div", __assign({ css: {
|
|
1275
|
+
position: 'relative',
|
|
1276
|
+
display: 'flex',
|
|
1277
|
+
padding: '20px',
|
|
1278
|
+
borderBottom: '1px solid #e9e9e9'
|
|
1279
|
+
} }, { children: [jsx("h3", __assign({ css: { padding: 0, margin: 0, flex: '1' } }, { children: t.title })), jsx(CloseIcon, { onClick: function () { return handleCancel(); }, css: { '&:hover': { cursor: 'pointer' } } })] })), jsxs("div", __assign({ css: {
|
|
1280
|
+
position: 'relative',
|
|
1281
|
+
padding: '20px 20px 30px 20px',
|
|
1282
|
+
'& h3': {
|
|
1283
|
+
fontSize: '1em',
|
|
1284
|
+
margin: 0,
|
|
1285
|
+
padding: 0
|
|
1286
|
+
}
|
|
1287
|
+
} }, { children: [!drawSignature && !drawOnly && (jsxs(Fragment, { children: [jsxs("div", __assign({ css: {
|
|
1288
|
+
display: 'flex',
|
|
1289
|
+
gap: '15px',
|
|
1290
|
+
flexDirection: 'column',
|
|
1291
|
+
paddingBottom: '30px'
|
|
1292
|
+
} }, { children: [jsx("h3", { children: t.type_option }), jsx("input", { defaultValue: getSignerNameFromSessionStorage(), onChange: function (e) {
|
|
1293
|
+
var val = e.target.value.trim();
|
|
1294
|
+
setFullName(val);
|
|
1295
|
+
}, placeholder: t.type_placeholder, css: {
|
|
1296
|
+
padding: '8px 10px',
|
|
1297
|
+
borderRadius: '4px',
|
|
1298
|
+
border: '1px solid #e9e9e9',
|
|
1299
|
+
'&:focus,&:focus-visible': {
|
|
1300
|
+
border: '1px solid #5e5e5e',
|
|
1301
|
+
outline: 'none'
|
|
1302
|
+
}
|
|
1303
|
+
} }), jsxs("div", __assign({ css: {
|
|
1304
|
+
position: 'relative',
|
|
1305
|
+
width: '100%',
|
|
1306
|
+
height: '100px',
|
|
1307
|
+
backgroundColor: '#f6f6f6',
|
|
1308
|
+
display: 'flex',
|
|
1309
|
+
alignItems: 'center',
|
|
1310
|
+
justifyContent: 'center',
|
|
1311
|
+
fontSize: '2em',
|
|
1312
|
+
fontFamily: 'La Belle Aurore'
|
|
1313
|
+
} }, { children: [isLoading && (jsx("div", __assign({ css: {
|
|
1314
|
+
position: 'absolute',
|
|
1315
|
+
top: 0,
|
|
1316
|
+
left: 0,
|
|
1317
|
+
width: '100%',
|
|
1318
|
+
height: '100%',
|
|
1319
|
+
backgroundColor: '#f6f6f6',
|
|
1320
|
+
display: 'flex',
|
|
1321
|
+
alignItems: 'center',
|
|
1322
|
+
justifyContent: 'center',
|
|
1323
|
+
fontFamily: 'sans-serif',
|
|
1324
|
+
fontSize: '.9rem',
|
|
1325
|
+
borderRadius: '4px'
|
|
1326
|
+
} }, { children: t.type_loading }))), !signatureImgData ? (t.type_example) : (jsx("img", { src: signatureImgData, alt: 'Signature', css: { maxHeight: '100%', maxWidth: '100%' } }))] }))] })), !typeOnly && (jsxs(Fragment, { children: [jsx("div", __assign({ css: {
|
|
1327
|
+
height: '1px',
|
|
1328
|
+
display: 'flex',
|
|
1329
|
+
alignItems: 'center',
|
|
1330
|
+
justifyContent: 'center',
|
|
1331
|
+
borderBottom: '1px solid #e9e9e9'
|
|
1332
|
+
} }, { children: jsx("div", __assign({ css: {
|
|
1333
|
+
backgroundColor: '#fff',
|
|
1334
|
+
padding: '10px',
|
|
1335
|
+
color: '#5e5e5e'
|
|
1336
|
+
} }, { children: t.or_label })) })), jsx("div", __assign({ css: {
|
|
1337
|
+
paddingTop: '30px'
|
|
1338
|
+
} }, { children: jsxs("div", __assign({ onClick: function () { return setDrawSignature(true); }, css: {
|
|
1339
|
+
padding: '20px',
|
|
1340
|
+
borderRadius: '4px',
|
|
1341
|
+
border: '1px solid #e9e9e9',
|
|
1342
|
+
'& h3': {
|
|
1343
|
+
padding: 0,
|
|
1344
|
+
margin: 0,
|
|
1345
|
+
marginBottom: '10px'
|
|
1346
|
+
},
|
|
1347
|
+
'& p': {
|
|
1348
|
+
margin: 0,
|
|
1349
|
+
padding: 0
|
|
1350
|
+
},
|
|
1351
|
+
'&:hover': {
|
|
1352
|
+
border: '1px solid #5e5e5e',
|
|
1353
|
+
cursor: 'pointer'
|
|
1354
|
+
}
|
|
1355
|
+
} }, { children: [jsx("h3", { children: t.draw_option }), jsx("p", { children: t.draw_subtitle })] })) }))] }))] })), drawSignature && (jsxs("div", __assign({ css: {
|
|
1356
|
+
display: 'flex',
|
|
1357
|
+
flexDirection: 'column',
|
|
1358
|
+
gap: '15px'
|
|
1359
|
+
} }, { children: [jsx("p", __assign({ css: {
|
|
1360
|
+
margin: 0,
|
|
1361
|
+
padding: 0
|
|
1362
|
+
} }, { children: t.draw_instructions })), jsx("div", __assign({ css: { position: 'relative', width: '100%', height: '200px' } }, { children: jsx(SignatureCanvas, { ref: signatureCanvasRef, fieldKey: fieldKey, repeatIndex: repeatIndex, responsiveStyles: responsiveStyles, onClear: onClear, onEnd: generateDrawnSignature, showClear: false, translation: t }) }))] })))] })), jsxs("div", __assign({ css: {
|
|
1363
|
+
position: 'relative',
|
|
1364
|
+
display: 'flex',
|
|
1365
|
+
padding: '20px 20px',
|
|
1366
|
+
borderTop: '1px solid #e9e9e9',
|
|
1367
|
+
justifyContent: 'space-between',
|
|
1368
|
+
'& button': {
|
|
1369
|
+
padding: '12px 0px',
|
|
1370
|
+
width: '120px',
|
|
1371
|
+
borderRadius: '4px',
|
|
1372
|
+
outline: 'none',
|
|
1373
|
+
border: 'none',
|
|
1374
|
+
fontSize: '1rem',
|
|
1375
|
+
transition: 'background-color ease-in-out 0.1s',
|
|
1376
|
+
'&:hover': {
|
|
1377
|
+
cursor: 'pointer'
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
} }, { children: [drawOnly || !drawSignature ? (jsx("button", __assign({ onClick: function () { return handleCancel(); }, css: { '&:hover': { backgroundColor: '#e1e1e1' } } }, { children: t.cancel }))) : (jsx("button", __assign({ onClick: function (e) {
|
|
1381
|
+
e.preventDefault();
|
|
1382
|
+
setDrawSignature(false);
|
|
1383
|
+
setSignatureFile(undefined);
|
|
1384
|
+
}, css: { '&:hover': { backgroundColor: '#e1e1e1' } } }, { children: t.back }))), jsxs("div", { children: [defaultValue && (jsx("button", __assign({ onClick: function (e) {
|
|
1385
|
+
e.preventDefault();
|
|
1386
|
+
onClear();
|
|
1387
|
+
}, css: {
|
|
1388
|
+
marginRight: '10px',
|
|
1389
|
+
'&:hover': { backgroundColor: '#e1e1e1' }
|
|
1390
|
+
} }, { children: t.clear }))), jsx("button", __assign({ onClick: function () {
|
|
1391
|
+
if (!isLoading)
|
|
1392
|
+
handleSubmit();
|
|
1393
|
+
}, disabled: isLoading || !signatureFile, css: {
|
|
1394
|
+
backgroundColor: '#535353',
|
|
1395
|
+
color: '#fff',
|
|
1396
|
+
'&:hover': {
|
|
1397
|
+
backgroundColor: '#3a3a3a'
|
|
1398
|
+
},
|
|
1399
|
+
'&:disabled': {
|
|
1400
|
+
'&:hover': {
|
|
1401
|
+
cursor: 'not-allowed'
|
|
1402
|
+
}
|
|
1403
|
+
}
|
|
1404
|
+
} }, { children: t.confirm }))] })] }))] }))] })));
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
var defaultTranslations = {
|
|
1408
|
+
label: 'Sign here',
|
|
1409
|
+
title: 'Add your signature',
|
|
1410
|
+
type_option: 'Type your signature',
|
|
1411
|
+
type_placeholder: 'Your full name',
|
|
1412
|
+
type_example: 'Full Name',
|
|
1413
|
+
type_loading: 'Generating signature',
|
|
1414
|
+
or_label: 'or',
|
|
1415
|
+
draw_option: 'Draw your signature',
|
|
1416
|
+
draw_subtitle: 'Draw your signature here using your mouse or trackpad',
|
|
1417
|
+
draw_instructions: 'Draw your signature in the box below',
|
|
1418
|
+
confirm: 'Sign',
|
|
1419
|
+
cancel: 'Cancel',
|
|
1420
|
+
back: 'Back',
|
|
1421
|
+
clear: 'Clear'
|
|
1422
|
+
};
|
|
1423
|
+
|
|
1424
|
+
function SignatureField(_a) {
|
|
1425
|
+
var _b, _c, _d, _e;
|
|
1426
|
+
var element = _a.element, fieldLabel = _a.fieldLabel, responsiveStyles = _a.responsiveStyles, _f = _a.defaultValue, defaultValue = _f === void 0 ? null : _f, editMode = _a.editMode, repeatIndex = _a.repeatIndex, _g = _a.elementProps, elementProps = _g === void 0 ? {} : _g, _h = _a.disabled, disabled = _h === void 0 ? false : _h, _j = _a.onEnd, onEnd = _j === void 0 ? function () { } : _j, _k = _a.onClear, onClear = _k === void 0 ? function () { } : _k, _l = _a.ReactPortal, ReactPortal = _l === void 0 ? null : _l, // This is allowing the ability to pass a portal for the modal
|
|
1427
|
+
children = _a.children;
|
|
1428
|
+
var _m = __read(useState(false), 2), showSignatureModal = _m[0], setShowSignatureModal = _m[1];
|
|
1429
|
+
var Portal = ReactPortal !== null && ReactPortal !== void 0 ? ReactPortal : (function (_a) {
|
|
1430
|
+
var children = _a.children;
|
|
1431
|
+
return jsx(Fragment, { children: children });
|
|
1432
|
+
});
|
|
1433
|
+
var servar = (_b = element.servar) !== null && _b !== void 0 ? _b : {};
|
|
1434
|
+
var fieldKey = (_c = servar.key) !== null && _c !== void 0 ? _c : element.key;
|
|
1435
|
+
var t = __assign(__assign({}, defaultTranslations), element.properties.translate);
|
|
1436
|
+
useEffect(function () {
|
|
1437
|
+
if (!global.webfontloaderPromise)
|
|
1438
|
+
global.webfontloaderPromise = import(
|
|
1439
|
+
/* webpackChunkName: "webfontloader" */ './fthry_webfontloader.DEj1XG0u.js').then(function (n) { return n.w; });
|
|
1440
|
+
global.webfontloaderPromise.then(function (WebFont) {
|
|
1441
|
+
WebFont.load({ google: { families: ['La Belle Aurore'] } });
|
|
1442
|
+
});
|
|
1443
|
+
}, []);
|
|
1444
|
+
return (jsxs(Fragment, { children: [jsx(Portal, { children: jsx(SignatureModal, { show: showSignatureModal, setShow: setShowSignatureModal, defaultValue: defaultValue, fieldKey: fieldKey, repeatIndex: repeatIndex, responsiveStyles: responsiveStyles, onClear: onClear, onEnd: onEnd, signMethods: (_e = (_d = servar.metadata) === null || _d === void 0 ? void 0 : _d.sign_methods) !== null && _e !== void 0 ? _e : '', translation: t }) }), jsxs("div", __assign({ css: __assign(__assign({ maxWidth: '100%', width: '100%', height: '100%' }, responsiveStyles.getTarget('fc')), { position: 'relative', pointerEvents: editMode || disabled ? 'none' : 'auto' }) }, elementProps, { children: [children, fieldLabel, jsxs("div", __assign({ css: __assign({ position: 'relative' }, responsiveStyles.getTarget('sub-fc')) }, { children: [jsxs(Suspense, __assign({ fallback: jsx("div", { css: __assign(__assign({}, responsiveStyles.getTarget('field', true)), { width: '100%', height: '100%', boxSizing: 'border-box', paddingLeft: '5px' }) }) }, { children: [jsx("div", __assign({ onClick: function () {
|
|
1445
|
+
if (!disabled)
|
|
1446
|
+
setShowSignatureModal(true);
|
|
1447
|
+
}, css: __assign(__assign({ position: 'absolute', display: 'flex', top: 0, left: 0, width: '100%', height: '100%', zIndex: FORM_Z_INDEX, alignItems: 'center', justifyContent: 'center' }, (disabled ? { backgroundColor: 'rgb(229, 229, 229)' } : {})), { '&:hover': {
|
|
1448
|
+
cursor: 'pointer'
|
|
1449
|
+
} }) }, { children: !defaultValue && !disabled && t.label })), jsx(SignatureCanvas, { fieldKey: fieldKey, repeatIndex: repeatIndex, responsiveStyles: responsiveStyles, defaultValue: defaultValue, disabled: disabled, showClear: false, translation: t })] })), jsx(ErrorInput, { id: servar.key, "aria-label": element.properties.aria_label })] }))] }))] }));
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
export { SignatureField as default };
|