@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,251 @@
|
|
|
1
|
+
import { j as jsxs, a as __assign, b as jsx, _ as __read, a5 as isEmptyArray, a6 as toList, a7 as useThumbnailData, a4 as __spreadArray, f as imgMaxSizeStyles, c as __awaiter, d as __generator, a8 as downloadFile, a9 as CloseIcon, i as iosScrollOnFocus, k as FORM_Z_INDEX, aa as justRemove } from './fthry_index.diObxaBS.js';
|
|
2
|
+
import { useRef, useState, useEffect } from 'react';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
import 'react-dom/client';
|
|
5
|
+
import 'stream';
|
|
6
|
+
import 'events';
|
|
7
|
+
import 'buffer';
|
|
8
|
+
import 'util';
|
|
9
|
+
import 'react-dom';
|
|
10
|
+
|
|
11
|
+
function FileUploadIcon(_a) {
|
|
12
|
+
var _b = _a.width, width = _b === void 0 ? '48px' : _b, style = _a.style;
|
|
13
|
+
return (jsxs("svg", __assign({ width: width, viewBox: '0 0 48 48', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', style: style }, { children: [jsx("path", { d: 'm18.101 30.078 5.9-5.888 5.898 5.888M24 40.3V24.19', stroke: '#414859' }), jsx("path", { d: 'M34.988 36.336c5 0 9.012-4.056 9.012-9.112s-4.012-9.112-9.012-9.112c0-5.585-4.476-10.112-10-10.112-4.244 0-7.848 2.646-9.302 6.408-.232 0-.465-.059-.698-.059C8.942 14.35 4 19.288 4 25.46c0 6.114 4.884 11.111 10.988 11.111', stroke: '#414859' })] })));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function DownloadIcon(_a) {
|
|
17
|
+
var _b = _a.width, width = _b === void 0 ? 26 : _b, _c = _a.height, height = _c === void 0 ? 26 : _c;
|
|
18
|
+
return (jsx("svg", __assign({ width: width, height: height, viewBox: '0 0 26 26', fill: 'none', xmlns: 'http://www.w3.org/2000/svg' }, { children: jsx("path", { d: 'M1 19.3529V22.1765C1 22.9253 1.31607 23.6435 1.87868 24.173C2.44129 24.7025 3.20435 25 4 25H22C22.7956 25 23.5587 24.7025 24.1213 24.173C24.6839 23.6435 25 22.9253 25 22.1765V19.3529M5.5 10.8824L13 17.9412M13 17.9412L20.5 10.8824M13 17.9412V1', stroke: 'white', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' }) })));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
var DEFAULT_FILE_SIZE_LIMIT = 1024 * 1024 * 10;
|
|
22
|
+
var NUM_FILES_LIMIT = 20;
|
|
23
|
+
function FileUploadField(_a) {
|
|
24
|
+
var _this = this;
|
|
25
|
+
var element = _a.element, responsiveStyles = _a.responsiveStyles, _b = _a.required, required = _b === void 0 ? false : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, editMode = _a.editMode, _d = _a.onChange, customOnChange = _d === void 0 ? function () { } : _d, _e = _a.initialFiles, initialFiles = _e === void 0 ? [] : _e, _f = _a.elementProps, elementProps = _f === void 0 ? {} : _f, children = _a.children;
|
|
26
|
+
var servar = element.servar;
|
|
27
|
+
var showLabel = servar.name !== '';
|
|
28
|
+
var isMultiple = servar.metadata.multiple;
|
|
29
|
+
var fileInput = useRef(null);
|
|
30
|
+
var _g = __read(useState([]), 2), rawFiles = _g[0], setRawFiles = _g[1];
|
|
31
|
+
var _h = __read(useState(-1), 2), hoverDownload = _h[0], setHoverDownload = _h[1];
|
|
32
|
+
useEffect(function () {
|
|
33
|
+
// Prevent infinite loop of setting a new empty array as the value
|
|
34
|
+
if (isEmptyArray(rawFiles) && isEmptyArray(initialFiles))
|
|
35
|
+
return;
|
|
36
|
+
// Normalize placeholders like [null] to an empty list
|
|
37
|
+
setRawFiles(toList(initialFiles).filter(Boolean));
|
|
38
|
+
}, [initialFiles]);
|
|
39
|
+
// Thumbnails derived from current files; rawFiles is normalized to exclude nulls
|
|
40
|
+
var thumbnailData = useThumbnailData(rawFiles);
|
|
41
|
+
var hasFiles = rawFiles.length > 0;
|
|
42
|
+
var allowMoreFiles = isMultiple || !hasFiles;
|
|
43
|
+
var hidePreview = element.styles.hide_file_preview;
|
|
44
|
+
var handleDragOver = function (e) {
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
e.stopPropagation();
|
|
47
|
+
};
|
|
48
|
+
var handleDrop = function (e) {
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
e.stopPropagation();
|
|
51
|
+
var files = e.dataTransfer.files;
|
|
52
|
+
if (allowMoreFiles)
|
|
53
|
+
handleFiles(files);
|
|
54
|
+
};
|
|
55
|
+
var handleChange = function (event) {
|
|
56
|
+
var files = event.target.files;
|
|
57
|
+
if (files && allowMoreFiles)
|
|
58
|
+
handleFiles(files);
|
|
59
|
+
};
|
|
60
|
+
var onClick = function () {
|
|
61
|
+
var _a;
|
|
62
|
+
if (!allowMoreFiles && !hidePreview)
|
|
63
|
+
return;
|
|
64
|
+
if (disabled)
|
|
65
|
+
return;
|
|
66
|
+
(_a = fileInput.current) === null || _a === void 0 ? void 0 : _a.click();
|
|
67
|
+
};
|
|
68
|
+
var allowedFileTypes = __spreadArray([], __read(servar.metadata.file_types), false);
|
|
69
|
+
if (servar.metadata.custom_file_types)
|
|
70
|
+
allowedFileTypes.push.apply(allowedFileTypes, __spreadArray([], __read(servar.metadata.custom_file_types.map(function (type) { return ".".concat(type); })), false));
|
|
71
|
+
var isFileTypeMatch = function (file, allowedType) {
|
|
72
|
+
var _a;
|
|
73
|
+
// handle image/* or video/* etc.
|
|
74
|
+
if (allowedType.endsWith('/*')) {
|
|
75
|
+
var typeCategory = allowedType.split('/')[0];
|
|
76
|
+
return file.type.startsWith(typeCategory + '/');
|
|
77
|
+
}
|
|
78
|
+
// handle specific file types like application/pdf
|
|
79
|
+
if (allowedType.includes('/')) {
|
|
80
|
+
return file.type === allowedType;
|
|
81
|
+
}
|
|
82
|
+
var extension = '.' + ((_a = file.name.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase());
|
|
83
|
+
return allowedType.toLowerCase() === extension;
|
|
84
|
+
};
|
|
85
|
+
var validateFileTypes = function (files) {
|
|
86
|
+
if (allowedFileTypes.length === 0)
|
|
87
|
+
return;
|
|
88
|
+
var individualTypes = allowedFileTypes.flatMap(function (str) {
|
|
89
|
+
return str.split(',').map(function (item) { return item.trim(); });
|
|
90
|
+
});
|
|
91
|
+
var invalidFiles = files.filter(function (file) { return !individualTypes.some(function (type) { return isFileTypeMatch(file, type); }); });
|
|
92
|
+
if (invalidFiles.length > 0) {
|
|
93
|
+
throw new Error("Invalid file type. Allowed types: ".concat(allowedFileTypes.join(', ')));
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
var fileSizeLimit = servar.max_length
|
|
97
|
+
? servar.max_length * 1024
|
|
98
|
+
: DEFAULT_FILE_SIZE_LIMIT;
|
|
99
|
+
var validateFileSizes = function (files) {
|
|
100
|
+
if (files.some(function (file) { return file.size > fileSizeLimit; })) {
|
|
101
|
+
var sizeLabel = '';
|
|
102
|
+
if (fileSizeLimit < 1024)
|
|
103
|
+
sizeLabel = "".concat(fileSizeLimit, " bytes");
|
|
104
|
+
else if (fileSizeLimit <= 1024 * 1024) {
|
|
105
|
+
var kbSize = Math.floor(fileSizeLimit / 1024);
|
|
106
|
+
sizeLabel = "".concat(kbSize, " kb");
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
var mbSize = Math.floor(fileSizeLimit / (1024 * 1024));
|
|
110
|
+
sizeLabel = "".concat(mbSize, " mb");
|
|
111
|
+
}
|
|
112
|
+
throw new Error("File exceeds max size of ".concat(sizeLabel));
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
// When the user uploads files to the multi-file upload, we just append to the existing set
|
|
116
|
+
// By default the input element would just replace all the uploaded files (we don't want that)
|
|
117
|
+
var handleFiles = function (filelist) { return __awaiter(_this, void 0, void 0, function () {
|
|
118
|
+
var files, existingCount, uploadedFiles, newRawFiles, length_1;
|
|
119
|
+
var _a, _b, _c;
|
|
120
|
+
return __generator(this, function (_d) {
|
|
121
|
+
if (disabled)
|
|
122
|
+
return [2 /*return*/];
|
|
123
|
+
files = Array.from(filelist);
|
|
124
|
+
if (!isMultiple) {
|
|
125
|
+
files = [files[0]];
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
if (files.some(function (file) { return !file || !(file instanceof File) || file.size <= 0; })) {
|
|
129
|
+
throw new Error('Some files are invalid');
|
|
130
|
+
}
|
|
131
|
+
validateFileTypes(files);
|
|
132
|
+
validateFileSizes(files);
|
|
133
|
+
existingCount = hidePreview ? 0 : rawFiles.length;
|
|
134
|
+
if (files.length + existingCount > NUM_FILES_LIMIT) {
|
|
135
|
+
// Splice off the uploaded files past the upload limit
|
|
136
|
+
files.splice(NUM_FILES_LIMIT - existingCount);
|
|
137
|
+
}
|
|
138
|
+
uploadedFiles = files.map(function (file) { return Promise.resolve(file); });
|
|
139
|
+
newRawFiles = void 0;
|
|
140
|
+
if (hidePreview) {
|
|
141
|
+
newRawFiles = uploadedFiles;
|
|
142
|
+
length_1 = 0;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
newRawFiles = __spreadArray(__spreadArray([], __read(rawFiles), false), __read(uploadedFiles), false);
|
|
146
|
+
length_1 = existingCount;
|
|
147
|
+
}
|
|
148
|
+
setRawFiles(newRawFiles);
|
|
149
|
+
customOnChange(newRawFiles, length_1);
|
|
150
|
+
(_a = fileInput.current) === null || _a === void 0 ? void 0 : _a.setCustomValidity('');
|
|
151
|
+
// Wipe the value of the upload element so we can upload multiple copies of the same file
|
|
152
|
+
// If we didn't do this, then uploading the same file wouldn't re-trigger onChange
|
|
153
|
+
if (fileInput.current) {
|
|
154
|
+
fileInput.current.value = '';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
(_b = fileInput.current) === null || _b === void 0 ? void 0 : _b.setCustomValidity(error.message);
|
|
159
|
+
(_c = fileInput.current) === null || _c === void 0 ? void 0 : _c.reportValidity();
|
|
160
|
+
}
|
|
161
|
+
return [2 /*return*/];
|
|
162
|
+
});
|
|
163
|
+
}); };
|
|
164
|
+
function onClear(index) {
|
|
165
|
+
return function () {
|
|
166
|
+
var newRawFiles = justRemove(rawFiles, index);
|
|
167
|
+
setRawFiles(newRawFiles);
|
|
168
|
+
customOnChange(newRawFiles, -1);
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
var imgStyles = __assign(__assign({}, imgMaxSizeStyles), responsiveStyles.getTarget('img'));
|
|
172
|
+
var icon = element.properties.icon ? (jsx("img", { src: element.properties.icon, style: __assign(__assign({}, imgStyles), { maxWidth: '100%', height: 'auto' }), alt: '' })) : (jsx(FileUploadIcon, { width: imgStyles.width && imgStyles.width !== 'px'
|
|
173
|
+
? imgStyles.width
|
|
174
|
+
: undefined, style: { maxHeight: '100%' } }));
|
|
175
|
+
return (jsxs("div", __assign({ css: __assign({ display: 'flex', flexWrap: 'wrap', position: 'relative', pointerEvents: editMode ? 'none' : 'auto', width: '100%', height: '100%' }, responsiveStyles.getTarget('fc')) }, elementProps, { onDragOver: handleDragOver, onDrop: disabled ? undefined : handleDrop }, { children: [children, !hidePreview &&
|
|
176
|
+
thumbnailData.map(function (_a, index) {
|
|
177
|
+
var filename = _a.filename, thumbnail = _a.thumbnail;
|
|
178
|
+
return index < rawFiles.length ? (jsxs("div", __assign({ css: __assign(__assign({ position: 'relative', width: '100%', maxHeight: '100%', overflow: 'hidden', display: 'flex', justifyContent: 'center', alignItems: 'center', boxSizing: 'border-box' }, (thumbnail
|
|
179
|
+
? {}
|
|
180
|
+
: { paddingLeft: '20px', paddingRight: '20px' })), responsiveStyles.getTarget('field')), onMouseEnter: function () { return setHoverDownload(index); }, onMouseLeave: function () { return setHoverDownload(-1); } }, { children: [hoverDownload === index && (jsx("div", __assign({ css: {
|
|
181
|
+
position: 'absolute',
|
|
182
|
+
margin: 'auto',
|
|
183
|
+
left: 0,
|
|
184
|
+
right: 0,
|
|
185
|
+
top: 0,
|
|
186
|
+
bottom: 0,
|
|
187
|
+
width: '48px',
|
|
188
|
+
height: '48px',
|
|
189
|
+
borderRadius: '8px',
|
|
190
|
+
backgroundColor: '#3E414D80',
|
|
191
|
+
cursor: 'pointer',
|
|
192
|
+
display: 'flex',
|
|
193
|
+
alignItems: 'center',
|
|
194
|
+
justifyContent: 'center'
|
|
195
|
+
}, onClick: function () { return __awaiter(_this, void 0, void 0, function () { var _a; return __generator(this, function (_b) {
|
|
196
|
+
switch (_b.label) {
|
|
197
|
+
case 0:
|
|
198
|
+
_a = downloadFile;
|
|
199
|
+
return [4 /*yield*/, rawFiles[index]];
|
|
200
|
+
case 1: return [2 /*return*/, _a.apply(void 0, [(_b.sent())])];
|
|
201
|
+
}
|
|
202
|
+
}); }); } }, { children: jsx(DownloadIcon, {}) }))), thumbnail ? (jsx("img", { src: thumbnail, style: {
|
|
203
|
+
width: '100%',
|
|
204
|
+
height: '100%',
|
|
205
|
+
objectFit: 'contain'
|
|
206
|
+
}, alt: filename || '' })) : (jsx("span", __assign({ style: {
|
|
207
|
+
color: 'black',
|
|
208
|
+
height: '100%',
|
|
209
|
+
width: '100%',
|
|
210
|
+
wordBreak: 'break-all',
|
|
211
|
+
fontSize: 'small',
|
|
212
|
+
display: 'flex',
|
|
213
|
+
justifyContent: 'center',
|
|
214
|
+
alignItems: 'center',
|
|
215
|
+
textAlign: 'center'
|
|
216
|
+
} }, { children: filename || 'File' }))), jsx("div", __assign({ css: {
|
|
217
|
+
position: 'absolute',
|
|
218
|
+
top: '4px',
|
|
219
|
+
right: '4px',
|
|
220
|
+
color: 'white',
|
|
221
|
+
background: '#AAA',
|
|
222
|
+
height: '16px',
|
|
223
|
+
width: '16px',
|
|
224
|
+
borderRadius: '50%',
|
|
225
|
+
pointerEvents: disabled ? 'none' : 'auto',
|
|
226
|
+
cursor: 'pointer',
|
|
227
|
+
display: 'flex',
|
|
228
|
+
justifyContent: 'center',
|
|
229
|
+
alignItems: 'center',
|
|
230
|
+
transition: '0.2s ease all',
|
|
231
|
+
'&:hover': { backgroundColor: '#BBB' }
|
|
232
|
+
}, role: 'button', "aria-label": 'Clear file', onClick: function (event) {
|
|
233
|
+
var _a;
|
|
234
|
+
// Stop propagation so window doesn't open up to pick another file to upload
|
|
235
|
+
event.stopPropagation();
|
|
236
|
+
(_a = fileInput.current) === null || _a === void 0 ? void 0 : _a.setCustomValidity('');
|
|
237
|
+
onClear(index)();
|
|
238
|
+
} }, { children: jsx(CloseIcon, { fill: 'white', width: 12, height: 12 }) }))] }), index)) : null;
|
|
239
|
+
}), (allowMoreFiles || hidePreview) && (jsxs("div", __assign({ onClick: onClick, css: __assign({ position: 'relative', pointerEvents: disabled ? 'none' : 'auto', cursor: 'pointer', maxHeight: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column', overflow: 'hidden', boxSizing: 'border-box', width: '100%' }, responsiveStyles.getTarget('ac')) }, { children: [icon, showLabel && (jsx("div", __assign({ css: responsiveStyles.getTarget('add') }, { children: servar.name })))] }))), jsx("input", { id: servar.key, name: servar.key, ref: fileInput, type: 'file', onChange: handleChange, required: required && !hasFiles, accept: allowedFileTypes.join(',') || undefined, disabled: disabled, "aria-label": element.properties.aria_label, multiple: isMultiple, onFocus: iosScrollOnFocus, style: {
|
|
240
|
+
position: 'absolute',
|
|
241
|
+
pointerEvents: 'none',
|
|
242
|
+
opacity: 0,
|
|
243
|
+
top: 0,
|
|
244
|
+
left: 0,
|
|
245
|
+
width: '100%',
|
|
246
|
+
height: '100%',
|
|
247
|
+
zIndex: FORM_Z_INDEX - 2
|
|
248
|
+
} })] })));
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export { FileUploadField as default };
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { a as __assign, h as hoverStylesGuard, j as jsxs, b as jsx, i as iosScrollOnFocus } from './fthry_index.diObxaBS.js';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
import 'react-dom/client';
|
|
5
|
+
import 'stream';
|
|
6
|
+
import 'events';
|
|
7
|
+
import 'buffer';
|
|
8
|
+
import 'util';
|
|
9
|
+
import 'react-dom';
|
|
10
|
+
|
|
11
|
+
// Draws a checkmark, similar in dimensions to the default Chrome checkbox, in CSS
|
|
12
|
+
var checkmarkClipPath = 'polygon(40% 85%, 89% 23%, 76% 12%, 39% 59%, 23% 44%, 12% 55%)';
|
|
13
|
+
var MIN_CHECKBOX_PX = 13;
|
|
14
|
+
// Possibly extract this to its own file, however the radio type is nearly identical to checkbox
|
|
15
|
+
var radio = function (size, color) {
|
|
16
|
+
size = Math.floor(size / 1.7);
|
|
17
|
+
return {
|
|
18
|
+
height: size,
|
|
19
|
+
width: size,
|
|
20
|
+
minWidth: size,
|
|
21
|
+
minHeight: size,
|
|
22
|
+
border: 0,
|
|
23
|
+
boxShadow: "inset ".concat(size, "px ").concat(size, "px #").concat(color),
|
|
24
|
+
borderRadius: '50%'
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
var checkbox = function (size, color) {
|
|
28
|
+
return {
|
|
29
|
+
boxShadow: "inset ".concat(size, "px ").concat(size, "px #").concat(color),
|
|
30
|
+
clipPath: checkmarkClipPath
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
var scaleCheckboxSize = function (fontSize) {
|
|
34
|
+
return Math.max(fontSize, MIN_CHECKBOX_PX);
|
|
35
|
+
};
|
|
36
|
+
var applyHeightWidthMarginByFontSize = function (responsiveStyles, target, single) {
|
|
37
|
+
if (single === void 0) { single = false; }
|
|
38
|
+
responsiveStyles.apply(target, ['font_size'], function (fontSize) {
|
|
39
|
+
var scaled = scaleCheckboxSize(fontSize);
|
|
40
|
+
var scaledSize = "".concat(scaled, "px");
|
|
41
|
+
var styles = {
|
|
42
|
+
minHeight: scaledSize,
|
|
43
|
+
height: scaledSize,
|
|
44
|
+
minWidth: scaledSize,
|
|
45
|
+
width: scaledSize
|
|
46
|
+
};
|
|
47
|
+
var margin = Math.max(scaled / 2, 10);
|
|
48
|
+
if (!single)
|
|
49
|
+
styles.marginRight = "".concat(margin, "px");
|
|
50
|
+
return styles;
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
var applyCheckmarkByFontSize = function (responsiveStyles, target, colorProperty, isRadio) {
|
|
54
|
+
responsiveStyles.apply(target, ['font_size', colorProperty], function (fontSize, color) {
|
|
55
|
+
var scaledSize = scaleCheckboxSize(fontSize);
|
|
56
|
+
return isRadio ? radio(scaledSize, color) : checkbox(scaledSize, color);
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
var applyLabelHeightByFontSize = function (responsiveStyles, target) {
|
|
60
|
+
responsiveStyles.apply(target, ['font_size', 'line_height'], function (fontSize, lineHeight) {
|
|
61
|
+
if (!lineHeight)
|
|
62
|
+
lineHeight = scaleCheckboxSize(fontSize);
|
|
63
|
+
var topOffset = (lineHeight - fontSize) / 2;
|
|
64
|
+
return {
|
|
65
|
+
position: 'relative',
|
|
66
|
+
top: "-".concat(topOffset, "px"),
|
|
67
|
+
lineHeight: "".concat(lineHeight, "px")
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
var applyCheckmark = function (responsiveStyles, target, colorProperty) {
|
|
72
|
+
responsiveStyles.apply(target, ['height', 'height_unit', 'width', 'width_unit', colorProperty], function (height, heightUnit, width, widthUnit, color) {
|
|
73
|
+
return {
|
|
74
|
+
boxShadow: "inset ".concat(width).concat(widthUnit, " ").concat(height).concat(heightUnit, " #").concat(color),
|
|
75
|
+
clipPath: checkmarkClipPath
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
function applyCheckableInputStyles(element, responsiveStyles) {
|
|
80
|
+
responsiveStyles.addTargets('checkbox', 'checkboxCheckmark', 'checkboxSelected', 'checkboxHover', 'checkboxCheckmarkHover', 'checkboxLabel');
|
|
81
|
+
var _a = element.servar, type = _a.type, multiple = _a.metadata.multiple;
|
|
82
|
+
var isRadioGroup = type === 'select' || (type === 'matrix' && !multiple);
|
|
83
|
+
var isCheckboxGroup = type === 'multiselect' ||
|
|
84
|
+
type === 'checkbox_group' ||
|
|
85
|
+
(type === 'matrix' && multiple);
|
|
86
|
+
var scaleWithFontSize = isCheckboxGroup || isRadioGroup;
|
|
87
|
+
// width/height styles
|
|
88
|
+
if (scaleWithFontSize) {
|
|
89
|
+
applyLabelHeightByFontSize(responsiveStyles, 'checkboxLabel');
|
|
90
|
+
applyHeightWidthMarginByFontSize(responsiveStyles, 'checkbox', true);
|
|
91
|
+
applyHeightWidthMarginByFontSize(responsiveStyles, 'checkboxCheckmark', true);
|
|
92
|
+
applyHeightWidthMarginByFontSize(responsiveStyles, 'checkboxCheckmarkHover', true);
|
|
93
|
+
applyCheckmarkByFontSize(responsiveStyles, 'checkboxCheckmark', 'selected_font_color', isRadioGroup);
|
|
94
|
+
applyCheckmarkByFontSize(responsiveStyles, 'checkboxCheckmarkHover', 'hover_font_color', isRadioGroup);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
responsiveStyles.applyHeight('checkbox');
|
|
98
|
+
responsiveStyles.applyWidth('checkbox');
|
|
99
|
+
responsiveStyles.applyHeight('checkboxCheckmark');
|
|
100
|
+
responsiveStyles.applyWidth('checkboxCheckmark');
|
|
101
|
+
responsiveStyles.applyHeight('checkboxCheckmarkHover');
|
|
102
|
+
responsiveStyles.applyWidth('checkboxCheckmarkHover');
|
|
103
|
+
applyCheckmark(responsiveStyles, 'checkboxCheckmark', 'selected_font_color');
|
|
104
|
+
applyCheckmark(responsiveStyles, 'checkboxCheckmarkHover', 'hover_font_color');
|
|
105
|
+
}
|
|
106
|
+
// base styles
|
|
107
|
+
responsiveStyles.applyBorders({ target: 'checkbox' });
|
|
108
|
+
if (!isRadioGroup)
|
|
109
|
+
responsiveStyles.applyCorners('checkbox');
|
|
110
|
+
responsiveStyles.applyBoxShadow('checkbox');
|
|
111
|
+
responsiveStyles.applyColor('checkbox', 'background_color', 'backgroundColor', true);
|
|
112
|
+
responsiveStyles.applySelectorStyles('checkboxHover', {
|
|
113
|
+
prefix: 'hover_',
|
|
114
|
+
important: true
|
|
115
|
+
});
|
|
116
|
+
responsiveStyles.applySelectorStyles('checkboxSelected', {
|
|
117
|
+
prefix: 'selected_',
|
|
118
|
+
important: true
|
|
119
|
+
});
|
|
120
|
+
return responsiveStyles;
|
|
121
|
+
}
|
|
122
|
+
var composeCheckableInputStyle = function (styles, noHover, isRadio) {
|
|
123
|
+
if (noHover === void 0) { noHover = false; }
|
|
124
|
+
if (isRadio === void 0) { isRadio = false; }
|
|
125
|
+
return __assign(__assign({ position: 'static', marginLeft: 5, marginRight: 5, marginTop: 0, marginBottom: 0, appearance: 'none', display: 'grid', placeContent: 'center',
|
|
126
|
+
// On error in Safari, checkboxes can have a misshapen outline so disable
|
|
127
|
+
outline: 'none', borderRadius: isRadio ? '50%' : null }, styles.getTarget('checkbox')), { '&:hover': hoverStylesGuard(noHover ? {} : styles.getTarget('checkboxHover')), '&::before': __assign({ content: "''", transform: 'scale(0)' }, styles.getTarget('checkboxCheckmark')), '&:hover::before': hoverStylesGuard(__assign(__assign({}, styles.getTarget('checkboxCheckmark')), styles.getTarget('checkboxCheckmarkHover'))), '&:checked': __assign({}, styles.getTarget('checkboxSelected')), '&:checked::before': {
|
|
128
|
+
transform: 'scale(1)'
|
|
129
|
+
} });
|
|
130
|
+
};
|
|
131
|
+
function CheckboxField(_a) {
|
|
132
|
+
var element = _a.element, responsiveStyles = _a.responsiveStyles, fieldLabel = _a.fieldLabel, _b = _a.fieldVal, fieldVal = _b === void 0 ? true : _b, _c = _a.onChange, onChange = _c === void 0 ? function () { } : _c, _d = _a.elementProps, elementProps = _d === void 0 ? {} : _d, _e = _a.disabled, disabled = _e === void 0 ? false : _e, children = _a.children;
|
|
133
|
+
var styles = useMemo(function () { return applyCheckableInputStyles(element, responsiveStyles); }, [responsiveStyles]);
|
|
134
|
+
var servar = element.servar;
|
|
135
|
+
return (jsxs("div", __assign({ css: __assign(__assign({}, responsiveStyles.getTarget('fc')), { position: 'relative', display: 'flex' }) }, elementProps, { children: [children, jsx("input", { id: servar.key, name: servar.key, type: 'checkbox', checked: fieldVal, disabled: disabled, onChange: onChange, onFocus: iosScrollOnFocus, "aria-label": element.properties.aria_label, css: __assign(__assign(__assign({}, composeCheckableInputStyle(styles, disabled)), (disabled ? responsiveStyles.getTarget('disabled') : {})), { marginTop: '4px', '&:focus-visible': { border: '1px solid rgb(74, 144, 226)' } }) }), fieldLabel] })));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export { applyCheckableInputStyles, applyHeightWidthMarginByFontSize, composeCheckableInputStyle, CheckboxField as default };
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { _ as __read, u as useBorder, j as jsxs, a as __assign, h as hoverStylesGuard, b as jsx, i as iosScrollOnFocus, r as resetStyles, D as DROPDOWN_Z_INDEX, c as __awaiter, d as __generator, F as FeatheryClient, e as debounce } from './fthry_index.diObxaBS.js';
|
|
2
|
+
import { useRef, useEffect, memo, useState, useCallback } from 'react';
|
|
3
|
+
import { P as Placeholder } from './fthry_Placeholder.Dns0M5df.js';
|
|
4
|
+
import { I as InlineTooltip } from './fthry_InlineTooltip.CKU9xvD_.js';
|
|
5
|
+
import { O as Overlay } from './fthry_Overlay.CAkqWcqE.js';
|
|
6
|
+
import { u as useElementSize } from './fthry_useElementSize.boD8p4bk.js';
|
|
7
|
+
import 'react/jsx-runtime';
|
|
8
|
+
import 'react-dom/client';
|
|
9
|
+
import 'stream';
|
|
10
|
+
import 'events';
|
|
11
|
+
import 'buffer';
|
|
12
|
+
import 'util';
|
|
13
|
+
import 'react-dom';
|
|
14
|
+
|
|
15
|
+
function useMounted() {
|
|
16
|
+
var mounted = useRef(true);
|
|
17
|
+
useEffect(function () {
|
|
18
|
+
mounted.current = true; // Handle remount
|
|
19
|
+
return function () {
|
|
20
|
+
mounted.current = false;
|
|
21
|
+
};
|
|
22
|
+
}, []);
|
|
23
|
+
return mounted;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function isKeydownValid(event) {
|
|
27
|
+
return Boolean(event.isTrusted && event.code);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var SEARCH_DELAY_TIME_MS = 500;
|
|
31
|
+
var EXIT_DELAY_TIME_MS = 200;
|
|
32
|
+
function AddressLine1(_a) {
|
|
33
|
+
var _this = this;
|
|
34
|
+
var element = _a.element, responsiveStyles = _a.responsiveStyles, fieldLabel = _a.fieldLabel, _b = _a.elementProps, elementProps = _b === void 0 ? {} : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, autoComplete = _a.autoComplete, editMode = _a.editMode, _d = _a.repeatIndex, repeatIndex = _d === void 0 ? null : _d, _e = _a.onSelect, onSelect = _e === void 0 ? function () { } : _e, _f = _a.onChange, onChange = _f === void 0 ? function () { } : _f, required = _a.required, _g = _a.onBlur, onBlur = _g === void 0 ? function () { } : _g, _h = _a.onEnter, onEnter = _h === void 0 ? function () { } : _h, _j = _a.setRef, setRef = _j === void 0 ? function () { } : _j, _k = _a.value, value = _k === void 0 ? '' : _k, inlineError = _a.inlineError, children = _a.children;
|
|
35
|
+
var servar = element.servar;
|
|
36
|
+
var options = useAddressSearch(value, servar);
|
|
37
|
+
var _l = __read(useState(false), 2), showOptions = _l[0], setShowOptions = _l[1];
|
|
38
|
+
var _m = __read(useState(false), 2), focused = _m[0], setFocused = _m[1];
|
|
39
|
+
var inputRef = useRef(null);
|
|
40
|
+
var containerRef = useRef(null);
|
|
41
|
+
var fieldWrapperRef = useRef(null);
|
|
42
|
+
var dropdownWidth = useElementSize(fieldWrapperRef).width;
|
|
43
|
+
var _o = useBorder({
|
|
44
|
+
element: element,
|
|
45
|
+
error: inlineError,
|
|
46
|
+
breakpoint: responsiveStyles.getMobileBreakpoint()
|
|
47
|
+
}), borderStyles = _o.borderStyles, customBorder = _o.customBorder;
|
|
48
|
+
return (jsxs("div", __assign({ ref: containerRef, css: __assign({ maxWidth: '100%', width: '100%', height: '100%', position: 'relative', pointerEvents: editMode ? 'none' : 'auto' }, responsiveStyles.getTarget('fc')) }, elementProps, { children: [children, fieldLabel, jsxs("div", __assign({ ref: fieldWrapperRef, css: __assign(__assign(__assign({ position: 'relative', width: '100%',
|
|
49
|
+
// Prevent placeholder overflow
|
|
50
|
+
overflowX: 'clip' }, responsiveStyles.getTarget('sub-fc')), (disabled ? responsiveStyles.getTarget('disabled') : {})), { '&:hover': hoverStylesGuard(disabled
|
|
51
|
+
? {}
|
|
52
|
+
: __assign(__assign({}, responsiveStyles.getTarget('hover')), borderStyles.hover)), '&&': focused
|
|
53
|
+
? __assign(__assign({}, responsiveStyles.getTarget('active')), borderStyles.active) : {} }) }, { children: [customBorder, jsx("input", { id: servar.key, name: servar.key, css: __assign(__assign(__assign({ position: 'relative', height: '100%', width: '100%', border: 'none', margin: 0, backgroundColor: 'transparent' }, resetStyles), responsiveStyles.getTarget('field')), (focused || value || !element.properties.placeholder
|
|
54
|
+
? {}
|
|
55
|
+
: { color: 'transparent !important' })), maxLength: servar.max_length, minLength: servar.min_length, placeholder: '', disabled: disabled, "aria-label": element.properties.aria_label, autoComplete: autoComplete === 'on' ? 'street-address' : 'new-password', value: value, ref: function (ref) {
|
|
56
|
+
inputRef.current = ref;
|
|
57
|
+
setRef(ref);
|
|
58
|
+
}, onKeyDown: function (e) {
|
|
59
|
+
if (!isKeydownValid(e))
|
|
60
|
+
return;
|
|
61
|
+
if (e.key === 'Enter')
|
|
62
|
+
onEnter(e);
|
|
63
|
+
else
|
|
64
|
+
setShowOptions(e.key !== 'Escape');
|
|
65
|
+
}, onFocus: function (event) {
|
|
66
|
+
setFocused(true);
|
|
67
|
+
iosScrollOnFocus(event);
|
|
68
|
+
}, onBlur: function (e) {
|
|
69
|
+
setTimeout(function () { return setShowOptions(false); }, EXIT_DELAY_TIME_MS);
|
|
70
|
+
onBlur(e);
|
|
71
|
+
setFocused(false);
|
|
72
|
+
}, onChange: onChange, required: required }), jsx(Overlay, __assign({ show: showOptions && options.length > 0, targetRef: inputRef, containerRef: containerRef, placement: 'bottom-start', offset: 4, onHide: function () { return setShowOptions(false); } }, { children: jsx("ul", __assign({ css: __assign({ zIndex: DROPDOWN_Z_INDEX, listStyleType: 'none', padding: 0, margin: 0, backgroundColor: 'white', cursor: 'pointer', boxShadow: '0 0 4px rgb(0 0 0 / 15%)', width: dropdownWidth !== undefined ? "".concat(dropdownWidth, "px") : '100%' }, responsiveStyles.getTarget('dropdown')) }, { children: options.map(function (_a) {
|
|
73
|
+
var display = _a.display, addressId = _a.address_id;
|
|
74
|
+
return (jsx("li", __assign({ css: {
|
|
75
|
+
padding: '8px 14px',
|
|
76
|
+
transition: '0.1s ease all',
|
|
77
|
+
'&:hover': hoverStylesGuard({
|
|
78
|
+
backgroundColor: '#e6e6e633'
|
|
79
|
+
})
|
|
80
|
+
}, onClick: function () { return __awaiter(_this, void 0, void 0, function () {
|
|
81
|
+
var details;
|
|
82
|
+
var _a;
|
|
83
|
+
return __generator(this, function (_b) {
|
|
84
|
+
switch (_b.label) {
|
|
85
|
+
case 0: return [4 /*yield*/, new FeatheryClient().addressDetail(addressId)];
|
|
86
|
+
case 1:
|
|
87
|
+
details = _b.sent();
|
|
88
|
+
onSelect(details, addressId);
|
|
89
|
+
setShowOptions(false);
|
|
90
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
91
|
+
return [2 /*return*/];
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}); } }, { children: display }), display));
|
|
95
|
+
}) })) })), jsx(Placeholder, { value: value, element: element, responsiveStyles: responsiveStyles, repeatIndex: repeatIndex }), jsx(InlineTooltip, { containerRef: containerRef, id: element.id, text: element.properties.tooltipText, responsiveStyles: responsiveStyles, repeat: element.repeat })] }))] })));
|
|
96
|
+
}
|
|
97
|
+
function useAddressSearch(searchTerm, servar) {
|
|
98
|
+
var _a;
|
|
99
|
+
var meta = servar.metadata;
|
|
100
|
+
var active = meta.address_autocomplete;
|
|
101
|
+
var country = (_a = meta.autocomplete_country) !== null && _a !== void 0 ? _a : '';
|
|
102
|
+
var mounted = useMounted();
|
|
103
|
+
var _b = __read(useState(searchTerm), 2), term = _b[0], setTerm = _b[1];
|
|
104
|
+
var _c = __read(useState([]), 2), results = _c[0], setResults = _c[1];
|
|
105
|
+
var fetchAddresses = useCallback(debounce(function (newTerm) {
|
|
106
|
+
new FeatheryClient()
|
|
107
|
+
.addressSearchResults(newTerm, country, servar.type === 'gmap_city')
|
|
108
|
+
.then(function (addresses) {
|
|
109
|
+
if (mounted.current) {
|
|
110
|
+
setResults(addresses);
|
|
111
|
+
setTerm(newTerm);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}, SEARCH_DELAY_TIME_MS), [setResults, setTerm]);
|
|
115
|
+
useEffect(function () {
|
|
116
|
+
var trimmedTerm = searchTerm.trim();
|
|
117
|
+
if (!active || trimmedTerm === term)
|
|
118
|
+
return;
|
|
119
|
+
if (trimmedTerm.length > 3)
|
|
120
|
+
fetchAddresses(trimmedTerm);
|
|
121
|
+
else {
|
|
122
|
+
if (results.length)
|
|
123
|
+
setResults([]);
|
|
124
|
+
setTerm(trimmedTerm);
|
|
125
|
+
}
|
|
126
|
+
}, [searchTerm]);
|
|
127
|
+
return results;
|
|
128
|
+
}
|
|
129
|
+
var index = memo(AddressLine1);
|
|
130
|
+
|
|
131
|
+
export { index as default };
|